Saltar al contenido
/ miguelfervi
← Trabajo

Personal

2026

Portfolio personal

Este sitio. Las páginas son Astro. El copy vive en tres colecciones glob — projects, experience, education — con un esquema Zod de campos bilingües `{ en, es }`. Los proyectos llevan un `kind` (personal o empresa) y un `order` editorial. El español es un árbol espejo bajo `src/pages/es/` que comparte los mismos componentes; el inglés no lleva prefijo. Una capa pequeña de URLs mantiene la ruta lógica al cambiar de idioma, incluidos redirects de paths viejos en la config de Astro. Identidad y skills viven en un módulo tipado `site`, no en Markdown. Está en miguelfervi.dev.

La home tiene retrato, trabajo seleccionado y skills. El trabajo seleccionado no es un dump de flags: como mucho una tarjeta de empresa primero, luego apps personales, tope de tres. El índice de proyectos pone primero lo personal — Resume Builder, Finanzas, Granada Joven, la calculadora de ritmo — y luego una tarjeta por empresa con marcas públicas. El resume compone las colecciones de experiencia y educación con esa lista estática de skills. El cuerpo de Read son párrafos del frontmatter, no un AST de Markdown.

El tema se aplica en el head antes del paint (localStorage o sistema), y un módulo de preferencias lo reaplica en las View Transitions de Astro, resincroniza los labels bilingües del toggle y restaura el scroll al saltar `/` ↔ `/es`. El SEO es un helper `pageSeo()`: canonical, hreflang (x-default inglés), Open Graph, Twitter y un JSON-LD Person localizado. El sitemap sale de `@astrojs/sitemap`. Analytics son Vercel Analytics más Speed Insights. El CI es un solo job `verify`: ocho suites Vitest de la lib, `astro check`, un build de producción y un smoke que parsea el HTML de `dist/` (lang, toggles, demos y redirects).

  • Astro
  • TypeScript
  • Tailwind CSS
  • Vitest