Technology Stack

This entire website is developed using Claude Code from a Hetzner VPS. Every change is committed to a Git repository and automatically deployed to Cloudflare Pages through a complete CI/CD pipeline. The development workflow includes automated testing, PDF generation, and smart deployment skipping for documentation-only changes.

Core Technologies

  • Astro - Static site generator for optimal performance
  • Tailwind CSS - Utility-first CSS framework for styling
  • TypeScript - Type-safe JavaScript for robust code
  • Bun - Fast JavaScript runtime and package manager

Features

  • PDF Generation - CV exported to PDF using @react-pdf/renderer
  • Content Collections - Markdown-based essays with type-safe frontmatter
  • Theme System - Multiple color themes with persistent preferences
  • RSS Feed - Syndication for essay updates

Testing & Quality

  • Unit Tests - 49 tests covering business logic (text utils, CV data, dates)
  • E2E Tests - 14 tests with Puppeteer for content verification
  • CI/CD - GitLab CI pipeline with automated testing and deployment

Deployment

  • Cloudflare Pages - Global CDN for fast content delivery
  • Automatic Deployment - Every commit to master triggers build and deploy
  • Smart Skipping - Markdown-only changes skip build to save resources

View the source code and full implementation details in the GitLab repository.

Changelog

Complete commit history of the website, automatically generated from Git. Scroll to explore all changes.

2026-02-02

  • ffdc20c fix(cv): add missing duration to Development Team Lead role
  • 16a2f77 refactor(cv): improve summary to emphasize management focus
  • c97f23a feat(cv): update career timeline and add LLM/AI focus
  • 8744dd9 test: add comprehensive RSS feed validation tests

2026-02-01

  • c357cf0 ci(lighthouse): only check overall scores at 100%
  • 9f4d532 fix(csp): update _headers to allow Cloudflare Analytics
  • 7b86d05 fix(csp): add CSP meta tag allowing Cloudflare Analytics
  • f0f3a08 fix(csp): eliminate all inline scripts for CSP compliance
  • 00b98ab fix(csp): move inline scripts to external file to comply with CSP
  • bf12ddf chore: update changelog with recent fixes
  • 5c77b1a fix: restore working ThemeToggle component
  • 15e1237 fix: add theme icon fallback and hide route announcer
  • 4da006e fix: revert async CSS loading - fixes broken theme and styling
  • 2c204a0 fix(lighthouse): resolve accessibility and performance issues
  • 3f036a5 chore: Add Lighthouse reports to .gitignore
  • 4f13d7b ci: Add local Lighthouse CI testing infrastructure
  • 6d627ee ci: Add --disable-features=dbus to Chrome flags
  • c222e42 ci: Fix Chrome container compatibility
  • b4d8bac ci: Fix Lighthouse CI memory issues
  • c870035 ci: Fix Lighthouse CI Chrome installation
  • cf835c5 ci: Add Chrome flags for headless CI environment
  • a5ba2ce fix: Rename lighthouserc.js to .cjs for CommonJS compatibility
  • 9d9e94b security: Complete security audit and remediation

2026-01-30

  • 27c4032 Edit 04-cicd-the-snakeoil-of-isolation.md
  • d88b5dd Edit 02-cicd-is-a-dirty-word.md
  • a891562 Edit 03-cicd-the-devils-in-the-details.md
  • baf24bb fixing essay yaml further
  • 2107583 fixing essay yaml
  • 49b2cd4 adding cicd and the snakeoil of isolation

2026-01-29

  • 6c40768 fix: Quote essay title with colon to fix YAML parsing
  • 7807926 adding cicd the devils in the details essay

2026-01-28

  • da6c921 removing unnecessary section numbers
  • 4f59b73 Adding CI/CD is a dirty word essay.

2026-01-27

  • 5ddd281 fix: Only deploy to Cloudflare after tests pass
  • 6f79847 fix: Fetch full git history for complete changelog
  • 361f31d fix: Install git in build stage for changelog generation
  • f13fef9 fix: Generate changelog from JSON file for Cloudflare Pages
  • 7687ae3 feat: Add About page with tech stack and full changelog
  • cef9eef feat: Improve essay layout with informational header
  • 702ccff Adding CI/CD intro essay.
  • bedcf15 docs: Update README with test structure and CI/CD info
  • 4186e42 docs: Update CLAUDE.md with new test structure and utilities
  • ef9dbbb feat: Add E2E tests verifying CV data is rendered on page
  • 2b008f2 feat: Add comprehensive unit tests for business logic
  • 122945f chore: Add color to CI change detection logs
  • 61b9e65 chore: Add verbose logging to CI change detection
  • ed7ec37 feat: Show skipped jobs as gray in GitLab CI instead of green
  • 038697b fix: Improve CI markdown-only detection with proper git history
  • 9828bcd fix: Generate PDF after astro build to ensure it ends up in public/
  • 0c3f8e8 feat: Replace Puppeteer PDF generation with @react-pdf/renderer

