3.3 KiB
3.3 KiB
Voyage Development Instructions (Claude Code)
Project
- Name: Voyage
- Purpose: Build and maintain a self-hosted travel companion web app (fork of AdventureLog).
- Stack: SvelteKit 2 (TypeScript) frontend · Django REST Framework (Python) backend · PostgreSQL + PostGIS · Memcached · Docker · Bun (frontend package manager)
Architecture Overview
- Use the API proxy pattern: never call Django directly from frontend components.
- Route all frontend API calls through
frontend/src/routes/api/[...path]/+server.ts. - Proxy target is
http://server:8000; preserve session cookies and CSRF behavior. - AI chat is embedded in Collections → Recommendations via
AITravelChat.svelte. There is no standalone/chatroute. Chat providers are loaded dynamically fromGET /api/chat/providers/(backed by LiteLLM runtime providers + custom entries likeopencode_zen). Chat conversations stream via SSE through/api/chat/conversations/. - Service ports:
web→:8015server→:8016db→:5432cache→ internal only
- Keep authentication session-based with
django-allauth. - Fetch CSRF token from
/auth/csrf/and sendX-CSRFTokenon mutating requests. - Preserve mobile middleware support for
X-Session-Token.
Codebase Layout
- Backend root:
backend/server/- Apps:
adventures/,users/,worldtravel/,integrations/,achievements/,chat/ - Chat provider config:
backend/server/chat/llm_client.py(CHAT_PROVIDER_CONFIG)
- Apps:
- Frontend root:
frontend/src/- Routes:
src/routes/ - Shared types:
src/lib/types.ts(includesChatProviderCatalogEntry) - Components:
src/lib/components/(includesAITravelChat.svelte) - Locales:
src/locales/
- Routes:
Development Workflow
- Develop Docker-first. Start services with Docker before backend-dependent work.
- Use these commands:
Frontend (prefer Bun)
cd frontend && bun run formatcd frontend && bun run lintcd frontend && bun run checkcd frontend && bun run buildcd frontend && bun install
Backend (Docker required; prefer uv for local Python tooling)
docker compose exec server python3 manage.py testdocker compose exec server python3 manage.py migrate
Docker
docker compose up -ddocker compose down
Pre-Commit Checklist
Run in this exact order:
cd frontend && bun run formatcd frontend && bun run lintcd frontend && bun run checkcd frontend && bun run build
ALWAYS run format before committing.
Known Issues (Expected)
- Frontend
bun run check: 3 type errors + 19 warnings expected - Backend tests: 2/3 fail (expected)
- Docker dev setup has frontend-backend communication issues (500 errors beyond homepage)
Key Patterns
- i18n: wrap user-facing strings with
$t('key') - API access: always use proxy route
/api/[...path]/+server.ts - Styling: prefer DaisyUI semantic classes (
bg-primary,text-base-content) - CSRF handling: use
/auth/csrf/+X-CSRFToken - Chat providers: dynamic catalog from
GET /api/chat/providers/; configured inCHAT_PROVIDER_CONFIG
Conventions
- Do not attempt to fix known test/configuration issues as part of feature work.
- Use
bunfor frontend commands,uvfor local Python tooling where applicable. - Commit and merge completed feature branches promptly once validation passes (avoid leaving finished work unmerged).