Personal portfolio of Vaishnav Jois — Cloud & Open-Source Enthusiast.
Built with React, TypeScript, Tailwind CSS and Vite. Fonts are self-hosted and the page makes no
third-party requests. Dark and light themes, a Ctrl/⌘ + K command menu,
and full prefers-reduced-motion support.
| Path | What it is |
|---|---|
_src/ |
Source of truth. The React app (_src/src) and HTML shell (_src/index.html). The leading underscore keeps it out of the published site. |
index.html, assets/build/ |
Build output. Generated by npm run build and committed, because GitHub Pages serves the live branch as plain static files. Never edit these by hand. |
assets/*.png |
Certification badges and devcard.png. |
.github/workflows/devcard.yml |
Refreshes assets/devcard.png from daily.dev every day at 00:00 UTC and on every push to live. |
.github/workflows/build.yml |
Typechecks and builds every pull request. |
Content lives in _src/src/data.ts (credentials, links, email). The section counts,
filters and terminal output are all derived from it, so adding a credential updates everything.
npm ci
npm run dev # local dev server with hot reload
npm run typecheck # tsc
npm run build # typecheck + production build into the repo root- Make changes on
devand runnpm run buildso the committed output matches the source. - Open a pull request
dev→liveand wait for the Build check to pass. - Merge. Pages publishes
liveautomatically, and the DevCard workflow refreshes the card.
live also receives automated Update assets/devcard.png commits, so merge live back into dev
before starting new work.