2026-01-25

  • 2368d2e fix: Prevent layout shift from scrollbar on CV page
  • b87eac8 fix: Code quality improvements from review

2025-10-14

  • 87f7d29 feat: Add preconnect hint and RSS feed discoverability
  • 4ddf06e feat: Add Cloudflare Pages headers for caching and security

2025-10-06

  • 1008967 feat: Add custom 404 error page
  • 9fd1556 refactor: Apply PageNavigation to essay pages and fix markup bug
  • 9b08aba refactor: DRY improvements for theme and navigation
  • e9e5bfd feat: Add print styles for clean PDF output
  • 96ea015 refactor: Generate PDF in build stage instead of separate stage
  • 5f80564 fix: Copy public directory to writable location for PDF generation
  • f860a97 fix: Remove failing chmod from PDF generation stage
  • 3eb0d01 refactor: Remove unnecessary CI detection from PDF script
  • ad187ef refactor: Skip PDF generation entirely in local dev
  • e2be462 fix: Proper error handling for PDF generation and fix CI/CD permissions
  • 4b78b6b feat: Add automated PDF CV generation with download button
  • 23b5adf perf: Optimize Compi image with Astro's image optimization
  • eb64bff feat: Add social share buttons to essay pages
  • 4777697 feat: Add canonical URLs and improve meta descriptions for SEO

2025-10-04

  • 4640051 feat: adding compi to the end of essays
  • e3f2073 feat: adding bookend to essays
  • 2f48f7a style: Improve essay pages readability and layout
  • f383003 style: Increase default text sizes across the site for better readability
  • 27eb6c7 fix: Make banner image responsive on mobile devices
  • 0923829 feat: Add SEO improvements with structured data, robots.txt, and meta descriptions
  • 657c6d1 refactor: Add TypeScript interfaces and extract RoleCard component
  • bbb504c feat: Add view transitions for smooth page navigation
  • 05be82f perf: Convert banner image from PNG to WebP
  • 94c383e chore: Update bun.lock with new dependencies
  • 3e87d90 refactor: Update theme collection and fix dark theme primary color
  • b5c5f75 refactor: Extract linkify function to shared utility
  • f252f15 feat: Add sitemap and RSS feed for SEO
  • 5d2ae3a feat: Add Open Graph and Twitter Card meta tags for social sharing
  • abdc98c feat: Add keyboard accessibility to theme toggle
  • f815b25 refactor: Eliminate code duplication with shared components and utilities
  • 43940c9 fix: Restore theme switcher functionality
  • 58e7057 docs: Make design preview workflow more explicit and mandatory
  • 356e5e2 refactor: Move theme config to module and fix CV text visibility
  • e35bbc5 feat: Add canyondusk theme and consolidate theme config
  • 4a3df2c fix: Prevent theme icon flash on page load
  • 330dbd6 feat: Add mistymeadow and oceanicnight themes
  • 0bd998f feat: Add cyberpunk theme and system preference detection
  • 2ec4248 feat: Add simplified 5-color theme system with dark/light toggle
  • dbfdbe1 docs: Add workflow requirement for local preview before commit
  • b97517a feat: Improve typography and navigation prominence
  • 1825fea fix: Install git in CI build stage for diff checking
  • 4b9b631 ci: Add smart skip for markdown-only changes
  • e57ee06 revert: Remove broken markdown-only skip logic from CI
  • 251bd28 ci: Skip build and deployment for markdown-only changes
  • b178dc7 docs: Document automatic deployment on push to master
  • c5b9c46 feat: Add navigation links and improve page layout consistency

2025-10-05

  • 9ad25fb feat: adding compi

2025-07-09

  • ba4d750 feat: Improve mobile responsiveness and text styling
  • 87c305f fix: Correct Astro component syntax in cv.astro
  • 4c1433c feat: Hide timeline elements on mobile for CV page
  • 26b4134 fix: Correct regex and timeline layout in cv.astro
  • 5d6152a feat: Adjust CV timeline for better mobile responsiveness
  • 8b5683b refactor: Update CV description for OASIS role
  • c2d1af0 refactor: Improve clarity and consistency of CV data

