Personal
Portfolio & Blog
This portfolio runs on an islands architecture (Astro Islands): minimal client-side JavaScript and none of the unnecessary SPA complexity. The numbers below (Performance and SEO on Lighthouse) are from the very site you are browsing right now.
100/100
Performance
100
SEO Score
Learn more about the technical architecture
Want to understand how this was built under the hood? Open the technical dive below.
expand_more
Learn more about the technical architecture
Want to understand how this was built under the hood? Open the technical dive below.
Technical Overview
A portfolio designed as a showcase of web engineering, not just a resume. I eliminated unnecessary client-side JavaScript — common in traditional SPAs — using a modern Multi-Page App approach with partial hydration.
Core Technologies
The Challenge
Portfolios built with pure React or Next.js often suffer from 'Hydration Mismatch' and bloated JS payloads for pages that are, in practice, almost entirely static. The challenge was:
- / Ensuring perfect Lighthouse scores (Performance and SEO).
- / Building an easy-to-maintain local 'Headless' CMS without relying on an external database.
- / Maintaining strict typing (TypeScript) across all content data.
The Solution
I solved this using Astro Content Collections: all content data (experiences, projects) becomes a JSON file validated against a strict Zod schema at build time — if a field is malformed, the build breaks before deployment, never in production.
const experience = defineCollection({
loader: glob({ pattern: "**/*.json", base: "./src/content/experience" }),
schema: z.object({
company: z.string(),
role: z.string(),
rotation: z.array(z.object({
project: z.string(),
stack: z.string()
})).optional()
})
}); Infrastructure
Deploy & CI/CD
Hosted on Cloudflare Pages with edge caching, with automatic deployment on every push to the main branch.