Next release

Counting down to the next Millennium.

--Days
--Hours
--Minutes
--Seconds

Landing 14 August 2026, 5:00 PM AEST. Full release notes replace this countdown the moment it ships.

Big things are coming to Millennium

This is the largest update Millennium has had — large enough that what follows may still not be all of it. The application has been rebuilt from the ground up and gained an assistant that works on your own data, a full study system, reports you can mark up, and a dashboard you can rearrange, with a substantial amount of security and reliability work underneath all of it.

Star the features you most want to see.

A rebuilt platform

Millennium moves off its original Next.js foundation onto a faster, fully typed stack.

  • TanStack Start and Vite

    Every page, route, and API handler has been rewritten on TanStack Start with Vite 7. Navigation is client-side and instant, cold loads are dramatically smaller, and the whole application now shares one router and one build pipeline.

  • Server boundaries you can reason about

    API endpoints are file routes with explicit request handlers. Shared portal, Supabase, Stripe, and cryptographic logic now lives in one place instead of being duplicated across pages, which makes behaviour consistent no matter where you trigger it.

  • One database history

    Every schema change is an ordered migration applied before the code that depends on it, and portal snapshots are merged inside the database under a row lock rather than read out, edited, and written back.

  • Release verification in CI

    Locked installs, typechecking, and production builds run on every change. Broken builds no longer reach you.

The browser extension is gone

Syncing no longer requires installing anything into your browser.

  • Retired for good

    Both the Chrome and Firefox extensions have been removed entirely. They needed broad page permissions, broke whenever a portal page changed, and were a constant source of silent sync failures.

  • Replaced by server-side sync

    Sync now runs on the server. Direct HTTP is the default path and a controlled browser session is the compatibility fallback for pages that genuinely need a real renderer. Nothing runs inside your browser any more.

  • One code path, one set of bugs

    There is a single sync engine, so a fix applies everywhere at once instead of needing separate extension updates.

Control over what syncs

You decide what Millennium pulls, how often, and what it keeps.

  • Per-source toggles

    Timetable, notices, classes, attendance, and reports can each be enabled or disabled independently. Turn off what you do not use and sync gets faster and quieter.

  • Visible sync status

    Every source shows when it last succeeded, what it changed, and why it failed if it did. A run that loses one portal page now says so and keeps the sections it did fetch, instead of reporting a plain failure.

  • Review before it sticks

    Room changes and unenrolments surface as review prompts rather than silently rewriting your timetable, so a portal glitch cannot quietly erase a class.

  • Deep runs for past years

    An ultra run walks a range of school years one at a time, reporting progress as it goes and rolling back to your last good snapshot if you cancel it.

  • Retention and deletion

    Clear a single source or delete every cached copy — cloud and browser — in one coordinated operation.

The Millennium assistant

An assistant that can actually act on your dashboard, with guardrails around every action.

  • Grounded in your own data

    The assistant reads your timetable, notices, classes, and reports directly rather than guessing. Ask what is on tomorrow or which assessments are outstanding and it answers from your real portal snapshot.

  • Approval-gated changes

    Anything that modifies your dashboard requires a short-lived, single-use approval created and consumed on the server. Read-only questions run immediately; changes always ask first.

  • Bring your own provider

    Connect your own OpenRouter, Anthropic, or OpenAI credentials and choose exactly which models the assistant may use. Entitlements and usage budgets are enforced server-side, never from what the browser claims.

  • Tone and thinking

    Pick how the assistant writes, and whether it shows its reasoning summarised or not at all.

Flashcards and study tools

A complete study surface built into the dashboard.

  • Sets, cards, and real scheduling

    Create sets by hand or have the assistant draft them from your class material, then review them with FSRS scheduling that prioritises what you are about to forget. Card types cover question and answer, typed answers, cloze deletions, and image occlusion.

  • Find any card

    A card browser searches your whole collection by set, tag, type, state, lapses, stability, and dates, then suspends, buries, reschedules, retags, or deletes whatever the search returned.

  • Focused sessions

    Run a saved or ad-hoc search as a session, ordered blocked by topic, mixed to make you tell topics apart, or adapted to what is most overdue. Each session explains the order it chose.

  • Statistics that mean something

    Reviews, time studied, a recall estimate, a daily activity map, and a forecast of what your current schedule will ask for — each with a plain-language reading of what the number implies.

  • Offline-first review

    Study sessions work without a connection and reconcile when you come back online, so a dropout mid-session never costs you progress.

  • Exam plans and sharing

    Build a plan around an exam date and let it pace your daily reviews, or share a set by code and let someone take a copy while keeping their own schedule. Revoking a share removes the link from your page rather than leaving a dead row behind.

  • Import and export

    Bring in existing decks, and download a complete copy of your sets, cards, and review history at any time.

Home, arranged the way you want

