Back

Changelog

Small changes, reliability improvements, and updates across all the skills I’ve created and actively manage.

Teams can now tighten the design rules for themselves, and the editor hook enforces them.

A new vois-teams folder lets a team keep an override file in its own repo. It can add a rule, tighten one of 23 limits the base marks as adjustable, or pick a value inside a range the base leaves open. It can never loosen anything. A change every team should get goes through a base-change proposal instead, and a validator that runs in CI rejects anything that loosens a rule, and two overlapping teams that set one limit differently. The Vois Tokens hook now reads these files and checks four limits against them: the two animation ceilings, the press scale, and the spacing divisors. A finding says which team set the limit. The other limits can be set, but nothing checks them yet, so they are still judged by reading.

New Vois Teams Vois Tokens

Breadcrumb or back link now has one answer, and settings pages no longer get two.

Blind test builds disagreed twice. A record page opened from its list got a back link in one run and a breadcrumb in another, and a settings page with four sections got Tabs from one skill and a sidebar from the other. Home now counts as the first level. Three or more levels gets a Breadcrumb, two gets a back link, and the back link is labeled with the parent page, or just Back when the parent is Home. A settings page with four or more sections uses a sidebar. The same test set grew from 13 to 54 scenarios and now covers all 21 component decisions.

Two independent reviews of the editor hook found about twenty bugs, and they are fixed.

The hook missed real problems and flagged fine code. It lost a button or clickable div when a greater-than sign sat inside an attribute, skipped files written without semicolons, and called your own function named confirm a browser dialog. It also flagged data-title as a tooltip and credited a team for a limit the base already set. Each case now has a test. A team file with a malformed scope is skipped instead of quietly applying to the whole repo. One check, the table scroll wrapper, took 43 seconds on a large file with no braces and now takes a fraction of a second.

Vois Tokens now has four status colors, so an agent stops reaching for stock Badge variants.

A test build needed a success and a warning color, found none in the token set, and fell back to default Badge variants. There are now four roles, info, positive, negative, and warning, each with a base, foreground, surface, and border token. Pick the role by what it means, not by color. Destructive merges into negative, so a destructive Button reads the negative token. Only the names are fixed. The color values stay with each workspace.

Vois Components now has a Stepper spec, because shadcn ships none.

Agents were hand-building steppers with nothing to follow. The spec covers what a Stepper is and is not, its four states, behavior, layout, motion, and accessibility. Two to five steps that fit a page container get a Stepper. Six or more, or a step that needs its own full page, get a Wizard. The last step ends the flow with its own primary button, such as Verify or Create, and a closing Done step is optional. A plus and minus control is a quantity control, not a Stepper.

A table of eleven shortcuts agents take when they build something that looks like a component.

In 40 blind builds, agents wrote their own icon button with a copied focus ring, hand-rolled a spinner, built radio buttons from plain buttons, and drew a stepper from numbered circles. The table pairs each shortcut with the component to use instead. Four were seen in those builds. Seven are rules that already forbid the shortcut but never showed up. Vois Tokens now flags nine of them in the per-edit hook. The flags are advice only, skip the components/ui folder, and the two rows that no pattern can detect precisely stay a judgment call.

Personal data now has rules on screens and in copy.

Vois Patterns says to mask personal data by default and on the server, to reveal one field at a time with a way to mask it again and a log for high-risk reveals, and to keep personal data out of URLs, page titles, file names, and analytics. A name may still appear in the title of a person’s own screen. Righter adds two principles to match: no invented claims, meaning no numbers, guarantees, prices, or legal and security promises that nobody supplied, and no personal data in errors, toasts, subjects, or notification previews. The wording of the Patterns rules has not been reviewed against real examples yet.

Vois Dataviz and Vois Tokens now agree on what good, warning, and critical mean.

Charts had their own four status tokens and the system had its own status roles, with nothing connecting them. Good maps to positive, warning to warning, and critical to negative. Serious has no system role, so it stays chart-only. Vois Patterns also stopped using the word Stepper for a plus and minus quantity control, and its spacing rules now name the real scale steps instead of a token that does not exist.

Marketing pages now have their own rules for structure, type, and copy.

Vois Patterns adds a path for marketing pages: one idea per section, three blocks at most in a row, detail behind a link, left-aligned by default, one primary button per view. Vois Tokens adds eight rules for type and spacing on marketing surfaces only, such as one display headline per page, body text capped at 56 characters wide, and section gaps about four times the heading gap. Righter adds word limits per slot, for example seven words for a hero headline and twenty for a card description, with a script that counts them. The numbers come from one reference site and one mockup, so the ratios are rules and the pixel values are starting points. Em dashes are now banned in shipped copy.

