How this works

A portfolio that shows its work.

Here's the problem with resumes: anyone can write "CI/CD, automated testing, documentation, clean architecture" on one. The words are free. So instead of listing practices, I'm using this site to demonstrate them directly - each one running live, where you can check it.

This is an ongoing project. Right now the site demonstrates CI/CD, automated testing, and documentation: the pipeline status in the footer is real, the changelog is my actual git history, and the test count was written by CI into the exact deployment you're reading. More principles and tech will be added over time, each one demonstrated the same way - live, not claimed. This page is the design doc for all of it.

The pipeline

Every push to main runs this end to end. If any step fails, nothing deploys. The page you are reading was produced by it.

git push origin main

lint

eslint

test

vitest

build

next.js

deploy

vercel

test counts and commit metadata are baked into the artifact → shown in the ops panel

Stack

FrameworkNext.js (App Router, React Server Components, ISR)
LanguageTypeScript, strict
StylingTailwind CSS v4 - design tokens in CSS, no UI kit
TestingVitest - content integrity, formatting, API shapes
CI/CDGitHub Actions (lint + tests gate every deploy) → Vercel
DataTyped TS content modules + GitHub REST API

Decisions & tradeoffs

GitHub Actions gates every deploy

Vercel could deploy this site automatically on push, but then the pipeline shown in the ops panel would be someone else's. Instead, Actions runs lint and the test suite on every push, and only a green run is allowed to trigger the deploy - Vercel builds the exact commit the gate approved, with the commit hash, run number, and test counts forwarded from the pipeline into the build. Every claim on this page maps to a workflow file you can read in the repo.

Content is typed TypeScript, not a CMS

Projects and experience change a few times a year. A CMS adds a database, an admin UI, and an attack surface to solve a problem git already solves. Typed modules mean the content is validated at compile time and every edit is a commit - which feeds the changelog.

Build metadata is baked, live status is fetched

The commit hash and test count in the ops panel are written into the build artifact by CI - they describe exactly the deployment you're looking at and can't drift. Only the pipeline status is fetched live from the GitHub API, cached for five minutes.

Everything degrades gracefully

If the GitHub API is rate-limited or unreachable, the changelog and ops panel say so honestly and the rest of the site is unaffected. No feature here is allowed to break the recruiter path: home, resume, contact.

Don't take this page's word for any of it - the source is public at github.com/vedanthirekar/portfolio_vedant, the pipeline is in .github/workflows/deploy.yml, and the data behind this site is served by a real public API.