← All projects
05Portfolio
Personal Portfolio
The current version of my personal portfolio: a static Astro site for project case studies, experience, an engineering blog, and my resume. Built with Astro 7, TypeScript, and Tailwind CSS 4.
Context
The problem
I wanted one home for project case studies, experience, technical writing, and my resume. The current site replaces an earlier Blazor WebAssembly portfolio with a content-focused static build.
Solution
How TeachMate works
Astro generates the portfolio pages from typed TypeScript content modules and Markdown/MDX blog posts. Reusable layouts and components present project details, career information, and writing, with small browser scripts for theme switching and interactive filters.
Capabilities
What it includes
- Project directory with category and technology filters, search, and generated case-study pages
- Experience, skills, profile, and resume pages with PDF download and print support
- Markdown/MDX engineering blog with an RSS feed
- Responsive layouts with persistent light and dark themes
- Canonical and Open Graph metadata, structured data, sitemap, and optimized images
System design
Architecture
- Astro 7 builds the site as static pages; project detail routes are generated from the typed PROJECTS collection.
- Typed TypeScript modules hold site, project, experience, and skills data, while Astro content collections load Markdown/MDX articles.
- Tailwind CSS 4 is integrated through Vite; small JavaScript modules handle theme, navigation, filters, and progressive interactions.
- Astro integrations generate the sitemap and support MDX; the site also publishes an RSS feed and structured metadata.
Trade-offs
Engineering decisions
- Use static generation for a content-focused site that does not need a runtime application server or database.
- Keep structured portfolio data in typed modules and long-form writing in Markdown/MDX so each content type stays easy to maintain.
- Limit browser-side JavaScript to interactions such as theme switching, project filtering, and navigation.