The table rules got a correction and a phone pass.

Our first table release listed a handful of z-index and layout values as design tokens that were not. Page-specific values like the space above a table and a fixed app header are set by the page, and the sticky layers are now small local numbers kept inside the table so they can never cover a dropdown. What stays a token is the header height and one row height for each of three densities. Separately, a look at phone apps turned up three new rules: how a stacked row is laid out, a full-width detail view with a back button, and selection as a mode with a bottom action bar. The phone evidence was thin, since apps use list rows rather than shrunken tables, so the four-column cutoff did not change and the detail-view rule is judgment.

Vois Patterns now knows what kind of table you are building.

Simple tables scroll vertically and keep their header stuck to the page. Complex tables get bulk actions, a density toggle, and their own scroll area. A row now opens in a drawer by default instead of a modal, with an Open button that moves a big record to a full page. That replaces the old view-first modal rule, because every row-detail example we looked at on Mobbin used a side panel. A new companion file adds 32 rules for selection, bulk actions, saved views, inline edit, and every loading, empty, and error state, including an import where only some rows fail.

Vois Tokens can now explain why your sticky table header stopped sticking.

Put overflow-x: auto on a table wrapper and the wrapper becomes the scroll container, so the header sticks to it and scrolls away with the page. The popular fix, overflow: auto clip, does not work, because clip turns into hidden next to auto. Nineteen new rules say how to pick one scroll owner per table, pin the first column, style scrollbars without the webkit pseudo-elements, and scroll one axis at a time on a wide table. A detector flags the broken wrapper, but it reads one file at a time, so a shared Table component with the sticky header in another file slips past it. All of the CSS claims were checked in Chromium only.

Vois Components and Righter picked up the table cases.

Vois Components now says when a row opens in a Sheet versus a full page, how to page a big table, and what a table loading or empty state looks like. Righter gets two new empty-state variants, empty by nature and no access, and a short note on which component carries each kind of table message. No new components were needed. One new test case deliberately has no right answer yet: a single row failing to archive.

Vois Dataviz is a new skill for charts and dashboards.

Most bad charts are the wrong chart for the job, not bad styling. This skill starts from what the viewer needs to do and walks a decision tree to the simplest form that does it, then sets color, filters, and every loading, empty, and error state. Fourteen principles each come with a do and a don’t, backed by 114 checkable rules and 57 real dashboards that show what to copy and what to avoid. It can also review an existing dashboard and say what to fix first. It ships a spec checker and a code detector for chart code.

Vois Router, Vois Components, Vois Patterns, and Vois Loop now know about data screens.

A screen with a chart or KPI tile now gets a dataviz step between structure and component choice. Vois Router has a new work type for dashboards and chart questions. Vois Components has a new job, visualize data, that hands the chart choice over. Vois Patterns points data screens at the new skill, and Vois Loop adds a data visualization check to its validate pass.

Vois Patterns now covers how settings pages behave and how form fields are grouped.

Settings pages and forms already had a structure. They didn’t say when a change saves instantly or needs a Save button, how a notification matrix, member list, or danger zone should work, or how wide a field should be. Two new companion files cover that: 23 rules for settings interactions, including changing an email with a one-time code, and 15 for form fields, including address, phone, and auto-growing textareas. Dialogs also get a size rule, and tables get row-action and narrow-screen rules. Each rule lists the existing rules it builds on, so nothing is restated.

Vois Tokens added width rules, auto-growing textareas, and a hit-area token.

Form, field, and dialog widths now come from tokens instead of raw values. Textareas that grow with their content use field-sizing: content with an explicit width, line-based min and max, and a fallback for older browsers. The touch target rule now points at a hit-area token that sets the click area only, never the visible size of a control. The autosize CSS was tested in Chromium only, and the detector doesn’t flag raw widths yet.

Vois Components now picks InputOTP for one-time codes.

A fixed-length verification code gets its own component instead of a plain Input, so the expected length is visible and paste fills every cell. Textarea guidance now points to the new auto-grow rules, and row actions are capped at two preferred, three at most.

Vois Patterns can now structure a pricing page.

