Personal portfolio of Raghav Vikram Rathi — Backend Software Engineer (Python · FastAPI · AsyncIO · AI/LLM).
Live: https://withrvr.github.io/
A single-page site built with Vite + React 19 + Tailwind CSS v4, deployed to GitHub Pages. All display content lives in one JSON file, so changing text, links, or assets rarely means touching component code.
| Framework | React 19 |
| Build | Vite 8 |
| Styling | Tailwind CSS v4 |
| Animation | AOS (scroll reveals) + framer-motion (preloader, parallax) |
| Lint | ESLint 10 (flat config) |
| Hosting | GitHub Pages via GitHub Actions |
Requires Node 22+ and npm.
npm install
npm run dev # local dev server (http://localhost:5173)
npm run build # production build → dist/
npm run preview # preview the production build locally
npm run lint # ESLintAll site content is in src/data/portfolio.json —
personal info, social links, hero copy, about, skills, projects, experience,
achievements, education, and footer. Editing that file is the intended way to change any text,
link, or asset path. Components read it through
src/lib/site.js; don't hardcode copy in components.
- Media assets live in
public/media/and are referenced by absolute path (/media/...). - The resume is
public/raghav_rathi_backend_engineer_20_july_2026_resume.pdf; swap the file and updatepersonalInfo.resumeUrl(andresumeFileName) to change it. - SEO/social-preview tags and JSON-LD live in
index.htmland are not auto-synced from the JSON — mirror name/title/social changes there.
src/
├── main.jsx # React entry
├── App.jsx # section composition order + AOS init
├── index.css # Tailwind import + global styles
├── data/portfolio.json # ALL content (single source of content)
├── lib/
│ ├── site.js # content + mailto/gmail helpers
│ └── version.js # build-time version + git hash
└── components/ # one component per section + ui/ primitives
public/ # static assets copied verbatim (media, resume, 404, sitemap)
Deeper docs for contributors and future maintenance live in
.claude/skills/portfolio-dev/ (architecture,
flows, conventions, versioning).
This project uses Semantic Versioning. The version field
in package.json is the single source of truth. The site footer
shows the deployed version and short git commit hash, generated automatically at
build time so they always match what's live. See
.claude/skills/portfolio-dev/references/versioning.md
for the bump rule.
Every push to main triggers
.github/workflows/deploy.yml, which runs
npm ci && npm run build and publishes dist/ to GitHub Pages. public/404.html
redirects unmatched URLs back to the homepage.
See CONTRIBUTING.md. Bug reports and feature requests use the
templates under .github/ISSUE_TEMPLATE/.
MIT © Raghav Vikram Rathi