StudyFlow is a local-first study planner for a first-year student portfolio. It helps students keep courses and assignments in one place, see overdue work, and turn incomplete assignments into a transparent weekly plan.
npm install
npm run devQuality checks:
npm run lint
npm run typecheck
npm test
npm run build- Course management with course code, color, and progress at a glance.
- Assignment management for title, course, due date, estimated hours, priority, and completion.
- Dashboard sections for overdue, upcoming, and recently completed work.
- A responsive weekly planner with adjustable hours per study day.
- Helpful empty states, accessible labels, native form validation, and an error-safe storage fallback.
- Local persistence through
localStorage; no account, server, analytics, or external API is required.
src/types.tsdefines the domain model.src/data.tscontains the editable starter dataset.src/planner.tsis a pure planning module with no React or browser dependencies.src/storage.tsowns local persistence and malformed-storage fallback.src/App.tsxcomposes the dashboard, forms, courses, and planner views.src/App.cssandsrc/index.cssprovide the responsive visual system.
The planner makes no hidden predictions. It:
- Removes completed assignments and assignments with no remaining hours.
- Sorts the rest by priority (
high, thenmedium, thenlow) and due date. - Walks through the next seven calendar days that are marked available.
- Allocates up to the configured hours per day in one-hour blocks, starting at 5 PM.
- Writes a plain-language reason on every block, including the course, priority, and urgency.
The current MVP uses a fixed 5 PM start and a maximum of seven planning days. This keeps the rules easy to explain and test. A future version could support custom time windows, breaks, recurring study preferences, and drag-and-drop adjustments.
Screenshot placeholder: add a product screenshot or short recording here when publishing the portfolio project.
This is a front-end MVP, not a complete student information system. It does not sync between devices, send reminders, authenticate users, connect to course platforms, or guarantee that a schedule matches a student's real calendar. The starter dataset is sample content, not fake analytics: all displayed counts are calculated from current in-browser state. The use of localStorage keeps the demo private and easy to run, while also meaning clearing browser data clears the plan.