One file per project
Every project, including this one, is a single JSON file that powers both its resume entry and its case study page. Change a fact once and it’s right everywhere.
- PHP
- Data Architecture
This site is my portfolio, resume and painting gallery, all built by hand in PHP, Sass and vanilla JavaScript. No framework, no page builder, and it runs on my own self-hosted server.
Every project, including this one, is a single JSON file that powers both its resume entry and its case study page. Change a fact once and it’s right everywhere.
The resume is data, not a document. Click a skill tag and every bullet and project gets scored and re-sorted by relevance, live. There’s even a console helper, window.tailor(), for lining it up with a specific job posting. It also prints to a tidy two pages.
The case-study diagrams are hand-drawn SVG, themed with CSS and animated layer by layer as you scroll to them, with a static version for anyone who prefers reduced motion.
Drop in one screenshot and PHP (via Imagick) generates responsive WebP and JPEG sizes on first request, served through <picture> with lazy loading.
A painting gallery with scroll-triggered reveals, content that flies in as each page loads, and fallback fonts sized to match the real ones so nothing jumps when they arrive. All hand-written CSS and vanilla JavaScript.
A push to main kicks off a GitHub Actions workflow on a self-hosted runner that validates the project data, builds the Sass and JavaScript and syncs everything into place.