capad.fyi · hero locked · now the rest of it

The run: what the site says, and how you move through it

The hero is settled — T4, the whole picture, deckle and live inks. So this is the other half of the problem: the content around it and the flow through it.

Here is the diagnosis, and it is not a content shortage. The good material already exists and most of it is better than what a portfolio in this genre usually has. The problem is that it is scattered, and the flow does not route through it. Four testimonials sit in their own section when three of them are about specific projects. Around sixty stack items take a scroll that reads as filler. The genuinely exceptional specifics — 553 of 647 commits, propose-then-confirm, 0.7 ms, 92% of self-time — are buried inside ninety-word paragraphs where nobody will ever read them.

So almost everything below is subtraction or re-attribution. Nothing is invented. Every word and every number is already yours, moved somewhere it can work. The coloured tags mark what is new, moved and cut.

real CMS copy · real metrics · real quotes wordmark restored: capad 1440 true width, shown at 0.55
1

The cover, with your wordmark back on it

The wordmark was the biggest missing piece and I could not place it without knowing what it actually is. Now I do: it is capad, and the icon is a c with a liquid drop falling off its terminal. So the drop becomes the ink drop on the sheet and the mark sits on the paper rather than floating above it. T4 ink, picture whole, same locked framing.

One thing I did not do. I left the statement, the name, the proof strip and the availability pill as your existing copy, unchanged. The innovation from here on is structural, not verbal.
2

What moved, what is new, what I cut

The whole proposal on one screen before the mock, so you can argue with the structure without scrolling a picture.

CoverWordmark restored. Statement, name, proof strip and availability pill are your existing copy, untouched. T4, picture whole.
The ledgerNew section, and the highest-leverage change here. Every hard number you already publish, aggregated into one honest block directly under the cover: 0 API keys, 0 blocking reviews, 0.7 ms, 92% of self-time, 137 LEDs, 2.3 MB, 8 AI-chat providers, 78 reviews, 553/647 commits. Today these are scattered across four cards where a scanning reader never assembles them. Each number names the project it came from, so it is a receipt and not a boast.
WorkKept, and reordered by proof density rather than by a manual order field: searchts, then Hare, then glyphmaps, then grove. Each card carries its real metrics as before.
TestimonialsMoved. No longer a section. Each quote is attached to the project it is about — the two searchts tweets sit under searchts, the wmux maintainer note sits under wmux, the Appson note sits under experience. This deletes a whole section and converts four testimonials from decoration into per-item evidence. It is the one change I would fight for.
ExperienceMerged with the manifesto. The summary fields are excellent and unreadable at ninety words each. The specific claims are pulled out of them as inline receipts — 553 of 647 commits, propose-then-confirm writes, SHA-256 append-only audit log, 1,400 LOC deadline engine, 34 Mongoose models. The manifesto then closes the section instead of sitting in a separate one.
The stackCut from the main flow. Eight groups, roughly sixty nouns. That is a resume appendix, and in a portfolio it is the lowest-signal screen on the site. It stays on /resume in full; the run replaces it with one line and a link. This is a deletion, and it is the one I most want you to check, because it changes what your site claims to be.
ContactReframed as a colophon. The last page of a printed book is where the credits are, and you already had the shape — a Caveat signature over capad.fyi · built in glass. Now it says so, and carries paper, ink and typeface credits. Also a bug: the site ships two different emails, connect@capad.fyi on the homepage and form, hi@capad.fyi in the CMS resume. Pick one.
FlowDeliberately almost nothing. The one continuous gesture is the registration offset easing toward zero as you leave the cover, reusing the mechanism you already liked rather than inventing three new set pieces. Section boundaries are carried by value and paper, not by animation.
3

The whole run, end to end

One continuous sheet. Read it top to bottom the way you would scroll it.

capad

I build the tools that shouldn’t need to exist.

open for the right problem
Aadarsh Upadhyay

shipping in the open  searchts · glyphmaps · grove · beep-beep-oss

See the work
the print comes into register as you leave the cover

the ledger

Everything below is checkable.

Nine numbers, all already published by you, each one naming where it came from. Nothing here is a claim I wrote.

0API keys to read a bot-walled pagesearchts
0reviews that can block a mergehare
0.7msfrom a synchronous call that timed outwmux
92%of main-process self-time, found by profilingwmux
137LEDs, driven as a turn arrowglyphmaps
2.3MBwhole APK, no Maps API keyglyphmaps
8AI-chat providers transcribedsearchts
78pull requests reviewed, none blockinghare
553/647commits on the flagship productcomplyv
1audit log, append-only, SHA-256complyv
new · aggregated from data you already publish

selected work

Four things I'm building.

Two shipped, two in progress. Status updates live, straight from the CMS. Ordered by how much checkable evidence each one carries.

01

searchts shipped

A keyless web unlocker that reads, searches, and transcribes what a naive fetch cannot, from bot-walled pages to whole AI-chat share conversations. Ships on PyPI as a CLI, an MCP server, and a Python library.

0API keys
3unlock tiers
8AI-chat providers
pythonclimcpweb-unlocker

