Your Personal Calendar Companion
A cross-platform calendar application for everyday and professional use. DayMate uses a Monorepo architecture, supporting both Android native and React Native cross-platform apps, with intuitive calendar views and flexible event management at its core.
Note: Current development focus is on the React Native side. The Android native app shares core modules (event models, lunar calendar, etc.) but has limited UI feature parity for now.
DayMate adopts a Monorepo architecture with the following modules:
DayMate/
├── apps/
│ ├── android-calendar/ # Android native app
│ └── rn-calendar/ # React Native cross-platform app
├── shared/
│ ├── core/ # Shared core business logic
│ └── ui-android/ # Android UI components
├── packages/ # Shared packages (lunar calendar, etc.)
└── docs/ # Documentation
- Android Native: Full Material Design experience
- React Native: iOS & Android cross-platform support
- Shared Core: Unified business logic and data models
- Month View: Overview of monthly schedules
- Week View: Focus on weekly plans
- Day View: Detailed single-day timeline
- Quick switching between views
- Local notification reminders
- Multiple advance reminder options
- Auto-rebuild reminders after device reboot
- Deleted events go to trash instead of permanent deletion
- Auto-cleanup after 30 days
- Restore or permanently delete at any time
- Subscribe to external calendars via webcal:// or https://
- Supports ICS format calendar feeds
- Configurable sync frequency
- Auto-add events after subscription
- System-following mode
- Manual light mode
- Manual dark mode
- Theme color customization
- RFC5545/ICS import & export support
- Compatible with Google Calendar, Outlook, etc.
- Network subscription support (webcal/https)
- Built-in Chinese lunar date display
- Solar terms and traditional festivals
- Optimized for Chinese users
- Full i18n support
- English and Chinese interfaces
- Easily extensible for other languages
- Android Development: JDK 17+, Android Studio Hedgehog+, Android SDK 34
- React Native: Node.js 16+, npm/yarn/pnpm
- iOS Development: Xcode 14+, CocoaPods
# Clone repository
git clone https://github.com/ceilf6/DayMate.git
cd DayMate
# Build and install
./gradlew :apps:android-calendar:installDebug# Enter RN directory
cd apps/rn-calendar
# Install dependencies
npm install
# Run Android
npm run android
# Run iOS
npm run ios- Architecture - Monorepo architecture design
- Development Guide - Development environment setup
- Migration Guide - Migration to Monorepo
- I18n Guide - Internationalization guide
- Usage Guide - User guide
- Personal time management: Schedule meetings, tasks, and todos
- Family shared calendar: Export/subscribe calendars to share
- Cross-platform usage: Seamless switching between Android and iOS
- Import historical events: Batch import from ICS files
- Subscribe to external calendars: Public holidays, team schedules, etc.
- Kotlin
- Jetpack (Room, ViewModel, LiveData, Navigation, WorkManager)
- Material Design 3
- Coroutines & Flow
- TypeScript
- React Navigation
- AsyncStorage / SQLite
- React Native Calendars
- Kotlin (shared core logic)
- Gradle Multi-Project
- Room Database
# Android unit tests
./gradlew :shared:core:test
./gradlew :apps:android-calendar:test
# React Native tests
cd apps/rn-calendar
npm test- Month / Week / Day view switching
- Event preview, multi-day events, and all-day events display
- Create / Edit / Delete events
- Recurrence rules with end conditions
- Multiple reminder rules (e.g., 30 min before, 10 min before)
- Swipe to complete or delete events
- Trash bin for deleted events recovery
- ICS file import (RFC5545 parsing)
- ICS export for backup or sharing
- Support webcal:// and https:// subscription URLs
- Background periodic sync (configurable)
- Auto-add subscribed events to calendar
- Chinese lunar dates and solar terms
- Localized date/time formats
- Multi-language UI support
- Platform: Android (Kotlin + AndroidX) / React Native (TypeScript)
- Data Storage: Local database (Room / AsyncStorage) for events and subscription metadata
- Background Tasks: WorkManager for subscription sync and reminder rebuilding
- Notifications: System notifications with permission handling for Android 13+
- INTERNET: For calendar subscription and network import
- POST_NOTIFICATIONS (Android 13+): Local reminder notifications
- RECEIVE_BOOT_COMPLETED: Rebuild reminders after device restart
- Storage Access: SAF (Storage Access Framework) for import/export
- Data is stored locally by default, not sent to third-party servers
- Subscription feature connects to provided URLs only
- Credentials for private subscriptions are stored locally
- Go to Settings > Import
- Select an ICS file
- App parses RFC5545 events with conflict handling
Select events or calendar to export as standard ICS file for backup or sharing.
- Go to Subscription settings
- Enter webcal:// or https:// URL
- Configure sync frequency
- Events auto-sync to your calendar
Q: Time offset after import? A: Check the VTIMEZONE declaration in the imported file and device timezone settings.
Q: Subscription not updating? A: Verify the subscription URL is valid, check sync frequency settings, and network connectivity.
Q: How to recover deleted events? A: Open the Trash bin from settings, find the event, and tap Restore.
Issues, PRs, and feature suggestions are welcome!
- Fork the repository
- Create a branch for your feature or fix
- Submit a PR with description and test steps
See the LICENSE file in the repository root.
- Enhanced recurrence rule editing UI
- Improved ICS import compatibility
- Cloud sync options (optional)
- Shared calendar editing permissions
- Smart schedule recommendations
Thank you for using DayMate! For demos or custom features, please open an issue.
