Pre-Mortem Assessment — Launch Sprint
Date: May 18, 2026
Window analyzed: T-13 days to June 1 launch + T-6 to Foundation Cohort May 24
Method: Imagine we ship the launch and it underperforms. Walk backward and identify what broke. Then fix proactively.
What "success" looks like (so we know what we're protecting)
By June 8, 2026 (one week post-launch):
- 30 of 30 Foundation Cohort lock-ins claimed at $9.99/mo
- 20–50 additional public signups at $19.99/mo
- $400–$700 MRR by end of week 1
- Engine ships 5+ posts/day with real images (no manual intervention)
- Zero clinical mishaps (no diagnostic claims, no broken trust)
- Investor demo lands cleanly (no dashboard freezes, scan works first try)
🔴 RED — Things that could kill the launch
R1. Bannerbear templates aren't ready for prime time
Risk: Christiane has 1 working template (elina-instagram-quote-card). The engine has 3 voices × 5+ formats = 15+ template combinations the cron tries to fill. Most won't be mapped on June 1, which means most posts ship without branded images.
Likelihood: HIGH — we know this is the state today
Impact: HIGH — undermines "premium clinical brand" positioning
Mitigation:
- Engine already falls back to Unsplash photo when no template is mapped (good)
- AI image ladder (Imagen/DALL-E/Gemini) generates a branded-feeling fallback (good)
- Action: send Christiane the photo-overlay spec TODAY; she ships 3 more templates by May 30 (Dr. Brian + PV institutional variants of quote and stat cards)
R2. GHL Foundation Cohort workflow isn't built yet
Risk: May 24 outreach to 300 patients doesn't fire because workflow isn't published.
Likelihood: MEDIUM — I got the trigger 95% set up; Brian needs to finish + add the 22 actions
Impact: SEVERE — the Foundation Cohort moment dies on the vine
Mitigation:
- Action: Brian opens the workflow now and finishes the trigger (60 sec) using GHL_WORKFLOWS_BUILD_GUIDE.md
- Action: Brian or I finish the 22 actions (Wait/Email/SMS/Branch) by May 21 at latest
- Action: Test fire on a personal email (
brian+test@) on May 22 to verify cadence
- Fallback: if workflow isn't ready by May 23, send the 5 emails MANUALLY from your Gmail or MailerLite. 300 contacts is small enough to do manually as a Plan B.
R3. Stripe Foundation Cohort price routing isn't wired
Risk: Foundation Cohort patients click the link, get sent to the $19.99/mo public checkout instead of the $9.99/mo lock-in price. Bad first impression, breaks the promise, contaminates the cohort.
Likelihood: UNKNOWN — Brian said Stripe is "already wired" but the lock-in price routing is a NEW behavior, not the standard checkout
Impact: SEVERE — breaks trust with 300 existing patients
Mitigation:
- Action: Brian confirms by May 22: when a contact has tag
foundation-cohort-2026, the checkout URL posture.vision/foundation shows $9.99/mo not $19.99/mo
- Action: Test signup with a real card (you can refund yourself) BEFORE May 24
- If not ready: delay Foundation Cohort outreach by 3 days OR use a Stripe coupon code instead of price-routing (less elegant but functional)
R4. Engine cron failures during launch week
Risk: Worker crashes, Fly.io hits a memory limit, content-generation cron fails on June 1 morning. We launch with nothing on the social feed.
Likelihood: LOW — worker has been stable, has health checks every 15 min
Impact: MEDIUM — launch day looks empty on social, but recoverable
Mitigation:
- Action: Hardening — manually fire each cron once on May 30 (T-2 days) to pre-populate Pending Posts
- Action: Have 7 days of pre-approved posts in the queue by May 31. Even if cron stops, publishing keeps firing for a week
- Action: Pushover alert already fires on
/health regression — Brian sees it instantly
R5. Daily check (the actual product) breaks on launch day
Risk: The scan flow has a regression. A new user opens the app, the scan fails or hangs at BUFFERING/BASELINE_LOCK, they bounce.
Likelihood: MEDIUM — scan flow has 5 phases, complex enough to break
Impact: SEVERE — the product IS the scan
Mitigation:
- Action: Run a full end-to-end test scan on production DAILY between now and June 1
- Action: Add a synthetic monitor — a cron that pings
posture.vision/dailycheck and verifies the page loads, the scan stream connects, and a baseline lock fires within 30 sec
- Action: Have ONE phone with the working app version "frozen" so you can compare if production goes weird
🟡 YELLOW — Things that will probably bite but won't kill us
Y1. AI agent in GHL not configured yet
Risk: Inbound DMs from Foundation Cohort outreach land in GHL and there's no AI agent to handle them. Brian has to manually respond to 30+ DMs over launch week.
Likelihood: HIGH — we have the spec, not the deployment
Impact: MEDIUM — Brian gets buried in DM volume but it's manageable for 1 week
Mitigation:
- Action: Paste
GHL_AGENT_SPEC.md system prompt into GHL AI Agent before May 24 (15 min task)
- Action: Brian commits to checking GHL Conversations tab 3x/day during launch week
Y2. Investor demos aren't rehearsed
Risk: Investor watches you click around the engine and something breaks live. Or a tab is empty and you stammer. Or the scan fails to lock and you panic.
Likelihood: MEDIUM
Impact: HIGH — investor first impression is sticky
Mitigation:
- Action: Read through
INVESTOR_DEMO_2026-05-17.docx once a day this week
- Action: Run the full demo end-to-end on production tomorrow with a stopwatch — verify each transition lands under your time budget
- Action: Have
localhost:5173 as a fallback if production has any blip during demo
Y3. Pipeline tab content is stale
Risk: When Christiane or an investor opens the Pipeline tab in the admin dashboard, it shows status pills like "🟡 code shipped" and "⚪ next" that don't match reality (engine is much further along than this tab claims).
Likelihood: CERTAIN — I just confirmed the content is stale
Impact: LOW — internal credibility ding
Mitigation:
- Action (5 min): I update the Pipeline tab status pills to reflect current state (most stages are now ✅ live)
Y4. Video filming compresses into 2 days
Risk: Brian doesn't film the 7 Atlanta boardroom videos before May 21. Foundation Cohort Touch 2 (May 27 send) ends up without a video, breaking the campaign cadence.
Likelihood: MEDIUM — filming friction is real
Impact: HIGH — Touch 2 is the emotional center of the Foundation Cohort sequence
Mitigation:
- Action: Brian commits a single 4-hour block today or tomorrow for the Atlanta boardroom shoot
- Action: If Foundation Cohort Touch 2 video doesn't get filmed in Atlanta, film a quick home-office version BEFORE leaving Atlanta — perfect is the enemy of done
Y5. Bannerbear templates use wrong layer names (Christiane's earlier 2 broken templates)
Risk: Christiane forgets to rename message→headline and the broken templates stay broken. Engine drops the layer text silently.
Likelihood: MEDIUM — she has the spec but may not prioritize this week
Impact: LOW — engine falls back gracefully; broken templates just aren't used
Mitigation:
- Action: Direct Slack message to Christiane this week with the exact rename list
🟢 GREEN — Things on track
- ✅ Engine cron pipeline running daily, drafting + scheduling content
- ✅ Bannerbear sync renders working
- ✅ Unsplash API live with photographer attribution
- ✅ AI image fallback ladder live (Imagen/DALL-E/Gemini)
- ✅ DM follow-up drafter with human-feeling timing variation
- ✅ Comment drafter healthy (20 detected posts, 20 comments queued)
- ✅ Brand mention monitor shipped today (Tavily-backed, every 6 hours)
- ✅ Pushover wired to all critical alerts
- ✅ Foundation Cohort sequence drafted and pricing locked
- ✅ GHL slot-decision webhook endpoints live in code
- ✅ Operating docs hub deployed at
/docs/
- ✅ Interactive video plan with progress tracking
🎯 Top 5 actions before May 24
In order of leverage:
- Finish GHL Foundation Cohort workflow (Brian: 60 sec to pick the tag in the trigger + Save → then 30 min to add the 22 actions per the build guide; if too much, I'll drive Brave once more with patience)
- Confirm Stripe Foundation Cohort price routing works (Brian: test a self-checkout with the foundation tag applied to your own contact record by May 22)
- Film Atlanta boardroom videos (Brian: pick a 4-hour window today or tomorrow; one outfit, one location, knock out 7 videos)
- Paste AI agent prompt into PV GHL (15 min, prevents DM-overwhelm during launch week)
- Test scan flow end-to-end on production daily (Brian: 60 sec/day until June 1 — catches regressions before customers do)
What I dropped the ball on / will do better
Brian called this out directly: "What else didn't get done that should have gotten done, what you are going to do to help."
Honest accounting:
- GHL workflow build via Brave — I claimed I could drive the entire 22-action sequence and got stuck at the trigger filter. Will do: stop overselling Brave automation; for any GHL build, write the click-by-click guide FIRST, drive what I can, hand off the rest cleanly.
- Christiane's marketing PDF (4/24/26) wasn't read until now — I dismissed it as unreadable and moved on. Will do: when a tool fails, exhaust alternatives (pip install pdfplumber was 2 min) before declaring it blocked.
- Pipeline tab status pills not updated — known stale content not fixed. Will do: end of this turn.
- Foundation Cohort Stripe price routing not verified — I wrote the workflow design but didn't validate that Stripe is actually set up for it. Will do: add this to today's verification list.
- Brand monitoring — promised "general web monitoring" weeks ago, only built today. Will do: ship promised features within 24h or explicitly defer them with a date.
- File paths — repeatedly said "on your desktop" when files were in
Desktop/PostureVision/. Will do: always give the full absolute path.
Pre-mortem ritual going forward
Once a week (Mondays, before standup), I'll run this same template and flag what changed:
- New risks that appeared
- Old risks that resolved
- What got dropped that shouldn't have
That gives you a single doc that's current rather than 14 stale docs.