Rebuilding a personal site around content, structure and room to grow
My personal site began as a professional portfolio and gradually became something broader: a home for work, projects, games, notes and the tabs I have not quite closed yet.
The rebuild needed to support that wider purpose without becoming a sprawling personal platform. The goal was a static-first site with enough structure to evolve cleanly, content files that could shape layouts, and guardrails that kept staging, analytics and routing predictable.
Goals
- Create a broader personal hub without losing professional clarity.
- Keep page structures content-driven so layouts can evolve without repeated code changes.
- Preserve predictable URLs, canonical output and the no-trailing-slash policy.
- Keep staging safely separated from live behaviour.
- Maintain accessibility, reduced-motion handling and clean page transitions.
- Keep the contact experience polished while the front end remains static-first.
Approach
Static-first rebuild
The site uses Astro for the main static build, with React components where interactivity genuinely needs them. That keeps the baseline simple while leaving room for more playful interface ideas.
Content-driven layouts
Page content files now do more of the structural work. Layout options can be passed through content rather than hardcoded into individual pages, making the site easier to refine as sections grow.
Environment guardrails
The staging site remains noindex and analytics-suppressed. Live and staging are separated at the DigitalOcean component level, including separate contact-form configuration.
Contact-form architecture
The site stays static while a separate DigitalOcean Function validates submissions, checks a honeypot, verifies Cloudflare Turnstile and passes valid messages into Resend for delivery to the normal mailbox.
Results
- A clearer architecture for a site that can grow beyond a conventional portfolio.
- Content-led page structures that reduce friction when refining layouts.
- Safer staging behaviour with explicit non-indexing and analytics suppression.
- A polished contact flow without turning the site into a server-rendered application.
- A reusable foundation for future Work, Gaming, Projects and Commonplace sections.