Quest Engine: From Brazil Pilot to a Self-Serve Growth Lever

A 0→1 gamification system built as the primary activation and retention lever for a market launch, then iterated hard post-launch based on what real usage revealed.

Role: Product Manager Company: Loco Duration: Apr 2025 – May 2026 Tools: Retool, Amplitude, Metabase, CloudFront

The problem

Loco needed an activation and retention lever for its Brazil launch — something that would get new users into a habit loop quickly, without leaning on push notifications, which are an easy crutch and a poor first impression.

Approach

I designed Quest Engine around two complementary mechanics: Short Quests (parallel, built for instant gratification) and Long Quests (sequential, built for habit formation). Rather than hard-coding tasks, I built the whole thing on a configurable Retool backend, so growth managers could self-serve on task type, duration, validity, and repetition criteria — for example, "watch X minutes of a stream" — without needing an engineer for every new campaign. Quests were also personalized per streamer, showing up contextually across live streams, streamer pages, quest pages, and category pages, and filtered by country using CloudFront headers so campaigns and rewards could be tuned per market. The reward economy itself mixed time-spent currency with purchased currency, borrowing engagement-loop principles from gaming economy design.

What shipped for the MVP

The MVP went live to Brazil on April 29, 2025, covering configurable tasks (watch stream, chat/sticker, follow, app launch), a reward claim flow spanning in-app Gold and external rewards like Amazon Pay gift cards, and segment-based targeting — all owned end-to-end, from the user-facing task dashboard and progress states down to the growth-ops tooling for creating quests, segment templates, and reward codes. It landed 5% task completion in pilot with zero push notificationsHard.

Iterating after launch

Shipping the MVP wasn't the end of the work — real usage surfaced real friction, and I went through six rounds of iteration rather than letting the feature sit:

← Subscriptions All case studies →