$ cat ~/blog/hello-world.md
hello-world: how this site is built
This portfolio is, in itself, a sample of how I work. The decisions:
100% static Astro
Portfolio content rarely changes. Generating HTML at build time means: 0 JavaScript by default, 100 Lighthouse score, and a site that can be served from any nginx with a 5 MB Docker image.
YAML content validated with Zod
All content lives in src/content/*.yaml. Every file has a Zod schema: if
I break the structure while editing, the build fails with the exact error
instead of publishing something broken. Fail-fast, as it should be.
patio:
order: 1
company: El Patio de mi Casa
start: "2025-09"
end: null # current job
A terminal that actually works
The hero terminal is not a GIF: it accepts real commands (help, whoami,
projects…) and reads the same YAML files as the rest of the site, so it
never goes out of sync with the content.
Deployment
Multi-stage Docker -> nginx -> docker-compose with Traefik labels on my VPS. But that’s a topic for another post.