https://github.com/jacobstephens2/creightontrackingapp
A privacy-focused fertility cycle tracking app using the Creighton Model FertilityCare System, with offline support, encrypted sync, and provider sharing. Available as a web app and on Android.
https://github.com/jacobstephens2/creightontrackingapp
android creighton-model encryption fertilitcare fertility-tracking health offline-first privacy progressive-web-app reproductive-health
Last synced: 4 days ago
JSON representation
A privacy-focused fertility cycle tracking app using the Creighton Model FertilityCare System, with offline support, encrypted sync, and provider sharing. Available as a web app and on Android.
- Host: GitHub
- URL: https://github.com/jacobstephens2/creightontrackingapp
- Owner: JacobStephens2
- Created: 2026-03-20T03:10:18.000Z (22 days ago)
- Default Branch: main
- Last Pushed: 2026-03-27T19:32:05.000Z (15 days ago)
- Last Synced: 2026-03-28T00:35:37.875Z (14 days ago)
- Topics: android, creighton-model, encryption, fertilitcare, fertility-tracking, health, offline-first, privacy, progressive-web-app, reproductive-health
- Language: TypeScript
- Homepage: https://creighton.stephens.page
- Size: 21.5 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Creighton Cycle Tracker
A PWA for tracking your fertility cycle using the Creighton Model FertilityCare System (CrMS).
**Live at [creighton.stephens.page](https://creighton.stephens.page)**
## Features
- **Daily observations** — bleeding (H/M/L/VL/B), mucus stretch (0–10), mucus characteristics (C/K/L/B/G/Y), frequency, peak day marking, intercourse tracking, notes
- **Auto-computed CrMS stamps** — green (dry/infertile), red (bleeding), white (fertile/mucus), yellow (Basic Infertile Pattern), with peak day (P) and post-peak count (1/2/3)
- **Chart view** — classic Creighton 35-column chart with cycle rows, stamps, and observation codes
- **Calendar view** — monthly grid with mini stamps and cycle boundaries
- **Auto cycle detection** — new cycle starts when bleeding resumes after non-bleeding days
- **Auto peak day detection** — last day of peak-type mucus
- **Export/import** — JSON backup and CSV chart export with cycle-level summaries
- **Optional account & sync** — sign in to back up data to the server and access it across devices
- **End-to-end encryption** — synced data is encrypted client-side with PBKDF2 + AES-256-GCM; the server never sees plaintext health data
- **Provider sharing** — generate a time-limited read-only share link for your FertilityCare Practitioner (expires after 90 days)
- **Dark mode** — follows system preference with manual toggle
- **Offline-capable** — full PWA with service worker, works without internet
- **Installable** — add to home screen on Android/iOS, TWA-ready for Play Store
## Tech Stack
**Frontend:** Vanilla TypeScript, Vite, Dexie.js (IndexedDB), vite-plugin-pwa, Web Crypto API
**Backend:** Express, better-sqlite3, JWT auth, bcrypt
**Testing:** Vitest
**Hosting:** Apache, Let's Encrypt SSL
## Development
```bash
npm install
npm run dev # Dev server with hot reload
npm run build # Production build
npm run preview # Preview production build
```
The backend API server (for account/sync features):
```bash
cd server
npm install
npm run dev # Dev server with auto-reload
npm run build # Compile TypeScript
npm start # Run production build
```
In development, Vite proxies `/api` requests to `localhost:3456`.
## Deployment
The app is self-hosted on Apache with the Express API running as a systemd service (`creighton-api`) on port 3456, proxied through Apache.
```bash
# Build and deploy frontend
npm run build
sudo cp -r dist/* /var/www/creighton.stephens.page/
# Build and deploy backend
cd server && npm run build
sudo systemctl restart creighton-api
```
## Learn More
- [FertilityCare.org](https://www.fertilitycare.org/) — FertilityCare Centers of America
- [Saint Paul VI Institute](https://saintpaulvi.com/) — Pope Paul VI Institute for the Study of Human Reproduction