Search by

ehundu / andamio-curriculum

paigar

Un currículum hecho con Ehundu: tus datos en un solo fichero y, de ellos, la web, el PDF, el JSON Resume y la tarjeta de contacto, para empezar.

Package info

github.com/ehundu/andamio-curriculum

Homepage

Language:Twig

Type:project

pkg:composer/ehundu/andamio-curriculum

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-11-04 09:40 UTC

This package is auto-updated.

Last update: 2026-11-04 09:53:02 UTC


README

Tu currículum como un sitio web, hecho con Ehundu, el generador de sitios estáticos en PHP. Es un andamio: la estructura de partida para quien quiere tener su currículum en una dirección que enviar. Escribes tus datos una sola vez, en un fichero, y de ahí salen cinco cosas: la página web, un PDF listo para adjuntar, un JSON Resume, una tarjeta de contacto para la agenda y los datos que leen los buscadores. Cambias los datos y el CSS, y es tuyo.

La persona del ejemplo, Irati Salaberria, es inventada, como sus empleos y sus estudios, y sus enlaces van a example.org.

Puedes verlo funcionando, sin instalar nada, en andamio-curriculum.ehundu.com.

Necesitas PHP 8.4 o superior, con las extensiones dom y mbstring (las trae casi cualquier instalación, y el PDF las pide), y Composer.

Empezar

Si lo has creado con composer create-project, ya está todo instalado. Si has usado el botón «Use this template» de GitHub, o has descargado el zip, instala el motor:

composer install

Las tres órdenes que vas a usar:

composer servir      # lo previsualiza en http://127.0.0.1:8000/ y rehace solo lo que cambia
composer compilar    # deja el sitio terminado en la carpeta salida/
composer desplegar   # lo compila y lo sube al servidor que digas en sitio.yml

Lo primero que cambiar

  1. En datos/curriculum.yml, tus datos: quién eres, tu perfil, tu experiencia, tu formación, tus proyectos, tus habilidades y tus idiomas. Es lo único que tienes que escribir de verdad.
  2. En sitio.yml, el nombre, la dirección del sitio y la descripción que verán los buscadores.
  3. En contenido/index.md, el titulo, que es el nombre otra vez: el PDF lo lleva como título del documento.
  4. En contenido/_datos.yml, la fecha. Es la de la última vez que pusiste al día el currículum, y sale en el pie, en el sitemap y en los metadatos del PDF y del JSON. Ehundu no mira el reloj: cámbiala tú cada vez que edites tus datos.
  5. En publico/css/estilos.css, los colores de la web, que están al principio en variables, con su pareja para el modo oscuro; y en publico/css/pdf.css, los del PDF.

Tus datos

datos/curriculum.yml tiene un bloque por sección y todo lo que hay que saber está en sus comentarios. Lo que conviene tener presente:

  • Las fechas se escriben AAAA-MM (2022-09), sin comillas. Un puesto o un estudio sin hasta sigue en marcha y sale como «actualidad». Los meses salen en el idioma del sitio.
  • Una sección que borres, o dejes vacía, desaparece de la web, del PDF y del JSON. Si no tienes proyectos, quita el bloque proyectos y ya está.
  • Todo es texto sin formato, sin Markdown, para que salga igual en las cinco salidas. El perfil es una lista con un párrafo por línea.
  • Un texto con dos puntos seguidos de un espacio va entre comillas. - Lo hice: y salió bien es para YAML un mapa, no una frase. Si ves un aviso de «Array to string conversion» al compilar, casi seguro es esto.
  • La foto es opcional: pon un fichero cuadrado en publico/img/ y escribe su ruta en foto. Sale redonda en la web y cuadrada en el PDF.

Las cinco salidas

La página web es /, con su propia hoja para imprimir si alguien pulsa Ctrl+P. El PDF es /index.pdf. El JSON Resume (/curriculum.json) es el formato abierto de jsonresume.org, que entienden muchas herramientas y temas de currículum; sigue el esquema v1.0.0, y por eso solo lleva los campos que ese esquema define. La tarjeta de contacto (/contacto.vcf) es una vCard que el móvil o el ordenador añaden a la agenda. Y los datos para los buscadores son un bloque JSON-LD del tipo Person dentro de la página.

El JSON y la tarjeta son páginas como las demás, en contenido/curriculum-json.twig y contenido/contacto-vcf.twig, pero su dirección acaba en .json o .vcf y no llevan plantilla (plantilla: false), así que sale su contenido tal cual. No entran en el sitemap (listada: no).

El PDF

Una página con pdf: sí en su front matter sale además como PDF. Aquí lo declara contenido/index.md, y su maquetación es la de plantillas/curriculum.pdf.twig: no es una conversión de la web, porque un PDF no se hace como una página. Las dos leen los mismos datos y no comparten marcado. Por eso el PDF va a una sola columna, que es lo que mejor leen los programas de selección de personal, y la web a dos.

