Twitter clone
Twitter clone developed with a microservice approach using the Spring Framework and React.js.
The project is always updated with new features.
See more demo screenshots below.
Used Technologies:
- Back-end: Java 17, Spring (Boot, Cloud, Data, Security), JPA / Hibernate, PostgreSQL, JUnit, Mockito
- Front-end: TypeScript, React.js, Redux-Saga, Material-UI, Jest, Enzyme
- Security: JWT
- AWS S3 bucket
- Docker
Features
- Authentication with JWT and Email validation. Password change.
- Users can Add tweets, Like, Retweet, Reply, Quote tweets, Schedule tweets.
- Users can Delete tweets, Send tweet via Direct Message, Add tweet to Bookmarks.
- Users can Create Lists, Edit Lists, Add other users to Lists, Follow List, Pin Lists.
- Users get notifications when someone subscribed, retweet or liked tweet.
- Users can add Images to tweet, Create Poll and vote, Post tweets with link preview, Posts tweets with YouTube video link.
- Websocket online chats.
- Private user profile and lists.
- Account Settings.
- Users can subscribe to each other.
- User can edit profile.
- User can block and mute other users.
- Users can customize site color scheme and color background.
- Users can search tweets by hashtags and search other users and users tweets.
- All images downloads on Amazon S3 bucket.
Work in progress
- Advanced search
- User mentions
- Tweet thread
- Front-end refactoring
- Back-end refactoring
- Adaptive layout
Installation
- Install maven: link
- Install Java: link
- Install Postgresql: link
- Install Intellij IDEA Ultimate: link
- Install Docker and Docker Desktop
- Add Lombok plugin to the Intellij IDEA: link
- Make sure Java 17 is selected: link
- Build the project with Maven: link
- In the docker-compose file link run 4 services:
postgres
,pgadmin
,zipkin
,rabbitmq
link - Open http://localhost:5050/browser/ and create DBs:
user
,tweet
,chat
,lists
,notification
,tag
,topic
- Sign up for a new AWS account: link
- Create a new AWS S3 bucket: link
- Change access from private to public in the AWS S3 bucket
- Add a public access policy to the AWS S3 bucket (!!!important!!! see: doc, github examle or my example)
- Get AWS keys: link and add to the application.properties file: link
- In the image-service.yml config file add bucket, access-key, secret-key properties
- Sign up for gmail
- Create google API keys: link
- Add google API key to the tweet-service.yml config file
- Add gmail account and password to the email-service.yml config file
- Go to link (important) and change to: βAllow less secure apps: ONβ
- Install node.js and npm: link
- Open terminal in frontend directory and type: npm install (or yarn install)
- Run services in this order:
- eureka-server
- config-server
- api-gateway
- user-service
- and then all other services in any order link
- Open terminal in frontend directory and type: npm start or run via package.json
- Navigate to http://localhost:3000/home
To enter the application you can register or login:
Login: [email protected]
Password: qwerty123