feat: initial FitCoach Pro lead management app
Next.js 16 app with full CRUD lead management: - REST API (/api/leads) with GET (pagination), POST, PUT, DELETE (soft delete) - Zod validation (server + client), Supabase (PostgreSQL) - Responsive UI: leads table (desktop) + cards (mobile), modal form, toast notifications - 43 tests (Vitest + React Testing Library): validation, components, pagination - Docker setup (multi-stage build, health check) - Supabase migration + 15 seed leads - Documentation (CLAUDE.md, README, API docs) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
@AGENTS.md
|
||||
|
||||
# FitCoach Pro
|
||||
|
||||
> Dieses Dokument ist die zentrale Referenz fuer Claude Code in diesem Projekt.
|
||||
> Alle hier definierten Regeln und Konventionen sind verbindlich.
|
||||
|
||||
## Projekt-Uebersicht
|
||||
|
||||
- **Name**: FitCoach Pro
|
||||
- **Beschreibung**: Lead-Erfassung und Verwaltung fuer ein Online-Fitness-Coaching-Business
|
||||
- **Typ**: WEB_APP
|
||||
- **Status**: IN_ENTWICKLUNG
|
||||
|
||||
## Tech Stack
|
||||
|
||||
| Komponente | Technologie | Version |
|
||||
|-----------|------------|---------|
|
||||
| Frontend | Next.js (App Router) | 16.x |
|
||||
| UI | Tailwind CSS | 4.x |
|
||||
| Sprache | TypeScript (strict) | 5.x |
|
||||
| Datenbank | Supabase (PostgreSQL) | - |
|
||||
| Validierung | Zod | 4.x |
|
||||
| Tests | Vitest + React Testing Library | 4.x |
|
||||
| Container | Docker Compose | latest |
|
||||
| Package Manager | pnpm | 10.x |
|
||||
|
||||
### KRITISCH: Versionen
|
||||
|
||||
- **NIEMALS** veraltete Versionen oder deprecated APIs verwenden
|
||||
- **IMMER** vor der Implementierung die aktuellste stabile Version pruefen
|
||||
- Bei Unsicherheit: `pnpm info <package> version` / offizielle Docs pruefen
|
||||
|
||||
## Architektur
|
||||
|
||||
```
|
||||
fitcoachpro/
|
||||
├── src/
|
||||
│ ├── app/ # Next.js App Router
|
||||
│ │ ├── api/leads/ # REST API Endpoints
|
||||
│ │ ├── layout.tsx # Root Layout
|
||||
│ │ └── page.tsx # Lead-Verwaltung (Startseite)
|
||||
│ ├── components/ # React Components
|
||||
│ ├── lib/
|
||||
│ │ ├── supabase/ # Supabase Client
|
||||
│ │ ├── types/ # TypeScript Types
|
||||
│ │ └── validations/ # Zod Schemas
|
||||
│ └── test/ # Test Setup
|
||||
├── supabase/
|
||||
│ ├── migrations/ # SQL Migrationen
|
||||
│ └── seed.sql # Testdaten (15 Leads)
|
||||
├── docs/ # Dokumentation
|
||||
├── temp/ # Lokale Notizen (GITIGNORED!)
|
||||
├── Dockerfile # Multi-Stage Build
|
||||
└── docker-compose.yml
|
||||
```
|
||||
|
||||
## Kritische Regeln
|
||||
|
||||
### Allgemein
|
||||
1. **Deutsche UI-Texte**: Echte Umlaute verwenden, kein AI-Sprech
|
||||
2. **Code-Sprache**: Englisch (Variablen, Funktionen, Kommentare)
|
||||
3. **Kommunikation**: Deutsch, direkt, ohne Floskeln
|
||||
4. **temp/ Ordner**: NUR fuer lokale Notizen, NIEMALS committen
|
||||
|
||||
### Sicherheit
|
||||
- **Keine Credentials** im Code oder Git
|
||||
- **Secrets**: Ueber .env (gitignored)
|
||||
- **.env.example**: Template ohne echte Werte committen
|
||||
- **SUPABASE_SERVICE_ROLE_KEY**: Nur serverseitig, niemals NEXT_PUBLIC_
|
||||
- **Input-Validierung**: Immer serverseitig mit Zod
|
||||
|
||||
### Tests
|
||||
- **Nichts ungetestet committen**
|
||||
- **Coverage-Minimum**: 80%
|
||||
- **Vitest + React Testing Library**
|
||||
- **cleanup()** in afterEach (React 19 + jsdom Pflicht)
|
||||
|
||||
## Development Commands
|
||||
|
||||
```bash
|
||||
# Entwicklung starten
|
||||
pnpm dev
|
||||
|
||||
# Tests
|
||||
pnpm test
|
||||
pnpm test:watch
|
||||
pnpm test:coverage
|
||||
|
||||
# Lint
|
||||
pnpm lint
|
||||
|
||||
# Build
|
||||
pnpm build
|
||||
|
||||
# Docker
|
||||
docker compose up --build
|
||||
```
|
||||
|
||||
## Datenbank
|
||||
|
||||
| Tabelle | Beschreibung | Besonderheiten |
|
||||
|---------|-------------|----------------|
|
||||
| leads | Lead-Erfassung | Soft Delete (deleted_at), UUID PK, unique email (aktive) |
|
||||
|
||||
## API Endpunkte
|
||||
|
||||
| Method | Endpoint | Beschreibung |
|
||||
|--------|----------|-------------|
|
||||
| GET | /api/leads?page=1&limit=10 | Leads mit Pagination |
|
||||
| POST | /api/leads | Neuen Lead erstellen |
|
||||
| GET | /api/leads/[id] | Einzelnen Lead abrufen |
|
||||
| PUT | /api/leads/[id] | Lead aktualisieren |
|
||||
| DELETE | /api/leads/[id] | Lead soft-deleten |
|
||||
|
||||
Details: [docs/API.md](docs/API.md)
|
||||
|
||||
## Git Workflow
|
||||
|
||||
- **Branch-Strategie**: `main` fuer Deployments, Feature-Branches fuer Entwicklung
|
||||
- **Commit-Format**: Conventional Commits (`feat:`, `fix:`, `refactor:`, `docs:`, `test:`, `chore:`)
|
||||
- **Vor jedem Commit**: Tests laufen lassen
|
||||
- **Merge**: Squash-Merge in main
|
||||
Reference in New Issue
Block a user