Skip to content

feat(frontend): redesign UI and self-host OFL fonts#58

Merged
DataGomes merged 1 commit into
awslabs:mainfrom
DataGomes:feat/frontend-redesign
May 18, 2026
Merged

feat(frontend): redesign UI and self-host OFL fonts#58
DataGomes merged 1 commit into
awslabs:mainfrom
DataGomes:feat/frontend-redesign

Conversation

@DataGomes
Copy link
Copy Markdown
Contributor

Summary

  • Frontend redesign: cohesive editorial "Observatory" aesthetic (warm dark palette, Instrument Serif display + Geist body + Geist Mono data, hairline rules, tabular numerics, quieter score gradient). Touches login, chat, results index + detail, and history.
  • Self-host three font families under SIL Open Font License 1.1 with explicit attribution in /THIRD_PARTY and bundled OFL.txt — removes the build-time dependency on fonts.gstatic.com and makes AWS Labs OSS compliance auditable.

What changed visually

  • Login: bright-white sign-in flash → editorial cover with italic ember accent
  • Chat: bubble chat → editorial transcript with mono role/time eyebrows
  • Results index: card grid → typographic table of contents with status glyphs and tabular score chips
  • Results detail: dense data display with large serif overall scores, per-criterion tables with hairline rules, tinted score cells, and a focused side detail panel
  • History: archive treatment with master/detail and consistent header

Design tokens consolidated into tailwind.config.ts and globals.css as semantic names (ink, bone, rule, ember, sage, wheat, oxide) — no more ad-hoc claude-* colour classes scattered across components.

License and compliance (AWS Labs)

  • All bundled fonts are SIL Open Font License 1.1, distributed unmodified from upstream
  • 4 woff2 files committed under frontend/app/fonts/ (~175 KB total)
  • SHA256 hashes pinned in frontend/app/fonts/SHA256SUMS for integrity verification
  • Canonical OFL 1.1 license text + per-font copyright statements bundled in frontend/app/fonts/OFL.txt
  • 3 attribution entries added to /THIRD_PARTY matching the existing format (Geist, Geist Mono, Instrument Serif)
  • Project code stays Apache 2.0 (LICENSE unchanged)

Sources:

Verification

  • tsc --noEmit → clean
  • BUILD_MODE=standalone next build → clean, all routes prerender
  • BUILD_MODE=export next build → clean (the static export consumed by the eval_mcp viewer)
  • All 4 self-hosted fonts emitted into .next/static/media/ byte-identical to the upstream files
  • 9 Playwright screenshots across /, /chat, /results, /results?group=..., /history with realistic mocked API data — 0 console errors, 0 console warnings

Side effect: dev hot-reload restored

next dev previously hung indefinitely on /chat due to a Turbopack + next/font/google interaction (font refetch at compile time). Switching to next/font/local removes the runtime Google dependency and unbreaks next dev for local frontend iteration.

Known gaps (deliberately deferred — happy to follow up)

  • prefers-reduced-motion not yet respected in keyframe animations
  • Focus-visible rings missing on most nav buttons / sidebar items / comparison cells
  • bone-mute (#6f6759) on ink (#0c0a08) is ~3.7:1 — below WCAG AA for normal-size body text; used on eyebrows and metadata in several places
  • Navigation uses <button onClick={router.push(...)}> instead of <Link href> (loses prefetching, right-click "copy link", middle-click new tab, and proper screen-reader link semantics)
  • aria-current="page" missing on active nav items
  • scoreColor helper duplicated across four components (should be one lib/score.ts)
  • Legacy claude-* Tailwind aliases left in tailwind.config.ts as a safety net during the migration — now unused and removable

Test plan

  • npm run build:viewer in frontend/, hard-reload localhost:4001/results — verify the redesign renders with real eval data
  • npm run dev in frontend/ — verify /chat no longer hangs (was broken pre-PR)
  • BUILD_MODE=standalone npm run build — verify the EKS-deployable bundle still produces
  • Review the 3 new entries in /THIRD_PARTY and the bundled OFL.txt for license-review correctness
  • (Optional) Verify SHA256 sums against upstream sources before merging

Replace the generic indigo-on-charcoal theme with a cohesive editorial
"Observatory" aesthetic: warm dark palette, Instrument Serif display +
Geist body + Geist Mono data, hairline rules, tabular numerics, and a
quieter score gradient (HSL oxide → wheat → sage) for the comparison
grid. Updates login, chat, results index + detail, and history with
semantic tokens (ink / bone / rule / ember / sage / wheat / oxide).

Self-host the three font families under SIL Open Font License 1.1 to
remove the build-time dependency on fonts.gstatic.com and make AWS Labs
OSS compliance explicit:

- bundle 4 woff2 files in frontend/app/fonts/ (distributed unmodified)
- pin SHA256 hashes in SHA256SUMS for integrity verification
- bundle SIL OFL 1.1 license text + copyright statements (OFL.txt)
- add three attribution entries to THIRD_PARTY
- switch frontend/app/layout.tsx from next/font/google to next/font/local

Verified: tsc --noEmit clean; both BUILD_MODE=standalone and
BUILD_MODE=export builds clean; nine Playwright screenshots across all
routes with realistic mocked API data (0 console errors, 0 warnings).
@DataGomes DataGomes changed the title Frontend redesign with self-hosted OFL fonts feat(frontend): redesign UI and self-host OFL fonts May 18, 2026
@DataGomes DataGomes force-pushed the feat/frontend-redesign branch from b17f231 to 01ee138 Compare May 18, 2026 00:01
@DataGomes DataGomes merged commit 43ba436 into awslabs:main May 18, 2026
1 check passed
@DataGomes DataGomes deleted the feat/frontend-redesign branch May 18, 2026 02:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant