Inspiration

Designers and PMs practice screens all the time — but real product work is journeys: checkout failures, OTP loops, recovery paths, and the decision points that decide whether a user converts or churns. I built Junction to turn that kind of thinking into a game you can replay, score, and improve.

What it does

Junction is a mobile UX flow puzzle app. You place nodes (screens, decisions, errors, recovery), wire them into a flow, simulate a virtual user, and get scored like a design review — not a “did the wires connect?” checkbox.

Free: Ecommerce, Food Delivery, and Travel worlds · Blitz · Daily Challenge · Vs CPU · Sandbox · intro Learn lessons.

Pro (RevenueCat): Fintech & SaaS worlds · full Learn curriculum · UX Flow Audit reports · elite modes · leaderboards.

How I built it

Solo founder stack:

  • Expo / React Native / TypeScript — iOS + Android from one codebase (EAS production builds)
  • RevenueCat — UX Flow Pro subscription (sub_pro_monthly, sub_pro_yearly) + world packs + Learn pack
  • Supabase — auth (Apple, Google, email), profiles, Online Blitz realtime
  • Local scoring engine — deterministic Results + UX Audit rubric; optional LLM polish via Supabase Edge Function (scores never come from the model)

~210 campaign levels across 6 worlds, 7 game modes, accessibility as both a playable world and app settings (color vision, high contrast, reduce haptics).

Challenges

App Store review — First submission (build 28) was rejected for missing in-app account deletion (Guideline 5.1.1(v)) and incomplete auto-renewable subscription disclosure (3.1.2(c)). I added Profile → Delete account, a full subscription disclosure block on Store + onboarding paywall, demo reviewer credentials, and screen recordings — resubmitting on build 44.

Fair scoring — Early versions could reward broken shortcuts. I hardened the local simulator so incomplete flows score low with clear explanations, while creative but valid journeys can still score high.

Solo scope — Content, systems design, monetization, auth, multiplayer, and launch ops in one product. RevenueCat let me ship subscriptions + packs without building billing infrastructure myself.

What's next

Public App Store launch → Shipaton submission with live store URL. Then Android Play production release and more worlds (Healthcare).

Built With

Share this project:

Updates

posted an update —

How Junction Flows grew — from idea to App Store

When I started Junction Flows for Shipaton, it wasn’t a polished game. It was a question I couldn’t stop thinking about: why do we practice UX on screens, but get tested on journeys?

Designers and PMs spend hours on UI. But in real products — and in interviews — what matters is the flow. What happens when payment fails? When a rider cancels? When a user drops off and comes back? Those recovery paths, decision branches, and dead ends are the hard part. And there was almost nowhere to practice them in a tight, repeatable loop.

So I started building Junction: a mobile game where you get a real product scenario, place journey nodes on a canvas, wire them together, simulate a virtual user walking through your flow, and get feedback you can use to retry and improve. Brief → build → simulate → learn → try again. That loop became the whole product.

The first version taught me the most important lesson. I had wired scoring the naive way — if your flow reached “Complete,” you scored well. Players could shortcut straight to the finish and still look like they nailed it. The feedback felt wrong. If the score lies, the product lies. That failure shaped everything that came after.

I rebuilt the heart of the app from scratch. Instead of checking whether nodes were connected, I built a local quality engine that simulates user paths across decision branches and grades structure the way a design review would — conversion, recovery, efficiency, simplicity, trust, accessibility. I added milestone aliases so creative wiring still counts when it does the job. I added anti-cheat caps so broken shortcuts can’t look like mastery. I made every mode — Campaign, Blitz, Vs Computer, Online Blitz, Sandbox — call the same engine, so Results and UX Flow Audit always agree. Then I wrote regression tests around it, because in this product, feedback quality isn’t a nice-to-have — it is the product.

Only after that did I add AI — and I added it carefully. Generative models polish the coaching language after a simulation: clearer fixes, better explanations, persona summaries. They never set the score. I call it an “LLM fence”: deterministic judgment on one side, generative coaching on the other. That pattern took Junction from “AI slapped on a puzzle” to something I’d actually trust as practice.

From there, the product grew fast. What started as a prototype became ~210 campaign levels across six worlds — Ecommerce, Food Delivery, Fintech, Travel, SaaS, and Inclusive Design. I added seven playable modes, a 22-lesson Learn track, Daily Challenges, competitive Blitz with Supabase Realtime matchmaking and bot fallback, and a UX Flow Audit feature with seven accessibility personas. I built guest-first onboarding so anyone could play immediately, then sign up with Google, Apple, or email and keep their progress. I wired RevenueCat for real subscriptions — Pro unlocks deeper content and unlimited audits, not score advantages. No ads. No pay-to-win. I shipped a privacy and terms site, integrated Layers for launch attribution, and took production builds through EAS for iOS and Android.

Along the way I stayed solo — product, design, content, engineering, and launch. I wrote the scenarios. I tuned the scoring. I recorded the demo. I fixed the bugs that only show up when real people play — like retry flows on failed world levels and coaching copy that had to stay honest even when an LLM tried to invent problems that weren’t there.

By launch week, Junction wasn’t a Shipaton prototype anymore. It was v1.0.1 — a real app with a real App Store listing, a real monetization stack, a real multiplayer layer, and a feedback system I’d stand behind in an interview or a design workshop. Android was in its required 14-day closed test. iOS was ready to go live. The build in public journey turned an idea about journey thinking into something people could download, play, fail, learn from, and come back to.

That’s where the next update picks up — App Store launch, first real users, and what happened when Junction left my phone and met the world.

Shipaton #BuildInPublic #RevenueCat #UXDesign #IndieApp #ReactNative

Log in or sign up for Devpost to join the conversation.

Submission history