SHIPPED Stripe Billing — live
Apr 16, 2026. Two Stripe products, four prices, webhook, and Customer Portal provisioned in the ClearSpeed Stripe account (live mode). Checkout route fixed (was broken — frontend sent plan+interval, route expected priceId). Webhook now resolves tier by price-ID map, not by amount-sniffing.
- Pro Monthly $29 (
price_1TN3kF...u1xLoGrx)
- Pro Annual $228/yr = $19/mo, 34% off (
price_1TN3kF...9PxaGY1A)
- Coach-Pro Monthly $23 (
price_1TN3kG...77UeyQDG)
- Coach-Pro Annual $180/yr = $15/mo (
price_1TN3kG...B1JanwrQ)
- Webhook at
/api/stripe/webhook, 6 events, signature verification ✓
- Customer Portal: plan switching, payment updates, invoice history, cancel-at-period-end with reason capture
SHIPPED Killed $149 "Professional" coach seat
Apr 16, 2026. Prior pricing page had a $149/seat "Professional" tier aimed at coaches. The unit economics broke: one coach with 20 clients would burn 300-400 LLM calls/mo against $149 revenue. Replaced with individual-first model where each client is their own Pro subscriber (at the discounted $23/mo coach-referred rate) and the coach gets a free dashboard.
SHIPPED Reverse trial — 7 days of Pro, no card
Apr 16, 2026. Every new signup automatically gets Pro entitlements for 7 days — computed from users.created_at, no schema change, no cron. After day 7, auto-rolls back to Free tier (opportunities beyond 5 stay but become read-only — no rage-churn). Billing card shows trial countdown. Pricing page carries the "7 days of Pro free, no card required" hero callout.
Expected lift: free→paid conversion from ~3% to ~10-12% based on Superhuman/Notion/Linear benchmarks.
SHIPPED Pricing page rewrite
Apr 16, 2026. Removed the $149 Professional tier. Added "For Coaches" tier (free dashboard + referral link). Added enterprise / outplacement quote-link footer. Added reverse-trial hero callout. Restored coherence between the GTM plan and what the site actually offers.
SHIPPED Financial model — pricing alignment
Apr 16, 2026. financial-model-april-2026.md updated to reflect the GTM-aligned pricing. Blended ARPU revised from ~$49/mo (old Starter/Professional/Unlimited ladder) to ~$22/mo (Pro direct $25 + coach-referred $19 + enterprise $17). Volume from coach + enterprise channels expected to offset the lower ARPU at ~2-3× users, keeping the ~$27K MRR Month-18 target on track.
SHIPPED Coach referral landing page
Apr 17, 2026. Route /coach/[slug] now live. Lands on a coach-branded page, sets a 30-day pcm_coach_ref cookie, forwards to signup. The checkout route reads the cookie and auto-applies the Coach-Pro pricing ($23/$15). Works even if the user doesn't sign up immediately — cookie persists for 30 days across sessions.
Test URL: https://www.purplechipmonk.com/coach/demo
SHIPPED Day-5 trial nudge email
Apr 17, 2026. Added to /api/cron/lifecycle-emails (runs daily at 10am UTC). Users ~5 days into the 7-day reverse trial who haven't converted get a one-shot email: "Your Pro trial ends in 2 days." Skips anyone who already has an active paid subscription. Uses subscription_updates email category — user-controllable opt-out honored. Dedup: 168 hours (never twice).
SHIPPED Day-8 trial-ended re-engagement email
Apr 17, 2026. Added to the same cron. Users whose 7-day trial just expired (day 8, ±12h) and who didn't convert get a "here's what you kept, here's what changed" email with honest downgrade framing — not a nag. Uses re_engagement category. One-shot (720h dedup). Designed to match the reverse-trial philosophy: pressure comes from loss aversion on day 7, not from hounding after.
SHIPPED Persistent trial banner in sidebar
Apr 17, 2026. <TrialBanner /> component injected above the footer in the main sidebar. Renders only when the user is in the reverse trial (no paid sub + account <7d old). Shows days-remaining + "Lock in $19/mo" CTA. Color shifts to amber on the final day. Session-scoped dismiss so it doesn't nag on every page. Collapsed sidebar mode shows a compact day-count badge. Uses the same 5-minute cached-fetch pattern as the rest of the sidebar so it doesn't hammer /api/billing/trial.
SHIPPED Origin-story content drafts
Apr 17, 2026. All channel-native drafts written and ready to publish. Six pieces total in docs/marketing/origin-story.md: LinkedIn (named, 1,300 chars), Reddit r/recruitinghell (anonymous, self-post), Product Hunt ship page + maker comment, TikTok/Reels 60-second face-to-camera script, career-coach cold outreach template, and the Month-3+ transition plan to user-win content. Each piece ends with a clear CTA to the free tier.
Publishing sequence lives in docs/marketing/gtm-execution-roadmap.md Phase 1, Week 1.
SHIPPED 8 bug fixes from Zach's Apr 17 triage + 2 architectural follow-ups
Apr 17, 2026. All 8 tickets worked through same day. Session Open gating, New Chat stuck, PDF upload routing, Work History empty guard, fail-open gate warnings, daily digest date window, playbook fragment filter, and double-$$ comp sanitizer. Plus 2 architectural launch-critical follow-ups: resume-lab → canonical_background hydration, and opportunity-evaluation hard-fail rules. 5 GH issues opened for remaining non-critical audit work. Commits: 056dcb3, 148a012, 4a3c0e3, 3b3c425.
SHIPPED Free-tier API-layer caps
Apr 17, 2026. Compiled-resume count per month now enforced in the save_compiled_resume tool with a clean 402-style response + /pricing upgrade link. countCompiledResumesThisMonth() query on compiled_resumes table. Free tier (1/month) blocked; Pro / reverse-trial users unaffected. Most users won't hit this for 7 days thanks to the reverse trial.
SHIPPED Slack #tickets auto-ingest cron
Apr 17, 2026. Scheduled Claude Code task runs every 15 min, polls PurpleChipMonk Slack #tickets channel, triages new tickets, ships trivial fixes inline, creates GH issues for non-trivial, posts threaded acks to Slack. Task ID: pcm-tickets-ingest. Guardrails: never force-push, typecheck failure reverts, Justin's commands default to GH issue rather than auto-execute. Run log at ~/.claude/scheduled-tasks/pcm-tickets-ingest/run-log.jsonl.
SHIPPED LinkedIn posts — Weeks 2 & 3 drafted
Apr 17, 2026. docs/marketing/linkedin-posts-weeks-2-3.md. Week 2 (Apr 28) = market-intel angle, Pillar 2 content: "I pulled 200 job descriptions this month." Seven data-driven findings, non-promotional, positioned as authority-building. Week 3 (May 5) = Career Ops framework, Pillar 3: "Stop applying to jobs. Start running a pipeline." Six-step methodology, category-creation content. Both posts ship paste-ready with pinned first-comment link, engagement playbook, and Week 4 Product Hunt sequencing notes.
SHIPPED GTM execution roadmap
Apr 17, 2026. Week-by-week task list mapping the GTM plan to real execution. docs/marketing/gtm-execution-roadmap.md. Phase 0 (launch readiness, this week) → Phase 1 (organic launch, weeks 1-4, target 50 paid) → Phase 2 (seed ads + coach channel, weeks 5-12, target 250 paid) → Phase 3 (scale, months 4-6, target 500+ paid). Each task has owner, output, effort (S/M/L/XL), and dependencies. Includes always-on tasks, open decisions, and an explicit "NOT on the roadmap" list to prevent scope creep.
UP NEXT Publish origin-story posts — LinkedIn LOCKED for Tue Apr 21, 7:30am PT
Locked date: LinkedIn post goes live Tuesday April 21, 2026 at 7:30am PT. Playbook: docs/marketing/linkedin-launch-apr-21.md. Calendar events set for the T-24h prep (Mon Apr 20, 8am PT) and the launch window (Tue Apr 21, 7:30-8:30am PT). Rest of Week 1: Reddit r/recruitinghell (Wed Apr 22), Discord soft-launch (Thu Apr 23). Show HN → Week 2. Product Hunt → Week 4.
UP NEXT "Career Ops" trademark filing
USPTO application for "Career Ops" as a category mark. Speed matters — file before competitors notice the positioning. Owner: Justin (legal).
UP NEXT Resume-block & compiled-resume caps (API-layer enforcement)
Free tier limits (3 resume blocks, 1 compiled resume/mo) exist in TIER_CONFIG but aren't enforced at the API layer. Currently unreachable in practice because every new user is on Pro via reverse trial — but once users start lapsing to Free, resume-lab and compiled-resume endpoints need cap checks with clear upgrade CTAs. Opportunity cap (5) and session cap (10/mo) are already enforced.
UP NEXT First real-card smoke test
Owner: Justin. Sign up with a fresh account, confirm the 7-day trial shows in Settings + sidebar banner, run checkout with a real card, verify the webhook round-trip updates the sub in Supabase, refund the charge. Mark this card green once done.
LATER Product Hunt launch
Target Tuesday or Wednesday in Month 2 after initial social proof. Prep: 60-second demo video, ship page live 2 weeks before, Reddit + LinkedIn rally on launch day.
LATER Coach cold-outreach (50 coaches)
Per the GTM plan Month 1-2 tactics. LinkedIn DM + demo. Activate the Career Ops Certified Coach badge for 10+ client accounts.
LATER Outplacement firm partnerships
Enterprise / B2B2C pilot with 1-2 HR consultancies or outplacement firms. Custom Stripe quote at $15-19/seat, 50-500 seat deals. Month 3+ initiative.
LATER Founding-500 counter gate
Currently the $19/mo annual is the same as the Founding price (no Stripe construct needed). When we hit ~400 annual subscribers, add a counter + "Founding 500 locked — only N left" badge on pricing. Marketing-driven urgency.
LATER Reverse-trial A/B test on trial length
Once we have ≥200 signups on the 7-day trial and a real baseline conversion number, run a 7-vs-14-day cohort test. Superhuman found 7 optimal; we should verify for our use case.
LATER Discord community
Per the Community section. Defer until ~200 active users so channels have density. Kickoff with coach office hours + #introductions + alumni channel.