Julien Calixte 792b4f1b17 feat: add BLE blueprint illustration
A central with two lifecycles: an adapter/scan machine (doubly gated by
Permission + a powered-on radio) and a per-peripheral link machine, with
a bespoke specimen mocking the scanner and connected-device screens.
2026-07-02 23:52:13 +02:00
2026-07-02 23:52:13 +02:00

blueprints

Deployed at https://blueprints.apoena.dev

Interactive illustrations of UI-pattern blueprints — the formal, framework-agnostic contracts from blueprint-ontology (signature, state machine, behaviors, invariants, critical performance, failure modes), rendered in a cyanotype "blueprint" style: monospace, blueprint-blue paper, faint grid, amber annotations.

The first screen illustrates the List blueprint and its seven functions — Display · Scroll · Load · Filter · Sort · Select · Act — as a specimen-under-glass with a full contract readout, an anatomy/composition map, and the LoadState machine.

Documentation

  • CONTEXT.md — ubiquitous language (Blueprint, Viewer, Specimen, Readout, …)
  • DESIGN.md — architecture & build-out decisions

Develop

pnpm dev           # frontend on :5173
pnpm build         # type-check (vue-tsc) + production build → dist/
pnpm lint          # oxlint  (pnpm lint:fix to autofix)
pnpm fmt           # oxfmt   (pnpm fmt:check to verify only)

Stack

  • Vite + Vue 3 + TypeScript SPA (no backend)
  • Tailwind v4 + DaisyUI with a custom blueprint dark theme (src/style.css)
  • oxlint + oxfmt for lint/format (no semicolons, double quotes)
  • Served in production by nginx (see Dockerfile + nginx.conf)

Blueprint content lives as typed data in src/data/; the viewer components render it. Source of truth: the list blueprint in blueprint-ontology (blueprints/list/README.md, list.als, list.test.als).

The original single-file static illustration is archived at archive/list-illustration.html.

Deploy

Pushes to main are picked up by Coolify at https://platform.apoena.dev and deployed to https://blueprints.apoena.dev.

Description
blueprints.apoena.dev
Readme 276 KiB
Languages
Vue 44.3%
TypeScript 32.4%
HTML 22.1%
CSS 1.1%
Dockerfile 0.1%