The problem
A personal website can look polished and still fail its main job. Search engines may see thin HTML. AI systems may find inconsistent identity claims. Visitors may see analytics code before they make a privacy choice. The site needed one verified source of truth and a release process that treated content, metadata, and implementation as one system.
The approach
I rebuilt the site with the Next.js App Router and Server Components. Public pages render complete HTML without depending on client-side JavaScript. A typed content layer keeps project attribution, dates, canonical paths, and social metadata together. Route metadata, JSON-LD, the sitemap, the feed, and visible page copy all derive from the same records.
Optional analytics sits behind a centralized consent boundary. Microsoft Clarity, Google Analytics, Vercel Analytics, and Speed Insights stay out of the active page until a visitor accepts analytics. Rejecting or withdrawing consent does not restrict the site.
Engineering decisions
- Static rendering is the default for public content.
- Canonical URLs use one host and one path policy.
- Structured data uses stable identifiers for the person and website entities.
- Public claims must be supported by repository history or an approved identity record.
- CSS Modules and local fonts keep the rendering path small and predictable.
- Preview deployments remain outside search indexes.
Current limits
The site does not publish a portrait or public email because neither has been approved for this identity surface. Search engines will also need time to replace older cached copy after the new pages ship.