Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Architecture Decision Records (ADRs)

This directory holds the binding architecture decisions for this project. Each decision is one file. Each file stays once written — to revise, write a new ADR that supersedes the old one and update the old one's status.

Why ADRs?

So that anyone (including future-us) can answer "why did we do it this way?" by reading one short document — not by archeology through commits, issues, and chat logs.

How to read

Start with 0001-two-container-architecture.md, which is the highest-level decision. The others slot into it.

Each ADR follows the Nygard format: Context → Decision → Consequences.

Statuses

Status Meaning
Proposed Drafted, not yet accepted
Accepted Live and binding
Deprecated No longer recommended but still present
Superseded by N Replaced — see ADR N for the current decision

Index

# Title Status
0001 Two-container architecture (separate backend and frontend) Accepted
0002 Python + FastAPI for the backend Accepted
0003 Go + Tailwind + HTMX + PWA for the frontend Accepted
0004 Plugin architecture for printer models Accepted
0005 Print queue is mandatory (printer has none) Accepted
0006 Status sources by phase (ESC i S / passive / SNMP) Accepted
0007 Docker image tag scheme Accepted
0008 Conventional Commits + semantic-release Accepted
0009 Server-Sent Events instead of WebSockets Accepted
0010 PWA with progressive enhancement Accepted
0011 OpenAPI as the canonical API contract (oapi-codegen + interactive docs) Accepted
0012 Label layouts are first-class, integration-scoped, multi-instance Accepted
0013 Browse + cart + bulk-print UI pattern Accepted

How to write a new ADR

  1. Copy _template.md to NNNN-short-slug.md where NNNN is the next free number, zero-padded
  2. Fill in the sections honestly — including options not chosen
  3. Open a PR with the ADR alone (separate from implementation, when feasible)
  4. After merge, update the index above