A free, open-source baby tracker PWA built for sleep-deprived parents.
One-tap logging Β· Multi-caregiver sync Β· Works offline Β· Privacy-first
Features Β· Quick Start Β· Connect Your Database Β· Free vs Pro Β· Contributing Β· License
Most baby tracker apps are either too expensive, too cluttered, or don't let you own your data. Raya-logs is different:
- π 100% free & open-source β host it yourself, own your data forever
- π± PWA β install on any phone, works like a native app, no app store needed
- π¨βπ©βπ§ Multi-caregiver β both parents (and grandparents!) track together with a shared family code
- π PIN-protected β 4-digit PIN keeps your data private
βοΈ Offline-first β works without internet, syncs when back online- π¨ Beautiful UI β soft pastel theme designed for 3 AM use with one hand
| Feature | Description |
|---|---|
| π§· Diaper Tracking | Log wet/dirty/both with color, consistency & quantity |
| πΌ Feeding Tracker | Timer or manual entry, left/right/both side tracking |
| π΄ Sleep Sessions | Duration-based sleep logging with quality rating |
| π€± Tummy Time | Timer or manual duration entry |
| π Vitamin D3 | Simple given/not-given daily tracker |
| π Notes | Free-text notes for anything else |
| π Growth | Weight (kg) & height (cm) measurements |
| π Dashboard | Daily, weekly & monthly stats with charts |
| π Real-time Sync | Changes appear instantly across all devices |
| π€ Export | Download daily summaries as HTML or full data as JSON |
| βοΈ Edit History | Every edit is logged with who changed what and when |
| πΆ Multi-baby | Track multiple babies under one family |
The Pro version is a hosted, managed service with additional features designed to make parenting even easier.
| Feature | Description |
|---|---|
| ποΈ Voice Logging | "Hey Raya, log a wet diaper" β hands-free at 3 AM |
| π Smart Reminders | Feeding reminders, vitamin alerts, milestone nudges |
| π Pediatrician Reports | One-tap export formatted for your baby's doctor |
| π¨ββοΈ Ask Doc | AI-powered answers to common newborn questions, sourced from AAP guidelines |
| π‘ Daily Tips | Age-appropriate parenting tips delivered daily |
| π± Push Notifications | Cross-device notifications for shared caregivers |
| π Sleep Insights | Pattern analysis and sleep coaching suggestions |
| π₯ Consultant Support | Connect with certified pediatric consultants |
- Node.js v18+ (download)
- npm v9+ (comes with Node.js)
- A Firebase project (free tier is more than enough β see Connect Your Database)
git clone https://github.com/esainath96/raya-logs.git
cd raya-logsnpm installcp .env.example .env.localOpen .env.local and fill in your Firebase credentials (see next section for how to get them).
npm run devOpen http://localhost:5173 in your browser. That's it! π
Raya-logs uses Firebase Firestore as its database. Firebase's free Spark plan gives you:
- 1 GiB storage
- 50K reads/day, 20K writes/day
- More than enough for a family of caregivers
π Click to expand full instructions
- Go to Firebase Console
- Click "Create a project" (or "Add project")
- Name your project (e.g.,
my-baby-tracker) - Disable Google Analytics if you don't need it (optional)
- Click "Create project"
- In your project dashboard, click the web icon
</>to add a web app - Give it a nickname (e.g.,
baby-tracker-web) - Do NOT check "Firebase Hosting" (you're self-hosting)
- Click "Register app"
- You'll see a config object β copy those values:
const firebaseConfig = {
apiKey: "AIza...", // β VITE_FIREBASE_API_KEY
authDomain: "xxx.firebaseapp.com", // β VITE_FIREBASE_AUTH_DOMAIN
projectId: "xxx", // β VITE_FIREBASE_PROJECT_ID
storageBucket: "xxx.appspot.com", // β VITE_FIREBASE_STORAGE_BUCKET
messagingSenderId: "123...", // β VITE_FIREBASE_MESSAGING_SENDER_ID
appId: "1:123...:web:abc..." // β VITE_FIREBASE_APP_ID
};- Paste each value into your
.env.localfile
- In the Firebase Console sidebar, click "Cloud Firestore"
- Click "Create database"
- Choose "Start in test mode" (you can lock it down later)
- Select a location closest to you (e.g.,
us-central1,asia-south1) - Click "Enable"
Go to Firestore β Rules and replace the default rules with:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /families/{familyId} {
allow read, write: if true; // Lock this down further in production
match /logs/{logId} {
allow read, write: if true;
}
}
}
}
β οΈ For production use, implement proper authentication rules. The above is for getting started quickly.
npm run devThe app will now connect to your own Firebase project!
Raya-logs is architecturally simple β all database calls go through two hooks:
| Hook | File | Purpose |
|---|---|---|
useFamily |
src/hooks/useFamily.js |
Family CRUD, PIN verification |
useEntries |
src/hooks/useEntries.js |
Log entry CRUD, real-time subscriptions |
To swap Firebase for Supabase, PocketBase, Appwrite, or any other backend, you only need to rewrite these two files. The rest of the app doesn't know or care what database you use.
raya-logs/
βββ public/ # Static assets (favicon, icons)
βββ src/
β βββ assets/ # Images
β βββ components/ # Reusable UI components
β β βββ ActivityFeed.jsx
β β βββ BottomSheet.jsx
β β βββ Charts.jsx
β β βββ ChipSelector.jsx
β β βββ DatePicker.jsx
β β βββ EditHistory.jsx
β β βββ EntryCard.jsx
β β βββ Layout.jsx
β β βββ PinInput.jsx
β β βββ QuickStats.jsx
β β βββ Timer.jsx
β βββ config/
β β βββ firebase.js # Firebase initialization (reads from env vars)
β βββ context/
β β βββ AuthContext.jsx # Authentication state
β β βββ FamilyContext.jsx # Family data state
β βββ hooks/
β β βββ useDashboard.js # Dashboard data aggregation
β β βββ useEntries.js # Firestore log entries CRUD
β β βββ useFamily.js # Family management
β β βββ useTimer.js # Timer hook for feeding/tummy time
β βββ pages/
β β βββ Dashboard.jsx # Stats & charts
β β βββ Home.jsx # Main logging screen
β β βββ Onboarding.jsx # Family setup flow
β β βββ PinGate.jsx # PIN unlock screen
β β βββ Settings.jsx # App settings
β βββ sheets/ # Bottom sheet forms (one per entry type)
β β βββ DiaperSheet.jsx
β β βββ FeedingSheet.jsx
β β βββ GrowthSheet.jsx
β β βββ NoteSheet.jsx
β β βββ SleepSheet.jsx
β β βββ TummyTimeSheet.jsx
β β βββ VitaminSheet.jsx
β βββ utils/
β β βββ dateHelpers.js # Date formatting utilities
β β βββ entryBuilders.js # Canonical entry model (single source of truth)
β β βββ exportHelpers.js # HTML/JSON export
β β βββ familyCode.js # Family code generation
β β βββ statsCalculator.js # Stats aggregation
β βββ App.jsx # Root component & routing
β βββ index.css # Complete design system
β βββ main.jsx # App entry point
βββ .env.example # Template for environment variables
βββ .gitignore
βββ index.html
βββ package.json
βββ vite.config.js
| Layer | Technology |
|---|---|
| Framework | React 19 + Vite |
| Styling | Vanilla CSS with custom properties (design tokens) |
| Database | Firebase Firestore (swappable) |
| Offline | Firestore persistent local cache + multi-tab sync |
| Font | Nunito via Google Fonts |
| Package Manager | npm |
Your data, your responsibility.
- π No API keys are stored in this repository. All credentials are loaded from environment variables.
- π« The
dist/build folder is git-ignored. Production builds containing inlined env values never touch the repo. - π
.env.localis git-ignored. Your private credentials stay on your machine. - π§Ή No telemetry, no analytics, no tracking. This app phones home to nobody except your own Firebase project.
If you fork this repo, always verify that your .gitignore includes *.local and dist before pushing.
| Free (Open Source) | Pro (Paid) | |
|---|---|---|
| Price | $0 forever | Subscription (TBA) |
| Hosting | Self-hosted | Managed cloud |
| Core tracking | β All 7 entry types | β All 7 entry types |
| Multi-caregiver | β | β |
| Offline support | β | β |
| Dashboard & charts | β | β + advanced insights |
| Data export | β | β + formatted PDF reports |
| Voice logging | β | β |
| Smart reminders | β | β |
| Push notifications | β | β |
| Ask Doc (AI) | β | β |
| Daily parenting tips | β | β |
| Sleep insights | β | β |
| Consultant support | β | β |
The free version is fully functional β you can track everything, sync across devices, and export your data. The Pro version adds convenience features for parents who want extra help at 3 AM.
We welcome contributions! Please read our Contributing Guide before submitting a pull request.
Quick rules:
- Fork the repo and create a feature branch
- Follow the existing code style (vanilla CSS, functional React components)
- Test your changes locally before submitting a PR
- Don't commit
.env.localor any credentials
This project is open-source under the MIT License.
Built with π for sleep-deprived parents everywhere.
Created by Sainath