# MixLift Operating Plan

**Chief of Staff Directive | March 7, 2026 | Supersedes STRATEGY.md Sprint Plan**

This document is the single source of truth for MixLift operations from March 7 through Day 90. All leadership team members operate from this plan. Conflicts have been resolved. Decisions are final unless new customer data forces a revisit.

---

## 1. Executive Summary

**Where we are:** MixLift shipped and was verified end-to-end on March 7, 2026. v0.2.0 is on PyPI. Stripe is processing payments. The License API is live at api.mixlift.io. A stranger can install, pay, and run an analysis today. Zero customers.

**What changed since STRATEGY.md was written (March 5):** The codebase leapt ahead of the strategy document. A codebase audit confirms the following items listed as "TODO" in STRATEGY.md are ALREADY SHIPPED:

| Item | STRATEGY.md Said | Actual Status |
|---|---|---|
| Holiday controls | "Ship Week 5" | SHIPPED in `preprocessing.py` (auto-detect US holidays via `holidays` package) |
| Headless API license gate | "Ship Week 4" | SHIPPED in `api.py` (validates license, enforces tier limits, redacts dollars) |
| Free tier metering | "Local counter Week 4-5" | SHIPPED in `metering.py` (2 runs/month, monthly reset) |
| Contextual memory | "Ship Week 7-8" | SHIPPED in `memory.py` + integrated into `server.py` (fingerprinting, deltas, CI overlap heuristic) |
| Posterior predictive | "Add to fit_model()" | SHIPPED in `engine.py:127` (`sample_posterior_predictive`) |
| 4-chain MCMC config | "Update Week 4" | SHIPPED in `defaults.py` (4 chains x 250 draws, target_accept=0.90) |
| Tier naming fix | "30-minute fix" | SHIPPED in `api.py:90` (accepts both "pro" and "growth") |

**Net assessment:** The codebase is at Week 7-8 maturity on a Week 4 calendar. The product is more ready to sell than anyone on this team realized two days ago. The constraint is no longer code -- it is customers.

**The one thing that matters most right now:** Start selling. Every day without outreach is a day wasted. The product is good enough. It will never be perfect. Ship the demo, hit LinkedIn, book calls.

---

## 2. Resolved Conflicts

### Conflict 1: Fix quality gaps THEN sell vs. Start outreach NOW

**Ruling: Start outreach NOW. Quality work runs in parallel, not as a gate.**

The Strategist recommended fixing 3 demo-killing gaps before outreach. Two of those three (model fit metrics empty, holiday controls missing) are already shipped. The third (free tier dollar leak) is a monetization hygiene issue, not a demo killer -- no prospect evaluating MixLift on their own data in a live demo will notice JSON field redaction.

Marketing and Sales are correct: time-to-first-paying-customer is the existential risk. Outreach begins March 10 (Monday). Engineering hardening runs concurrently. If a demo-killing bug surfaces during a live call, we fix it that day. That is the concierge model working as designed.

### Conflict 2: Zero new features for 30 days (EM) vs. Sample dataset + report export + data hardening (PM)

**Ruling: The PM's "sample dataset + guided first-run" ships. Report export waits. The EM is right on everything else.**

The PM correctly identifies that "I don't have my data ready" is the #1 conversion blocker. A sample dataset with a guided first-run experience is not a feature -- it is sales infrastructure. It ships Week 1-2.

Report export (PDF/HTML) is a real feature with real scope. It waits until we have paying customers asking for it. Data hardening (messy CSV handling) ships opportunistically as we encounter real customer CSVs during concierge demos -- not as a planned sprint item.

The EM's core directive -- harden, don't build -- governs all other engineering decisions. No new modeling features. No new analysis modes. No architectural changes. Monitoring, fail-closed licensing, and integration tests are the engineering priorities.

### Conflict 3: LOO-CV and uncertainty propagation (DS Manager) vs. Harden, don't build (EM)

**Ruling: LOO-CV ships in Week 3-4. Uncertainty propagation in the budget optimizer waits.**

