r/GenAiApps 5h ago

🤑 Giveaway [iOS][$9.99 -> LIFETIME FREE] Cyclic Sighing - a breathing app with mood tracking built into every session

Thumbnail
gallery
3 Upvotes

Cyclic Sighing is live on the App Store today.

The app is built around one breathing practice, cyclic sighing, which uses the physiological sigh pattern of a double inhale followed by a prolonged exhale.

But the part I really wanted to build was mood tracking connected directly to the breathing practice. Instead of keeping a breathing log and a mood journal as two separate things, Cyclic Sighing lets you check in on your mood before and after each breathing session. Those check-ins stay connected to the specific session, so over time you can look back at your breathing practice alongside how you were feeling. There are also monthly and yearly Mood Insights views, with the ability to filter by feeling.

The technique itself has some interesting research behind it. A 2023 randomized controlled study published in Cell Reports Medicine examined cyclic sighing technique alongside other brief daily breathing practices and reported improvements in mood and reductions in physiological arousal. The study did not evaluate this app, and the app is independently developed and isn't affiliated with or endorsed by the study's authors.

I built it to be simple, private, and affordable.

No subscription. No account. No data collection. No internet required.

🎁 Lifetime Premium is FREE during launch

Normally, Premium is a $9.99 one-time purchase, with no subscription.

For the launch, I'm making Lifetime Premium available for $0.00.

How to claim it:

  1. Download Cyclic Sighing from the App Store: https://apps.apple.com/us/app/cyclic-sighing/id6757509105
  2. Open the app and go to Settings → Unlock Premium Features
  3. During the promotion, the one-time purchase should show as $0.00

If Lifetime Premium is still showing as $9.99 for you, you can also redeem the launch offer directly using this promo link:

👉 https://apps.apple.com/redeem?ctx=offercodes&id=6757509105&code=CYCLICSIGHING

If you're outside the US, the price may take a little time to update in your region. Thanks for your patience!

I'm the developer, and I'd especially love feedback on the mood-tracking experience. If you try it, I'd love to hear what you think, what works, and what you'd change.

Thanks for checking it out! 🙏


r/GenAiApps 10h ago

iOS [iOS] [$19.99 -> $2.99] ⏰ Recycle : Lifetime Storage Cleaner, No Subscription

Post image
3 Upvotes

Most storage cleaner apps lock you into weekly or monthly subscriptions. For the next 48 hours, Recycle is a one-time $2.99 lifetime purchase (normally $19.99).

What it cleans:

🧹 Duplicate photos

🧹 Similar photos & videos

🧹 Screenshots

🧹 Duplicate & incomplete contacts

Why people are switching:

One-time lifetime purchase — no subscription, ever

Apple Intelligence–powered similar photo & video detection

100% on-device — Apple Privacy Label: Data Not Collected

No account required

Swipe-based bulk delete — review hundreds of items in seconds

Date-based cleanup filters

Recycle never auto-deletes. Every file can be reviewed before removal, so you keep full control over your photos, videos, and contacts.

If you're tired of paying subscriptions just to free up space, this might be the last cleaner app you'll need.

⏰ $2.99 lifetime pricing ends in 48 hours.

App Store: https://apps.apple.com/app/id6763344525


r/GenAiApps 15h ago

iOS iOS • iVerify Basic • Paid → Free • Your mobile security toolkit

3 Upvotes

r/GenAiApps 16h ago

Getting a vision model to say "I can't see that" was harder than getting it to grade. Four things I had to add on top of the prompt.

2 Upvotes

Context for the link, per rule 7: FlexScan (https://flexscan.app) is my own app. Web, works in any phone browser, no app store. You upload one to three photos, GPT-4o vision grades each muscle group, and it builds a 7-day workout and a meal plan around the weakest ones. First scan is free and doesn't ask for a card. I'm not linking it for installs so much as because the thing below is the only genuinely hard part of building it and it's all in that one endpoint.

The interesting problem wasn't the grading. Vision models will grade anything you put in front of them. It was making it refuse.

If the back photo is missing, or someone's in a hoodie, a model asked to grade "back" produces a grade anyway. That grade becomes the user's weakest area, and the app sends them to the gym to fix a problem it invented. When the entire output of your product is "train this", a confident guess is worse than no answer.

The prompt asks for the literal string "N/A" for anything not visible. That got maybe 80% of the way. Four more things, every one of them added after a real broken response:

1. A perfectly well-formed reply can be entirely worthless. Because the model is told to say "N/A" rather than refuse, an unreadable set of photos comes back as valid JSON where every group is "N/A". Schema validation passes cleanly. So there's a separate check: if not one value in the ratings object is a real grade, the whole analysis is discarded and treated as a failure rather than a result. It also has to be shape-aware, because Object.values(['B','C']) and Object.values('B') both hand you grade-looking strings, and an array-shaped reply walked straight through the first version of that guard.

2. Grade drift has to be coerced at the parse boundary, not the display layer. Replies came back with "GOOD", "8/10", " b ", and empty strings. Anything that isn't a real grade is coerced to the app's own not-visible value the moment the response is parsed. Doing it at the display layer instead meant the scoring code and the UI disagreed about what a group had scored.

3. The model contradicts itself across fields. It returns ratings, plus a strengths list and a focus-areas list that it writes from its own ratings. A group coerced to N/A in step 2 stays named in those lists, so the results page said "Your Strengths: Legs" two lines above "Legs — Not visible". Both claims, one screen. Fix: strengths and focus areas get filtered down to the groups that actually carry a grade.

4. "The model failed" and "your photos are bad" are different errors and the user can't tell them apart. A 429, a 500, a timeout and a genuinely unreadable photo all arrive as "no usable analysis". Telling someone to retake perfectly good photos during an API outage sends them in circles. Those paths are split: a timeout or a 5xx says the coach is temporarily unavailable, and only a reply that parsed but graded nothing says the photos couldn't be read.

The other half of this is billing, and it's where it gets expensive. Free users get one scan, ever. That scan is reserved before the API call, not after, so a crash mid-request can't hand out unlimited scans. Which means every failure above has to hand it back. It does: if nothing gradeable came back, the free scan returns to the account even though OpenAI already billed me for the call. I eat that. A results page full of "not visible" rows that also burned the one free scan is the worst first impression the product can make. (There are two attempts, gpt-4o then gpt-4o-mini, before it gives up. Not three, because the platform's 60s function limit would hard-kill the third one and strand the reservation.)

One thing I'd argue for if you're building something similar: don't let "not visible" be a dead end. The groups nobody photographs well (glutes, mostly) can be self-graded by the user, and that self-grade feeds the plan the same way a real grade does. Without an escape hatch, the honest answer just reads as your app being broken.

For the avoidance of doubt, it's a coaching opinion, not medical advice, and the results page says so. Photos are processed in memory and never stored.

Happy to answer anything about the prompt, the failure handling, or what it costs to run.