What is not finished

An honest register of the gaps in LearnAurelle, written so nobody discovers them by accident. Last updated 14 October 2026.

Read this first: three things will bite you.
  1. The live site is out of date. learnaurelle.com is still serving the old pre-rename build. None of the mathematics exists there yet.
  2. You must run supabase/schema-math.sql or no maths progress is saved. It is step 5 of SETUP.html.
  3. The maths database layer has never been executed. It was written and reviewed, not tested. Verify it yourself after deploying.

1. Lesson prose — the largest gap

The catalogue describes 15 courses, 102 units and 459 lessons. Every one of those lessons has a real title, sits in a real sequence, and is tagged to real California standards. 53 of them have a written explanation. The other 406 show a page that says so plainly, lists where the lesson sits and which standards its unit covers, and links to any practice that exists. Nothing renders blank and nothing pretends to be finished.

CourseWrittenTotalCoverage
Algebra 13939complete
Integrated Math I733
Integrated Math II430
Integrated Math III133
AP Calculus AB133
AP Statistics131
Geometry038outline only
Algebra 2035outline only
Precalculus / Math Analysis033outline only
AP Precalculus032outline only
AP Calculus BC018outline only
Introduction to Data Science030outline only
Financial Algebra026outline only
Discrete Mathematics025outline only
Competition Mathematics023outline only
Total53459
Why Integrated Math already has lessons nobody wrote for it. Lessons are keyed by title in one shared pool, not owned by a course, because California's 2023 framework says the traditional and integrated pathways cover the same standards in a different order. Writing Solving multi-step equations once made it appear in Algebra 1 and in Integrated Math I automatically. 43 written entries produce 53 lesson appearances today, and that multiplier grows as more are written.

How to add one

Open js/math-lessons.js and call L() with the exact lesson title from the catalogue. The file header documents the content format, and the 39 Algebra 1 entries are working examples of every feature: prose with inline $maths$, worked examples with steps, plotted figures, key ideas, common mistakes, vocabulary, and links to practice skills. No other file needs touching — the lesson page and the Lesson badge both appear on their own. MathLessons.stats() recounts coverage live.

2. Practice generators

Complete. 150 skills across nine files generate unlimited randomised problems with worked solutions, and all 102 units in the catalogue now map to at least one of them — 252 unit–skill links in total. Numeric and algebraic answers are graded by the maths engine, so any equivalent form is accepted; conceptual topics that do not reduce to an expression use multiple choice or a short written answer instead.

FileSkillsCovers
math-problems.js30 Algebra 1, Integrated Math I–III core, Algebra 2 core, trigonometry, early calculus, basic statistics, finance
problems-geometry.js16 Vocabulary, constructions, midpoint/distance, transformations, rigid motions, congruence criteria, angle pairs, triangles, quadrilaterals, similarity, proportional segments, circle angles, arcs and sectors, chords and tangents, coordinate proof, logical structure of a proof
problems-algebra2.js16 Parent functions, transformations, piecewise, inverses, rational expressions and operations, asymptotes and holes, radical equations, extraneous solutions, arithmetic/geometric/recursive sequences, end behaviour, Remainder and Factor theorems, complex zeros, polynomial identities
problems-precalc.js17 Composition, average rate of change, zeros and multiplicity, slant asymptotes, polynomial inequalities, the trig identities (fundamental, sum/difference, double/half angle, proof steps), vectors, dot product, matrices, determinants and inverses, systems by matrices, conics, parametrics, polar
problems-calculus.js24 Chain rule, implicit and inverse derivatives, motion, related rates, linearisation, L'Hospital, MVT, monotonicity, concavity, optimisation, slope fields, separation of variables, exponential models, average value, area between curves, volumes, parametric and polar calculus, and the full BC series unit (convergence tests, geometric and p-series, ratio test, Taylor/Maclaurin, alternating and Lagrange error)
problems-statistics.js19 Two-way tables, correlation, least-squares regression, residuals, sampling methods and bias, experimental design, scope of inference, confidence intervals and tests for proportions, t procedures, two-sample inference, chi-square (goodness of fit, homogeneity, independence), regression-slope inference, and the Data Science units: variable types, provenance and ethics, simulation and bootstrapping, classifier evaluation, communicating with data
problems-discrete.js11 Propositional logic, truth tables, induction, set operations, inclusion–exclusion, graphs and the handshake lemma, shortest path and colouring, recurrences, algorithm efficiency, divisibility and primes, modular arithmetic and Caesar ciphers
problems-finance.js6 Wages and overtime, payroll deductions and net pay, budgeting, progressive income tax, credit cards, amortisation for car loans and mortgages
problems-competition.js11 Vieta, clever factoring and SFFT, AM–GM, digit problems, CRT and Diophantine equations, stars and bars, complementary counting, power of a point, angle chasing, area techniques, and AMC scoring/guessing strategy

Three answer modes are supported. answerType: "number" and "expression" go through the algebraic grader; "choice" renders lettered options (clicking one selects it, Check grades it, the right option is then highlighted); "text" accepts a short written answer with an accepts[] list of synonyms and tells a student when they are only a spelling slip away.

New generators go in the matching js/problems-*.js file via register(), then into the UNIT_SKILLS map in js/math-ui.js. Run node tests/math-problems.test.js afterwards: it generates 40 items per skill (6,000 in total), fails if any cannot be graded correct against its own key, checks every distractor on every multiple-choice item, and fails if any catalogue unit is left without practice.

Still a real limit. Geometry constructions, transformations and proofs are assessed here with structured questions (name the next construction step, identify the rigid motion, give the image coordinates, choose the congruence criterion, state the missing reason). That is genuinely useful, but it is not the same as a drag-and-drop construction tool or a two-column proof builder, and it should not be mistaken for one.

