HomeCase studiesA Location-Based Treasure Hunt and Rewards Gaming...

Case study · Helsinki, Finland

A Location-Based Treasure Hunt and Rewards Gaming Platform

Location-based entertainment and experiential marketing

A scavenger hunt is a wonderful thing to take part in and a miserable thing to run. Someone has to hide the clues, station marshals, decide whether a player really reached the spot, track who finished in what order and settle the prizes — and none of it survives to the next event. Our team built a platform that turns the whole format into software: an event-authoring studio where a hunt is designed once and reused, native mobile apps that detect arrival at a location automatically and run the game live on the map, participating local businesses placed along the route as discoverable destinations issuing redeemable offers, team play with synchronised progress, and prizes resolved automatically on completion.

Industry
Location-based entertainment and experiential marketing
Solution
A consumer gaming platform: a REST API and administrative event-authoring back office, with two fully native mobile applications — one for each platform — built around continuous positioning, mapping, in-app purchase and push notification.
Platforms
Android · iOS · Web & API
Stack
Laravel · PHP · Blade · Bootstrap · MySQL · Kotlin
Location
Helsinki, Finland · delivered remotely
Role
Engineering, with the team behind for mobile and QA

Delivered remotely for a business based in Helsinki, Finland. Names withheld by agreement.

Project Overview

Industry: Location-based entertainment and experiential marketing.

Type of solution: A consumer gaming platform: a REST API and administrative event-authoring back office, with two fully native mobile applications — one for each platform — built around continuous positioning, mapping, in-app purchase and push notification.

Business context: Physical treasure hunts work as an engagement format because they get people out of the house and into places. That is exactly why local businesses will pay to be part of one, and why brands and organisations want to host their own. The obstacle has never been demand; it has been operations. A manual hunt cannot verify that anyone reached a location, cannot rank finishers reliably, cannot prove to a sponsor that anyone walked through their door, and cannot be run twice without doing all the work twice.

General users: Players and teams; event authors and administrators who design and schedule hunts; participating businesses whose locations and offers appear inside the game; hosting organisations running private branded events; and on-call marshals who adjudicate live issues during an event.

General purpose: To make a physical, real-world game run itself — automatic location verification, sequenced clue progression, an authored content tree that can be cloned and rescheduled, sponsor visibility that is actually measurable, and rewards that resolve without anyone settling up by hand.

The Business Challenge

Proving someone actually got there. The entire premise depends on physical arrival at a coordinate. Consumer GPS is imprecise, degrades between tall buildings, behaves differently on each mobile platform and varies by handset. A radius too tight blocks honest players; too loose and there is no game. Getting this to feel fair is the product.

A hunt is a deep content tree, not a form. An event is a sequence of clues, each carrying ordered hints, map-placed destinations, associated offers, media and narration, wrapped in scheduling, reward structure and messaging. Authoring that through generic admin screens would take a day per event and nobody would do it twice.

Nothing was reusable. The same sponsor locations recur across events in a city. The same event format recurs month after month. Without reuse, every hunt is authored from nothing and the platform never gets operationally cheaper to run.

Teams have to stay in step. People play in groups, but each member carries their own device. When one member reaches a location, everyone's game has to advance at once — and every member's device has to find out immediately, without any of them ending up on a different clue from their teammates.

Finishing order decides outcomes. At a live event several teams can finish within seconds of each other, and position determines what each receives. Ordering has to be correct under that pressure, not approximately correct.

Sponsors want evidence, not exposure. A business paying to be a destination in a game does not want a logo placement. It wants to know how many people arrived and how many redeemed the offer.

Events are scheduled in local time, everywhere. Start times, reminders, countdowns and closing windows all run in the participant's local time across multiple timezones, with daylight saving moving the goalposts twice a year.

Two platforms, no shortcuts. Continuous positioning, background operation, map rendering, audio playback, foreground services and two separate store billing systems. Both clients needed deep platform integration.

When a hunt is live, problems are commercial. A participant stuck at a location with a countdown running and prizes on the line cannot wait for a support ticket. The platform needed a human escape hatch that resolves in minutes.

Our Approach

