feat(web): align source with Interlock visual identity - #38
Merged
Conversation
Bring the website source in GitHub back in line with the approved Interlock visual identity. main currently carries the pre-refresh design, and the production deploy triggered by the PR #37 merge reverted the live site to it, so the identity now exists in neither main nor production. This is source alignment only. No redesign, no new features, no copy rewrite, and no backend behavior change. Brand assets - add the six approved marks: lockup, icon, and favicon in white and mono - white marks use #ffffff, mono marks use currentColor; no amber-accent variant is added or referenced - geometry is untouched: no redraw, recolor, rotation, crop, shadow, or bracket-offset change - include the 64px PNG favicon fallback, verified to be a pure uniform scale of interlock-favicon-white.svg: its opaque bounding box and mid-row column profile match the 48-unit favicon geometry and rule out the 64-unit icon, and every fully opaque pixel is #ffffff Header and favicon - desktop header renders interlock-lockup-white.svg at 28px, linked to / - below 900px the same element swaps to interlock-favicon-white.svg at 28px, and the dashboard mobile header uses the same favicon mark at 28px - nav bar grows 64px to 74px so the mark keeps clear space equal to one bracket height; at a 28px lockup one bracket is 22.83px, which the old 64px bar could not provide (18px). Measured result: 23px top, 24px bottom, 24px left - <link rel="icon" href="/interlock-favicon-white.svg" type="image/svg+xml"> plus the PNG fallback link - Dashboard navigation is present and routes to /dashboard/ Visual system - graphite near-black canvas, not the green-black variant - green reserved for approved/verified, amber for changed/review, red only for held/quarantined - Space Grotesk for display, JetBrains Mono for labels, hashes, statuses, and evidence - thin borders and the previously approved technical grid only; no glow pools, gradients, or bokeh - token values are the approved ones from the validated design, not reinvented Dashboard correctness carried over - visible Dashboard navigation - severity-banded risk meter via riskSeverity, with 14 unit tests - unavailable risk renders "Risk unavailable" and never 0/100 Low - THREAT SEVERITY and RISK SCORE remain separately labelled measurements - contain the sidebar lockup, which is intrinsically 265.4px wide while the sidebar leaves 208px, so it previously rendered clipped as "Interloc" Verified: npm ci, npm test 14/14, tsc --noEmit exit 0, npm run build clean at 1586 modules, git diff --check clean. Real-browser checks at 1440px and true 390px mobile emulation confirm the desktop lockup, mobile favicon mark, favicon links, Dashboard routing, no horizontal overflow, and a visible 3px focus ring under real Tab input. No backend data contract, route, or configuration file is touched; all 23 files are under interlock-web/.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
MaazAhmed47
marked this pull request as ready for review
July 29, 2026 07:11
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Aligns the website source in GitHub with the approved Interlock visual identity. Source alignment only — no redesign, no new features, no copy rewrite, no backend change.
Why this is needed now
mainstill carries the pre-refresh design. The production deploy triggered by the PR #37 merge re-publishedmaintogetinterlock.dev, which reverted the live site. Verified during this work:getinterlock.dev/is now byte-identical toorigin/main'sinterlock-web/index.html— both SHA-25690948186dd8bb775…, 32 413 bytes./interlock-lockup-white.svgand/interlock-favicon-white.svgreturn HTTP 404 in production./favicon.icois back to the 176-byte placeholder.So the approved identity currently exists in neither
mainnor production. This PR restores it to source.Scope
A. Brand assets
Six approved marks added to the Vite public directory:
interlock-lockup-white.svg,interlock-icon-white.svg,interlock-favicon-white.svg,interlock-lockup-mono.svg,interlock-icon-mono.svg,interlock-favicon-mono.svg#ffffff; mono marks usecurrentColor. No amber-accent variant is added or referenced — confirmed by extracting every colour literal from all six files.x 5..58, y 5..58and a mid-row column profile of[5..15] + [37..58]. Those match the 48-unit favicon geometry scaled ×4/3 exactly, and rule outinterlock-icon-white.svg, which would give8..56. Every fully opaque pixel is(255,255,255).B. Header and favicon
interlock-lockup-white.svgat 28px, linked to/. Measured:logoHeight 28,logoSrc …/interlock-lockup-white.svg.interlock-favicon-white.svgat 28px — the favicon mark, not the ordinary icon. Measured:logoHeight 28, logoWidth 28, logoSrc …/interlock-favicon-white.svg. The dashboard mobile header uses the same mark at 28px.<link rel="icon" href="/interlock-favicon-white.svg" type="image/svg+xml">plus the PNG fallback link./dashboard/; on mobile it is reachable through the nav toggle (verified by clicking it).One geometry change, forced by arithmetic. Clear space equal to one bracket height is a required scope item. In the lockup viewBox the bracket is 30 of 36.8 units, so at a 28px lockup one bracket height is 22.83px, needing a bar of ≥73.65px. The existing 64px bar gave only 18px. The nav bar therefore moves 64px → 74px. Measured result: 23px top, 24px bottom, 24px left — all ≥22.83px. The mobile dropdown offset moves with it. For contrast, the previously approved 24px lockup needed 19.57px and fit the 64px bar, which is why 24px was originally chosen.
C. Visual system
Graphite near-black canvas (not the green-black variant); green reserved for approved/verified, amber for changed/review, red only for held/quarantined; Space Grotesk for display, JetBrains Mono for labels, hashes, statuses and evidence; thin borders and only the previously approved technical grid — no glow pools, gradients, or bokeh. Token values are the approved ones from the validated design, not reinvented.
D. Dashboard correctness carried over
Visible Dashboard navigation; severity-banded risk meter via
riskSeverity; unavailable risk renders "Risk unavailable" and never 0/100 Low; THREAT SEVERITY and RISK SCORE remain separately labelled. Also contains the sidebar lockup, which is intrinsically 265.4px wide while the sidebar leaves 208px, so it previously rendered clipped as "Interloc".No backend behaviour changed
All 23 changed files are under
interlock-web/. Explicitly 0 changes inROADMAP.md,core/,demo/,docs/,tests/,helm/,models/,routes/,proxy.py,config.py,.github/,requirements.txt,Dockerfile. No backend data contract, route, or configuration file is touched.src/api.tsis not modified.Verification
npm cinpm testtsc --noEmitnpm run buildgit diff --checkReal-browser checks via CDP, at 1440px and true 390px mobile emulation:
image/svg+xml+ PNG/dashboard/scrollWidth 1440 = innerWidth)390 = 390)solid 3px rgb(95,237,131), offset 3px,:focus-visiblematched under real TabAll eight brand/favicon assets return HTTP 200 from the build output. Landing and dashboard both render; text is legible with no overlap.
One caveat, stated honestly. The dashboard emits two console errors when served from
127.0.0.1: a CORS rejection ofhttps://interlock.onrender.com/health. This is environmental, not a defect and not introduced here — the call originates insrc/api.ts, which this PR does not modify, and the deployed dashboard (sameapi.ts, allowed origin) measures zero console errors.Difference vs the existing production deployment
Production currently serves the reverted pre-refresh design, so this source differs from it wholesale — that is the point of the PR. Two intentional differences also exist against the earlier approved deployment:
Deployment
No deployment occurred from this work. Nothing was merged, tagged, or released; no Vercel project or linking changes; no production configuration modified. This PR is a draft.