Inspiration
Most budgeting apps only tell you what already happened after the money is gone. We wanted to build something more helpful in the moment, especially for the small, repeat purchases that quietly add up and pull people away from bigger goals. The idea behind Spendly was simple: what if your money could warn you before you spent it?
What it does
Spendly is a predictive finance companion that helps users catch spending habits before they happen. It connects bank transaction data through Plaid, looks for repeat behavior patterns, and predicts what a user is likely to spend on next. Instead of showing only past transactions, Spendly gives proactive nudges that encourage better choices before an impulse purchase turns into another missed savings goal.
How we built it
We built Spendly with a React and Vite frontend and a FastAPI backend. On the backend, we created routes for transactions, predictions, goals, and Plaid integration. We used PostgreSQL through Supabase for persistence and SQLAlchemy plus Alembic for schema management. Plaid Link was added to the dashboard so users could connect a sandbox bank account and import transaction data. Those imported transactions were normalized into the same system as our existing spending records so the dashboard and prediction flow could work from one consistent source. On the frontend, we focused on a clean dashboard experience that surfaces bank connection, transaction history, predicted spending behavior, and goal-based nudges.
Challanges we ran into
One of the biggest challenges was backend and database reliability while integrating Plaid. Because our shared Supabase database was being recreated during development, we ran into repeated 500 errors caused by missing tables even when the app itself was fine. We also had to debug cases where the frontend looked broken even though the root issue was stale backend processes or deleted project files. Another challenge was making Plaid imports fit naturally into an existing transaction and prediction system without breaking manual or SMS-style entries.
Accomplishments that we're proud of
We are proud that Spendly moved beyond a basic budgeting dashboard into something proactive and behavior-aware. We successfully connected Plaid sandbox banking data into the app, normalized imported transactions into the existing prediction flow, and built a user experience that feels more like a financial companion than a spreadsheet. We are also proud that we worked through a lot of integration and environment issues and still ended up with a working full-stack demo.
What we learned
We learned that building around financial data is not just about visualizing transactions, it is about trust, reliability, and timing. We learned a lot about debugging full-stack systems where frontend issues can actually come from backend state or database drift. We also learned how important it is to design data models early so new integrations like Plaid can fit into the system cleanly without forcing a rewrite later.
What's next for Spendly
Next, we want to make Spendly more intelligent and more production-ready. That includes improving the prediction engine, making nudges more personalized, adding clearer sync and account status handling, and supporting real banking flows beyond sandbox mode. We also want to strengthen resilience around database setup and deployment so the app is more stable in live environments. Longer term, we see Spendly becoming a real-time financial decision assistant that helps people build better habits before overspending happens.
Built With
- alembic
- and
- css
- fastapi
- html
- javascript
- npm
- plaid-api
- postgresql
- python
- react
- sqlalchemy
- supabase
- typescript
- vite
Log in or sign up for Devpost to join the conversation.