A local-first timetable app for students. Android + iOS only. Designed to be visually polished with subtle animations.
Product Goals
- Local-first storage (no login/sync for MVP)
- Fast weekly view of classes
- Easy course editing
- Clean, good-looking UI with motion
Scope (MVP)
- Weekly timetable view
- Course add/edit/delete
- Period time settings (1..N periods per day)
- Semester settings (start/end date, week start day)
- Reminder settings (placeholder UI for now)
Out of Scope (Later)
- Cloud sync and accounts
- Complex rules: odd/even weeks, holiday exceptions
- Conflict detection
- Multi-semester archive
Screens
- Home (Weekly Timetable)
- Course Edit (Bottom Sheet or Full Screen)
- Course List (All courses)
- Periods (Edit class time slots)
- Settings
Core Flows
- Open app -> weekly timetable
- Tap empty slot -> create course
- Tap course card -> edit or delete
- Settings -> adjust semester dates and periods
Data Models Course
- id
- name
- teacher
- location
- weekday (1-7)
- startPeriod
- endPeriod
- weekStart
- weekEnd
- colorHex
- note
- reminderEnabled
- reminderMinutes
Period
- index
- startTime (HH:mm)
- endTime (HH:mm)
Semester
- startDate
- endDate
- weekStartDay (Mon or Sun)
Architecture
- Feature-based structure
- Repository layer (local storage)
- State management with a simple provider (TBD)
Suggested Folder Structure
lib/
app/
app.dart
routes.dart
theme.dart
data/
models/
repositories/
local/
features/
timetable/
courses/
settings/
widgets/
utils/
UI Direction
- Strong visual hierarchy
- Card-based timetable blocks
- Smooth page transitions and subtle entry animations
- Warm gradient or textured background (no flat white)
Roadmap
- Build UI shell and navigation
- Implement timetable rendering with dummy data
- Add course CRUD forms
- Add local storage persistence
- Hook up reminders
- Polish animations
Decisions
- Local-only data for MVP
- Android + iOS only
- Keep complex scheduling rules for later