A remote rehabilitation platform: booking, payments, video consultations, personal programmes and video reports for patients, specialists and admins. We built all of it.
01 / 04
ДВИЖ.LAB is a health-tech platform for remote rehabilitation. A patient finds a specialist, books and pays for a consultation, meets them on video, and then follows a personal programme: exercises, written tasks and video reports the specialist reviews and comments on.
For the specialist it replaces a patient CRM, a calendar, a video tool, a messenger, a programme builder and an exercise library. We built all of it: the public site, the app for patients, specialists and administrators, and the backend under them.
Patients, specialists and administrators each get their own workspace, but the rules live in the backend, not in the screens: booking and cancelling, working hours with buffers and blocked time, programmes split into stages, and what each tariff allows — on the advanced one, an exercise counts only once a video report confirms it.
The admin is an operational tool rather than a table editor. A medical document opens only through a separate action that asks for a reason, issues a short-lived link and writes to the audit log.
Payments run through YooKassa with two-stage hold and capture, full and partial refunds, idempotent webhooks and scheduled reconciliation for events that never arrived. A purchase is complete only when the server has confirmed it with the provider; the redirect after checkout proves nothing on its own.
The system also works out the platform's commission and each specialist's payout, including a refund that lands after the payout has already gone.
Consultations are WebRTC video calls through our own TURN server, with signalling in a separate private container so long-lived connections never depend on the public API. Calls reconnect, survive a replaced session and show who is speaking. Chat runs on Socket.IO, scaled across instances through Valkey.
Video reports and chat attachments go straight to object storage through signed uploads. A separate worker takes each file from a queue, compresses video with FFmpeg and images with Sharp, retries what fails and recovers stuck jobs; a video that is already in the right format is repackaged instead of re-encoded.
The public site is a static Astro build: specialist pages are generated from the API, and every booking button carries its intent into the app.
Behind it sit around sixty data models and more than three hundred test files, including integration tests against a real PostgreSQL and end-to-end tests in Playwright, with an 85% coverage floor on the backend.
TypeScript · React · TanStack · Astro · Bun · Hono · PostgreSQL · Prisma · Socket.IO · Valkey · WebRTC · FFmpeg · YooKassa · Yandex Cloud

A rough idea, a half-finished brief or a problem you can't name yet is enough to start. Tell us what you're working on — we'll come back with questions, not a sales pitch.