You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
**[→ Try it live](https://pomodoro-jam.vercel.app)** · [Report a bug](https://github.com/MinitJain/pomodoro-jam/issues) · [Request a feature](https://github.com/MinitJain/pomodoro-jam/issues)
13
13
14
-
<!-- Add a screenshot or GIF here after your first deploy — drag an image into this edit field on GitHub -->
-**Solo focus is hard.** Shared accountability makes it stick.
23
-
-**One host starts a timer, shares a link.** Everyone joins and sees the same second.
24
-
-**When it ends, everyone breaks together.** No meetings. No distractions. Just shared focus.
24
+
Solo focus is hard. Shared accountability makes it stick. One person starts a timer, shares a link — everyone joins and sees the exact same second. When it ends, everyone breaks together. No meetings. No coordination. Just shared focus.
25
25
26
26
---
27
27
28
28
## Features
29
29
30
-
|| Feature | Description |
31
-
|---|---|---|
32
-
| 🎯 |**Synchronized timer**| Clock-based, drift-resistant. Everyone is on the same second, always. |
33
-
| 🎸 |**Jam Mode**| Switch between Host (you control) and Jam (everyone controls) mid-session. |
34
-
| 🔊 |**Focus Noise**| Brown, white, pink noise and rain — generated by Web Audio API, no CDN. |
35
-
| 👥 |**Live participants**| See who's focusing with you via real-time presence. |
36
-
| 🏷️ |**Guest nicknames**| Guests can set a display name — visible to everyone in the session. |
37
-
| 🔔 |**Break notifications**| Browser push notification when your session ends. |
38
-
| 📊 |**Analytics dashboard**| Track pomodoros, focus hours, streaks, and a GitHub-style activity heatmap. |
39
-
| 🔄 |**Auto start**| Optionally auto-start breaks or next focus sessions when the timer ends. |
The timer is clock-based using a `startedAt` Unix timestamp rather than a local countdown. This means everyone in the session — regardless of when they joined or how bad their connection is — always sees the correct second. No drift, no skew.
37
+
38
+
---
39
+
40
+
### Host Mode & Jam Mode
41
+
42
+

43
+

44
+
45
+
Every session has two control modes you can switch between at any time:
46
+
47
+
-**Host mode** — only the host can start, pause, skip, or change settings. Everyone else follows along in sync.
48
+
-**Jam mode** — anyone in the session can control the timer, like a group decision. Great for teams where everyone should have equal say.
49
+
50
+
The current mode is visible to all participants in real time.
Watchers can't change settings directly, but they can request a change. The host receives an inline card showing exactly what the watcher wants to change — a diff of old vs. new values — and can accept or reject with one tap. If accepted, the settings apply immediately for everyone.
The panel is collapsible. A green pulse dot appears next to "Focus Noise" when a sound is active, so you always know something's playing.
74
+
75
+
---
76
+
77
+
### Live Participants & Activity Feed
78
+
79
+
See who's focusing alongside you via real-time presence. When someone joins or leaves, a floating activity message appears at the bottom of the screen. The same feed shows timer events — when someone starts, pauses, or skips — so the whole group stays in the loop without any chat.
No account needed. Guests are prompted to set a display name when they first join a session. The name is saved per-session in `localStorage` so it persists across page reloads. It shows up in the participant list and activity feed for everyone in the room.
88
+
89
+
---
90
+
91
+
### Timer Settings
92
+
93
+

94
+
95
+
Fully configurable per-session:
96
+
97
+
- Focus, short break, and long break durations (in minutes)
98
+
- Long break interval (how many focus rounds before a long break)
When the timer ends, a full-screen break overlay appears for all participants simultaneously. Browser push notifications fire at the same moment — useful if you've switched tabs. The overlay disappears as soon as the next session starts.
All data is logged to the `pomodoro_logs` table whenever a focus session completes.
126
+
127
+
---
128
+
129
+
### Explore Page
130
+
131
+

132
+
133
+
Browse all live sessions happening right now without needing a direct link. The explore page shows active sessions updated in the last 5 minutes — session title, host name, and current mode. Click any card to join instantly.
134
+
135
+
---
136
+
137
+
### One-Tap Share
138
+
139
+
<!-- SCREENSHOT: Share panel / invite button -->
140
+
141
+
The share panel lets you copy the session link or trigger the native OS share sheet (on mobile). Guests can only share if the host has "Allow guests to invite" enabled in settings — the host controls whether the room is open or invite-only.
142
+
143
+
---
144
+
145
+
### Dark / Light Theme & PWA
146
+
147
+

148
+

149
+
150
+
Theme toggles between dark and light, persisted per device. The app is installable as a PWA on mobile and desktop — the favicon and tab title update live with the current timer countdown.
47
151
48
152
---
49
153
50
154
## How it works
51
155
52
-
1.**Start** — click "Start a session" and choose Host or Join
156
+
1.**Start** — click "Start a session" on the landing page
53
157
2.**Share** — hit the Invite button and send the link to anyone
54
158
3.**Pick your mode** — toggle between **Host** (you lead) and **Jam** (everyone drives)
55
159
4.**Focus** — hit Play. Everyone sees the same countdown, on the same second
@@ -61,16 +165,16 @@ No account needed. Start in under 30 seconds.
0 commit comments