The DS Manager is right that LOO-CV transforms model credibility from "trust us" to "here's the math." This is a 2-day implementation using ArviZ (already a dependency). It directly supports the Sales Lead's demo structure where the prospect needs to trust the numbers. LOO-CV is hardening, not a new feature -- it validates existing output.

Uncertainty propagation through the budget optimizer is a real modeling change. It waits until customer feedback demands it. The current point-estimate optimizer with posterior means is good enough for the first 5 customers, especially when paired with confidence intervals on ROAS and scenario mode.

### Conflict 4: When exactly does outreach begin?

**Ruling: March 10, 2026 (Monday). Non-negotiable.**

The Strategist said "by March 15 at latest." Marketing said "5 demos in first 10 days." Sales said "300 outreach messages over 6 weeks." All of these are compatible with a March 10 start. The 90-second Loom demo and LinkedIn prospect list are the only prerequisites, and both can be completed over the weekend (March 8-9).

---

## 3. The 30-Day Plan

### Week 1 (March 8-14): "SELL AND HARDEN"

Two parallel tracks. Neither blocks the other.

**Track A: GTM Launch (Owner: Founder)**

| # | Deliverable | Due | Definition of Done |
|---|---|---|---|
| A1 | Record 90-second Loom demo video | Mar 9 (Sun) | Shows: CSV drop into Claude, model runs, dollar headline appears, scenario mode. Posted to LinkedIn + landing page. |
| A2 | Build LinkedIn prospect list: 50 qualified DTC brands | Mar 9 (Sun) | Names, titles, company revenue estimate, LinkedIn URL. Filtered by Sales qualification criteria (DTC eComm $5M-$50M, $30K+/mo spend, 3+ channels, Director/VP). |
| A3 | Send first 25 LinkedIn DMs | Mar 10 (Mon) | Using outreach templates from `docs/outreach-templates.md`. Personalized per prospect. CTA: 15-minute live data session. |
| A4 | Create sample dataset + first-run guide | Mar 12 (Wed) | A realistic 8-channel, 52-week CSV that ships with the package. When a prospect says "I don't have my data ready," hand them this. Include a 1-page "what you'll see" guide. |
| A5 | Send next 25 LinkedIn DMs | Mar 14 (Fri) | Second batch. Adjust messaging based on response rates from first batch. |
| A6 | Complete 2+ live demos | Mar 14 (Fri) | On prospect's own data or sample data. Follow Sales Lead's 30-minute demo structure. |

**Track B: Infrastructure Hardening (Owner: Engineering)**

| # | Deliverable | Due | Definition of Done |
|---|---|---|---|
| B1 | UptimeRobot monitoring for api.mixlift.io | Mar 9 (Sun) | Health check pinging `/health` every 5 minutes. Alerts to Founder's phone on downtime. |
| B2 | Structured logging on License API | Mar 10 (Mon) | JSON logs with request_id, license_key (masked), tier, latency. Queryable in Render logs. |
| B3 | Add `last_validated_at` timestamp to licenses table | Mar 10 (Mon) | Updated on every `/v1/license/validate` call. Queryable to detect usage drop-off. |
| B4 | Verify Render disk persistence for SQLite | Mar 11 (Tue) | Confirm SQLite DB survives Render redeploy. If not, implement nightly backup to S3 or switch to Render Postgres. Document the answer either way. |
| B5 | Rate limiting on license validation endpoint | Mar 12 (Wed) | 60 requests/minute per IP. Prevents abuse without affecting normal usage. |
| B6 | End-to-end integration test in CI | Mar 14 (Fri) | Single test that exercises: CSV load, format detect, tier enforcement, modeling pipeline (mocked MCMC), result formatting, memory save/load. Runs in GitHub Actions. |

### Week 2 (March 15-21): "PIPELINE AND CONTENT"

**Track A: GTM Acceleration (Owner: Founder)**

