A flat-YAML task tracker that is just files. No daemon, no database, no git hooks. diarie.dev
issue-tracker cli nodejs agent-friendly
0

Configure Feed

Select the types of activity you want to include in your feed.

chore(brand): add impeccable PRODUCT.md + design-tooling glue

Seed impeccable's strategic layer via `/impeccable init`, register `brand`,
distilled from VISION.md + BRAND.md (not invented). PRODUCT.md is a new tracked
doc and passes remark --frail.

Gitignore the root DESIGN.md discovery symlink → brand/DESIGN.md: it is
local-only tooling glue so `/impeccable` resolves the design system. Committing
it breaks check:md — remark-validate-links follows the symlink and resolves
brand/'s relative links (./tokens.css, ../BRAND.md, ./HANDOFF.md) from the repo
root, failing under --frail. brand/DESIGN.md stays the one tracked, linted copy;
no lint coverage is lost.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

+120
+7
.gitignore
··· 28 28 .impeccable/ 29 29 .cache/ 30 30 31 + # impeccable's DESIGN.md discovery symlink → brand/DESIGN.md (the canonical, tracked, linted copy). 32 + # Local-only glue so `/impeccable` resolves the design system. Committing it would double-lint the 33 + # same content from the wrong base dir — remark-validate-links resolves brand/'s relative links from 34 + # the repo root and fails. No coverage lost: brand/DESIGN.md stays the one linted copy. Regenerated 35 + # by `/impeccable init`. 36 + /DESIGN.md 37 + 31 38 # The brand deploy build output. `brand:build` regenerates it (copy of the deployable source + 32 39 # freshly generated stamp + favicons); CI builds it and deploys it to diarie.dev via pages.yml. 33 40 # A DELIBERATE lint-scope exclusion per the warning above: it is generated, so linting the copies
+113
PRODUCT.md
··· 1 + # Product 2 + 3 + ## Register 4 + 5 + brand 6 + 7 + ## Users 8 + 9 + Solo developers who keep a backlog *in* their repo — and the AI agents that 10 + share that backlog with them. Their context is a git working tree, an editor, 11 + and a terminal; their scar is a tracker that became a migration project. They 12 + are distrustful of lock-in and fluent in local-first / indieweb values. 13 + 14 + The brand surface (diarie.dev, the `brand/` pages) speaks to the skeptical 15 + arrival: someone who reads "another task tracker?" and expects to be sold to. 16 + The page's job is to earn trust in under a screen from a reader who will judge 17 + the argument by whether the artifact making it is honest. 18 + 19 + ## Product Purpose 20 + 21 + diarie is a flat-YAML task tracker that is *just files*: the CLI reads a backlog 22 + your editor writes, and refuses to misrepresent itself. It exists to fix one 23 + class of bug — **a tracker that cannot find its store must never look like an 24 + empty backlog.** Git is the database; leaving is free; uninstall it and the 25 + backlog is still there. 26 + 27 + diarie.dev exists to make that argument *credibly*, not loudly. Success is a 28 + developer trusting diarie with a real backlog because the page itself 29 + demonstrated the ethos: one static document, zero external requests, view-source 30 + honest, no tracking, survives `curl` / `file://` / the Internet Archive. The 31 + medium is the proof. 32 + 33 + ## Brand Personality 34 + 35 + Three words: **registry-honest, herbarium-warm, klarspråk-plain.** 36 + 37 + The voice is *klarspråk* — cared-for, simple, comprehensible (Språklagen 38 + 2009:600 §11), the register of a Swedish myndighet's registry at its best. It 39 + names the consequence, not the adjective ("invalid priority `urgent` — it will 40 + be treated as `medium`", never "invalid input"). The refusal is part of the 41 + product: say no plainly, give the reason, name the revival trigger, never 42 + apologize for a design decision. No superlatives. `diarie` is always lowercase — 43 + it is a command, not a company. The tool is never anthropomorphized past its one 44 + licensed phrase: *the reader is honest.* Swedish is seasoning, glossed on first 45 + use — never a gatekeeping handshake. 46 + 47 + The emotional target is **calm confidence**, not delight or urgency — the 48 + smallest possible claim on the reader's attention (calm technology). A skeptical 49 + developer should relax, not be excited. 50 + 51 + ## Anti-references 52 + 53 + The identity is defined as much by what it refuses. This page must NOT look or 54 + sound like: 55 + 56 + - **The default 2026 AI aesthetic** — dark ground + a single acid-green accent, 57 + full stop. diarie's palette *is* dark-with-green, so specificity has to be 58 + earned by everything the default lacks: paper, the stamps, stepped light, 59 + amber and red as full citizens, and accents that are checkable semantic claims. 60 + If it could read as "AI made that," it has failed. 61 + - **SaaS landing tropes** — the hero-metric template (big number + gradient 62 + accent), identical icon-heading-text card grids, a tracked uppercase eyebrow 63 + above every section, stars-counter theater, "trusted by" logo walls. 64 + - **Marketing vocabulary** — *blazing, seamless, powerful, supercharge, 65 + game-changing, simply, just* (the adverb), and any sentence beginning 66 + "Unlock". Any sentence that would survive unchanged on a generic SaaS page is 67 + wrong. 68 + - **Decorative effects** — gradient text, gradient glow (the halo is *stepped* 69 + risograph light, never lens flare), glassmorphism as default, side-stripe 70 + accent borders, a mascot (the twinflower is a specimen, not a character). 71 + - **Dark-pattern motion** — pulsing CTAs, fake urgency, confetti at the moment 72 + of a decision. Motion never leans on a choice. 73 + - **Anything that betrays the thesis** — tracking, cookies, a consent banner, a 74 + third-party font CDN, analytics, or a brand asset behind a login. A registry 75 + that surveils its readers has misunderstood which way the transparency goes. 76 + 77 + ## Design Principles 78 + 79 + 1. **Practice what you preach.** The artifact must embody its own argument. A 80 + page that says "own your data, no lock-in" ships as one static HTML document, 81 + zero external requests, self-hosted fonts, view-source honest. The medium is 82 + the evidence; if the page needed a third party to render its own name, it 83 + would have lost the argument the project exists to make. 84 + 2. **The refusal is the pitch.** Leaving is free, and saying so is the brand. 85 + Make the exit the closing line on any surface; present non-goals as identity, 86 + never as apology. 87 + 3. **Every accent is a claim you can check.** Color, motion, and copy map to the 88 + tool's real semantics — the exit-code contract in visual form (`fosfor` = 89 + exit 0 / ready, `bärnsten` = exit 1, `stämpel` = exit 2 / the rejection 90 + stamp). Nothing decorative may be mistaken for meaning. 91 + 4. **Name the consequence, not the adjective.** klarspråk over marketing: plain 92 + claims, glossed loanwords, no superlatives. The strongest available sentence 93 + is "That is the whole product." 94 + 5. **Scarcity makes the system legible.** One anchor (the diarium), two 95 + subordinate motifs (herbarium, genomlysning), two typefaces, one easing, 96 + semantic-only accents, at most three motion beats per page. Restraint is the 97 + identity itself, not minimalism worn as a style. 98 + 99 + ## Accessibility & Inclusion 100 + 101 + - **WCAG 2.x AA, verified, with APCA as the stricter cross-check.** Every text 102 + token's contrast ratio is measured and recorded in [BRAND.md](./BRAND.md); 103 + where WCAG and APCA disagree, APCA wins. Size-restricted tokens (`hektograf` 104 + on `arkiv` at Lc −22; `stämpel-ljus` at Lc −46) are held to their documented 105 + uses — borders/display and short labels respectively, never paragraphs. 106 + - **Reduced motion is full parity**, not a degraded fallback: 107 + `prefers-reduced-motion` gets the complete page rendered at once — the same 108 + information, calm. 109 + - **Color is annotation, never the message.** Meaning is never carried by hue 110 + alone; in the CLI, `NO_COLOR` and non-TTY output lose no information. 111 + - **Privacy is an accessibility stance.** Self-hosted fonts with 112 + `font-display: swap`, no CDN, no tracking, no cookies, no consent banner — 113 + nothing to consent to.