Why we built SpinFreeze

Ninja CREAMi recipes are scattered across TikTok, Instagram, Facebook, blogs, screenshots, and group chats. Finding one is easy. Turning it into a pint you can actually make is the annoying part: type the ingredients back in, work out the macros, guess the container size, then try to remember what you changed after the first spin.

We wanted one place to find recipes, save the good ones, make changes, and keep track of what happened.

What it does

SpinFreeze is a community app for Ninja CREAMi owners. You can browse recipes, save them, make your own, keep a freezer list, and log each spin. The recipe stays with its versions and spin history, so a good result is not lost in a note somewhere.

Recipe Importer is the part we keep coming back to. Paste in a recipe link or upload a screenshot and SpinFreeze pulls out the ingredients, amounts, nutrition, and container size, then gives you a recipe you can edit before making it.

The app has a free trial for imports. Premium is for people who keep importing recipes, with a monthly import limit. RevenueCat handles the purchase, restore, and entitlement side on iOS and Android.

How we built it

SpinFreeze is a Flutter and Dart app for iOS and Android. Supabase handles auth and the app's community data. Cloudflare Workers run the import pipeline. Google Gemini turns recipe pages and screenshots into structured recipe data, and OpenAI moderation checks uploaded content. RevenueCat connects the App Store and Google Play purchase flows to one entitlement model.

We also have public recipe pages, search and discovery, a web landing page, analytics, crash reporting, and optional nutrition writes to Apple Health and Google Health Connect.

What was hard

Recipe sites are a mess. The useful part can sit under ads, stories, or a vague serving-size note. Screenshots have their own problems: they may leave out nutrition, servings, or the container size. The importer needed to get you most of the way there without acting like it was always right. The result is editable because it has to be.

We also did not want to put the useful parts of the app behind a paywall just because we could. Tracking, community, and recipe creation are useful on their own. Recipe Importer is where Premium makes sense because it saves real time when you use it repeatedly.

What we learned

The paywall works better when it shows up after the value is obvious. It should explain what you get, not interrupt the first useful thing someone tries to do. We also learned that purchase and restore state has to be boringly reliable. RevenueCat gave us one place to manage that across both platforms.

What we're proud of

This is not a paywall dropped onto a demo. It is a complete loop: find a recipe, import it from a link or screenshot, make it your own, log the spin, and unlock more imports if the feature earns its place.

Built With

Share this project:

Updates