| # | Deliverable | Due | Definition of Done |
|---|---|---|---|
| A7 | Send 50 more LinkedIn DMs (total: 100) | Mar 21 | Steady 10-15/day cadence. |
| A8 | Post LinkedIn carousel: "5 Signs Your Ad Budget Has a Leak" | Mar 17 | Educational content, soft CTA to demo. |
| A9 | Reddit teardown post on r/PPC or r/dtc | Mar 19 | Run MixLift on anonymized data, post results with commentary. Link to landing page in comments, not post body. |
| A10 | Complete 5+ total live demos | Mar 21 | Track: showed up / ran on their data / objections raised / outcome. |
| A11 | Submit to MCP marketplace listing | Mar 18 | MixLift listed with description, install command, screenshots. One-time effort. |
| A12 | Create "Day 0 case study" from sample data analysis | Mar 17 | Anonymized but realistic. Shows dollar headline, saturation insights, budget reallocation. Published on landing page. |

**Track B: Engineering (Owner: Engineering)**

| # | Deliverable | Due | Definition of Done |
|---|---|---|---|
| B7 | Fail-closed license validation with 24hr cached grace period | Mar 18 | When License API is unreachable: check local cache. If last successful validation <24hrs ago, honor cached tier. Otherwise, block paid features. Never silently downgrade to free on API error. |
| B8 | Fix any bugs surfaced during Week 1 demos | Rolling | Same-day turnaround on demo-killing issues. |
| B9 | Update STRATEGY.md and PROJECT_STATUS.md to reflect actual shipped state | Mar 19 | These documents are dangerously stale. Mark shipped items as shipped. Update architecture diagram. Remove "BLOCKED" from items that are live. |

### Week 3 (March 22-28): "CLOSE AND VALIDATE"

**Track A: Sales (Owner: Founder)**

| # | Deliverable | Due | Definition of Done |
|---|---|---|---|
| A13 | Send 50 more DMs (total: 150) | Mar 28 | |
| A14 | Complete 10+ total live demos | Mar 28 | |
| A15 | Close first paying customer | Mar 28 | $299 collected via Stripe. License key issued. Customer running MixLift independently. |
| A16 | Begin onboarding playbook for first customer | Immediately on close | Day 0: Do MCP setup FOR them. Day 1-3: Check-in call. |

**Track B: Engineering (Owner: Engineering)**

| # | Deliverable | Due | Definition of Done |
|---|---|---|---|
| B10 | LOO-CV implementation via ArviZ | Mar 25 | `az.loo()` integrated into model fit summary. ELPD score + interpretation ("good/fair/poor fit") shown in results. |
| B11 | Strip raw saturation curves from MCP output | Mar 26 | Keep traffic lights. Remove the 100-point-per-channel data dump that Claude cannot render. Reduces token waste. |
| B12 | Fix any bugs from customer onboarding | Rolling | |

### Week 4 (March 29 - April 4): "COMPOUND"

**Track A: Sales (Owner: Founder)**

| # | Deliverable | Due | Definition of Done |
|---|---|---|---|
| A17 | Send 50 more DMs (total: 200) | Apr 4 | |
| A18 | Complete 15+ total live demos | Apr 4 | |
| A19 | 3 paying customers | Apr 4 | |
| A20 | First customer Day 7 interpretation call | Per playbook | Scenario mode demo. Confirm independent usage. |

**Track B: Engineering (Owner: Engineering)**

| # | Deliverable | Due | Definition of Done |
|---|---|---|---|
| B13 | Data hardening based on real customer CSVs | Rolling | Fix whatever broke. Messy headers, date formats, currency symbols, encoding issues. |
| B14 | Intercept decomposition (baseline/organic revenue) | Apr 2 | Surface the model intercept as "organic/baseline revenue" in results. Addresses DS Manager concern about missing baseline. |

---

## 4. Strategic Decisions

### DECIDED

