Roomly is a real-time interactive room system built with Phoenix LiveView. Users can create and join rooms for various activities such as playing games, synchronized music listening, chatting, and Pomodoro focus sessions. The project is designed to be highly interactive, leveraging LiveView, Presence tracking, and GenServer-based room management.
- Dynamic Room Creation: Users can create different types of rooms with customizable configurations.
- Live Presence Tracking: See who is in the room in real-time using Phoenix Presence.
- Pomodoro Timer: Start, track, and sync Pomodoro sessions for focus rooms.
- Stateful Rooms: Each room runs as a GenServer process under a Dynamic Supervisor.
- Persistent User Sessions: Player IDs are stored in
localStoragefor persistence across refreshes.
- Pomodoro Room โณ: Time-based focus sessions with work/break cycles.
- Chat Room ๐ฌ: Simple real-time chat functionality.
- Game Room ๐ฎ: Multiplayer rooms for interactive games.
- Music Room ๐ต: Synchronized listening experience for groups.
- Backend: Elixir, Phoenix LiveView
- Frontend: Tailwind CSS
- Database: PostgreSQL
# Clone the repository
git clone https://github.com/yourusername/roomly.git
cd roomly
# Install dependencies
mix deps.get
npm install --prefix assets
# Setup database
mix ecto.setup
# Start the server
mix phx.serverOnce the server is running, open your browser and go to:
http://localhost:4000
- Click on Join Room to enter.
- Presence tracks who is inside in real-time.
- Click Start Timer to begin the session.
- The timer cycles between work and break periods.
- Live updates ensure all users see the same countdown.
- Click Leave Room to exit.
- Your presence is updated in real-time.
- Each room is a GenServer, dynamically spawned under a Supervisor.
- Registry is used to track running rooms.
- Presence updates the active user list in real-time.
- Room pages update without refresh.
- Live events trigger state changes, like starting the timer or joining a room.
- ๐ฒ Add more room type integrations
- ๐ Auto-stop rooms after inactivity
- ๐ Leaderboard and stats tracking
๐ฌ Have questions or suggestions? Feel free to reach out or open an issue!