Commit Graph

16 Commits

Author SHA1 Message Date
Julien Calixte
230d523891 chore(docker): cache pnpm store to avoid re-downloading deps
Source is copied before install because the root postinstall (nuxt prepare)
needs it, so the dependency layer can't be cached by ordering alone. A
BuildKit cache mount on pnpm's store keeps packages across builds instead.
2026-05-27 23:31:32 +02:00
Julien Calixte
1194edcf75 feat(projects): list + create API and creatable ProjectAutocomplete (T4)
- GET /api/projects returns the shared global list; POST /api/projects
  creates a project, deduped case-insensitively (F3).
- Repository find-or-create trims and matches on lower(name); a unique index
  on lower(name) enforces the same rule at the DB (replacing the case-
  sensitive column unique constraint) — migration 0001.
- ProjectAutocomplete: creatable autocomplete that lists projects, offers to
  create an unknown name inline, and selects it without reload.
- Integration test (dedupe/list against Postgres) + component test.
2026-05-27 23:28:03 +02:00
Julien Calixte
63f83d316a test: split vitest into node + nuxt projects and add a Postgres harness
Component/runtime specs (*.nuxt.spec.ts) run in the Nuxt environment; all
other specs run in a plain node environment where node_modules stay external,
so native CJS deps like `pg` load correctly (the Nuxt runtime inlines them and
breaks pg's internal `class … extends Pool`). Adds tests/helpers/db.ts, which
spins up and migrates a dedicated test database for repository integration
tests, and renames the board spec to the .nuxt suffix.
2026-05-27 23:27:55 +02:00
Julien Calixte
405b929f66 ci: Coolify autodeploy from main; migrate-on-boot and split dev/prod compose
- Add Nitro plugin to apply Drizzle migrations on server boot (skips when
  DATABASE_URL is unset, e.g. during build).
- Split compose: docker-compose.dev.yml (hot-reload + Postgres) vs
  docker-compose.yml (production/self-host, env-driven, Coolify-deployable).
- Add .dockerignore; parameterise compose env; document the autodeploy
  decision (Coolify watches main, no CI workflow needed) in ADR 0003 and
  plan.md T12.
2026-05-27 23:13:06 +02:00
Julien Calixte
c71718ccbc chore: clean install 2026-05-27 22:46:55 +02:00
Julien Calixte
02b89410f0 style(board): center board and size columns to content 2026-05-27 22:42:48 +02:00
Julien Calixte
60ee7b6277 feat(db): Postgres schema, migrations and defects repository (T3)
Drizzle schema for projects, defects, push_subscriptions (C8); generated
migration; a defects repository (createDefect / listRecentDefects); a
programmatic migrator; and a db:verify script. section_id is a plain string
referencing in-code board ids, no FK (ADR 0001). Verified against real
Postgres: migration applies, a defect round-trips, /api/health reports db up.
2026-05-27 22:39:32 +02:00
Julien Calixte
7a4860e111 style(board): landscape sheets, larger sizing, and web fonts
Render A-series sheets in landscape (√2:1), size them off a single
--sheet-base variable so A2/A3/A4 keep exact ISO ratios while leaving room
for labels (which now wrap). Load Playfair Display + Cutive Mono via the
coollabs fonts API: Playfair Display for headings, Cutive Mono for the board.
2026-05-27 22:29:04 +02:00
Julien Calixte
ae85d212db feat(board): canonical board definition and BoardView (T2)
Encode the board as blocks of stacked-section columns (C1) and render it as
the ASCII-styled DOM grid (C2) with hover highlight and a select emit. Layout
mirrors the physical board (Client Satisfaction above Product Architecture;
Macroplan above Defect Visualisation, both left of Feature Kanban) and boxes
use true ISO 216 proportions (1:√2, each step up scaled by √2). Both views
render from the one definition; tests pin section presence, click, hover,
layout order, and a snapshot.
2026-05-27 22:23:54 +02:00
Julien Calixte
d8ff2c75c9 chore: add typescript dev dependency for eslint TS parsing 2026-05-27 22:23:44 +02:00
Julien Calixte
c13f3deeff chore: scaffold Nuxt 4 app with Postgres, tooling and health route
Nuxt 4 (app/ structure) + TypeScript, ESLint, Vitest + @nuxt/test-utils,
Drizzle + pg, a /api/health route with a DB ping, and a dev docker-compose
(app + Postgres). Verified: pnpm test, lint, and build pass; the built
server answers /api/health.
2026-05-27 22:16:46 +02:00
Julien Calixte
e81ee53f7b docs: add phased implementation plan and task checklist 2026-05-27 22:16:39 +02:00
Julien Calixte
200103ab4d docs: adopt Coolify-managed Postgres over SQLite 2026-05-27 22:16:39 +02:00
Julien Calixte
2892d12775 docs: add README with documentation index 2026-05-27 21:59:00 +02:00
Julien Calixte
6606524fc7 docs: add House of Quality diagram
TikZ rendering of the DESIGN.md QFD matrices (goals, functions,
relations, roof, basement weights) for review and slides.
2026-05-27 21:58:55 +02:00
Julien Calixte
a304973af6 init 2026-05-27 21:54:20 +02:00