# Essential Rules Die wichtigsten Regeln fuer jedes Projekt -- kompakt genug fuer CLAUDE.md. Ausfuehrlichere Regeln: `app-rules.md`, `github-rules.md`, `architecture-rules.md` --- ## Security - Security Headers setzen: CSP (`default-src 'self'`), HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy - CSP-Strategie: Nonce-basiert mit `'strict-dynamic'`. `'unsafe-inline'` nur fuer `style-src` - Auth an 3 Schichten: Middleware → Route → **Data Access Layer** (wichtigste!) - Passwort: bcrypt/Argon2, nie Plaintext. Rate Limiting auf Login - Sessions: httpOnly, secure, sameSite=Lax - Input validieren an System-Grenze: TS → Zod, Python → Pydantic - SQL: Immer Prepared Statements. Shell: Nie User-Input in Commands - Keine Secrets in Error-Responses. Keine Secrets loggen - `.env` nie committen, `.env.example` committen. Env-Validierung beim App-Start (crasht sofort wenn Variable fehlt) ## API & Datenbank - Einheitliches Error-Format: `{ error: { code, message, details } }` - Rate Limiting auf Middleware/Gateway-Level. Pagination fuer alle Listen - API-Typ: Intern → tRPC. Extern → REST - DB: Immer Migrations-Tool (nie manuell SQL auf Prod). Prepared Statements, Least Privilege User - ORM-Wahl: Query Builder (Drizzle, SQLAlchemy Core) als Sweet Spot - Connection Pooling Pflicht. Serverless → externer Pooler ## Architecture - **Feature-basierte** Ordnerstruktur (nicht technisch) - Schichtung: Routes → Services → Data Access (2-3 Schichten reichen fuer Solo) - **Starte mit Monolith.** Microservices nur bei konkretem Grund - Monorepo fuer Full-Stack (Turborepo / pnpm Workspaces / uv Workspaces) - 12-Factor: Config in Env, Stateless Processes, Logs auf Stdout, Port Binding - Server Components als Default (React/Next.js). `"use client"` nur bei Interaktivitaet - Server State (TanStack Query) und Client State (useState/Zustand) nie mischen ## GitHub & CI/CD - Pre-commit Hooks Pflicht: gitleaks → Lint+Fix → Format → Type Check - TS: ESLint Flat Config + Prettier + Husky. Python: Ruff + mypy + pre-commit - TS Package Manager: pnpm. Python: uv. Lockfiles immer committen - CI: Jeder PR durch Pipeline (Install → Lint → Type Check → Build/Test → gitleaks) - Branch Protection auf main: Require PR, Status Checks, No Force Push - Renovate (nicht Dependabot). devDeps patch Automerge, Major manuell - PR-Groesse: < 400 LOC, darueber aufteilen ## Testing - TS: Vitest + Playwright. Python: pytest + Playwright - Prioritaet: 1) API Endpoints 2) Data Transformationen 3) E2E Smoke Test - Tests testen Verhalten, nicht Implementierung. Mocke nur an Systemgrenzen - Coverage: 70-80% Lines. Kritische Pfade (Auth, Payment) ~100%. 100% gesamt ist kein Ziel ## Docker & Deployment - Multi-Stage Build (Builder + Runner). Base Images mit Digest pinnen - Non-root User. HEALTHCHECK. `.dockerignore` pflegen - Ports nur auf `127.0.0.1` binden. Named Volumes fuer Prod - Reverse Proxy vor der App (Caddy / Nginx). Automatisches HTTPS - Health Checks: `/health` (Liveness) + `/ready` (Readiness) - Container-Scanning: Trivy (CRITICAL, HIGH, exit-code 1) ## Monitoring & Logging - Structured Logging (JSON): TS → Pino, Python → structlog. Timestamps UTC - Error Tracking: Sentry. Uptime: UptimeRobot. Logs: Better Stack / Axiom - Alert-Schwellen: Error Rate > 1%, p95 > 2s, CPU/Memory > 80% - OpenTelemetry als Standard. Metrics/Traces erst bei Bedarf ## Accessibility - Gesetzlich Pflicht (EU Accessibility Act, BFSG) - Semantisches HTML, Heading-Hierarchie, alt auf Bildern, Fokus-Styles nicht entfernen - Testen: axe-core + Lighthouse (automatisch), Tastatur + Screen Reader (manuell)