Spin-the-Wheel implementation in a mobile app

The giveaway mechanic seems simple, but it is the one that most often kills engagement: prizes "never drop", the interface freezes, and users leave. We build the wheel of fortune turnkey — from prize distribution logic to animation — and tune fair randomness so the mechanic retains rather than annoys. We take on the full cycle and hand over a ready module with documentation.

Development and support of all types of mobile applications:

Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • Development of a mobile application for FEEDME
    Development of a mobile application for FEEDME
    971
  • Development of a mobile application for XOOMER
    Development of a mobile application for XOOMER
    869
  • Development of a mobile application for RHL
    Development of a mobile application for RHL
    1289
  • Development of a mobile application for ZIPPY
    Development of a mobile application for ZIPPY
    1143
  • Development of a mobile application for Affhome
    Development of a mobile application for Affhome
    1076
  • Development of a mobile application for the FLAVORS company
    Development of a mobile application for the FLAVORS company
    677

Why a fortune wheel breaks app engagement

Fortune wheel development almost always starts with animation and a prize pool, but it breaks on the boring part — on what happens between the button press and the result.

The user taps "Spin," waits for the server response, and if the draw mechanic takes longer than a couple of seconds, interest drops: part of the audience closes the screen without waiting for the prize.

User engagement sags not because of boring design, but because of response latency that no one accounted for in the architecture.

The second typical cause is a session break mid-spin. The app goes to the background, the network switches from Wi-Fi to mobile, and the draw result is lost: the server has already debited the attempt, but the client never saw it.

The user returns to an empty screen and decides the mechanic is rigged. The third is randomness computed on the device: the result is predictable, prizes are distributed unevenly, and the first active participants notice it immediately.

The fourth is the lack of idempotency. A double tap on the button, a repeated request on timeout, and the user gets two spins for one attempt or, conversely, loses a win.

The fifth is a race condition between the animation and the server response: the wheel stops on a sector that doesn't match the recorded prize, and this is visible in the accrual history.

All five causes lie in the same plane — in how the exchange between the app and the backend is structured, not in the graphics.

Let's break down how this is closed: where to compute the result, how to survive a session break, and what to show the user while the response is still in transit.

What a well-designed giveaway mechanic delivers

A giveaway mechanic stops being a "holiday gimmick" and becomes a regular retention scenario when its behavior is predictable at every stage: from opening the screen to crediting the prize. Below is a checklist of effects that show up in metrics, not in a presentation.

  • Growth in repeat launches. The prize and the next chance are granted in portions with a clear timer — the user returns not "when they remember," but on schedule. The share of launches on the second and third day after install grows many times over, because the mechanic is built into the daily scenario rather than hanging as a separate button.
  • Lower share of abandoned sessions. The spin, the result, and the prize crediting happen without a screen reload and without losing state when the app is minimized. If the user leaves midway, on return they see the same result, not an empty screen — an interrupted session stops meaning a lost prize.
  • Predictable load on the backend. The result is determined on the server; the client only plays the animation. The giveaway does not create spikes during mass entry: requests are handled by a queue, and attempt limits cut off client-side manipulation.
  • Provable fairness of the random. The algorithm and the prize table are fixed in advance, and every result is logged with an attempt ID. When a disputed situation is reviewed, it is clear what came up and why — this removes complaints and protects against accusations of rigging.
  • Controllability without a release. Probabilities, prizes, and conditions are changed via server settings. Marketing adjusts the mechanic for a campaign without a new app build and without waiting for store moderation.
  • Transparent analytics. Not only spins are counted, but also the path to the prize: where users drop off, how many attempts are spent in vain, which prize motivates a return. Based on this data, the mechanic is fine-tuned rather than rebuilt from scratch.

Each point is verified at the design stage — before the mechanic goes into development. Describe your task: we'll tell you which of these effects can realistically be achieved in your app, and we'll come back with an estimate and a plan.

Implementation options: native module, web view, hybrid

The choice of approach to the fortune wheel determines not only the appearance, but also how the mechanics will survive system updates, version changes, and growing load on campaigns.

Below are three working schemes that are realistically chosen between at the start, and their limitations.

Option When it fits Limitations
Native module The wheel is a permanent mechanic in the app core, smoothness of spin animation and instant response matter Requires a separate build for each platform, edits go through the app release
Web view The campaign is temporary, the prize pool and rules change often, a quick launch without updating the app is needed Animation depends on the embedded engine, on weak devices there may be drops, access to system functions is limited
Hybrid implementation A balance is needed: logic and rules live on the server, while spin animation and tactile response are in the native layer Harder to maintain: two loops, consistent handling of the result and protection against substitution are required

The native module delivers reference-level smoothness and full access to vibration feedback, but every edit to prizes and probabilities means a new release — on both platforms, with store reviews. This is justified when the wheel is part of the product core and runs for months without changes.

