- ✦ Added Click-to-zoom lightbox for case-study images — clicking any Deep Dive image opens it fullscreen; close via backdrop click, close button or Escape
- ✦ Added SEO: sitemap.xml (via @astrojs/sitemap, covers all profile × language routes) and robots.txt pointing to it
- ✦ Added merge.mjs validates the profile slug === spec invariant and fails fast with a clear message, preventing silent desync between a profile's URL and its CV/download files
- ✎ Changed Tags de-emphasized — removed borders and muted text on Platforms/Stack/Tags pills so the identical-looking groups stop competing for attention and section hierarchy reads clearer
- ✎ Changed CI: Telegram notification now passes secrets and context through an env block instead of inline ${{ }} interpolation in the shell script
- ✎ Changed CI: GitHub Actions runner upgraded to Node 24
- ✎ Changed CI: PDF export now drives the runner's preinstalled Google Chrome (channel: chrome) instead of downloading Playwright's chromium — removes the cdn.playwright.dev download that was stalling and hanging deploys; the Playwright browser-cache step was dropped. Local builds still use Playwright's bundled chromium
- ✎ Changed Responsive breakpoints consolidated from seven ad-hoc values to two — 768px (desktop/mobile base: header, fonts, paddings, animated background) and 960px (multi-column CV and showcase grids); mobile container side padding tightened
- ✔ Fixed AnimatedBackground performance — reduced orb blur (80px → 60px), slowed drift cycles to 16–22s and removed scale() from keyframes so the blurred layer is cached instead of re-rasterized every frame; cuts desktop scroll/idle jank
- ✔ Fixed Showcase LCP — first card with an actual image cover now loads eager with fetchpriority=high; remaining covers stay lazy
- ✔ Fixed i18n: showcase card labels (Platforms/Stack/Tags/Featured) on non-default-language lists no longer fall back to English literals — a stray [lang] index on an already-resolved string was dropping the real translations; now correctly localized and ready for additional languages
- ✔ Fixed Role dropdown accessibility — added aria-haspopup, aria-controls and aria-expanded synced with open state; removed a stray always-true active class on the trigger
- ✔ Fixed Removed hover-lift from passive cards (Experience and others) — the global .card:hover translate/shadow was a false affordance on non-clickable cards; hover now stays only on interactive showcase project cards
- ✔ Fixed Build robustness: home page now guards a missing merged CV artifact with a fallback instead of crashing the build (matches the dynamic profile route)
- ✔ Fixed Mobile header — the Role dropdown button rendered larger than the nav links (16px vs 14px, wider padding) because a later .dropdown__trigger { font: inherit } overrode the mobile rule; the mobile rule's specificity was raised so the button now matches the links
- ✖ Removed Dead code in the dynamic showcase route — unused featured/regular/archived split, leftover CSS classes and a stray ... token in the card markup
Changelog
Version history of CV Hub
- ✦ Added PlayStationWaves component — XMB-inspired filled sine-wave canvas background with configurable props, time-of-day hue shift and non-deterministic start position
- ✦ Added WaveLines component — XMB-style glowing stroke wave lines canvas background with symmetric line layout and offscreen glow compositing
- ✦ Added GitHub Actions Telegram notification — deploy.yml notifies a Telegram bot on deploy success or failure via PIPLINE_BOT_SECRET and CHAT_ID secrets; gracefully skips if secrets are not configured
- ✎ Changed Telegram notification now covers build failures — notify_telegram uses needs: [build, deploy] with if: always() so a failed build job also triggers a notification
- ✎ Changed Telegram notification message extended with branch name and short commit SHA
- ✎ Changed CI: Playwright Chromium now cached by package-lock.json hash — saves ~2 min per deploy on cache hit
- ✦ Added LICENSE — MIT license added to repository
- ✦ Added ARCHITECTURE.md — root-level architecture overview: stack, data pipeline, routing, theming, background components, CI/CD, trade-offs
- ✦ Added CHANGELOG.md — root-level changelog in Keep a Changelog format covering full version history
- ✔ Fixed WaveLines glow compositing bug — destination-in mask was applied to full canvas each iteration, destroying background alpha at edges; fixed via per-line offscreen canvas
- ✔ Fixed Sticky header now works unconditionally — body height: 100% constrained scroll to html element; changed to min-height: 100%
- ✔ Fixed Role dropdown — replaced CSS :hover toggle with JS click-toggle and click-outside to close; menu no longer closes on accidental cursor exit; added smooth opacity/transform transition
- ✔ Fixed Scroll jank — body background-attachment: fixed replaced with a fixed pseudo-element layer; gradients no longer repaint on every scroll frame
- ✔ Fixed Removed mix-blend-mode: overlay from the scanline noise layer — eliminated a fullscreen compositing pass per frame with no visible difference at 0.06 opacity
- ✔ Fixed Mobile pages performance — removed unnecessary CSS rules
- ✔ Fixed Language switcher on showcase pages now correctly switches between project translations
- ✦ Added Share button for case study pages (shareable: true in YAML, added to example_cs)
- ✎ Changed ProjectCard translation props — simplified from object-based to direct strings
- ✔ Fixed Language switcher on Showcase list now correctly switches language instead of redirecting to home
- ✔ Fixed Language switcher on Case Study pages now correctly switches language of the current project
- ✔ Fixed Back button and Showcase nav link now preserve current language across navigation
- ✔ Fixed Project card links now respect BASE_URL — no more hardcoded /cv_hub/ prefix required in YAML
- ✔ Fixed ProjectPage mobile layout — horizontal padding now correctly applied on small screens
- ✔ Fixed Showcase slug setup for other languages was incorrect for projects with flags archived and featured
- ✦ Added Case Study pages — dedicated per-project pages with flexible content structure
- ✦ Added Block-based content system (image, text, divider, links) for project storytelling
- ✦ Added Projects can now include full narratives — architecture, decisions, and outcomes
- ✦ Added Showcase extended with deep-dive pages (Notion-like but static and controlled)
- ✦ Added Per-project routing for case studies
- ✎ Changed Showcase transformed from preview-only to entry point for detailed project pages
- ✎ Changed Showcase style fixes
- ✎ Changed Error page 404 works correctly now, fallbacks to main page with default language
- ✎ Changed Dropdown styles moved from /changelog to global.css
- ✎ Changed Fixed linking in footer menu in Lyaout
- ✦ Added Multi-profile system — N profiles × N languages from one YAML source
- ✦ Added merge.mjs — YAML merge pipeline with base + spec delta model
- ✦ Added profiles.yml — profile registry (optional, graceful fallback)
- ✦ Added languages.yml — language config, dynamic language switcher
- ✦ Added i18n system — translations.yaml + makeT() helper with fallback chain
- ✦ Added Profile dropdown in header (Role ▾)
- ✦ Added [...slug].astro — dynamic routing for all profile × language combos
- ✦ Added Per-profile PDF/DOCX/TXT generation for all profiles and languages
- ✎ Changed generate-resume.js and resume-export-pdf.mjs now iterate public/cv/ dynamically
- ✎ Changed Download links now point to profile-specific files (resume_en_devops.pdf)
- ✖ Removed ru.astro and showcase/ru.astro — replaced by [...slug].astro
- ✎ Changed siteUrl resolved dynamically from GITHUB_REPOSITORY — forks work without config
- ✎ Changed Dropdown styles moved to global.css
- ✦ Added README, ENGINEERING.md and INFO.md fully updated to reflect new architecture
- ✦ Added URL-based theme switching (?theme=peachy)
- ✦ Added OG tags and Twitter Card meta
- ✦ Added Animated background
- ✦ Added Lighthouse badges in README (100/100/96/100)
- ✦ Added Changelog page with version history
- ✎ Changed Style and structure updates
- ✎ Changed Documentation updated
- ✦ Added Projects pin & archive options
- ✎ Changed DOM tree and CSS structure refactor
- ✔ Fixed Mobile layout fixes
- ✔ Fixed Index page fix
- ✦ Added Automated PDF generation via Playwright
- ✦ Added New theme presets
- ✦ Added Theme previews in docs
- ✦ Added Initial release — YAML-driven CV site
- ✦ Added Two languages (EN/RU)
- ✦ Added Export to PDF, DOCX, TXT
- ✦ Added GitHub Actions CI/CD deploy