Skip to content

Turn taste into a design system your code actually uses.

M1rror takes the references you admire, your existing React components and your team’s feedback, and turns them into an approved, versioned design system. Then it hands a coding agent a scoped contract and returns a pull request with evidence. You decide what ships.

Pilot for React and TypeScript web apps. Billing runs in test mode.

Illustration of the M1rror workbench. The header shows the project, its branch, the five modes — Board, System, Screens, Review and Implement — and release v3 in review. The left rail lists private references and bound components. The board shows a checkout screen with the primary Button selected and bound to src/components/ui/button.tsx, plus its loading, empty and error states. The right panel shows the agent with the selected Button as context, an approval record for release v3 bound to a digest, and a running implementation with its scope, budget and a cancel control.

How a reference becomes a merged change

Each step produces a real object you can inspect: a reference with rights, a decision, a versioned system, a binding to your code, a release, a contract and a pull request. Nothing moves forward on a screenshot alone.

  1. Collect references

    Upload screenshots or save links to interfaces you admire. Every reference is private to your workspace and carries its source, rights status and permitted use, so nothing leaves with the wrong licence.

  2. Capture an app you own

    Optional: point M1rror at a live web app you own or may analyze. It extracts tokens, component patterns and interaction behaviour as evidence, and saves them as a rights-tagged reference you can adopt or adapt.

  3. Decide what to keep and avoid

    Mark the qualities you want and the ones you don’t. The agent proposes distinct directions on your own screens and content, so you compare like with like.

  4. Approve a versioned design system

    Tokens, type, spacing, components and their states become one versioned system. Aliases, literals and unresolved values are labelled, and tokens export as DTCG JSON.

  5. Bind to the components you already have

    M1rror reads your React code and maps the system onto your real components: import path, props and source revision. Uncertain matches are flagged for you to confirm, not silently replaced.

  6. Compose screens with every state

    Lay out representative screens with the bound components, including loading, empty, error, denied and narrow-window states. States that don’t apply are marked as such rather than invented.

  7. Review, then approve an immutable release

    Teammates comment on the exact artefact revision. Approval is recorded against a digest of what was reviewed; changing anything afterwards creates a new release instead of quietly editing this one.

  8. Run a scoped implementation

    A coding agent receives a contract: the approved release, base commit, allowed and forbidden paths, budget and required tests. It works in a disposable workspace and returns evidence, not a claim.

  9. Merge the pull request yourself

    You get a branch and a PR with before-and-after evidence, tests run, components reused and known gaps. M1rror never merges or deploys for you.

One workbench for the whole loop

A board in the middle, your references and real components on the left, and an agent, inspector and comments on the right. The chrome stays neutral so your product’s design is the thing you see.

Five modes, one project shell

Board
A spatial board for references, directions, screens and notes. An accessible outline mirrors everything on it.
System
Tokens, type, spacing and components with their states, versioned as one design system.
Screens
Representative screens composed from bound components, each with its applicable states.
Review
Threads on exact revisions, required reviewers, blockers and the approval record.
Implement
Contracts, runs, evidence and the branch, with approved, implemented, tested and merged kept apart.

A right panel that follows your selection

Agent
Works on what you selected. The selection appears as a context chip before anything is sent, and consequential actions go through the same permission checks as yours.
Inspect
Shows the selected object’s tokens, component binding, source revision and where it came from.
Comments
Threads attach to the artefact and revision. Comments and reactions are never counted as approval.

The header always shows the project, branch, draft or release identity, collaborators and job state. Switching panels keeps your zoom, selection and unsent drafts.

Capture an interface you already own

Point M1rror at a live web app you own or have permission to analyze. It extracts colour, type, spacing, radii and motion tokens, component patterns, and interaction behaviour such as focus, hover, keyboard handling and transitions.

