Overview
Tests completed by skill
Plan breakdown
Recent signups
Users
Performance Analytics
Improvement — first vs latest score
Tests needed to improve 0.5 band
User journeys — score over time (top active users)
Community
User suggestions
Open a vote — set 3 candidates
Current vote results
Manual topic override
Recent discussion replies
Plan Management
Grant / change plan
School / bulk provisioning
Paste a list of emails (one per line) to bulk-grant a plan to a school cohort.
Active paid users
Waiting list — free access applications
Matching a token to an applicant is automatic — DiscussEarth reserves a free seat as paying subscriptions fund the token pool, which is what creates a "pending" offer below. Nothing is emailed and no plan is granted until you personally review and send it — that step (and swapping in someone else for a given offer) is deliberately manual, so a match still gets your eyes on it before anyone's notified. Sending and overriding here work through the same grant-admin-worker as the standalone grant-admin.html page — this is that page's functionality, folded into one dashboard — so a token can never be double-spent between the two.
Pending offers — ready to send
All applications
Schools
Create a school when one signs on, then assign whichever of their staff should be the first
Coordinator (sees every class in the school). That coordinator can then add their
own teachers directly from admin-school.html — you shouldn't need to provision every
teacher by hand. The person you assign here must already have a DiscussEarth account (they've signed
up at least once) — this doesn't create a new login, it upgrades an existing one.
Create a school
Assign a coordinator
Sets an existing account's role to admin (shown to them as "Coordinator") and links it to the school below. They can then log into admin-school.html.
All schools
Click a school to see its classes, then a class to see its students — useful for helping someone with a problem without needing to log in as their coordinator. Upload a logo to personalize a school's own dashboard (admin-school.html) for its coordinator — it's not shown to students.
Costs
Real AI-usage cost per school, metered from every graded test and chat call. Set a monthly budget per school to turn its bar into a health meter — green while under budget, amber approaching it, red over. Schools with no budget set show grey (no threshold to compare against yet).
By school
Unattributed usage
Usage with no school on the account — logged-out visitors, the marketing-site chat widget, or students who haven't been assigned to a school yet. Not billable to anyone, shown here so it doesn't just disappear from the total.
System health
Run a health scan
Checks every service the site depends on — Supabase, each AI provider (Anthropic, ElevenLabs, Azure Speech), every Cloudflare Worker, Resend, and Stripe — and tells you in plain English what's wrong and how to fix it. The Anthropic checks each send one real 1-token request (a tiny, real cost, a fraction of a cent total) because that's the only way to actually confirm there's usable credit, not just a valid key.
⚙ Worker URLs & shared secret (edit once, saved on this device)
Every Worker needs a secret called HEALTH_CHECK_SECRET set to the same value below
(Cloudflare dashboard → that Worker → Settings → Variables and Secrets → Add). It's low-sensitivity —
it only unlocks a read-only status check, never real user data — but keep it out of public view same as any secret.
How to read a result
Healthy — reachable and working normally.
Key rejected — the secret configured on that Worker doesn't match what the provider expects anymore
(revoked, retyped wrong, or rotated). Fix: re-copy the exact key from the provider's dashboard into that
Worker's secret.
Out of credit — the account is reachable but has run out of balance/quota. Fix: top up on that
provider's site.
Unreachable — this page couldn't reach the Worker at all. Fix: confirm the Worker is deployed in
Cloudflare and that the URL in the settings above is correct.
Rate limited / provider hiccup — usually temporary; re-run the scan in a few minutes.
Writing test
Runs a fixed panel of essays with human-agreed target scores through the exact production grading prompts —
IELTS Task 1/2 (writing-tests.js) and TOEFL Email/Discussion (toefl-writing-scoring.js).
Run the relevant section after any change to either file's calibration rules to make sure a fix for one case
didn't break another. Each case calls the live grading worker for real, so this costs real API tokens and
takes a few seconds per case — same as a student submitting.
IELTS Writing
Target ranges below were set by Simon based on human judgement of what each essay deserves; a case going red means the AI's score fell outside that agreed range, not necessarily that the AI is "wrong" — use it as a prompt to re-read the comment and decide whether the range or the prompt needs adjusting.
TOEFL Writing
Calls the same production TOEFL grading function (gradeConstructedResponse), same worker, same rubric + calibration note used live for Email and Academic Discussion tasks. TOEFL scores holistically as a single 0-5 integer, so target ranges here are narrower bands, not four separate criteria.
Speech recognition test
Read reference sentences aloud through the same Azure Speech SDK code path speaking tests use in production
(speaking-tests.js / toefl-speaking-tests.js), and see the Word Error Rate against
what was actually said. Microphone access is requested the first time you press Record — works best in Chrome
or Edge, over HTTPS.
Microphone access is requested the first time you press Record. Works best in Chrome or Edge, over HTTPS.
| Category | Avg WER | Sentences |
|---|
Click Save inputs to keep your numbers across a refresh — this browser only.
Every default below is either a real measured AI cost from live usage data, or a clearly-labelled estimate you can override. Adjust anything on the left — the P&L, margins, and breakeven on the right update live.
Pricing & subscribers
Real per-unit AI costs editable
Usage per subscriber / month
Cost per subscriber / month
| Basic | Premium | Sponsored | |
|---|---|---|---|
| Real AI cost | $0 | $0 | $0 |
| Price charged | $0 | $0 | $0 (funded) |
| Gross margin / sub | $0 | $0 | $0 |