Product updates
What's new
Mubarak is under active development. Here's what we've shipped to the platform, newest first.
- Fixedlanding
The home page header and footer show the Mubarak logo
- Fixednavigation
The app sidebar and mobile header show the Mubarak logo
- Newlanding
The home page tour now walks through eight tools with real screens: Study Companion, AI Hub, AI Tutoring, Voice Lessons, AI-generated tests, Study Schedule, Mastery Tracking and Study Analytics
- Newlanding
The features section below the tour covers the same eight tools, with a short explanation of each
- Fixednavigation
The sidebar account card shows your name instead of your email
- Fixeddashboard
Quiz chart labels no longer overlap the dates
- Newlanding
A new home page showing real screens from the app: the study viewer, AI Hub, AI Tutoring and your review schedule
- Newlanding
A voice preview on the home page shows how a conversation with the tutor sounds in Arabic or English
- Newlanding
Clear sections for parents and schools, with the school enquiry form in the same place as before
- Fixedai
The tutor and the AI Hub now answer only from books the student's own school is allowed to see. A school's uploaded textbooks could previously be quoted into another school's answer, even though the book itself never appeared in that student's library
- Fixedcontent
Teachers see and open their own school's uploaded books only; the national curriculum stays open to every teacher as before
- Newlanding
Soft lighting and a faint texture give the landing pages more depth.
- Newlanding
Background movement respects reduced-motion preferences.
- Fixedlanding
Keep the homepage headline neutral
- Newlanding
Try a sample lesson in Arabic or English, explore the study schedule, and see how parents and schools can follow learning.
- Newlanding
Preview the same tutoring, calendar, recap and school views used in the app, with clearly labelled example data.
- Newlanding
Enjoy clearer navigation, gentle transitions and better keyboard access, with accurate information about getting started.
- Fixedcontent
Fix a critical bug where a school admin could archive Kuwait-wide curriculum for every student in the country — archiving from a school's own console now only removes material actually uploaded for that school, never national material merely routed through it
- Fixedcontent
Close another way a document could jump straight to approved outside the review flow — editing a document's details can no longer approve a school's upload; only Release for processing or Reject can decide it
- Fixedcontent
Releasing a school's textbook for processing no longer times out and shows an error after the approval already went through — approving the document and starting its indexing are now two separate steps, so a slow book never looks like a failed review
- Fixedcontent
A school's pending-review upload no longer offers the old Approve/Reject shortcuts — in the content library's overflow menu or its preview sheet — which changed status without ever starting indexing; Release for processing and Reject are the way to decide it, and both actually start the review and leave an audit trail
- Newcontent
The library gains a Pending school uploads filter, the document workspace gains Release for processing and Reject (with a required reason), and the admin dashboard surfaces how many are waiting
- Newschools
The Content page gains an Upload textbook button; each document shows whether it is waiting for review, processing, available to students, or was not accepted (with the reason), and material can be archived
- Newcontent
A school's submitted document can be released — which publishes it to that school and begins indexing it — or declined with a reason the school reads on their own Content page
- Newschools
Every document on the school's Content page now shows whether it is waiting for review, being processed, available to students, or was not accepted — with the reason, in the reviewer's own words; a school can archive material it uploaded
- Newschools
A school admin uploads a PDF their school owns; it is filed for review rather than published, and a school may have ten waiting at once
- Fixedcontent
Uploading a document now begins reading and indexing it straight away — until now someone had to press Reprocess before a new upload became searchable
- Fixedschools
When two people decide the same join request at once, the second is told someone else already decided it, instead of an unrelated message about the student belonging to a school
- Fixedschools
Approving a join request refreshes the roster, so the student is there the moment you switch to it instead of after a reload
- Fixedprofile
When your school can't be loaded, the profile says so and offers a retry, and you can still choose a school to ask to join
- Fixeddashboard
The same failure is reported on the dashboard instead of showing nothing at all
- Fixedschools
When the join-request list cannot load, the school is told to retry instead of being shown an empty queue that hides waiting students
- Fixedschools
A school sees only a masked email address for a student who is waiting to be approved, and for the parent who applied on their behalf; staff addresses are unchanged
- Fixedschools
A failed refresh of the join-request queue no longer wipes the table — the rows an admin was already reviewing stay on screen, with a banner explaining the refresh failed and a way to retry
- Newschools
The Students page gains a Join requests view beside the roster, listing who asked to join with their grade and when; each request can be approved (the student joins the roster) or rejected after a confirmation; a student who was declined before is marked, and declined requests stay visible under a status filter; a request that resolved itself in the meantime (the student already joined another school) is called out plainly instead of failing silently
- Newprofile
The school row now shows the real state — the school's name once confirmed, "pending" while the school decides, or a note that the school did not confirm, with a button to choose another school and ask again
- Newdashboard
A one-line notice while a school membership is pending or was not confirmed, linking to the profile; nothing shown once confirmed
- Newschools
When students are waiting to join, the dashboard's quick actions gain "Review join requests" with the count, opening the queue directly; the action stays out of the way when nobody is waiting
- Newschools
A school admin can approve a request, which puts the student on the roster, or decline it; a student who joined another school in the meantime is reported rather than moved
- Newauth
A student who signs up with email or Google, and a child a parent adds, now ask to join the chosen school; the school confirms before the student appears on its roster
- Fixedcontent
Material shared with a school is shown only to that school's members
- Newingestion
Mathematics textbooks now read Arabic algebra correctly — fractions, exponents, roots and the order of terms are transcribed as printed
- Fixedschool-admin
The dashboard's stat row, stuck-students list, and activity feed now keep showing the last loaded figures when a refresh fails, with a single notice at the top of the page saying the refresh didn't go through instead of clearing every panel to a retry state
- Newschools
Signing in as a school admin opens the new dashboard instead of the student roster, and the sidebar lists Dashboard first
- Improvedschools
The dashboard's recent-activity feed keeps loading quickly no matter how many students a school has enrolled
- Newschools
/school-admin is now a real overview page - the school's six headline figures, the students stuck on topics, the newest study and quiz activity, and shortcuts to enrol someone
- Newschools
Add a student, add a teacher, open the roster or open the activity log straight from the dashboard; the two add shortcuts land with the form already open
- Newschools
A temporary error while refreshing the dashboard keeps the last good figures on screen and says the refresh failed, instead of emptying the page
- Newschools
The dashboard lists the most recent study sessions and completed quizzes across the school, newest first
- Newschools
A school with no activity yet says so, and a failed load offers to retry - the two are never shown the same way
- Newschools
The dashboard lists the students with the most topics they are stuck on; clicking one shows exactly which topics, with no extra loading
- Newschools
A school with nobody stuck says so plainly, and a failed load says it failed and offers to retry - the two never look alike
- Newschools
Students, teachers, content, active in the last 7 days, students stuck, and accounts pending or inactive - shown as one row at the top of the school dashboard
- Newschools
A figure that could not be loaded shows a dash rather than a zero, so a failed read never reads as "none"
- Newschools
The school console can now load its whole overview in a single request - the school's totals, the students stuck on topics, and the most recent study and quiz activity
- Newschools
A school admin can now be shown which of their students are stuck on which topics, ranked by how many topics they are stuck on
- Newschools
A shortcut can now take an admin straight to enrolling a student or a teacher, landing on the roster with the add form already open
- Fixedschools
Typing in the student roster search no longer loses all but the last letter when the page is slow to catch up; the box now shows exactly what was typed, matching the teacher roster
- Fixedupdates
The public page no longer carries HTTP status codes, test-design wording, or a description of how a past security weakness could be exploited
- 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.