Your codebase already has a design system. It just doesn’t know it.
Saer reads your Tailwind config, your CSS variables and every component, reconstructs the colour system you actually ship, and shows exactly where the code has drifted from it.
$ saer scan .SAER interface system intelligenceDetectedTailwind config: foundCSS custom propertiesColour system reconstructed.167 canonical colour entities99.8% token-reference coverageFound97 exact drift findings (753 raw uses)72 near-matches, kept separate1 entity Saer could not resolve, and says soReport .saer/report.html <- open this
Twelve colours that were meant to be tokens.
Each raw hex sits next to the declared token it is almost certainly a copy of. Found in a real scan of Lunary, the app I build. Hover for the evidence.
One command. Evidence, not opinions.
Reconstruct
Saer finds every place your project declares colour, follows every var() chain to the real value, in every theme and mode, and builds the system you actually have.
Compare
It reads every component and finds raw values that bypass a token, near-misses that were probably meant to be one, tokens nobody uses, and definitions that contradict each other.
Decide
You get one report: what’s certain, what’s inferred and how confident, and the handful of questions only you can answer. Saer never invents an answer it can’t prove.
What Saer found in my own app.
Exact drift Deterministic
Hard-coded values identical to a declared token. Safe to replace.
Near-matches Inferred
Probably meant to be a token. Shown with distance, never mixed with exact drift.
Numbers and colours from a real scan of Lunary, October 2026. Nothing was cherry-picked except the order.
Built to be trusted with your codebase.
Your code never leaves your machine.
No upload, no account, no telemetry. It works offline after the first run. Your repository is read, never sent.
Same code in, same answer out.
No model at scan time. Every finding traces back to the files it came from, and the findings are identical on every machine and Python version.
“I don’t know” is an answer.
When the evidence doesn’t settle a question, Saer says so and shows you why, instead of guessing confidently.
Colour first. The whole audit next.
Colour
Tokens, themes, modes, drift, near-matches, dead and conflicting declarations.
Typography
Families, sizes, weights, line heights and tracking: the scale you really use.
Spacing, radius & elevation
The spacing, radius, shadow and layering scales hiding in your styles.
Components
Every component, where it’s used, duplicates, variant sprawl and one-off overrides.
Accessibility
Contrast of the colour pairs you actually ship, focus styles and tap targets.
The full audit
One report across every area: scores you can trace, the top fixes, and evidence for each.
Guard
A CI check that fails the pull request when new drift sneaks in.
Website audit
Point Saer at a URL for a quick read of a live site’s design system.
Free to look. Pay to see everything.
Free
Try it on any project.
- Scan any project, locally
- Headline numbers and your top findings
- Nothing uploaded, no account
Pro
For one developer who wants the whole picture.
- Full report: every finding, every file
- Every domain as it ships, not only colour
- JSON export of the reconstructed system
- Updates for as long as you subscribe
Team
From 3 seats. Add or remove seats any time.
For a team that wants drift caught before it merges.
- Everything in Pro, for every seat
- Guard: fail a pull request when new drift appears
- Shared baseline, so only new drift is flagged
- Priority fixes when Saer gets something wrong
Bigger team, invoicing or security review? Talk to us about Enterprise.
Prices in GBP. Paid plans open after the private beta. Everyone in the beta gets Pro free while it runs.
Try it on your codebase.
Questions, answered plainly.
Does any of my code leave my machine?
No. Saer runs on your computer, reads your files, and writes a report into a .saer folder in your project. Nothing is uploaded, there is no account, and no AI model is involved when it scans. The only network use is a one-time download of two standard Python libraries the first time you run it.
What does it understand today?
Colour, thoroughly: Tailwind v3 configs, Tailwind v4 @theme blocks, CSS custom properties (including dark mode and other theme contexts), Tailwind's own default palette, and pnpm, npm and yarn monorepos. Typography is being built now; spacing, radius and elevation, components, accessibility and a CI guard follow, adding up to a full design-system audit. All of it is included in Pro as it ships.
How is this different from a linter or a token tool?
Linters check rules you already wrote down, and token tools assume your tokens are the truth. Saer starts from the code you actually ship, works out what the system really is, and shows where reality and intention have come apart: raw values that equal a token, near-misses, dead declarations, conflicting definitions.
What happens when Saer isn't sure?
It says so. If two files define the same variable differently and nothing in the code says which wins, Saer reports both and tells you it can't rank them, rather than picking one. Exact findings and inferred ones are always kept apart.
Will it change my code?
No. It only reads. It writes its report into .saer/ inside the project you scanned, which you can delete or git-ignore.
What do I need?
A Mac (Linux should work but is less tested; Windows isn't supported yet), Node 18 or newer, and Python 3.10 or newer. Results are identical on every supported Python version.
Can I cancel?
Yes, any time. Your licence keeps working until the end of the period you paid for.