| # | Decision | Resolution | Rationale |
|---|---|---|---|
| 1 | **Outreach starts March 10** | Non-negotiable | Product is ready. Every day of delay is wasted. Quality work is parallel, not sequential. |
| 2 | **Demo target: 5/week, not 2/week** | Strategist and Sales Lead aligned | 2/week is insufficient pipeline for 5 customers by Day 45. Need 15+ demos to close 5. |
| 3 | **Pricing stays at $299/mo** | No change until 15+ customers | Sales Lead is right: first 10 customers are case studies. $299 is intentionally low. Raise to $799 Pro tier after 15-20 customers + 3 published case studies. |
| 4 | **No annual pricing until Week 8-10** | Finance recommendation adopted | Annual ($2,690/yr, 25% discount) becomes a closing tool only after we understand retention. Offering annual too early masks churn signal. |
| 5 | **LOO-CV ships Week 3** | DS Manager + EM compromise | LOO-CV is validation of existing output, not a new feature. 2-day effort. Transforms "trust us" into "here's the out-of-sample score." |
| 6 | **Report export deferred** | PM accepts deferral | No customer has asked for it yet. Build it the week a prospect says "I need to share this with my boss" and doesn't close. |
| 7 | **Zero new modeling features for 30 days** | EM directive stands | No time-varying coefficients. No cross-channel interactions. No new adstock specs. Customer feedback drives the next modeling sprint. |
| 8 | **Sample dataset ships Week 1** | PM priority, EM-approved scope | Not a feature. Sales infrastructure. Realistic 8-channel CSV + 1-page guide. |
| 9 | **Fail-closed licensing ships Week 2** | EM + Strategy aligned | Current fail-open behavior is a revenue leak. 24hr cached grace period prevents locking out paid users during outages. |
| 10 | **STRATEGY.md gets updated Week 2** | Overdue | The strategy document says License API is "NOT YET LIVE" and PyPI is "BLOCKED." Both shipped. Stale docs cause bad decisions. |
| 11 | **Kill the 12-month $75K MRR projection** | Strategist recommendation adopted | It is a fantasy number. The only projection that matters: 5 customers by Day 45. Everything beyond that is earned with data, not spreadsheets. |
| 12 | **Memory fingerprinting stays as-is** | EM flagged fragility, but not worth fixing now | Yes, renaming a CSV breaks the fingerprint. This is acceptable for first 5 customers who will use consistent filenames. Revisit if customer complaints surface. |

### WAITS FOR DATA

| # | Decision | Trigger | What We'll Learn |
|---|---|---|---|
| 1 | **Pro tier launch ($799/mo)** | 15+ customers + 3 case studies | Whether there's demand for higher limits and priority support. |
| 2 | **Report export (PDF/HTML)** | First prospect who doesn't close because they can't share results | Whether the buyer vs. decision-maker gap is real. |
| 3 | **Automated monthly refresh with delta reporting** | First customer approaching Day 30 renewal | Whether memory deltas are compelling enough to drive retention. |
| 4 | **Uncertainty propagation in budget optimizer** | Customer questions the optimization recommendations | Whether point estimates are "good enough" or eroding trust. |
| 5 | **Agency tier / multi-client** | Inbound agency interest | Whether agencies are a viable channel before Week 9. |
| 6 | **Annual pricing** | Week 8-10, after observing first renewal cohort | Whether retention supports locking in annual commitments. |
| 7 | **Kill or pivot** | Day 90: <10 paying + >15% churn | Whether the product has market fit. |

---

## 5. Metrics Dashboard

### Weekly Dashboard (Every Monday, starting March 17)

| Metric | Week 1 | Week 2 | Week 3 | Week 4 | Day 45 Target |
|---|---|---|---|---|---|
| Outreach messages sent | 50 | 100 | 150 | 200 | 300 |
| Live demos completed | 2 | 5 | 10 | 15 | 20 |
| Demo-to-close rate | Measuring | Measuring | Measuring | Measuring | 25%+ |
| Paying customers | 0 | 0 | 1 | 3 | 5 |
| MRR | $0 | $0 | $299 | $897 | $1,495 |
| Cash collected | $0 | $0 | $299 | $897 | $1,495 |
| Infra cost (monthly) | <$15 | <$15 | <$15 | <$15 | <$50 |
| api.mixlift.io uptime | 99%+ | 99%+ | 99%+ | 99%+ | 99.5%+ |
| Bugs found in demos | Track | Track | Track | Track | <1/demo |

### Monthly Dashboard (Starting Day 30)

