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
-
ffdc20cfix(cv): add missing duration to Development Team Lead role -
16a2f77refactor(cv): improve summary to emphasize management focus -
c97f23afeat(cv): update career timeline and add LLM/AI focus -
8744dd9test: add comprehensive RSS feed validation tests
2026-02-01
-
c357cf0ci(lighthouse): only check overall scores at 100% -
9f4d532fix(csp): update _headers to allow Cloudflare Analytics -
7b86d05fix(csp): add CSP meta tag allowing Cloudflare Analytics -
f0f3a08fix(csp): eliminate all inline scripts for CSP compliance -
00b98abfix(csp): move inline scripts to external file to comply with CSP -
bf12ddfchore: update changelog with recent fixes -
5c77b1afix: restore working ThemeToggle component -
15e1237fix: add theme icon fallback and hide route announcer -
4da006efix: revert async CSS loading - fixes broken theme and styling -
2c204a0fix(lighthouse): resolve accessibility and performance issues -
3f036a5chore: Add Lighthouse reports to .gitignore -
4f13d7bci: Add local Lighthouse CI testing infrastructure -
6d627eeci: Add --disable-features=dbus to Chrome flags -
c222e42ci: Fix Chrome container compatibility -
b4d8bacci: Fix Lighthouse CI memory issues -
c870035ci: Fix Lighthouse CI Chrome installation -
cf835c5ci: Add Chrome flags for headless CI environment -
a5ba2cefix: Rename lighthouserc.js to .cjs for CommonJS compatibility -
9d9e94bsecurity: Complete security audit and remediation
2026-01-30
-
27c4032Edit 04-cicd-the-snakeoil-of-isolation.md -
d88b5ddEdit 02-cicd-is-a-dirty-word.md -
a891562Edit 03-cicd-the-devils-in-the-details.md -
baf24bbfixing essay yaml further -
2107583fixing essay yaml -
49b2cd4adding cicd and the snakeoil of isolation
2026-01-29
-
6c40768fix: Quote essay title with colon to fix YAML parsing -
7807926adding cicd the devils in the details essay
2026-01-28
-
da6c921removing unnecessary section numbers -
4f59b73Adding CI/CD is a dirty word essay.
2026-01-27
-
5ddd281fix: Only deploy to Cloudflare after tests pass -
6f79847fix: Fetch full git history for complete changelog -
361f31dfix: Install git in build stage for changelog generation -
f13fef9fix: Generate changelog from JSON file for Cloudflare Pages -
7687ae3feat: Add About page with tech stack and full changelog -
cef9eeffeat: Improve essay layout with informational header -
702ccffAdding CI/CD intro essay. -
bedcf15docs: Update README with test structure and CI/CD info -
4186e42docs: Update CLAUDE.md with new test structure and utilities -
ef9dbbbfeat: Add E2E tests verifying CV data is rendered on page -
2b008f2feat: Add comprehensive unit tests for business logic -
122945fchore: Add color to CI change detection logs -
61b9e65chore: Add verbose logging to CI change detection -
ed7ec37feat: Show skipped jobs as gray in GitLab CI instead of green -
038697bfix: Improve CI markdown-only detection with proper git history -
9828bcdfix: Generate PDF after astro build to ensure it ends up in public/ -
0c3f8e8feat: Replace Puppeteer PDF generation with @react-pdf/renderer
2026-01-25
-
2368d2efix: Prevent layout shift from scrollbar on CV page -
b87eac8fix: Code quality improvements from review
2025-10-14
-
87f7d29feat: Add preconnect hint and RSS feed discoverability -
4ddf06efeat: Add Cloudflare Pages headers for caching and security
2025-10-06
-
1008967feat: Add custom 404 error page -
9fd1556refactor: Apply PageNavigation to essay pages and fix markup bug -
9b08abarefactor: DRY improvements for theme and navigation -
e9e5bfdfeat: Add print styles for clean PDF output -
96ea015refactor: Generate PDF in build stage instead of separate stage -
5f80564fix: Copy public directory to writable location for PDF generation -
f860a97fix: Remove failing chmod from PDF generation stage -
3eb0d01refactor: Remove unnecessary CI detection from PDF script -
ad187efrefactor: Skip PDF generation entirely in local dev -
e2be462fix: Proper error handling for PDF generation and fix CI/CD permissions -
4b78b6bfeat: Add automated PDF CV generation with download button -
23b5adfperf: Optimize Compi image with Astro's image optimization -
eb64bfffeat: Add social share buttons to essay pages -
4777697feat: Add canonical URLs and improve meta descriptions for SEO
2025-10-04
-
4640051feat: adding compi to the end of essays -
e3f2073feat: adding bookend to essays -
2f48f7astyle: Improve essay pages readability and layout -
f383003style: Increase default text sizes across the site for better readability -
27eb6c7fix: Make banner image responsive on mobile devices -
0923829feat: Add SEO improvements with structured data, robots.txt, and meta descriptions -
657c6d1refactor: Add TypeScript interfaces and extract RoleCard component -
bbb504cfeat: Add view transitions for smooth page navigation -
05be82fperf: Convert banner image from PNG to WebP -
94c383echore: Update bun.lock with new dependencies -
3e87d90refactor: Update theme collection and fix dark theme primary color -
b5c5f75refactor: Extract linkify function to shared utility -
f252f15feat: Add sitemap and RSS feed for SEO -
5d2ae3afeat: Add Open Graph and Twitter Card meta tags for social sharing -
abdc98cfeat: Add keyboard accessibility to theme toggle -
f815b25refactor: Eliminate code duplication with shared components and utilities -
43940c9fix: Restore theme switcher functionality -
58e7057docs: Make design preview workflow more explicit and mandatory -
356e5e2refactor: Move theme config to module and fix CV text visibility -
e35bbc5feat: Add canyondusk theme and consolidate theme config -
4a3df2cfix: Prevent theme icon flash on page load -
330dbd6feat: Add mistymeadow and oceanicnight themes -
0bd998ffeat: Add cyberpunk theme and system preference detection -
2ec4248feat: Add simplified 5-color theme system with dark/light toggle -
dbfdbe1docs: Add workflow requirement for local preview before commit -
b97517afeat: Improve typography and navigation prominence -
1825feafix: Install git in CI build stage for diff checking -
4b9b631ci: Add smart skip for markdown-only changes -
e57ee06revert: Remove broken markdown-only skip logic from CI -
251bd28ci: Skip build and deployment for markdown-only changes -
b178dc7docs: Document automatic deployment on push to master -
c5b9c46feat: Add navigation links and improve page layout consistency
2025-10-05
-
9ad25fbfeat: adding compi
2025-07-09
-
ba4d750feat: Improve mobile responsiveness and text styling -
87c305ffix: Correct Astro component syntax in cv.astro -
4c1433cfeat: Hide timeline elements on mobile for CV page -
26b4134fix: Correct regex and timeline layout in cv.astro -
5d6152afeat: Adjust CV timeline for better mobile responsiveness -
8b5683brefactor: Update CV description for OASIS role -
c2d1af0refactor: Improve clarity and consistency of CV data
2025-07-08
-
6d7dcc0feat: Improve CV layout with spacing and text justification -
487ce9ffix: Correct unterminated regex in cv.astro -
3144e8ffeat: Implement linkification and text wrapping for CV content -
af738edfeat: Add console error testing and dedicated error page -
bc232b9refactor(ci): remove puppeteer debug logging -
8db0b94fix(ci): remove explicit PUPPETEER_EXECUTABLE_PATH -
42af4d3fix(ci): use /home/tzhechev for bun installation path -
4e81f69refactor(ci): use puppeteer image and install bun -
df8f11afix(test): add more puppeteer launch arguments and increase timeout -
6e4889bfeat(test): add granular logs for puppeteer page creation -
52e3976fix(test): add --disable-dev-shm-usage and navigation log -
aa1d647feat(test): log discovered pages for debugging -
1fd5494feat(ci): enable puppeteer debug logging -
acddd54fix(test): consistent IPv4 usage for server and puppeteer -
f19931brefactor(test): use bun x for serving and remove npm dependency -
2e9edbfrefactor(test): robust server startup and dynamic port -
bcac527fix(test): address puppeteer timeout issues -
9e54fc2fix(ci): configure puppeteer for gitlab-ci -
5e1f1b7fix(test): rename test file for bun compatibility -
3bd3778fix(deps): update bun.lock with new dependencies -
389c877refactor(ci): use bun for test job -
8e30b12ci: cache node_modules in build job -
9d058cdfix(test): use a web server to prevent CORS issues -
6cd197arefactor(test): dynamically find pages to test -
26e029cfix(ci): install puppeteer dependencies -
14039affeat: add browser-based tests for console errors
2025-07-04
-
3acd585feat: Remove background effects for a cleaner design -
e94fc34fix: Resolve 404 errors for CSS files -
2c38533feat: Update favicons and web manifest -
5899f58feat: Dynamically set CV page title and meta description -
b787730feat: Add AI summary to essays list and homepage -
24e80ebfeat: Refine homepage banner and subtitle
2025-07-03
-
fe1fef9feat: Enhance homepage content and styling -
29f0f56feat: Restructure homepage with dedicated sections and vertical alignment -
19ce69efeat: Remove certifications section from CV -
da7476ffeat: Invert CV timeline order -
b17ebc2feat: Add back links to CV and Essays pages -
d85b9c2feat: Refine essay page padding and add copyright -
7512137feat: Add back link to essay pages -
544cb2afeat: Improve essay page layout and styling -
49345cacontent: first essay - on agility -
234c0c6fix: Correct front page text color -
722db69feat: Add essays section and restyle homepage
2025-07-01
-
beaff0bfix: fixing deploy to go straight to prod -
1487120fix: adding cloudflare id -
30367d4fix: setting project name correctly -
24d0422feat: adding autodeploy to cloudflare pages -
5b6643bfix: fixing wrangler dist dir -
f94d195feat: adding wrangler config -
ff2e329feat: Add subtle cloud background effect -
ab116dafeat: Remove skills section -
0155dd7docs: Update README.md -
95bc703fix: Prevent timeline line overflow -
d43ef46feat: Implement proportional vertical timeline -
79518a3Revert "feat: Implement robust proportional vertical timeline" -
7d4eaf3feat: Implement robust proportional vertical timeline -
5f4760bRevert "feat: Implement vertical experience timeline" -
3b26720feat: Implement vertical experience timeline -
41e0b82feat: Implement proportional experience timeline -
3f38d92feat: Adjust color palette for improved readability -
1f8421cfeat: Add notable feats to experience roles -
743e5a9feat: Remove phone number from CV -
022754afeat: Refine experience section and fix duration display -
227dc94feat: Remove public directory -
5189d72feat: Update email and enhance experience section styling -
1aa9b26Switch to bun based build -
4357015first working design -
a0ad0dcgetting started
2025-04-11
-
38d7ff8Initialized from 'Pages/Astro' project template