A personal finance tracker to manage monthly income and expenses,
with real-time cloud sync and multi-device access.
- Track income and expenses per month with categories, due dates, and paid status
- See a yearly dashboard with charts and spending insights
- Access data from any device via Firebase cloud sync
- Keep everything private — data is locked to the authenticated user
- Monthly view — add, edit, delete income and expense entries; toggle paid/received status; track spending rate
- Dashboard — yearly overview with income vs. expense bar chart, top expense categories, and monthly summaries
- Authentication — email/password or Google sign-in via Firebase Auth
- Cloud storage — Firestore stores each month as an isolated document per user
- Import / Export — back up and restore all data as a JSON file
- Copy month — duplicate a month's entries to another period with paid status reset
- Responsive — desktop table layout and mobile card list; modal becomes a bottom sheet on small screens
| Layer | Technology |
|---|---|
| Framework | React 18 + TypeScript 5 |
| Bundler | Vite 5 |
| Styling | Tailwind CSS 3 |
| Charts | Recharts 2 |
| Icons | Tabler Icons |
| Date picker | react-day-picker 8 |
| Auth & DB | Firebase 12 — Auth + Firestore |
| Security | Firebase App Check + reCAPTCHA v3 |
| Package manager | Bun |
| Linting | ESLint + typescript-eslint |
| Formatting | Prettier |
git clone <repo-url>
cd p-finance
bun install- Go to console.firebase.google.com and create a project
- Enable Authentication → Sign-in providers → Email/Password and Google
- Enable Firestore Database in production mode
- Register a Web app and copy the config
- Go to App Check → register your web app with reCAPTCHA v3 (get a site key from g.co/recaptcha/admin)
Copy .env.example to .env.local and fill in your Firebase credentials:
cp .env.example .env.localVITE_FIREBASE_API_KEY=
VITE_FIREBASE_AUTH_DOMAIN=
VITE_FIREBASE_PROJECT_ID=
VITE_FIREBASE_STORAGE_BUCKET=
VITE_FIREBASE_MESSAGING_SENDER_ID=
VITE_FIREBASE_APP_ID=
VITE_RECAPTCHA_SITE_KEY=bun dev| Command | Description |
|---|---|
bun dev |
Start dev server |
bun run build |
Type-check and build for production |
bun run preview |
Preview the production build locally |
bun run lint |
Run ESLint |
bun run lint:fix |
Run ESLint and auto-fix |
bun run format |
Format all files with Prettier |
bun run format:check |
Check formatting without writing |
