Inspiration
I've worked in restaurants for fifteen years and I never once knew what a shift was actually worth. You walk out with cash in your pocket, you tipped out the bar and the busser, you're not sure what your hourly really was, and come April you're trying to remember a year of it.
Every tip tracker I tried was either ugly and functional or nice-looking and useless. None were both. So I built the one I wanted.
What it does
Closeout logs a shift in about ten seconds: tips, hours, sales, the tip-out you paid, the tip-out you received, the role you worked and a tag for where you worked it.
Then it tells you things you can't work out in your head: your real hourly rate once tip-outs come off, which nights actually pay, whether the patio beats the service bar, and whether you make more bartending than serving.
At the end of the year it produces a one-page tax summary you can hand to whoever does your taxes, as a PDF or a CSV.
No ads. No account. No server. Your data lives on your phone and, if you want, in your own iCloud.
How I built it
Expo / React Native with TypeScript, Drizzle over SQLite for local storage, Zustand for UI state, and RevenueCat for subscriptions. iCloud backup is a small Expo module I wrote in Swift, wired up with a config plugin.
Everything that could be pure logic is pure logic: money math, the tax summary, the paywall copy, the backup format. That's about 300 unit tests worth, and it's what let me keep moving on a Windows machine where I can't compile or run iOS at all.
Challenges
No Mac. I built an iOS app on Windows. Every native change is a 20-minute cloud build with no local feedback loop, so a typo a normal developer sees in ten seconds costs half an hour. I ended up splitting all native work into two stages: prove every testable piece in TypeScript first, then spend one build.
I deleted my own app and lost my data. Testing a reinstall, I wiped everything I'd logged. That's when it stopped being a feature request and started being the whole point. If someone loses a year of tips, that's a one-star review and they'd be right. iCloud backup ships free, on by default, not gated behind Pro. Losing people's data isn't a monetization opportunity.
I almost shipped a button that gave Pro away. A "Free/Pro" toggle I'd used during development was still sitting at the top of Settings. I caught it in a screenshot I'd taken for an unrelated reason. There was a second one hiding in the analytics screen. Now they're compiled out of production builds, and I proved it by grepping the shipped bundle rather than trusting myself.
Seven days in Waiting for Review. Submitted September 2, approved September 9 after a call to App Review, live September 10. Nothing to learn from except that the queue is real and you should submit earlier than feels necessary.
What I learned
Use your own app. Tests don't find the things using it finds. One night of real closing out turned up a time picker that annoyed me and a paywall that was too well hidden. Neither would ever have failed a test.
Never guess a number. If you log a shift as one total, Closeout won't invent a cash/card split to make the tax summary look complete. It reports it as unallocated and says why. Same rule everywhere: no price is hardcoded, the free-trial length comes from the App Store rather than a constant, and the privacy promise is scoped to what's actually true.
Being the user is an unfair advantage. Tip-out received exists because I know bartenders get tipped in. The field is called a tag, not a section, because bartenders don't have sections. That doesn't come from research.
Since launch
Closeout went live on the App Store on September 10, 2026. In the first 20 days: 13 first-time downloads, 75 impressions, 35 product page views, and a 27.8% average conversion rate, with zero dollars spent on marketing. Every install so far came from a text message, a conversation at a bar, or an App Store search. One free trial started. No revenue yet, reported exactly as it is.
What's next
Version 1.0.1 with the fixes real users are already sending me. Then QR cards for other people's server stations, a launch post in r/Serverlife once I've earned the right to make one, and after that: whatever the people in the weeds tell me they need.
Built With
- drizzle-orm
- eas
- expo.io
- ios
- react-native
- revenuecat
- sentry
- sqlite
- swift
- typescript
- zustand
Log in or sign up for Devpost to join the conversation.