GS//DIGITAL ANCHOR

DEPLOYMENTS / QUESTMODE

MOBILE APP

QuestMode

Real-life AI micro-quests. Claude generates challenges tailored to a venue, Claude Vision verifies photo proof with a witty verdict, and Supabase Realtime pushes XP to a projector-friendly leaderboard — stranger to player in under 90 seconds, and nothing on screen looks broken even when the AI fails.

CLIENT

Hackathon product

YEAR

2026

SYSTEMS

MOBILE · AI

STATUS

DEPLOYED

<90

s stranger → player → first quest

100%

demo uptime — even with AI down

1

server secret. Zero keys in the client bundle

[ THE BRIEF ]

The challenge we walked into.

A 3-minute demo window at a hackathon. The app had to onboard total strangers, run a full AI-driven loop live on a projector, and keep working even if venue wifi flaked and every API dropped. Nothing on screen was allowed to look broken. Zero manual moderation, zero visible error states, and the Anthropic key could never touch the client bundle.

[ TOPOLOGY ]

How the system is wired.

QR + Expo Gocompressed photoanon keyanon keyserver keylive XPPlayer PhoneEXPO GOProjectorLEADERBOARDExpo AppRN + ZUSTANDSupabase AuthINSTANT SESSIONSupabase StorageQUEST PHOTOSSupabase PostgresPLAYERS · QUESTSRealtime ChannelWS PUSHclaude-proxyEDGE FNClaude APIGENERATE + VISION

// SYSTEM TOPOLOGY

[ WHAT WE SHIPPED ]

Feature by feature.

[ FEATURE // ONBOARDING ]

Under ten seconds from QR to playable.

Scan the QR on the projector, land in Expo Go, pick a nickname, tap a zone. Auth email confirmations are disabled for the event so registration yields a session instantly — no inbox round trip on venue wifi. Every player is a first-class Supabase user by the second screen.

  • Metro QR on the projector
  • Tap-to-pick zones — indoor GPS lies
  • Instant sessions, no email verify
  • players.id = auth.users.id (XP follows accounts)

[ APPROACH ]

How it came together.

01RESILIENCE

Fallbacks are the primary path, not the exception.

Every AI call has a mirror in seed data. The whole app assumes network flakes and API refusals will happen mid-demo — because they always do — and hides them under a working game. The default state is 'the game is fun'; the exceptional state is 'someone in the room notices something'.

02SECURITY

One server secret, zero keys in the bundle.

The Anthropic key lives in Supabase secrets, not in the app. Edge Functions proxy every AI call — even with the client bundle in hand, you cannot extract the key. RLS on players, quests and submissions keeps the demo from being weaponised by a bored engineer at the venue.

03DELIVERY DISCIPLINE

Everything the demo needs, nothing it doesn't.

No QR-share screen, no password reset flow, no in-app rules doc. The projector holds the QR, resets happen in the dashboard, and the rules are a 3-minute spoken intro. Every polish item was cut against the demo clock — if it didn't make the loop faster or the fallback safer, it didn't ship.

04TESTABLE AI

The parser has its own test file.

Claude's JSON isn't always JSON — sometimes it's fenced, sometimes it's prefaced, sometimes it's technically valid but shaped wrong. The parser layer both edge-fn actions depend on is covered by parse.test.ts under Deno test. The AI can misbehave in known ways and the app still runs.

[ DELIVERY ]

What the build looked like.

questmode.build.log◐ BUILDING…

01

[ TECH STACK ]

What’s under the hood.

HOVER FOR ROLE

[ IMPACT ]

What changed.

QuestMode ran the full demo without a single visible error — every attendee got a quest, a verdict and their name on the projector. The resilience patterns proved under live conditions: the Anthropic API dropped once mid-demo and nobody in the room noticed. The patterns generalise: any consumer AI product needs the same discipline — schema-strict outputs, tested parsers, seed-data fallbacks and server-only keys.

[ POWERED BY ]

NEXT.JSSUPABASEVERCELSANITYSTRIPE