Multilingual static site for my CV and portfolio.
https://cjournois.com/en
- TypeScript 91%
- JavaScript 3.9%
- Just 1.9%
- Shell 1.2%
- CSS 0.9%
- Other 1%
| .claude/skills | ||
| .github/workflows | ||
| docs | ||
| e2e | ||
| packages/resume-helm | ||
| services | ||
| .editorconfig | ||
| .gitignore | ||
| AGENT.md | ||
| CHANGELOG.md | ||
| docker-compose.yml | ||
| justfile | ||
| LICENSE | ||
| mise.toml | ||
| README.md | ||
| renovate.json | ||
| repo-toolkit.json | ||
cjournois/resume
Proprietary — Copyright (c) 2026 cjournois. All rights reserved. SPDX: UNLICENSED. See LICENSE for terms.
Multi-locale résumé site built with React, Vite, and Tailwind; static data under public/data/{locale}/, production image served by nginx.
Project structure
services/
resume/ # React + Vite app, Containerfile, nginx config
packages/
resume-helm/ # Helm chart published to git.journois.com
Documentation
- AGENT.md — compact project reference for agents and Claude Code
- Architecture overview
- Component docs —
resume,resume-helm
Summary
Developer: Usage
Run the dev server locally, or build static assets for deployment. Locales are discovered at build time from
public/data/*/resume.json(exposed to the app viavirtual:resume-locales).
- Development:
cd services/resume && bun start— Vite dev server (hot reload). - Production build:
just build— TypeScript project references, then Vite build intodist/. WithVITE_SITE_URLset, the Vite plugins also emitsitemap.xmlandrobots.txtindist/, and copypublic/data,public/assets, and optionalpublic/robots.txtintodist/. - Docker:
just up— builds the image fromContainerfileand serves it detached on http://localhost:8080;just downstops it. Compose setsVITE_SITE_URLfor the build stage so sitemap URLs match the published origin.
Developer: Getting Started
Requirements
Development
just install— Install dependenciesjust lint— ESLintjust lint-fix— ESLint with automatic fixesjust test—bun testjust test-coverage— Tests with coveragecd services/resume && bun start— Vite dev serverjust build— Typecheck and production buildjust up— Build and serve the production image on http://localhost:8080just down— Stop it
Optional: create a .env or .env.production with VITE_SITE_URL=https://your.domain so local production builds generate SEO files.
Maintainer: Troubleshooting
Notes for maintainers, issues, or to-do items
- Empty sitemap in
dist/:VITE_SITE_URLmust be non-empty at build time; ensure it is set in CI, DockerARG/ENV, or env files that Vite loads for the active mode. - Locales missing in the app: Each locale needs
public/data/<code>/resume.json; the virtual module lists only those folders.