Skip to content

Roadmap

Wouter Meetsma edited this page Jun 11, 2026 · 49 revisions

Development Roadmap

🎯 Overview

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.


✅ Completed Phases

Phase 0: MVP & Core Features (Launched)

  • ✅ 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


Phase 1: Cloud Sync & Collaboration (Completed)

PR #128 — Final Three Roadmap Items

#15 — Sync Conflict Resolution ✅

Supabase-first implementation with intelligent merge strategy

  • src/utils/syncMerge.ts replaces 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)

#18 — Cambridge English Framework ✅

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 showCambridgeLabels setting 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

#23 Phase 2 — Full Theme Bundles ✅

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 updateSettings call with new colorPreset field
  • Tonal Scale Generation (src/utils/accentScale.ts)
    • --accent-50..900 scale via CSS color-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


🚀 In Progress

Phase 2.2 — LWW for grades & peer reviews (this session)

  • StudentRubric.updatedAt added; set on every grade/peer-review save and self-assessment submit
  • syncMerge.ts now applies LWW to studentRubrics and peerReviews (previously rubrics-only)
  • Unit tests added in syncMerge.test.ts; remaining 11 collections still pending-queue-only (see 2.2 below)

📊 Next Phases

Phase 2: Infrastructure Stabilization (Immediate Post-Merge)

2.1 Multi-Device E2E Testing

  • Upgrade skipped secondSupabasePage fixture
  • 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.ts now passes in CI (post PR #128). Two lessons it taught, relevant for the multi-device fixture work:
    1. Sync adapters return { success: false } instead of throwing — pushOne must check the SyncResult, or offline writes are silently dropped instead of queued.
    2. In the Supabase Playwright project, data seeded only into localStorage is wiped by post-reload hydration — seed matching rm_pending_sync upsert entries so the startup flush re-pushes it.

2.2 Extend Last-Write-Wins (LWW) to Remaining Collections

  • Current: LWW covers rubrics, grades (studentRubrics), and peer reviews — all via an updatedAt field set on every save and compared in syncMerge.ts
  • Gap: The other 11 collections (classes, students, attachments, grade scales, comment snippets/bank, export templates, favorite standards, self-assessments, speaking sessions, analysis results) still get pending-queue protection only — no LWW
  • Note: No DB migration was needed for grades/peer reviews — student_rubrics.data is jsonb, so the new updatedAt field flows through automatically. The same approach (add updatedAt to the type, set it on save, add getUpdatedAt to the syncMerge.ts collection spec) applies to the remaining collections
  • Impact: Enable distributed grading sessions, multi-teacher rubric curation
  • Priority: HIGH (grades/peer reviews done) — remaining collections are MEDIUM, lower conflict risk (mostly per-user reference data)

2.3 Wiki Documentation Cleanup

  • 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

Phase 3: EFL Classroom Enhancements (Month 1–2)

3.1 Speaking Session Recordings

  • 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

3.2 Vocabulary Profiling Dashboard

  • Aggregate Cambridge API word lookups per student/class
3.2.1 Exchange or add on to Cambridge Dictionary API
  • 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

3.3 Peer Review Analytics

  • 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

Phase 4: Admin & School Operations (Month 2–3)

4.1 Admin Panel Hardening

  • 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

4.2 Magister SIS Integration

  • 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

4.3 Self-Hosting Operations

  • 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

Phase 5: UI/UX Polish (Month 3–4)

5.1 Mobile Grading Experience

  • 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

5.2 WCAG 2.1 AAA Audit

  • 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

5.3 Help & Documentation

  • 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

Phase 6: Strategic Features (Future Roadmap)

6.1 Student Learning Paths

  • Recommend next rubrics based on CEFR targets & past performance
  • Teacher dashboard: cohort analysis, outlier identification, intervention flags

6.2 Rubric Marketplace

  • Community template sharing (CC-BY-SA)
  • Voting & discoverability by subject/level
  • Minimal backend API for metadata

6.3 Integration Ecosystem

  • LMS: Canvas, Blackboard, Moodle (LTI 1.3)
  • Data Feeds: Clever CSV, OneRoster (for large districts)

📌 Known Issues & Technical Debt

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

📋 Quick Reference: Recent PR Links


🎓 Development Notes

For Contributors

  1. Before merging PR #128: Confirm e2e suite passes in CI with Docker stack
  2. Post-merge (Week 1): File Phase 2.1 issue (secondSupabasePage multi-device fixture)
  3. Post-merge (Week 2): Update wiki #38/#39/#40 status, close if auto-merged
  4. Month 1 Priority: Stabilize sync infrastructure (Phase 2) before new EFL features
  5. Tech Stack: TypeScript + React; Supabase for optional cloud sync; Playwright for e2e

Testing Standards

  • 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 for grades & peer reviews)

Clone this wiki locally