Klientský portál
Cesta: /client
Komponenta: src/pages/ClientPortal.jsx
Role: Veřejné (bez admin přihlášení)
Samostatné rozhraní pro klienty kliniky. Dostupné na stejné doméně jako admin část, ale bez horní navigace.
Struktura portálu
graph TD
ENTRY["/client"] --> OTP[OTP přihlášení]
ENTRY --> PAY["/client?payment=1 — Platební odkaz"]
OTP --> DASH[Dashboard klienta]
DASH --> BOOK[Rezervace termínu]
DASH --> HIST[Historie termínů]
DASH --> CRED[Kreditní účet]
DASH --> CANCEL[Storno termínu]
PAY --> OTP
Přihlášení klientů (OTP)
flowchart TD
A[Klient zadá e-mail nebo telefon] --> B[Backend vygeneruje 6-místný kód]
B --> C[Kód odeslán e-mailem přes Resend]
C --> D[Klient zadá kód]
D --> E{Ověření}
E -- platný --> F{Počet klientů?}
E -- neplatný / expirovaný --> G[Chyba — zkus znovu]
F -- jeden --> H[Přihlášení]
F -- více se stejným kontaktem --> I[Výběr profilu]
F -- žádný --> J[Automatické vytvoření nového klienta]
I & J --> H
Session je uložena v localStorage. Platnost kódu je 10 minut.
Funkce portálu
Rezervace termínu
- Výběr výkonu
- Výběr terapeuta (zobrazí jen ty s volnými sloty v příštích 42 dnech)
- Výběr data (zvýrazněna jen data s dostupnými sloty)
- Výběr konkrétního časového slotu
- Potvrzení → vytvoření
Booking+CalendarEvent+ odeslání platební výzvy e-mailem
Rezervace přes portál mají příznak is_online_booking: true — admin pak nemůže měnit klienta.
Platba
Klient může zaplatit:
- Kreditem (pokud má dostatečný zůstatek)
- Balíčkem sezení (pokud má aktivní)
- Platební bránou (gateway — stav integrace nezjištěn)
Přehled termínů
- Nadcházející termíny s možností storna
- Storno klientem respektuje lhůtu (
cancellation_free_hours) - Historie minulých termínů
Kreditní účet
- Aktuální zůstatek
- Výpis transakcí (dobití, platby, vratky)
Platební flow (příchozí odkaz)
Klient může přijít na portál přímo přes platební odkaz z e-mailu:
/client?payment=1&booking_id=...&date=...&start=...&service=...
Po OTP přihlášení se zobrazí konkrétní rezervace k zaplacení.