work study-room
Study Room
A collaborative study platform with a coding-interview practice ground. Designed, built, deployed and operated entirely by me — including the code execution engine that runs submissions in five languages without a third-party judge.
- Role
- Sole engineer & designer
- Status
- Live in production
- Commits
- 345
- Site
- studyroom.co.in

Students prepare alone, on tools built for teams.
Interview preparation happens on one set of tools and studying happens on another. Practice platforms are solitary and priced for working engineers; group study runs on video calls never designed for focus.
Study Room puts both in one place: a room you join with a six-character code, sharing a server-synced Pomodoro, chat, notes, tasks, files and voice/video — alongside a practice catalogue with a real grader. Study rooms stay free for students; interview-prep extras fund the infrastructure.
Every constraint was a solo-founder constraint: no per-execution API bill, no media server, no third-party analytics vendor.
- Client
- React 19 + Vite29 pages, PWA, Tailwind v4
- Socket.io clientRooms and collaborative code
- WebRTC peer meshBrowser-native, no SFU
- Server
- Execution enginechild_process, priority queue
- Socket layerTimer ticks, presence
- BillingHMAC-verified webhooks
- Cron jobsDaily challenge, cleanup
- Data & services
- MongoDB35 Mongoose models
- CloudinaryRoom files, auto-expiry
- RazorpaySubscriptions
- Brevo SMTPInvites, notifications
Deployed: Server on Railway, client on Vercel.
A grader, not an API call
Submissions compile and run on my own server through child_process and system compilers — JavaScript, Python, C, C++, Java. Per-test-case scoring against hidden tests, compile-error surfacing, time-limit enforcement, and a concurrency-bounded priority queue so paying users' runs jump the line.
Why: per-execution API pricing does not survive a free tier.
Calls with no media server
Voice and video run as a WebRTC peer-to-peer mesh, which holds cleanly up to six participants — the realistic ceiling for a study room. Speaking detection, fullscreen and minimise live in a floating grid.
Trade-off: mesh bandwidth scales poorly past six, so rooms cap there.
One clock for everyone
The Pomodoro is authoritative on the server and ticks over the socket, so a late joiner sees the same countdown as everyone else rather than starting their own. Completed sessions feed a study streak.
Why: client-side timers drift and desync the room.
- 462
- Registered users
- 147
- Study sessions run
- 58
- Problems solved
Read from Study Room’s public metrics endpoint · snapshot 20 Sept 2026, 08:58 UTC

The problem catalogue, with the day's challenge pinned above a difficulty-tagged list

A problem open beside the editor, with JavaScript, Python, C, C++ and Java selectable

The code playground: an editor in five languages beside its output panel