Inspiration

As students ourselves, we understand the importance of understanding your finances, but also how intimidating that process can be. Especially when it comes to having subscriptions where companies quietly increase their subscription prices, those can be hard to track, and every dollar counts for people who may be struggling.

What it does

That's why we created SpendSense, a personal finance learning and planning app that turns transaction history into spending insights, subscription price alerts, savings goals, and conversations with an AI financial coach. SpendSense also displays the current month's recorded spending as a total, a doughnut chart, category totals, and percentages. The user can create an account, see any updates to their savings goals, and create more savings goals with a name, target amount, amount already saved, and deadline. (or have the AI agent do that through a simple chat request). Cards show progress, remaining balance, deadline, and an estimated savings pace. Goals less than 30 days away use a weekly pace and daily estimate; longer deadlines use a monthly pace. Completed, overdue, and due-today goals have distinct messages.

How we built it

  • Architecture & Frontend: We built the user interface with Next.js, React, TypeScript, and Tailwind CSS, featuring interactive category doughnut charts rendered with Recharts. To keep user credentials and session tokens safe, frontend requests route through a Next.js server proxy that validates origins and attaches internal authentication secrets before communicating with our backend.
  • Backend API: Our API is powered by FastAPI in Python, handling route protection, data validation via Pydantic, financial calculations, and secure proxy verification.
  • Data Pipeline & Sandbox Banking: We integrated Capital One's Nessie REST API to provision sandbox customers, checking accounts, merchants (like StreamFlix and MusicPlus), and recurring purchase records. We built backend ingestion scripts to normalize this transaction stream and prevent duplicate records.
  • Time-Series Storage & Analytics: We used Tiger Data (PostgreSQL) as our primary database and configured TimescaleDB to manage transactions inside a dedicated timestamped hypertable. Our backend analytics engine uses raw SQL heuristics to detect recurring charges by grouping merchant charges that occur within 25-35-day intervals, flagging price hikes, and projecting 12-month compounding costs.
  • Conversational AI Coach: We integrated Backboard to power our AI financial assistant with automatic cross-thread memory. Rather than trusting client-side state, our FastAPI server injects authoritative real-time context (active goals, current spending, and detected subscriptions) on every query. If a user asks to save for something, the coach outputs structured JSON that our backend validates and automatically writes as a new goal in the database.
  • Authentication & Security: We implemented password hashing and an isolated authentication database separated from financial ledger tables.

Challenges we ran into

  • API and Ingestion Nuances: Working with Capital One's Nessie sandbox required handling custom endpoints and data formatting with FastAPI, and also establishing our database connection with TigerData. We faced a ModuleNotFoundError with psycopg in our database.py file, which required debugging.
  • Grounding AI Context: Ensuring the Backboard AI coach stayed accurate was a delicate balancing act. We discovered a bug where the LLM's number for the savings goal was based on the agent doing its own calculations. We were calculating this number a different way in our synthetic data mockup; the way we solved it was actually passing our data to the agent.
  • Saving Goals and Unique IDs: With our schema in SQL, we had to figure out whether we would be able to implement a user having multiple savings goals. In order to do this, our SQL schema for the savings goals would not only have the user_id, but also a unique ID per goal. This required us to debug and change our functions in our goal_routes.py file.

Accomplishments that we're proud of

  • Fine-tuning our Agent: Our agent can give clear and detailed answers to a user prompt. Even when we were testing and using large numbers that aren't rational, it was clever and had the ability to recognize whether the user's goals were intentional or not. Also, having our agent create savings goals for the users itself was something we were proud of, as it could read the JSON structure response format we created for creating a goal, parse through it, and then return it as a full savings goal object on the frontend.
  • Deploying to Vercel: We wanted to make sure that the project was end-to-end and could be hosted rather than just through localhost!
  • A structured schema for our database: The database with TigerData has a very reliable TimescaleDB hypertable setup.

What we learned

  • Frontend/Backend Integration: Often in creating an application, integrating the frontend and backend can be the toughest part. We made sure at the start that we could work on separate tasks, then integrate seamlessly toward the end when reviewing shared API endpoints or building the dashboard. Saanvi created synthetic data through Nessie, set up a database with TigerData, and retrieved analytics such as subscription detection, goal listing, etc. Saloni built the frontend dashboard using Next.js and React, including spending visualizations, subscription tracking, savings goal management, and an AI-powered financial assistant. We connected the frontend to the FastAPI backend through shared API endpoints, which allowed the dashboard to display real-time financial analytics from TigerData rather than relying on hardcoded data. We also integrated Backboard AI with the backend, which allowed us to pass in users' spending, subscriptions, and savings goals as context so the assistant could generate personalized financial recommendations. By agreeing on shared data structures and API endpoints early on, we were able to develop our components independently and bring everything together with relatively few integration issues.

What's next for SpeedSense

It would be great to have an official domain for SpeedSense, and also potentially make this a social app to compare your spending habits with your friends or peers. By introducing features like anonymous spending comparisons, shared savings challenges, and personalized financial insights, we hope to make managing money feel less intimidating and more engaging. This would provide another educational way to compare with the people around you!

Built With

Share this project:

Updates

Submission history