-
Notifications
You must be signed in to change notification settings - Fork 1
Roadmap
Wouter Meetsma edited this page Jun 11, 2026
·
49 revisions
RubricMaker is an offline-first rubric creation and grading tool for educators. This roadmap outlines completed features, current work in progress, and planned development phases.
- ✅ 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
Status: Stable and feature-complete for core education workflows
PR #128 — Final Three Roadmap Items
Supabase-first implementation with intelligent merge strategy
-
src/utils/syncMerge.tsreplaces wholesale spread operations at all three hydration sites- Startup sync
- Network reconnect hydration
- In-page OTP sync
- Strategy: Remote as baseline (preserves deletions); locally queued edits protected from stale data; pending deletes not resurrected
-
Rubrics only: Last-write-wins (LWW) on
updatedAt— other collections carry event timestamps (gradedAt,submittedAt) only - Offline-first preservation: Changes queue locally, sync on reconnection
-
Test coverage: 1263/1263 unit tests passing; e2e spec
17-offline-sync-merge.spec.ts(static validation + CI coverage)
CEFR ↔ Cambridge Exam mapping + vocabulary API integration
- Static CEFR-to-exam mapping (
src/data/cambridgeExams.ts)- A2 Key → C2 Proficiency coverage
- Function:
cambridgeExamForLevel()
-
UI: Opt-in
showCambridgeLabelssetting renders "B2 · FCE" labels alongside CEFR badges- Visible on CEFR overview page
- Shown on student profile pages
-
API Integration: Previously unused
cambridgeApi.lookupWord()now wired to vocabulary editor- Admin-configured API key required
- Enriches vocab items with CEFR level + definition
- Offline-first: fully hidden without key, fills empty fields only
-
i18n: New
cambridge.*namespace added to 5 locales with parity tests
One-click theme presets + tonal accent scales + Google Fonts support
-
5 Theme Bundles (
src/data/themes.ts)- Academy, Nature, Midnight, Warm, Slate
- Visual card picker in Settings → General
- Atomic update: single
updateSettingscall with newcolorPresetfield
-
Tonal Scale Generation (
src/utils/accentScale.ts)-
--accent-50..900scale via CSScolor-mix()in oklab - Applied globally from AppContext
-
-
Export Fonts
- DOCX: headings/body honor rubric format font via document styles
- PDF: 5 new decorative Google Fonts (Playfair Display, Oswald, Bebas Neue, Special Elite, Courier Prime)
- Format picker: live preview included
- Export pathway: fonts injected at generation time
-
i18n: New
themes.*namespace added to 5 locales with parity tests
Test Results: 123 new unit tests + 1 new Playwright spec; full suite: 1263/1263 passing, typecheck and lint clean
-
StudentRubric.updatedAtadded; set on every grade/peer-review save and self-assessment submit -
updatedAtalso added toClass,Student,GradeScale,CommentSnippet,CommentBankItem,SelfAssessment,SpeakingSession,DocumentAnalysisResult— set on every create/update via theAppContextreducer -
syncMerge.tsnow applies LWW to all 10 of these collections (previously rubrics-only) -
attachments,exportTemplates, andfavoriteStandardsintentionally left out — add/delete-only, no update action, so pending-queue protection already covers their conflicts - 1283/1283 unit tests passing, typecheck and lint clean
- Upgrade skipped
secondSupabasePagefixture - Race condition scenarios: simultaneous edits across devices
- Network partition resilience validation
- Sync state consistency under network failures
- Owner: Follow spec-14 pattern from existing e2e suite
- Priority: HIGH — foundational for multi-device feature stability
-
Note:
e2e/specs/17-offline-sync-merge.spec.tsnow passes in CI (post PR #128). Two lessons it taught, relevant for the multi-device fixture work:- Sync adapters return
{ success: false }instead of throwing —pushOnemust check theSyncResult, or offline writes are silently dropped instead of queued. - In the Supabase Playwright project, data seeded only into
localStorageis wiped by post-reload hydration — seed matchingrm_pending_syncupsert entries so the startup flush re-pushes it.
- Sync adapters return
- LWW now covers rubrics, grades (
studentRubrics), peer reviews, classes, students, grade scales, comment snippets, comment bank items, self-assessments, speaking sessions, and analysis results — all via anupdatedAtfield set on every save and compared insyncMerge.ts -
attachments,exportTemplates,favoriteStandardsare add/delete-only (no edit action) — pending-queue protection already covers them, LWW would add no value - No DB migrations needed — all
datacolumns arejsonb, so the newupdatedAtfield flows through automatically - Impact: Enables distributed grading sessions, multi-teacher rubric curation, and concurrent class/student roster edits
- Items #38, #39, #40: shipped but marked "Planned" — update status
- Add visual guides for Cambridge exam framework
- Add theme customization tutorial
- Document LWW sync strategy & conflict resolution limits
- Priority: MEDIUM — UX clarity for adopters
- Audio/video attachment support for speaking assessments
- Pair with existing 6-dimension assessment structure (VMBO-BB through VWO)
- Playback in student portfolio
- Privacy-first: local storage default, optional encrypted Supabase sync
- Depends on: Phase 2 completion
- Estimated effort: 2–3 weeks
- Aggregate Cambridge API word lookups per student/class
- Cambridge's dictionary API is not free to use.
- Checkout https://github.com/jegarne/vocabkitchen to see if this could be implemented in-app (with proper implementation and credits)
- CEFR distribution charts (A1→C2)
- Export vocabulary lists by CEFR band for class prep
- Depends on: #18 (Cambridge framework)
- Estimated effort: 1–2 weeks
- Consistency scoring: compare peer grades vs. teacher baseline
- Feedback heatmaps: identify frequently-commented criteria
- Traceability: named (non-anonymous) peer feedback
- Depends on: Phase 2 completion
- Estimated effort: 2–3 weeks
- User Roles: Expand teacher-only to admin/observer roles
- Data Retention: Auto-purge old grades, GDPR deletion workflows
- Student Anonymisation: Support for external/standardized assessments
- Audit Log: Track all edits, exports, role changes
- Estimated effort: 3–4 weeks
- Bulk import students + classes from Dutch VO schools
- Ongoing sync: add/retire students dynamically
- Mock API testing for common scenarios
- Note: Docstring present in codebase, validation needed
- Estimated effort: 2–3 weeks
- Validate & update HestiaCP & Virtualmin guides against latest Docker compose
- Backup/restore automation with cross-version migration testing
- Monitoring: CPU/memory alerts, Supabase quota tracking
- Estimated effort: 2 weeks
- Touch-friendly rubric level input (replace sliders for mobile)
- Sticky score summary during grading
- Responsive tests: iOS/Android, iPad portrait mode
- Estimated effort: 2–3 weeks
- Current: AA compliant (axe-core in CI)
-
Stretch Goals:
- Focus management for complex workflows
- Color contrast audits on new theme bundles
- Keyboard navigation for rubric builder
- Tool: axe DevTools + manual screen reader testing
- Estimated effort: 2–3 weeks
- In-app: Video tours (create rubric, grade, export)
- Tooltips: Complex features (score modifiers, LWW sync behavior)
- Multilingual: EN, NL, FR, DE, ES
- Estimated effort: 2–3 weeks
- 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)
| Issue | Impact | Owner | Priority |
|---|---|---|---|
| e2e offline sync not tested locally (Docker unavailable at PR #128 write time) | Offline sync race conditions untested in CI | Dev | HIGH — confirm e2e passes post-merge |
| LWW incomplete for grades/submissions | Multi-teacher grades may clobber in sync | Sync team | HIGH — Phase 2 task |
| Wiki "Planned" labels outdated (#38, #39, #40 shipped) | User confusion on feature status | Docs | MEDIUM — cleanup after PR merge |
| Multi-device e2e fixture skipped | Multi-device scenarios untested | QA | MEDIUM — Phase 2 task |
-
PR #128 — Implement roadmap items #18 (Cambridge), #23 Phase 2 (themes), #15 (sync)
- Cambridge exam mapping + vocabulary API
- Theme bundles + tonal accent scales + Google Fonts export
- Sync conflict resolution (LWW for rubrics)
- Before merging PR #128: Confirm e2e suite passes in CI with Docker stack
-
Post-merge (Week 1): File Phase 2.1 issue (
secondSupabasePagemulti-device fixture) - Post-merge (Week 2): Update wiki #38/#39/#40 status, close if auto-merged
- Month 1 Priority: Stabilize sync infrastructure (Phase 2) before new EFL features
- Tech Stack: TypeScript + React; Supabase for optional cloud sync; Playwright for e2e
- Unit tests: Vitest (target >90% coverage)
- E2E tests: Playwright (spec-14 pattern for async operations)
- i18n: Parity tests across EN, NL, FR, DE, ES locales
- Accessibility: axe-core in CI (WCAG 2.1 AA minimum)
- Performance: Offline-first validation; sync latency benchmarks for > 100 rubrics
Last updated: 11 June 2026 (Phase 2.2 — LWW extended to all editable collections)