A real-time collaborative Pomodoro timer designed for teams to sync their focus sessions, manage shared tasks, and stay in flow together.
Live Demo: pomopomo.site
- Real-time Synchronization: Room state, timer, and tasks sync instantly across all clients using WebSockets.
- Collaborative Queue: Shared timer queue where any participant can add or reorder segments.
- Task Management: Public and private tasks linked to specific focus segments.
- Smart Alerts: Audio and visual notifications for segment changes and breaks.
- Clean Architecture: Built with a separation of concerns (Core, Infrastructure, Application) for maintainability.
| Landing Page | Join Session |
|---|---|
![]() |
![]() |
| Create Room | Room View |
|---|---|
![]() |
![]() |
| Settings | Drawing Board |
|---|---|
![]() |
![]() |
.
├── src/
│ ├── app/ # Next.js Frontend (App Router)
│ ├── ws-server/ # WebSocket Server (Socket.io)
│ ├── core/ # Business Logic & Use Cases
│ └── infrastructure/ # Database, Cache, and Auth adapters
├── docs/ # Documentation Hub
├── scripts/ # Utility and Deployment scripts
└── docker-compose.yml # Local development services
- Node.js 18+
- Docker & Docker Compose (for PostgreSQL and Redis)
-
Clone and Install
git clone <repo-url> cd pomopomo npm install
-
Environment Configuration Copy the example environment file:
cp .env.example .env
-
Start Infrastructure Start the database and Redis containers:
docker compose up -d
-
Run Development Servers You can start both the frontend and WebSocket server using the helper script:
./scripts/restart-dev.sh
Or run them individually in separate terminals:
npm run dev # Frontend (http://localhost:3000) npm run ws:dev # WebSocket Server (ws://localhost:3001)
The application is configured via environment variables. See .env.example for the list of required variables.
- Database: PostgreSQL connection string.
- Redis: Used for Socket.io adapter and rate limiting.
- Auth: JWT secrets for session management.
For production deployment instructions, please refer to the Deployment Guide.
No production credentials are stored in this repository. All sensitive configuration is managed via environment variables.
For more detailed documentation, visit the Documentation Hub.





