Waitlist signups Curiosity-page signups — separate from demo users.
Triage inbox
One unified feed across disputes, incidents, reports, services, tickets, mod queue, deletions, and blocked sign-ups. Click any item to jump to its handler tab.
Loading…
User reports
Reports filed by members against profiles, messages and content. Open the reported item, then resolve or dismiss — adding a note sends the reporter an update inside the app.
Loading…
Account deletion requests
Demo and beta users can request account (and optional data) deletion. Action each within 7 days of the request.
Support tickets
User-submitted support requests from the beta app. Resolve them once you've replied — resolved tickets stay visible for context.
Users
Keyword suggestions
When a member types a word that isn’t in the catalogue and taps “suggest”, it lands here. Approve it and the matching engine automatically files it into the right dimension and tiers (by nearest-neighbour) so it ladders like every other keyword — it goes live on members’ next load. Reject discards it.
Loading…
Approved & live
Service approvals
First-time providers go through review before going live. Review each listing, then Approve (publishes + marks provider as approved going forward) or Reject (sends back to draft).
Loading\u2026
Add admin user
Admins sign in at mepfe.dev with their username + password. Created here only.
Admin users
Plus your owner master password, which always works.
Subscriptions (active subscribers)
All users with a paid plan or in a trial. Filter, sort, export. Real data from app:billing:<uid>.
Loading…
Loading…
Revenue overview
Loading…
Plan distribution
Active subscribers across all tiers
MRR (Monthly Recurring Revenue) by tier
Monthly recurring revenue contribution
Subscription breakdown
Marketplace GMV (Gross Merchandise Value)
Net MRR movement (plan changes)
Stripe Connect health
Computed from KV billing records and engagement payments. For true cash reconciliation open the Stripe Dashboard. Operating costs are tracked separately in the Costs tab.
Engagements — global marketplace
Status mix
Loaded engagements grouped by lifecycle state
Paid engagements · last 12 weeks
Weekly gross volume (USD) on paid engagements
Load engagements to begin.
Activation funnel
From sign-up to paid. Each stage shows absolute count + % of previous stage + % of top of funnel. Cohort scope toggles below.
Funnel stages
Drop-off from signup → paid
Tier mix · cohort
Plan distribution within scanned cohort
Stage detail
Unit economics — LTV (Lifetime Value) / CAC / Payback
Marketing spend is recorded per month + channel below. CAC, LTV and payback are computed per tier using your spend, signup counts, plan pricing, and the two editable assumptions (gross margin, monthly churn). Each variable is shown so you can verify the math.
Add marketing spend
LTV vs CAC · per tier
Contribution LTV beside CAC per signup
Payback months · per tier
Shorter is better — under 12mo is healthy
Per-tier breakdown
Marketing spend records
Retention cohorts — week by week
Each row is a signup-week cohort (last 12 weeks). Each column is weeks since signup (0 = signup week itself). Cell shows % of that cohort active that week — based on session timestamps. Healthy SaaS curves stabilise above 30% by week 8.
Average retention curve
Mean % active across all cohorts
Cohort size · last 12 weeks
Signups per week — wider bars = bigger cohorts
Retention triangle
Churn & plan movement
Every paid plan transition logged since billing went live. Classifies each movement as new paid / upgrade / downgrade / cancel. Last-month churn rate uses current paid base + cancels as denominator (rough until we have point-in-time snapshots).
Loading…
Monthly plan movement
New paid + upgrades above zero, downgrades + cancels below
Last-month churn rate · per tier
Cancels ÷ (current base + cancels)
Per-tier breakdown
Recent transitions
Badge management
Add custom auto-awarded badges by picking a metric, an operator, and a threshold. Code-defined badges (the built-in ones) are listed below for reference.
Create new badge
Your custom badges
Built-in badges (title, description, icon, tier + threshold are editable — original code values are restored on Reset)
⚕ DIAGNOSTICS
Live checks on critical platform integrations. Use when a user reports a problem you can't reproduce.
Stripe configuration
Click "Run check" to verify keys, price IDs, and webhook.
Tracing a user's payment errors?
Billing failures now flow into the Event Stream as billing_failed events. To see them for a specific user, open the User journey tab and search by uid. To see all recent failures system-wide, open Event stream and filter by billing_failed.
Admin audit log
Every admin mutation logged here. Records keep the most recent 10,000 entries.
Load audit log to begin.
Posts moderation
Load posts to begin.
Video moderation
Every video post is listed here with author, thumbnail, and inline preview. Use takedown for any video that violates the Community Guidelines. Ban-hash blocks the same file from being re-uploaded. Add-strike counts toward the user's 3-strike auto-suspension.
Click Load videos to view the queue.
Moderation queue
Auto-flagged content from the text moderation layer (OpenAI Moderation API). Borderline content goes through with a flag; high-confidence harmful content is blocked at write time. CSAM is handled by a separate path (Cloudflare scanning) and reports to NCMEC.
Load to begin.
Services — global list
Load to begin.
Courses — global list
Load to begin.
Ventures — global list
Load to begin.
Products — global list
Load to begin.
Groups
Load to begin.
Founding DOER ledger
Founding transitions · by month
Grants above the line, revokes below
Net Founding pool
Current vs lifetime grants & revokes
Current Founding DOERs
Grant + revoke history
Stripe Connect
Creator readiness
Stripe Connect onboarding status
Capability split
Charges vs payouts enabled
Creators
Operating costs
Live spend across Vercel, Anthropic, OpenAI, Google, Stripe, Cloudflare, Resend. Variable usage shown separately from fixed monthly subscriptions.
Click Refresh all to load.
▲ Vercel
…
Loading…
✦ Anthropic (AI Mentor)
…
Loading…
◉ OpenAI (moderation)
…
Loading…
◇ Google Web Risk (URL safety)
…
Loading…
✉ Resend (email)
…
Loading…
⚡ Stripe (processing fees)
…
Loading…
☁ Cloudflare (R2/Workers)
…
Loading…
⚡ Upstash (Redis KV)
…
Loading…
∞ Fixed / annual costs
…
Loading…
Setup: Provider env vars: VERCEL_API_TOKEN, ANTHROPIC_ADMIN_API_KEY, OPENAI_ADMIN_API_KEY, GOOGLE_WEB_RISK_KEY, STRIPE_SECRET_KEY, RESEND_API_KEY, CLOUDFLARE_API_TOKEN+CLOUDFLARE_ACCOUNT_ID. Annual costs configurable via COST_* env vars.
Where a provider's token is missing, costs are estimated from our internal usage counters.
Cached for 1 hour per provider to respect rate limits. Click Refresh all to force re-fetch.
Backup & Restore
View saved backups in Vercel Blob storage, and restore from a snapshot if needed.
Restore is destructive — it overwrites current data. Triple-confirmed before executing.
💾 Run backup now
Triggers a full platform backup immediately. Writes backups/doer-backup-TODAY.json to Vercel Blob. Use this before launches or risky changes. (Daily cron also runs at 3am UTC.)
⚡ Restore one user (upload backup file)
Download the backup JSON from Vercel Dashboard → Storage → Blob, then upload it here. Restores only the chosen user's app:state:UID — other users untouched.
Download path: Vercel Dashboard → your project → Storage → Blob → click a doer-backup-*.json file → Download button. Save to your Downloads folder.
Daily full backups
Click Refresh list to load.
Hourly incremental backups
Click Refresh list to load.
Restore plan
Select a full backup above to begin.
🎯 Restore Drill (safe — uses test KV)
Verifies the backup is restorable end-to-end against a SEPARATE test KV instance. Production data is untouched.
Requires TEST_KV_KV_REST_API_URL + TEST_KV_KV_REST_API_TOKEN env vars (Vercel auto-prefixes — already set if you completed the Upstash integration setup).
How it works: Pick a full backup above → drill restores it into the test KV → verifies 5+ sample records (users, courses, services, published-courses zset, engagement messages list) match production → reports PASS/FAIL.
⚠️ Destructive operation
Restoring will overwrite every record matched in the backup file. Existing data not in the backup is preserved. Use dry-run first.
Marketplace health
Listings by pillar
Published Services · Courses · Ventures
Buyer / Seller balance
Unique participants in marketplace
Listings by pillar
Engagements + repeat behaviour
Platform health
DAU/MAU + stickiness from session timestamps. Support SLA from ticket first-response times. Ticket age tells you whether anyone\'s on top of the queue.
Loading…
Daily unique users · last 30 days
Unique uids with a session each day
Open tickets · by age
Older buckets = SLA risk
Tickets · last 12 weeks
Opened vs resolved per week
Tickets · by category
Where support load comes from
Blocked signups (under 18)
Users blocked from signing up after entering a date of birth under 18. Block lifts when either: (a) they would turn 18 per the date they entered, or (b) 12 months pass (whichever comes first).
Use the demand stats below to gauge whether to prioritise opening DOER to younger ages. To clear a block manually (verified typo via admin@itsadoerthing.com), click "Clear block".
Loading…
Currently blocked attempts
Loading…
Disputes
Filed by buyers (or providers) against an engagement. Each dispute carries a claim (non-delivery / quality / misrepresentation / refund refused). Resolve closes the dispute. Refund recommend stamps the engagement for action — actual Stripe refund must be issued separately from the dashboard.
Loading…
Top disputed creators
Provider standing — higher = more risk
Disputes · status
Open vs resolved overall
Disputes
Creator standing — top 10 by open disputes
Help Centre articles
User-facing help articles powering the Help & Support page. Markdown bodies; inline cross-links work via [label](screen:my_profile) or [label](article:slug).
Seed corpus— click to add any missing articles from the bundled 65-article DOER-voice content. Existing articles are skipped, so safe to click any time.
Add new article
Ideas inbox
User-submitted features, bugs and improvements. Triage with status, jot triage notes, or promote to roadmap (creates a Roadmap entry tied to the original idea).
Loading…
Status mix
All ideas by current status
Type mix · current view
Feature vs bug vs improvement
Items
Incident log
Every operational incident — outages, payment failures, broken features. Severity 1 (catastrophic) through 5 (cosmetic). Status flow: open → investigating → identified → monitoring → resolved. Each resolved incident should have a post-mortem.
Add / edit incident
Incidents
Event stream
Live feed of the unified event log (Wave 5 foundation). Every meaningful user action emits a structured event here. Filter by day / type / pillar. Hot tier holds last 60 days.
Loading…
Events by pillar · today
Volume per pillar in the selected day
Event type mix
Top types in the current filter window
Recent events
User journey
Full timeline for one user — onboarding intent, mentor conversations, builder attempts, search activity, recommendations, outcomes, all in one place. Replaces the legacy "list of sessions" view with a real qualitative review tool.
Enter a uid or email above to load that user\'s full journey.
Engagement depth
Classifies every user by activity depth. Scoring: posts (×2), connections (×1), courses (×6), services (×5), ventures (×6), engagements as buyer (×2) / provider (×3) / paid (×4), streak (capped +20). Tiers: Lurker (0-1) · Casual (2-7) · Regular (8-19) · Power (20-49) · Super-DOER (50+).
Loading…
Tier distribution
How many users at each engagement depth
Pillar coverage
How many distinct pillars users touch (0-4)
Top contributors (highest engagement score)
Super-DOER spotlight (your champions)
Client errors
Every JavaScript error in beta.html captured via window.onerror + unhandledrejection. Rate-limited per fingerprint (4 per minute) so one broken loop can\'t flood the stream. Highest-count fingerprints at the top — that\'s where to fix first.