Letschat / docs /DEV-ONBOARDING.md
HonzaH's picture
Upload 188 files
43309f4 verified
|
Raw History Blame Contribute Delete
4.07 kB
Dev onboarding
Aktualizováno: 2025-12-09T18:28:33.300Z
Cíl: rychlý start pro vývojáře včetně lokálního běhu, testů a synchronizace. Detaily k PR a workflow viz `.github/CONTRIBUTING.md` (neopakujeme se).
- TypeScript striktní, Zod validace vstupů, důsledný error handling a logging.
- DRY a čistá architektura: sdílené konstanty/utilities/hooks; žádné kopírování kódu ani instrukcí.
- Testovatelnost a výkon: přidej testy před refaktorem; hlídej 80 % statements coverage gate.
- Design/UX: drž se podkladů v `doc/design`; komponenty stavěj na stávajícím UI (Tailwind, Zustand, Headless UI).
- Design implementation: HTML šablony `doc/design/template/`, CSS `doc/design/storage/css/style.css`.
- Auth: `.page.imageleft` (obrázek vlevo, obsah vpravo, bez patičky).
- Dashboard/Profil: `.page.full`.
- Chat: `.page.leftright`.
- Testovací místnost: `/about?test=1` (rychlé UI ověření bez backendu).
- Funkční zadání: ověřuj chování podle `docs/REQUIREMENTS.md` (shrnutí `doc/lestchat.md`).
1) Prerequisites
- Node.js 20.
- Nainstaluj závislosti: `npm ci`.
- Environment: `.env.local` s `NEXT_PUBLIC_SUPABASE_URL`, `NEXT_PUBLIC_SUPABASE_ANON_KEY`, případně `LOCAL_DATABASE_URL`, `SUPABASE_SERVICE_ROLE_KEY`, `LOG_LEVEL` (all|light|mini|off). `ALLOW_IN_MEMORY_FALLBACK=1` lze ponechat pro demo/offline běh bez Supabase; `LOCAL_FILE_STORE=1` + `LOCAL_FILE_STORE_PATH` umožní file-store místo paměti. `ADMIN_API_TOKEN` chrání `/api/admin/logs`. `NEXT_PUBLIC_SUPABASE_*` + `SUPABASE_SERVICE_ROLE_KEY` jsou nutné pro login/registraci. Secrets patří do GitHub Secrets, ne do repa. Veřejné Supabase klíče se při startu injectují do `window.__SUPABASE_CONFIG__`, takže fungují i když byl build vytvořen bez nich (po změně proměnných vždy rebuildni).
2) Lokální databáze (doporučeno)
- Spusť Postgres (např. Docker) a nastav `LOCAL_DATABASE_URL=postgres://dev:pass@localhost:5432/letschat`.
- Inicializuj schéma: `npm run db:local:init` (použije `src/db/localSQLcreate.sql`, vytvoří i `logs`).
3) Spuštění aplikace
- Dev server: `npm run dev` (Next.js App Router, port 3000).
- Nové stránky: `/rooms/create` (formulář pro založení místnosti) a `/transfer` (převod anonymního kódu). Dashboard nyní naviguje na tyto samostatné stránky místo inline formulářů a po založení místnosti proběhne přesměrování do `/room/{id}?code={CODE} `.
- Backend i frontend běží v jednom procesu; Supabase klient respektuje lokální/vzdálené URL dle env. Datový přístup je centralizovaný v `lib/persistence` (lokální DB preferovaná); Supabase slouží pro auth/sync/log fallback (viz `docs/ARCHITECTURE.md`).
- Offline zprávy: klient ukládá zprávy do IndexedDB (`lib/offlineStore`) při výpadku sítě a po návratu online se fronta odešle přes `/api/sync/push` (z `lib/messages.syncPendingMessages`).
- Auth routy: jediný `/login` a `/register` v `src/app/(auth)/*`; statické HTML v `doc/design/template` jsou jen reference.
4) Testy a kvalita
- Jednorázově: `npm test` (Vitest, reporter dot).
- Coverage: `npm test -- --coverage` (CI očekává ≥80 % statements).
- Lint: `npm run lint` (ignoruj vendor skripty v `doc/design/vendor/**` - nejsou součástí runtime). Build: `npm run build`.
5) Sync do Supabase
- Lokálně pracuj nad Postgres; do Supabase pushni až ověřené změny: `npm run sync:push` (vyžaduje `SUPABASE_SERVICE_ROLE_KEY`, upsertuje rooms/codes/room_messages pomocí service role).
- Volitelně pull ze Supabase zpět do lokální DB: `npm run sync:pull` (service role + LOCAL_DATABASE_URL) pro dotažení nových zpráv/kódů z cloudu.
6) Kde hledat kontext
- Data model: `docs/DATAMODEL.md`, SQL ve `src/db/*`.
- Funkční zadání: `docs/REQUIREMENTS.md` (shrnutí `doc/lestchat.md`).
- Architektura a workflow: `.github/CONTRIBUTING.md`, `docs/ARCHITECTURE.md`.
- Designové podklady: `doc/design/`.
Poznámka: před většími UI/arch změnami otevři issue/PR draft s návrhem a odkazy na design/datamodel.