| Metric | Day 30 | Day 60 | Day 90 |
|---|---|---|---|
| Paying customers | 3-5 | 8-12 | 15-25 |
| MRR | $897-$1,495 | $2,392-$3,588 | $4,485-$7,475 |
| Monthly logo churn | N/A (no renewals yet) | Measuring | <10% |
| Month 2 retention (first 5) | N/A | N/A | TARGET: 80%+ |
| Gross margin | 95%+ | 95%+ | 95%+ |
| Customer using memory/deltas | N/A | Track | 50%+ |

### Trigger-Based Actions

| Signal | Threshold | Action |
|---|---|---|
| Demo show rate | <30% of booked | Change messaging. Lead with free teardown offer. |
| Demo-to-close rate | <15% after 10 demos | Diagnose: is it trust? Price? Urgency? Interview every non-closer. |
| First renewal churn | >50% of first 5 churn at Day 30 | STOP all outreach. Customer interviews only. Fix the product. |
| api.mixlift.io downtime | >1 hour | Founder gets paged. If Render, evaluate Railway/Fly.io migration. |
| Outreach response rate | <5% on LinkedIn | Switch to warm intros, Reddit/Twitter content, or cold email. |
| "I need to share this" objection | 3+ prospects say it | Build PDF report export immediately. |
| Month 2 retention of first 5 | 80%+ | Green light for scaling outreach to 50/week. |
| Month 2 retention of first 5 | <60% | Pause acquisition. All effort on retention mechanics. |

### Finance Scenarios (Day 90 Decision Framework)

| Scenario | Probability | Metrics | Decision |
|---|---|---|---|
| **Downside** | 15% | <10 paying, >15% churn | Kill or pivot. Consider web app, Shopify app, or open-source-with-support model. |
| **Base** | 60% | 10-15 paying, 5-10% churn | Lifestyle path. Stay lean. $100-180K ARR ceiling is a fine outcome. |
| **Upside** | 25% | 15-25 paying, <5% churn | Invest moderately. Launch Pro tier. Hire first contractor (growth marketer). |

---

## 6. Operating Principles

These five rules govern every decision for the next 90 days. When in doubt, apply these in order.

### Principle 1: Customers Before Code

No engineering work is justified by "best practice" or "technical correctness." Every task must answer: "Which customer interaction does this enable, protect, or improve?" If the answer is "none right now," it goes in the backlog. The EM's hardening work is justified because downtime during a demo kills a deal. LOO-CV is justified because it answers "can I trust this?" during a sale. Report export is not justified because no customer has asked for it.

### Principle 2: Concierge Is the Product

For the first 10 customers, the founder IS the product. Do MCP setup for them. Sit on the call while the model runs. Interpret the results together. Fix bugs in real time. This is not overhead -- this is the fastest path to understanding what the product must become. Every concierge interaction generates signal worth more than a week of speculative feature work.

### Principle 3: Measure Retention, Not Acquisition

Getting 5 customers to pay $299 is a sales problem. Getting them to pay again next month is a product problem. The product problem is harder and more important. Every feature decision after Day 30 is driven by retention data, not acquisition ambition. The critical metric is Month 2 retention of the first 5 customers, available around Day 75.

### Principle 4: One Bet at a Time

MixLift is betting on: (a) Bayesian MMM delivered via MCP, (b) to DTC eCommerce brands, (c) at $299/month, (d) sold via founder-led concierge sales. If this combination does not work, we change ONE variable at a time. We do not simultaneously pivot the channel, the audience, and the price. Sequential experiments with clear kill criteria.

### Principle 5: Shipped Beats Correct

A demo with a minor model quality issue that closes a customer beats a perfect model that nobody sees. The DS Manager's concerns about posterior means in the optimizer, prior sensitivity on short data, and missing cross-channel interactions are all technically valid. None of them matter until a customer notices. Ship, sell, listen, then fix what customers tell us is broken.

---

## Appendix A: Onboarding Playbook (First 5 Customers)

Adopted from Customer Success with modifications.

