Why
First-time visitors discover a charset they like (often braille or blocks), leave, and come back to the default. A tiny localStorage restore would make the tool feel sticky without accounts.
Scope (keep small)
- Persist charset and color mode only (not brightness/contrast — those are image-specific).
- Key namespaced, e.g.
semaphore-charset, semaphore-color.
- Read on boot in
src/tool.ts after the control DOM is wired; write on change.
- Ignore malformed values; fall back to current defaults.
- Theme already uses localStorage (
semaphore-theme in shared.ts) — mirror that style.
Out of scope
- Syncing across devices
- Persisting the last image (privacy + storage)
- Server-side anything
Acceptance
Pointers
src/tool.ts — control wiring
src/shared.ts — existing theme localStorage pattern
STYLEGUIDE.md — copy voice if you touch any user-visible string
Why
First-time visitors discover a charset they like (often
brailleorblocks), leave, and come back to the default. A tinylocalStoragerestore would make the tool feel sticky without accounts.Scope (keep small)
semaphore-charset,semaphore-color.src/tool.tsafter the control DOM is wired; write on change.semaphore-themeinshared.ts) — mirror that style.Out of scope
Acceptance
/toolkeeps the last charset and colornpm testandnpm run buildstill passconnect-src 'none'Pointers
src/tool.ts— control wiringsrc/shared.ts— existing theme localStorage patternSTYLEGUIDE.md— copy voice if you touch any user-visible string