/L-Atwitter

L-Atwitter is a social media application clone Twitter

Primary LanguageJavaMIT LicenseMIT

L-Atwitter

Lines-of-Code

L-Atwitter is a social media application clone that allows users to connect and share their thoughts and experiences with others. With a robust system design and a reliable technology stack, Twitter provides a seamless and secure user experience.
L-Atwitter developed with a microservice approach using the Spring Framework and React.js.
See more demo screenshots below.

Home page

Technology stack

Back-end:

  • Java 17
  • Spring Boot 2.7.15
  • Spring Web
  • Spring Security
  • Spring Data Jpa
  • Spring Cloud
  • PostgreSQL
  • Gradle
  • JUnit

Front-end:

  • React.js
  • TypeScript
  • Redux-Saga
  • Material-UI
  • Jest
  • Enzyme

Additional tools

  • Apache Kafka
  • AWS S3 bucket
  • OpenFeign
  • Discovery Server
  • Spring Api Gateway
  • Distributed tracing with Zipkin
  • Spring cloud config server
  • Model mapper
  • Testcontainers
  • LiquiBase
  • Mockito
  • 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.

DataGraph

Work in progress

  • Front-end refactoring
  • Back-end refactoring

How to run application locally

  1. Install Java: link
  2. Install Gradle: link
  3. Install Intellij IDEA Ultimate: link
  4. Install Docker and Docker Desktop link
  5. Add Lombok plugin to the Intellij IDEA: link
  6. Make sure Java 17 is selected: link
  7. In the docker-compose file link run 3 services: postgres,zipkin, rabbitmq
  8. Create DBs: user, tweet, chat, lists, notification, tag, topic
  9. Sign up for a new AWS account: link and create a new AWS S3 bucket: link
  10. Change access from private to public in the AWS S3 bucket and add a public access policy to the AWS S3 bucket doc,
  11. Get AWS keys link and add to the image-service.yml config file add bucket, access-key, secret-key properties
  12. Sign up for gmail and create google API keys: link
  13. Add google API key to the tweet-service.yml config file
  14. Add gmail account and password to the email-service.yml config file
  15. Go to link (important) and change to: “Allow less secure apps: ON”
  16. Install node.js and npm: link
  17. Open terminal in frontend-client directory link and type: npm install (or yarn install)
  18. Run services in this order:
  • eureka-server
  • config-server
  • api-gateway
  • user-service
  • tweet-service
  • user-service
  • topic-service
  • tag-service
  • lists-service
  • chat-service
  • notification-service
  • email-service
  • image-service
  • websocket-service
  1. Open terminal in frontend-client directory link and type: npm start or run via package.json
  2. Navigate to http://localhost:3000/home
  3. To enter the application you can register or login:
  • login: androsor2026@gmail.com
  • password: qwerty123

Screenshots

Sign In

SignIn

Sign Up

SignUp

Send registration code

SendRegistrationCode

Home

Home

Home Tweet

HomeTweet

Home Tweet Big Page

HomeTweetBigPage

Add Tweet

AddTweet

Explore Top

ExploreTop

Explore People

ExplorePeople

Bookmarks

Bookmarks

Notification

Notification

Chat Messages

ChatMessages

New Message

NewMessage

Lists

Lists

Current Lists

CurrentLists

New Lists

NewLists

Profile

Profile

Another Profile

AnotherProfile

Profile Tweets

ProfileTweets

Profile Replies

ProfileReplies

Profile Likes

ProfileLikes

Profile Media

ProfileMedia

More

More

More Setting

MoreSetting

More Setting Accessibility

MoreSettingAccessibility

More Setting Account

MoreSettingAccount

More Setting Notification

MoreSettingNotification

More Setting Privacy

MoreSettingPrivacy

More Setting Security

MoreSettingSecurity

More Setting Additional

MoreSettingAdditional

More Custom

MoreSettingCustom

More Topic Followed

MoreTopicFollowed

More Topic Suggested

MoreTopicSuggested

Log Out

LogOut