Home is a layout you edit in place rather than a fixed arrangement.

  • Move, span, and place cards

    Drag any card to reorder it, send it to either column, or let it span the full width. Placement is explicit, so a card that simply grew taller no longer throws unrelated cards into the other column.

  • Draw over the top

    Free ink, text, lines, and images sit on their own layer above the cards, for the notes and arrows a card cannot hold.

  • Two card styles

    Choose between clean minimal surfaces and richer stylised cards from one setting. Both behave identically when dragged and resized.

  • Layouts that follow you

    Your arrangement is saved per account and restored on every device, with an account-scoped local fallback so it still loads offline.

  • Reachable at any zoom

    Home scrolls on both axes, so a zoomed-in browser or a wide arrangement no longer clips cards out of reach.

Better home cards

Nearly every card on Home was rebuilt or extended.

  • Quick access, rebuilt

    Quick access is its own card rather than being buried inside another one, and each shortcut can be renamed and tinted.

  • Timetable and notices

    The timetable card shows the current and next period with room changes highlighted, and notices are grouped, filterable, and no longer duplicate themselves.

  • Attendance and study

    An attendance snapshot and a due-cards card put the two things with real deadlines in front of you without navigating anywhere.

  • A note that stays

    The Home note is a full markdown editor, saved with the rest of your layout.

Tabs

Work across several parts of the dashboard without losing your place.

  • Multiple pages at once

    Open Classes, Reports, and Flashcards side by side as tabs and switch between them instantly. Each tab keeps its own scroll position, filters, and state.

  • Persistent across sessions

    Your open tabs are restored when you come back, so a half-finished piece of work is exactly where you left it.

  • Keyboard-driven

    Open, close, and cycle tabs from the keyboard, and jump straight to any of them from the command menu.

Attendance, reworked

Attendance went from a single number to a page that explains itself.

  • Per-period detail

    See each individual absence, partial, and late mark with its date, period, class, and the reason recorded against it, rather than one aggregate percentage.

  • Trends over time

    Attendance is broken down by class and by term so a single bad week is distinguishable from an ongoing pattern.

  • Careful filling, clearly marked

    Optional filling infers a skipped roll only from marked periods in the same class, always shows which values were inferred, and can be turned off entirely.

  • Configurable thresholds

    Set what counts as a concerning percentage for you, and the page highlights against your own threshold.

Reports you can work in

Reports are now something you read, mark up, and compare inside Millennium.

  • A real PDF reader

    Stored reports open in a viewer built for them: smooth zoom with the wheel, trackpad, pinch, or keyboard, selectable text, and pages that render as you reach them rather than all at once.

  • Annotate anything

    Draw, highlight, add lines, arrows, and text notes, then erase or undo them. Marks are saved against the report and survive a re-sync.

  • Split the view

    Divide the reader into as many panes as you need, each showing a different report, split further either way, and drag the divider between them. Splitting always adds a pane — it never replaces the one you were reading.

  • Called by their own names

    Reports are labelled with the name the portal gave them everywhere they appear, including the file you download, instead of a generated title or an internal id.

  • Opening and closing, animated

    Moving between the archive and a report is a deliberate transition rather than an instant swap, so it is obvious which one you are looking at.

Reworked classes page

Classes was rebuilt on the new component system from scratch.

  • Everything about one class in one place

    Enrolment details, lessons, teachers, room history, per-class attendance rates, and the periods a class actually occupies, gathered from the class list, the timetable, and the attendance register together.

  • Past classes stay separate

    Classes you are no longer in are kept and labelled rather than deleted or mixed into your current load, and you can hide or restore one yourself.

  • Per-class colours

    Assign a colour to each class and it carries through the timetable, calendar, home cards, and reports.

  • Subjects that stop disappearing

    A routine sync reports only the classes whose counters moved. Millennium now merges that into the subjects you already have instead of replacing them with it, which is what left the page showing one or two subjects until you signed in again.

Calendar and holidays

The calendar now understands the school year.

  • Proper holiday handling

    Term breaks, public holidays, and pupil-free days are recognised and rendered as non-teaching days. Your timetable no longer invents a full week of classes over the holidays.

  • Term-aware week numbering

    Week A and Week B cycles account for breaks correctly, so the first week back shows the right rotation instead of drifting by one.

  • Local events

    Add your own events alongside portal data, with recurrence, duplicate cleaning, and a description tooltip, and keep them entirely local to your account.

  • Choose what appears

    Every calendar has a checkbox, including the school calendar built from portal data, which previously could not be switched off.

  • Hovering means hovering

    Pointing at an event highlights the event. It no longer lights up the hour or day cell the event happens to start in.

Theme builder, rebuilt

