Sign in or create an account to get started
Create the administrator account to get started. This first account will have full admin access.
Pick your grade and subject to get started
"Auto" enables these tools only for grades and topics where they help. Long-press off blocks the iOS Lookup/Copy popup on the drawing surface so kids can draw freely.
Tap the lightbulb for a hint, then keep tapping for AI nudges that get more specific.
The app keeps a rolling list of story titles you've already seen and asks the server for something different. Increase the window if you still see repeats, or reset the list to start fresh.
Reuses the same cache pipeline as reading — Wikipedia photos when available, watercolor AI fallback otherwise, stored in the database so everyone shares the hit.
Definitions come from the free public dictionary API (api.dictionaryapi.dev) — no AI cost. On touch devices, tap a word to see its meaning.
Adds a quick Settings shortcut to the welcome screen. Settings is always available from the user menu (top-right).
Music is generated live (no audio files). Effects automatically dim when your OS has “reduced motion” turned on.
You're browsing as a guest. Sign in to save your preferences and unlock all features.
Loading users…
Loading attestations…
When enabled, users must set up TOTP-based MFA on next login.
MFA Status: Checking…
Scan this QR code with your authenticator app (Google Authenticator, Authy, etc.):
Or enter this secret manually:
✓ MFA is enabled on your account
Users will be locked out after exceeding failed attempts, then automatically unlocked after the specified duration.
Control the NEW tags that highlight recently-shipped features (Practice Mode cards today).
Badges carry a hidden "added-on" date. When the age exceeds this limit the badge auto-hides for every visitor. Saved alongside branding.
Choose which curricula are visible on the welcome screen. Uncheck any you don't want to offer in this deployment. At least one must remain enabled.
Saved alongside branding. Hidden curricula also stop showing up for signed-in users even if it was their previous choice (they will be moved to the first enabled option).
How emphasized words inside question text are styled (e.g. "Which category has the highest value?"). Applies to all problem sets, flashcards, and practice mode.
Saved alongside branding. Default: Bold.
Default minutes shown when a student first opens the learning timer. Students can override per session.
Control what features are available to unauthenticated (guest) users.
Control how the AI tutor communicates with students. Use the live preview on the right to try unsaved changes before applying them.
Sends a real call to the configured model using the values above (no need to save first). Try a question a student might ask.
Configurable restrictions on what the Ask Tutor chat can and can't do. Cheap keyword filters refuse blatantly off-topic messages instantly without spending tokens; the rest is enforced via the model's system prompt. Defaults are tuned for a K-12 study tutor.
Type a sample student message and see whether the current guardrails would block it (without calling the LLM).
Every message the guardrails refused (when audit logging is enabled in Tutor Guardrails). Search, filter, and review what students are trying to ask.
Every Ask Tutor / Hint / Explain call is logged here so you can spot patterns, tune prompts and guardrails, and find topics worth turning into Smart Builder tiles. Prompts are PII-redacted using the same setting as the Refusal Log.
Describe a topic in plain language; the AI proposes a generation spec; review, preview, and publish it as a real topic for students. All output is reviewed by you before it goes live.
When set, the AI embeds the requested visual element inside every generated question.
You can hand-edit before previewing. Invalid JSON disables Save.
Show announcements and messages to all users.
Control how new users can sign up for the platform.
| Code | Uses | Expires |
|---|
No invite codes yet.
| Username | Display Name | Requested |
|---|
No pending registrations.
| Topic | Count | Accuracy |
|---|
| Difficulty | Count | Accuracy |
|---|
| Game | Plays | Avg Score | Best |
|---|
Bookmarked reading passages. Tap the ☆ on the reading screen or inside the Story modal to save one. Guests keep bookmarks on this device; signed-in accounts sync them across devices.
No saved stories yet.
Expand the built-in 800+ pool by asking the AI to invent new questions for any category. Generated questions are stored in the database and appear for every player (illustrations come from the same pipeline as reading passages).
A floating timer that helps students manage their study time. Visible only during Learn mode.
The timer floats over the app during Learn mode. Drag to reposition; double-click to snap back to the chosen anchor. Suggested length defaults from your grade level.
Every autonomous and on-demand agent in the system. Read-only telemetry — opening this tab does not cost any LLM tokens.
Loading…
An assistant you describe in plain English. When you click Run now on the Library tab, it reads files (and/or DB stats) and writes a Markdown proposal for you to approve or reject. Nothing is changed automatically.
style.css for spacing/colour drift.alt text and low-contrast pairs in index.html.A short, descriptive name. Shown on the agent card.
A single emoji icon (still used on agent cards).
Free-text tag (e.g. Design, Quality, Content) — used for grouping only.
One sentence. Doubles as a hint for Suggest with AI.
The most important field. Tell the agent exactly what to look at, what to flag, and how to format the answer. Min 20 characters. The runner appends a short rubric so output is always Markdown.
Loading tools…
Pick only the tools the agent actually needs. Fewer tools = faster, cheaper, more focused.
Selecting a model here is per-agent. Your global AI Provider settings stay as-is.
Custom agents need a model that supports function calling. Verified-good: gpt-4o-mini, gpt-4o, claude-3-5-sonnet, gemini-2.0-flash.
Reports written by your agents. Approve to apply (manually) or reject to dismiss.
Run a custom agent to create a proposal.
Runs an end-to-end gauntlet (SymPy verifier, similarity dedupe, reading-level, spec quality, autopilot budget, DB roundtrips) without any real LLM cost. Use this to sanity-check the whole stack after a deploy.
Run configurable student-like sessions against tutor tasks, then inspect behavior telemetry for right vs wrong outcomes, timing, hints, and time-lock timeout effects.
Policy controls applied to admin "On Behalf Of" sessions. Changes take effect on the next OBO action.
Tracks every OBO event: session start/end, allowed setting writes, blocked write attempts, presence checks, and policy changes. Use this to investigate "OBO is not working" reports.
| When | Kind | Admin | Target | Method | Path / detail |
|---|---|---|---|---|---|
| No events yet. | |||||
Live overview of every autonomous agent decision plus emergency stop. Read-only telemetry — no LLM cost.
Loading…
Your voice preference is saved to your account and follows you across devices. Because the available voices come from your browser + operating system, Windows, macOS, and iPad each show a slightly different list. If the exact voice you picked isn't on the other device, we pick the closest-matching one automatically.
Streams audio from OpenAI TTS so the voice sounds identical on Windows, Mac, and iPad. Small cost per use (billed to your configured API key).
Note: screenshots only work with vision-capable models (e.g. gpt-4o,
gpt-4o-mini, Gemini Flash, Llama-3.2-Vision). On models without image
support, the tutor will apologise and ask you to describe the problem in words.
Browser dictation streams audio to Google's speech endpoint and won't work on many corporate networks. Server uses your configured LLM provider's transcription (OpenAI / Azure). Voice note records locally and attaches audio so the model can hear it (vision/audio-capable models only).
Uses the voice configured in General → Voice. Rate is applied to both browser speech-synthesis and (where supported) the cloud TTS preview.
When you tap "Ask Tutor" we attach a hidden context block so the AI can reason about the problem on screen. Toggle off pieces you'd rather keep private.
Tune how the practice problem card (the box on the Problem screen with the question and 4 answer buttons) uses space. Pick a device tab below to edit values for that device class only — phones, tablets (iPad), and desktops/laptops are independent. Drag a slider to preview live; click Save for all users to push your choices to the server so every visitor sees them.
How tall the white/dark problem card is, as a percentage of the screen height. Bigger = the card fills more of the screen so the question + answers feel substantial. Smaller = card hugs its content tightly. Tip: 65–75% is roomy; under 50% feels phone-like.
How wide the card can grow before it stops. Caps the line length so reading stays comfortable on big monitors. Phones effectively ignore this (use whichever is smaller — this value or 96% of the screen). Tip: ~880 for iPad portrait, ~1040 for desktop.
Size of the question text at the top of the card (e.g. "What is 7 × 8?"). 1 rem ≈ the body text size. Bigger = easier to read across the room or for younger students. Tip: 1.5–2.0 on iPad, 1.6–2.3 on desktop.
Size of the text inside each answer button (the four multiple-choice options below the question). Bigger = more legible numbers / words. Tip: keep this slightly smaller than the question font (1.1–1.4 on iPad, 1.2–1.5 on desktop).
Minimum vertical thickness of each answer button. The grid stretches buttons to fill the card vertically, so this is mostly the floor. Bigger = bigger tap targets (great for fingers/touch). Tip: 56 for phones, 80–100 for iPad/desktop.
Empty space inside the card border around the content. Bigger = more breathing room (looks airy, like a poster). Smaller = content packed tighter against the edge. Tip: 20 phone / 30–36 tablet / 36–48 desktop.
Vertical space between the question, the answer grid, and the feedback line inside the card — and the gap between answer buttons in the grid. Bigger = more separation, easier to scan. Tip: 16 phone / 20 tablet / 24 desktop.
Save for all users writes the current values for the selected device tab (and any others you've edited) to the server. Every user fetches the saved layout on page load. Reset this device reverts only the active device tab to factory defaults; Reset all devices wipes phone + tablet + desktop back to factory defaults.
Currently detected for your browser: — (device class / pointer type / orientation — used to pick which saved values you see right now).
Bump the app version with one click. The bumper rewrites VERSION, backend/main.py, and the cache-busters in frontend/index.html, and updates the running process. Commit + push to make it permanent.
Semver: MAJOR.MINOR.PATCH. Major bumps that cross into v1.0.0 require all readiness items below to be checked.
All items must be checked before a major bump from 0.x to 1.0.0 is allowed. Add or remove items to match your launch criteria.
0.16.73 → 0.16.74): bug fixes, copy tweaks, no new behavior visible to students.0.16.x → 0.17.0): new admin or student feature, no breaking change.0.x → 1.0.0): production-ready launch. Every checklist item above must be checked.Controls who sees the Release Notes entry in the user menu and how many recent entries they can read. Admins always see the full history.
An administrator has reset your password. Please choose a new one to continue.
Enter your new password below.
Lessons teach you to type from scratch. Practice (Drill / Words / Passage / Race / Custom / Code) sharpens what you already know.
Tip: longer is better — 200+ characters gives a more reliable WPM reading.
Answer ten multiple-choice questions that span five difficulty bands (Elementary → Adult learner). We'll suggest a starting grade level and difficulty that fits you. Takes about three minutes.
Loading categories…
0 / 5 correct
+0 points
x as the variable. Supports + − × ÷ ^ ( ) √ π.Great focus. Would you like to keep going or take a break?