-
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)
Verification baseline (carried through every phase above): typecheck/lint clean, full unit suite green (1475+ 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).
- Recommend next rubrics based on CEFR targets & past performance
- Teacher dashboard: cohort analysis, outlier identification, intervention flags
- Community template sharing (CC-BY-SA)
- Voting & discoverability by subject/level
- Minimal backend API for metadata
- LMS: Canvas, Blackboard, Moodle (LTI 1.3)
- Data Feeds: Clever CSV, OneRoster (for large districts)
Each phase below groups proposals under one theme so they can be scoped and shipped independently of Phase 6. None of these involve AI/LLM content generation — that remains explicitly out of scope for this project.
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
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
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: 20 June 2026 — consolidated Phases 0–5 (all shipped, PRs #128–#153); added Phases 7–10 as themed proposals following Phase 6.