← back to AbramsEgo

memos/fulfillment.md

59 lines

# Fulfillment runbook — what happens after a checkout completes

**Status:** TEST mode only (Stripe test keys, no real charges). This is the
manual-first playbook for when a Hosted/$19 or Pro/$49 checkout completes —
today in TEST, later live once Steve flips the switch. Provisioning is done
by Steve by hand; nothing auto-provisions.

## The moment of purchase

1. Customer clicks a pricing CTA on `/landing.html` → `/api/checkout` creates a
   Stripe Checkout Session (TEST) for the chosen tier → customer pays on
   Stripe's hosted page.
2. Stripe calls our webhook (`checkout.session.completed`). The server records
   the sale to `data/revenue-ledger.jsonl` (engine: `sell`) and it shows up in
   the dashboard P&L within one refresh.
3. **Nothing else is automatic.** The customer's email + tier sit in the ledger
   entry; Steve fulfills manually from there.

## Manual provisioning — Steve's steps (target: within 24h of purchase)

### Hosted — $19/mo
1. Read the ledger entry (email, tier, Stripe customer id).
2. Create the customer's instance on Kamatera: copy of the AbramsEgo app on its
   own port, fresh Basic Auth credentials, empty data dir (their fleet, not ours).
3. Point a subdomain at it (e.g. `<name>.abramsego.com`) with SSL.
4. Email the customer from steve@designerwallcoverings.com: their URL, their
   login, a 3-line quickstart (how to point collectors at their own pm2/ledger).

### Pro — $49/mo
Everything in Hosted, plus:
5. Enable the revenue engines on their instance (`/api/revenue/record` open to
   their key) and the grounded-chat panel wired to their Ollama or ours.
6. Offer a 30-minute setup call (calendar link in the welcome email).

## What the customer receives

- **Hosted:** a private, Basic-auth-gated dashboard URL watching *their*
  processes, with the cost ledger, canary board, and P&L panels live; a welcome
  email with credentials and quickstart.
- **Pro:** the above + revenue-engine recording, grounded AI chat, and the
  setup call.
- **Self-host (free):** no fulfillment — the repo/docs link is on the landing
  page; they run it themselves.

## Refund path

- Simple rule: **full refund, no questions, within 30 days** — issued by Steve
  in the Stripe dashboard (Payments → refund).
- After refund: tear down the instance (stop pm2 process, remove subdomain),
  append a negative entry to `revenue-ledger.jsonl` so the P&L stays honest.
- Subscription cancels: customer emails us or uses the Stripe customer portal
  (once enabled live); instance stays up until the end of the paid period.

## Rails

- Live keys, real charges, public exposure of `/landing.html`, DNS for customer
  subdomains — all Steve-gated. Until go-live, every "sale" is a TEST-mode
  rehearsal of this exact runbook.