Internal Codename: RemindMe
Version: 1.0.0
A modern, intuitive mobile application built with React Native and Expo to help students manage their academic schedules, exams, and assignments.
Core Value Proposition: Never miss a lecture again with a smart hybrid notification system (Calendar + Alarm) that works reliably across iOS and Android.
- 📅 Smart Scheduling: Easily add and organize your weekly lecture schedule.
- 🔔 Hybrid Reminders:
- iOS: Uses native local notifications.
- Android: Uses exact alarms to bypass battery optimization.
- 🎨 Color Coded: Assign custom colors to courses for quick visual identification.
- 📝 Exam Tracking: Dedicated section to keep track of upcoming exams.
- 🌓 Theme System:
Light/Darkmodes.Automaticmode that syncs with system settings.
- ⚡ Haptic UI: Tactile interactions for saving, errors, and selection events.
- Framework: React Native
- Platform: Expo SDK 54 (Managed Workflow)
- Routing:
expo-router(File-based navigation) - State Management: React Context (
LectureContext,SettingsContext) - Data Persistence:
@react-native-async-storage/async-storage - Date Handling:
dayjs - Styling:
StyleSheetwith custom design tokens.
/
├── app/ # Expo Router pages (screens)
│ ├── (tabs)/ # Main tab navigation (index, week, exams, settings)
│ ├── add-lecture.tsx # Screen for creating/editing lectures
│ ├── notifications.tsx # Notification history view
│ └── ...
├── components/ # Reusable UI components
│ ├── ColorPicker.tsx # Custom color selection grid
│ ├── LectureCard.tsx # Display card for individual lectures
│ └── ...
├── contexts/ # Global State logic
│ ├── LectureContext.tsx # Handles storage, CRUD, and Notification scheduling
│ └── SettingsContext.tsx # Handles Theme and User Preferences
├── constants/ # App-wide constants
│ ├── Colors.ts # Light/Dark mode color tokens
│ └── ...
├── types/ # TypeScript definitions
│ ├── lecture.ts # Data models (Lecture, DayOfWeek)
│ └── ...
├── utils/ # Helper logic
│ ├── validation.ts # Input validation rules
│ └── notifications.ts # Complex notification scheduling logic
└── .npmrc # Configuration for legacy peer dependencies- Node.js: (LTS version recommended)
- Expo Go: Installed on your physical device (iOS/Android).
-
Clone the repository:
git clone <repository-url> cd lecture-reminder-app
-
Install dependencies:
IMPORTANT: This project relies on an
.npmrcfile to setlegacy-peer-deps=true. This is required to resolve a conflict betweenReact 19andlucide-react-native.npm install # OR if you prefer to be explicit npm install --legacy-peer-deps -
Start the server:
npx expo start
- Press
ato run on Android Emulator. - Press
ito run on iOS Simulator. - Scan the QR code with Expo Go to run on physical device.
- Press
npm start: specific alias forexpo start.npm run android: specific alias forexpo start --android.npm run ios: specific alias forexpo start --ios.npm run web: specific alias forexpo start --web.
If you see an error about lucide-react-native and react@19:
- Fix: Ensure the
.npmrcfile exists in the root directory withlegacy-peer-deps=true. - Manual Fix: Run
npm install --legacy-peer-deps.
- Cause: Battery optimization often kills background processes.
- Fix: This app requests
SCHEDULE_EXACT_ALARMpermissions. Ensure you grant it notifications access when prompted on the first launch.
- Cause: Another Metro bundler instance is running.
- Fix: Run
npx expo start --clearto reset the cache and use a new port.