DiscussEarth Admin

Admin access

Restricted to authorised accounts only. Log in first →

This account does not have admin access.
DiscussEarth Admin Dashboard
← Back to site
Simon Whalley

Overview

Total users
Paid users
Tests completed
New this week
Incomplete signups

Tests completed by skill

Loading…

Plan breakdown

Loading…

Recent signups

Loading…

Users

Loading…

Performance Analytics

Avg reading band
Avg writing band
Avg listening band
Avg speaking band

Improvement — first vs latest score

Loading…

Tests needed to improve 0.5 band

Loading…

User journeys — score over time (top active users)

Loading…

Community

User suggestions

Loading…

Open a vote — set 3 candidates

Current vote results

Loading…

Manual topic override

Recent discussion replies

Loading…

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

Loading…

Waiting list — free access applications

Total applications
Waiting
Offered (pending send)
Sent, awaiting claim
Rejected

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

Loading…

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.

Loading…

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).

Total cost this period
Schools with usage
Over budget
Unattributed / overhead

By school

Loading…

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.

Loading…

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.

Cases passed
Cases run

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.

Cases passed
Cases run

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.

Overall Word Error Rate
Sentences with 0% WER
Worst category
By category
CategoryAvg WERSentences

Real-cost pricing calculator

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.

Why this exists: the earlier pricing model assumed unlimited Basic-tier speaking/writing tests cost nothing extra, and that ElevenLabs audio was a $0 sunk cost. A real completed IELTS speaking test was measured at $0.2076 Azure + $0.1014 Anthropic + $0.0083 ElevenLabs ≈ $0.32, and a real 10-minute DEB session was measured at $0.16 (Anthropic + ElevenLabs — no Azure, since DEB uses browser speech recognition). ElevenLabs is still actively metered, not a sunk cost. Speaking and writing tests are priced separately below — a writing test never touches Azure or ElevenLabs (no audio at all), just Anthropic grading. A real graded IELTS writing test (both tasks) was measured at $0.0337 + $0.0360 ≈ $0.07, well under the $0.32 speaking test; lumping them together into one blended rate understates writing-heavy usage and overstates speaking-heavy usage. This tool lets you see margin as a function of how much subscribers actually use — which matters if displaced/sponsored students use the platform more heavily than a typical paying subscriber.

Pricing & subscribers

Monthly price
Paying subscribers
Sponsorship (1-for-1 refugee/displaced program)
Fixed overhead

Real per-unit AI costs editable

Usage per subscriber / month

Basic tier
Premium tier
Monthly revenue
$0
Monthly AI + sponsor cost
$0
Net profit / month
$0
Breakeven subscribers

Cost per subscriber / month

BasicPremiumSponsored
Real AI cost$0$0$0
Price charged$0$0$0 (funded)
Gross margin / sub$0$0$0

Net margin sensitivity vs. speaking tests per subscriber / month

Varies speaking-test volume only (the most expensive per-unit driver, real $0.32/test) — holds writing-test count, DEB, and everything else at current input values, and applies the same speaking-test figure to both Basic and Premium to isolate the effect of usage volume. Dot marks your current Basic-tier speaking-test input.