3. Not tested, and not claimed to be

supabase/schema-math.sql has never been run. Three tables, eight RLS policies, three guard triggers and four functions were written by following the patterns already proven in schema.sql, and reviewed by reading. No PostgreSQL instance was available in this session: the scratch database was lost and sudo was broken. Do not assume these policies work. Section 6 of TESTING.html gives the exact checks to run after you deploy.

Also untested: Supabase Auth itself, Supabase Storage (unused), rate limiting, and load. The 127 database assertions from the original build were not re-run this session for the same reason. The browser suite in tests/browser/ was run — 60 assertions, 0 failures — but against the offline demo backend, so it proves the interface, not the policies.

4. Known design limits

Practice can be faked, by design

Problems are generated and graded in the browser, so the server cannot independently verify a result. A student who opens the console can record a correct answer they did not earn. This is acceptable only because practice is never a gradebook source. Graded work goes through submit_quiz(), which scores inside Postgres against an answer key the student's browser never receives. The teacher's Class Progress page says so on the page itself.

localStorage is a cache, not the database

Maths progress is written to Postgres through math_record_attempt(). localStorage holds two things only: a read-through cache so a page can paint before the round trip finishes, and a bounded retry queue (500 items) so a dropped connection does not silently lose work. The queue is flushed on the next successful load. If you sign in on another device your real progress follows you; only the cache stays behind.

Standards are cited by code, not by text

Every unit lists its CA CCSSM codes and the lesson page decodes the domain (A-REI → Algebra · Reasoning with Equations and Inequalities). The verbatim text of each standard is deliberately not reproduced, because paraphrasing an official standard and presenting it as official would be worse than omitting it.

The review schedule is a Leitner ladder, not an SM-2 model

A skill's next appearance is a function of its current correct streak only: 0 → due now, 1 → 1 day, 2 → 2, 3 → 4, 4 → 7, mastered → 21. There is no per-item ease factor, no response-time weighting and no forgetting curve fitted to the individual. The interval is computed from last_seen_at, which comes from the database, so the queue is the same on every device — but a student who answers nothing for two months simply sees everything due at once rather than a graded backlog.

The standards map counts codes, not mastery of the standard itself

A standard is shown as held when every practice skill tagged with that code has been answered correctly five times in a row. That is a proxy. A code with two generators attached is easier to “hold” than one with six, and 79 of the 205 codes the app references have no generator at all — those are drawn with a dashed outline and labelled no practice generator yet rather than silently counted as unmastered. The page also states both totals plainly: 205 codes are referenced across units and generators, while the course catalogue itself lists 178. The 27 extra are course-local codes (AP-*, CM-*, DS-*, FA-*) and six CCSSM codes a generator cites that no unit currently lists. Treat the map as a study aid, not as a standards-based grade.

Worksheets are printed by the browser

The worksheet builder lays out real generated problems for paper and prints through the browser's own dialog (choose Save as PDF there to keep a file). There is no server-side PDF renderer, no page-count control, and no way to email a sheet from inside the app. The sheet is reproducible from its seed — the form number is printed on both the questions and the key — but nothing records which seed was handed to which student; that is still a paper exercise.

The hidden panels are cosmetic

There is one code (the Konami code, or the wordmark tapped seven times on a touch screen), one switch (“Hidden panels” in Settings › Appearance, mirrored on the panel itself) and one page (#/secrets, four tabs: Panels, Terminal, Arcade, Lore). Switching it off hides the nav entry and closes every panel without forgetting the code.

None of it is a permission boundary and none of it is treated as one. The terminal reports only what the signed-in session can already read, every command runs in the browser against data it already holds, and the database still checks the role on every request — whoami says so in as many words. Reaching the page by guessing the address grants nothing, which is why guessing it is allowed. The unlock is remembered in localStorage, so it is per-browser and a new device starts locked again; that is a toy's persistence, not an account setting.

Graphing calculator

Plots explicit functions y = f(x) with pan, zoom, asymptote breaks, shading and auto-fit. It does not do parametric, polar or implicit curves, inequalities in two variables as a shaded region driven by the user, regression on entered data, or tables of values.

5. Deployment

ItemState
learnaurelle.com stale Live and on a valid certificate, but serving the build from before the rename. Every change since — the new name, the palette, all the mathematics — is undeployed. Re-upload the folder.
learnaurelle.org unconfigured On Cloudflare nameservers but still carrying leftover IONOS records. No redirect yet. Plan in DOMAINS.html.
tradingdesk.me Serving via the Worker. Not yet redirected to the canonical domain.
Supabase Site URL Must be set to https://learnaurelle.com once the above is done, or password reset emails will point at the wrong host.
No cloud resources were created for you. Nobody with access to your Cloudflare or Supabase accounts performed these steps. Every instruction in SETUP.html and DOMAINS.html is written for you to carry out, with the exact place to click.

6. Things that would be nice

Three items that used to sit in this list have been built and tested: the per-standard mastery report (#/standards), spaced repetition (#/review), and the printable worksheet with answer key (#/worksheet). Their limits are described in section 4 above rather than hidden here.

IdeaPriority
Assign a maths unit or skill as homework, the way trading lessons can already be assignedhigh
A teacher-side view of which worksheet seed went to which student, so a lost paper can be regraded without askinghigh
Equation editor so students can enter fractions and radicals visuallymedium
Per-item ease factors so the review ladder adapts to the individual rather than to the streak alonemedium
Generators for the 79 referenced standards that still have nonemedium
Geometry construction tool for compass-and-straightedge lessonslow
Offline service workerlow