A web view launches in days and updates on the server side without user involvement. The price is platform compatibility: on older devices the spin animation may stutter, and access to the camera or push is limited.

A hybrid implementation removes most of these compromises: the server returns the result, the native layer renders it, so rules change without a release, while the feel remains "native."

Let's break down which option covers your task without unnecessary rebuilding.

Stages of turnkey wheel of fortune development

Wheel of fortune development begins not with drawing sectors, but with an app audit: we look at what stack the clients are built on, how authorization is structured, whether there is a server layer for prize crediting, and how the app handles peak load.

This determines whether we embed the mechanic into the existing environment or a separate service with its own database is required.

Next, we lock down the mechanic's scheme: how many sectors, what prizes, how often each one drops, and what happens if the network breaks between the spin and the crediting.

Random setup is a separate stage: the random number generator runs on the server, not in the app, otherwise the result is spoofed on the client side within a couple of minutes.

We set probabilities using weights and verify them over a long series of runs so the distribution matches the intended one.

  1. App audit — we analyze the current architecture, integration points, and load constraints.
  2. Mechanic design — we describe the scheme: sectors, prizes, participation conditions, per-user limits.
  3. Random and rules setup — server-side generator, drop weights, protection against repeated attempts.
  4. Development and integration — we build the spin interface and connect it to the backend and the crediting system.
  5. Testing — we check scenarios of network failure, re-entry, and prize pool depletion.
  6. Release and monitoring — we roll out gradually and track the share of successful creditings.
  7. Documentation handover — we provide the description of the mechanic, settings, and instructions for your team.

The order matters: if you skip the audit and start writing the interface right away, the mechanic runs into someone else's authorization and crediting, and the rework consumes more time than the entire first stage.

The documentation handover closes the project in such a way that your team can change prizes and probabilities without us.

What the client retains after project delivery

After project delivery, you are left not with a "black box," but with a complete package that allows the application to be developed further, handed over to another team, or used to pass audits.

Everything we design as part of fortune wheel development is documented in the repository and in the documentation — with no verbal agreements or "ask the developer."

  • Prize and mechanic configurations — files with prize sets, drop weights, per-user limits, and campaign duration. They can be changed without rebuilding the application: marketing launches a new campaign by editing the configuration, not by releasing a new build.
  • Interaction diagrams — flow diagrams between the application, server, and storage: how the spin proceeds, where the result is recorded, how the prize is credited. With these, a new engineer gets up to speed on the project in days, not weeks.
  • Access policies — roles and permissions for editing prizes, viewing statistics, and manually adjusting credits. It separately describes who can intervene in prize issuance and under what conditions.
  • Prize update procedures — the sequence of actions for launching, pausing, and ending a campaign, rules for validating the configuration before publication, and rollback points.
  • API and data documentation — descriptions of methods, response formats, and the storage structure for spin results, so that exports and reporting do not depend on us.
  • Monitoring guide — which metrics to track (spin frequency, share of successful credits, per-user anomalies) and how to respond to deviations.
  • Acceptance and handover checklist — a list of checks confirming that the mechanics work in real scenarios, and the procedure for handing over access to your team.

We walk through each artifact with your specialists during handover: we show where it is stored, how it is updated, and what will happen with typical changes. Describe your task — we will come back with an estimate and a plan that already accounts for this package.

Case study: how a giveaway mechanic boosted app retention

The client — a ready-made food delivery service — came with a typical picture: installs were there, but only a small share of users remained in the app by day three. Analytics showed that people open the app, look at the menu, and leave without ordering.

We proposed embedding a giveaway mechanic as a daily reason to come back and, at the same time, to take the load off the promotions section, which was updated manually every week.

What it was like before implementation

  • Share of repeat sessions on day three — around 12%.
  • The user opened the app on average 1.4 times per week.
  • Manual updating of promotions took the client's team several hours weekly.
  • Promo codes were sent out to everyone indiscriminately; conversion to order did not exceed 4%.

What we changed

We built a wheel of fortune on React Native — a single codebase for both platforms, so the spin animation and prize logic do not diverge between builds.

Prizes, probabilities, and limits were moved into server-side configuration: the marketer changes the conditions without releasing a new version.

We added protection against abuse — binding to the device and account, a daily spin limit, and server-side result verification, so that tampering with the response on the client yields nothing.

We worked separately on response time: the spin result is confirmed by the server, but the interface does not wait for the response — the animation runs immediately, and the prize is recorded upon confirmation. This eliminated freezes on a weak connection.

What it became after

  • Share of repeat sessions on day three grew from 12% to 27%.
  • App opening frequency — from 1.4 to 2.6 times per week.
  • Share of interrupted spins (user closed the screen before the result) dropped to 3% — thanks to instant rendering.
  • Conversion of promo codes from the giveaway — 11% versus the previous 4%.
  • The marketer's manual work was reduced to editing the prize configuration.

