- Portfolio – cyprien.in
- Resume – cyprien.in/resume.html
Built with Vite, React, TypeScript, Tailwind CSS, and shadcn/ui.
npm install
npm run dev # start dev server (http://localhost:5173)
npm run build # production build → dist/
npm run preview # serve the production build locallyResume PDFs are built from LaTeX sources in src/resume-sources/. Install a TeX distribution with latexmk before running the PDF generator locally:
# macOS
brew install --cask mactex
# Ubuntu / Debian
sudo apt-get update
sudo apt-get install -y latexmk texlive-fonts-extra texlive-latex-extra
# Windows
winget install MiKTeX.MiKTeXThen generate the PDFs:
npm run generate:resume-pdfsGenerated PDFs are written to public/resumes/. npm run build runs this automatically before building the site; GitHub Pages CI installs the Linux TeX packages in .github/workflows/deploy.yml.
Resume PDF variants are defined in src/data/pdfVariants.json.
To add a new shareable variant, add a LaTeX project under src/resume-sources/<slug>/ and add an entry like:
{ "slug": "ml", "label": "ML-focused", "file": "ccd97-resume-ml.pdf" }npm run dev and npm run build automatically generate clean resume pages and update public/sitemap.xml.
Use the generated /resume/<slug> URL when sharing on LinkedIn, Facebook, or other social previews.
src/
├── components/
│ ├── portfolio/ # portfolio page components
│ ├── resume/ # resume page components
│ └── ui/ # shadcn/ui primitives
├── data/ # fallback JSON used when remote APIs are unreachable
├── lib/ # utilities, fetchers, formatters
├── pages/ # PortfolioPage, ResumePage
├── types/ # shared TypeScript types
├── main.tsx # entry for index.html
├── resume.tsx # entry for resume.html
└── index.css # Tailwind + CSS variables
Deployed automatically to GitHub Pages via .github/workflows/deploy.yml on every push to master.
One-time setup: in the repo's Settings → Pages, set Source to GitHub Actions and configure the custom domain as cyprien.in.