Styling/theme pass: port Astro Wanderer design system - #16
Merged
Conversation
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
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.
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.
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
dark/light mode (
src/styles/global.css)@fontsource-*email, RSS) — no typing-animation JS, since it's decorative not
functional
of client JS here, since a rememberable manual override can't be pure
CSS
Bug caught during verification
Intl.DateTimeFormatwithout an explicittimeZonerendered aUTC-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— cleannpm run test— 15/15npm run build— succeeds(nav, hero, post card, tags, footer, dark-mode CSS all present and
correct)
check — worth a manual look before or after merge