mobile

Myanmar Calendar

A modern Myanmar calendar app with calendar views, astrology, events, conversion tools, and printable calendar generation.

Myanmar Calendar Logo
Featured Graphic

📱 Overview#

Myanmar Calendar App combines Myanmar calendar data and Western dates in one app experience:

  • Home month calendar with rich date details
  • Year, week, and day calendar views
  • Date conversion and calendar utilities
  • Events with recurring support
  • Calendar generation (preview/beta) for image/PDF export
  • Remote-configurable holiday overrides

Core calculation runtime is powered by myanmar_calendar_dart, with app-level settings for language, timezone behavior, and display options.


✨ Features#

🗓️ Core Calendar#

  • Myanmar and Western date rendering in month grid
  • Day details with moon phase, sabbath, holidays, and astrological data
  • Multiple calendar views:
    • Month (home)
    • Year view
    • Week view
    • Day view
  • Fast runtime config updates (language, timezone source, holiday overrides)

🌙 Myanmar Date & Astrology#

  • Myanmar month/day/year and Sasana year
  • Fortnight day and moon phase information
  • Astrological indicators including:
    • Sabbath / Sabbath Eve
    • Yatyaza
    • Pyatthada / Afternoon Pyatthada
    • Mahabote / Nakhat / Nagahle related outputs

🔄 Converter Tools#

  • Myanmar ↔ Western date conversion
  • Date difference calculator
  • Date arithmetic tools
  • Moon phase finder

📌 Events#

  • Create, edit, and delete events
  • Recurring event support
  • Day-based event timeline and quick navigation
  • Event categories and priority support

🖨️ Calendar Generation (Preview/Beta)#

  • Generate by selected month or full year
  • In-app page preview and export flow
  • PDF/image export and save/share actions
  • Theme/background customization
  • Overlay editor support for:
    • Text
    • Emoji
    • Sticker
    • User image
  • Layout tools for portrait/landscape and printable formats

Calendar Generation is currently preview/beta and still under active refinement.

🎨 Personalization#

  • Light/dark theme modes
  • Multiple theme presets + custom colors
  • Dynamic app icon selection (platform dependent)
  • App language and calendar language controls
  • Display toggles (holidays, astrology, Myanmar/Western date visibility, etc.)
  • Timezone behavior:
    • Use device timezone (recommended default)
    • Or fixed Myanmar timezone fallback

☁️ Remote Config + Onboarding#

  • Firebase Remote Config driven holiday overrides
  • App update prompts from remote config (optional/required update support)
  • First-run consent flow for analytics/crash reporting
  • Promo carousel for onboarding and new feature announcements

📲 Integrations#

  • Android home widgets (configurable theme/options)
  • Telegram web integration hooks
  • Local-first storage using SQLite (drift)

📸 Screenshots#

Home MonthDay DetailsYear View
Home MonthDay DetailsYear View
Week ViewDay ViewConverter
Week ViewDay ViewConverter
CalculatorArithmeticMoon Phase
CalculateArithmeticMoon Phase
Events ListEvent FormSettings
Events ListEvent FormSettings
Generation PreviewGeneration EditorExport Result
Generation PreviewGeneration EditorExport Result
Widget Settings
Widget Settings

🚀 Quick Start#

Prerequisites#

  • Flutter SDK 3.x
  • Dart SDK 3.11+
  • Android Studio or VS Code with Flutter tooling
  • iOS builds require Xcode (macOS)

Run Locally#

# Clone
git clone https://github.com/mixin27/mmcalendar.git
cd mmcalendar
 
# Install workspace dependencies
flutter pub get
 
# Run mobile app package
cd apps/myanmar_calendar
flutter pub get
flutter run

Run on Chrome (Web)#

cd apps/myanmar_calendar
flutter run -d chrome

Production Builds#

cd apps/myanmar_calendar
 
# Android
flutter build apk --release
flutter build appbundle --release
 