The result is a private, rights-tagged reference and a captured target direction. Adopt it to match that UI exactly, or adapt it alongside your other references.

  • You attest rights first. Analysis doesn’t start until you confirm you own the app or may analyze it.
  • Evidence for every value. Each token and behaviour shows where it was observed. Inferred values and gaps are labelled as limitations.
  • Web today. Live web URLs work now; web bundles and Electron apps are next. Native binaries aren’t analyzed in the hosted product.

Powered by REA (Reverse Engineer Anything), MIT-licensed open source.

Captured target

https://app.example.com · 6 routes

Private · rights attested by you
Example tokens and behaviours with the evidence for each
Token or behaviourEvidence
color.text.default#1C1B19observedComputed style on 118 text nodes
type.bodyInter 15/24observedComputed style on 64 paragraphs
space.stack.md16pxobservedMost common gap in 23 vertical stacks
Button / pressedscale 0.98observedObserved on pointer down, 3 buttons
Menu / keyboardArrow keys + EscpartialListener found; Home/End not handled
Card / hovershadow liftinferredInferred from stylesheet, not exercised

Illustrative example of capture output.

Approved, implemented, tested and merged are four different words

A single green checkmark hides the difference. M1rror keeps them as separate states, each moved by a different party and backed by its own evidence, so your team always knows what is true.

  1. Approved

    Who moves it

    Designated reviewers

    What proves it

    An approval record bound to the release digest, with reviewers, blockers and expiry.

  2. Implemented

    Who moves it

    A scoped run, authorised by a repository operator

    What proves it

    A branch whose diff stays inside the contract’s allowed paths and budget.

  3. Tested

    Who moves it

    Deterministic checks, not the agent’s word

    What proves it

    Recorded results for the exact SHA, including failures and the baseline.

  4. Merged

    Who moves it

    You, under your branch protection

    What proves it

    The merged SHA, compared against what was tested. Deployed is a separate state again.

  • People approve.

    Agents can draft, propose and submit evidence. They cannot approve their own work, edit acceptance criteria or suppress a failing check.

  • Approvals bind to what was reviewed.

    Each approval records a digest of the release. Change the target and you get a new release, not an edited one.

  • Code work needs its own approval.

    Design approval doesn’t authorise implementation. A separate approval names the base commit, paths, budget and tools.

  • Your code never runs in the control plane.

    Builds and tests run in a disposable workspace with allowed-path checks, a time limit and a scrubbed environment.

  • Spending is reserved up front.

    A run reserves its budget before it starts. Cancel stops the work and releases what wasn’t used.

  • Permissions are checked again at execution.

    A queued action re-checks access when it runs, so a revoked grant stops it.

Read how security and governance work

Give your coding agent the approved system, not a vibe

M1rror runs an MCP server, so any MCP-capable coding agent can fetch the approved release, real component APIs, tokens and the implementation contract — instead of guessing styles.

Grants are scoped to one workspace. Reading never implies repository writes, drafts land as proposals for people to review, and opening a pull request needs human approval. Self-reported test results aren’t trusted; evidence is checked against the same contract.

Included on Studio and Team.

m1rror · MCP tools

Readworkspace-scoped grant

  • taste_get_project_context
  • taste_search_references
  • taste_get_tokens
  • taste_search_components
  • taste_get_component
  • taste_get_release
  • taste_get_implementation_contract
  • taste_get_run_status

Draftlands as a proposal for people to review

  • taste_propose_change
  • taste_request_review
  • taste_prepare_implementation
  • taste_submit_evidence

External writerequires human approval

  • taste_request_pr_creation

Your references and code stay yours

Private by default
References, captures, repositories and screens belong to your workspace. Nothing is public unless you export it.
Rights travel with every reference
Source, rights status and permitted use are stored with each item and checked again on export or handoff to an agent.
Only what the recipient may see
Implementation contracts include only the references permitted for that recipient and purpose, never a dump of the workspace.
Workspaces are isolated
Every query is scoped to your workspace on the server. Another workspace can’t reach your artefacts, jobs, exports or search results.
No public model training
Your code, references and feedback are not used to train public models.
Support is a separate role
Staff diagnostics use separate, least-privilege access that is audited and can’t read your raw source.

