Overview
Everything the console can answer, one tap away. Personal data is masked until you ask for it, and every reveal is written to the audit log with your reason.
Signup funnel, plan mix, trials, referrals, orgs, cancellations, co-op leads.
AccountsEvery subscriber, their plan and trial state, and the per-account levers: extend a trial, grant AI quota, reveal PII.
Feedback & problem reportsWhat families sent from the help button in the app, with the page they were on. Reply in free text and they get a branded email.
Customer reviews5-star ratings and comments from the in-app prompt. Browse, filter, and download the raw CSV.
Email campaignsBranded sends from admin.10talentslearning.com. Two-person approval rule, recipient cap, opt-in-only audience.
Confirmation emails that failed to send, the provider error behind them in plain English, and the depth and age of the retry queue.
DiagnosticsWorker 500s, cron failures, and browser-reported JS errors — grouped by fingerprint and ranked, with auth / email / AI rollups alongside.
StorageD1 size and table row counts, R2 bytes and object count, top accounts by storage. Daily snapshots, 30-day trend.
Audit logWho did what, to which account, and the reason they typed. Filter by actor, action, or target.
Accounts
Every subscriber, their plan and their trial state. Open a family to extend a trial, grant AI quota, or reveal the contact details a support call needs.
Subscribers
| Family | Plan | Trial | Students | Last login | Created | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Storage
D1 size and per-table row counts, R2 bytes and object count, and the families holding the most of it. Snapshotted daily.
Loading…
30-day trend (R2 bytes)
Per-table row counts
Top 50 accounts by R2 bytes
| Account | Photos | Trips | Records | Attachments | Total |
|---|
Numbers reflect what subscribers uploaded (sums of the
bytes columns on student_photo_history,
field_trip_photos, assignment_attachments, and
record_submissions). Orphan blobs
from failed deletes — if any — are not counted.
Audit log
Who did what, to which account, and the reason they typed at the time.
| When | Actor | Action | Target | Payload |
|---|---|---|---|---|
| Loading… | ||||
Diagnostics
Errors and system health, grouped so the loudest failure is the first thing on screen.
Error volume
Worker 500s, cron failures, and browser-reported JS errors from error_log (30-day retention). Auth, email, and AI rollups read their own ledgers.
Errors per day
Top errors
Grouped by fingerprint (source + code + route + normalized message). Click a row to filter the recent list below to that group.
| Count | Source | Code | Route / page | Message | Accounts | Last seen |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Recent errors
Click a row to expand its stack trace.
| When | Source | Code | Route / page | Message | Account |
|---|---|---|---|---|---|
| Loading… | |||||
Companion failure rollups
Auth failures by step + code
| Step | Error code | Count |
|---|---|---|
| Loading… | ||
Auth events
The audit trail behind the ref codes shown on /signin errors — paste a user's ref to see exactly which step failed and why.
| When | Ref | Step | Outcome | Code | Detail | Account |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Reviews
What families said when the app asked — two days before a trial ends, and 60 days into a paid subscription.
| When | Rating | Trigger | Family | Comment | |
|---|---|---|---|---|---|
| Loading... | |||||
Feedback
Problem reports and questions families filed from inside the app. The status chip is the queue — anything still new is somebody waiting.
Replying emails the family a branded answer and drops a notice in their in-app bell; it does not reveal your address to them.
| When | Report | Family | Status | Actions |
|---|---|---|---|---|
| Loading... | ||||
Leads
Guide-page captures and co-op inbound, with the consent scope each one signed up under.
Guide leads opted in to "occasional record-keeping updates" only — honor the consent scope (see plans/08_design_rulebook.md §10) before any send.
| When | Source | Status | |
|---|---|---|---|
| Loading... | |||
Whether the transactional mail is landing, and the campaign queue that goes out on top of it.
Delivery health — confirmation emails
Failed sends from error_log (verification_email_not_sent), and the notification_log retry queue the */15 sweeper drains. A queue that only grows means the provider is rejecting everything.
Recent confirmation-email failures
| When | Provider error | Send site | Queued for retry | Account |
|---|---|---|---|---|
| Loading… | ||||
Notification queue by kind and status
Sent rows are purged after 30 days and failed rows after 90; queued rows are never purged, so anything old here is stuck.
| Kind | Status | Rows | Last attempt |
|---|---|---|---|
| Loading… | |||
Campaigns
Branded sends from admin.10talentslearning.com. Two-person approval rule, recipient cap, opt-in only audience.
| Name | Status | Recipients | Sent | Failed | Created |
|---|---|---|---|---|---|
| Loading… | |||||
Field trips
Nothing a family shares reaches other families without passing through here.
Ideas submitted by families
Approving publishes the idea to every family. Rejecting hides it permanently; the family is not notified either way.
| Idea | Category | Reports | Actions |
|---|---|---|---|
| Loading… | |||
Tips awaiting review
Free text a family wrote for other families. Approving only makes it eligible — it still shows nothing until the idea clears the cohort floor in the Sunday recompute.
| Idea | Tip | Actions |
|---|---|---|
| Loading… | ||
Reported ideas
Ordered by report count. Hiding pulls an idea out of browse without deleting the trips already built from it.
| Idea | Status | Reports | Reasons | Actions |
|---|---|---|---|---|
| Loading… | ||||