Microcopy voice pack
A microcopy voice pack ships tone-consistent strings for the dozens of surfaces a build exposes: empty states, error messages, CTAs, tooltips, button labels, form validation. Voice packs are how a build sounds the same across widgets authored by different developers.
What you ship
my-voice/
├── manifest.json
├── strings/
│ ├── empty-states.json
│ ├── errors.json
│ ├── ctas.json
│ ├── tooltips.json
│ ├── validation.json
│ └── confirm-dialogs.json
├── voice-profile.json # tonal markers (friendly, dry-witty, hospitality-warm, …)
├── preview/
│ └── samples.png # 1200x630 sample-quote grid
└── README.md
Key contracts
- Keyed by intent, not by widget. The runtime resolves
error.network.retryto your string regardless of which widget surfaced it. - Voice profile up-front. Declare the register (friendly-pro, dry-witty, hospitality-warm, technical-precise) so the gate can spot tonal drift.
- i18n-ready. Strings target a single locale per pack; ship sibling packs for additional locales.
Scaffold
vincia create microcopy-voice-pack my-voice
cd my-voice
vincia preview
vincia publish --dry-run
Approval gates
1. Key coverage. At least the M-10 canonical key set must be present. 2. Voice profile compliance. A short LLM-free lint catches obvious mismatches (e.g. expletives in a hospitality profile). 3. No HTML. Strings are plain text; escape sequences are explicit.
Where to learn more
- /foundations —
KitPreset.voiceslot + the M-10 key catalog.