Insta Services β rebuilding a dead 2016 marketplace as an AI matching engine
I took over an abandoned 2016 Java servlet marketplace and rebuilt the backend from scratch in TypeScript: describe a job in plain English, and Claude extracts the intent and drafts outreach to ranked nearby businesses.
Project Highlights
5,277 lines of new TypeScript, 91 passing tests, behaviour-identical to the legacy contract
Marketplace / Legacy modernisation
TypeScript, Node 20, Vercel Functions, Neon Postgres, Claude API, Kotlin, Jetpack Compose
Insta Services β rebuilding a dead 2016 marketplace
What this is, precisely
This is a modernisation case study, not a product launch, and the distinction matters.
I inherited a 2016 university marketplace project β a Java servlet backend and an Android client, both abandoned. The rebuild is mine: a new TypeScript serverless API written entirely from scratch (76 commits, 5,277 lines, 91 passing tests), plus a Kotlin/Jetpack Compose rewrite of the client. I did not architect the original marketplace, and the story is more interesting for saying so.
The idea
You describe a job the way you would to a friend β "my kitchen tap has been dripping for a week" β and Claude extracts the structured intent, ranks nearby businesses, and drafts the outreach message for you.
The supply side is cold-start data: roughly 15,000 Melbourne business listings ingested from the public Australian Business Register. These are not signed-up providers. Nobody joined. They are registry records, matched to confirm an ABN is real and active β a registry check only, with no licensing, insurance, or background verification behind it.
The engineering that was actually hard
Porting a legacy contract means porting its typos. The rewrite deliberately preserves a misspelled JSON key (reciever_id), a database column spelled updaterd_time, and query parameters containing literal spaces. Behaviour-identical means bug-identical, or the Android client stops parsing.
Attributing latency correctly. Response times swung between 0.3 and 11.5 seconds. Every instinct said query tuning; the proof it was cold starts came from timing an endpoint that returns before touching SQL at all. Full write-up here.
Failing honestly. The inherited convention was to log the error and return an empty list, so a database outage rendered in the app as a confident "No providers near you." The fix, and the trick that made it need zero client changes.
Honest status
Pre-launch. No users, no revenue, no billing. The Android client is built but not released β no Play Store listing, sideload only. Production deploys have been frozen since 29 June 2026 by an unresolved platform block, so several fixes are written, tested, and pushed but not live. There is no web product surface.
Why it matters for client work
Most real software work is not greenfield β it is inheriting something that already has users, quirks, and no documentation. This project is a worked example of doing that carefully: preserve the contract exactly, measure before optimising, and make failures loud instead of convenient.
Need Similar Results?
Let's discuss how we can help your business achieve comparable success.
Start Your Project