Every time I finished a project, the same thing happened. I'd push the code to GitHub, post about it on LinkedIn, and forget the one place a recruiter was most likely to look: my own website. The site was a single hand-written HTML file. Adding a project meant editing markup, committing and deploying, so it rarely happened.
The fix wasn't to be more disciplined. It was to remove the step.
GitHub is the source of truth
The new site doesn't have a hard-coded project list. It asks the GitHub API for my repositories and shows the ones I've tagged with a portfolio topic. Tagging a repo takes ten seconds from the repo page, and it's something I'd want to do anyway for discoverability.
If a repo needs more than its description, I add a small portfolio.json to it:
{
"title": "Customer Intelligence",
"impact": "Segments customers into groups a marketing team can act on.",
"stack": ["Python", "scikit-learn", "K-Means"],
"demo": "https://example.com"
}
The site reads that file when it exists and falls back to the repo's own description when it doesn't.
Fresh without rebuilding
The pages are rendered on the server and cached. Every hour the cache expires and the next visitor triggers a quiet refresh in the background. For instant updates, a GitHub webhook calls a revalidation endpoint whenever I push, so a new project shows up within seconds of the push, without a redeploy.
Writing lives next to the code
Posts like this one are Markdown files in the repository. That keeps them versioned, reviewable in a pull request, and fast to load, with no CMS to log in to.
What's next
The home page now opens with Ask Sangam, a small agent that answers questions about my work using only what's on this site. Each question is matched against the site's content with BM25 retrieval, and the most relevant pieces go to a language model with strict instructions to answer from them alone and cite where each answer came from. If the model is unavailable, it falls back to a structured knowledge base, so it never goes dark.
First published on sangamgupta.in.
Top comments (0)