Self-paced mathematics olympiad training platform for DBS. Complete with features such as answer-only problem sets, automatic grading, progress tracking, teaching videos, solution links, feedback reports, and teacher analytics.
Statements can be rendered in Latex or HTML math tags. For help with setup, refer to SETUP
- JSON import format
- Grading rules
- Admin Guide
- Student Guide
- Permissions Guide
- Deployment Guide
- Visual System
- Latex Support
- Asymptote Diagrams
- Performance Model
Current app version: v0.67.0.
Session updates from the CodeGraph/Second Brain indexing pass onward:
- Indexed the codebase with CodeGraph and created a layered Obsidian Second Brain vault under
DBSMO/Projects/dbsmo/, including start, overview, architecture, file map, entry points, components, data/storage, common tasks, risks, and glossary notes. - Added class deletion support and polished the class detail page so class management can remove classes directly from the admin workflow.
- Added optional problem-image support for authoring and imports:
- GUI problem maker image uploads.
- JSON import companion image ZIPs using the same basename as the JSON file.
- Mass ZIP import support for nested image ZIPs.
- Secure ZIP handling with size, path, image type, and image count validation.
[[img:key]]rendering below problem statements.
- Checked and improved the JSON dry-run/edit flow used when imported JSON has validation issues.
- Updated docs under
docs/and refreshed the project knowledge base notes after implementation work. - Polished the mobile/sidebar popup behavior so the sidebar sheet itself does not create an extra scroll trap after opening.
- Updated agent/project instructions to remove the Claude co-author trailer requirement for future commits.
- Fixed leaderboard role labels so staff tags show the actual role, such as Admin, Teacher, Content Editor, or Analyst.
- Reworked the standard leaderboard and average score model to use more useful mastery/weighted best-attempt ranking signals.
- Set the app version label to
v0.67.0and added the app footer with repository and Cosmic Crusader website links. - Fixed create/edit set problem number controls so they render as clean number inputs instead of being embedded in the circular problem badge.
- Fixed create-set preview image rendering, including HTML statement normalization preserving
[[img:key]]tokens. - Added Google account profile pictures as the default avatar fallback before deterministic initials, while preserving custom avatar URLs/uploads.
- Added focused tests for image-token rendering in LaTeX and HTML statements and configured Vitest to understand the app
@/import alias. - Kept solved sets readable while locking new submissions after a perfect-score attempt.
- Added a profile mastery heatmap between authored tasks and the set grid, using GitHub-style green intensity for days with 1-5 mastered sets.
- Added problem-set writeups with LaTeX/HTML text, image uploads, latest/top sorting, and upvote/downvote voting. Writeups are reachable from the set header beside the bookmark action and remain accessible regardless of submission status.
- Added owner/admin writeup deletion with an in-card confirmation step, plus a sidebar Writeups page for browsing latest/top writeups and searching by problem set.
- Added class announcements: teachers/admins can post messages to one or more classes, and students see targeted messages pinned at the top of the dashboard on page load.
- Kept Anime.js only for the shared math loading indicator and dashboard caret, while removing delayed route reveals, staggered analytics cards/bars, animated chart drawing, page fades, and floating background motion so content appears immediately.
- Fixed mobile problem-set task cards/sidebar tap layout/dashboard account controls, added the
/classesAnnouncements subtab with existing-message deletion, and normalized literalnulldisplay names. - Added direct per-set Analytics buttons on both the student-facing set header for admins and the admin set editor, and made the set-editor Delete button match the other topbar action sizing.
- Fixed the mobile sidebar tap/focus jump by keeping the opened sheet geometry stable when nav items receive focus.
- Added live rendered answer previews in Practice and problem-set answer boxes, and expanded expression grading to understand common LaTeX input/keys such as
$5$,\sqrt{5},5\sqrt{2}-7,\frac{1}{2}, and2^{1/2}. - Rehauled the shared visual system around hand-drawn math-notebook shapes: graph-paper surfaces, irregular ink borders, marker accents, offset control shadows, mixed
corner-shapegeometry, and progressiveborder-shapecontours with conventional browser fallbacks. - Audited and unified the non-game application routes around the same sketchbook language, including dashboard, catalog/set detail, writeups, practice, classes, leaderboard, users/profiles, settings, and admin surfaces. Added Shantell Sans for headings and controls while preserving Inter for dense content, tables, and math; FTW and Playground were intentionally excluded from the route-specific redesign.
- Audited the signed-in production problem-set page in the real Chrome session and corrected the redesign: removed percentage shape paths from tall panels, normalized compact panel headers, removed the light-blue problem statement band, and switched functional surfaces to softer hand-drawn squircles.
- Removed the global yellow wavy eyebrow/title underlines and moved the handwritten character into asymmetric squircle borders for cards, panels, controls, and form fields.
- Restored the desktop sidebar as a compact icon rail that expands on hover/focus, preserved the stable mobile sheet, and introduced a shared simplified Sigma favicon/landing mark.
- Upgraded KaTeX to v0.17, enabled the official
mhchemextension, and added secure compatibility rendering for document wrappers and table environments such astabular,tabular*,tabularx, andlongtable. - Fixed imported contest currency notation so full-LaTeX
\textdollarand legacy sequences such as\54render as dollar amounts instead of KaTeX errors. - Replaced regex-based math splitting with an escape-aware tokenizer, fixing HTML-style
<math>\$2000</math>imports such as 1996 AJHSME question 18; added conservative package-style aliases and security regression coverage for hostile HTML, trusted KaTeX commands, recursive macros, and macro leakage. - Fixed every unsupported expression found in a production sweep of the 1985-1998 AJHSME sets: position-qualified
tabularlayouts now convert to safe KaTeX arrays for 1987 Q8/Q23, 1989 Q14/Q22, 1990 Q9, and 1991 Q6. Added safely portable MathLive notation aliases without enabling HTML/resource-loading commands. - Removed the rectangular
border-imageframes that appeared outside existing rounded controls, simplified search focus to one cyan stroke, and softened repeated structural borders in dark mode. - Removed colored edge accents from every metric card and increased selected problem-set tag count contrast in both themes.
- Added DBSOJ-inspired attempt reviews at
/attempts/[id]: a compact submission verdict/score header and expandable per-question rows with submitted and normalized answers, accepted answers, marks, topics, statements, images, grader notes, and explanations. Reviews are linked from submission results, solved-set locks, set history, dashboard history, student detail, and per-set analytics; students can only open their own attempts while analytics staff can review student attempts. - Restored the explicitly configured development-only bypass controls on the local sign-in page so authenticated browser QA remains possible without weakening production authentication.
- Replaced the points-weighted best average with one shared evidence-aware Performance Profile across dashboards, profiles, settings, student administration, analytics, leaderboard ranking, and CSV exports. The new Mastery Index combines Bayesian-smoothed proficiency, breadth, and a lower-quartile consistency floor while preserving best-set average and mastery rate as auditable components. A deterministic 100-student × 100-set simulation achieved
0.980rank correlation with latent ability and 89 distinct index values. - Added sandboxed Asymptote diagrams for staff authoring and JSON imports. Raw
<asy>...</asy>source is compiled to a validated PNG behind authorization, rate/size/time limits, Asymptote safe mode, and an OS sandbox; students only receive ordinary authenticated image assets. - Added variable-length multiple-choice problems with two to 20 options across the GUI problem maker, JSON import/export, standard sets, compact Tests layouts, and Practice. Choices support LaTeX plus uploaded or ZIP-supplied images, including image-only choices.
- Fixed multiple-choice previews for delimiter-free mixed-number LaTeX such as
18\\frac{1}{2}and5\\sqrt{2}-7; command-bearing standalone expressions now render through the same bounded KaTeX path. - Added a permission-aware
/adminpanel that groups content, people/classes, analytics, feedback, and audit tools behind one compact sidebar entry. - Added three explicit batch JSON ZIP actions: Dry run everything, Publish/Draft everything, and Upload everything, with bounded concurrency and live child-file progress.
- Removed redundant settings metric/grey-card surfaces and added an Account/Sidebar settings switcher with reorder, hide/show, and reset-to-default behavior.
- Made sidebar settings account-scoped and server-persisted, added native drag/drop ordering with keyboard-friendly arrow controls, and replaced arbitrary custom links with permission-aware Admin Panel tool selection. Legacy custom-link data is ignored and the settings/API paths remain bounded and safe.
© 2026 Cosmic Crusader