Twitter Clone
A Twitter clone created with Golang, PostgreSQL, Redis, VueJS and Vite with support for dark mode and light mode using TailwindCSS
Status: Some features are yet to be implemented
Preview
For more check out some screenshots here
✨
Features NOTE: Not all features from twitter are implemented because of how big Twitter is, Only the main features are implemented atm
- Modular Architecture
- Database migration tool using migrate
- Golang Hot-reloading using air
- Supports dark-mode and light-mode with TailwindCSS
- Database seeding script using NodeJS
- Authentication using JWT Refresh token flow and Redis for token blacklisting
- Strongly typed Vuex store
- List Tweets feed
- Create Tweets with images
- Retweets
- Reply to Tweets or reply to another reply!
- Like Tweets
- Follow users
- Images & Media uploads stored in AWS S3 Buckets
- Up to 4 images in a single tweet with the same layout as Twitter
- Crop profile image
- Edit Profile Details
- Edit Profile Image
- See who a user is following and see their followers
ðŸ›
Tech - Golang
- Fiber HTTP framework
- PostgreSQL
- Redis
- NodeJS
- TypeScript
- migrate
- air
- Amazon Web Service S3
- Vue 3
- Vite 2.0
- Vuex 4
- Vue Router 4
- TailwindCSS
How to run locally
Check here on how to run locally
Resources & references used
- https://twitter.com
- https://about.twitter.com/en/who-we-are/brand-toolkit
- https://github.com/shuber/postgres-twitter
- Build a twitter clone using vue.js and tailwind css! (by: this.stephie)
- Is SELECT * Expensive? (by: Hussein Nasser)
- SELECT COUNT (*) can impact your Backend Application Performance, here is why (by: Hussein Nasser)
- Full Text Search PostgreSQL (by: Ben Awad)
- https://www.postgresql.org/message-id/[email protected]
- https://dev.to/shubhadip/vue-3-vuex-4-modules-typescript-2i2o
- https://dev.to/3vilarthas/vuex-typescript-m4j
- Today i learned golang live reload for development using docker compose air (by: Iman Tumorang)
Improvements
- Hashtags and mentions
- Notifications
- Bookmarks
- Lists
- Trending section
Disclaimer
twitter-clone is created for educational purposes only.
I do not work for Twitter nor Twitter the company itself has any associations / involvements in this project.
Hey!
I'm currently looking over your repo and it's pretty good.
In particular I'm looking at how you've organised your module/services, is there any particular reason you decided to opt in the execute pattern for interfaces? I've noticed this pattern used when you need easier accessibility for testing, so you only need to mock the single function a handler might need rather than 10 or so to implement the interface
build(deps): bump trim-newlines from 3.0.0 to 3.0.1
Bumps trim-newlines from 3.0.0 to 3.0.1.
Commits
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)@dependabot use these labels
will set the current labels as the default for future PRs for this repo and language@dependabot use these reviewers
will set the current reviewers as the default for future PRs for this repo and language@dependabot use these assignees
will set the current assignees as the default for future PRs for this repo and language@dependabot use this milestone
will set the current milestone as the default for future PRs for this repo and languageYou can disable automated security fix PRs for this repo from the Security Alerts page.
build(deps): bump browserslist from 4.16.3 to 4.16.6 in /web
Bumps browserslist from 4.16.3 to 4.16.6.
Changelog
Sourced from browserslist's changelog.
Commits
6fe3614
Release 4.16.6 version33ebac9
Update dependencies2128170
Add support for npm-shrinkwrap files alongside package-lock (#595)7cc2aed
Release 4.16.5 version27e4afd
Update dependencies1013a18
Fix version RegExpb879a1a
Use Node.js 16 on CIbd1e9e0
Fix ReDoS (#593)209adf9
Release 4.16.4 version3e2ae3b
Fix typesDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebase
will rebase this PR@dependabot recreate
will recreate this PR, overwriting any edits that have been made to it@dependabot merge
will merge this PR after your CI passes on it@dependabot squash and merge
will squash and merge this PR after your CI passes on it@dependabot cancel merge
will cancel a previously requested merge and block automerging@dependabot reopen
will reopen this PR if it is closed@dependabot close
will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually@dependabot ignore this major version
will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor version
will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependency
will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)@dependabot use these labels
will set the current labels as the default for future PRs for this repo and language@dependabot use these reviewers
will set the current reviewers as the default for future PRs for this repo and language@dependabot use these assignees
will set the current assignees as the default for future PRs for this repo and language@dependabot use this milestone
will set the current milestone as the default for future PRs for this repo and languageYou can disable automated security fix PRs for this repo from the Security Alerts page.
Add automation to the paltform
Thought of implementing an automation process whereby we can have respective searching through different keywords and identifying words with some "Keyword".Thereafter,several actions can be perfomed on the identified handles like Retweeting,liking etc.Another automated task is the screenshoter to enable easy taking of screenshots in the platform.