Dashboard
Message Volume (14 days)
Recent Signups
| Username | Role | Joined |
|---|
Active Users
Loading…
Daily Active Users
Orbits
Loading…
| Name | Tier | Adults | Family | Children | Total | Ext. Contacts | Created |
|---|
Text Moderation
On-device text-classifier model + kill switch. Source of truth lives in Squidex; this panel proxies via the BE so flips propagate to clients within ~60 seconds.
Loading…
Image Moderation
On-device image-classifier model + kill switch. Source of truth lives in Squidex; this panel proxies via the BE so flips propagate to clients within ~60 seconds.
Loading…
Appeals
Loading…
Content Upload
Upload authored JSON straight to Squidex, the same way a model is published. Source of truth for these files is git — crisis/countries/ and articles/<section>/. Upload here when you want a change live without running the CLI.
Crisis helplines
One file per country, e.g. gb.json. Select as many as you like.
All-or-nothing Every card is checked against the same child-safety rules the app enforces. If any file fails, nothing is written — a half-updated set would leave some countries stale with no record of which.
Support articles
Base articles plus their locale overlays (<slug>.<lang>.json).
All-or-nothing validation Every file — base article and locale overlay — is validated, and the overlays are folded into their base article's translations field, before anything is written. If any file fails, nothing is written. Articles are then written one at a time, so a Squidex failure part-way through is reported as a partial write naming exactly which articles landed — re-running the whole batch is safe, it upserts by slug.
Dry run does everything except the write and reports the locale coverage each article would end up with — the way to confirm all seven locales folded in before publishing.
Moderation Feedback
Parent / child verdicts on on-device moderation calls — false-positive triage + retraining signal. The audit log below never carries message text (privacy design, keyed by parent); the training corpus holds the message bodies parents opted in to share (no link back to a user).
Audit log …
Verdict + label trail, keyed by parent. No message text by design.
| Created | Verdict | Model version | Predicted labels | Child | Note |
|---|
Training corpus …
Anonymised rows that carry the shared message text. Deleting a row removes it from the retraining set — permanent, no soft delete.
| Created | Verdict | Model version | Message text | Predicted labels | Note |
|---|
Subscriptions
Loading…
| Orbit | Status | Plan | Renews / Ends | Owner | Price | Created |
|---|
Tier Limits
Caps for each subscription tier. -1 means unlimited. Edits are audited; every change requires a reason.
| Tier | Children | Adults | Family | External | Storage (GB) | Last updated | Edit |
|---|
Mock Data
Spawn test orbits with controlled premium configurations. Generated adults log in via the normal email + password + OTP flow — the mock generator pre-seeds a known OTP per adult so they pass the verify step. Child login codes valid 7 days. Use only on staging.
Remote Config
Per-platform feature flags / values, with an optional minimum app version below which clients see the default instead.
| Key | Value | Description | Platforms | Updated |
|---|
Loading…
Lifecycle Emails
Onboarding & nudge emails sent to orbit owners. Every lifecycle email is listed below with when it fires. The two elapsed-time nudges have an editable day interval; the rest are event-driven and send immediately when their trigger happens. The master switch disables all lifecycle emails at once.
Code TTLs
How long freshly-minted onboarding codes stay valid before they expire. Backed by the server-only app_settings store — changes take effect on the next code minted (within ~30s across replicas), no app update needed. The backend clamps each value; edits outside the shown range are rejected. Platform invite codes are not listed here — they use a per-code expiry chosen at mint time on the Platform Invites page.
Blocking Alerts
Server-controlled startup modals (image + title + description + optional CTA). Apps fetch the highest-priority targeted alert and must display it until acknowledged, or explicitly accepted when acceptance is required. Bumping an alert's version re-shows it to everyone.
Loading…
| Version | Title | Platform | Active | Blocking | Acceptance | Priority | Window | Actions |
|---|
Cross-Region DLQ
Cross-region outbox rows that were dead-lettered — permanently undeliverable (or exhausted) replication events pulled out of their FIFO lane so the conversation keeps flowing. Replay re-enters a row into its lane and redelivers once the underlying cause is fixed.
Loading…
| Reason | Peer | Kind | Conversation | Attempts | Dead-lettered | Last error |
|---|
Conversations
Loading…
| Conv ID | Type | Title | Created by | Participants | Messages | Updated | Status | Actions |
|---|
Waitlist
Loading…
| Source | Signed up | Launch email |
|---|
Feedback
Loading…
| Submitted | Interest | Age | Pricing | Concerns | Trust | Missing | Source |
|---|
Article feedback
Loading…
| Article | 👍 Up | 👎 Down | Total | % Useful | Last vote |
|---|
Contact
Loading…
| Submitted | Message | Source |
|---|
Support cases
Live support chats from adults. Open cases are sorted oldest-waiting first.
Loading…
| User | Status | Messages | Last message | Waiting |
|---|
Platform invites
Single-use or multi-use codes that gate new orbit creation. Plaintext codes are stored so admins can re-display and copy.
Loading…
| Code | Label | Uses | Status | Expires | Created |
|---|