A personal deadline and task management iOS app built as the final project for Duke ECE564 (Fall 2022).
Team Members: Sophie Shi, Tianjun Mo, Jinyi Xie
Deadline Manager is an iOS productivity app designed to help students and professionals stay on top of deadlines across courses, assignments, and recurring tasks. It integrates with Sakai for automatic assignment syncing, supports cross-device data sync via Firebase, and offers Apple Watch support for on-the-go reminders. With intuitive views, location tagging, and push notifications, users can easily manage what’s due today, plan for the near future, and never miss a deadline again.
Interface overview: The app displays synced events across iPad, iPhone, and Apple Watch, with categorized deadlines and a clean tab-based navigation for Events, Calendar, Sync, and Settings.
Synchronization structure: Events and user data are stored in a local JSON database and synchronized across devices using Firebase Realtime Database. iCloud Keychain securely shares credentials, while Apple Watch fetches data from the iPhone via WatchConnectivity. Sakai assignments are fetched via HTTP and integrated into the system calendar.
Stay focused on the present and prepared for the future:
-
What’s due today: Stay on top of urgent tasks.
-
What’s due soon: Plan ahead with upcoming deadlines.
-
Monthly and Daily Views: See the big picture or drill down to the day.
-
Custom Tags: Organize events with meaningful categories.
-
Sakai Integration: Sync assignments automatically from Sakai.
-
Push Notifications: Get notified before deadlines hit.
-
Calendar Sync: Keep all your devices in sync with your schedule.
-
Location-aware Tasks: Add event locations using built-in map search.
-
Apple Watch Support: View and sync tasks directly from your wrist.
-
Quick Edit: Just tap to view, update, or edit task details.
Calendar UI is based on this helpful YouTube tutorial.
We use Firebase Realtime Database to persist user data and sync it across devices in real time.
User credentials are stored securely using Keychain, allowing seamless sync between a user's devices.
If you'd like to simulate syncing across multiple devices (e.g., iPhone and iPad simulators):
- Run the app on the iPhone simulator. It will create an anonymous user and save credentials to Keychain.
- Copy Keychain files from iPhone simulator:
~/Library/Developer/CoreSimulator/Devices/{iPhone_Device_ID}/data/Library/Keychains
- Paste them into the iPad simulator directory:
~/Library/Developer/CoreSimulator/Devices/{iPad_Device_ID}/data/Library/Keychains
- Launch the app on the iPad simulator. The data will now sync via Firebase.
📽️ Demo: Syncing between devices
We use WatchConnectivity to sync events between iPhone and Apple Watch.
The watch app fetches event data from the paired iPhone on launch to ensure consistency.
- Built in Swift for iOS and WatchOS.
- Firebase-powered real-time sync.
- Intuitive UI/UX for productivity on the go.
- Real-world sync testing with simulators and real devices.
Deadline Manager uses a JSON-based local model to store and sync user events. Below are the key data structures:
Represents a single task or assignment:
id: Unique ID (UUID)title: Combined course and task namecreated_at: Creation timestampdue_at: Deadline (defaults to today at 23:59:59)completed_at: Optional completion timestamptag: List of tagsdesc: Description (HTML)location: Optional locationis_completed: Completion statusis_deleted: Soft delete flagsource:DefaultorSakaisource_url: Optional URL for external sourcesource_id: External source IDcolor: Optional event color (default: blue)
Event origin:
DefaultSakai
Used for Sakai integration:
cookies: Auth cookiesusername: Sakai username
Wraps an Event with recurrence info:
start_time: When the recurrence startsend_time: Optional end timeschedule: Recurrence rule (viaEKRecurrenceRule)
All Event instances are stored in a local file: `events.json → [Event]
For more details, see the Project Documentation
This project was created for educational purposes as part of Duke ECE564 and is not currently licensed for production use.

