A local-first period tracker built with Flutter. Your data stays on your device — no accounts, no cloud sync, no ads, no tracking.
Most popular cycle trackers harvest intimate health data to sell ads or feed opaque recommendation engines. Your menstrual cycle is not a product.
Luma exists because period tracking should be private by default. It stores everything locally on your phone, never phones home, and ships zero analytics or advertising SDKs. No sign-up, no account, no data leaving your device — ever.
- Mark and unmark period days on a calendar; Luma derives period spans automatically.
- Log flow intensity, pain, mood, and free-text notes for any day.
- Visual calendar with colour-coded period bands (start/middle/end) and a clear legend.
- Ensemble prediction engine — combines up to four algorithms and shows a per-day confidence score:
- Median baseline — sliding-window average with outlier removal.
- EWMA — exponentially weighted moving average.
- Bayesian — Normal–Inverse-Gamma model that works from just one logged cycle.
- Linear trend — least-squares regression gated by R² (activates at 5+ cycles).
- Configurable prediction horizon (1, 3, or 6 future cycles).
- Milestone banners when enough data unlocks a new algorithm.
- Calendar-method fertile-window estimate based on configurable luteal-phase length.
- Opt-in only, with a clear disclaimer that it is educational, not medical advice.
.lumaexport format — plain JSON or password-encrypted backups.- Export wizard — choose what to include (periods, symptoms, notes) and share the file however you like.
- Import with preview — see what's new vs duplicate before merging, with automatic pre-import backup.
- Auto-backups — keeps the three most recent snapshots on-device.
- PDF reports — summary, standard, or full detail; configurable date range, with print and share.
- No analytics, crash-reporting, or ad SDKs that touch reproductive-health data (enforced by CI policy).
- App lock — PIN protected with Argon2id hashing, optional biometric unlock.
- Encrypted backups — AES encryption for exported
.lumafiles. - Everything lives in a local SQLite database; nothing is transmitted.
- English and German, with device-language detection or manual override.
- Android-first. iOS, Linux, macOS, Windows, and web targets are present in the Flutter project structure.
- FVM (Flutter Version Management)
- Android SDK with an emulator or device
fvm install
fvm use 3.41.2
fvm dart pub get
fvm dart pub global activate melos
fvm exec melos bootstrapcd apps/ptrack
fvm flutter runfvm exec melos run ci:analyze
fvm exec melos run ci:testThe pubspec policy script needs PyYAML. Use uv:
uv run --python 3.12 --with pyyaml python3 tool/ci/verify_pubspec_policy.pyFull CI mirror (Linux/macOS):
dart pub get
dart pub global activate melos
melos bootstrap
uv run --python 3.12 --with pyyaml python3 tool/ci/verify_pubspec_policy.py
melos exec -c 1 -- flutter analyze
melos exec -c 1 --dir-exists=test -- flutter testWindows (PowerShell) — use fvm exec so flutter is found:
fvm dart pub get
fvm dart pub global activate melos
fvm exec melos bootstrap
uv run --python 3.12 --with pyyaml python tool\ci\verify_pubspec_policy.py
fvm exec melos exec -c 1 -- flutter analyze
fvm exec melos exec -c 1 --dir-exists=test -- flutter testapps/ptrack Flutter application (package name: luma)
packages/ptrack_domain Domain models, prediction algorithms, validation
packages/ptrack_data Database, repositories, import/export services
docs/ Additional documentation
tool/ci/ CI helper scripts
See SECURITY.md for the dependency and telemetry policy.
Luma is released under the MIT License with an additional health disclaimer. See LICENSE for the full text.
Luma is not a medical device. Predictions and estimates are statistical approximations based on past data. They are not diagnoses, medical advice, or a substitute for professional healthcare. Do not rely on Luma for contraception, fertility planning, or any health decision. See the LICENSE for the complete disclaimer.