A modern, production-grade learning management and lecture progress tracker tailored for deep syllabus tracking, daily planning, and streak consistency.
Core Java + AI Development Course Tracker is an interactive, privacy-first web application engineered to track large curriculum courses. Built with React 19 and Vite 8, all user progress, daily schedules, streak histories, and configuration settings are stored 100% locally in your browser's localStorage—no account creation, telemetry, or backend database required.
The application comes preloaded with the flagship Core Java + AI Development (Interview Prep. & Projects) curriculum (150 lectures / ~131 hours across 18 comprehensive sections), featuring full support for importing, adding, and replacing custom course XMLs.
- Zero-Configuration Setup: Launches immediately with a balanced 1.5h daily target and expands Section 1 by default.
- Auto-Plan Mode: Automatically calculates and selects the optimal next lectures in syllabus order to meet your daily target.
- Daily Plan Freeze: Once generated, the day's plan remains locked in
localStoragefor that date. Refreshing the browser or checking off lectures will not mutate your planned schedule until a new calendar day begins. - Smart Lecture State: Completed lectures display a crisp
COMPLETEDpill badge, row dimming, and strikethrough title while hiding the "Mark as Today" plan toggle to eliminate visual clutter.
- Interactive Section Cards: Displays live watched ratios (e.g.
3/7 lectures), remaining section duration (1h 46m left), and dynamic progress bars with amber-to-green gradient transitions. - One-Click Section Navigation: Clicking any section card smoothly scrolls to and expands that specific section in the syllabus.
- Sticky Dual-Panel: Today's Plan and Section Progress scroll alongside the main curriculum, remaining visible without having to scroll back to the top of long syllabi.
- Single Built-in Flagship Course: Pre-configured with Core Java + AI Development.
- Flexible Course Management:
- Add Course Alongside: Import any custom course XML to track multiple curriculums concurrently without losing existing data.
- Replace Course: Cleanly replace an existing course with a new XML syllabus.
- Data Isolation: Each course maintains isolated namespaces in
localStoragefor watched lectures, daily plans, streak history, settings, and start dates. Switching courses never mixes progress. - Safe Course Deletion: Destructive actions and course replacements are guarded by a 6-character alphanumeric PIN confirmation modal where the confirm button is strictly disabled until the exact code matches.
- GitHub-Style Contribution Heatmap: Visualizes your daily watch time with varying intensity of amber cells.
- Practice Days: Allows logging non-video study sessions (coding exercises, interview prep, revision) to preserve streaks. Requires a reflective 10+ word note and confirmation code.
- Historical Logging: Retroactively log practice sessions on past inactive days directly from the calendar modal.
- Course Completion Projection: Calculates estimated finish dates based on your actual start date, remaining course duration, and daily pace.
- Features an uplifting daily encouragement popup.
- Bring your own OpenAI API key in Settings for dynamic, AI-generated daily messages, with seamless automatic fallback to built-in motivational quotes if no API key is provided.
- Data Export & Backup: Export your entire application state (all courses, progress, plans, and history) into a portable JSON backup file.
- Data Restore: Import backup snapshots with safety validation.
- Danger Zone Factory Reset: Cleanly wipe all stored data and restore a pristine default installation.
| Layer | Technologies Used |
|---|---|
| Frontend Framework | React 19 |
| Build Tool & Dev Server | Vite 8 |
| Styling & Design System | Vanilla CSS3 (Custom Design Tokens, Glassmorphism, CSS Grid & Flexbox) |
| Code Quality & Linter | Oxlint |
| Testing Suite | Node.js Native Test Runner (node:test) with custom localStorage mock |
| Storage Engine | Browser localStorage (Namespaced JSON keys) |
- Node.js:
v18.0.0or higher - npm:
v9.0.0or higher
-
Clone the repository:
git clone https://github.com/sagardhadke/corejava-ai.git cd corejava-ai -
Install dependencies:
npm install
-
Start the local development server:
npm run dev
Open http://localhost:5173 in your browser.
-
Build for production:
npm run build
-
Preview production bundle:
npm run preview
The application includes an automated integration test suite covering the course management system, data isolation, replacement logic, and edge cases:
npm test- Fresh install initializes with single built-in Core Java + AI course
- Adding custom XML course alongside preserves default course
- Course switching persists active state and synchronizes UI
- Multi-course progress data isolation across
localStorage - Course replacement completely removes target course and purges all 5 data keys
- Replaced courses do not resurrect on simulated reload or registry refresh
- Replacing custom courses with new custom courses works cleanly
- Course deletion enforces minimum 1-course safeguard
- Deleting a course purges all associated keys and frees storage space
- Deleting active course automatically falls back to the remaining course
- Factory reset purges all custom keys and restores default configuration
- Graceful recovery and fallback upon encountering corrupt
localStorageregistry - Stale/orphan course IDs in registry are filtered automatically
- Complete backup export and restore preserves all courses and progress
npm run lintUses oxlint for high-performance static analysis with zero warnings and zero errors.
Custom courses can be imported at runtime via Settings → Memory & Courses → Import course from XML. The XML parser expects the following schema:
<?xml version="1.0" encoding="UTF-8"?>
<course>
<title>Your Course Title Here</title>
<sections>
<section number="01" title="Fundamentals & Setup">
<items>
<item type="video" title="Introduction to Architecture" duration="15m30s" />
<item type="video" title="Environment Configuration" duration="28m45s" />
<item type="pdf" title="Cheatsheet" /> <!-- Non-video items are preserved without affecting duration -->
</items>
</section>
<section number="02" title="Advanced Concepts">
<items>
<item type="video" title="Memory Model & Garbage Collection" duration="42m10s" />
</items>
</section>
</sections>
</course>Note: Durations can be formatted as
Xh Ym Zs,Xh Ym,Ym Zs, orXm. Ampersands in titles should be escaped as&.
All course data is stored under namespaced keys to guarantee zero cross-talk between curriculums:
| Key Pattern | Structure / Purpose |
|---|---|
jct_course_registry_v1 |
{ courseIds: string[], activeCourseId: string, customCourses: Record<string, Course> } |
jct_watched__<courseId> |
{ [lectureId: string]: boolean } — Map of completed lecture IDs |
jct_today_plan__<courseId> |
{ date: string, ids: string[], auto: boolean } — Frozen daily schedule |
jct_settings__<courseId> |
{ dailySec: number, autoPlan: boolean, streakMode: "target" | "any" } |
jct_history__<courseId> |
{ [dateKey: string]: { watchedSec, watchedCount, lectureIds, isPractice, practiceNote } } |
jct_start_date__<courseId> |
"YYYY-MM-DD" — Custom start date for completion estimation |
jct_motivation_shown_v1 |
{ date: string } — Global daily flag for motivation popup |
jct_openai_api_key_v1 |
string — User-provided OpenAI API key (client-side only) |