Mobile-first React + TypeScript + Firebase progressive web app for personal expense tracking and todo management.
- React + Vite + TypeScript
- Firebase Authentication (Google Sign-In)
- Cloud Firestore (with offline persistence)
- Tailwind CSS
- vite-plugin-pwa
- Vercel deployment target
- Authentication flow with Google, email/password, and optional phone OTP
- First-login onboarding for monthly budget
- Protected routes
- Home, Expenses, Todos, Dashboard views
- Bottom navigation with 4 tabs: Home, Expenses, Todos, Dashboard
- Context-aware FAB with Add Expense / Add Todo modals
- Expense CRUD (add, list, delete) with category/date filtering
- Todo CRUD (add, list by type, toggle complete, delete)
- 7 PM evening reminder banner based on whether today has expenses
- Dashboard aggregation: spent, remaining, budget usage, category breakdown
- Realtime Firestore listeners and user-scoped data access pattern
- Toast notifications, loading skeletons, accessible touch/focus states
- PWA manifest + service worker (
generateSW) with placeholder icons
- Install dependencies:
npm install- Create your local env file:
cp .env.example .env-
Fill the
.envvalues using your Firebase project config. -
Start the dev server:
npm run dev- Build for production:
npm run buildSee .env.example for all required Firebase values:
VITE_FIREBASE_API_KEYVITE_FIREBASE_AUTH_DOMAINVITE_FIREBASE_PROJECT_IDVITE_FIREBASE_STORAGE_BUCKETVITE_FIREBASE_MESSAGING_SENDER_IDVITE_FIREBASE_APP_ID
- Provide real Firebase credentials in
.env(local) and Vercel project settings (production). - Replace placeholder PWA icons in
public/icons/icon-192.pngandpublic/icons/icon-512.pngwith brand assets before launch. - Deploy
firestore.rulesmanually via Firebase CLI or Firebase Console.
vercel.jsonincludes rewrite rules for SPA client-side routing.- Configure all
VITE_FIREBASE_*env vars in Vercel before deploy.