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

  1. D1 erstellen: npx wrangler d1 create <name>
  2. R2 erstellen: npx wrangler r2 bucket create <name>
  3. Pages-Projekt erstellen: npx wrangler pages project create <name>
  4. Worker deployen: npx wrangler deploy
  5. Secret setzen: printf 'passwort' | npx wrangler secret put OK_TOKEN (printf, nicht echo!)
  6. Worker erneut deployen
  7. Pages deployen: npx wrangler pages deploy ./public --project-name <name>
  8. Schema einspielen: npx wrangler d1 execute <db> --remote --file=./schema.sql
  9. Seed: POST /api/seed mit X-OK-Token Header

Bekannte Fallstricke

#RegelFolge wenn ignoriert
P1Kein db.exec() – immer db.prepare().run()Silent crash
P2Secrets via printf, nicht echo\r\n am Ende → Login schlägt immer fehl
P4CORS: PATCH in Allow-MethodsPATCH-Requests scheitern
P5Öffentliche Routen vor Auth-Guard/api/auth gibt 401 zurück
P6API gibt immer Objekt zurückdata.map is not a function
P11Pages-Projekt vor erstem Deploy anlegenFehler 8000007
P20Auth: PBKDF2-SHA256 via Web Crypto APIbcrypt nicht verfügbar in Workers