Inspiration

Two kinds of forgetting, and nobody was solving the second one. You enter an Instagram giveaway and never hear how it ended — that one is well known. The other: the ice-cream-stick campaign, the bottle-cap promotion, the supermarket receipt draw. You have to keep something to claim the prize, and by the time the result comes you have thrown it away or cannot remember which drawer it is in. You won and still got nothing.

The giveaway apps on the store serve the organiser (winner pickers), the hunter (giveaway directories) or the brand. None of them serve the person who entered. Yonca does — and, since 1.1, it also runs the draw for the person organising one.

What it does

Track what you entered. Add a giveaway by pasting a link or picking the post's screenshot — the app reads the text and fills in the form (brand, prize, result date, steps). Every entry has a participation method — social post, product code, receipt/cap, registration, in-store — because the method decides what matters: for a social giveaway only the date; for a code campaign, the thing you must keep.

Keep what you need to keep. "Magnum sticks → kitchen drawer." The app tracks it as a checklist and warns you if the result day is coming and you never marked the items as put away.

Four reminders, all local: items not yet put away · the day before the entry deadline (only if you have not entered yet) · result day, listing what you have to present and where it is · the day after, "did you win?", pointing at where the result is announced. Mark Won / Lost / Remind tomorrow straight from the notification.

See your luck. Entries, wins, win rate, entry rights accumulated, prize value won and chased, giveaways at risk.

Run a draw (1.1). Paste a list — Instagram comments, a WhatsApp export, an Excel column; lines, commas and semicolons all work, @ handles are cleaned, duplicates optionally counted once. Choose winners and backups, watch the reveal, share a 4:5 result card or plain text. The result is decided by the device's cryptographic random generator before the animation starts, so it cannot be nudged.

No account, no server. Data stays on the phone.

How I built it

Native SwiftUI on iOS 17+, SwiftData for storage, UserNotifications for the four reminder types, Vision for reading giveaway posts from screenshots, ImageRenderer for the share card, SystemRandomNumberGenerator for the draw. Roughly 40 Swift files, one target.

Monetization — RevenueCat. Launched free on 26 Aug 2026; 1.1 adds Yonca Pro. One entitlement (pro), three products: monthly, annual with a 7-day free trial, and a lifetime non-consumable. ProStore wraps the SDK and the app asks one question; if the key is missing the store falls back to StoreKit 2 so a misconfiguration never locks anyone out. The free tier is generous where the habit forms — three tracked giveaways and one draw — and the paywall opens at the fourth tracked giveaway or the second draw, with a headline that says which wall you hit. Existing entries are never locked; only adding asks for Pro. The draw counter lives outside the database so deleting a draw does not refund the free one.

Turkish-first. The app, the templates (Magnum, Coca-Cola caps, market receipts…) and the copy are written for the Turkish giveaway culture, which is enormous and entirely underserved on iOS. English and other locales are the next step.

Challenges

  • Reading a post is not parsing a post. Giveaway captions are chaos — emoji bullets, dates in three formats, "results on Friday". Vision gives text; the work was a set of Turkish date and rule heuristics that fill the form and show what they filled, so the user corrects rather than types.
  • Reminders that carry state. A result-day notification that just says "result today" is useless; the one that says "bring the receipt in your wallet" is the product. Every reminder is rebuilt from the entry each time it changes.
  • A draw people trust. Picking a name is trivial; making the organiser comfortable sharing the result is not. The answer was to decide first, animate second, and put the guarantee in the footer.

What's next

English localisation, a widget for "results this week", and reading the paywall-source events to see which wall converts.

Built With

  • revenuecat
  • storekit-2
  • swift
  • swiftdata
  • swiftui
  • usernotifications
  • vision
Share this project:

Updates

Submission history