Build an authoring studio, not an admin panel. We built a staged event-builder wizard that walks an author through identity, scheduling, the clue sequence, destinations and offers, reward structure and notification copy — with reordering, media handling, cropping and per-stage saving throughout. The back office is where the product's real complexity lives, and it was treated as a product in its own right.

Make content reusable at the library level. Participating business locations and redeemable offers are authored once into shared libraries and attached to any number of events. A destination added for one hunt is available to every hunt afterwards, with its artwork, description and address intact.

Make an event a template. A complete event — every clue, hint, destination, offer and reward setting — can be cloned into a new scheduled instance. A hunt that worked becomes an asset that runs again next month rather than a one-off.

Put arrival detection on the device and authority on the server. Both clients run their own positional loop and report arrival when the player is inside a short radius of the active target. The server decides everything that follows: which clue comes next, what the team's shared state becomes, what the participant has earned, and where they placed. The device reports; the server rules.

Align the player, the sponsor and the platform in one mechanic. Hints — the thing a stuck player wants most — can either be earned by physically discovering a participating business's location, or purchased outright. That single design choice means the player gets help, the sponsor gets a real visit they can count, and the platform has a currency worth buying.

Synchronise teams explicitly and notify immediately. Progress is written across every team member's record as a single operation, with push notifications fanned out to the rest of the team so everyone's device reflects the same state within seconds of one member arriving.

Design a human back into an automated game. Participants who believe they have arrived but have not been credited can raise a request that carries their position and measured distance. It alerts an on-call marshal roster by SMS, and an approval replays the normal completion path exactly — so an adjudicated arrival is indistinguishable from an organic one in progress, notifications and reward eligibility.

Let each brand sound like itself. Event authors can supply their own push notification copy with placeholder substitution, and the platform falls back to sensible defaults when they do not.

Ship server changes without breaking installed apps. The API identifies the calling app's version and build and gates behaviour accordingly, so new server capability can go live while older releases still in the field keep working.

Go native on both platforms. Given continuous positioning, foreground and background operation, map rendering, audio and two different store billing systems, each client was built natively rather than through a shared abstraction.

The Solution

Event authoring studio. A staged builder covering event identity, category, difficulty, scheduling with explicit timezone handling, duration limits, imagery and audio, the full clue sequence, destinations, offers, reward structure and notification copy — with drag-reordering, cropping and media management throughout.

Reusable destination and offer libraries. Participating business locations and redeemable offers exist as shared records with their own artwork, descriptions, addresses and validity, attachable to any event.

Event cloning. An entire event content tree replicated into a new scheduled instance in a single action.

Public, private and paid events. Open events discoverable by anyone nearby; private events unlocked by a PIN for a specific audience; and paid events purchased through the platform store.

Location-aware discovery. Players see events within their chosen distance radius, filtered by their difficulty preference and by whether an event is upcoming, running or open, with search.

The live hunt. A map-centred play experience with custom styling, the player's live position, the active clue, discovered destinations, countdown timers, audio narration with transport controls, image galleries and screen-idle suppression so the display stays awake while playing.

Automatic arrival detection. Each client continuously evaluates its position against the active clue and nearby destinations and reports arrival automatically when the player is close enough — no button to press, no code to type.

Sequenced clue progression. The server determines the next clue in sequence and records progression, so the route cannot be skipped or reordered from the client.

Hints, earned or purchased. Hints attached to a clue unlock in order. They can be obtained by physically discovering a participating destination or by spending credits, with a full history the player can review afterwards.

Rewards wallet. Offers collected during play are held in the player's wallet with validity and redemption state, and are redeemed from within the app.

Team play. Teams can be created, joined, switched and left, with a captain. Progress, hint spending, leaderboard position and rewards are all team-aware, and every member is notified as the team advances.

Leaderboards. A finishing-order leaderboard for completed events and a live progress leaderboard computed from clue completion during play.

Prizes on completion. A reward structure configured per event resolves automatically when a participant or team completes it, with the outcome recorded, communicated and tracked through to claim.

Participant support with human adjudication. Stuck requests routed to an on-call marshal roster by SMS, with administrative approval that replays the normal completion path.

