Catch audience overlap, over-messaging and stale triggers before a lifecycle campaign launches, simulate the fixes, and ship it to a test cohort with a holdout.
Live demo: https://launchgate-steel.vercel.app
Lifecycle teams launch onboarding, upsell and win-back journeys into the same users. Engineers have CI to catch breakage before merge. Marketers mostly find out after launch, through unsubscribes, duplicate sends or a dead journey. Each mistake costs trust with real customers.
| Step | What you see |
|---|---|
| Journey list | Every journey shown with its status, audience, channels, risk level and readiness score |
| Launchgate checks | 14 checks scored. Findings come with counts: 312 overlapping enrollees, 84 people over the frequency cap, 7% of trigger events stale |
| Simulate fixes | Toggle each recommendation and watch readiness (78 → 93), eligible audience, at-risk profiles and modeled conversion recompute deterministically |
| Safe rollout | The plan sends 10% of the audience as a test cohort with an equal holdout, one primary metric ("teammate invited within 72h"), and guardrails for unsubscribes, duplicate triggers and frequency-cap breaches. Launch journey opens the cohort plan; confirming shows a success state (mock: nothing is sent) |
| Journeys | Launchgate | Fixes applied |
|---|---|---|
![]() |
![]() |
![]() |
| Launch as test cohort | Cohort scheduled (mock) |
|---|---|
![]() |
![]() |
flowchart LR
A[Journey definitions<br/>lib/journeys.ts] --> B[Launchgate checks<br/>overlap · frequency · freshness]
B --> C[Risk findings + readiness score]
C --> D[Recommendation toggles]
D --> E["simulate() — deterministic recompute<br/>audience · readiness · conversion"]
E --> F[Summary cards / baseline-vs-proposed table]
E --> G[Test cohort 10% + holdout<br/>primary + guardrail metrics]
All surfaces read one SimulationResult object, so the numbers always agree with each other. The simulation is a pure function, so it's easy to test and to explain.
cd launchgate-app
npm install # or pnpm install
npm run dev # http://localhost:3000
npm run build # production buildThe app lives in launchgate-app/. That's the root directory the Vercel deployment builds from.
Next.js 16 (App Router, static) · React 19 · TypeScript · Tailwind CSS 4 · shadcn/ui · Vercel. The first scaffold came from v0, and the product logic and simulation model were written by hand.
- Treat it like a release gate. A readiness score plus pass/fail checks makes the launch decision explicit and lets people review it.
- Count what's at risk. "312 people" gets acted on. "Some overlap" doesn't.
- Show fixes as trade-offs. Excluding the overlap shrinks the audience but raises readiness and conversion. The tool shows the cost instead of hiding it.
- Launch small and measure. The default rollout is a 10% cohort with a holdout and guardrail metrics.
- Next: pull in real event and journey data from a customer-engagement platform, add an LLM that explains findings (and test its accuracy), and calibrate thresholds against outcomes from past campaigns.
All data is synthetic and fictional ("Northwind Growth").
Personal project; not affiliated with or endorsed by any company.
License: MIT





