Terminal-themed interactive CV with Tokyo Night aesthetic, bilingual ES/EN, deployed end-to-end on free tiers (Cloudflare Pages + Workers, Fly.io).
$ ls ~/
about.md experience/ projects/ skills.json education.md contact.vcf
This repo is a framework — no personal data is hardcoded. Fork it, add your own personal/ directory with your data, and deploy your own interactive CV.
- Frontend — Astro + TypeScript + Tailwind · Cloudflare Pages
- Backend — Spring Boot 3 / Java 21 · Fly.io · generates PDF on demand
- GitHub proxy — Cloudflare Worker caching the GitHub API
- i18n — ES/EN via
lang es|encommand + auto-detection
-
Clone this repo:
git clone https://github.com/NotPelos/interactive-cv.git my-cv cd my-cv -
Copy the profile template:
cp apps/web/src/profile.template.ts apps/web/src/profile.ts
Edit
apps/web/src/profile.tswith your name, email, social links, and domain. -
Create your content by copying the example structure:
cp -r personal.example/ personal/
Edit the files in
personal/content/with your CV data. Add your photo aspersonal/avatar/avatar-raw.png. -
Install and run:
pnpm install pnpm --filter web sync # copies personal/ → src/content/, generates assets pnpm --filter web dev # starts Astro at localhost:4321
See personal.example/README.md for the full content structure guide.
apps/
├── web/ # Astro — interactive terminal + recruiter view
│ ├── src/
│ │ ├── profile.template.ts # placeholder profile (fork this)
│ │ ├── content/ # generated by sync-content.mjs
│ │ └── ...
│ └── scripts/
│ └── sync-content.mjs # copies personal/ into the build
├── worker/ # Cloudflare Worker — GitHub API cache
└── api/ # Spring Boot — CV PDF + visits + Swagger
personal.example/ # example structure for personal/
docs/ # PRD, architecture, design, security, deployment
.claude/ # orchestration agents (Claude Code)
pnpm install
pnpm --filter web sync # requires personal/ to exist
pnpm --filter web dev # Astro at localhost:4321
pnpm --filter web:worker dev # Worker at localhost:8787
cd apps/api && ./mvnw spring-boot:run # Spring Boot at localhost:8080- PRD — what and why
- Architecture
- Design — UX and Tokyo Night palette
- Security
- Deployment
- Roadmap
CI needs access to your private content repo. Add a secret CV_CONTENT_PAT (a GitHub PAT with repo scope for your content repo) to your repo secrets.
MIT — the code, not the CV content (that belongs to the owner).
Original by NotPelos.