Design a theme against your real dashboard instead of a swatch grid.

  • Live on-dashboard editing

    Changes apply to the dashboard behind the editor as you make them. You are looking at your actual Home, timetable, and cards while you tune colours, not an isolated preview panel.

  • Simple or complete

    Generate a whole theme from one base colour, contrast, and appearance, or open the advanced builder and set every token — surfaces, borders, text tiers, accents, gradients, and syntax colours.

  • A gallery to start from

    A set of curated colourways you can apply in one click. Picking one adds it to your own themes, so it is a starting point rather than a preset you are locked into.

  • Consistent everywhere

    Themes drive both the modern component library and the remaining legacy dashboard styles at once, which removes the mismatched surfaces that used to appear on older pages.

  • Save, switch, and share

    Keep multiple themes, switch between them instantly, and export or import one as a shareable code.

Animations, overhauled

Motion became a settings page rather than a single on/off switch.

  • Per-category control

    Page transitions, modals, sidebars, cards, tooltips, and toasts each have their own controls. Turn off the ones that get in your way and keep the ones that help.

  • A real curve editor

    Shape any category's easing by dragging points on a curve, scrub the timeline, and watch a live preview of the thing you are tuning.

  • Reduced-motion aware

    The system respects your operating system's reduced-motion preference by default, and your explicit choices override it if you want them to.

  • Presets

    Snappy, standard, and calm presets set everything at once if you would rather not tune individual values.

Notifications, extended

Notices became something you can organise instead of only scroll.

  • Folders and rules

    Sort notices into folders, and write rules that file new ones automatically so the things that matter to you are not buried under whole-school announcements.

  • Automatic archiving

    Notices age out on a schedule you control rather than accumulating indefinitely.

  • No more duplicates

    The duplication that used to occur when the same notice arrived from more than one sync pass has been fixed at the merge layer.

  • Read state that holds

    Read and unread state persists across devices and survives a re-sync, and the sidebar itself can be reordered, resized, and pruned.

Account page, reworked

Your details are finally editable.

  • Editable profile

    Change your display name, preferred name, contact details, and profile image directly. Previously the page could only show what the portal reported.

  • Data freshness in the open

    See exactly how current each part of your dashboard is, and trigger a fresh sync from the same place.

  • Export and deletion

    Export a complete signed copy of your account data, or delete the account along with every cached copy in one coordinated operation.

Settings that actually work

Many more settings, and the existing ones now do what they claim.

  • Broken toggles repaired

    A substantial number of settings previously saved but had no effect, or reverted on reload. They have been reconnected to the behaviour they describe and are persisted server-side.

  • New controls throughout

    Card styling, sidebar order and visibility, attendance thresholds, sync sources, assistant providers, animation categories, flashcard review controls, and data retention are all configurable now.

  • Search that finds the control

    Search settings by name and land on the individual switch, not the page that contains it.

  • Sensible defaults and reset

    Every section can be reset to its default independently, so experimenting no longer risks a dashboard you cannot restore.

  • Shortcuts you choose

    Every navigation and settings shortcut can be rebound, including multi-key sequences.

Guided tours

A walkthrough of the dashboard, for whichever version of it is new to you.

  • Two tours

    New accounts get the full walkthrough. Returning accounts get a shorter one covering only what changed, and can start the full tour from the end of it.

  • Interactive, not a slideshow

    Steps that need a panel open, open it themselves, and the highlighted control stays fully usable while the guide is on it.

  • Always replayable

    Both tours live in Settings and can be replayed at any time without touching your preferences or data.

Security and privacy

The parts you cannot see received the largest share of the work.

  • Hardened API surface

    Mutating endpoints combine signed-session authorisation, same-origin and Fetch Metadata checks, bounded request parsing, and durable rate limiting. Roles are enforced server-side, never from anything the browser can edit.

  • Encrypted credentials everywhere

    Portal credentials and session cookies are encrypted before storage, and browser caches are scoped per account so shared devices cannot leak between users.

  • Reports fetched safely

    Stored report PDFs are served from your own account's storage path, verified before they are saved, and never reachable through a guessable URL.

  • Redacted structured logging

    Server logs are structured and redacted, with liveness and readiness endpoints and startup validation that refuses to run with a misconfigured environment.

Countless bug and interface fixes

Too many individual fixes to list, spread across every surface.

  • Data correctness

    Duplicate notices, drifting week rotations, stale timetable entries after a room change, and — the big one — subjects and timetable periods vanishing after a routine background sync until you signed in again.

  • Layout and scrolling

    Clipped content, unreachable cards at browser zoom, sidebars that overlapped the content area, and modals that trapped scroll have all been addressed.

  • Reading and marking up documents

    Selecting text in a report no longer paints a ghost copy of it over the page, the eraser has an eraser's cursor instead of a “not allowed” sign, and zooming quickly no longer leaves pages half-drawn.

  • Waiting states

    Every flashcards tab now says it is loading instead of showing an empty panel that was indistinguishable from having nothing.

  • Authentication reliability

    Intermittent false credential rejections, sessions lost after a successful remote login, and callbacks consumed twice have all been resolved.

  • Consistency work

    Spacing, typography, focus rings, empty states, loading skeletons, and error messages were normalised across the entire application.

And a great deal more that did not fit on this page.