Actualización del 4 de noviembre de 2026: el código sigue en GitHub, pero la web ya no se aloja allí. Ahora se publica en Cloudflare, y cada git push a main la actualiza automáticamente.

A la hora de preparar mi propio espacio en internet como José Alberto (eker), tenía muy claro qué necesitaba técnica y personalmente:

  1. Unir portfolio y blog sin fricciones: Quería que en la página principal se viera siempre mi última entrada del blog junto al acceso a mis proyectos SaaS (AlarmGest y SimpleComunication, que además contemplan KMP para sus versiones móviles).
  2. Escribir en Markdown desde mi entorno de trabajo: Poder redactar una reflexión sobre mi día a día con Iván o un artículo técnico directamente en un archivo .md y publicarlo haciendo git push.
  3. Alojamiento directo en GitHub: Tener tanto el código como la publicación integrados en mi cuenta de GitHub.

1. Colecciones de Contenido tipadas

El proyecto utiliza Content Collections de Astro 5 con validación de esquemas para organizar por un lado las entradas del blog (src/content/blog/) y por otro mis proyectos de software (src/content/projects/):

const blog = defineCollection({
  loader: glob({ base: './src/content/blog', pattern: '**/*.{md,mdx}' }),
  schema: z.object({
    title: z.string(),
    description: z.string(),
    pubDate: z.coerce.date(),
    category: z.enum(['monoparentalidad', 'cancer-y-memoria', 'codigo-y-vida']),
    tags: z.array(z.string()).default([]),
    featured: z.boolean().default(false),
    draft: z.boolean().default(false),
  }),
});

2. La última entrada siempre en portada

En la página principal (src/pages/index.astro), las entradas se ordenan automáticamente por fecha de publicación para destacar siempre la más reciente en el bloque principal, manteniendo conectada mi evolución en la programación con mis vivencias personales.