Lo dibuja dompdf, que es PHP puro, sin programas externos. Está en composer.json y por eso este andamio se instala con Composer: el ehundu.phar no lo trae. Tiene sus límites:

  • Entiende CSS 2.1 con algo de CSS3, y no admite flex ni rejillas. Por eso lo que va en columnas va en tablas.
  • Las tipografías son las tres básicas de un PDF: sans-serif (Helvetica), serif (Times) y monospace (Courier). Cubren el juego de caracteres de Windows-1252, o sea castellano, euskera, inglés y alemán. Otros alfabetos no se pueden escribir.
  • La fecha de creación del PDF es la fecha de la página, así que la misma versión da siempre los mismos bytes y el despliegue no lo vuelve a subir si no has cambiado nada.
  • Una entrada no se parte entre dos hojas y un título nunca se queda solo al final de una. Con los datos de ejemplo cabe en una hoja; si el tuyo es más largo, pasa a dos sin más.
  • publico/css/pdf.css también se copia a la salida, aunque la web no lo use, porque el CSS de un PDF solo se lee de publico/.

Para quedarte sin PDF, borra pdf: sí de contenido/index.md, y si quieres plantillas/curriculum.pdf.twig, publico/css/pdf.css y la línea dompdf/dompdf de composer.json. El botón de la web desaparece solo.

En otro idioma

Cambia idioma en sitio.yml, traduce datos/textos.yml (los títulos de las secciones, los botones, «actualidad») y los textos de datos/curriculum.yml. Los meses y la fecha del pie salen en el nuevo idioma sin tocar nada más.

Este andamio está pensado para un idioma. Si quieres el mismo currículum en dos en el mismo sitio, cada uno con su dirección y su PDF, mira el andamio multilingüe y la guía Varios idiomas.

Qué publicar, y qué no

Un currículum en una dirección pública lo lee cualquiera, también quien rastrea la web en busca de correos y teléfonos. El ejemplo trae solo la ciudad y el correo; el teléfono está comentado y no hay dirección postal. Piénsalo antes de añadirlos, y no pongas el DNI ni la fecha de nacimiento.

Si solo quieres enseñárselo a quien le mandas el enlace, pon indexar: false en datos/curriculum.yml: la página pide a los buscadores que no la guarden y no lleva los datos estructurados. Eso no alcanza al PDF ni al JSON, que no pueden llevar esa petición dentro. Para ellos, crea un publico/robots.txt con:

User-agent: *
Disallow: /index.pdf
Disallow: /curriculum.json
Disallow: /contacto.vcf

Ni noindex ni robots.txt son un candado: quien tenga la dirección lo lee. Si algo no debe verse, no lo publiques.

Este andamio no trae textos legales porque no los necesita: no hay formularios, ni cookies, ni analítica. Si añades alguna de esas cosas, o los datos de otras personas (referencias, por ejemplo), sí.

Qué hay en cada carpeta

sitio.yml                  el nombre, la dirección, el idioma y adónde se publica
contenido/                 las páginas: cada fichero es una página
  index.md                 el currículum (solo front matter; los datos están en datos/)
  404.md                   la página que no existe
  curriculum-json.twig     el JSON Resume
  contacto-vcf.twig        la tarjeta de contacto
  _datos.yml               lo que comparten todas las páginas: la fecha de actualización
datos/
  curriculum.yml           tus datos
  textos.yml               los textos de la plantilla (secciones, botones, «actualidad»)
plantillas/                el HTML de cada tipo de página, con Twig
  curriculum.twig          la web del currículum
  curriculum.pdf.twig      el PDF
  base.twig, pagina.twig   la estructura común y la de la página de texto (el 404)
parciales/                 macros.twig (periodos, enlaces externos) y los datos para los buscadores
publico/                   el CSS, el icono y la foto: se copia tal cual a la raíz

salida/ (el sitio compilado) y .ehundu/ (lo que recuerda el motor) los crea Ehundu y no se versionan.

Publicarlo

Descomenta la sección despliegue de sitio.yml y rellénala. La contraseña no va ahí, porque sitio.yml se comparte: crea un fichero .secretos.yml en la raíz del proyecto, entre comillas simples:

despliegue:
  clave: 'la-contraseña'

Antes de subir nada, mira qué haría:

composer desplegar -- --simular

Y cuando todo cuadre, composer desplegar. El PDF, el JSON y la tarjeta se suben como cualquier otro fichero. La guía Desplegar el sitio explica los destinos (carpeta, FTP, SFTP y S3) y cómo decide Ehundu qué sube y qué borra, y Un alojamiento compartido cuenta lo que conviene saber si tu hosting es de los baratos.

Para seguir

Licencia MIT.