Product updates

What's new

Mubarak is under active development. Here's what we've shipped to the platform, newest first.

  • Fixedschools

    Editing a teacher or student now correctly reports a temporary problem instead of wrongly saying the person doesn't exist

  • Fixedschools

    Creating a student never mints a sign-in address without first confirming it isn't already taken

  • Fixedschools

    A temporary error while loading the student list no longer empties the table and loses the admin's place

  • Newschool-admin

    Teachers, parents, content, activity and settings in the school console

  • Fixedschool-admin

    Stop the roster search leaking a masked personal email

  • Fixedschool-admin

    Mask a self-signup student's personal email server-side in the roster and edit responses, showing school-minted addresses in full and labelling masked ones as the student's own

  • Newschool-admin

    See the details the platform holds for your school

  • Newschool-admin

    See everything that has been done in your school

  • Newschool-admin

    See your school's document library and who can read each one

  • Newschool-admin

    See the parents of your school's students

  • Newschool-admin

    Issue a teacher a new temporary password

  • Newschool-admin

    Edit, deactivate and reactivate a teacher

  • Newschool-admin

    Enrol a teacher and hand over their credentials

  • Fixedschool-admin

    A teacher no longer lands on a student screen

  • Fixedauth

    Accepting parental consent now lifts only a suspension the consent flow itself caused — a parent's earlier refusal. An account an administrator suspended stays suspended, the consent is still recorded, and the parent is told the account needs an administrator to reinstate it.

  • Fixedauth

    A sign-up cannot grant itself staff access or place itself in someone else's school

  • Fixedauth

    Declining consent suspends the child's account, as the page has always said it would

  • Fixedauth

    The public pages stay readable while a first password change is still outstanding

  • Fixedschool-admin

    A multi-word account status now reads as words on the roster instead of showing the underscored database value

  • Fixedschool-admin

    A suspension or an unverified account can no longer be cleared from the roster by deactivating and reactivating

  • Fixedschool-admin

    Reactivate a student you deactivated by mistake

  • Fixedschool-admin

    A deactivated student's password cannot be reset until they are reactivated, instead of issuing one that will not work

  • Fixedschools

    Invite a school admin by email from the school's Users tab, or promote a member who already has an account

  • Fixedauth

    A school admin locked out by their school's deactivation is told what happened instead of meeting a blank sign-in form

  • Newschool-admin

    A school admin gets their own app, opening on the student roster, showing only the sections that exist

  • Newschool-admin

    Enrol a student and receive their sign-in address and temporary password once, plain enough to write down and hand over

  • Newschool-admin

    Search the roster by name or address and filter by grade and status

  • Fixedauth

    Terms and Privacy stay readable while a first password change is still outstanding

  • Fixedauth

    Setting a new password is reported honestly even when the follow-up bookkeeping fails

  • Fixedauth

    Setting your password again to the one you already have is refused, and a password change must come from the app itself

  • Fixedauth

    A student who was given a temporary password cannot use the rest of the app until they have replaced it

  • Fixedschool-admin

    A failed roster load reports the failure instead of showing an empty roster

  • Fixedauth

    A student must actually set a new password before the prompt stops appearing, and cannot reuse the one they were handed

  • Newauth

    A student with a temporary password is taken to set a new one before anything else

  • Fixedschool-admin

    Enrolment fails loudly rather than issuing an address that does not belong to the school

  • Fixedschool-admin

    A student given a new password can no longer skip changing it at next login

  • Fixedschool-admin

    A student can no longer skip the password change they are required to make at first login

  • Fixedschools

    A deactivated school's users get a clear "access denied" response instead of a generic bad-request error

  • Fixedschools

    A database failure can no longer let a deactivated school's users back in

  • Fixedschools

    Deactivating a school now denies its students, teachers and school admins on school-scoped API access

  • Fixedschools

    Keep the content library's school filter working

  • Fixedschools

    Recent activity no longer reads empty while loading

  • Fixedschools

    The overview of a school now shows its latest changes straight away instead of an empty panel; you no longer have to open the history tab to see anything

  • Newschools

    Each school now has a page with overview, people, documents, history and settings tabs. Each tab has its own link you can share, and returning to a tab you have already opened is instant

  • Newschools

    Adding a person from a school's page opens the existing invite form already filled in with that school

  • Newschools

    /admin/schools is now a searchable, sortable table of every school with its student, staff and document counts — including schools that have no content yet, which the old screen hid entirely

  • Newschools

    An overview of a school's students, teachers, documents and how many people were active in the last 7 days — real figures only, with no invented trends

  • Newschools

    A people tab filtering a school's students, teachers, parents and admins, with a way to hand school-admin access to someone already there

  • Newschools

    A documents tab showing each document's grade, subject, sharing scope and processing status

  • Newschools

    A history tab listing every change made to the school and who made it, filterable by the kind of change

  • Newschools

    A settings tab for editing a school's details, and deactivating or reactivating it from a confirmation that says plainly what that does

  • Fixedschools

    The active-in-the-last-7-days figure on a school's page was counted from a capped page of activity, so a busy school could show a number lower than the truth. It is now counted in full

  • Fixedschools

    The parents shown for a school are now ordered and stable, so the same school shows the same list every time; when there are too many to show at once the response says so instead of quietly leaving people out

  • Fixedschools

    Saving a school with no changes is now rejected rather than recording a change that never happened

  • Newschools

    A New school button opens a validated form for name, code, country, contact details, type and grades; a code already in use is reported on the field rather than as a failed save

  • Newschools

    A school's page lists its students, teachers and admins with search and a role filter; parents appear through their verified links to that school's children, since a parent belongs to a family rather than a school

  • Newschools

    A school's page shows a dated timeline of every change made to it and who made it, filterable by the kind of change

  • Newschools

    Master admins can make an existing teacher or staff member at a school its school admin, and the change is recorded in the school's history. Someone who is not at that school cannot be promoted into it

  • Newschools

    A school's page lists the documents attached to it with their grade, subject, sharing scope and processing status

  • Newschools

    A school's page now shows its student, teacher, staff and document counts plus how many people were active in the last 7 days, and a failed lookup says so instead of quietly showing nothing

  • Newschools

    Master admins can edit a school's details and deactivate or reactivate it, with each change recorded in the school's history

  • Newschools

    The admin school list now searches by name, code and city, filters by country and status, sorts, and pages — and shows every school, including ones with no students or documents yet

  • Newschools

    Master admins can create a school; a duplicate school code is reported on the field instead of failing the request

  • Fixedschool-access

    Creating a teacher/school-admin account now checks the school ID is valid and matches a real school before anything is sent, so invitees are never left with an invitation to an account that gets rolled back

  • Newschool-access

    The admin create-user dialog offers the School Admin role, visible to master admins only, so a pilot school can be provisioned without touching the database directly; picking School Admin or Teacher now requires a school before submit, mirroring the API's existing check

  • Newschool-access

    Master admins can now create a school-admin account and link it to a school, so a pilot school can be set up end to end; school staff accounts are rejected with a clear message when no school is chosen

  • Newschool-access

    Teachers and school admins must always belong to a school, so school-scoped access can never silently widen through an unassigned account

  • Newschool-access

    A per-school activity log records every school-scoped change, readable by the platform owner and each school's own admin

  • Newschool-access

    Teachers and school admins now see only the students at their own school; platform staff keep full visibility, and students and parents are unaffected

  • Newschool-access

    AI tutoring transcripts are never visible to school staff

  • Newschool-access

    A school admin can see the parents linked to their own school's students, and always their own school's record

  • Newschool-access

    New school-admin account type, the first piece of school-level oversight for the Sep 2026 pilot; no user-facing surface yet

  • Improvedadmin-dashboard

    Quick actions now loads its lessons-awaiting-review count in one lightweight query instead of the full lessons queue

  • Newadmin-dashboard

    New Errors tab on the main chart shows daily app errors and the crash-free session rate from the last 30 days

  • Fixedadmin-dashboard

    Remove the recent activity feed from the dashboard and let quick actions fill the freed space

  • Fixedauth

    Signing in with Google, or by accepting an invitation, now updates the account's last-active time like a password sign-in already did — so admin activity figures count everyone

  • Fixedauth

    A failure to record a sign-in is logged instead of passing silently

  • Fixedbackground-jobs

    Restore the missing weekly-report progress function

  • Fixedai-tutoring

    A checkpoint correctly answered on the LAST question of a lesson could still show as unfinished if a background reply was mid-flight at the same moment

  • Fixedai-tutoring

    A practice question answered correctly could occasionally need re-answering if a background reply landed at the same moment

  • Fixedai-tutoring

    No duplicate question cards after a checkpoint answer advances the lesson past it

  • Fixedai-tutoring

    "Try again" is withdrawn once the lesson has moved on, so a retry can no longer be graded against a question the student already left behind

  • Fixedai-tutoring

    A slow background reply can no longer undo a checkpoint's already-recorded progress

  • Fixedai-tutoring

    After a re-teach, a third wrong answer on the same checkpoint moves the lesson forward and marks the concept to revisit instead of looping back into another detour

  • Fixedai-tutoring

    If a student chats without answering the on-screen check or practice question, the tutor warmly but firmly steers them back to it

  • Fixedai-tutoring

    Lesson recaps now explicitly name any concept marked shaky as something to revisit next time

  • Fixedobservability

    Middleware now logs these expected errors at debug (console-only, never forwarded) and keeps error level for genuine auth faults.

  • Fixedbackground-jobs

    Weekly report runs no longer crash mid-run

  • Fixedai-tutoring

    The voice waveform now shows on the still-streaming reply bubble too, not only after the tutor's message is fully committed — TTS starts well before that commit, so the waveform previously stayed hidden for most (or all, on short replies) of playback

  • Fixedai-tutoring

    Pressing Stop mid-reply now silences the tutor's voice immediately instead of only aborting the text stream and letting the tutor keep talking

  • Improvedai-tutoring

    The tutor now starts speaking its reply the moment the text is ready, instead of waiting on the assessment pass and page-turn logic behind the scenes — the words on screen and the voice reading them now start together

  • Improvedai-tutoring

    Turns begin composing a reply sooner by running the safety check, session lookup, and language lookup at the same time instead of one after another, and by no longer waiting on a background page-position save before fetching what the tutor needs to answer

  • Fixedai-tutoring

    The tutor's spoken reply now animates a live waveform on the message bubble being read aloud, matching the Study Terminal viewer

  • Fixedai-tutoring

    The session settings menu (read aloud, clear chat, restart, end lesson) now sits inside the message box instead of floating beside it

  • Fixedai-tutoring

    A thinking indicator with pulsing dots shows while the tutor is composing its reply, before any text has streamed in

  • Fixedmonitoring

    One error out of a handful of requests reads as a double-digit error rate.

  • Fixedbackground-jobs

    The three background jobs declared concurrency of 40, 20 and 10 against an account plan that allows 5. Inngest validates this at sync time and a sync is all-or-nothing, so the whole app was rejected and no function registered — weekly reports, parent alerts and misconception scans could never run. All three are now 5.

  • Fixedai-tutoring

    Guided lessons now show their check and practice questions at the right step of the lesson, so students are never left stuck waiting for a question that cannot appear

  • Fixedai-tutoring

    Reopening a lesson that was parked on a question brings that question straight back up and shows your true place in the lesson

  • Fixedai-tutoring

    Fixes a rare case where the lesson wouldn't turn the page after certain tutor replies

  • Newai-tutoring

    The session rail now shows a beat-by-beat map (hook, explain, check, practice, recap) for lessons generated from a structured plan, with the current step highlighted and a re-teach badge when the tutor loops back to explain something again; legacy lessons keep today's page track

  • Newai-tutoring

    Page turns and checkpoint questions for these lessons now follow the lesson's plan instead of a page-position guess, so the right question appears at the right moment

  • Newai-tutoring

    The tutor now teaches to a structured lesson plan, checking understanding before moving on and closing the lesson itself once the recap wraps up, instead of leaving that call to the model

  • Newai-tutoring

    The tutor recalls what a student struggled with in earlier sessions and adapts, for every lesson (plan-backed or not)

  • Fixedai-tutoring

    When a wrong practice answer happens to be the last one in the set, the tutor now moves on with the student instead of stopping to re-explain a question they've already left behind

  • Fixedai-tutoring

    A checkpoint's first wrong answer (before the re-teach kicks in on a second miss) now correctly signals the student isn't done, instead of looking identical to a correct answer

  • Fixedai-tutoring

    A checkpoint question failed twice now re-teaches the concept a different way before the student retries, instead of only nudging them on the same question; concept mastery updates from the result

  • Fixedai

    Tutoring conversations now report how much they cost to run, so usage stays visible

  • Fixedbackground-jobs

    Stop Inngest webhook redirecting to the login page

  • Fixedassessments

    Finishing a quiz now records the topics the student struggled with, so recommendations and study plans can use them. Every submit had been failing to save any of this silently — the score was stored, the topic analysis was not.

  • Fixedassessments

    The Previous / Submit / Next bar now stays pinned to the bottom of the question panel on phones and tablets instead of scrolling away under a long question. The header shows how many questions are answered, and Submit becomes the main button on the last question.

  • Fixedauth

    Signing in as an admin now goes to the admin dashboard instead of the student home; previously only master admins were redirected

  • Fixedai-tutoring

    Regenerating a lesson now targets the exact book and chapter, never a same-named chapter from another book

  • Fixedai-tutoring

    Generated checkpoint questions must cite pages inside the chapter, and archived lessons can no longer be published

  • Fixedai

    Token cost tracking covers the new Gemini 3.7/3.5 Flash models

  • Newai-tutoring

    Each ungenerated chapter in the coverage list now has its own Generate button, alongside the bulk generate-all action

  • Newai-tutoring

    Failed lesson-plan edits now show the server's reason instead of failing silently; the editor stays open to retry

  • Newai-tutoring

    New Admin Lessons page shows every textbook chapter, generates a draft lesson per chapter with one click, and previews the lesson plan and its checkpoint questions before publishing

  • Newai-tutoring

    Drafts can be published, unpublished, regenerated, edited, or archived; students only ever see published lessons

  • Fixedai-tutoring

    Lesson loading now checks published state everywhere, so draft lessons stay invisible until an admin publishes them

  • Improvedai

    Pressing Listen now starts speaking in ~2 seconds instead of 10-15 — audio streams from the voice service as it is generated rather than waiting for whole sections to finish

  • Improvedai

    Medium-length answers no longer wait silently for the full recording before playing

  • Newai

    Upgrade the reading voice to Gemini 3.1 with official Serbian support

  • Fixedai

    Saving an agent whose active prompt variant is missing or empty no longer wipes its live prompt. It previously wrote an empty prompt, which would have run AI Hub, the parent coach, misconception clustering and tutoring chat with no persona and no safety rules, silently

  • Fixedai

    An admin save that changes only the model no longer leaves the live prompt disagreeing with the prompt library shown in the Command Center

  • Fixedstudy-terminal

    Token counts for Anthropic answers were recording zero input tokens and undercounting cost about fourfold; the provider splits usage across two updates and only the last was kept

  • Fixedai-hub

    Response timing now starts before the request, so timings are comparable with every other AI surface

  • Fixedstudy-terminal

    Response timing now measures the model call rather than the whole pipeline, matching the other surfaces

  • Fixedai

    Both background jobs accepted any provider from the registry and then called Gemini with it regardless, so a non-Gemini model would have failed at run time. They now check what they can actually run

  • Fixedai-hub

    The AI Hub now reports the true token usage and response cost of each answer, and how long the first word took to arrive. It previously counted network chunks and called them tokens

  • Fixedai

    Populate token usage and cost for study terminal chat

  • Fixedai

    A registry row naming a provider a surface cannot run is now logged as an error and reported, instead of being silently replaced by a hardcoded model with no signal to anyone

  • Fixedai

    Saving an agent now always re-materialises the active prompt variant into the runtime prompt server-side, so the prompt an admin sees marked LIVE is guaranteed to be the one the tutor actually uses

  • Fixedai

    Answers written in Serbian Cyrillic now play as speech — the voice service silently produced no audio for Cyrillic Serbian, so read-aloud appeared completely dead whenever the AI answered in Cyrillic

  • Fixedai

    Listening to long answers back-to-back no longer stops partway with errors — the voice service now waits and retries when it is briefly rate-limited instead of giving up

  • Improvedstudy-terminal

    Opening a book you or a classmate opened recently is much faster - the file now comes from a nearby cache instead of central storage

  • Fixedai

    Reading answers aloud in Serbian now uses the platform's natural voice instead of a robotic or silent browser voice

  • Fixedstudy-terminal

    Books open again on their own after an app update, instead of sitting on a load error until someone refreshes the page

  • Fixedai

    Reprocessing a large textbook no longer hangs and leaves the book missing from search; it now reports progress and fails visibly if the database stalls

  • Newlanding

    Full-screen opening view with the animated Mubarak logo over a twinkling star field that drifts on its own and reacts to your mouse across the whole page

  • Newlanding

    New scroll sections showing tutoring use cases, views for students, parents, and schools, textbook-grounded answers, and a Study Terminal preview

  • Newauth

    Sign-in and registration screens now share the same starry night-sky background as the landing page

  • Fixedai

    Pages with long unbroken text are split properly instead of being dropped, so no part of a book goes missing from search

  • Fixedai

    Textbook questions, decimal numbers and figure references now survive ingestion intact, so answers can quote the book accurately

  • Fixedstudy-terminal

    The three-dots menu (response language, read replies aloud, clear chat) now sits inside the left edge of the chat message box instead of floating beside it

  • Fixedai

    When a student asks an end-of-lesson exercise question, the tutor now also reads the surrounding lesson pages of the same textbook, so answers come from the official curriculum content instead of general knowledge

  • Fixedai

    Questions that previously matched no textbook content now retry a wider search before answering, instead of silently answering ungrounded

  • Fixedsecurity

    Internal maintenance and diagnostic database functions can no longer be called from user accounts; server-side access is unaffected

  • Fixedsecurity

    Turned off the unused GraphQL API endpoint, closing schema discovery for signed-in users

  • Newcharts

    Charts that plot more than one thing now use a fixed eight-colour palette, checked to stay tellable apart in both light and dark and for colour-blind readers, so your weekly study comparison and session breakdown read as separate colours instead of shades of one

  • Newcharts

    Single-metric visuals keep your chosen accent colour, so progress rings, subject sparklines and the streak trend still feel personalised

  • Newcharts

    Axis labels, gridlines and tooltips follow light and dark mode instead of a fixed white, so chart text no longer disappears in light mode

  • Fixedtheme

    Give warning its own token instead of reusing gold

  • Newlanding

    New cover — the Mubarak monogram floating over a twinkling night sky that follows your mouse, with sharper marketing copy

  • Newlanding

    New "Answer Machines Give Answers. Mubarak Teaches." section — two AIs get the same question side by side, and only one teaches

  • Newlanding

    The whole public site now matches the app's look — same colors and typography, glass panels, rolling technology logos, and the reactive top navigation

  • Newlanding

    The What's New page now opens for visitors without an account, and outdated standalone pricing/features/contact pages fold into the main page

  • Newauth

    Sign-in and registration pages restyled to match the new look

  • Newtheme

    Pick your accent colour straight from the sidebar on any page, instead of navigating to Profile or Settings first

  • Newfix

    The eight accent swatches in the picker were rendering as blank circles and now show their real colours again

  • Fixedrelationships

    A failed load now offers a retry instead of pretending nobody is connected to your account

  • Fixedrelationships

    Cancelling, accepting, or declining now confirms what happened instead of appearing to do nothing

  • Fixedrelationships

    Pending invitations show the right email and dates, and the weekly invite count is hidden when it cannot be loaded

  • Fixedrelationships

    Creating a parent invite now hands you a copyable link to send them yourself — the app previously said an email was on its way and never sent one

  • Fixedrelationships

    An invitation link opened while signed out now loads the invitation instead of reporting it as invalid or expired

  • Fixedrelationships

    Sending a parent invite works again — every attempt used to fail before the invitation was saved

  • Fixedrelationships

    Declining one parent's request no longer declines every other pending request at the same time

  • Fixedrelationships

    Cancelling or declining an invitation now frees you to invite that person again

  • Fixedprofile

    Name and preference changes now actually save

  • Fixedprofile

    Profile changes now save

  • Fixedprofile

    The learning stats panel now shows your real study streak, weekly study time, questions asked, and achievements instead of a fixed fake number for every student; a stat with no real data behind it (rank, average score) is hidden instead of made up

  • Fixedprofile

    Uploading a new avatar now genuinely saves it; removed a picker option that looked like it saved a choice but never actually did

  • Fixedprofile

    Fixed the profile page briefly flashing "not found" while it was still loading, or getting stuck loading forever if something went wrong; added a retry action

  • Fixedmy-map

    The "set your grade" prompt now sends you to your profile page instead of a broken settings link

  • Improvedstudy-terminal

    Session-timing data used only for background progress saving no longer forces the whole reading view to redraw every few seconds, keeping scrolling and the AI panel responsive during long study sessions

  • Improvedai

    Chat responses stream in without stutter by updating the display in small batches instead of on every single character

  • Improvedai

    Code blocks in chat load faster by preparing only the languages actually used instead of the full syntax-highlighting library

  • Fixedassessments

    Failures on the quiz list, a single quiz and quiz generation now return a plain "we couldn't do that" message instead of raw internal error text

  • Fixedai

    The same for AI chat failures

  • Fixedstudy-progress

    Ending a reading session keeps the pages you actually read instead of resetting the count to zero

  • Fixedassessments

    Submitting a quiz twice (double click, retried request) scores it once, and the second attempt says it was already submitted

  • Fixedai-tutoring

    Finishing an already-finished lesson returns the same summary instead of writing a second one

  • Fixedai-tutoring

    The written recap of a finished lesson is now reliably saved

  • Fixedstudy-progress

    Progress views refresh right after a session or quiz rather than sometimes showing stale figures

  • Fixedprofile

    Profile edits are validated, and avatars accept ordinary image files only

  • Fixedvoice

    Read-aloud uses the platform voice by default

  • Fixedstudy-progress

    Background study-session saves are checked before they count, so a bad or impossible session can't inflate streaks, study time or what parents see

  • Fixedstudy-progress

    A session saved when the tab closes is now really stored instead of reporting success and being dropped

  • Fixedai

    Chat messages have a length limit and an image-per-message limit, and the language check is limited to signed-in users

  • Fixedprivacy

    A parent opens the child's learning map only if the child shared their study activity, and quiz-based mastery is hidden unless scores are shared too

  • Fixedprivacy

    Turning a sharing choice on for one parent no longer resets the choices set from the other settings screen, and AI-conversation sharing can finally be granted

  • Fixedstudy-terminal

    Books restricted to a school or country now open only for readers they were shared with, and the wrong-permission message is shown instead of a generic error

  • Fixedcontent

    Book covers can only be replaced by staff, and only with a real image file

  • Fixedai

    Retrying a failed "start a new chat" send no longer leaves two copies of your message once the retry succeeds

  • Fixedassessments

    Connection problems now show a retry option instead of leaving your quiz list empty

  • Fixedassessments

    Quiz generation failures now show the real reason instead of a garbled error message

  • Fixedassessments

    A quiz that fails to load now offers a retry and a way back to Assessments instead of a dead end

  • Fixedcontent-library

    Study Materials now shows a retry option and a proper loading state instead of a misleading "no materials" message

  • Fixedai

    AI Hub now tells you when it couldn't start a new chat, with a way to retry

  • Fixedai-tutoring

    Lesson session errors now offer a retry and a way back to your lessons instead of a dead end; a failed "end session" now tells you instead of failing silently

  • Fixedschedule

    Adding, removing, or checking exams now reports failures instead of silently doing nothing

  • Fixedviewer

    Fixed a rare crash from corrupted saved reading history

  • Fixeddashboard

    The "invite a parent" button no longer shows a wrong invite count when it can't load

  • Fixedtheme

    Dialogs and toasts now render correctly in light mode instead of an unreadable dark glass panel; extends to sheets, dropdown/select checkmarks, and several hardcoded amber/blue accents across settings, exams, and prerequisite nudges

  • Fixedtheme

    Assessments page heading now matches the shared page-header style used across the rest of the app

  • Fixedtheme

    Light mode now has a real elevation ladder — cards and panels sit above a soft grey page instead of dissolving into it

  • Fixedtheme

    The accent wash and tinted surfaces read clearly in light mode again, where they had faded to almost nothing

  • Fixedcharts

    Axis lines, gridlines, tick labels, series lines and legend dots are visible again on the admin, student and audit dashboards

  • Fixedtheme

    Panel and card borders stay hairline-thin instead of hardening into solid bars, and the sidebar focus ring and hover highlight render properly

  • Fixedtheme

    Restore --sidebar-border, dropped by the CSS-token splice

  • Newcontent

    Study material covers are now illustrated in the subject's colour instead of scanned textbook fronts, and no two books in a subject look alike

  • Newcontent

    Subjects with two words now show proper initials on the cover and in the card footer, so Computer Science reads CS rather than CO

  • Newcontent

    Study material cards now show the book's own cover photo (or a generated subject cover when there isn't one), a short description, and how much of the book is left to read, so a shelf of books is easier to tell apart and more inviting to open

  • Newstudy-terminal

    The study terminal's AI panel is reframed as margin notes anchored to the page they reference, with a quote card for selected text and an always-available "Ask about this page" button

  • Newstudy-terminal

    On tablets, switching between the document and the AI companion no longer reloads the PDF — both stay ready in the background

  • Newstudy-terminal

    Chapter progress now draws as a topic ribbon (gold for done topics, filled for the current one) instead of dropdown selectors; drops the WebGL particle background behind the reading view

  • Newstudy-terminal

    Page, zoom, and bookmark controls in the PDF viewer are now always visible at a fixed size instead of expanding on tap

  • Newassessments

    See your average and best quiz scores, quizzes taken this month, and due chapter tests at a glance in one summary strip

  • Newassessments

    A recent-results panel draws your last eight scores as a trend and lists your latest quizzes, right next to the ones still waiting

  • Newassessments

    Generating a quiz is now one row (subject, chapter, topic, generate) instead of a stacked form

  • Newassessments

    A calmer, more focused quiz-taking screen — one context line plus a side progress trail instead of a numbered question grid

  • Newcontent

    Study Materials is now a subject rail + cover-led book grid instead of a flat card/table dump — pick a subject on the left, browse only its books on the right, with search across titles/chapters and a one-tap "Resume reading" strip for the last book studied

  • Newcontent

    Per-book reading progress (percent, pages left) now shows on each book and feeds the subject rail's progress bars, reusing the existing progress endpoint — no new backend

  • Fixedstudy-terminal

    The viewer checks its own image decoders when a book opens and shows a quiet, dismissible line if images may not display, instead of leaving a blank space with no explanation; the text is never affected

  • Newrelationships

    Control exactly what each parent can see, right from the relationships page; five per-parent switches (study time, assessment scores, content access, achievements, AI interactions) replace the old detour to a separate privacy screen, with instant feedback per toggle

  • Newrelationships

    An incoming parent request now gets the page's one moment of weight at the top, with a clear accept/decline in place, instead of competing with the connected-parent list below it

  • Newschedule

    Month calendar cells now show just the date, an at-a-glance "N due" count, and one status mark (test, quiz completed, or reading) so the grid reads at a glance instead of stacking colored badges

  • Newschedule

    A slim highlighted bar between the summary and the calendar surfaces today's due reviews with a one-tap Start button that jumps straight into the first due topic; quietly shows when the next review is due once today is clear

  • Newschedule

    The day panel is now one prioritized list (due reviews, scheduled tests, exams, results, reading, recaps) instead of six separate sections, and reading/results rows now link straight to the book or the results page

  • Improvedparent-dashboard

    Dashboard, children, and settings pages share one cached children list and no longer double-fetch on load

  • Improvedparent-dashboard

    The alert settings section now shows your linked children (it previously always said none were linked)

  • Improvedprogress

    The progress page loads its three panels in parallel from the shared cache

  • Improvedmy-map

    Revisiting your map is instant within five minutes

  • Improvedvoice

    Transcribing your speech begins processing the recording while usage checks run, and read-aloud reuses its connection instead of reconnecting every time

  • Improvedapi

    Lessons, invitations, thumbnails, encouragements and more skip a redundant identity round trip on every request

  • Improvedprivacy

    Per-parent privacy pages fetch everything in one step

  • Improvedparent-dashboard

    Children recaps and alert settings respond faster

  • Improvedstudy-terminal

    Opening a book and its details got quicker

  • Improvedapi

    Profile, assessments, ai-hub: saves and deletes skip redundant lookups

  • Improveddashboard

    Recommended chapters are computed from a handful of shared lookups instead of six per book

  • Improvedmy-map

    The map gathers its data in parallel and no longer re-reads what it already fetched

  • Improvedstudy-terminal

    Ending a study session responds immediately — quiz scheduling and progress bookkeeping now happen right after, in the background; reading-progress updates no longer slow page turns

  • Improvedai-hub

    The safety check on your message now runs at the same time as gathering context, so replies begin faster — every message is still fully checked before anything is shown

  • Improvedai-tutoring

    Tutor turns skip repeated session lookups and start sooner; a first-question race that could briefly show stale session state is fixed

  • Improvedparent-alerts

    The nightly check gathers parent and child details in batches instead of one lookup at a time per family

  • Fixedparent-reports

    The weekly email digest gathers a child's week in two steps instead of eight, only prepares the child it will actually email, and question counts are now exact

  • Fixedstudy-terminal

    Fixed a case where the topic guide or an assessment's chapter list could silently show empty after moving between the viewer and assessments within a few minutes

  • Newmy-map

    Every chapter of every book is one cell: gold with your score once a quiz passes 70%, blue rising as you read, a ring on your next stop; click a cell to open the page or start a quiz

  • Newmy-map

    "Quiz these next" and "Under 70%" lists pick the chapters worth a quiz

  • Newai-tutoring

    Lessons show as tracks with your position and checkpoints, plus your checkpoint accuracy per session and the tutor's notes

  • Newai-tutoring

    The live session gets a step rail, checkpoint questions inline in the conversation, and the tutor now follows the page you are on

  • Newai-tutoring

    Leaving a lesson no longer ends it — resume where you left off

  • Fixeddashboard

    The two rows of panels stretch to use the whole page on tall screens, and the charts grow with them

  • Fixeddashboard

    The header now shows your next exam and how many days are left, and the first-week checklist ticks off once you add one

  • Fixeddashboard

    Study-time chart scales to heavy days; subject sparklines show your last 12 quizzes

  • Fixeddashboard

    A panel whose data fails to load now shows a retry instead of zeros

  • Fixeddashboard

    The page lays out properly on an iPad in landscape — subjects span the width, streak and due reviews sit side by side

  • Newdashboard

    The page now answers how you are doing — quiz scores and study time over the last 30 days, one card per subject, your streak, and the reviews due today — with one-click starts

  • Newdashboard

    Fewer numbers on the page, and the ones left are ones you can act on

  • Newdashboard

    A line of every quiz you finished against the 70% pass mark, with your best and lowest called out

  • Newdashboard

    One bar per day of study time with a hover readout of minutes and sessions

  • Newdashboard

    The header says how many reviews are due and how far away your next exam is

  • Newdashboard

    A new student sees where to start, a short setup checklist and what the page will show

  • Newdashboard

    Each subject shows its quiz-score trend, latest score and chapters done, with one button — review a slipping chapter, quiz a chapter you have read, or continue where you left off

  • Newdashboard

    Your streak with the last 30 days at a glance

  • Newdashboard

    Reviews due today, each with a button that starts a short quiz on that topic

  • Newai-hub

    Answers can be scoped to one of your books, or all of them

  • Newai-hub

    Every cited answer shows the book and page it came from, with one-click "Open page", "Quiz me on this" and "Study with a tutor" next steps

  • Newai-hub

    A clearer start screen with four starters and your recent conversations; conversation history is searchable and grouped by day

  • Newai-hub

    Stop an answer mid-stream, and see a clear message with Retry if something goes wrong

  • Newai-tutoring

    Lesson chat settings (read aloud, restart, end session, clear) moved into a menu beside the message box

  • Fixedshell

    Sidebar sits bare on the page halo with a quiet active state, slimmed to 240px

  • Fixedmy-map

    The metro map fills the whole content area and refits when the window resizes

  • Fixedai-hub

    The page stays viewport-height and long chat history scrolls inside its rail

  • Fixedprofile

    Flat identity card replaces the holographic tilt card

  • Fixedsettings

    Privacy info boxes, relationships list, schedule calendar and Study Materials covers now match the rest of the app

  • Fixedparent-map

    The child's learning map fills the page instead of a fixed 600px box

  • Fixedviewer

    The "please rotate" screen on portrait tablets has a solid backdrop again

  • Newtheme

    The whole app now uses the friendlier Nunito typeface instead of Geist

  • Fixedstudy-terminal

    Match the study viewer to the app's shell chrome

  • Fixedtheme

    Reloading no longer reverts a pre-reskin user's newly chosen accent color back to the old palette; the stale legacy theme id used to re-seed the picker every load and silently overwrite the real choice

  • Fixedtheme

    Your saved theme preference now actually loads from your account on other devices/browsers again (the API response envelope was never being unwrapped, so the cross-device sync silently did nothing)

  • Newstudy-terminal

    The PDF viewer's loading screen and the prerequisite reminder popup now match the rest of the app's calm, flat look

  • Newparent-dashboard

    Parent's dashboard, children list, add-child, settings, and per-child progress/map/memories pages now use the flat panel look (no glass blur, no drop shadows, no hover-lift) instead of the old glass cards; loading states show skeleton panels instead of a full-screen spinner

  • Newparent-dashboard

    A child's detailed progress view collapses its four separate stat cards (study time, streak, average score, grade) into one bordered strip, and its recent-assessments/recently-unlocked lists into one bordered list with row dividers, instead of stacking individual cards

  • Newprogress

    Learning-progress page's stat, subject, achievement, and goal cards switch from the glass treatment to the flat panel look

  • Newmy-map

    The map frame and chapter detail popup use the flat panel chrome; the accent-flow progress lines and station rings are unchanged

  • Newprofile

    Avatar picker, personal-info fields, and profile card drop glass blur/shadow/gradient treatments for flat, theme-reactive surfaces

  • Newprofile

    Removed the unused legacy Theme dropdown from app preferences (it never persisted anywhere real; the appearance picker right below it is the actual theme control)

  • Newrelationships

    Parent-connection card switches to the flat panel look

  • Newdashboard

    Weekly sessions chart now recolors with the active accent instead of assuming the panel behind it is always white-on-color

  • Newai-tutoring

    Chat, lesson cards, question checks, and the session-complete summary now use the flat panel style, with calmer loading and typing cues

  • Newassessments

    Quiz creation, the assessment list, test-taking, and results now use the flat panel style, with calmer loading placeholders

  • Newschedule

    The calendar and day-detail panel now use the flat panel style, with calmer loading placeholders

  • Newcontent

    The book library and study terminal switch to clean flat panels matching the new look — book cards, document pickers, chapter/topic navigation, and the AI chat panel drop their glass blur, drop shadows, and gradient fills for the flat panel system; the study-terminal "stuck on this page?" nudge loses its heavy shadow too

  • Newdashboard

    The student dashboard adopts the new flat look — clean panels, one colored highlight card, no glass or heavy shadows

  • Newshell

    Every page's content now sits on a clean rounded surface with a subtle color wash behind it, in your chosen accent; sidebar goes flat (no glass, no blur) with an alpha-tinted active nav state

  • Newtheme

    Choose from 8 accent colors and light/dark mode in your profile; the sidebar keeps a quick light/dark switch

  • Newtheme

    Legacy saved themes (e.g. Ocean Breeze) preselect their mapped accent so nobody's saved preference resets

  • Newtheme

    The app switches to a calmer flat design with a light/dark mode and 8 accent colors; saved themes map to the closest accent

  • Improvedapi

    Pages and actions no longer re-verify your sign-in with an extra server round trip when it was already verified moments earlier

  • Improveddashboard

    Your study schedule gathers everything it needs at once instead of one piece at a time

  • Improvednotifications

    The notification bell fetches your list and unread count together

  • Improveddashboard

    Achievements, study-terminal, parent-settings: the same load-in-parallel treatment across five more surfaces

  • Improvedai-hub

    Your language choice appears instantly when the page opens instead of waiting for the server

  • Improvedai-hub

    Naming a new conversation no longer reloads the whole conversation list

  • Improvedparent-dashboard

    Parent pages now share the app-wide data cache instead of keeping a separate one

  • Improvedrelationships

    The app no longer re-checks your family connections every 30 seconds in the background — pages share one cached list that refreshes when something actually changes

  • Improvedprivacy

    The Parents list in privacy settings now shows your connected parents (it previously always showed empty)

  • Improvedparent-dashboard

    Accepting or declining an invitation updates both the connection list and your children's activity cards right away

  • Improvedai-hub

    Sending a message kicks off the AI reply faster — the setup work before the reply now runs in parallel instead of one step at a time, and bookkeeping happens after your reply finishes streaming

  • Improveddashboard

    Mastery and coverage for all your subjects are computed from two lookups total instead of two per subject

  • Improvedprivacy

    The parent-sharing settings page now loads all parents' details at once instead of one parent at a time

  • Improvedrelationships

    Checking pending invitations is now instant when the answer was fetched moments ago, and first-time checks are faster

  • Improvedparent-dashboard

    The children list responds instantly on repeat visits within two minutes

  • Improvedrelationships

    The family connections page and its notifications get their data in a single database query instead of four sequential ones

  • Improvedapi

    Every request is checked against usage limits in a single step instead of two, so all pages and actions respond sooner

  • Fixedanalytics

    The nightly topic-analytics refresh now completes — it ran without the database permissions it needed and failed on every run

  • Fixedai-tutoring

    Stop the chat hanging silently when a question is blocked

  • Fixedai-hub

    Never show a saved reply that failed to save

  • Fixedcontent

    Report structure lookup failures instead of faking success

  • Fixedai

    Bound every interactive provider call with a timeout

  • Fixedai-tutoring

    Stop returning raw provider error text to the client

  • Fixedai-chat

    Generic client error body, full detail server-side only

  • Fixedai-chat

    Keep chat working when the agent registry is unavailable

  • Fixedcontent

    Fail loudly when replacing a document structure

  • Newerrors

    Add viewer error page and a site-wide 404

  • Fixedmy-map

    Dense subjects on the map no longer render unreadable stacked text — once consecutive stops on the same line crowd closer than 30px on screen, every other label is dropped, and they reappear as soon as the student zooms back in; also fixes the map's fit-to-screen zoom occasionally computing a nonsensical negative scale on first paint

  • Newmy-map

    A two-finger pinch now zooms the map in and out, wired into the same pan/zoom state as the wheel and +/-/fit buttons, so gestures and the on-screen controls stay in sync; the on-screen zoom buttons remain keyboard-reachable for students who can't use touch gestures

  • Newmy-map

    The map canvas is now announced as a group of controls (not one opaque picture), with a hidden usage hint and a full text list of every subject, book, and stop with its coverage and progress — so a screen reader user can survey the whole curriculum without the SVG

  • Newmy-map

    Each stop on the learning map is now a real control — reachable by Tab, opens with Enter or Space, and announces its name, coverage, and progress state to screen readers, with a visible focus ring for keyboard users; station cores use a theme color so they stay visible on light themes

  • Newai-tutoring

    The lesson list and study session follow your chosen theme

  • Newai-tutoring

    Opening a lesson shows the lesson and tutor panes shimmering in place instead of blanking the screen

  • Newperf

    The decorative particle backdrop is switched off on phones so the lesson and tutor get the whole device

  • Newai-tutoring

    Browse lessons by subject and start any lesson in one click, with the chapter, page range, length and grade shown on the card

  • Newai-tutoring

    The lessons list now follows your chosen theme instead of a fixed colour scheme

  • Newai-tutoring

    Switch between the lesson and the tutor with a labelled Lesson / Tutor control on phones and tablets

  • Fixedai-tutoring

    Keep your place in the lesson and the chat when the session screen updates

  • Fixedai-hub

    The read-aloud toggle, language picker and chat box now take their colours from the theme you picked, instead of being hardcoded white-on-glass that washed out in light themes; the language menu is readable in all 27 themes

  • Newai-hub

    A new chat now opens with four plain-language starting prompts ("Explain a topic I'm stuck on", "Quiz me on what I studied this week", and two more) — tapping one starts the conversation, instead of an empty screen with nothing to press

  • Newai-hub

    The read-aloud toggle's "playing" glow now actually renders; it pointed at a colour variable that never existed

  • Fixedai-hub

    Holding the microphone no longer cuts out when your finger or cursor slides off the button mid-sentence; recording ends when you let go anywhere, or press Escape

  • Newai-hub

    A "Conversations" button in the hub header opens your full chat history in a slide-over panel on phones and tablets, where the list used to be completely hidden below 1024px; picking a chat opens it and closes the panel

  • Newai-hub

    The hub now has a proper page heading, and the read-aloud and language controls sit in that header row instead of floating over your messages

  • Fixedai-hub

    The drifting background dots take their colour from the active theme instead of always being white, so they no longer vanish on light themes; on phones the decorative layer is skipped entirely

  • Fixedai-hub

    The page no longer fights the app layout with negative margins, so it sits in the same content frame as every other student page

  • Fixedstudy-terminal

    The reader and the tutor now fade in behind the same calm glass placeholders used everywhere else, instead of spinning rings and blinking "Loading..." text

  • Fixedstudy-terminal

    When a document fails to open you get a clear message and a link back to your study materials

  • Fixedstudy-terminal

    Study suggestions now arrive one at a time instead of two cards appearing on top of each other; the second waits its turn

  • Fixedstudy-terminal

    The study terminal now uses the same sidebar, spacing and scrolling as the rest of the student area, so moving into it no longer feels like a different app

  • Fixedstudy-terminal

    A wide document can no longer stretch the page sideways

  • Fixedstudy-terminal

    The chapter and topic navigation, the page controls and the background all follow your chosen theme instead of staying fixed white

  • Fixedstudy-terminal

    The decorative background is no longer drawn on phones, so the reader gets the full screen and the battery gets a break

  • Fixedstudy-terminal

    Opening the study terminal without a document now shows a clear "No document selected" message with a link to your study materials, instead of silently opening an unrelated document

  • Fixedstudy-terminal

    A document that can't be loaded now says so, instead of claiming nothing was selected

  • Newstudy-terminal

    On a phone the reader and the AI tutor each fill the screen, with a Document / Ask AI switcher instead of two squeezed columns

  • Newstudy-terminal

    Switching back to Document returns you to the page you were reading

  • Fixedprogress

    The four summary tiles (Overall Progress, Study Time, Study Streak, Achievements) had invisible icon backgrounds and colourless "Keep it up!" text; they now use your theme's accent colour like the rest of the app

  • Newprofile

    The password box that never actually changed your password is replaced by a "Change password" link to the real email reset flow, and the parent-sharing switches now link to the Privacy page where your choices are really saved

  • Newrelationships

    Parent requests, connected parents and pending invitations are now three clear panels that follow your chosen theme

  • Fixedprivacy

    The page's blue/purple gradient headline and background blobs are gone; it now uses the same panels and colours as the rest of the app, so it respects whichever theme you picked

  • Newsettings

    A line of helper text points at the sidebar Theme button instead of a disabled "See Theme Selector in Sidebar" button

  • Fixedpdf-viewer

    Pages and images in scanned textbooks now display instead of appearing blank

  • Fixedscheduled-tasks

    Weekly parent reports, parent alert emails and misconception scans now actually run on their schedule — none of them had ever run in production, so no parent had ever received one

  • Fixedscheduled-tasks

    A scheduled job that quietly did nothing is no longer recorded as having succeeded

  • Fixedscheduled-tasks

    Two endpoints that run scheduled work let unauthorized callers through whenever their security key was missing from the server — one skipped the check entirely, the other could be satisfied by guessing. The key is in fact missing in production, so both were open. They now refuse every request when it is not configured.

  • Fixedparent-invites

    The endpoint reporting how many invitations are pending or expired had no authentication at all and answered anyone who asked. It now requires the same authorization as the task it reports on.

  • Fixedupdates

    Signed-in users can get back to the app from the changelog

  • Newparent

    Link the child learning map from the child detail page

  • Fixednavigation

    Admin sidebar drops its two coming-soon dead ends

  • Fixednavigation

    Student sidebar only links to pages that exist

  • Fixedsecurity

    Remove unused write permissions from the public API role

  • Fixedassessments

    Quiz answers and their explanations were readable by any student for any published lesson, which let a student see the correct option before answering. Students now receive only the question and its options; answers stay on the server.

  • Fixedsecurity

    Require an account to search textbook content

  • Fixedsecurity

    Stop signed-in users editing school and achievement data

  • Fixedbackground-jobs

    The endpoint that runs scheduled work (parent emails, weekly reports, misconception scans) only checked request signatures when it detected a production environment. It now always checks them, so the protection cannot be silently switched off by how a deployment happens to be configured.

  • Fixedsecurity

    Restore six missing database security patches to the repo

  • Newui

    Navigating between pages now shows glass skeleton panels in the content area while the sidebar stays put, instead of a full-screen loader

  • Newui

    The frosted segmented-control tab styling duplicated between the dashboard and assessments now lives in a single shared component

  • Newui

    The dashboard's KPI summary strip (glass panel, divided 2-up/4-up grid, tabular numerals) is now a reusable component pair

  • Newui

    Every page heading now comes from one component — same size, same spacing, actions that wrap on small screens

  • Newui

    Panel wraps the glass panel look used across the student app in one reusable component, with a solid variant for dense surfaces

  • Fixedparent

    Retire the duplicate dashboard — /parent now redirects to /parent/dashboard

  • Fixedtheme

    Drop the second body block that fought the halo gradient

  • Fixedtheme

    Sidebar colors follow the same token convention as all other theme colors, so future edits cannot half-break sidebar styling

  • Fixedtheme

    Tab active state, touch focus outlines, and chart theme colors work again across all 27 themes

  • Fixedanalytics

    Topic progress and insights can no longer be read for another student, whether through the app or direct data-API calls

  • Fixedanalytics

    The topic detail view no longer lists other students' study sessions for the same topic

  • Fixedai-chat

    Both the standard and streaming chat paths now load prior conversation turns only for the signed-in student

  • Fixedai-chat

    A conversation's saved history can only be read back by the student who owns it, even if someone else guesses the conversation id

  • Fixedprogress

    The goals card showed a fixed 75% "Complete Mathematics Module" goal for every student; the remaining goals are computed from real activity

  • Fixedstudent

    The /insights-designs page rendered 1,500 lines of fabricated charts; it had no navigation link but was reachable by URL

  • Fixedauth

    Self-registered accounts no longer claim parental consent was given when it never was — the record now reflects the truth, and accounts a parent creates for their child still record real consent

  • Fixedrelationships

    A parent-child link can only become verified through the real invitation flow — it can no longer be forged through the API to gain access to a student's data

  • Fixedparent-dashboard

    Notes the AI tutor keeps about a student (recaps, misconceptions, memories) are now hidden from parents unless the student's AI-activity sharing setting is on

  • Fixedstudy-sessions

    Parents keep read access to their linked children's study history but can no longer create, edit, or delete those records

  • Fixedparent-dashboard

    Encouragement messages and alert subscriptions can now only be created for a child the parent is actually linked to and verified with — not for arbitrary students

  • Fixedparent-reports

    The weekly email now honors the student's AI-activity sharing choice — question counts and the AI coach note only appear when the student shares them, with the privacy notice shown instead

  • Fixedparent-dashboard

    The "questions asked" number on a child's card now only appears when the student shares their AI activity; otherwise parents see the same "not shared" treatment as other private metrics

  • Fixedparent-dashboard

    The session-recap feed now only includes children who are actually linked to the requesting parent and who share their AI activity — requesting another student's id returns nothing

  • Fixedparent-reports

    Unsubscribe links in weekly emails are now signed, expire, and ask for confirmation before opting out — nobody can unsubscribe someone else, and email scanners can no longer trigger it by accident

  • Newai

    Every AI chat surface now screens student messages and AI replies for harmful content, and responds with a friendly bilingual notice when a message can't be helped with

  • Newai

    Student messages are treated strictly as questions, so chats can no longer be tricked into ignoring their safety rules

  • Newai-hub

    When textbook search is unavailable, answers now arrive without citations instead of citing unrelated pages

  • Newvoice

    Spoken messages are screened the same way as typed ones

  • Newvoice

    Realtime voice conversations are paused during the pilot

  • Newaccounts

    The database itself now rejects any attempt by a signed-in user to change their own role or account status

  • Fixedcontent

    Stop spurious "failed to delete embeddings" error on delete

  • Newschedule

    A "Studied" marker on the calendar and a day-panel section now show the books you read each day, with time spent, so reading shows up alongside reviews, assessments, recaps, and exams; brief open-and-close sessions are filtered out so only real study appears

  • Newexams

    Register an exam (subject + date) from the Schedule page; it shows on the calendar and in the day panel, and you can remove it

  • Newdaily-planner

    Within two weeks of an exam, your daily plan adds exam-prep chapters for that subject, scaling up as the date nears

  • Newdaily-planner

    The plan card is now "Study plan" with an amber countdown to your next exam

  • Newschedule

    Exam days are marked on the calendar with a graduation-cap icon

  • Fixedtheme

    Professional White now has a real dark mode — elegant dark surfaces with readable text, instead of light-mode colours showing through under a dark background

  • Newschedule

    Days you studied get a marker, and selecting a day shows a "What you learned" recap beside that day's reviews and assessment scores

  • Newstudent

    A Study Notebook in the sidebar showing a recap of what you covered in each tutoring session

  • Newparent

    A "recent learning" card on the parent dashboard showing what your children studied recently

  • Newdaily-planner

    Show a daily study plan on the student dashboard

  • Newchangelog

    New public /updates page lists shipped features newest-first, generated from git history (no manual curation) and refreshed in the pre-commit hook; linked from the landing nav, footer, and hero beta note. Milestone/internal commit scopes are filtered so public tags stay clean.

  • Newlanding

    Hero notes the invited-beta phase

  • Fixedtts

    Clear stuck loading spinner when playback is stopped

  • Newmy-map

    Always-on 45° chapter labels on every station (truncated, full title stays in the detail card); on-ramp/lane spacing retuned to fit

  • Newmy-map

    Subject pill strip above the map, "42% read · 2/23 mastered" per subject, derived client-side (no API change); ghost-chip styling that tracks the active theme and stays readable across all 27 themes

  • Newmy-map

    Tap a pill to focus its subject line; others dim; background tap or a second tap clears

  • Newmy-map

    Spread each subject's trunk junction along the trunk by subject order so on-ramps fan out instead of knotting at the far left

  • Newmy-map

    Real reading coverage + content-scoped prerequisite graph

  • Newmy-map

    Tap a station for a detail card (coverage, mastery, unmet prerequisites) with a deep link into the viewer.

  • Newmy-map

    Theme-reactive throughout — lines use the foreground colour (frosted in dark, near-black in light) differentiated by opacity; coverage, mastery and next-stop use theme tokens.

  • Newbranding

    Replace default favicon with Mubarak blue M icons

  • Newsubject-progress

    Derives real subject mastery from the model, replacing the string-parsing attribution.

  • Fixedlegal

    Show Privacy, Terms & About to logged-out visitors

  • Newencouragement

    One-tap parent->child message to an in-app inbox (API + UI)

  • Fixedauth

    Redirect non-master admins out of the student UI instead of serving them the student shell; on a failed password login, hint Google-only users to use the Google button.

  • Fixedapi

    Guard student/topic-graph and admin/settings routes that returned a 500 with a stack trace on unexpected data / malformed body.

  • Fixedcontent-upload

    Let admins upload content, not just master admins

  • Fixedauth

    Parent-added children seed active so the beta gate doesn't silently lock them out (parent is the trusted actor, matching admin-created users)

  • Newauth

    Gate OAuth signups + waitlist surfaces for beta approval

  • Newauth

    Beta-gate read side — flag helper, status endpoint, signup notice

  • Newauth

    Runtime beta-approval flag + flag-aware email-confirm trigger

  • Fixedauth

    Fail loudly if the prod site URL for email links is missing

  • Newauth

    Block sign-in until the email is confirmed

  • Newauth

    Provision profiles atomically via a signup trigger

  • Fixedauth

    Make profile creation idempotent ahead of provisioning trigger

  • Fixedrag

    Drop the content-page gate's upper bound — it starved 50-70% of later-chapter content on partly-curated (Kuwait) books

  • Fixedassessments

    Stop auto-scheduler creating duplicate chapter tests

  • Newrag

    Each chunk is labeled by layout role (Claude Sonnet 4.6) and exercise chunks are down-ranked x0.5 at retrieval, so the Socratic tutor and AI Hub prefer explanation over the textbook's own questions/answers. Over-fetch lets a demoted exercise be replaced by the next-best chunk.

  • Newstudy-terminal

    Nudge students who get stuck on a page

  • Newschedule

    Clicking a date now lists that day's chapter tests / new assessments in the day panel, each linking to /assessments/{id} to take it

  • Newstudy-terminal

    Chapter coverage now credits a page only after the student spends >= 15s of foreground (active) time on it. The per-page timer pauses while the tab is hidden or blurred and resumes on focus, so click-through and background idling no longer inflate coverage -- the proactive chapter-test "studied" trigger can no longer be gamed.

  • Newgeneral

    Recommender widget: responsive 2-up grid (ultrawide/iPad-portrait), compact fully-tappable cards, glass scrollbar, tactile hover lift

  • Newcitations

    Simplify pill face to "Page N"; full doc title + page moved to tooltip/aria

  • Newcitations

    Cap displayed sources to the 3 most relevant (after de-dup)

  • Newcitations

    Wider spacing + distinct chips fix mis-clicks where crowded near-identical adjacent pills read as one and navigated to different pages

  • Newtheme

    Persistent dark-halo backdrop on auth layout + landing/morph/error surfaces

  • Newgeneral

    Chapter-progress foundation (hybrid coverage + quiz mastery)

  • Newai-registry

    Admin UI: agent cards now show per-modality chips + a TTS model line

  • Newgeneral

    AI prerequisite analysis (Sonnet 4.6) with review-then-apply

  • Newgeneral

    Topic prerequisites, struggle rescue, chunk classifier + realtime/rate-limit hardening

  • Fixedthemes

    Replace center-band gradients with top-anchored halo backgrounds

  • Newassessments

    Rebuild results and taking pages in the dashboard glass language: real page headers, full-width layout, KPI/score strips, fit-to-viewport with only the main content scrolling, restrained color (neutral + success/destructive) and icons.

  • Fixedrealtime

    Quiet transient SSE drop noise in Sentry

  • Newgeneral

    FSRS-lite spaced-repetition scheduling

  • Newcontent-library

    Cutout-card redesign + dashboard polish

  • Newassessments

    Harden answer scoring (fixes true/false always scoring wrong) and reuse the same comparison in the feedback route so results match the saved score

  • Fixedgeneral

    Language-aware global retrieval floor for Arabic

  • Newgeneral

    RAG retrieval audit — chunk-id-grounded probes scored vs baseline

  • Newgeneral

    AI Hub renders source citations + click navigates to viewer

  • Newgeneral

    Study Materials chat renders source citations + suppresses current-page pills

  • Newgeneral

    Include sources in ai-chat JSON response

  • Newgeneral

    Emit sources SSE event between fulltext and complete

  • Fixedgeneral

    RAG grounding, streaming dedupe, FK + auth perf on chat path

  • Newgeneral

    Header carries Active toggle (+ aria-label) + Save button + slug/kind/ version meta strip, always visible during edit.