2.5 KiB
Nat20 Notes — agent guide
Commands
docker compose up -d --build— build & launch both services (backend :8000, frontend :8020)cd frontend && npm run dev— Vite dev server (proxies/api→localhost:8000)- No tests, no lint/typecheck scripts exist. Don't look for them.
Architecture
- Two Docker Compose services:
backend(Python 3.11, FastAPI, SQLite, WhisperX as lib) andfrontend(React 18 + Vite + Tailwind, served by nginx which proxies/api→ backend). - Data lives in Docker volume
app_dataat/data(SQLite DB +uploads/audio/transcripts/notessubdirs). No external DB. - Background jobs (transcribe, summarize) run via in-process
ThreadPoolExecutor(max_workers=2)— no Redis/Celery. - Frontend serves on port 8020 (d20 nod).
Critical convention: per-campaign settings schema
Settings are split into global (settings table, just onboarding_completed) and per-campaign (campaign_settings table, everything else). Every layer must share the exact same keys:
backend/app/config.py:CAMPAIGN_SETTINGS, frontend/src/api.ts:CampaignSettings, campaigns router, and Settings/Setup pages. New campaigns inherit settings from the "default" campaign on creation.
The settings router (/api/settings) only handles global; campaign settings live at /api/campaigns/{id}/settings.
When adding a setting key, add it to config.py:CAMPAIGN_SETTINGS, the frontend type, and both the backend router and frontend Settings page.
Docker / framework quirks
- Torch pinned to
2.3.1withcu121wheels (--extra-index-url https://download.pytorch.org/whl/cu121) — cuDNN ABI compat withctranslate2. Don't bump unpinned. - Backend Dockerfile is two-stage (builder + runtime). ffmpeg required in runtime for audio extraction.
- nginx
client_max_body_size500M, proxy timeouts 3600s. Files >15MB auto-chunked by frontendcreateSession(). - Frontend changes in Compose mode require a rebuild (
docker compose up -d --build). Vite dev server is for local-only dev.
Tailwind theme
Custom colors (deep, panel, brass, ember, etc.) and fonts (Fraunces, Inter, IBM Plex Mono) in tailwind.config.js. Reusable component classes in frontend/src/styles.css (.card, .btn-primary, .btn-secondary, .input, .eyebrow) — use these over raw Tailwind utilities.
Constraints
- Requires NVIDIA Container Toolkit + HuggingFace token for speaker diarization.
- First run: setup wizard, then
onboarding_completedflag gates access to main UI. - Default Ollama endpoint:
http://localhost:11434.