Pricing pages are a different job from settings pages, forms, or tables, so they get their own path. It starts from what you charge for (flat, seats, usage, a mix, or a consumer subscription) and how many tiers are real, then sets the layout, the calculator, and the trial explanation to match. There are 53 rules behind it, drawn from about 45 real pricing screens. It’s pattern review, not conversion data, and paywall timing still belongs to a conversion skill.

Conversion Patterns is a new skill for paywalls, checkout, and upsells.

It holds 32 patterns from published A/B tests, and each one comes with the condition it worked under. Those patterns often contradict each other, so the skill makes you name your funnel stage and product type first, then hands structure, copy, and tracking to the skills that own them. It proposes experiments, not winners.

Righter now sets its reading target by audience.

A developer console shouldn’t read like a kids’ app. Consumer stays the default at ARI 6, work tools get ARI 10, and developer or admin tools get ARI 12. Every other principle still applies.

Righter added principle 18: accessible copy.

Screen reader users often hear labels and links as a list, so each one has to make sense alone. It flags “click here” and “read more”, status shown by color alone, and icon-only controls with no text alternative. It also writes the recommended aria-label.

Righter can now write empty states and permission prompts.

Both come up in nearly every product, and neither is an error. Empty states cover first use, cleared lists, and no results, and permission prompts lead with the benefit. The error decision tree is unchanged.

Righter added tone guidance, a voice chart template, and a Figma review workflow.

Copy for a frustrated user shouldn’t sound like copy for a confident one. The tone guide covers five user states, and the voice chart helps you define or audit a brand voice. All three load only when the request calls for them.

Onboarding Flow joined the roster: designs and audits signup sequences for SaaS and consumer apps.

Block a SaaS user behind a wizard and they bounce before touching the product; skip a consumer app’s personalization step and you lose the reason it existed. It picks the right shape first — a companion checklist docked in the product, or a linear sequence before home — then checks the result against 18 rules, each tagged MUST or SHOULD so real exceptions aren’t flagged.

A UX research team joined the roster: four skills that run as a loop, not a one-way pipeline.

Survey Architect builds the instrument, Feedback Synthesizer scores and themes the results, and Research Reporter writes it up for whoever’s reading. Research Loop runs all three and kicks a study back upstream when the sample’s too thin to trust, capped at two kickbacks before it surfaces the call to you.

Longform joined the roster: a skill for essays, blog posts, and LinkedIn pieces.

Built on Nancy Duarte’s contrast arc and Wes Kao’s operator voice, it drafts or reviews long-form writing, then hands the finished piece to Righter for the sentence-level pass before calling it done.

Righter added principle 17: rhetorical devices.

Marketing lines and first-use empty states can have personality without turning cute. Nine devices, one per surface at most, and never in errors, form fields, or system copy.

Every UX writing principle and error-message rule in Righter now carries a stable id.

Other skills and tools can cite a specific rule without depending on its position in the numbered list — ids don’t shift when principles get added or reordered.

Improve Righter

Righter added principle 16: no em dashes.

Closes a gap where references/email.md assumed this rule existed — it was referenced but never actually defined until now.

Righter’s error component decision tree got a fallback branch.

Copy that doesn’t cleanly match any of the six existing questions now has somewhere to go, instead of leaving the choice up to guesswork.

Improve Righter

Righter ships a deterministic reading-level script, scripts/ari.mjs.

Computes ARI score, grade level, and word, character, and sentence counts exactly, instead of asking the formula to be worked out by hand.

Righter added a regression test corpus, evals/cases.json.

An eight-case corpus for checking that future edits to principles or data files don’t silently change what the skill flags.

Stale cross-references in Righter’s data files, corrected.

Source fields in the component, weakener, and phonaesthetics data files still pointed at reference files removed in a previous version. Missing example pairs were filled in too.

Fixed Righter

Vois tokens now catches more AI “tells” like card-ifying everything, over-decorated states, etc.

Anti-patterns to prevent slop in AI generated designs. It can read and flag anti-patterns and remedy them before pushing out generated designs.

Added a queryable JSON index of the rules across all 5 skills across the Vois system

An agent can now look up one rule by ID instead of reading an entire reference file to find what needs to be used. The corpus that used to live only in prose format now has a structured lookup alongside it.

Vois Components dropped seven reference files once its rules were fully captured in JSON.

Less to read, nothing lost — every decision tree and "why not X" rationale was verified 1:1 against the new data file before the markdown was deleted.

Designer IC Assessment grew from 19 to 23 competency areas.

