Skip to content

feat: cozy pixel retheme, a landing page and a cross-repo dashboard - #1

Merged
Asmodeus14 merged 1 commit into
masterfrom
feat/pixel-retheme
Aug 31, 2026
Merged

Asmodeus14 merged 1 commit into
masterfrom
feat/pixel-retheme

Conversation

@Asmodeus14

Copy link
Copy Markdown
Owner

Reworks the product around a pixel-art visual language: a mint-sage canvas with warm cream cards, a coral accent, deep forest type, and monospace everywhere. Dark mode becomes a forest night rather than reverting to neutral grey.

Routing changes shape. / was the tool itself — a paste-a-URL form that had to reach the backend before it could render anything useful. It is now a static landing page, and the tool moved to /analyse unchanged. The three shells that result (marketing header, app header, dashboard rail) share nothing visually, so the root layout stops rendering chrome and each route group owns its own.

New surfaces:

  • / — landing page with a hand-built SVG pixel scene. Light mode is a rabbit fishing from a dock; dark mode is the same rabbit at a campfire. Both are in the DOM and CSS picks one, so the correct scene is in the server-rendered HTML with no hydration mismatch. Four rotating signs per scene on a 36s cycle. The loop starts after mount, not during: an infinite animation stops a Lighthouse filmstrip reaching visual completeness, which is the same reason the skeleton pulse is capped at four iterations.

  • /dashboard — cross-repo analytics. No new endpoint; every figure derives from the existing listReports via lib/reports.ts, which also absorbs the grouping that was inline in the history page so the two cannot drift.

Three bugs found while checking this in a browser, all pre-existing or introduced and fixed here:

  • danger buttons used text-white, which measured 2.62:1 against the dark theme's critical pink. The severity ramp's dark values had only ever been checked as foreground text, never as a button background. Now 6.33:1.

  • The chart's x axis always drew the last tick and every nth tick, so with twelve points the final two overprinted into an unreadable smear.

  • Score-chart labels formatted dates on both sides of hydration, and the server and browser do not share a locale (20:35 vs 08:35 pm). They are now formatted once on the server and passed down.

The severity ramp was re-measured from scratch rather than carried over: the canvas is no longer white, and every foreground step now clears 4.5:1 against the canvas, the card surface, and its own chip in both themes. critical moved to a deep oxblood so a Critical chip cannot be mistaken for the coral call to action, and the accent split into a text-bearing --accent that passes AA and a decorative --accent-soft at the artwork's lighter tone.

Findings density, the code viewer, the shiki rules and the diff colours are deliberately untouched.

Claude-Session: https://claude.ai/code/session_012kY2ubYamHxfA1B49oJr2p

What and why

Checks

  • npm run lint
  • npm run typecheck
  • npm run test
  • npm run build — several App Router mistakes only appear here
  • Documentation updated in this PR

If this changes the API contract

  • lib/types.ts matches the backend's app/schemas.py, and the backend PR
    is linked

Interface changes

  • Works in light and dark
  • Interactive elements have accessible names; tests query by role
  • Any new chart renders its hidden data table and states the trend in words
  • No arbitrary colour values — semantic tokens only
  • Nothing depends on animation to be understood

If this touches security

The markdown renderer, the OAuth callback, or lib/session.ts — say so here.

Reworks the product around a pixel-art visual language: a mint-sage canvas
with warm cream cards, a coral accent, deep forest type, and monospace
everywhere. Dark mode becomes a forest night rather than reverting to neutral
grey.

Routing changes shape. `/` was the tool itself — a paste-a-URL form that had
to reach the backend before it could render anything useful. It is now a
static landing page, and the tool moved to `/analyse` unchanged. The three
shells that result (marketing header, app header, dashboard rail) share
nothing visually, so the root layout stops rendering chrome and each route
group owns its own.

New surfaces:

- `/` — landing page with a hand-built SVG pixel scene. Light mode is a
  rabbit fishing from a dock; dark mode is the same rabbit at a campfire.
  Both are in the DOM and CSS picks one, so the correct scene is in the
  server-rendered HTML with no hydration mismatch. Four rotating signs per
  scene on a 36s cycle. The loop starts after mount, not during: an infinite
  animation stops a Lighthouse filmstrip reaching visual completeness, which
  is the same reason the skeleton pulse is capped at four iterations.

- `/dashboard` — cross-repo analytics. No new endpoint; every figure derives
  from the existing `listReports` via `lib/reports.ts`, which also absorbs the
  grouping that was inline in the history page so the two cannot drift.

Three bugs found while checking this in a browser, all pre-existing or
introduced and fixed here:

- `danger` buttons used `text-white`, which measured 2.62:1 against the dark
  theme's critical pink. The severity ramp's dark values had only ever been
  checked as foreground text, never as a button background. Now 6.33:1.

- The chart's x axis always drew the last tick *and* every nth tick, so with
  twelve points the final two overprinted into an unreadable smear.

- Score-chart labels formatted dates on both sides of hydration, and the
  server and browser do not share a locale (20:35 vs 08:35 pm). They are now
  formatted once on the server and passed down.

The severity ramp was re-measured from scratch rather than carried over: the
canvas is no longer white, and every foreground step now clears 4.5:1 against
the canvas, the card surface, and its own chip in both themes. `critical`
moved to a deep oxblood so a Critical chip cannot be mistaken for the coral
call to action, and the accent split into a text-bearing `--accent` that
passes AA and a decorative `--accent-soft` at the artwork's lighter tone.

Findings density, the code viewer, the shiki rules and the diff colours are
deliberately untouched.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012kY2ubYamHxfA1B49oJr2p
@vercel

vercel Bot commented Aug 31, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
vantage Ready Ready Preview Aug 31, 2026 10:42am

@Asmodeus14
Asmodeus14 merged commit 13445a7 into master Aug 31, 2026
3 checks passed

This branch was successfully deployed

1 active deployment
Preview — 19b25580 Deployed Aug 31, 2026 by vercel[bot]
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