FyzioDesk
Softvér na chod fyzioterapeutickej praxe, robený pre Slovensko a Česko. Kalendár a online rezervácie, karty klientov a zdravotná dokumentácia, cvičebné plány s videom a prehľadom, ako ich klient plní, faktúry a portál, kde si klienti rezervujú termín a vidia svoj plán.
- Klient
- Môj vlastný produkt
- Moja rola
- Produkt, dizajn a celý kód
- Obdobie
- August 2026 – dodnes
- Stav
- Beží na app.fyziodesk.sk, mobilné appky vo vývoji
- Technológie
- NestJS 11 na Fastify, Next.js 16, React 19, Prisma 7, PostgreSQL 18, Redis, BullMQ, MinIO, Expo, Zod


Prečo som ho postavil
Fyzioterapeuti na Slovensku a v Česku kombinujú rezervačný nástroj, tabuľku klientov, papierové poznámky a cviky vytlačené z internetu. Kým som začal písať kód, porovnal som deväť produktov, od domácich až po Cliniko, Jane a Physitrack. Žiadny nespájal natívne appky pre klienta aj terapeuta, fotodokumentáciu priamo od lehátka a plnenie cvičebného plánu ako hlavné číslo.
FyzioDesk je taký produkt. Klinika, jej miestnosti a terapeuti majú v systéme vlastný oddelený priestor (tenant). Každá rola vidí len to, čo vidieť má.

Karta klienta s mapou bolesti
Štruktúrované záznamy zo šablón, kontraindikácie, ktoré zostávajú navrchu, a mapa tela, na ktorej terapeut označí, kde a ako veľmi to bolí. Zdravotný záznam sa po uložení nedá upraviť: oprava je nová verzia, ktorá odkazuje na pôvodnú.

Online rezervácie
Klient si vyberie službu a čas a vyplní svoje údaje. Potvrdenie príde so súborom .ics na pridanie do kalendára, pripomienky 24 a 2 hodiny vopred.

Cvičebný plán
Domáci program s videom ku každému cviku. Klient si cviky odškrtáva a zapisuje bolesť. Plnenie plánu sa vždy vypočíta a nikdy neukladá, takže nemôže byť zastarané.

Reporty
Čo sa vyfakturovalo a čo nie, koľko času stoja klienti, ktorí neprídu, neskoré zrušenia a vyťaženosť každého terapeuta.
Rozhodnutia, ktoré stoja za zmienku
- Dáta kliník oddeľujú dve vrstvy.V aplikácii kontrolujú členstvo guardy a každá tabuľka s
tenant_idmá politiku PostgreSQL row-level security (pravidlo prístupu k jednotlivým riadkom). API sa pripája ako rola bez superusera a bezBYPASSRLS, a keby sa to niekedy zmenilo, odmietne sa spustiť. - Dvojitá rezervácia nie je len nepravdepodobná, je nemožná.GiST exclusion constraints, pravidlá priamo v databáze nad časovými rozsahmi, nedovolia rezervovať terapeuta ani miestnosť dvakrát na ten istý čas. Test pošle 20 súčasných rezervácií na jeden termín a čaká, že uspeje presne jedna. Našiel tak deadlocky medzi oboma pravidlami, ktoré teraz riešim opakovaním s náhodným oneskorením (jitter).
- Do zdravotných záznamov sa dá iba pridávať.Databázový trigger odmietne akúkoľvek zmenu obsahu uloženého záznamu. Zmeniť sa smie iba príznak zmazania.
- Č sa radí za C.Stĺpce s menami používajú slovenské abecedné radenie (ICU collation), takže zoznam klientov je v poradí, aké slovenský čitateľ čaká.
- Fotky len so súhlasom, odkazy s obmedzenou platnosťou.Súbory sú v privátnych bucketoch MinIO. Nahrávanie aj sťahovanie ide cez podpísané (presigned) URL s platnosťou desať minút, ktoré systém vydá až po kontrole oprávnení.
- AI recepčná, ktorá nevidí zdravotné údaje.MCP server, teda rozhranie, cez ktoré AI asistent pracuje s aplikáciou, mu dáva šesť nástrojov: nájsť klienta, dnešné termíny, voľné termíny, rezervovať, zrušiť, nezaplatené faktúry. Používa verejné API s API kľúčom a k zdravotnej dokumentácii sa nedostane.
V číslach
- 18 modulov API s 271 endpointmi, 72 databázových modelov a 75 migrácií.
- 110 testovacích súborov s viac ako 1 600 testami, ktoré bežia proti skutočnému PostgreSQL a MinIO v kontajneroch.
- Spoločné Zod kontrakty: dostupnosť termínov, stav faktúry, plnenie plánu a QR platby sú v API, vo webovej aplikácii aj v mobilnej appke ten istý kód.
Faktúry majú QR kódy Pay by square a SPAYD a export do ISDOC. Platobné brány, SMS a push notifikácie sú zapojené a čakajú na obchodnícke účty.