A more complete picture of what a designer actually does, with less guessing about which bucket a skill falls into. The question bank also moved to structured data, queryable by competency number or category instead of read start to finish.

Skills are now labeled Open or Premium.

Open skills download straight from GitHub and run standalone. Premium skills — the full Vois design system chain, including Vois Router and Vois Loop — ship inside the Vois app, available on a Pro account.

Improve Site

The whole Vois design system stack now works without any MCP server at all.

Vois Patterns, Vois Components, Vois Tokens, and Righter no longer assume Vois Router, Vois Loop, or a connected MCP tool is present. Every telemetry call — recording a component choice, a pattern decision, a rule usage log — is now optional. If the tool’s there, it fires; if not, the skill degrades gracefully and moves on.

Righter now reviews transactional email copy, not just in-product UI text.

Subject lines, preheaders, CTAs, and footers get the same scrutiny as a button label, backed by numeric deliverability benchmarks — open rate, CTOR, CTR, unsubscribe thresholds — for judging whether copy is actually working.

A skill for writing this very changelog joined the roster.

Meta, yes. The alternative was this page reading like a commit log, and nobody wants that. Changelog Writer drafts external release notes with voice, then runs every entry through structure, sass-budget, and length checks before it ships.

Vois Tokens learned to spot its own AI accent.

Centered-hero sections, the purple-to-blue gradient, three identical feature cards — the defaults every AI-built page reaches for. Passing every spacing and accessibility rule doesn’t matter if the page still reads as generated. Nine rules now flag centered heroes, AI gradients, identical card grids, eyebrow overuse, emoji-as-icons, zigzag repetition, spec-sheet tables, and uniform page rhythm — several gated by a new tunable variance dial.

Vois Tokens shipped a zero-dependency detector that checks its own rules automatically.

18 mechanically-checkable rules now get caught on every edit instead of relying on an agent to remember them. A per-edit hook installs into Claude Code, Cursor, or Codex and covers color, accessibility, spacing, animation, layout, typography, and modal safeguards — complementary to, never a replacement for, judgment-only rules.

Vois Design System is now Vois Tokens.

The rename makes room in the design system’s naming for a patterns skill and a components skill that aren’t about tokens. Every cross-reference across the stack was updated to match — rule IDs didn’t change, only the skill’s name did.

Vois Tokens, Vois Patterns, and Vois Components all split their single giant SKILL.md into a short entry point plus a references folder.

Reading one rule no longer means loading 500+ lines to find it. No rule content was added, removed, or reworded in the split — every rule ID and path ID survived the move intact.

Vois Tokens added dedicated elevation and iconography rules.

Two more places where agents used to guess now have an actual answer. One reference file covers the shadow scale and modal scrim behavior; the other covers icon sizing and stroke-width consistency.

This site’s Skills section launched — a public index and a detail page for every skill.

A place to actually see what these skills do before installing one. Each skill page lists what it takes in, what it hands back, how to install it, and how it connects to the rest of the system.

New Site

Vois Router added a mandatory copy gate before any implementation code gets written.

Every label, error, and button on a screen now gets reviewed by Righter as one batch, before Vois Tokens touches a single line. The gate applies in both gated and fast mode — only the confirmation prompt is skippable, never the review itself.

Vois Router and Vois Loop shipped their first public releases.

One entry point that reads a brief, figures out where to start, and carries context between every skill in the chain. Vois Router classifies the work and hands off between Vois Patterns, Vois Components, Vois Tokens, and Righter. Vois Loop wraps that same chain in a loop that detects conflicts between skills and routes back upstream until they resolve.

Vois Tokens added six layout-composition rules and seven semantic-HTML rules most AI models get wrong.

Things like sibling spacing belonging to the parent’s gap, not a child’s padding — small calls that compound into messy markup at scale. Also new: a CSS selectors-and-specificity section, banning ID selectors and capping nesting at two levels.

Vois Components shipped its first public release, covering the 20 most ambiguous shadcn/ui component pairs.

Dialog vs Drawer, Toast vs Banner, Select vs Combobox — the calls that get made inconsistently without a rubric. Every job comes with a decision tree and a "why not X" explanation, so the choice is defensible, not a guess.

Vois Patterns shipped its first public release.

A structural decision made before any code gets written, instead of discovered halfway through the build. Five core templates — settings pages, table/list with details, forms, dialogs, and detail pages — plus decision trees for container type, form complexity, and permissions handling.