Skip to content

feat: public IA restructuring (About/Systems/Research/Lab) + homepage composition - #29

Merged
psatomas merged 2 commits into
mainfrom
feature/homepage-ia-and-composition
Sep 2, 2026
Merged

feat: public IA restructuring (About/Systems/Research/Lab) + homepage composition#29
psatomas merged 2 commits into
mainfrom
feature/homepage-ia-and-composition

Conversation

@psatomas

@psatomas psatomas commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Summary

Two-phase feature work, each its own commit:

  1. 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.
  2. 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 pass
  • npm run lint — clean
  • npm run build — clean; route tree matches the intended IA
  • Manually verified: /projects and /projects/:slug 308-redirect to /systems; /research/write still 307s to Google sign-in; sitemap has zero /projects or /research/write* entries; homepage links resolve correctly to /systems/*, /research/*, /lab/*.

🤖 Generated with Claude Code

psatomas and others added 2 commits September 2, 2026 13:29
… 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>
@psatomas
psatomas merged commit 7c00f2f into main Sep 2, 2026
1 check passed
@psatomas
psatomas deleted the feature/homepage-ia-and-composition branch September 2, 2026 16:32
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