Skip to content

Decisions (ADR)

Developers and the owner. Read the matching record before changing behaviour that looks odd — most of the odd parts are there for a reason that cost money or an evening to learn.

  • Sixteen records. Each has the same shape: context, decision, alternatives considered, consequences, evidence.
  • Records 1–6 are the product’s hard rules. Breaking one is a product decision.
  • Records 7–11 explain the generation and delivery design; 12–13 the leads module; 14–16 the infrastructure and the landing page.
  • The records were reconstructed on 2026-11-13 from CLAUDE.md, HANDOFF.md, docs/RISKS.md, docs/LEADS_TZ.md and git log. They describe decisions already made; new decisions get a new numbered page.
# Decision Status
001 Two AI providers behind configuration Accepted; fallback has no key yet
002 SQLite as the only database Accepted for one station
003 The kiosk never waits for generation Accepted
004 Consent in the bot, outfit choice on the tablet Accepted
005 Photos live at most 72 hours; metadata only in the database Accepted
006 One pack per Telegram account Accepted
007 AI draws figures, code cuts and finishes them Accepted
008 Consistency and likeness as switchable modes Accepted as flags; default still open
009 Three sheets of four figures, at 2K Accepted
010 Verified delivery; pack names never reused Accepted
011 Cost guard rails Accepted
012 Leads stored on our server, published through an outbox Accepted
013 Shared requests group, product prefix, isolated guest flow Accepted
014 No Docker: systemd, Caddy, git-archive deploy Accepted
015 One polling bot process with a lock Accepted for one station
016 Separate, lightweight landing page with scripted checks Accepted
flowchart TD
  A3["003 Kiosk never waits"] --> A15["015 One bot process with worker"]
  A3 --> A10["010 Verified delivery"]
  A4["004 Consent in bot"] --> A5["005 Photo TTL"]
  A6["006 One pack per account"] --> A10
  A1["001 Two providers"] --> A11["011 Cost guard rails"]
  A7["007 Figure mode"] --> A8["008 Consistency and likeness"]
  A8 --> A9["009 Layout 3x4 at 2K"]
  A9 --> A11
  A2["002 SQLite"] --> A12["012 Leads outbox"]
  A15 --> A12
  A12 --> A13["013 Prefix and isolation"]
  A14["014 systemd and Caddy"] --> A15
  A16["016 Separate landing"] --> A12
  1. Copy the shape of an existing page; use the next number.
  2. State the context as the problem that existed before the decision.
  3. List at least one real alternative and why it lost.
  4. Link the code, test or report that proves the decision is implemented.
  5. Add the row to the table above.

Last verified: 2026-11-13 against ai-sticker-pack@b715418 and ai-stickers-landing@e350ff5.