Commit Graph

18 Commits

Author SHA1 Message Date
Julien Calixte
73e4c56a9e feat(dashboard): verbatim modal + defect feed on /defects (T8) 2026-05-28 00:54:51 +02:00
Julien Calixte
406a4d5ec5 style(dashboard): use fixed units for dot scatter spacing 2026-05-28 00:50:14 +02:00
Julien Calixte
421903aa89 style(dashboard): add vertical breathing room between dot rows
Widen the vertical step between the two dot rows so they're less cramped.
2026-05-28 00:48:12 +02:00
Julien Calixte
268769c26e style(dashboard): tighten dot spacing and align date labels
Cluster each section's dots closer (narrower horizontal step) and shift
the date label right so it starts under the dot rather than off to its
left.
2026-05-28 00:45:04 +02:00
Julien Calixte
743ddfa899 style(dashboard): reposition dot map labels
Anchor each defect's date label at the dot's bottom-right (splaying
diagonally down-right) and move the "+N more" marker to the section's
bottom-left so it no longer collides with the A2/A3/A4 size label.
2026-05-28 00:43:05 +02:00
Julien Calixte
bfb0485598 feat(ui): redesign header with a DaisyUI navbar
Use the proper navbar-start/navbar-end structure with a horizontal menu
for the Report / View defects links, a red-dot brand mark echoing the
weak-point map, and a sticky shadowed bar. Rename the brand to the less
terse "Project Board Andon".
2026-05-28 00:43:05 +02:00
Julien Calixte
3e5f7d3643 feat(dashboard): red-dot weak-point map on /defects (T7)
Overlay each filed defect as a red dot inside its section box with a
diagonal date label; cap visible dots and collapse the remainder to a
"+N more" using the authoritative per-section counts (T6).

Add an `overlay` scoped slot to BoardView (C2) so the dashboard can layer
dots without forking the board definition (F1); the reporting view leaves
it empty. DotMap groups the bounded feed by section and the /defects page
wires both endpoints.
2026-05-28 00:31:17 +02:00
Julien Calixte
e5c002547f refactor(app): serve one domain — /defects route and header nav
Drop the two-subdomain split (ADR 0004): report at /, view defects at
/defects, with a shared layout + header nav. Renames the dashboard page to
defects.vue and updates plan/README. Transparency over separation now that
auth gates everyone, and it removes the Coolify two-domain routing question.
2026-05-28 00:24:02 +02:00
Julien Calixte
7f655009ac fix(projects): open autocomplete on click/type, not focus
The dialog autofocuses the project input on open; opening the dropdown on
focus made it spring open with no user interaction. Open on click or typing
instead, so the field is type-ready on open without showing the list.
2026-05-28 00:07:34 +02:00
Julien Calixte
a894e3715d refactor(defects): use the native <dialog> for the defect modal
DaisyUI's modal drives the native <dialog> via showModal/close, so Escape,
focus-trapping and the backdrop work without custom handling. The parent's
sectionId controls open/close and the dialog's native close event maps to the
component's close emit.
2026-05-28 00:00:42 +02:00
Julien Calixte
cb19b2df55 feat(defects): file a defect via a board-section modal (T5)
POST /api/defects validates the body with arktype (known section, uuid
project, non-empty trimmed verbatim) and resolves the reporter through a dev
seam (getReporter, ADR 0002) until OAuth lands. DefectForm is a DaisyUI modal
opened by a section click — pick a project, describe the problem, submit.
2026-05-27 23:53:49 +02:00
Julien Calixte
bd427ab171 style(board): reformat and center block labels 2026-05-27 23:46:54 +02:00
Julien Calixte
762d912243 feat(ui): wire tailwind v4 and daisyui theme into nuxt
Tailwind v4 integrates as a Vite plugin and configures daisyui via the
CSS @plugin directive; the light theme is selected with data-theme on
<html>. Heading font sizes are re-asserted because Tailwind's preflight
resets them, which would otherwise shrink the hand-crafted headings.
2026-05-27 23:46:12 +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
02b89410f0 style(board): center board and size columns to content 2026-05-27 22:42:48 +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
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