Sheet 01 / 09 · Specimen

Drawing set UI‑DNA · rev 0.3.0 · every dimension on this sheet was measured by this page, live, in css px

UI DNA

type · measuredArchivo 800 · wdth 1250 px / .74 · −0.05em
color · probe#121211 · inksource computed-style
hover a letterits advance width ismeasured on the spot

Reverse‑engineer any interface. Rebuild it as code you own. Prove it.

UI DNA measures a live interface down to the token, hands your coding agent a document with provenance on every value, generates a React project, and checks the rebuild against the original.

$ npm install -g @rohzzn/uidna

X x-ray this page ←→ or scroll to move along the set

UI DNAType 0.3.0
Transitions replayed
73/73
Fixture A
Pixel diff at 1280 px
0.66 %
Fixture A
Breakpoints located
600 · 960 · 1100
Fixture B
Generated tests passed
111/111
Fixture B
Writes to the server
0
Fixture B
Ser. @rohzzn/uidnaMITNode ≥ 20.19

General notes

  1. No model calls. UI DNA measures; your agent reasons.
  2. No API keys and no account.
  3. Runs on your machine, in a Chromium that Playwright installs.
  4. Twelve tools over MCP, the same twelve on the CLI.
Continued on sheet 02

Sheet 02 / 09 · Capture · exploded view

Fixture A · the marketing page UI DNA rebuilds in CI

02 Capture

Every page, every viewport, taken apart.

Chromium loads each page at each viewport and records five layers per state: the screenshot, every box, the computed styles, the accessibility tree and the DOM.

Viewport
Viewports1280 · 768 · 390
Nodes per state71
Assets1 image
Width conditions2 · 768 · 1024
Requests that write0
  1. Layer 5 · DOM71 nodes · tags, classes, attributes
  2. Layer 4 · Accessibilityroles, names, levels, states
  3. Layer 3 · Stylescomputed, per node, per state
  4. Layer 2 · Boxesgeometry for every node
  5. Layer 1 · Screenshot1280 px · full page png

Sheet 03 / 09 · Explore · state diagram

Pick a state to open its detail

03 Explore

Performed, recorded, undone.

Every safe interaction: hover, focus, keys and safe clicks. Each action is snapshotted, performed, diffed and reverted. Every request that would write is blocked for the whole run.

Interactions tried88
Transitions recorded73
Skipped, with reasons44
POST requests sent0

Network while exploring · Fixture B

GET/api/orders.json200
POSTArchive, a row actionblocked
GET/styles.css200
BEACONsent while unloadingblocked

Sheet 04 / 09 · Measure · parts list

Selection from Fixture A at 1280 px · hover a row or a balloon

04 Measure

Values become tokens. Structure becomes components.

Measured values cluster into tokens with sample counts. Structural fingerprints become component candidates, matched across pages; repeated items become collections.

Parts list · 10 colors · 17 type styles · 12 spacing · 7 components

ItemDesignationValueKind · source

Sheet 05 / 09 · Breakpoints and collections

Fixture B · an orders dashboard · drag the frame's edge

05 Breakpoints · collections

Breakpoints, located to the pixel.

UI DNA reads the stylesheet’s width conditions, then resizes one pixel either side to confirm each threshold. On Fixture B it found 600, 960 and 1100 px. None was a scanned width.

600599 → 600960959 → 96011001099 → 1100
Fixture BMR
Orders6 orders

Collection rulebase · 6 items · identity by order idFixture B: 32 rules recorded

Sheet 06 / 09 · Annotate and generate · revisions

Drag the divider · original left, rebuild right

06 Annotate · generate

Your agent names it. UI DNA builds it.

Your agent reads the document and records what it sees: names, roles, intent. Each reading is stored as inferred and never overwrites a measurement. Then UI DNA generates a React, TypeScript, Tailwind and Vite project with a Playwright suite.

annotate_dna · one patch from the agent

{
  "path": "/components/2",
  "set": { "name": "FeatureCard" },
  "provenance": {
    "kind": "inferred",
    "why": "3 cards share one fingerprint"
  }
}
OriginalRebuild
Revisions
RevDescriptionByKind
1Header and menu named SiteHeaderagentinferred
2Three cards named FeatureCardagentinferred
3Illustration kept as a labeled placeholder, asset not authorizedpolicyunknown

Generated · ./clone

src/
├─ App.tsx
├─ components/
│  ├─ SiteHeader.tsx    △1
│  ├─ FeatureCard.tsx   △2
│  └─ Placeholder.tsx   △3
└─ tokens.css         from the DNA
tests/
└─ behavior.spec.ts   73 transitions
tailwind.config.ts
uidna.json            the document

ReactTypeScriptTailwindVitePlaywright

Sheet 07 / 09 · Verify · tolerances

Pixels, geometry, styles and replayed transitions, per page, state and viewport

07 Verify · repair

Proof is a list of differences. Not a score.

Each finding names the original value and the generated one. Your agent repairs against the DiffReport and verifies again.

Pixel diff0.66 %1280 pxpass
Pixel diff0.53 · 0.80 %768 · 390pass
Transitions73 / 73replayedpass
Breakpoints3 / 3both sidespass
Findings21one imageby design
CI · five verify attempts · it breaks the rebuild on purpose · pick an attempt

Sheet 08 / 09 · Tools · pinout

Pick a pin to read its datasheet

08 Tools

Twelve tools. One envelope.

Every answer arrives as an evidence envelope: result, evidence id, evidence, limitations and unknowns. uidna setup registers the server with Claude Code, Codex and Cursor, shows the changes first and backs up every file.


Sheet 09 / 09 · Notes · assembly · end of set

Scan interfaces you own or are allowed to analyze

09 Notes

Notes, assembly and links

General notes

  1. Every non-GET request is blocked while exploring, beacons included.
  2. Crawls stay on one origin, honor robots.txt and are rate-limited.
  3. Secrets are redacted before anything is stored.
  4. Never gets around logins, CAPTCHAs or access controls. Never stores credentials.

Exclusions

  • iframe content and shadow DOM are not entered.
  • Inline SVG markup becomes a placeholder.
  • Crawls follow same-origin links, up to 50 pages.
  • Server responses to form submissions are never observed.
  • Container queries, clamp() and vw values are not breakpoints.
  • The generated project is a baseline your agent repairs.

Assembly · Node 20.19 or newer

  1. 1

    Install the CLI

    npm install -g @rohzzn/uidna
  2. 2

    Install Chromium

    npx playwright install chromium
  3. 3

    Register with your agents

    uidna setup
  4. 4

    Check the setup

    uidna doctor

See an interface you like. Rebuild it with proof.

$ npm install -g @rohzzn/uidna