| Day | Action | Owner | Goal |
|---|---|---|---|
| 0 | Live demo on THEIR data. Close on the call. Do MCP setup FOR them (screenshare). | Founder | Aha moment: dollar headline on their own data that contradicts platform attribution. |
| 1 | Send follow-up email: summary of findings, link to scenario mode docs, "try running it yourself." | Founder | Confirm they can run independently. |
| 3 | Check-in message: "Were you able to run it on your own? Any questions about the results?" | Founder | Catch installation/usage friction early. |
| 7 | Scheduled call: Interpretation deep-dive + scenario mode walkthrough. "What if you cut TikTok by 20%?" | Founder | Deepen engagement. Demonstrate ongoing value beyond first analysis. |
| 14 | Async check-in: "Have your numbers changed? Want to re-run with this week's data?" | Founder | Trigger second analysis. Memory deltas kick in. |
| 21 | Pre-renewal call: Run fresh analysis together. Show deltas from Day 0. "Your Meta ROAS improved from 2.3x to 2.8x." | Founder | Reframe from "diagnosis tool" to "tracking tool." Make renewal feel obvious. |
| 30 | Renewal happens automatically (Stripe). Follow up: "Glad to have you for another month. Here's what we're shipping next." | Founder | Retain. Collect feedback on what they'd pay more for. |

---

## Appendix B: Qualification Criteria (Adopted from Sales Lead)

**QUALIFY:**
- DTC eCommerce, $5M-$50M revenue
- $30K+/month ad spend across 3+ channels
- Director/VP of Growth or Marketing (budget authority)
- Frustrated with platform attribution or "flying blind"
- 6+ months of historical spend data available

**DISQUALIFY:**
- Pre-revenue or pre-product-market-fit startups
- Single-channel advertisers (MixLift needs channel mix)
- Has an in-house data science team (they'll build, not buy)
- Committee buyers requiring 3+ stakeholder approval
- Agencies (deferred to Week 9+)

---

## Appendix C: What Is Already Shipped (Codebase Truth)

For reference, to prevent re-debating or re-building things that exist.

| Capability | Location | Status |
|---|---|---|
| PyPI package (v0.2.0) | `pip install mixlift` | LIVE |
| License API | api.mixlift.io | LIVE |
| Stripe payment flow | Payment Link -> Webhook -> License | LIVE |
| Email delivery (Resend) | `mixlift-api/src/mixlift_api/email_service.py` | LIVE |
| Holiday controls (auto-detect US) | `mixlift/modeling/preprocessing.py` | SHIPPED |
| Contextual memory + deltas | `src/mixlift_mcp/memory.py` + `server.py` | SHIPPED |
| Free tier metering (2 runs/mo) | `src/mixlift_mcp/metering.py` | SHIPPED |
| Headless API with license gate | `mixlift/api.py` | SHIPPED |
| Posterior predictive sampling | `mixlift/modeling/engine.py:127` | SHIPPED |
| 4-chain MCMC config | `mixlift/modeling/defaults.py` | SHIPPED |
| Tier naming fix (pro + growth) | `mixlift/api.py:90` | SHIPPED |
| Dollar headline gate (free=%, paid=$) | `src/mixlift_mcp/server.py` | SHIPPED |
| Saturation traffic lights | `src/mixlift_mcp/server.py` | SHIPPED |
| Scenario mode | `src/mixlift_mcp/server.py` | SHIPPED |
| Confidence explainers | `src/mixlift_mcp/server.py` | SHIPPED |
| Path traversal protection | `src/mixlift_mcp/server.py` | SHIPPED |
| Convergence diagnostics (R-hat) | `mixlift/modeling/engine.py` | SHIPPED |
| Marginal ROAS | `mixlift/modeling/engine.py` | SHIPPED |
| Battle card | `docs/battle-card.md` | SHIPPED |
| Outreach templates (5) | `docs/outreach-templates.md` | SHIPPED |
| ICP profiles | `docs/icp-profiles.md` | SHIPPED |
| Landing page | Netlify | LIVE |

---

*This plan was produced on March 7, 2026.*
*First review: March 17, 2026 (Monday).*
*Review cadence: Every Monday.*
*Owner: Founder (with Chief of Staff oversight).*

**The next action is not reading this document. It is recording the Loom demo and building the prospect list this weekend. Monday morning, DMs go out. Go.**
