← Projects

Portfolio Website

A fast static portfolio built with Astro, featuring filterable projects and Markdown-driven content

Date
Domain
software
Stack
Astro · HTML · CSS · Node.js · web

This website. Built with Astro 5 with a focus on no JS frameworks, fast load times, and content that’s easy to maintain. The core motivation was a filterable projects page — when you tailor a resume to a job listing, less “relevant” projects quietly disappear under the pressure of applicability. I wanted a single place to keep a complete record of everything I’ve built, where filtering preserves relevancy without erasing any of my work.

Stack

  • Astro 5 for the static site framework
  • Plain CSS with custom properties
  • Markdown content collections for project pages and update posts
  • Vercel for hosting and analytics

Process

Coming in with no web development experience, I used this project as a forcing function to learn the basics. I chose to avoid prefab web design tools like SquareSpace because I intend to continue developing this site with heavily customized functionality, and I want full control over the process, even if it may be more difficult to get started.

I picked Astro specifically because its content collection system maps cleanly onto the simplicity and modularity I wanted. Each piece of content is just a Markdown file with some frontmatter schema, and the framework handles everything else from there. The main project page reads all of them at build time, renders each into its own page, and exposes the tag metadata to a small client-side filter script.

Styling was done entirely in plain CSS using custom properties for the color and font system, which kept things consistent across pages without a preprocessor. Deployment to Vercel was super straightforward, with Vercel Analytics dropped in as a single component in the base layout.

Outcomes

A live, deployed portfolio that I’ve been actively adding to. The Markdown-first approach has made it incredibly easy to populate, as adding a new project/post just requires the addition of a single, low-code file. The programming approach mentioned above will make it much easier for me to continue further development down the line.