The rare hole that becomes a home. Every other hole on this page now lives inside this one.
surfacean art bible deep
feedingsince 2025
Pixel art
the pullHow do Hyper Light Drifter and Penusbmic say so much with so few squares? The limit is the style.
Fed daily. serverBound’s whole look lives down this hole. So do the Sambalpuri ikat patterns on this site, which turn out to have been pixel art all along: weavers plan them square by square, before a single thread is dyed.
Not a hole. A burrow I live in. Precise and warm aren't opposites.
surface44 lessons deep
feedingsince Sep 2026
Basic Tagalog, rebuilt for one learner
Python (scanned book → web page and e-book) · neural voices · plain HTML, CSS and JavaScript
the pullThe best Tagalog textbook is from 1969, and it lives in scanned pages. What if it were something you could use instead?
why I triedI'm learning Tagalog, and I wanted the book to talk back: say every word out loud, drill me on the vocabulary, and never lose my place.
I turned Basic Tagalog for Foreigners and Non-Tagalogs (Aspillera, revised by Hernandez) into a quiet reading app. Every example sentence has a play button. Each lesson’s key words sit in little chips you can tap to hear. The exercises are boxes you type into.
There are 178 recorded voice clips, a dictionary of more than 1,640 words you can search either way, flashcards built from the book’s own word lists, and settings for type size and contrast. It also makes an e-book.
what survivedMy own reading app for Aspillera's Basic Tagalog: 44 lessons, a dictionary and flashcards
The most personal software I've made. Audience: me.
Watch larger ⛶
hibernating:9 · deep dive done; it will wake
surface1,370 tests and a diary of wrong turns
hibernatingsince Sep 2026
Doen Thang, a travel plan from a local's point of view
the pullAsk Google what to do in Bangkok and you get the same nine temples as everyone else, because you asked as a tourist. What does the city look like to someone who lives there?
why I triedTo try Solari's tools for running browsers in the cloud on a real product, with a hard $20 budget, and find out whether a local's point of view could be bought or had to be built.
You say where you’re going and what you care about. Doen Thang searches the web the way a person in that city would, then writes you a day-by-day plan with the places it found.
The whole idea was a “viewpoint”: a browser with a language, a time zone, a history and a location, all set up like a real local’s. I built it assuming location mattered most. The first proper experiment said otherwise. Searching in Thai and in English, from the same computer in the same second, gave results with nothing in common. Changing the country barely moved them, about as much as waiting five minutes. That finding changed the design.
A price check found one Bangkok hotel listed at about $546 from the US and $580 from six other countries. A small model called JEV reads each page and answers three yes-or-no questions: is this a bot wall, is it one hotel, is there a price on it. That way a check written for English pages doesn’t break on a Japanese one.
what survivedA trip planner that writes you a document, and a diary of every wrong turn
I paid for the wrong ingredient. You get local answers by asking in the local language, not by pretending to be in the country.
Watch larger ⛶
surfacemonths of evenings
hibernatingsince Jan 2026
Leela, animations that react
Godot · TypeScript · webcam face tracking
the pullRive makes animations that react to you: a button that flinches, a character that looks at your cursor. I wanted to make my own, and then I wanted it to watch my face.
I was trying to recreate Rive, a tool for animations that respond to what you do. Then I added puppetry. A webcam reads your face expression and the character moves with it, live. You build the character in Godot, a game engine, and it plays in any web browser.
It went to sleep when serverBound woke up. It will be back.
what survivedLeela: draw and animate in Godot, play it on the web, and puppet the character with your webcam
I set out to rebuild one tool and ended up making a puppet that copies my eyebrows.
Watch larger ⛶
surfacesix phases built
hibernatingsince May 2026
flyWheel, an app that won't let hoarding feel like progress
the pullEvery reading app rewards collecting. Save a thousand bookmarks and it feels like work. What if the gauge only moved when something got finished?
why I triedI read far more than I make. I wanted a tool that treats everything I read as raw material, and counts it only once it has fed something I shipped.
flyWheel is named after Jim Collins’ flywheel: small pushes in the same direction that add up. Its job is narrower. It watches a folder, and anything I drop in (a PDF, an epub, an article, a bookmark) becomes an input. Inputs do nothing on their own. They only count once a quest that used them is finished and its output is shipped.
So the momentum gauge is built to ignore hoarding. It rises with quests completed against inputs added, with days I actually showed up, and falls with drift: inputs I haven’t touched in a week and quests left open for five days. Importing 800 bookmarks moves it by exactly nothing.
Three NPCs keep me company: the Scout proposes the morning’s plan, the Archivist reads an input and suggests what it could become, and the Watcher narrates the day in the evening. They need an API key for their voices. Without one the app still does everything; it just stops talking.
When an output is done, Export .md writes it with frontmatter into a folder of my choosing, like this site’s content folder. No git, no deploy. The file landing is the hook.
Everything stays on my machine except the optional language-model calls and the pages I ask it to fetch.
what survivedA local-first macOS app: inputs, quests, a momentum gauge, drift, three NPCs and a publishing hook
The one design law was the whole idea: nothing rewards input. Everything else was furniture.
Watch larger ⛶
surfacea working tool
hibernatingsince Oct 2026
indieDevDocs, market research that shows its receipts
Solari cloud browsers · Steam public API · React · Postgres · Cloudflare
the pullIndie developers bet a year of their life on thin evidence. Is this kind of game crowded? What do similar games charge? And six months later, can you still show why you decided?
why I triedThe second thing I built on Solari's cloud browsers, after Doen Thang. Could research come with proof attached, instead of numbers copy-pasted from somewhere?
Pick two or three Steam tags. The tool reads Steam, opens each similar game’s store page, and keeps a copy and a screenshot of exactly what it saw. Click any number in the document and the receipt opens. Your browser checks the saved copy hasn’t changed since.
One run on Indie + Roguelike Deckbuilder + Pixel Graphics, on 1 October 2026: 298 games carry all three tags, the middle price is $9.99, and none of the 8 closest games say they used generative AI. A quarter of their negative reviews (169 of 665) were written inside Steam’s two-hour refund window.
It also says plainly what it can’t tell you: sales, revenue, wishlists, or why players liked a game.
what survivedA research document for Steam: one run takes about two minutes
A number you can't trace is an opinion. This one proves itself in your browser.
Watch larger ⛶
surfacea playable mockup
hibernatingsince Jun 2026
chessNET, chess where every piece is a computer
HTML · CSS · JavaScript · Web Audio sound effects
the pullWhat if taking a piece meant breaking into it? Every square is a machine on a network, and every enemy piece has a weakness you have to find.
The board is a small network. Your pieces are your machines and theirs are targets. Click an enemy piece and you see what it’s running and how it’s weak. Breaking in is a tiny capture-the-flag puzzle. Each piece has its own:
pawns leak a secret through a careless input box
knights have a guessable password
bishops fall to a database trick
rooks open if you knock on the right ports in order
the queen has a backup tool that runs with too much power
Getting in costs data packets, and every move raises a trace alarm. Once you’re inside, you can plant a sleeper. Later you can detonate it, and that piece changes sides. The king can only be broken with the keys you stole from the others.
In the video: a pawn moves, the pawn on f7 gets hacked by leaking its environment variables, and then it betrays its own side.
what survivedA playable mockup: a chessboard of hackable machines, with a puzzle behind every piece
Chess already had sleeper agents. They were just called pawns.
Watch larger ⛶
surfaceone hackathon
hibernatingsince Sep 2026
Surakhsa, reporting cyber fraud in the first hour
the pullWhen someone is scammed in India, the money moves through other accounts within hours. The official reporting site asks them to log in, sort their own case into police categories, and pick from dropdowns first.
One door. You describe what happened in your own words, in English, Hindi or Hinglish. The app suggests which official category it falls under, and you can agree or change it. If money has just left your account, it sends your bank a freeze request with only the six details a bank actually needs, while a countdown shows how much of that first hour is left.
It works without signal, too. You get an acknowledgement number straight away, and the complaint waits on your phone until it can send. Until then the tracker says so honestly: saved on this device, not yet delivered.
An independent hackathon prototype, not a government service. All data in the film is made up.
what survivedA working prototype and a two-minute film, for Build What Moves India (Varun Mayya × OpenAI)
The interesting problem wasn't the form. It was the hour in which stolen money can still be frozen.
With sound. The two-minute Surakhsa film: why reporting cyber fraud in India breaks today, and the redesigned flow, in the maker's own voice.Watch larger ⛶
surfacea prototype
hibernatingsince Sep 2026
Math Ninja, the Legend of Kalinganagar
Godot
the pullA mental-maths game made for one Grade 3 student in Odisha, his friends, and his Bada Bhai.
Numbers fly up and you slice the right answer. Slice a wrong one and it doesn’t just say “wrong”. It says “9 is 2 too high!”, so the mistake becomes the lesson.
what survivedA Fruit Ninja-style slicing game, drawn like Japanese ink painting
Designing for an audience of about six is the most honest playtest there is.
surfacea toolkit
hibernatingsince Sep 2026
SpeakEasy, training a voice
Python · open-source text-to-speech · Praat
the pullWhat does my Indian English actually sound like, if you measure it?
Free text-to-speech voices read a passage aloud as a reference. Then you read it, and Praat, a tool phoneticians use, compares the two: pitch, pace, where the stress falls.
what survivedA voice-practice kit: a reference reading, then feedback on yours
A rabbit hole about listening to yourself, which is harder than building anything.
surfacea weekend
hibernatingsince Aug 2026
Face capture for avatars
Python · MediaPipe · VRM avatars
the pullA webcam watches your face, and a 3D character copies it, live.
Google’s MediaPipe finds the points of your face on camera: eyebrows, eyelids, the corners of your mouth. Those points are sent to a 3D avatar, which raises its eyebrows when you do.
what survivedA small face tracker that drives a 3D avatar
Small, but it asks the same question Leela does: what if the animation listened back?
caught a scent:1 · not yet dived — but it calls
surfacenot yet, but soon
caught a scentsince 2026
Alternate reality games
the pullA story you don't read. You find it, hidden in real places and real websites, and you solve it together with strangers.
The plan for this site is a hidden layer underneath it, reached only through clues, tied to serverBound’s world. The Bhubaneswar game is the first one I’ve actually built. It’s on the Work page.
I caught the scent while planning serverBound's marketing. The hole knows I'm coming.
escaped:2 · it got away, or became something else
surfacethree years, a whole job
escapedsince 2020
Service meshes
Istio · Envoy · Kubernetes
the pullA big app today is hundreds of small programs talking to each other. How do they find each other, trust each other, and keep going when one falls over, without anyone holding a map?
A service mesh is the layer that answers those questions for every program at once: who’s allowed to talk to whom, what to do when a call fails, and a record of all of it. I spent three years at Tetrate turning that into docs, courses, videos and small games. It escaped, or I did. Everything I make now descends from it.
The deepest hole so far. I came out a different person: the one who draws maps of invisible things for a living.
surfacea research season
escapedsince 2026
Dabbawala logistics
the pullA 130-year-old lunchbox delivery network in Mumbai, nearly never wrong, run on local trains and colour codes painted on the lids. No computers.
Sorting at stations, handing boxes from one carrier to the next, and an error rate that would embarrass most software. It became a book chapter, and then it let me go.
I went looking for a metaphor and found a whole way of running things. The internet works like Mumbai lunch.
Registry maintained irregularly, like everything worth maintaining. New holes appear without warning. The garden is where the survivors go.
The World Beneath
turn-based roguelike · 8×8 textmode · CRT
Under the site there’s a small world. Click the screen to start: pick a companion, find the ten caches, and see how far down the temple goes.
The ring
waterପାଣି_ douses fire · fireନିଆଁ_ burns root · rootମୂଳ_ grounds spark · sparkବିଜୁଳି_ shocks water. Lead with what beats what’s in front of you: ×2 one way, ×½ the other.