legaleye
PHASE 30 · 2026-06-07 → 2026-06-09

DS bundle v3 — how the platform was rebuilt in 3 days

Three days. 22 versions shipped. The platform moved from 43 surfaces on v3 to 97 surfaces on unified infrastructure: a shared token sheet, automatic OG + Schema.org metadata, a dynamic sitemap, and an audit gate that blocks deploy if anything breaks.

Status: Done · 97/97 surfaces on v3 Versions: v2.99.560 → v2.99.583 Dates: 2026-06-07 → 2026-06-09

§ 01The starting position

After DS v2 (shipped in v477 in early June), 43 surfaces were on the new design system. The remaining 54 still ran on inline styles that predated v3. The Legal Eye Design System (3).zip arrived with 37 new high-fidelity surfaces plus shared infrastructure (token sheet, mobile rules, helpers).

The complication: 97 surfaces is too many to hand-edit. Everything done had to be automatable, idempotent, and verifiable.

§ 02What we built

1. The port (v560–v565)

37 surfaces were bulk-imported. port-v3.py did the import with path rewrites. fix-links-v3.py caught the cross-bundle hrefs the first script missed.

/index.html (the production workspace app) was deliberately not replaced — it's a 1,464-line working application that would have required full re-implementation. Instead, it received the v3 token sheet loaded before its own CSS so the brand colors propagate via CSS variables.

2. Universal infrastructure (v567–v570)

After the port, 54 legacy surfaces still didn't have the v3 token sheet. One injector run added <link rel="stylesheet" href="/colors_and_type.css"> to all of them. 97/97 surfaces now share a single source of truth for design tokens. Future palette tweaks happen in one file and propagate everywhere.

Then OG metadata: before — 48-60 surfaces missing og:title/description/image/url, canonical, twitter:card. After — 0. 49 surface-specific Hebrew descriptions were authored for the v3 ports.

3. Discoverability (v568, v569, v571)

4. Per-surface OG SVG cards (v572)

gen-og-svg.py generates a 1,200×630 SVG card for every surface — brand mark, Hebrew title, tagline, URL footer. ~2.4KB each. An autogen sentinel guards manual edits. Every link share now gets a unique preview; no more generic favicon fallback.

5. Schema.org + cross-linking (v577–v578)

schema-inject.py added a consolidated @graph block (WebPage + Speakable + BreadcrumbList + Organization + WebSite) to every surface missing any of those types. Pre-state: 76/97 missing WebPage, 95/97 missing Speakable. Post-state: 0.

linkgraph-audit.py measured inbound links to every v3 target. Pre-state: 1 orphan + 12 under-linked. Two link-strip injectors moved the average from 3 inbound to 11+.

6. Operational hardening (v579–v583)

§ 03The numbers

MeasurementBeforeAfter
Surfaces on DS v3 tokens43/9797/97
Full OG metadata49/9797/97
Schema.org @graph22/9796/97
Per-surface OG cards6/9797/97
sitemap.xml URLs96123
/sitemap/ HTML entries95125
v3 surfaces with 4+ inbound16/2926/29
Median TTFB (20 surfaces)360ms250ms
Lint failures (12 checks)0/97
Audit-gated deploysnoyes

§ 04What didn't get done

/en/ v3 surface mirror

The English landing got the token sheet + OG metadata + Schema.org along with everyone else, but a parallel /en/ tree mirroring all 97 surfaces is not yet built.

Production /index.html UI replacement

The React click-thru at /app-preview/ is the design reference. Replacing the live workspace is a separate, larger project.

Deeper performance budget

TTFB measured. LCP/CLS/INP would require a browser harness — deferred to the next iteration.

§ 05How to add a new surface now

5 steps — post-v3 playbook

  1. Create static/<slug>/index.html with the v3 baseline (lang+dir, charset, viewport, title, description, colors_and_type.css, favicon.svg).
  2. Add an entry to scripts/seo/gen-og-svg.py in the CARDS dict.
  3. Run bash scripts/run-all.sh. It injects OG/Schema, generates the OG SVG card, refreshes sitemap.xml, and audits.
  4. Commit. The pre-commit hook re-stages regenerated SVGs + sitemap.
  5. Deploy. The audit gate runs first. Failed? The whole pipeline blocks.

No surface ships without universal coverage.