3.2 KiB
Malarkey - Twitter Clone with Phoenix LiveView
A full-featured Twitter clone built with Elixir, Phoenix LiveView, and PostgreSQL with OAuth authentication.
Features
Authentication
✅ Email/Password registration and login ✅ OAuth providers (Google, GitHub, Twitter) ✅ Password reset functionality ✅ Email confirmation ✅ Session management with "Remember me" option ✅ Secure password hashing with Pbkdf2 ✅ User settings management
Social Features
✅ Post creation (280 character limit with character counter) ✅ Reposts and Quote Posts ✅ Replies/Comments (threaded conversations) ✅ Like/Unlike posts ✅ Follow/Unfollow users ✅ User profiles with bio, location, website ✅ Profile and header images ✅ Real-time updates via Phoenix PubSub
User Interface
✅ Home timeline feed ✅ Post detail pages with replies ✅ User profile pages (posts, replies, media, likes tabs) ✅ Followers/Following lists ✅ Notifications page ✅ Explore/Search page ✅ Responsive design with Tailwind CSS ✅ Real-time post composer with character counter ✅ Interactive post actions (reply, repost, like, share)
Coming Soon
🚧 Media upload (images, videos, GIFs) 🚧 Direct messaging 🚧 Hashtags and trending topics 🚧 User mentions (@username) 🚧 Bookmarks 🚧 Lists 🚧 Advanced search 🚧 Dark mode toggle
Setup
Prerequisites
- Erlang/OTP 28+
- Elixir 1.19+
- PostgreSQL 12+
Installation
- Install dependencies:
mix deps.get
- Start PostgreSQL and create the database:
sudo systemctl start postgresql # For systemd-based systems
mix ecto.create
mix ecto.migrate
- (Optional) Set up OAuth provider credentials:
export GOOGLE_CLIENT_ID="your_google_client_id"
export GOOGLE_CLIENT_SECRET="your_google_client_secret"
export GITHUB_CLIENT_ID="your_github_client_id"
export GITHUB_CLIENT_SECRET="your_github_client_secret"
export TWITTER_CONSUMER_KEY="your_twitter_consumer_key"
export TWITTER_CONSUMER_SECRET="your_twitter_consumer_secret"
- Start the Phoenix server:
mix phx.server
Visit localhost:4000 in your browser.
Database Schema
- Users: Authentication, profiles, statistics
- Posts: Content, media, relationships (replies, reposts, quotes)
- Likes: User-post favorites
- Follows: User relationships
- OAuth Identities: Third-party authentication
- User Tokens: Sessions, confirmations, password resets
Architecture
Built with Phoenix best practices:
- Context-driven design (Accounts, Social)
- Ecto migrations with proper constraints
- UUID primary keys
- Counter caches for performance
- Real-time updates with PubSub
- Secure authentication with Ueberauth
Next Steps
Complete the LiveView components:
- User registration/login/settings LiveViews
- Timeline with post composer
- Profile pages with tabs
- Post detail views with replies
- Implement Tailwind CSS styling with shadcn-inspired components
Learn more
- Official website: https://www.phoenixframework.org/
- Guides: https://hexdocs.pm/phoenix/overview.html
- Docs: https://hexdocs.pm/phoenix
- Forum: https://elixirforum.com/c/phoenix-forum
- Source: https://github.com/phoenixframework/phoenix