Your most intimate health data belongs on your device, not a company's servers.
Works in any browser · Installable as a PWA · Fully offline
Nari is a menstrual cycle tracker that stores everything in your browser's IndexedDB. No account. No cloud. No tracking. Your cycle data stays on your device forever — including a Decoy Mode that shows fake data if someone forces you to unlock the app.
Every major period tracking app — Flo, Clue, Glow — collects your cycle data, syncs it to their servers, and either sells it to data brokers or exposes it in breaches. In 2023, the FTC took action against Premom for sharing health data with third parties. In 2022, Flo received an FTC settlement for similar practices.
You track your period to understand your body. That data tells a story about your fertility, your health, your life decisions. It should be yours alone.
Nari runs entirely in your browser. When you log a period or symptom:
Your phone → IndexedDB (local storage)
That's the entire data flow. There is no second arrow. No API call. No sync endpoint. Nothing leaves your device.
| Platform | How |
|---|---|
| Any browser | Visit nari-self.vercel.app |
| iPhone / iPad | Safari → Share → Add to Home Screen |
| Android | Chrome → Menu → Add to Home Screen |
| Desktop Chrome | Address bar → Install icon |
⭐ Star on GitHub
| Feature | What it does |
|---|---|
| Local-only storage | IndexedDB — data never leaves your device |
| Decoy Mode | Enter a second PIN to show convincing fake data to someone coercing you |
| App Lock | PIN or biometric lock for the whole app |
| Smart predictions | Cycle and fertile window predictions with confidence levels (high / medium / low) |
| Quick Log | Log flow intensity, symptoms, moods, and notes in a few taps |
| Calendar view | Color-coded calendar showing logged days and predicted windows |
| Export | JSON, CSV, PDF daily summary, and a formatted Doctor Report PDF |
| Import | Merge entries from a previous JSON export (no duplicates) |
| Custom moods & symptoms | Add your own mood and symptom labels |
| Offline PWA | Install as a native-feeling app — works with no internet connection |
| Full data wipe | One-tap deletion of all data from Settings |
This is Nari's most privacy-critical feature. If someone forces you to unlock the app:
- Set up two PINs in Settings — your real PIN and a decoy PIN
- Entering the decoy PIN shows a completely plausible fake cycle with generated data
- Your real data is untouched and invisible
- The decoy session looks and behaves exactly like the real app
Decoy Mode was designed for situations where physical coercion is a real concern — abusive relationships, border crossings, or any scenario where "show me your phone" is not actually a choice.
| What | Status |
|---|---|
| Network requests for your cycle data | Never |
| Third-party analytics or ads | None |
| Account required | No |
| Data stored on any server | No |
| Exported data sent anywhere automatically | No |
| Stored | Example |
|---|---|
| Period start/end dates | { date: "2024-03-15", type: "period_start" } |
| Flow intensity | light / medium / heavy |
| Symptoms | cramps, bloating, headache |
| Moods | tired, anxious, happy |
| Notes | Free text per day |
| App settings | Cycle length, lock PIN (hashed) |
| Protected | Why |
|---|---|
| Contact list | Not accessed |
| Location | Not accessed |
| Camera / microphone | Not accessed |
| Other apps' data | Not accessed |
| Any network endpoint for health data | No endpoint exists |
| Layer | Technology |
|---|---|
| UI | React 19 + TypeScript |
| Styling | Tailwind CSS v4 |
| Animations | Motion (Framer Motion) |
| Storage | IndexedDB via idb |
| Date logic | date-fns |
| PDF export | jsPDF + jsPDF-autotable |
| Build | Vite 6 |
| PWA | vite-plugin-pwa |
git clone https://github.com/Rishiidev/Nari.git
cd Nari
npm install
npm run dev
# Open http://localhost:3000npm run build # Production build
npm run lint # Type check
npm run preview # Preview production buildSee CONTRIBUTING.md. Bug fixes and privacy-preserving features are welcome. Features requiring a server or account are out of scope.
MIT — see LICENSE
⭐ Star this repo