Skip to content

Roadmap

NesiciCoding edited this page Jun 12, 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 all editable collections ✅ (this session)

  • StudentRubric.updatedAt added; set on every grade/peer-review save and self-assessment submit
  • updatedAt also added to Class, Student, GradeScale, CommentSnippet, CommentBankItem, SelfAssessment, SpeakingSession, DocumentAnalysisResult — set on every create/update via the AppContext reducer
  • syncMerge.ts now applies LWW to all 10 of these collections (previously rubrics-only)
  • attachments, exportTemplates, and favoriteStandards intentionally 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

📊 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 ✅ Done

  • 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 an updatedAt field set on every save and compared in syncMerge.ts
  • attachments, exportTemplates, favoriteStandards are add/delete-only (no edit action) — pending-queue protection already covers them, LWW would add no value
  • No DB migrations needed — all data columns are jsonb, so the new updatedAt field flows through automatically
  • Impact: Enables distributed grading sessions, multi-teacher rubric curation, and concurrent class/student roster edits

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

3.4 Test Results

  • A way to input test results
  • Have the questions be able to be linked to CEFR, Common Standards, and SLO goals
  • Populate the results in a similar way to the rubric results
  • Automatic grade calculation (also have +/- census to get average results to or above a certain level)

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: 12 June 2026 (Added Phase 3.4)

Clone this wiki locally