All projects

Case study

Scubalog

A whitelabel platform for diving communities and schools: courses, students, instructors and real-time chat. Every club runs under its own name and its own logo.

Client
Own product, scubalog.ru, Russia
Years
2025 — ongoing
Scope
Product management, project management, development (frontend, backend), hosting, architecture
Stack
Next.js and TypeScript, React, Prisma and SQLite, Server-Sent Events

The problem

A dive club lives in messengers and spreadsheets: the course group in one chat, the instructors in another, the student lists and their progress in a file that one person keeps. Teaching, meanwhile, requires memory: who is on which course, what has been passed, what has been assigned, what notes the instructor left.

They needed one system where communication and record-keeping live together — and where every club appears under its own brand rather than somebody else’s.

What we did

Result

Tens of thousands of messages a day In real time, for thousands of users.

Why so few moving parts

Problems like this are usually solved with a message broker, a separate cache and a cluster of websockets. We did without: updates travel as an ordinary event stream over HTTP, and the data sits in SQLite. Fewer nodes means less that breaks at night and needs someone on call.

This is not saving on reliability but sourcing it differently: a system made of few parts is easier to keep running for years. The logic is covered by more than a hundred automated tests.