I turned down Polymarket. They hired me anyway.
Polymarket offered me a job when the company was valued around $1.1 billion. The offer was roughly $500k a year in stock, about $2 million over the grant. I said no.
Hold that number. We’ll come back to it, and it gets worse.
The no
I want to be clear that there was nothing wrong with the offer. It was generous, and it was Polymarket, which even then was one of the most interesting companies on the internet: a live scoreboard for what the world actually believes, with money keeping it honest. As products go, that’s about as good as premises get.
The no was about me. I had my own company. I’d spent years building apps for clients on my own terms, choosing the projects, keeping the independence, and it was working. Somewhere in there I’d decided that being an employee, anywhere, wasn’t the shape of my life anymore. So when a great company slid a great offer across the table, the answer came out of that decision, not out of any math.
I said no to the job, not the people. Keeping that distinction clean turned out to matter more than I could have known at the time.
Then the election happened
You remember November 2024 whether you wanted to or not. For Polymarket it was the moment the premise cashed in. While pundits hedged, Polymarket had a number, and for a stretch it felt like the entire internet was checking it. The site went from “interesting company” to a piece of civic infrastructure more or less overnight.
December 2024, my phone. The market that made the company: resolved, with $3,686,335,059 of volume on the screen. I was checking it too — this screenshot is my own.
And then, because traffic is a wave and waves break, came the crash after the spike. That part rarely makes the retellings, but it’s exactly the moment that says the most about a team: what they chose to build once the world stopped refreshing the page. Polymarket’s answer was to go bigger. A proper regulated app for the US market, built right.
That’s when my phone rang again. Not with a job offer this time. They hired my contracting company.
I have to say, whatever mixture of graciousness and pragmatism it takes to re-approach the guy who turned you down, they had it. Nobody made it weird. There was work to do and they wanted it done well, and that was the entire temperature of the relationship, start to finish.
The work
Let me set the credits straight before anything else, because the internet loves to compress “I worked on” into “I built,” and I’m not letting that happen here.
Version one of Polymarket’s US app was not mine. The repo was three months old when I arrived — one of their engineers had been laying the scaffolding since April 2025, and he was, frankly, a joy to build alongside: fast, unprecious about his code, the kind of collaborator who makes the whole codebase better to live in. My first commit lands July 28th, 2025. More hands joined through the fall, the in-house team arrived in force by December, and my last commit is February 25th, 2026.1 I wrote key components, the load-bearing frontend pieces, and only frontend; I never touched the backend or the markets machinery.
If you want to know what I mean by components, my whole career is a paper trail: I’m the person who rebuilt iMessage down to the haptics. Polymarket hired that guy to do that thing. My job was making the surfaces you touch feel inevitable.
The part I cared about most was the money entry. When you type an amount into a trading app, you are typing money, and it should feel like it. So the number pad is custom — CUINumberPad, 447 lines. The amount display is a rolling ticker with the very serious name CUITickerCurrencyInputDisplay, every digit animating into place, and the text auto-scales as the number grows so that $5 and $50,000 both sit perfectly in the same space.2
Before any of the rest of it, though, there was a color problem to solve, and it started with me staring at a phone at nine at night in a red-lit room.
A confirmation screen has one job: tell you the money moved, and feel good enough that you don’t resent having spent it. A flat color is cheap. A photograph is somebody else’s taste. What I wanted was a surface that moves slowly enough that you are never quite sure it is moving.
The problem with that is banding. A gradient this slow, stretched across an OLED panel, resolves into visible stripes — you can see the steps between the colors. The fix is dithering: scatter a fine grain of noise across the whole thing so the eye blends the steps instead of counting them. The commit is called “Update gradient mesh background,” which undersells it considerably.
Once that existed, everything else could hand off to it — which brings me to my favorite single component, swipe to buy. Placing a real-money trade shouldn’t be a tap; taps are for likes. It’s a deliberate slide, slide-to-unlock for your conviction, with its own loading and success animations when the order lands. Git remembers the birthday: “feat: add swipe-to-dismiss trading widget with ScrollView,” August 14th, 2025, two and a half weeks in. The very next commit is “Implement gesture deferral,” because like everything involving a gesture inside a scroll view, the glamorous part took a day and the arbitration took much longer: teaching one pan gesture to win over another is the closest iOS work gets to diplomacy.3
The sports surface: live chart, live score, and the two-tap “Pick a side” row that hands you to the swipe.
Late in the engagement came my favorite feature to polish: the share receipts. Win a bet, and the app builds you a card — your position, your odds, your payout, your face if you want it, framed like a ticket worth keeping. It’s the kind of feature that’s ninety percent taste: the camera reveals gradually as you swipe, the shutter got moved to the bottom because thumbs live there, and the buttons fire their haptic on press down, not on release, because that’s when your brain expects it.
And taste, on this team, was a group activity. This is the actual thread, names smudged:
Two Polymarket engineers and me, relitigating a shutter button at 8:47 PM: “having the crop of the image be on bottom edge instead of middle of screen just feels more natural.” When I said the client cared about quality in the specific ways I care about it, this is what I meant, from inside.
My desk, a real device, the receipt in its natural habitat. You can tell it’s a work photo because the position is two dollars.
The rest was the connective tissue that makes an app feel expensive — transitions, launch animation, glass materials, a button style that presses down into the screen instead of shrinking. Old habits from the iMessage rebuild, gainfully employed.4
Their engineer laid the scaffolding and built much of the app. I built key components, all frontend. Their in-house team took it from there, and took it further.
What I can tell you is what it felt like: the best kind of client work. High stakes, real deadlines, a product the whole world had just finished looking at, and a client who cared about quality in the specific ways I care about it. When their new in-house team came aboard, we handed the codebase over and I got to feel the contractor’s strange pride: the point of the work was to make yourself unnecessary, and we did. Last I checked, the app is in very good hands, most of them not mine, which is exactly how v1 handoffs are supposed to end.
The coda
Now the math I skipped.
Polymarket is now reportedly raising at a valuation around $20 billion. When they offered me the job, they were worth about $1.1 billion. That’s roughly an 18x. The stock in that offer, the $2 million I waved off, would today be worth about $40 million.5
I’ll walk you through my process for absorbing this number. First I did the math. Then I did it again, slower, on the theory that I’d slipped a decimal. I had not slipped a decimal.
Forty million dollars. I’ve typed it now, so it’s real.
Here’s what I notice about the wince, though, having lived with it a while: it’s mine, and only mine. Polymarket made a strong offer, took the no gracefully, and came back years later to hire my company anyway, which is about as well as anyone has ever handled being told no by me.
And I don’t get to fully regret the decision, because I made it for reasons that were true and are mostly still true. The independence I bought with that no is the reason there’s a contracting company and this blog at all. I just didn’t know the sticker price. Nobody ever does; that’s the whole trick of the decision. You pick a door, and years later somebody tells you what was behind the other one, in this case with a term sheet attached.
So no, I wouldn’t call it a mistake. I’d call it the most expensive tuition I ever paid for a lesson I’d already decided to learn. And if Polymarket calls again, for the record: I still won’t take the job.
But I’ll absolutely take the call.
Footnotes
-
Both numbers from
git log --author, counted this week. The 1,110 spans every branch; the 101 are the squashed survivors onmain. An earlier draft of this post said “112,” which I’m told is what I get for counting before fetching. ↩ -
The auto-scaling started life on the identity-verification screens, where legal names come in every length, and then turned out to be exactly what a currency field needs. The best components keep getting rehired. ↩
-
The bug I remember most fondly: the swipe-to-buy gesture kept firing when your thumb started its slide inside a decorative gradient. The fix is commit
f56c84ec3, “feat: prevent swipe-to-buy gesture from triggering in gradient zone,” January 15th, 2026 — followed the same day by “add defensive guards for gradient zone gesture handling,” because glory has a long tail and it is made of edge cases. ↩ -
Better than equity: for a stretch of version one, the app’s
Package.swiftpulled five of my open-source packages — union-buttons, union-toast, union-shake, union-gradients, union-materials. And for one week in November 2025, the chat tab ran on union-chat, the iMessage rebuild nobody wanted. It crashed, I disabled it, and the team went another way — which means even my own client work eventually told me no. The market keeps score fairly. ↩ -
Pedants: $2M times 18.2 is $36.4M, and the final terms of a raise move the number around. Somewhere past $35M my ability to feel the difference stopped responding, so “about $40 million” it is. ↩