Projekte total
–
Aktiv
–
Abgeschlossen
–
Aufwand YTD (h)
–
| Name | Kunde | Status | Priorität | Stunden | Nächster Schritt |
|---|
Stammdaten
Nächste Schritte
Notizen
Zeiterfassung
Dokumente
Statushistorie
Neuer Schritt
Neue Notiz
Neuer Eintrag
Dokument hochladen
Tech-Stack (Standard)
Alle Projekte basieren auf dem gleichen Cloudflare-Stack: Workers (Backend), D1 (SQLite-Datenbank), R2 (Dateispeicher), Pages (Frontend-Hosting). Frontend als Vanilla-SPA ohne Build-Step.
D1-Muster (verbindlich)
// Einzelnes Statement
const row = await env.DB.prepare('SELECT * FROM table WHERE id = ?').bind(id).first();
// Batch (atomar)
await env.DB.batch([
env.DB.prepare('INSERT ...').bind(...),
env.DB.prepare('UPDATE ...').bind(...),
]);
// Niemals: db.exec() mit mehreren Statements
Auth: PBKDF2-SHA256
Cloudflare Workers haben kein bcrypt. Ausschliesslich crypto.subtle (Web Crypto API) verwenden. Iterations: 100'000. Salt: 16 Byte zufällig in D1 gespeichert.
Deployment-Reihenfolge
- D1 erstellen:
npx wrangler d1 create <name> - R2 erstellen:
npx wrangler r2 bucket create <name> - Pages-Projekt erstellen:
npx wrangler pages project create <name> - Worker deployen:
npx wrangler deploy - Secret setzen:
printf 'passwort' | npx wrangler secret put OK_TOKEN(printf, nicht echo!) - Worker erneut deployen
- Pages deployen:
npx wrangler pages deploy ./public --project-name <name> - Schema einspielen:
npx wrangler d1 execute <db> --remote --file=./schema.sql - Seed: POST /api/seed mit X-OK-Token Header
Bekannte Fallstricke
| # | Regel | Folge wenn ignoriert |
|---|---|---|
| P1 | Kein db.exec() – immer db.prepare().run() | Silent crash |
| P2 | Secrets via printf, nicht echo | \r\n am Ende → Login schlägt immer fehl |
| P4 | CORS: PATCH in Allow-Methods | PATCH-Requests scheitern |
| P5 | Öffentliche Routen vor Auth-Guard | /api/auth gibt 401 zurück |
| P6 | API gibt immer Objekt zurück | data.map is not a function |
| P11 | Pages-Projekt vor erstem Deploy anlegen | Fehler 8000007 |
| P20 | Auth: PBKDF2-SHA256 via Web Crypto API | bcrypt nicht verfügbar in Workers |