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.
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.
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.
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.
/sitemap/ (the HTML index) grew from 95 to 125 entries across 3 new sections.sitemap.xml moved from an HF backend rewrite (96 URLs, stale) to a static build-time generator scanning the filesystem (123 URLs).robots.txt moved to a static file with explicit Allow for v3 + targeted Disallow per admin surface (no more /admin prefix collision with /admin-console/).vercel.json (/atlas → /atlas-network/, /admin → /admin-console/, etc.)./404.html now suggests "Did you mean?" via Damerau-Levenshtein distance against 80 known surfaces.
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.
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+.
scripts/run-all.sh — unified pipeline runner with coloured summary.run-all.sh --audit first. Failed audit aborts before Vercel push.| Measurement | Before | After |
|---|---|---|
| Surfaces on DS v3 tokens | 43/97 | 97/97 |
| Full OG metadata | 49/97 | 97/97 |
| Schema.org @graph | 22/97 | 96/97 |
| Per-surface OG cards | 6/97 | 97/97 |
| sitemap.xml URLs | 96 | 123 |
| /sitemap/ HTML entries | 95 | 125 |
| v3 surfaces with 4+ inbound | 16/29 | 26/29 |
| Median TTFB (20 surfaces) | 360ms | 250ms |
| Lint failures (12 checks) | — | 0/97 |
| Audit-gated deploys | no | yes |
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.
The React click-thru at /app-preview/ is the design reference. Replacing the live workspace is a separate, larger project.
TTFB measured. LCP/CLS/INP would require a browser harness — deferred to the next iteration.
static/<slug>/index.html with the v3 baseline (lang+dir, charset, viewport, title, description, colors_and_type.css, favicon.svg).scripts/seo/gen-og-svg.py in the CARDS dict.bash scripts/run-all.sh. It injects OG/Schema, generates the OG SVG card, refreshes sitemap.xml, and audits.No surface ships without universal coverage.