- Role: Co-founder & CTO. The app, the camera link, the backend and the website.
- When: July 2025 to now
- Team: Mostly me: about 90% of the app’s commits in its first year. Two contributors joined in 2026.
- Stack: Flutter, Dart, Swift, Kotlin, GLSL, Supabase, RevenueCat, Shopify, GitHub Actions
- Results: $1.37M from 8,925 Kickstarter backers (91× the goal) · ~12K accounts · live on the App Store and Google Play · covered by PetaPixel and The Phoblographer
The idea
Rewindpix is a digital camera with no screen. You load a roll, shoot without looking, and only see your photos when you develop the roll in the app.
The camera is the easy part to explain. The app is where the product actually lives: it is the film shelf, the darkroom and the photo album. So my job, more or less, was to make a phone feel like a darkroom, and make it reliable enough that nobody loses a roll.
Talking to a camera with no screen
The camera has no screen and no cloud. It opens its own Wi-Fi network, and the app joins it to load and unload rolls, sync the camera’s clock, fire the shutter remotely and pull finished rolls off the device.
Phones do not like this. A Wi-Fi network with no internet looks broken to them, and they quietly try to route around it. So the connection is handled natively on each platform, and roll state is tracked on both the phone and the camera, so a dropped connection never leaves a roll half-loaded.
The darkroom
Dozens of film stocks, each with its own color, layered with halation, grain, light leaks, timestamps and double exposure. A film editor lets people build and tune their own stocks.
The rule I care about most: what you see in the preview is what you get in the export. That sounds obvious. It isn’t, because the preview and the full-resolution export run on different paths, and phones have very different amounts of memory to work with. Every time an effect existed in two places, the two copies drifted apart.
So I made it a rule rather than a series of patches: one renderer decides how every effect looks, and every other code path either calls it or proves in a test that its output matches pixel for pixel. The same thinking went into speed. Developing used to take two passes, FFmpeg for the film stock and then Dart for grain and vignette, with a JPEG written to disk in between. A contributor replaced both with one native C++ engine, which I reviewed and brought to pixel parity with the preview, and I moved light leaks, timestamps and halation onto the GPU. On a Pixel 9a, a 36-photo roll of 12-megapixel images with a full recipe now develops in 14.7 seconds instead of 225: 15 times faster.
Shipping to two stores
- Releases: iOS and Android ship on their own schedules, each promoted from development to production through GitHub Actions.
- Quality: automated analysis and tests run on every change, including performance tests on full rolls of full-resolution photos.
- Backend: Supabase handles accounts, cloud sync and promo codes. RevenueCat handles subscriptions. The storefront runs on Shopify.
- Languages: the app ships in English, Chinese, Japanese and Korean.