what people said about this, specifically

“from your own IP” is the whole insight. a proxy pool fights the bot-wall; your own IP is already through it, same reason a human's browser doesn't trip cloudflare. an agent acting from where you already are doesn't need to sneak in. nice build.

Phi Browser · on searchts · @phibrowser

fetch-time + final_url turns read output into something a reviewer can cite later. Tier/status is useful; redirect + timestamp makes it durable.

Dang_nh · on searchts · @hikariraina
02

Hare in progress

A PR reviewer in two forms. Hare Bot checks the branch out, installs it, runs the repo's own test command, and posts findings as me. Hare is that same review shipped as a GitHub App. Neither can approve a merge.

53app reviews
25bot reviews
0blocking
github-appactionscode-reviewllm
03

glyphmaps shipped

Google Maps turn-by-turn on the back of a phone. GlyphMaps mirrors the next maneuver onto the Nothing Phone (4a) Pro's 137-LED Glyph Matrix, so a glance at a face-down phone shows your next turn. No Maps API key.

137LEDs
12maneuvers
2.3 MBAPK
androidkotlinglyph-matrix
04

grove in progress

A free Git review companion that sits beside your AI coding editor. The commit graph, diffs, and every in-flight worktree, refreshing live as your agent changes the repo under you.

alphastage
worktreefirst
BYOagent
typescriptelectronreactnode

also shipped, smaller: CoffeeBreath, a Rainmeter widget that breathes with the album art · Discord Voice Overlay · Dooper, a self-hostable Matrix inbox · MSU Halls Register.

moved · the two searchts quotes used to live in their own section

experience

Where the hours went.

2026 – from 2026

Software Engineer and ArchitectComplyV (formerly Compliance Sarathi) · Appson Technologies

553 of 647 commits, not sole devpropose-then-confirm writesthree-tier truth wallSHA-256 append-only audit log1,400 LOC deadline engine34 Mongoose modelsmulti-tenancy as a grant graph over CIN

Primary engineer and architect on a small team for corporate-governance SaaS covering MCA/ROC company data, statutory deadlines and penalties, and Vee, an agentic chat with governed writes.

2026 · from 2025

Junior Software EngineerWordibly · Appson Technologies

owned tops-transcript-editorfind/replace + related editingPM and QA dashboards

Owned a Vite/React transcript editor for production transcription work, with a thinner personal share on the wider CodeCommit platform.

2025

AI Training EngineerTuring, via Appson Technologies

two-week contractLlama training dataeval sets

Most people think “that would be cool” and move on. I build it.

I like things that respond and feel a little alive. A turn arrow drawn in LEDs on the back of a phone. A music widget that breathes with the song. The things I build are maximal and full of motion; the words about them stay plain.

Aadarsh owned the architecture of Compliance Sarathi end to end and shipped a reliable agentic assistant under real deadline pressure. He is who you want on the hard parts of a system.

Engineering · Appson Technologies
merged · manifesto now closes the timeline instead of hiding in its own section
the stack
TypeScriptReactPythonNext.jsElectronViteFigmaTailwind Framer MotionGSAPLenisNode.jsMongoDBPostgresWebSocketAWS KotlinComposeTauriDockerSanityCloudflare WorkersGitHub ActionsPyPITailscale

The stack moved to the resume, whole. Eight groups and about sixty nouns is an appendix, not a page. It reads as filler in a portfolio and it is the lowest-signal screen on the site. It is all still there at /resume; the run just stops pretending it is content.

cut from the main flow · this is the deletion I want you to check

colophon

Building something? Let's talk.

I'm open to roles, contracts, collaborations, and the occasional desktop oddity. Email is the fastest way to reach me.

Aadarsh Upadhyay

capad
connect@capad.fyi
paperone warm ink on warm stock
inkterracotta, one plate, deliberately off register
typeGeist Sans, Geist Mono
built withNext.js, Sanity, Cloudflare
reframed · and the site ships two different emails
4

The flow, stated plainly

You asked how we move through it, so here is the whole navigation model, which is deliberately almost nothing.

The spineCover → ledger → work → experience → colophon. Five stops, down only. Every claim on the page is either a number in the ledger or an expandable item beneath it. There is no sixth stop competing for attention.
The one gestureThe registration offset eases from its cover value toward zero as you leave the first screen, so the print visibly comes into register while you read. It is the same custom property the hero already uses, extended once. No new mechanism, no scroll-jacking, no pinned sections.
BoundariesCarried by paper value, not by animation. The sheet changes value once, at experience, and that is the only seam in the document.
NavThe dot rail becomes four stops instead of seven, because there are four places worth jumping to. Labelling it work ledger experience colophon rather than inventing new navigation.
ExitThe colophon is the exit and it behaves like one: the credits are there, the email is the largest thing on it, and there is nothing after it to scroll to.
What I deliberately did not do. I did not invent three transition set pieces, because you already told me minimal or full-page and this stays inside that. I did not rewrite any of your voice — the manifesto lines are verbatim. And I did not add a single piece of content you did not already publish, which is the test I held myself to for the ledger: every number in it is one you wrote.