Skip to content

Styling/theme pass: port Astro Wanderer design system - #16

Merged
dmserrano merged 1 commit into
mainfrom
styling-theme-pass
Sep 8, 2026
Merged

Styling/theme pass: port Astro Wanderer design system#16
dmserrano merged 1 commit into
mainfrom
styling-theme-pass

Conversation

@dmserrano

Copy link
Copy Markdown
Owner

Ports the visual design (not the content model) from
igagansingh/astro-wanderer
(MIT), trimmed to what this site actually has — posts and pages, no
work/travel sections, no lightbox carousel.

What's in

  • Design tokens, base reset, header/nav, footer, post cards, prose,
    dark/light mode (src/styles/global.css)
  • Self-hosted variable fonts (Inter, JetBrains Mono) via @fontsource-*
  • Simple homepage hero: greeting, bio, social links (GitHub, LinkedIn,
    email, RSS) — no typing-animation JS, since it's decorative not
    functional
  • Theme toggle with pre-paint dark-mode detection — the one genuine use
    of client JS here, since a rememberable manual override can't be pure
    CSS
  • Open Graph / Twitter card / canonical URL meta tags

Bug caught during verification

Intl.DateTimeFormat without an explicit timeZone rendered a
UTC-midnight post date as the previous day in this machine's timezone,
and would make the same content build differently depending on the build
machine's timezone — a reproducibility regression. Fixed by pinning
timeZone: 'UTC'.

Verification

  • npm run typecheck — clean
  • npm run test — 15/15
  • npm run build — succeeds
  • Checked the built output structurally via a local preview server
    (nav, hero, post card, tags, footer, dark-mode CSS all present and
    correct)
  • No browser tool was available this session for a true visual
    check — worth a manual look before or after merge

Ports the design system (tokens, typography, header/nav, footer, post
cards, prose, dark mode) from igagansingh/astro-wanderer (MIT licensed),
trimmed to what this site's content model actually uses — no work
timeline, travel gallery, or lightbox carousel, since we only have
posts/pages, not those collections.

- Design tokens + base reset + component styles in src/styles/global.css,
  imported from BaseLayout instead of the old public/styles/site.css.
- Self-hosted variable fonts (Inter, JetBrains Mono) via @fontsource-*
  packages — no external runtime font request.
- Dark/light mode: respects prefers-color-scheme by default, manual
  override remembered via localStorage, set pre-paint to avoid a flash.
  This is the one genuine use of client-side JS (ThemeToggle.astro) per
  the "no client JS unless a feature needs it" rule — manual override
  can't be done in pure CSS.
- Header/Footer components with real site data (src/lib/site.ts): GitHub,
  LinkedIn, email, RSS.
- Simple hero on the homepage (avatar optional, currently unset) — no
  typing-animation JS, since that's decorative rather than functional.
- PostCard component used by both the homepage and tag pages.
- BaseLayout gained canonical URL, Open Graph, and Twitter card meta tags.

Bug caught during local verification: Intl.DateTimeFormat without an
explicit timeZone renders a UTC-midnight date as the prior day in
negative-UTC-offset timezones, and would make build output depend on the
build machine's timezone (breaking the reproducible-build goal across
local vs CI). Fixed by pinning timeZone: 'UTC' in both date-formatting
call sites (PostCard, PostLayout).

Verified: typecheck clean, 15/15 tests pass, build succeeds, and the
built output was checked structurally via a local preview server (no
browser tool available this session — worth a manual look before/after
merge).
@dmserrano
dmserrano merged commit 57ea47a into main Sep 8, 2026
2 checks passed
@dmserrano
dmserrano deleted the styling-theme-pass branch September 8, 2026 21:28
dmserrano added a commit that referenced this pull request Sep 8, 2026
Missed staging this deletion when the styling pass (#16) was committed —
BaseLayout has imported src/styles/global.css instead since then, so
this file has been sitting unreferenced on main.
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