2025-07-08

  • 6d7dcc0 feat: Improve CV layout with spacing and text justification
  • 487ce9f fix: Correct unterminated regex in cv.astro
  • 3144e8f feat: Implement linkification and text wrapping for CV content
  • af738ed feat: Add console error testing and dedicated error page
  • bc232b9 refactor(ci): remove puppeteer debug logging
  • 8db0b94 fix(ci): remove explicit PUPPETEER_EXECUTABLE_PATH
  • 42af4d3 fix(ci): use /home/tzhechev for bun installation path
  • 4e81f69 refactor(ci): use puppeteer image and install bun
  • df8f11a fix(test): add more puppeteer launch arguments and increase timeout
  • 6e4889b feat(test): add granular logs for puppeteer page creation
  • 52e3976 fix(test): add --disable-dev-shm-usage and navigation log
  • aa1d647 feat(test): log discovered pages for debugging
  • 1fd5494 feat(ci): enable puppeteer debug logging
  • acddd54 fix(test): consistent IPv4 usage for server and puppeteer
  • f19931b refactor(test): use bun x for serving and remove npm dependency
  • 2e9edbf refactor(test): robust server startup and dynamic port
  • bcac527 fix(test): address puppeteer timeout issues
  • 9e54fc2 fix(ci): configure puppeteer for gitlab-ci
  • 5e1f1b7 fix(test): rename test file for bun compatibility
  • 3bd3778 fix(deps): update bun.lock with new dependencies
  • 389c877 refactor(ci): use bun for test job
  • 8e30b12 ci: cache node_modules in build job
  • 9d058cd fix(test): use a web server to prevent CORS issues
  • 6cd197a refactor(test): dynamically find pages to test
  • 26e029c fix(ci): install puppeteer dependencies
  • 14039af feat: add browser-based tests for console errors

2025-07-04

  • 3acd585 feat: Remove background effects for a cleaner design
  • e94fc34 fix: Resolve 404 errors for CSS files
  • 2c38533 feat: Update favicons and web manifest
  • 5899f58 feat: Dynamically set CV page title and meta description
  • b787730 feat: Add AI summary to essays list and homepage
  • 24e80eb feat: Refine homepage banner and subtitle

2025-07-03

  • fe1fef9 feat: Enhance homepage content and styling
  • 29f0f56 feat: Restructure homepage with dedicated sections and vertical alignment
  • 19ce69e feat: Remove certifications section from CV
  • da7476f feat: Invert CV timeline order
  • b17ebc2 feat: Add back links to CV and Essays pages
  • d85b9c2 feat: Refine essay page padding and add copyright
  • 7512137 feat: Add back link to essay pages
  • 544cb2a feat: Improve essay page layout and styling
  • 49345ca content: first essay - on agility
  • 234c0c6 fix: Correct front page text color
  • 722db69 feat: Add essays section and restyle homepage

2025-07-01

  • beaff0b fix: fixing deploy to go straight to prod
  • 1487120 fix: adding cloudflare id
  • 30367d4 fix: setting project name correctly
  • 24d0422 feat: adding autodeploy to cloudflare pages
  • 5b6643b fix: fixing wrangler dist dir
  • f94d195 feat: adding wrangler config
  • ff2e329 feat: Add subtle cloud background effect
  • ab116da feat: Remove skills section
  • 0155dd7 docs: Update README.md
  • 95bc703 fix: Prevent timeline line overflow
  • d43ef46 feat: Implement proportional vertical timeline
  • 79518a3 Revert "feat: Implement robust proportional vertical timeline"
  • 7d4eaf3 feat: Implement robust proportional vertical timeline
  • 5f4760b Revert "feat: Implement vertical experience timeline"
  • 3b26720 feat: Implement vertical experience timeline
  • 41e0b82 feat: Implement proportional experience timeline
  • 3f38d92 feat: Adjust color palette for improved readability
  • 1f8421c feat: Add notable feats to experience roles
  • 743e5a9 feat: Remove phone number from CV
  • 022754a feat: Refine experience section and fix duration display
  • 227dc94 feat: Remove public directory
  • 5189d72 feat: Update email and enhance experience section styling
  • 1aa9b26 Switch to bun based build
  • 4357015 first working design
  • a0ad0dc getting started

2025-04-11

  • 38d7ff8 Initialized from 'Pages/Astro' project template