Welcome email moves from install to first claim. Catches the install-then-claim-days-later cohort. Idempotent via workspaces.welcome_email_sent_at.
Admin ownership transfer route — POST /api/admin/transfer-workspace behind X-Admin-Token header, with an audit row written to a new workspace_transfers table on every transfer.
Concurrent claim safety — claim UPDATE now guards on claimed_at IS NULL so two simultaneous verifies can't silently overwrite each other.
Install race fix — workspace insert replaced with upsert on discord_guild_id, eliminating opaque "workspace_insert" errors when two installs hit the same guild at once.
Database invariant — CHECK ((owner_user_id IS NULL) = (claimed_at IS NULL)) makes the "impossible" mixed state actually impossible. Trigger now honors a session-local bypass flag for legitimate admin transfers.
Day 19 — Onboarding email live + beta promo + adapter scaffold
2026-05-23
Welcome email pipeline verified end-to-end. First successful Resend delivery to a real installer; branded HTML template with magenta #820855 accent, three first-move steps, dashboard CTA.
Beta promo live — Stripe coupon BETA_FREE_30D (100% off first month, repeating, max 10 redemptions, expires 2026-06-30) and customer-facing code BETA-FREE-30D (first-time customers only). Now wired into outreach drafts.
GET /install short-link added — acortia.com/install now 302s straight to the Discord OAuth authorize screen. The old /api/discord/install remains the OAuth callback.
Multi-platform foundation — scaffolded src/adapters/base.ts with the IAdapter contract. Discord today, Slack and Teams adapters slot in here post-launch.
Beta outreach: 3 Tier-1 candidates research-verified with public source citations; ready-to-send drafts for Vibe Coder Conf 2026 sponsor pitch, vibec0de community partnership, and an indie-to-indie X DM.
Day 18 — Apex live + safer user-facing errors
2026-05-21
acortia.com is live. Apex + www now 301 to api.acortia.com via Cloudflare zone-level Redirect Rule.
Discord slash commands (/ask, /save, /upgrade) no longer echo raw error messages back to users — generic "something went wrong" copy with a support email, full detail in server logs.
Stripe webhook 400 reply tightened — returns signature_invalid instead of raw SDK error text.
Day 17 — Polish + recent queries pane
2026-05-21
Workspace dashboard now shows Recent queries — last 10 questions asked per workspace.
Tighter logging across install, auth, and ingest paths — better incident triage; no behavior changes.
Re-install audit pass — confirmed workspace re-bind behavior across kick and re-add scenarios.
Stripe BETA-FREE-30D promo code wired for the closed-beta cohort.
Day 16 — Active members metric + onboarding email scaffold
2026-05-17
Dashboard adds an Active members card — distinct Discord users who’ve run /ask in your workspace.
Onboarding email scaffold (Resend) wired into Discord install — new workspaces will get a welcome email with the first three moves: /save, /ask, /upgrade. (Goes live once the production API key lands.)
Footer parity across /welcome and /docs — Changelog and Status links now reachable from every public surface.
commit: 62fda98
Day 15 — Public /status + /changelog + expanded /docs
2026-05-16
Public status page at /status — live service indicator, latest deploy commit, database ping latency. No login required.
Public changelog at /changelog — this page. Backfilled from Day 7.
/docs expanded: troubleshooting section, advanced FAQ (RLS isolation, retrieval thresholds, embedding model rationale), and an error-code reference.
commit: 1d1ebe0
Day 14 — Beta outreach bundle
2026-05-16
9 launch-prep documents (Show HN, IH, r/saas, Twitter thread, case study templates, ICP target list, DM scripts) committed to repo for the operator team.
commit: b2c94ae
Day 13 — /welcome + /docs shipped
2026-05-16
Post-checkout thank-you page (/welcome) and a full single-page docs surface (/docs) covering install, slash commands, billing, claim model, support.
commit: 3dc9e17
Day 12 — Stripe billing portal + dashboard polish
2026-05-16
“Manage billing” link on the dashboard (one-click to Stripe customer portal).
Empty-state CTAs that link straight to the Discord install URL.
“Last updated: Xs ago” hint that ticks every 15 seconds.
commit: 592ab56
Day 11 — Re-install history + historical-email claim
2026-05-16
The bot now keeps a full installer history on every re-install; the original installer can always claim back the workspace even if someone else re-added the bot in the meantime.
commit: a00250b
Day 10 — Workspace dashboard skeleton
2026-05-16
First version of /dashboard: HMAC-signed session cookies, workspace overview card, last 20 artifacts, last 10 queries, sign-out.
commit: a4f6b45
Day 9 Pt2 — Branded email + apex DNS to Cloudflare
2026-05-14
Magic-link emails now send from noreply@acortia.com with brand-styled HTML.
acortia.com DNS migrated to Cloudflare zone.
Day 8 — Magic-link OTP claim end-to-end
2026-05-10
You can now sign in on the web with the same email you used during install, and claim your workspace.
Day 7 — Public Discord install + workspace auto-create
2026-05-09
“Add to Discord” button on the landing page; installs the bot and creates your workspace automatically.