Development
Prerequisites
- Node.js 22 (LTS). Dockerfiles use
node:22-bookworm-slim. - pnpm (enable via
corepack enable pnpm). - Docker & Docker Compose (optional, for API + services).
Installation & Bootstrap
bash
pnpm install
cp apps/api/.env.example apps/api/.env
# Provide secrets such as OPENAI_API_KEY, MASTER_KEY, KEY_DERIVATION_SALT.Dev-Server starten
Mit API + anystyle (empfohlen):
bash
pnpm dev:docker
# Startet: anystyle (Docker) + Types + Api + Extension + Docs + Landing (lokal)Ohne API (nur Frontend — Extension, Docs, Landing):
bash
pnpm dev
# Startet: Types + Extension + Docs + Landing (lokal)
# Api läuft, aber anystyle fehlt → Reference-Parsing geht nichtWorkspace Commands
| Command | Description |
|---|---|
pnpm dev:docker | Für API-Entwicklung. Docker (anystyle) + alle Dev-Server lokal |
pnpm dev | Nur lokale Dev-Server (ohne anystyle) |
pnpm build | Alle Packages bauen |
pnpm typecheck | TypeScript-Prüfung workspace-weit |
pnpm preview | Preview für docs + landing |
pnpm test | Tests ausführen (bereitgestellt, sobald Tests existieren) |
pnpm lint | ESLint workspace-weit |
Workflow
- API starten:
pnpm devoderpnpm --filter @source-taster/api dev. - Extension entwickeln:
pnpm --filter @source-taster/extension dev, Build in Browser laden. - Docs editieren:
pnpm --filter @source-taster/docs devfür Live-Vorschau. - Pre-commit: Typecheck + ESLint laufen automatisch vor jedem Commit.
Docker Compose
Für den Normalfall reicht pnpm dev:docker — das startet anystyle automatisch.
Nur Docker (ohne pnpm):
bash
docker compose up --build # Alle Services in Containern (production-like)
docker compose up api # Api mit Hot Reload (Dev-Override)
docker compose up anystyle # Nur anystyle
docker compose down # Stoppen
docker compose down --volumes # Stoppen + Volumes löschenWeb App (sourcetaster.com/app)
Die Web-Version deployed als web-Compose-Service auf Port 8084. Der Caddy der Server-Maschine muss sourcetaster.com/app/* auf web:8084 routen (SPA nutzt Hash-Routing, kein Rewrite nötig). Dieser Schritt wird nach dem Merge manuell durchgeführt.
Contribution Guide
- Branch-Naming:
feature/,fix/,chore/Prefix - Commits: Conventional Commits (
feat:,fix:,chore:,docs:) - Pre-commit:
pnpm typecheck+pnpm lint-staged(ESLint --fix) laufen automatisch - PR: Gegen
devbranch — CI muss grün sein. Merge nachmaintriggert automatischen Release + Deploy
Environment Variables
apps/api/.envhostet Secrets. In Entwicklung reichtOPENAI_API_KEY.MASTER_KEY+KEY_DERIVATION_SALTwerden beim API-Start benötigt (crypto.ts).ALLOWED_EXTENSION_IDSrestringiert CORS in Production.ANYSTYLE_SERVER_URLdefault:http://anystyle:4567.
Troubleshooting
- “Missing X-Client-Id”: Der Header wird nur von der Extension gesetzt. Für curl/Postman manuelle UUID mitschicken.
- “AnyStyle unreachable”:
pnpm dev:dockerstartet anystyle automatisch. Reicht das nicht:docker compose up anystyleprüfen oderANYSTYLE_SERVER_URLanpassen. - TypeScript-Fehler nach Pull:
pnpm build:types && pnpm typecheck— möglicherweise sind shared types geändert. - Firefox side panel fehlt: Extension neu laden (
about:debugging→ "Reload").