Skip to content

[Feature]: Add "Mark as Revised" Progress Tracker for Topics with localStorage Persistence #365

Description

@divyanshim27

Summary

openCSE is used primarily by students preparing for exams. Currently, there is no way for a student to track which topics they have already read and revised. Every time they return to the site, they start from scratch with no visual indication of their progress.

Adding a simple "Mark as Revised" checkbox or button per topic would dramatically improve the study utility of the platform.

Problem

  • Students revisiting the site cannot see which topics they have already covered.
  • There is no progress indicator at the subject or semester level.
  • The platform functions as a static reference only, with no personalization layer.

Proposed Solution

I will implement a client-side progress tracker using localStorage — no backend or auth required:

Core data structure:

// lib/progress.ts
const STORAGE_KEY = 'opencse-progress';

export function markRevised(topicSlug: string): void {
  const progress = getProgress();
  progress[topicSlug] = { revisedAt: new Date().toISOString() };
  localStorage.setItem(STORAGE_KEY, JSON.stringify(progress));
}

export function isRevised(topicSlug: string): boolean {
  const progress = getProgress();
  return !!progress[topicSlug];
}

export function getProgress(): Record<string, { revisedAt: string }> {
  const raw = localStorage.getItem(STORAGE_KEY);
  return raw ? JSON.parse(raw) : {};
}

UI additions:

  1. A "✓ Mark as Revised" button at the bottom of each notes page that toggles state and persists to localStorage.
  2. A small green checkmark badge on topic cards in the subject index listing, so students can see at a glance what they've covered.
  3. An optional progress bar at the subject level (e.g., "3 of 8 topics revised") on the subject landing page.
  4. A "Reset Progress" option in a settings area or per-subject page for re-study sessions.

All TypeScript, all client-side, zero new dependencies.

Please assign this to me. I'm happy to share a mockup first.

Labels: enhancement, feature-request, student-experience, help wanted, GSSoC 2026

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions