Personal portfolio built with React, TypeScript, Vite and Tailwind CSS. Auto-deployed to GitHub Pages.
Coded from scratch with Claude Code as a modernized rewrite of my previous portfolio, which was no longer maintained.
Live: amaroke.github.io/Portfolio
- React + TypeScript
- Vite - bundler, dev server
- Tailwind CSS - utility-first styling with custom theme tokens
- i18next - FR / EN language toggle
- unplugin-icons - Iconify icons (Devicon, Simple Icons, Lucide) bundled at build time
- Fontsource - self-hosted Inter and Space Grotesk
- Formspree - contact form backend
- GitHub Actions - CI/CD auto-deploy to GitHub Pages
- Dependabot - monthly dependency updates, auto-merged when CI passes
npm install
npm run dev| Command | Description |
|---|---|
npm run dev |
Start dev server at http://localhost:5173 |
npm run build |
Type-check + production build |
npm run preview |
Preview production build locally |
npm run lint |
Run ESLint |
Every push to main triggers the GitHub Actions workflow (.github/workflows/deploy.yml), which lints, builds and deploys dist/ to GitHub Pages. Pull requests are linted and built without deploying. A monthly scheduled run redeploys so that auto-merged Dependabot updates go live.
The contact form needs the VITE_FORMSPREE_ID repository secret (see .env.example for local development).