Project overview
Personal Finance Manager is a full-stack personal finance application I developed to bring everyday money management into one organized workspace. Users can record income and expenses, track balances across multiple accounts, manage bills and outstanding lends or debts, plan savings targets, store documents, and review their financial position through a responsive dashboard.
Rather than focusing on one isolated feature, the project connects financial records, account balances, repayment histories, reminders, forecasts, and document references into a consistent workflow. It combines a React interface with a Node.js/Express API, MongoDB persistence, and private cloud attachment storage.
Live application: personal-finance-manager-sandy.vercel.app
01 — The challenge
Personal finances can become fragmented across bank accounts, cash holdings, separate transaction lists, bills, informal loans, and scanned receipts. When these records are tracked independently, it becomes difficult to understand current balances, upcoming obligations, or the difference between genuine income and money received from borrowing.
I set out to build a unified application that could record different kinds of financial activity without losing accounting context, provide useful summaries, and keep users in control of their data and attachments.
02 — The solution
I built a responsive financial workspace that connects account-based transactions with dashboards, recurring bills, personal lending and borrowing, a searchable document vault, financial planning, and reporting. The application uses authenticated, user-scoped API endpoints and a MongoDB data model for accounts, transactions, loans, bills, people, documents, targets, and related records.
A navigation structure groups the experience into Money, Planning, and Workspace tools. Reusable forms, search and saved filters, confirmation dialogs, and responsive layouts support consistent day-to-day use.
03 — Core application features
Financial dashboard and planning
- Financial overview: Displays account balances, estimated net worth, current-month income, spending, cash flow, and comparisons with the previous month.
- Financial runway: Estimates spending pressure using recent expenditure and an indicative daily burn rate.
- Upcoming obligations: Highlights bills due soon, outstanding personal balances, and recent workspace activity.
- Monthly targets: Allows users to set income and savings goals, then compare progress against recorded activity.
- Customizable dashboard: Supports control over which dashboard sections are displayed.
Accounts and transaction management
- Manage multiple financial accounts, inspect account details, and track changing balances.
- Record money received, money spent, and transfers between accounts through a guided transaction form.
- Search, filter, sort, inspect, and export transaction history; save useful filter views.
- Reverse eligible deleted transactions and keep affected account balances consistent.
- Apply safeguards to prevent duplicate submissions and invalid money movements.
Lends, debts, and people ledgers
- Track money lent to others and money borrowed, including due dates, remaining balances, and repayment status.
- Record partial or full repayments and preserve linked financial transaction history.
- View a person-focused ledger showing their net position, related records, payments, and available receipts.
- Manage person references, contact details, and duplicate-person merging where appropriate.
Bills, reminders, and calendar
- Create one-time or recurring bills with amounts, due dates, categories, and notes.
- Pay a bill using a selected financial account and keep the payment linked to the bill record.
- Review unpaid, upcoming, and overdue bills using filters and alerts.
- Explore bills and lend/debt due dates together in a financial calendar.
Forecasts and savings guidance
The application's Forecasts & Guidance module estimates future income and expenses from recent transaction patterns. It uses a rolling average of recent months to produce a six-month projection, chart trends, and compare expected savings with a user-entered target.
The recommendations are statistical and rule-based. The current implementation does not train a machine-learning model or guarantee financial outcomes.
Private document vault and record backups
- Store records for receipts, invoices, warranties, bills, manuals, and other documents.
- Attach supported files, search and categorize records, and preview authorized attachments.
- Use private Amazon S3 object storage and time-limited access links for document retrieval.
- Export structured financial records as JSON and review/import a backup through a validation workflow.
Backup limitation: JSON exports contain the structured records and attachment references, not the actual uploaded files. Complete recovery requires a separate backup of the private file storage.
Alerts, activity, and settings
- View due-date and target-related notifications, filter alerts, and snooze supported items.
- Review recent workspace changes and restore selected recently deleted records.
- Customize money formatting, interface density, receipt preferences, and other settings.
- Use a responsive, installable Progressive Web App interface on supported devices.
04 — Technical architecture
- Frontend: React 19, JavaScript, Vite, React Router, Bootstrap, reusable UI components, and Recharts for data visualizations.
- Backend: Node.js and Express REST endpoints for authentication, accounts, transactions, bills, loans, reports, forecasts, documents, and backups.
- Database: MongoDB with Mongoose models representing user-owned financial entities and their relationships.
- Authentication: Email verification, hashed passwords, JWT-based sessions, password reset flows, and server-side ownership checks.
- Media storage: Amazon S3 with user-scoped object keys and signed access URLs for authorized downloads.
- Deployment: React frontend deployed through Vercel, with a separately configured backend API and private cloud storage.
- PWA support: A web app manifest, install icons, service worker, and offline fallback. Financial updates still require a network connection.
05 — Key engineering decisions
Preserve financial consistency across linked records
Loans, bills, and transactions are related financial events rather than unrelated rows. The backend distinguishes payments and principal movements from regular income and expenses, protects linked records against invalid direct changes, and coordinates balance changes with related operations.
Handle retries and money precision carefully
The backend validates supported monetary precision and uses database-side balance updates. Optional client request IDs help avoid duplicate direct transactions when requests are retried, and transaction-aware operations support financial consistency.
Protect records and private documents by owner
Authenticated requests are scoped to the current user. File handling validates allowed content types and ownership before access or deletion, and private S3 attachments are retrieved through temporary signed URLs rather than open public asset links.
Make summaries financially meaningful
Dashboard calculations distinguish ordinary cash flow from loan principal, include outstanding lends and debts in the estimated net-worth calculation, and use configured calendar boundaries for monthly reporting and due-date decisions.
Keep forecasts understandable
Instead of presenting an opaque prediction score, the forecast view explains that estimates come from recent rolling averages and provides practical target-based guidance. This keeps the method interpretable and its limits clear.
Support recovery without overstating backup coverage
Structured exports and validated imports help users move or restore financial records, while the interface makes clear that uploaded attachment bytes are stored separately and require their own backup.
06 — Product experience and accessibility
The interface organizes a large set of financial tools into a consistent sidebar and mobile navigation. Search, filtering, saved views, loading states, validation messages, confirmation dialogs, and responsive card layouts reduce friction when navigating dense transaction histories or large financial datasets.
The installable PWA provides a familiar app-like entry point, while a clear offline notice prevents users from mistaking cached pages for an ability to save financial transactions without connectivity.
07 — Challenges and learning
This project strengthened my experience in designing full-stack workflows where data accuracy matters as much as interface quality. In particular, I worked on account-balance consistency, linked transactions, repayment tracking, date-sensitive financial summaries, user-scoped access, document ownership, and resilient backup import behavior.
It also involved building reusable React screens for a multi-feature application and connecting them to dedicated Node.js/Express API modules.
08 — Project outcome
The result is a deployed personal finance application that brings financial records, planning tools, lending and debt tracking, document references, and actionable summaries into one workspace. It demonstrates the design of an integrated financial product built with React, Node.js, Express, MongoDB, and cloud storage.
This is an independently developed application rather than a bank-connected service. Account balances and financial records come from information entered and managed within the application; automated bank synchronization, regulated financial advice, and trained AI predictions are not claimed.
Main technologies: React, Node.js, Express, MongoDB, AWS, and Vercel.