-
Notifications
You must be signed in to change notification settings - Fork 1
Roadmap
RubricMaker is an offline-first rubric creation and grading tool for educators. This roadmap lists completed phases first (newest at the top of that section is the most recently shipped), then planned work.
- ✅ Rubric builder with multiple scoring modes (Total Points, Weighted, Single-Point)
- ✅ Interactive grading interface with score modifiers
- ✅ CEFR framework integration (Can-Do statements)
- ✅ Student self-assessment & peer review
- ✅ Essay assignments with rich text editor
- ✅ Analytics dashboard with class statistics
- ✅ Multi-format export (PDF, DOCX, CSV)
- ✅ Student portal with shareable links
- ✅ Offline-first architecture with localStorage
- ✅ Basic theme customization
Phase 1: Cloud Sync & Collaboration (PR #128)
- ✅ Sync conflict resolution —
src/utils/syncMerge.ts, remote-as-baseline merge with LWW on rubrics, wired into all three hydration sites (startup, reconnect, OTP sign-in) - ✅ Cambridge English framework — CEFR ↔ exam mapping (
src/data/cambridgeExams.ts), opt-in "B2 · FCE" badges, optional Cambridge Dictionary API vocabulary lookups - ✅ Theme bundles — 5 one-click presets (
src/data/themes.ts), tonal accent scale viacolor-mix(), 5 decorative export fonts for PDF/DOCX
Phase 2: Infrastructure Stabilization (PR #131 + wiki updates)
- ✅ 2.1 Multi-device e2e — second-browser-context Supabase fixture, propagation/LWW-race/network-partition specs (
e2e/specs/18-multi-device-sync.spec.ts) - ✅ 2.2 LWW extended to every editable collection (rubrics, grades, peer reviews, classes, students, grade scales, comment snippets/bank, self-assessments, speaking sessions, analysis results); add/delete-only collections (
attachments,exportTemplates,favoriteStandards) intentionally left on pending-queue protection only - ✅ 2.3 Wiki documentation pass — Cambridge + theming guides added to Features.md, conflict-resolution strategy documented in Supabase-Sync.md
- ✅ 3.1 Speaking session recordings — IndexedDB blob store, local-only audio, DB-gated video, optional cloud sync with cascade delete
- ✅ 3.2 Vocabulary profiling dashboard (
/vocabulary) — per-student/class CEFR distribution charts, open CEFR word lists, CSV export - ✅ 3.3 Peer review analytics (
/peer-analytics/:rubricId) — consistency scoring, leniency bias, inter-rater spread, comment heatmap - ✅ 3.4 Full testing environment (
/tests,/test/:code) — MC/short-answer/open questions, auto-scoring, class-average adjustment, live proctoring monitor
Phase 3.5: Hot Text Questions & Standalone Essays Workspace (PR #140)
- ✅ Hot-text question type —
src/utils/clozeParse.tsparses{{cloze}}and[[hot-text]]syntax; scoring intestCalc.ts - ✅ Standalone
/essaysworkspace (parallel to/tests) — prompt editor, rubric connector, per-student share links, submission-code import, reusable assignment templates (PR #143)
- ✅ 4.1 Expanded statistics — multi-class Compare view, trend overlay, rule-based insights, track/year filters
- ✅ 4.2 Activity dashboard (
/activity-dashboard) — rubric/test/essay × class grid, assign-from-view, submission count badges - ✅ 4.3 Admin hardening —
teacher/admin/observer roles + RLS, pg_cron data retention, student soft-delete archive (restore/anonymize), audit log with CSV export - ✅ 4.4 SIS roster sync (partial) — CSV upsert + optional roster-removal sync; native Magister API integration still reserved for community contribution
- ✅ 4.5 Self-hosting ops —
docs/SELF_HOSTING_OPS.md, HestiaCP/Virtualmin guides
- ✅ 5.1 Mobile grading — touch stepper alongside sliders, single-column ComparativeGrading reflow <768px, iPad CSS, mobile e2e
- ✅ 5.2 WCAG 2.1 AAA —
src/utils/contrastCheck.ts+ enforcement test, accessible modals with focus trap/restoration, keyboard drag-and-drop, i18n'd skip link - ✅ 5.3 Help & documentation — page tours (Joyride) on 12 pages total, contextual tooltips (
src/components/ui/HelpPopover.tsx) for score modifiers/LWW sync/proctoring flags - ✅ a11y test coverage — RubricBuilder/GradeStudent/ComparativeGrading added to the jest-axe page suite (PR #152, closing the Phase 5.2 follow-up)
- ✅ Route-shaped skeleton loading for lazy routes and async actions (PR #153)
Phase 6: Strategic Features (PR #157)
Scoped down from the original proposal before implementation — see "Deferred from Phase 6" below for what was cut and why.
- ✅ 6.1 Student Learning Paths — rule-based (no AI/LLM) rubric recommendations from CEFR-skill cohort gaps, consecutive-low-score intervention flagging,
/students/:id/learning-path(src/utils/learningPathAggregator.ts) - ✅ 6.2 Rubric Marketplace (school-scoped) — publish/browse/clone/upvote within a school via the existing
schools/school_memberstables,/marketplace(supabase/migrations/040_rubric_marketplace.sql,src/pages/MarketplacePage.tsx) - ✅ 6.3 Integration Ecosystem (CSV import only) — Clever CSV and OneRoster CSV roster-import auto-detection added to the existing CSV import modal; LTI 1.3 LMS integration deferred (see below)
- ✅ 6.4 Test Summary Export — per-question and per-skill/standard strong/weak breakdown, PDF/DOCX export (single + batch) from the test results page, feature parity with the rubric summary export (
src/utils/testSummaryAggregator.ts) - ✅ 6.5 Report Card Improvement — consolidated PDF/DOCX report card per student combining rubric grades, standards coverage, learning goals, CEFR overview, and test summary, with section toggles and single/batch export from the Export page (
src/utils/reportCardAggregator.ts)
Verification baseline (carried through every phase above): typecheck/lint clean, full unit suite green (1755+ tests), i18n parity across en/nl/fr/de/es, e2e suite green on chromium/firefox/webkit/mobile-chrome (pre-existing/environmental flakes tracked separately, not regressions).
Each phase below groups proposals under one theme so they can be scoped and shipped independently. None of these involve AI/LLM content generation — that remains explicitly out of scope for this project.
Two items from the original Phase 6 proposal were cut from scope before implementation, since neither could be built and verified in the implementation environment:
- LTI 1.3 LMS integration (Canvas, Blackboard, Moodle) — needs a live LMS sandbox to verify OAuth/launch flows; CSV-based roster import (Clever, OneRoster) shipped instead as a same-outcome, locally-testable substitute for the common "get students into the app" need.
-
Public/cross-tenant rubric marketplace — shipped as school-scoped only (reuses
schools/school_members); a public marketplace would need a moderation queue, abuse controls, and report/flag tooling that don't exist yet.
Both remain candidates for a future phase if there's demand.
Tracking a student or rubric over time, not just in the current snapshot.
- Carry a student's grading/CEFR/vocabulary history across class/year promotions instead of resetting at rollover
- Year-over-year growth chart per student (existing per-criterion data, new time axis)
- Snapshot a rubric whenever it's edited after grades already exist against it, so historical grades stay interpretable
- Diff view between two rubric versions
- Aggregate which linked standards (CCSS/NGSS/state) a class has and hasn't been assessed against over a term, surfaced on the Activity Dashboard
Today, sharing is per-rubric/per-class (Phase 1). This phase scales that to a department.
- Second-marker workflow: a colleague grades the same submission independently, app surfaces the delta (reuses
peerReviewAggregator.tsmath, applied teacher-to-teacher) - Moderation queue for borderline/disputed grades before they're finalized
- A shared, read-only rubric collection scoped to a school/department (built on existing
class_members-style RLS sharing, generalized beyond one class) - Comment bank sharing across colleagues, opt-in per snippet
- Assign batches of ungraded submissions to specific teachers (useful for large cohorts split across markers), tracked on the Activity Dashboard
- All views that have the rubrics and tests can be reordered using pangea/dnd. This is done on a teacher by teacher basis.
- Building on phase 7, rubrics and tests can be ordered and tracked even better. => @claude, build on this idea more before starting work.
Phase 5 covered AAA contrast and keyboard nav inside the app shell; this phase extends reach further.
- Expand beyond EN/NL/FR/DE/ES based on adopter demand (candidates: Portuguese, Polish, Turkish — common in EU language-education deployments)
- RTL layout support (Arabic) — CSS logical properties audit, not a new framework
- Service worker + manifest so the app installs to a home screen / desktop and launches without a browser chrome, while keeping the existing offline-first localStorage model unchanged
- Useful for shared classroom devices
- Optional font/line-spacing preset (e.g. wider tracking, increased line-height) for rubric text and student-facing essay/test pages, toggled in Settings alongside the existing theme bundles
- Essays written by students can be exported from HTML-code into Markdown, DOCX, and PDF.
- Essays can be downloaded as separate documents or combined into a batch download (per class, or by selection)
- Essays can be attached to the rubrics, and exported together. This can also include the grammar and vocabulary analysis.
Closes the loop on "data leaves the device" use cases beyond JSON backup.
- Per-SIS CSV export presets (beyond the generic CSV in Phase 0) for common Dutch/EU school administration systems, so a Statistics export drops straight into the receiving gradebook's expected columns
- Export essay/test assignment due dates as a downloadable
.icsfile — no calendar API integration required, keeps the offline-first model intact
- Optional, opt-in HTTP endpoint (Supabase Edge Function) exposing aggregated, anonymized class statistics for school-level reporting dashboards — gated behind the existing admin role, off by default
| Issue | Impact | Owner | Priority |
|---|---|---|---|
| Native Magister SIS API integration (bulk import + live sync) not built — CSV path covers production use today | School IT can't fully automate roster sync | Reserved for community contribution | Low |
Multi-device e2e specs (18-multi-device-sync.spec.ts) require a local Supabase stack to verify outside CI; no Docker daemon in some dev sandboxes |
Slower local iteration on sync code | — | Low |
-
Unit tests: Vitest (coverage thresholds: 50% lines/statements, 37% functions/branches — see
npm run coverage) -
E2E tests: Playwright, including a dedicated
mobile-chromeandsupabaseproject - i18n: Parity tests across EN, NL, FR, DE, ES locales — new locales must pass the same parity check and be checked against existing UI layout for overflow
-
Accessibility: axe-core in CI (WCAG 2.1 AA minimum; AAA contrast enforced via
contrastCheck.ts) - Performance: Offline-first validation; sync latency benchmarks for > 100 rubrics
Last updated: 21 June 2026 — Phase 6 shipped (PR #157), scoped down to school-scoped marketplace and CSV-only integration (LTI 1.3 and a public marketplace deferred, see Future Roadmap); Phases 7–10 remain themed proposals.