LIFE COMPASS

Architecture decisions

Short records of the decisions that shape this project, written before the code they govern exists. Each states what was decided, what else was considered, and what the decision costs.

Records are numbered and immutable in intent: when a decision changes, a new record supersedes the old one rather than editing history. Status starts at Proposed and becomes Accepted in the pull request that implements it.

Options and consequences are labelled (O1, C1, …) so they can be cited precisely from issues, pull requests, and other records — 0004 · C3 is the third consequence of record 0004. A consequence added after a record is published gets a suffixed label (C1a) rather than renumbering the ones after it, since renumbering would invalidate every citation already written down.

# Decision Status
0001 Voice-first input is a primary design constraint Proposed
0002 TypeScript, not JSDoc-typed JavaScript Accepted
0003 Multi-page static rendering, no framework, no bundler Accepted
0004 Prose stays Markdown; question definitions become TypeScript Proposed
0005 Cloudflare Pages, for control over response headers Proposed
0006 No in-app speech recognition; scope the privacy claim honestly Proposed
0007 The clipboard is the airgap Proposed
0008 Installation is what makes storage durable, and the app must say so Proposed
0009 Encryption is an opt-in add-on; the export envelope is designed for it now Proposed
0010 Printing stays a supported output, not an accident Proposed
0011 Question identifiers are frozen, registered, and never derived Proposed

Still open

Nothing outstanding. 0004 · C4 raised question-identifier versioning as the one decision deliberately left unmade; 0011 settles it.