Multilingual CV website built with Astro, React, MDX content, Tailwind CSS v4, Bun, direnv, and a Nix flake.
direnv allow
bun install
bun run devThe editable CV content lives in atomic MDX section files under src/content/cv/en/ and src/content/cv/ru/.
The public URL used for QR codes can be overridden at build time:
CV_WEB_BASE_URL="https://cv.example.com" bun run buildIn CI, CV_WEB_BASE_URL is required as a GitHub repository variable so the
generated QR codes point at the deployed Cloudflare Pages/custom-domain URL.
The website has an Export PDF button that opens the browser print dialog with print-specific styling.
To generate static PDFs into dist/pdf/:
bun run pdfPublished PDF links:
The workflow publishes these files as GitHub Release assets from the latest
successful main deployment.
GitHub Actions checks, builds, generates PDFs, publishes PDF release assets,
uploads the static artifact, and deploys the static dist/ directory to
Cloudflare Pages with Wrangler. Pull requests run checks/builds only; pushes to
main and manual runs publish the release assets and deploy.
Required GitHub repository variables:
CV_WEB_BASE_URL: public site URL, used for QR codes and the PDF links above.CLOUDFLARE_PAGES_PROJECT: Cloudflare Pages project name.
Required GitHub repository secrets:
CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID
Published release assets:
cv-en.pdf: English PDF export.cv-ru.pdf: Russian PDF export.
Uploaded workflow artifacts:
cv-dist: static site output without generated PDFs.
The workflow can be checked locally with act from the Nix dev shell:
act -n pushThe repo includes an .actrc runner mapping so the first dry run does not
prompt for a default image. Artifact upload is skipped under act, because it
depends on GitHub's hosted artifact runtime.