Notifications. Push delivery to both platforms with a multi-device registry per player, retry on transient failure, automatic pruning of dead tokens, per-event message copy, and administrative broadcast to everyone, to one event's participants, or to an individual.

Sponsor reporting. Destination visits and offer redemptions tracked and reportable by destination and by event.

Administrative platform. Event, taxonomy, business, participant, team and winner management; prize and purchase reporting; role and permission control with a hierarchy; a database-driven navigation builder; a media library; and email templating.

Key Features

Automatic arrival detection Continuous positional evaluation against the active clue and nearby destinations, so reaching a location is recognised automatically rather than self-reported.

Staged event-authoring studio A multi-step builder for the full event tree — clues, ordered hints, destinations, offers, reward structure, scheduling, media and messaging — with reordering and per-stage saving.

Reusable destination and offer libraries Participating business locations and redeemable offers authored once and attached to any event, so operational cost falls with every hunt rather than repeating.

One-action event cloning A complete event content tree replicated into a new scheduled instance, turning a successful hunt into a repeatable format.

Team-synchronised gameplay Shared team progress advanced by whichever member arrives first, written across all member records and pushed to every teammate's device immediately.

Dual-path hint economy Hints earned by discovering participating destinations or purchased with credits — aligning the player's need for help with the sponsor's need for verified visits.

Human adjudication built into an automated game Stuck requests carrying position and distance, escalated to an on-call marshal roster by SMS, with approval that replays the standard completion path rather than patching state.

Reward wallet and lifecycle Collected offers and won prizes held with validity, redemption and claim state, with unclaimed value ageing out on a managed schedule rather than accumulating indefinitely.

Private and paid event modes PIN-gated private events for a specific audience and paid entry through platform in-app purchase, alongside open public events.

Sponsor visit and redemption reporting Destination visits and offer redemptions tracked per destination and per event, giving participating businesses measurable outcomes rather than impressions.

Technical Architecture

Mobile clients. Two fully native applications built independently against a shared API contract. Each runs its own positional loop against the platform's location services, renders the live hunt on a native map with custom styling, plays audio narration, handles in-app purchase through its platform store, receives push notifications, and reports crashes. Android additionally runs a foreground location service for the duration of a hunt; iOS uses background modes and significant-change monitoring.

API layer. A token-authenticated REST API over OAuth2 bearer tokens, with controllers partitioned into a player-facing tree and an administrative tree. The API parses the calling app's version and build and gates behaviour so releases already in the field continue to work against a newer server.

Game state layer. The server owns clue sequencing, team state fan-out, credit balances, offer issuance and claim rules, finishing order and reward resolution. Client-reported arrival is an input to that state machine, never a substitute for it.

Authoring back office. A server-rendered administrative application built on an open-source component framework, providing the staged event builder, taxonomy and library management, participant and team views, reporting grids, media handling with cropping, role and permission control and a database-driven navigation model.

Notification layer. Push delivered through a managed messaging service using service-account-signed requests, with a multi-device token registry per player, retry on transient failure and automatic pruning of permanently invalid tokens. SMS escalation runs through a managed telephony provider against a maintained recipient roster.

Scheduled processing. Console commands on short intervals handle event lifecycle transitions, reminders, participation counts and reward lifecycle ageing, keeping this work off the request path.

Media layer. Uploaded imagery, artwork and audio are pushed to cloud object storage and served from there, keeping the application tier free of file state.

Data layer. A relational database covering events, clue and hint trees, destinations, offers, reward and prize records, teams and membership, participation and progress, visit and redemption tracking, purchase records and request logs — evolved through a long migration history spanning several years of continuous development.

Flow: Native mobile client (positional loop) → Token-authenticated API → Server-side game state and sequencing → Relational database → Scheduled lifecycle processing → Push and SMS notification → Administrative authoring studio and sponsor reporting

Technology Stack

