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: user2016@gmail.com
Password: qwerty123
Screenshots
Add tweet
Add Poll
Reply tweet
Tweet image modal
Notifications
Full Notifications
Search
Search Videos
Full tweet
Liked by Modal window
Following and Followers
Trends
Bookmarks
Chat
Lists
Full List
Suggested Lists
Settings
Customization
Dark theme profile