-
-
-
Landing hero with the tension gauge
-
Scenario picker (free and Pro)
-
Real AI reply, tension 30 "Guarded", skill scores, coach tip
-
Score 78, radar chart, the $84,000 hidden truth
-
Paywall with Monthly selected and the 7-day trial timeline
-
Pro coaching unlocked after a RevenueCat test purchase
-
Inspector: entitlement active (trial), placement report_upsell
-
Inspiration
My first real salary conversation lasted about forty seconds. The recruiter named a number, I said "that sounds great," and I spent the next week wondering what I had left on the table.
Most people get one take at the conversations that shape their careers: a first offer, saying no to a manager, asking a professor for more time, giving hard feedback to a friend they now manage. Advice articles don't talk back, and friends go easy on you. Scenar gives you as many rehearsals as you need, against someone who doesn't go easy.
What it does
Scenar is an AI conversation simulator. You pick a scenario and talk it through with an AI counterpart that plays a real person and has a hidden agenda: a budget ceiling, a deadline that can actually move, a reason they won't say out loud.
- Live tension meter: every reply returns a tension score (Calm, Guarded, Tense, Heated) and progress toward your goal, so you see how each line landed.
- Live scoring: each message is scored on Assertiveness, Emotional Regulation, Clarity and Boundary Setting, plus a one-line coach tip.
- The reveal: the report shows your scores on a radar chart, then reveals the secret. "Dana could go to $84,000. You stopped at $78,000."
- Scenar Pro: unlocks all five scenarios, tactical line-by-line rewrites of what to say instead, voice mode, and a custom scenario builder where you describe your real situation and Scenar builds a counterpart with its own secret.
- Progress: history, a comparison with your last attempt, personal bests and streaks.
It runs on iOS, iPadOS, Android and macOS, and installs to the home screen as an app. Try it at www.tryscenar.xyz.
How we built it
- Next.js 16, React 19 and TypeScript, with a hand-built monochrome design system (CSS Modules, no UI kit) and a custom icon set. The only colour in the product is the tension gradient.
- AI: one model call per turn plays the counterpart and silently scores your last message as structured JSON. Live turns use GPT-4.1 and reports use Claude Sonnet 5, both through the 0G router. The client speaks both the OpenAI and Anthropic formats. An offline fallback keeps the demo working if the AI is unavailable.
- Secrets stay secret: scenario personas and secrets never reach the browser. Custom scenarios travel as AES-256-GCM sealed tokens.
RevenueCat
RevenueCat is the backbone of monetisation, not a checkbox:
- Two environments side by side: Sandbox (RevenueCat Test Store, no card) for judges and testing, and Live (RevenueCat Web Billing with Stripe) for real payments. Users switch at runtime; each environment has its own anonymous app user ID. We verified Live with a real 7-day-trial purchase and cancelled it through RevenueCat's customer portal.
- Offering-driven custom paywall: plans, prices, the trial timeline, "Save 33%" and "Best value" all come from the current offering at runtime.
- Placements: every paywall moment (locked scenario, report upsell, voice, builder, header) requests its own placement. Every purchase is tagged with
paywall_reason,placement_id,offering_idandbilling_env. - Server-side entitlement checks: Pro API routes verify
scenar_prowith RevenueCat's REST API. The report's Pro coaching is sealed for free users and only unlocked by the server after RevenueCat confirms the purchase, so it can't be read from the network. - Webhooks: an authenticated endpoint clears the cached entitlement check on every event and stores events in Upstash Redis, deduplicated by event ID.
- RevenueCat inspector (Shift+I) and an Account & billing page show the live customer state, "Server agrees: Pro", trial countdowns, and "Manage or cancel".
Challenges we ran into
- Keeping the AI honest: getting one model to stay in character, keep its secret until it's earned, and score the user fairly in structured JSON took a lot of prompt iteration.
- Trial time in sandbox: RevenueCat's Test Store compresses a one-week trial into about five minutes, so our "7d left" badge showed "0d". We rewrote the countdown to show minutes, hours or days.
- Real payments as a student: activating Stripe live, connecting Web Billing, and wiring one offering across the Test Store and Web Billing apps.
- A blocked domain: our Italian ISP blocks
*.vercel.app, so we diagnosed it (a hostname-based block, not an IP block) and moved to a custom domain.
What we learned
- Monetisation works best when the paywall appears at the moment of value. Unlocking the coaching right after the reveal feels like a natural next step, not a wall.
- Server-side verification matters: hiding Pro content in the browser isn't the same as protecting it.
- A single strong mechanic (the hidden agenda) makes an AI app feel like a game, not a chatbot.
What's next
- Accounts that sync progress across devices.
- Team plans for manager-training cohorts.
- Native iOS and Android apps sharing the same RevenueCat entitlement.
- More scenarios, built with the community.
Built With
- 0g
- anthropic
- nextjs
- openai
- react
- redis
- revenuecat
- stripe
- typescript
- upstash
Log in or sign up for Devpost to join the conversation.