Category Technology
Backend language PHP
Backend framework Laravel
Database MySQL with Doctrine DBAL, long migration history
API authentication OAuth2 bearer tokens (Laravel Passport)
Authorisation Role and permission management with hierarchy
Admin UI Blade with an open-source Bootstrap component framework, built via webpack; charting and image cropping libraries; server-side data grids
Object storage Google Cloud Storage
Push notifications Firebase Cloud Messaging (service-account signed)
SMS Twilio
Email SMTP transactional mail with database-managed templates
Scheduled work Laravel console commands on short intervals
CI/CD CircleCI pipeline driving Capistrano deployment, migrations and cache management; automated style checks; PHPUnit
Android language Kotlin with ViewBinding
Android mapping & location Google Maps SDK with custom styling; fused location provider; foreground location service
Android commerce & services Google Play Billing; Firebase Messaging and Crashlytics
Android supporting libraries Image loading and caching, JSON serialisation, HTTP logging, media playback
iOS language Swift with UIKit and storyboards
iOS mapping & location MapKit and CoreLocation with background modes and significant-change monitoring
iOS commerce & services StoreKit in-app purchase; Firebase Messaging and Crashlytics
iOS supporting libraries Alamofire networking, image loading and caching, audio playback, keyboard and connectivity utilities
Authentication options Email, social sign-in and platform-native sign-in

Technical Challenges & Solutions

Challenge Our Approach
Determining reliably that a player has physically reached a location, given consumer GPS accuracy Continuous positional evaluation on the device against the active target within a short radius, reported to the server, which retains sole authority over progression, team state, earned rewards and finishing order — so responsiveness comes from the client while correctness stays server-side.
Keeping a team's game state consistent across several devices Team progress written across all member records as one operation when any member arrives, with push notifications fanned out to the rest of the team immediately, so no member's device diverges onto a different clue.
Authoring an event that is a deep tree of clues, hints, destinations, offers, media and rules A staged authoring wizard with per-stage saving, drag-reordering, media handling and cropping — plus shared libraries for destinations and offers so recurring content is attached rather than re-created.
Making a successful event repeatable without re-authoring it One-action cloning of the complete event tree into a new scheduled instance, turning a hunt into a reusable format rather than a one-off deliverable.
Giving participating businesses evidence rather than exposure Destination visits and offer redemptions recorded as tracked events and surfaced in reporting filtered by destination and by event.
Scheduling events in local time across multiple timezones with daylight saving Explicit per-event timezone assignment with daylight-saving-aware conversion applied consistently across scheduling, reminders, countdowns and closing windows.
Supporting two independently released native apps against one evolving API Client version and build identified from the request and used to gate server behaviour, so new capability ships without breaking releases already installed in the field.
A participant blocked mid-event with a countdown running and prizes at stake A stuck-request flow carrying position and measured distance, escalated to an on-call marshal roster by SMS, with administrative approval that replays the normal completion path so the outcome is identical to an organic arrival.
Push delivery to a device registry that decays over time Multi-device token registry per player, retry with delay on transient delivery failures, and automatic pruning of permanently invalid tokens together with their device association.

Security & Reliability

Token-based authentication. OAuth2 bearer tokens for all player API access, with registration, social and platform-native sign-in, password recovery and account deletion flows.

Role-based administration. The authoring back office is authenticated and role-gated, with a permission model and role hierarchy determining what each administrative user can reach, and a database-driven navigation model that reflects those permissions.

Server-side game authority. Clue sequencing, team state, credit balances, offer issuance, claim eligibility and finishing order are all resolved server-side. The client reports observations; it does not decide outcomes.

Controlled event access. Private events are gated behind a PIN, and paid events behind a completed platform purchase, so access to an event's content is an explicit grant.

Reward integrity rules. One-claim-per-player enforcement on offers, explicit lifecycle states for collected rewards and won prizes, and scheduled ageing of unclaimed value so entitlement is bounded and auditable.

Auditable play history. Participation, progress, hint usage, destination visits, offer redemptions and prize outcomes are all retained, so a disputed result during a timed event can be reconstructed from record rather than recollection.

Content safety during live events. Game content uses soft deletion and explicit removal flags, so editing or retiring content does not corrupt an event that is currently running or already completed.

Crash and delivery monitoring. Crash reporting on both mobile platforms, request logging with device and client version capture on the server, and notification delivery outcomes recorded rather than assumed.

