Skip to content

About

CI for marketing journeys: lint lifecycle campaigns for overlap, consent and frequency issues before launch.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Launchgate — CI for marketing journeys

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

Demo

The problem

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.

What it does

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)

Architecture

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]
Loading

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.

Run it

cd launchgate-app
npm install        # or pnpm install
npm run dev        # http://localhost:3000
npm run build      # production build

The app lives in launchgate-app/. That's the root directory the Vercel deployment builds from.

Tech stack

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.

PM thinking

  • 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

About

CI for marketing journeys: lint lifecycle campaigns for overlap, consent and frequency issues before launch.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages