Skip to content
/ DayMate Public

Cross-platform calendar app (Android + React Native) with lunar calendar, ICS import/export, calendar subscription, i18n support and so on. | 跨平台日历应用(Android + React Native),支持农历、ICS 导入导出、日历订阅、国际化等等

Notifications You must be signed in to change notification settings

ceilf6/DayMate

Repository files navigation

DayMate

DayMate Logo

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.

Architecture Overview

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

Screenshots

Theme Background Settings Home Screen Schedule and Todo Subscription Feature Import Export

Core Features

Multi-Platform Support

  • Android Native: Full Material Design experience
  • React Native: iOS & Android cross-platform support
  • Shared Core: Unified business logic and data models

Rich Calendar Views

  • Month View: Overview of monthly schedules
  • Week View: Focus on weekly plans
  • Day View: Detailed single-day timeline
  • Quick switching between views

Smart Reminders

  • Local notification reminders
  • Multiple advance reminder options
  • Auto-rebuild reminders after device reboot

Trash Bin

  • Deleted events go to trash instead of permanent deletion
  • Auto-cleanup after 30 days
  • Restore or permanently delete at any time

Calendar Subscription

  • Subscribe to external calendars via webcal:// or https://
  • Supports ICS format calendar feeds
  • Configurable sync frequency
  • Auto-add events after subscription

Dark & Light Mode

  • System-following mode
  • Manual light mode
  • Manual dark mode
  • Theme color customization

Standards Compliance

  • RFC5545/ICS import & export support
  • Compatible with Google Calendar, Outlook, etc.
  • Network subscription support (webcal/https)

Lunar Calendar Support

  • Built-in Chinese lunar date display
  • Solar terms and traditional festivals
  • Optimized for Chinese users

Internationalization

  • Full i18n support
  • English and Chinese interfaces
  • Easily extensible for other languages

Quick Start

Requirements

  • Android Development: JDK 17+, Android Studio Hedgehog+, Android SDK 34
  • React Native: Node.js 16+, npm/yarn/pnpm
  • iOS Development: Xcode 14+, CocoaPods

Build Android App

# Clone repository
git clone https://github.com/ceilf6/DayMate.git
cd DayMate

# Build and install
./gradlew :apps:android-calendar:installDebug

Run React Native App

# Enter RN directory
cd apps/rn-calendar

# Install dependencies
npm install

# Run Android
npm run android

# Run iOS
npm run ios

Documentation

Use Cases

  • 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.

Tech Stack

Android Native

  • Kotlin
  • Jetpack (Room, ViewModel, LiveData, Navigation, WorkManager)
  • Material Design 3
  • Coroutines & Flow

React Native

  • TypeScript
  • React Navigation
  • AsyncStorage / SQLite
  • React Native Calendars

Shared Layer

  • Kotlin (shared core logic)
  • Gradle Multi-Project
  • Room Database

Testing

# Android unit tests
./gradlew :shared:core:test
./gradlew :apps:android-calendar:test

# React Native tests
cd apps/rn-calendar
npm test

Feature Overview

Calendar Views

  • Month / Week / Day view switching
  • Event preview, multi-day events, and all-day events display

Event Management

  • 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

Import & Export

  • ICS file import (RFC5545 parsing)
  • ICS export for backup or sharing

Calendar Subscription

  • Support webcal:// and https:// subscription URLs
  • Background periodic sync (configurable)
  • Auto-add subscribed events to calendar

Localization

  • Chinese lunar dates and solar terms
  • Localized date/time formats
  • Multi-language UI support

Architecture & Implementation

  • 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+

Permissions & Privacy

Required Permissions

  • 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

Privacy

  • 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

Import/Export & Subscription Guide

Import ICS File

  1. Go to Settings > Import
  2. Select an ICS file
  3. App parses RFC5545 events with conflict handling

Export to ICS

Select events or calendar to export as standard ICS file for backup or sharing.

Subscribe to Calendar

  1. Go to Subscription settings
  2. Enter webcal:// or https:// URL
  3. Configure sync frequency
  4. Events auto-sync to your calendar

FAQ

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.

Contributing

Issues, PRs, and feature suggestions are welcome!

  1. Fork the repository
  2. Create a branch for your feature or fix
  3. Submit a PR with description and test steps

License

See the LICENSE file in the repository root.

Roadmap

  • 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.

About

Cross-platform calendar app (Android + React Native) with lunar calendar, ICS import/export, calendar subscription, i18n support and so on. | 跨平台日历应用(Android + React Native),支持农历、ICS 导入导出、日历订阅、国际化等等

Topics

Resources

Stars

Watchers

Forks

Contributors 2

  •  
  •