Human escalation path. A marshal roster and an adjudication workflow provide a reliable resolution route for live-event failures that automation cannot cover.

Scalability & Performance

Bounded discovery queries. Event discovery is constrained by distance radius, difficulty preference and lifecycle state at the database level, so a player never receives the full catalogue regardless of how large it grows.

Media served from object storage. All imagery, artwork and audio are held in cloud object storage and delivered from there, keeping the application tier stateless and free of file-serving load.

Client-side caching on both platforms. Image loading and caching libraries on each client keep repeated map artwork, destination icons and event imagery off the network during play.

Scheduled batch processing. Event lifecycle transitions, reminders, participation counts and reward ageing all run as scheduled commands rather than on the request path, so background work never competes with live gameplay.

Delegated notification infrastructure. Push delivery runs through a managed messaging service, scaling with participant volume without the business operating messaging infrastructure.

Positional polling rather than streaming. Clients evaluate position locally on an interval and call the API only when something has actually happened, so a live event with many concurrent participants generates traffic proportional to progress rather than to time.

Stateless application tier. Token authentication and externalised media keep application instances free of local state and horizontally replaceable.

Sound and screen behaviour tuned for play. Audio feedback, idle-timer suppression and foreground service handling are managed per platform so a hunt survives a long session on a real handset.

Business Outcomes

  • A physical game runs itself. Arrival is detected automatically, progression is sequenced by the platform, and results resolve on completion — removing the marshalling, adjudication and manual settlement that made the format unscalable.
  • Events became reusable assets. Cloning an authored event and reusing shared destination and offer libraries means each hunt costs less to produce than the one before it.
  • Participating businesses get measurable outcomes, with destination visits and offer redemptions tracked and reportable rather than inferred from impressions.
  • Player help and sponsor value come from the same mechanic, because hints can be earned by physically discovering a participating destination as well as purchased.
  • Groups can play together properly, with team progress synchronised across devices and every member notified as the team advances.
  • Events can be public, private or paid, so the same platform serves open consumer hunts, branded private events and paid entry without separate builds.
  • Live-event failures have a resolution path, with stuck participants escalated to a marshal within minutes and adjudicated outcomes indistinguishable from organic ones.
  • Every result is reconstructable, with participation, progress, rewards and outcomes retained as record for a format where prizes make disputes inevitable.

Why it worked

Location-based games look like map applications and are not. A mapping app that is slightly wrong is mildly annoying; a game that is slightly wrong tells an honest player standing in exactly the right place that they have not arrived — while a prize goes to someone else and a countdown runs down. The engineering problem is not drawing the map. It is deciding what to trust, how quickly to respond, and what to do when the physical world does not cooperate.

Our team built for that reality. We put detection on the device for responsiveness and kept authority on the server for correctness, because those are different problems with different right answers. We modelled team play as genuinely shared state rather than several parallel single-player games, because that is what people actually do. We designed a human adjudication path into an automated system and made its outcome identical to the automated one, because at a live event with prizes, "the system says no" is not an acceptable final answer. And we treated the authoring studio as a product rather than an afterthought, with reusable libraries and event cloning, because a platform that makes every event as expensive as the first one is not a platform.

Our teams work across Laravel and modern PHP, REST API design for long-lived mobile contracts, native Android and native iOS development with deep location, mapping, background execution and store billing integration, push and SMS infrastructure, and administrative platforms complex enough to be products in their own right.

Final Summary

A real-world treasure hunt is a genuinely good experience and a genuinely bad operation. Clues have to be hidden, marshals stationed, arrivals adjudicated, finishing order tracked and prizes settled — and when it is over, none of it can be reused. Sponsors who paid to be part of it have no idea whether anyone actually came.

Our team built a platform that turns the format into software. Event authors design a hunt in a staged studio — the clue sequence, the ordered hints, the destinations along the route, the offers those destinations issue, the reward structure, the scheduling and the messaging — drawing on shared libraries of participating locations and offers so recurring content is attached rather than rebuilt. A finished event can be cloned into a new scheduled instance in one action, which is what turns a good hunt into a format that runs again.