Pricing for the pilot

Start free. Pay when you want implementation runs and the MCP server. Reviewers never need a paid seat.

Pilot pricing — Explore free, Studio $49/mo, Team $199/mo (test mode; subject to change)

Explore

$0free

Try the loop on a small project.

Start free
  • Usage units per month60
  • Projects2
  • Editors2
  • ReviewersFree
  • Private references and capture
  • Design system, bindings and review
  • Implementation runs and pull requestsNot included
  • MCP server for coding agentsNot included

Studio

$49per month

For a builder shipping a real product.

Start with Studio
  • Usage units per month1,000
  • Projects10
  • Editors5
  • ReviewersFree
  • Private references and capture
  • Design system, bindings and review
  • Implementation runs and pull requests
  • MCP server for coding agents

Team

$199per month

For small teams and agencies with reviewers.

Start with Team
  • Usage units per month5,000
  • Projects50
  • Editors25
  • ReviewersFree
  • Private references and capture
  • Design system, bindings and review
  • Implementation runs and pull requests
  • MCP server for coding agents

Costs are shown before consequential work, and a run reserves its units before it starts. If a run is cancelled, unused units are released. When you reach your allowance, new runs stop with a clear message and your existing work stays readable.

Reference analysis
1 unit
Agent step
4 units
Repository audit
5 units
Rendered repository audit
15 units
Design direction
6 units
Implementation run
25 units

What’s gated, and why

Some capabilities depend on agreements or qualification we don’t have yet. In the product they show as gated, with the reason, rather than pretending to work.

  • Mobbin reference catalog: not yet available.

    M1rror has no Mobbin catalog of its own. Bring your Mobbin account through the official Mobbin MCP server in your own agent and save the screens you pick.

  • Figma live sync: not yet available.

    No live two-way sync. Import frames and styles with a Figma token (variables on Enterprise plans), or use the Figma MCP server from your agent; tokens export as DTCG JSON.

  • Sandboxing for untrusted repositories: not yet available.

    Runs use local isolation that isn’t qualified for untrusted code, so only repositories you connect and own may run.

  • Capture beyond live web apps: not yet available.

    Web bundles and Electron apps are next. Native binaries aren’t analyzed in the hosted product.

  • Live billing: not yet available.

    Stripe runs in test mode during the pilot. No real charges are made.

Questions

Is this an app builder or a Figma replacement?
Neither. M1rror improves and governs a product you already have, or one you are starting from a brief. It is not a vector editor and it doesn’t generate whole apps. Figma stays optional.
What does it support today?
React and TypeScript web apps. The system exports as DTCG tokens, but executable code changes are only made through the supported React adapter. Each project shows its capability level so you know what applies.
Will it change my business logic?
Visual work doesn’t authorise changes to business logic, payments, data models or authentication. Implementation contracts list allowed and forbidden paths, and a run that strays outside them fails its checks.
Can the agent approve or merge its own work?
No. Agents can draft and submit evidence. Approval is a human action recorded against a release digest, and merging happens in your repository under your branch protection.
Where does my code run?
Never in the M1rror control plane. Implementation runs use a disposable workspace with a scrubbed environment and allowed-path checks. During the pilot this isolation is not qualified for untrusted code, so only repositories you connect and own may run.
Can I capture any website I like?
Only apps you own or have permission to analyze. You attest to that before analysis starts, the result is private to your workspace, and it is tagged with its rights status. Every extracted value shows its evidence, and anything inferred is labelled.
Do you train models on my material?
No. Your repositories, references and captures are private by default and are not used for public model training.
Do reviewers need a paid seat?
No. Reviewers can comment and approve on every plan without a paid seat.

Start with one reference, one component and one screen.

Connect a React project, save a reference you like, and take one change all the way to a pull request.