javi.io

This site. Portfolio, blog, work history and CV as a fully version-controlled static site.

Architecture

Astro 6 with Zod-typed content collections: blog, work, projects, and education, each in two languages. The i18n system uses unprefixed routes for Spanish (/blog/) and a /en/ prefix for English (/en/blog/), with translationKey to pair translations across blog posts and projects.

Skills algorithm

The CV includes an algorithmically curated skill list: each work or project entry declares its technologies and a date (the last date worked on the project). An exponential decay algorithm with a 3-year half-life accumulates a score per skill, discarding those not used in the last 5 years and capping the output at the 25 most relevant.

CV generation

pnpm generate:cv automatically generates javier-zapata-{lang}-{hash}.pdf and .docx from the same TypeScript source that renders /cv on the web. PDF via Playwright (headless Chromium); DOCX via the docx library.

Deployment

Static site on GitHub Pages via gh-pages. CI with GitHub Actions: lint + build on PR, automatic deploy on push to main.

Methodology

Built and maintained entirely with Claude Code.

AstroClaude CodeGitHub ActionsGitHub PagesPlaywrightTypeScript