On the ground, two native mobile applications run the game live: a map-centred play experience with countdown timers, audio narration and continuous positioning that recognises arrival automatically, with the server retaining authority over what comes next, what the team's shared state becomes, what the player has earned and where they placed. Teams stay in step because progress is written across every member and pushed to every device. Hints can be earned by physically discovering a participating business or purchased outright — one mechanic serving the player, the sponsor and the platform at once. Rewards land in a wallet with real validity and redemption rules, prizes resolve on completion, and destination visits and redemptions are tracked so a sponsoring business gets a number rather than an impression.

And when the physical world misbehaves — as it does, in doorways and underpasses and dense city blocks — a participant can escalate, a marshal is alerted by SMS, and an approved adjudication replays the normal completion path exactly. That last detail is the one that matters most: it is the difference between a game people trust and a game people argue with.

01 — Questions

asked about this kind of project

How do you make GPS-based gameplay feel fair?

By separating responsiveness from authority. The device evaluates its own position continuously so arrival is recognised instantly, but the server decides what that arrival means — which target comes next, what the team's state becomes, what has been earned and where the player placed. Tuning the acceptance radius is then a product decision rather than a technical one: too tight and honest players in a dense urban block are blocked, too loose and there is no game. Anything with a real reward attached also needs server-side validation of what the client reports.

How do you keep multiplayer state consistent when everyone has their own phone?

Treat team progress as one shared record advanced by whichever member acts first, written across all members in a single operation, and pushed immediately to the rest of the team. The failure mode to design against is divergence — one member's app believing the team is further along than another's. That is far more damaging to trust than a few seconds of latency, so the fan-out and the notification are part of the same operation rather than an afterthought.

What makes a content authoring tool worth building properly?

Whether the content is a tree or a form. A record with twenty fields belongs in a generic admin screen. An event that is a sequence of steps, each with ordered sub-content, attached destinations, offers, media and rules, does not — it needs a staged builder with reordering and per-stage saving, or authoring takes a day and nobody does it twice. The test is simple: if producing the second one costs the same as the first, the tool has failed.

How do you make a location-based platform cheaper to run over time?

Reusable libraries and cloning. Locations recur across events in the same city, and formats recur month after month. If both are first-class reusable records rather than per-event content, each new event is assembled from existing pieces instead of authored from nothing. This is an operational design decision that looks unremarkable in a demo and determines whether the business is viable at scale.

Should a location-heavy app be built natively or cross-platform?

When the app needs continuous positioning, foreground services, background execution, native map rendering, audio playback and platform store billing, native is defensible — those are exactly the areas where cross-platform abstractions are thinnest and platform behaviour diverges most. The cost is two codebases and two release cycles, which means the API contract has to be stable and versioned deliberately.

How do you ship server changes without breaking apps already installed?

Identify the calling app's version and build from the request and gate behaviour accordingly. Mobile users do not upgrade in step, and store review adds days between a server change and a client change reaching anyone. Version-aware branching on the server lets new capability go live immediately while older releases in the field keep working unchanged.

Why build a manual override into an automated system?

Because the physical world does not cooperate on demand. GPS degrades in doorways, underpasses and dense city blocks, and at a live event with a countdown and prizes at stake, an honest player blocked by signal drift is a commercial problem within minutes. The important detail is that an adjudicated outcome should replay the normal path rather than patching state directly — otherwise the override quietly creates records that behave differently everywhere downstream.

How do you give sponsors of a location-based experience something measurable?

Track arrival and redemption as first-class events, not impressions. A business paying to be a destination in a game wants to know how many people reached its premises and how many used the offer. Once those are recorded per destination and per event, the sponsorship conversation changes from exposure to outcomes — and the mechanic that drives the visit can be designed to benefit the player at the same time.

03 — Similar project?

describe what is different about yours

Build yours.

Tell me what exists, what you need and the deadline. Fixed price for a defined scope, or hourly from $10 with a written estimate first.

Ahmedabad, India · IST (UTC+5:30) · --:-- IST · Mon–Fri 09:00–18:00 IST · US & EU overlap daily

No newsletter, no CRM. Just a reply.