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
2026-05-27 21:54:20 +02:00

Andon — Weak Point Visualisation

A digital twin of the company's physical Lean/TPS project Board. Team members pull the Andon on a board section to file a Defect about the board itself; a dashboard aggregates those defects into a red-dot map that reveals the board's Weak Points, so the standard can be radically improved as it rolls out company-wide (Dantotsu).

Two apps, one codebase, behind Google SSO (@theodo.com):

  • andon.apoena.dev — the reporting view: click an ASCII board section, pick your project, describe the problem.
  • dashboard.andon.apoena.dev — the same board as a red-dot defect map, a reverse-chronological feed, and verbatims in a modal.

Status

Design phase. No code yet — the documentation below captures the agreed language, decisions, and goal-driven design. Build order is driven by the House of Quality: F1 board definition → F2/F3 filing → F4/F5 weak-point map.

Documentation

Document What it holds
CONTEXT.md Ubiquitous language — the glossary (Board, Block, Section, Defect, Weak Point, Andon, Verbatim, Project, Reporter) that code, tests, and docs use verbatim.
DESIGN.md Goal-driven design (QFD): Goals → Functions → How → Components, the importance/conflict matrices, the critical performance budget, and the trade-off ledger.
docs/house-of-quality.md TikZ "House of Quality" — a visual rendering of the DESIGN.md matrices for review/slides.
docs/adr/0001 Why a Defect is feedback about the Board artifact, not the reporter's project work.
docs/adr/0002 Why attribution is transparent rather than blameless.
docs/adr/0003 Why the data store is Coolify-managed Postgres, not SQLite.
tasks/plan.md Implementation plan — phased, dependency-ordered tasks with acceptance criteria.

Stack

Nuxt 3 (full-stack Vue) · PostgreSQL + Drizzle (Coolify-managed, auto-backups) · Google OAuth (hd=theodo.com + server-side domain recheck) · Web Push (PWA) · Docker Compose on Coolify.

Deployment notes

  • Use Coolify's managed Postgres (with scheduled backups); the app connects via DATABASE_URL. See ADR 0003.
  • Don't auto-deploy from main — every merge would deploy. Use a tagged release or manual trigger.
  • Don't trust the OAuth hd claim alone — verify the email domain server-side.
Description
No description provided
Readme 259 KiB
Languages
TypeScript 69.8%
Vue 27.5%
JavaScript 1.2%
Dockerfile 0.9%
CSS 0.6%