UniTrack is a modern student planner app built with SwiftUI and MVVM architecture, using Firebase Firestore for real-time cloud storage and local notifications for reminders.
It helps students organize courses, class schedules, assignments, and study sessions, all in one clean interface.
Negar Pirasteh โข Betty Dang โข Ngoc Yen Nhi Pham
UniTrack simplifies academic management for students.
It allows users to:
- Plan and organize their courses and weekly class sessions
- Track assignments and exams with automatic reminders
- Log study sessions with a built-in Pomodoro timer
- View progress in an intuitive dashboard synced with the cloud
All data is stored in Firebase Firestore under each user's account and instantly updates across devices.
- Add, edit, or remove courses with instructor details and color tags.
- Add class sessions (weekday, start/end time, location).
- Dashboard view of today's schedule.
- Create assignments and exams linked to courses.
- Mark tasks as complete or pending.
- Automatic reminders via iOS local notifications.
- Built-in 25/5 Pomodoro cycle for focused study sessions.
- Logs every study session as a StudyLog with date and duration.
- All Courses, Sessions, Tasks, and StudyLogs stored in Firebase Firestore.
- Organized under each user's UID:
users/{uid}/courses/{courseId}
users/{uid}/sessions/{sessionId}
users/{uid}/tasks/{taskId}
users/{uid}/studyLogs/{logId}
- Uses Firebase Authentication (email or anonymous) to isolate user data.
- Data syncs automatically when online.
- Reminds students of upcoming due dates using
UNUserNotificationCenter. - Configurable per task creation or edit.
- Shows percentage of completed tasks per course.
- Displays โDue Soonโ tasks and todayโs schedule.
- Optional Swift Charts graph of weekly study time.
Pattern: ModelโViewโViewModel (MVVM)
SwiftUI Views โ ViewModels โ Repositories โ Firebase Firestore
โโโ NotificationService
| Layer | Classes | Responsibility |
|---|---|---|
| Model | Course, Session, Task, StudyLog | Data structure & logic |
| ViewModel | CourseVM, TaskVM, TimerVM, DashboardVM | Handle app logic, connect models with UI |
| Service | NotificationService | Schedule and manage reminders |
| Repository | FirestoreRepository | CRUD operations with Firebase Firestore |
| View | SwiftUI screens | Display and bind data |
| Entity | Attributes | Notes |
|---|---|---|
| Course | id, title, instructor, color | Has many sessions and tasks |
| Session | id, courseId, weekday, startTime, endTime, location | Belongs to one course |
| Task | id, courseId, type[assignment/exam], title, dueDate, isDone, weight | Belongs to one course |
| StudyLog | id, courseId, date, minutes | Created by Pomodoro timer |
- SwiftUI โ Declarative UI framework
- MVVM Architecture โ Clean separation of logic
- Firebase Firestore โ Real-time NoSQL cloud database
- Firebase Authentication โ Optional sign-in system
- UNUserNotificationCenter โ Local notifications
- Swift Charts โ Optional analytics graph
- Xcode 15 or later
- iOS 17+ simulator or device
- Active Firebase project
-
Clone this repo:
git clone https://github.com/<your-user>/UniTrack.git
-
Open
UniTrack.xcodeprojin Xcode. -
Create a Firebase project at Firebase Console.
-
Enable Firestore Database and Authentication (Email/Password or Anonymous).
-
Download your
GoogleService-Info.plistfile and drag it into the Xcode project (do not commit it to GitHub). -
Add Firebase via Swift Package Manager:
https://github.com/firebase/firebase-ios-sdkInclude FirebaseAuth and FirebaseFirestore.
-
Build and run on a simulator or device.
users
โโโ {uid}
โโโ courses
โ โโโ {courseId}
โโโ sessions
โ โโโ {sessionId}
โโโ tasks
โ โโโ {taskId}
โโโ studyLogs
โโโ {logId}
Each userโs data is isolated and secured via Firestore security rules.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId}/{document=**} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
}
}The first half of the project focused on building the full foundation of UniTrack:
- Firebase Authentication (email or anonymous)
- Automatic routing to Student or Teacher dashboard
- Profile page showing user info and allowing sign-out
-
Fully redesigned dashboard with four main entry points:
- Courses
- Assignments
- Focus Timer
- Profile
-
Cleaner UI, unified for both roles
-
Add, edit, delete courses
-
Course list with improved UI
-
Course detail screen with:
- Sessions list + โAdd Sessionโ
- Tasks list + โAdd Taskโ
- Add tasks (assignment/exam)
- Link tasks to a course
- Mark tasks done / undone
- Global Assignments view accessible from Dashboard
- Every task stored under the correct course ID
- Basic study timer built with SwiftUI
- Ready for Phase 2 integration with StudyLog
- Repositories for courses, tasks, sessions
- Live listeners that automatically update UI
- MVVM architecture finalised
Phase 1 was delivered successfully.
Phase 2 focuses on completing and polishing the full UniTrack experience:
- Manage course content more easily
- (Optional) Analytics for student progress
- โTodayโs Tasksโ section
- Upcoming deadlines widget
- Course cards with progress indicators
- Save Pomodoro sessions in Firestore
- Study history page
- Color theme improvements
- Uniform headers and cards
- Small animations and nicer icons
- Error handling
- Loading indicators
- Cleanup of unused code
- Testing
- Screenshots
- README polish
- PDF submission
- Demo video preparation
| Week | Deliverable | Progress |
|---|---|---|
| Week 8 | Proposal + UML diagrams + repo setup | โ Completed |
| Weeks 9โ10 | Firestore setup + Course/Session CRUD | โ Completed (Phase 1) |
| Weeks 11โ12 | Task CRUD + timer foundation | โ Completed (Phase 1) |
| Week 13 | Dashboard redesign + full navigation | โ Completed (Phase 1) |
| Week 14 | Phase 2 UX improvements + StudyLog | ๐ In Progress |
| Week 15 | Final polish + README + demo | ๐ฆ Pending |
Basic tests on ViewModels:
- Task creation & completion
- Firestore read/write
- Notification scheduling logic
All diagrams are inside /Docs/UML/:
- Class Diagram
- Flowchart (Add Task)
- Activity Diagram (Notification)
- ER Diagram (Firestore structure)
mainโ stable versionfeature/firebaseโ Firestore integrationfeature/tasksโ CRUD logicfeature/timerโ Pomodoroui/polishโ design refinement
Each teammate works in their feature branch โ Pull Request โ Review โ Merge into main.
Use simple, clear messages:
feat(tasks): add Firestore write
fix(timer): correct countdown display
docs: add class diagram to docs
- 1 min โ Intro (goal + features)
- 2 min โ Show creating Course & Session
- 1.5 min โ Add Task โ automatic reminder
- 1.5 min โ Run Pomodoro timer + progress view
- 0.5 min โ Firestore real-time sync and conclusion
This project is released under the MIT License โ free to use and modify.
- Multi-user sync (teachers / group projects)
- Dark mode and custom themes
- Widgets for โTodayโs Tasksโ
- iCloud backup and export
UniTrack brings together scheduling, task tracking, and study logging into one intuitive iOS experience โ powered by SwiftUI and Firebase. It demonstrates strong architecture, teamwork, and cloud integration suitable for academic and real-world use.