feat: public IA restructuring (About/Systems/Research/Lab) + homepage composition - #29
Merged
Merged
Conversation
… Lab Establishes the public information architecture: About (who I am), Systems (what I build), Research (how I think), Lab (what I explore). - Add /about — a single authored page, no CMS/database. Content is grounded only in facts already established elsewhere in the repo (name, role, tagline, the site's own four-domain structure); nothing invented. - Rename /projects to /systems: src/lib/projects.ts -> src/lib/systems.ts, Project -> System, getAllProjects() -> getAllSystems(). Slugs and content unchanged. /projects and /projects/:slug now permanently redirect (308) to /systems and /systems/:slug via next.config.ts's redirects() — the old route files are gone, not left as 404s. - Rename the "Protocol Engineering Lab" Systems entry to "Protocol Engineering Notes" — it collided with the site's own Lab section; underlying content and slug are unchanged. - Add /lab and /lab/[id] as real, addressable routes over the existing experiment registry (src/lib/experiments/registry.ts) — no experiment metadata duplicated, no experiment internals touched. /lab/[id] resolves through getExperiment() (already existed, previously unused outside the homepage) and renders the registry's Component directly; a disabled experiment 404s, matching the registry's own enabled-flag intent. - Update primary navigation to About / Systems / Research / Lab; GitHub removed from primary nav (kept in the footer alongside LinkedIn, X, and email, extracted to a shared src/lib/site.ts#socialLinks export so the footer and /about can't drift apart). - Rewrite sitemap.ts to cover the full IA (home, about, systems + every slug, research + every published D1 article, lab + every enabled experiment) and exclude /projects and every /research/write* route. Requires force-dynamic, the same way /research/page.tsx already does: D1 is only reachable at real request time, not during `next build`. Research's D1/repository/authoring architecture, Systems' static-data model, and Lab's registry+component model are all preserved as-is — only routing and navigation changed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Transforms / from Hero + embedded Lab into a full projection of the site's
information architecture: Hero -> About -> Systems -> Research -> Lab ->
footer, following "person -> work -> thinking -> exploration."
- Hero now leads with the name (TOMÁS ARAÚJO) as the h1, instead of never
stating it — positioning statement and tech-territory line are the same
existing copy, just reordered under the name. CTAs retarget to /systems
and /lab (the #lab anchor no longer exists once Lab moves off the
homepage). The right-column visual slot (currently SystemMap) is
commented as where the eventual personal photo belongs — no image
invented or placeholder added.
- Four new preview sections, each reading directly from its domain's
existing source, no homepage-specific data files:
- AboutPreview — a short editorial excerpt, not a copy of /about.
- SystemsPreview — getAllSystems(), all 5 as a compact name+tagline
list, so no single system dominates.
- ResearchPreview — the same repository /research reads
(getResearchRepository().getPublishedArticles()), sliced to the
latest 3, showing date/category/reading-time per item.
- LabPreview — the same experiment registry /lab reads, filtered by
`enabled` and capped at 3 so the homepage stays curated regardless of
how large the registry grows. No longer interactive here — the
accordion that used to occupy this spot now lives at /lab and
/lab/[id], which are real destinations as of the IA restructuring.
- Deleted src/components/lab/protocol-lab.tsx: the homepage no longer
imports it, and nothing else did either (verified before removing).
- Added export const dynamic = "force-dynamic" to page.tsx — without it,
`next build` prerenders / once using Research's MDX fallback (the only
thing reachable at build time), and a newly published D1 article would
never appear on the homepage without a redeploy.
- siteConfig.description rewritten to name the actual technical territory
instead of calling the site "a blog."
Shared SectionIntro/SectionLink components give the four previews one
consistent rhythm (role eyebrow, heading, closing "-> /path" link) while
each section's body stays specific to its own domain's data shape.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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.
Summary
Two-phase feature work, each its own commit:
feat(ia)— establishes the public information architecture:/about(new),/projects→/systems(renamed, with permanent redirects),/lab+/lab/[id](new, over the existing experiment registry), nav updated, sitemap rewritten to cover the full IA and exclude authoring routes. Research's D1/repository/authoring architecture, Systems' static-data model, and Lab's registry+component model are all preserved as-is.feat(home)— rebuilds/from Hero + embedded Lab into a full curated preview of all four sections (Hero → About → Systems → Research → Lab), each preview reading directly from its domain's existing data source (no homepage-specific content duplication).See each commit message for full detail.
Validation
npm run test— 56/56 passnpm run lint— cleannpm run build— clean; route tree matches the intended IA/projectsand/projects/:slug308-redirect to/systems;/research/writestill 307s to Google sign-in; sitemap has zero/projectsor/research/write*entries; homepage links resolve correctly to/systems/*,/research/*,/lab/*.🤖 Generated with Claude Code