Initiale Arbeitszeiterfassung (Next.js 16 + SQLite)
Web-App zur Erfassung der Arbeitszeit, Layout/Architektur an Projekt logbuch angelehnt, mit grüner Grundfarbe und SQLite3 statt MySQL. - Eingabemaske: Datum (mit Wochentag), Ort (Kunde FFM/Homeoffice/Andrena), Beginn/Ende, Reisezeit, Vertriebsunterstützung (default 2h), Kommentar (max 500) - Berechnung: Arbeitszeit = Ende-Beginn; Mehrarbeit = Arbeitszeit - 8h - Pause - Pause als globale Einstellung (Einstellungen-Tab) - Tabs Eingabe/Liste/Einstellungen, letzte 10 Einträge unter der Maske - Single-User-Login (Benutzer Birgit + Passwort fest in .env), JWT-Cookie via jose - better-sqlite3, Docker-Setup für docker.citysensor.de Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# CLAUDE.md
|
||||
|
||||
Hinweise für Claude Code (claude.ai/code) zur Arbeit in diesem Repository.
|
||||
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
npm run dev # Entwicklungsserver
|
||||
npm run build # Produktions-Build (nach jeder Änderung zur Prüfung ausführen)
|
||||
npm run lint # ESLint
|
||||
```
|
||||
|
||||
Kein Test-Setup. Deploy via `./deploy.sh [tag]` — baut ein Multiplatform-Docker-Image
|
||||
(amd64 + arm64) und pusht es nach `docker.citysensor.de`.
|
||||
|
||||
## Architektur
|
||||
|
||||
Next.js 16 App-Router-Anwendung. Seiten sind Server-Komponenten; interaktive Teile sind
|
||||
Client-Komponenten in `app/MainClient.tsx` und `components/`. Layout und Design sind dem
|
||||
Schwesterprojekt `~/Projekte/logbuch` nachempfunden, jedoch mit **grüner** Grundfarbe.
|
||||
|
||||
**Auth**: Single-User. Benutzername und Passwort sind fest in `.env` hinterlegt
|
||||
(`APP_USERNAME` default `Birgit`, `APP_PASSWORD`). Login über `app/login/actions.ts` →
|
||||
`lib/auth.ts` (Plaintext-Vergleich, kein bcrypt). Sessions sind JWT-Cookies via `jose`
|
||||
(`lib/session.ts`, 8 h Gültigkeit, Cookie `arbeitszeit_session`). Middleware liegt in
|
||||
`proxy.ts` (Next.js-16-Konvention) und exportiert `middleware`.
|
||||
|
||||
**Datenbank**: SQLite3 via `better-sqlite3`. `lib/db.ts` ist ein Singleton, legt Schema und
|
||||
die `settings`-Tabelle beim ersten Zugriff an. Datei unter `DB_PATH`
|
||||
(default `./data/arbeitszeit.db`, in Produktion `/app/data/arbeitszeit.db` auf einem Volume).
|
||||
`better-sqlite3` ist nativ → `serverExternalPackages` in `next.config.ts` und im Dockerfile
|
||||
`python3 make g++` in der `deps`-Stage.
|
||||
|
||||
**Datenzugriff**: `lib/repo.ts` (CRUD + Pause-Setting), `lib/calc.ts` (Zeit-/Wochentag-Helfer),
|
||||
`lib/validate.ts` (Body-Validierung). API-Routen unter `app/api/` prüfen alle `getSession()`
|
||||
und liefern 401 ohne Session.
|
||||
|
||||
## Datenmodell & Berechnungen
|
||||
|
||||
Tabelle `arbeitszeit`: `datum`, `ort` (Kunde FFM | Homeoffice | Andrena), `beginn`, `ende`
|
||||
(je HH:MM), `reisezeit`, `vertriebsunterstuetzung` (default 2), `kommentar` (max. 500).
|
||||
|
||||
- `Arbeitszeit = Ende − Beginn` (dezimale Stunden)
|
||||
- `Mehrarbeit = Arbeitszeit − 8 − Pause`
|
||||
- Die Spalte „Arbeitszeit Kunde" ist fix 8 h (`ARBEITSZEIT_KUNDE_FIX`).
|
||||
- Die **Pause** ist eine globale Einstellung in der `settings`-Tabelle (Tab „Einstellungen").
|
||||
Mehrarbeit wird zur Laufzeit berechnet, nicht gespeichert.
|
||||
Reference in New Issue
Block a user