Two months later, the client expanded the mechanic: added seasonal prize sets and tied the spin to completing a target action — an order from a certain amount. The wheel stopped being a separate promotion and became part of the main scenario for returning to the app.

How honest random differs from pseudo-random prize selection

The difference between honest random and pseudo-random prize selection lies not in the name of the algorithm, but in who determines the winner and when.

Pseudo-random selection is a deterministic sequence: the number generator is initialized with a seed, and with the same seed it produces the same result.

For a draw, this means the outcome is technically predictable: if the seed is known or reproducible, the prize can be computed in advance.

Honest random in a mobile app is built differently — the source of entropy is taken from outside, and the result is fixed before the user presses the spin button.

The key engineering point is the moment of decision-making. In weak implementations, the prize is selected at the moment the animation stops, and the code can "tweak" the sector to the desired outcome.

In a correct scheme, the result is determined on the server at the moment the spin starts, signed, and passed to the client as a commitment: the animation merely visualizes a decision already made. The user cannot influence the outcome, and the app cannot change it retroactively.

Two consequences follow from this. First — user trust: when the result cannot be recalculated or substituted, and the spin history is stored and verifiable, disputed situations are resolved by facts, not explanations.

Second — legal cleanliness: for advertising campaigns and promo mechanics, it is important to prove that prize selection was not controlled manually and did not depend on the participant's profile.

A verifiable log with a timestamp and a signature of the result is evidence that both the support service and the regulator accept.

We separate generation and visualization: the server is responsible for selecting the prize and fixing it, the client — only for the wheel animation.

Such an architecture excludes substitution of the outcome on the device and preserves honest random even when someone attempts to interfere with the app's operation.

Technical doubts and answers on the giveaway mechanics

The wheel of fortune is not an animation, but a stateful service: prize issuance, balance deduction, protection against repeat spins.

That is why, before development starts, we lock down how the mechanics will behave under load and what will happen if a failure occurs at any step.

How will the mechanics withstand peak load?

The giveaway launches in a wave — at the moment of the promotion, hundreds of users spin the wheel simultaneously. The solution is to move the spin logic to the server and calculate the result before the animation begins: the client merely plays out the landed sector.

Prize requests go through a queue, and limited reward balances are deducted atomically, so at peak no prize is issued twice and no balance goes negative. The wheel stays responsive because the client does not wait for a server response at the moment of spinning.

How are gaming the system and repeat attempts shut down?

Attempts are tied to the server-side session and the account, not to the device — reinstalling the app or clearing the cache does not grant new spins. Frequency is limited by a server-side rule: the interval between attempts and a daily limit.

The result of each spin is recorded in a log with a timestamp, so anomalies — a spike of attempts from a single account or suspiciously even intervals — are visible in the report rather than discovered after the fact.

How does the wheel integrate into an existing prize system?

The mechanics connect to an already running reward storage through a separate integration layer: the wheel requests an available prize, while issuance, expiration, and balance deduction remain in your system.

If prize funds are already managed in another service, we do not duplicate the data but read and update it based on events. This preserves a single record of rewards and does not break current processes.

What happens if a failure occurs at the moment the prize is issued?

Each spin is a separate transaction with an idempotent key: if the response is lost on the network, a repeat request returns the same result instead of deducting a second reward.

Incomplete operations go into a queue for crediting, and the user receives the prize once the connection is restored. Rolling back a single spin does not affect the others — the state of the wheel remains consistent.

If you still have questions about your mechanics — describe the task, and we will come back with an estimate and a plan.

Let's discuss the task and come back with an estimate and a plan

For the estimate to be realistic rather than an "industry average," we need to understand your current situation: what the app is built on, how user accounting is structured, and whether there's a bonus accrual mechanism.

A wheel of fortune rarely lives on its own — it almost always hooks into a points balance, order history, and prize accrual rules. The scope of work and timelines depend directly on what's already implemented.

Describe the task in free form — that's enough for us to come back with a plan. It helps to specify:

  • what platform and stack the app runs on and whether there's access to the source code;
  • how user accounts and authorization are currently set up;
  • whether there's a points, coupon, or bonus system that prizes need to be tied to;
  • what mechanic is needed: a one-time spin, daily, per purchase, or per action;
  • whether protection against abuse and repeat spins from a single device is needed;
  • how you want to manage prizes — via an admin panel, manually, or on a schedule;
  • whether there's a wheel design or help with the visual part is needed;
  • whether you're planning analytics: how many spins, which prizes drop, conversion to purchase.

After that, we'll go through the scenarios, propose the scope of work, and come back with a timeline estimate by stages. If it turns out during the discussion that part of the mechanic is already in the code, that will reduce both the scope and the time.

Discussing the task commits you to nothing: you get a work plan and an understanding of exactly what needs to be done, and you make the decision afterward.