3 Commits

Author SHA1 Message Date
0026edd22b feat(m14): backup & admin (zip via fflate, admin guard, tests, e2e)
- BackupService (admin-only: createBackup zips DB+uploads via fflate to
  backups/backup-<ts>.zip, listBackups newest-first, getBackupPath with
  path-traversal guard)
- Admin backup APIs: GET/POST /api/admin/backups, GET /api/admin/backups/:filename
- Admin backups screen (admin-only) + BackupCreateButton
- Playwright globalSetup seeds a system_admin user for admin E2E
- add fflate dependency
- Unit tests (BackupService: zip content, list, admin guard, traversal) +
  e2e backup (create/list/download + non-admin 403)
2026-06-25 02:35:35 +02:00
d7c4cd5e58 feat(m2): DB foundation tests + multi-statement migration fix
- Add SqliteDatabase.exec() using better-sqlite3 exec() so the migrator
  can run multi-statement SQL files (prepare() rejected 001_initial.sql)
- Migrator now uses exec() for migration file content
- Fix tests/helpers/db.ts: replace CJS require() with ESM import
- Add unit tests for SqliteDatabase (query/get/execute/transaction/exec,
  WAL & foreign_keys pragmas) and Migrator (ordering, idempotency,
  rollback, real 001_initial.sql applies)
- Restore .gitignore steering exclusion; remove stale steering files
2026-06-25 00:21:26 +02:00
9253164fd3 feat(m1): project foundation setup - Next.js 15, Tailwind, tooling, CI
- Configure Next.js 15 (App Router, Node.js runtime, serverExternalPackages for better-sqlite3/bcrypt)

- Add Tailwind CSS, PostCSS, tsconfig with @/* alias

- Create app structure (layout, page, globals.css)

- Create directory structure (lib, repositories, services, components, tests)

- Configure Vitest (alias, coverage), Playwright

- Add dependencies: next, react, better-sqlite3, bcrypt, react-markdown, etc.

- Add .env.example, CI workflow, next-env.d.ts

- Remove boilerplate src/example files
2026-06-24 23:47:27 +02:00