The first version of this portfolio was a landing page: gradients, glass cards and a lot of motion. It looked fine in a screenshot and said very little.
This version is built around the opposite idea. The work and the writing are the content, and the design stays out of their way.
What changed
- One column. Everything lives in a single readable column, so the layout never competes with the text.
- Real pages. Each project gets its own case study, and each case study can link to the posts that explain how it was built.
- A blog in the repo. Posts are MDX files in
content/blog. There is no CMS and no database. A post is a file, and publishing is a commit. - Search anywhere. Press
⌘Kto jump to a page, a project or a post.
How posts work
A post is a Markdown file with a little frontmatter:
title: My post
description: One sentence for the list and for link previews.
date: 2026-10-20
tags: [nextjs]
project: chaindeckThe project field ties a post to a project, so the project page can list its write-ups.
Everything is rendered at build time. That keeps pages fast and keeps the hosting bill at zero.
A second pass: the flight manual
The first rebuild fixed the structure. A later pass gave it a character. The site is now laid out like a technical manual for a space mission, because the work it describes is about finding structure in noisy data, and that is a space-flavoured problem: faint signals, instruments, telemetry.
The idea shows up in small, practical ways rather than decoration:
- Sections are numbered automatically. A CSS counter numbers them in render order, so an empty section never leaves a gap.
- Projects are missions. Each has a status, a type, a stack and a few checkable facts, and the blog is the flight log.
- The header strip is real data. It shows the local time in Mumbai, the position and my availability.
- One accent colour. Signal orange is used sparingly, on small marks and links, over a drafting-paper grey in light mode and a blue-black console in dark mode.
- Type that does a job. A condensed face for headings, a plain face for reading and a monospaced face for labels and data.
Everything is still static, readable in one column, and fast. The theme toggle and the search palette kept working throughout, and motion is turned off for anyone who asks their system for reduced motion.