# iOS (macOS only)
flutter build ios --release
 
# Web
flutter build web --release

iOS Alternate App Icons (Testing Note)#

  • Alternate icon switching is supported in the app for iOS.
  • iOS Simulator may fail with LaunchServices resource/token errors (NSPOSIXErrorDomain code=35) even when configuration is correct.
  • For reliable verification, test on:
    • a physical iPhone, or
    • a cloud real-device testing service (for example BrowserStack App Live).

Native Setup Recovery (Android Icons/Widgets + iOS Icons)#

If platform folders are regenerated and native integrations are lost:

./scripts/restore_native_mobile_setup.sh --scope all
./scripts/verify_native_mobile_setup.sh --scope all

Reference: docs/architecture/native_mobile_setup.md


☁️ Remote Config#

Holidays Config (required for holiday override feature)#

  • Key: holidays_config_v2
  • Type: JSON string

Sample payload:

{
  "customHolidayRules": [
    {
      "id": "team_founding_day",
      "name": "Team Founding Day",
      "type": "other",
      "localizedNames": {
        "my": "အသင်းတည်ထောင်နေ့",
        "en": "Team Founding Day"
      },
      "rule": {
        "kind": "westernDate",
        "month": 9,
        "day": 1
      },
      "cacheKey": "team_founding_day",
      "cacheVersion": 1
    },
    {
      "id": "thingyan_special",
      "name": "Thingyan Special",
      "type": "other",
      "rule": {
        "kind": "myanmarDate",
        "month": 1,
        "day": 1
      }
    }
  ],
  "disabledHolidays": ["halloween"],
  "disabledHolidaysByYear": {
    "2027": ["valentinesDay"]
  },
  "disabledHolidaysByDate": {
    "2026-10-31": ["halloween"]
  }
}

Reference:

App Update Config (optional)#

If you enable remote-config update checks, these keys are used:

  • app_update_enabled (bool)
  • app_update_latest_build_number (int)
  • app_update_latest_version (string)
  • app_update_min_supported_build_number (int)
  • app_update_force_title (string)
  • app_update_force_message (string)
  • app_update_optional_title (string)
  • app_update_optional_message (string)
  • app_update_release_notes (string)
  • app_update_android_url (string)
  • app_update_ios_url (string)
  • app_update_web_url (string)

🏗️ Architecture#

This repository is a Flutter workspace with feature packages and shared layers.

mmcalendar/
├── apps/
│   └── myanmar_calendar/          # Main app
├── packages/
│   ├── shared/
│   │   ├── core/                  # Contracts, ports, constants, runtime utils
│   │   ├── localizations/         # i18n resources
│   │   ├── ui_kit/                # Shared UI building blocks
│   │   └── overlay_editor/        # Overlay editing package
│   ├── features/
│   │   ├── calendar/
│   │   ├── views/
│   │   ├── converter/
│   │   ├── events/
│   │   ├── settings/
│   │   ├── calendar_generation/
│   │   ├── promo/
│   │   ├── holidays/
│   │   └── home_widgets/
│   └── integrations/
│       ├── database/              # Drift/SQLite
│       ├── firebase/              # Remote config + analytics/crash adapters
│       ├── app_update/
│       └── telegram_web/
└── scripts/

Stack#

  • Flutter + Dart
  • flutter_bloc (state management)
  • go_router (navigation)
  • drift (local database)
  • get_it + injectable (dependency injection)
  • myanmar_calendar_dart (calendar engine)

Development Commands#

# Workspace dependencies
flutter pub get
 
# Codegen (from workspace root)
dart run build_runner build --delete-conflicting-outputs
 
# Analyze
flutter analyze

📝 License#

This project is licensed under the MIT License.


🙏 Acknowledgments#

  • Myanmar calendar calculations based on Yan Naing Aye's algorithm
  • Traditional Myanmar astrology sources and community feedback
  • Flutter and open-source ecosystem contributors

📞 Support#