CV Hub

CV Hub

Resume as Code. Рассматривай свою профессиональную идентичность как воспроизводимую и версионируемую систему.

Platforms
  • Web
  • GitHub Pages
Stack
  • Astro
  • TypeScript
  • YAML
  • Playwright
  • docx.js
  • GitHub Actions

Обзор

CV Hub — это не шаблон портфолио. Это система. Проект переопределяет резюме как инженерный артефакт — версионируемый, воспроизводимый и деплоимый. Вместо поддержки разрозненных представлений (LinkedIn, PDF, Notion, сайты-портфолио) CV Hub вводит единый декларативный источник правды — YAML-файл, который управляет всем пайплайном. В результате получается полностью автоматизированная система, где любое изменение консистентно распространяется на все форматы и профили.


Проблема

Традиционные резюме сломаны с точки зрения системного подхода. Они: - дублируются на разных платформах - синхронизируются вручную - зависят от контекста (DevOps, Backend, GameDev) - не имеют версионирования - не воспроизводимы Это приводит к рассинхронизации, ошибкам и постоянным затратам на поддержку. С инженерной точки зрения это похоже на работу с несколькими несинхронизированными окружениями без единого источника правды.


Решение

CV Hub применяет инфраструктурные принципы к персональным данным. Базовая идея: описал один раз → сгенерировал всё → задеплоил. Один YAML-файл превращается в: - веб-сайт - PDF, DOCX и TXT - несколько версий резюме под разные роли - версионируемый профиль в Git Система устраняет дублирование и гарантирует консистентность по умолчанию.


Multi-profile система

Архитектура base + delta

Ролевые версии резюме строятся через двухуровневую модель: базовый CV + дельты. Это позволяет точно управлять позиционированием без дублирования данных.

Схема merge пайплайна

Что было сделано

  • Static-first архитектура без client-side JavaScript по умолчанию
  • YAML как единый источник правды для всех данных
  • Multi-profile система (DevOps, GameDev и др.) через детерминированный merge
  • Мультиязычность с fallback-цепочкой
  • Автоматическая генерация документов (PDF через Playwright, DOCX/TXT через docx.js)
  • Переключение тем через URL с возможностью шаринга
  • Полностью автоматизированный CI/CD на GitHub Actions
  • Динамическая конфигурация окружения (siteUrl из GITHUB_REPOSITORY)

Архитектура

Система построена как детерминированный пайплайн. Слой данных: - YAML-файлы (base + profile delta) Слой обработки: - merge.mjs → формирует нормализованные артефакты - генераторы документов → PDF/DOCX/TXT Слой представления: - Astro → статическая генерация HTML Деплой: - GitHub Actions → immutable build → GitHub Pages Нет runtime-сервера. Нет скрытого состояния. Любой результат воспроизводим.


Инженерные решения

  • Astro вместо SPA для устранения лишнего runtime и hydration
  • Статическая генерация для предсказуемости и производительности
  • YAML вместо CMS для полного контроля и версионирования
  • URL как источник состояния вместо localStorage
  • Явные delta-файлы вместо неявных переопределений

Темы

Варианты тем
Frosted, Light, Nordic, Peachy — переключаются через URL

DevOps-подход

Проект рассматривает резюме как артефакт сборки. Ключевые принципы: - версионирование через Git - immutable сборки - автоматизация CI/CD - независимость от окружения - отсутствие runtime-зависимостей Каждый коммит создаёт полностью консистентное состояние системы.


Компромиссы

  • Нет CMS — осознанный выбор ради контроля
  • Нет backend — полностью статическая архитектура
  • Ручное создание delta-файлов — явность важнее магии
  • Ограниченная runtime-гибкость в пользу детерминизма

Результат

  • Одно изменение пересобирает все форматы и профили
  • Статический деплой без инфраструктурных затрат
  • Fork-ready система без конфигурации
  • Lighthouse: 100 Performance / 100 Accessibility / 100 SEO
  • Полностью воспроизводимый результат

Выводы

CV Hub показывает, что даже такие области, как резюме, выигрывают от инженерного подхода. Применение принципов системного дизайна — единого источника правды, детерминированных пайплайнов и автоматизации — превращает статический документ в масштабируемую систему. Этот подход применим к любым задачам, где важны консистентность данных и мультиформатный вывод.