EpicQuest
A treasure hunt hidden inside a film series — watch, decode, win
The companion game to EpicFlics' short-film series. Every episode hides a code somewhere in its frames; players find it, race the clock to decrypt it, unlock the next episode, and finally crack the Vault for a place on the trailer waitlist and a shot at the grand prize.
- Client
- EpicFlics Studios
- Field
- Mobile Game & Interactive Film
- Stack
- React Native, Expo, TypeScript, Firebase, YouTube API

Overview
A treasure hunt hidden inside a film series
The problem
Short films compete with an endless scroll. EpicFlics wanted people to actually watch, closely and more than once, to come back for every episode, and to follow the channel, all without the experience feeling like homework.
What I built
EpicQuest turns each episode into a puzzle. A code is hidden somewhere in the footage; players find it, decrypt the episode, and work down a ten-stop map to the Vault and a live race for the grand prize. I built the iOS and Android game, its Firebase backend and the studio's website.
The loop
Watch. Decode. Unlock. Win.

01
Watch
Each episode plays in the app from the studio's YouTube channel, with its runtime, XP reward and difficulty up front.

02
Decode
Somewhere in the footage is a code. Players type it into a segmented input that grows one cell at a time.

03
Unlock
A correct code unlocks the next stop on the zone map, from Episode 1 down the trail to Episode 10.

04
Win
All ten keys together open the Vault, a waitlist ticket, the trailer drop and a race for the grand prize.
Every screen
The whole app, screen by screen.
Captured from a Release build in the iOS Simulator, playing as a brand-new guest, so the Vault is still sealed and the badges are still locked.
Getting in
Email, Google, Apple or guest. A guest can play straight away and keep their progress when they sign up later.
The hunt
The zone map, the mission console, comments under every episode and the server's answer to every guess.
Player status
Progress, badges, XP and gems, the winners, and a how-to-play guide that sits behind the settings.
Difficulty
A wrong answer sounds different at every level.
The first clues are gentle and they get much harder towards the Vault. The feedback changes with them, in colour and in tone, so a miss on Episode 1 encourages and a miss on Episode 10 warns.
Level 1 · Easy
“Watch the video again very closely. The clue is hiding in plain sight.”
Level 5 · Intermediate
“Wrong code. The clue is trickier than it looks.”
Level 10 · Elite
“Access denied. The Elite sequence is deeply hidden.”
Trailer · Legendary
“Cosmic shield active. The clue is hidden in a single frame.”
Fair play
Real prizes need a game that can’t be cheated.
The winners get real rewards, so the backend assumes someone will try to game it. 15 Firebase Cloud Functions own every rule; the app only ever asks.
- 01
The answers never ship
Every code lives on the server. The app sends a guess to a Cloud Function and gets back right or wrong. Unlocking an episode, awarding XP and gems, and placing a player on the leaderboard all happen there too, so there is nothing in the app bundle to dig out.
- 02
Guessing is rate-limited
Ten attempts a minute and a hundred an hour per player, and a wrong code locks that episode for 60 seconds. The countdown shows in the app, but the server is what enforces it, so brute-forcing a short code is not worth trying.
- 03
You have to watch the trailer
The final challenge hides a letter inside the trailer. Answers sent before the release time are refused. The app records when the player starts the video, and anyone who answers without that record, or less than 90 seconds in, is flagged rather than ranked.
- 04
Spoilers moderate themselves
Every episode has a comment thread. When a comment is created, a Firestore trigger checks it against that episode's code and hides it automatically if it gives the answer away, so the discussion stays useful without a moderator watching it.
- 05
Seasons are data, not releases
Episode timers, codes, difficulty, the Vault combination and the trailer date sit in per-season config in Firestore, with three seasons set up so far. Episodes are matched to YouTube uploads by title, so a new season is a content task rather than an app update.
- 06
Guests keep their progress
Anyone can play as a guest on a Firebase anonymous account. Signing up with email, Google or Apple merges their progress, XP and gems into the permanent account, and deleting an account removes the profile, attempt logs and leaderboard entries with it.

One deliberately wrong guess from the simulator: the server rejects it and the episode locks, with the countdown running in the app.
Badges
Ten reasons to come back tomorrow.
- First Clue
- Solved the first mystery of the quest
- Gold Hunter
- Found 10 hidden gold chests
- Map Master
- Explored every zone on the map
- Binge Watcher
- Watched 5 videos
- Elite Member
- Subscribed to the official channel
- Lore Seeker
- Watched the secret lore videos
- Daily Explorer
- Three days in a row
- Loyal Hunter
- Seven days in a row
- Night Owl
- Watched between midnight and 4 AM
- Early Bird
- Watched before 6 AM
The website
epicflics.com, the studio’s front door.
The site explains the idea in three steps and shows the trailers, the prizes in the Treasure Chest and the travel reports, then sends people to the app. Its Join Treasure Hunt page is a web sign-in to the same hunt, for anyone not on a phone.






By the numbers
- Episodes to decode each season, ending at the Vault
- 10Episodes to decode each season, ending at the Vault
- Cloud Functions running validation, leaderboards and anti-cheat
- 15Cloud Functions running validation, leaderboards and anti-cheat
- Hunter masks to choose from
- 26Hunter masks to choose from
- Lockout after a wrong code, enforced by the server
- 60sLockout after a wrong code, enforced by the server
How it's built
- Client
- Expo SDK 54 and React Native 0.81 with Expo Router, Reanimated 4 and the React Compiler, shipped to iOS and Android
- Backend
- 15 Firebase Cloud Functions (v2) that own every secret: guess validation, hints, rate limits, leaderboards, waitlist tickets and anti-cheat
- Data
- Cloud Firestore for profiles, per-episode leaderboards, winners, comments and season config; Zustand and AsyncStorage on device
- Services
- YouTube Data API v3 for episodes and subscription checks, Firebase Auth with Apple, Google, email and guest sign-in
What shipped
- 01Native iOS and Android game with a zone map, a mission console, the Vault and a live speed leaderboard
- 02Server-authoritative guessing: codes never reach the device, with per-minute and per-hour rate limits and a 60-second lockout
- 03Trailer-drop anti-cheat that only accepts answers from players who have actually watched for long enough
- 04Comment threads under every episode, auto-moderated when someone posts the answer
- 05Guest play that migrates to a permanent account without losing progress
- 06epicflics.com, the studio's site for the films, prizes and the web version of the hunt
Next project
Cooker→Food & Grocery Ecosystem with 4 Inter-Connected Apps













