UniWallet

AI-powered financial assistant for university students

Hack To The Future | Mannix Graham & Ryan Gaw


Inspiration

We're second-year CS students. Between tuition, rent, groceries, and the occasional $200 textbook nobody warned us about, money is a constant background stressor. We tried budgeting apps. They were built for people with stable salaries, investment portfolios, and the patience to manually tag every coffee purchase.

Nothing was built for us: students with irregular paycheques, no financial background, and exactly zero time to become spreadsheet experts.

So we asked ourselves: what if instead of learning a new app, you could just ask a question? What if managing your money felt less like accounting homework and more like texting a financially literate friend?

That's UniWallet. Not another dashboard. A conversation.


What It Does

UniWallet is a full-stack AI financial assistant designed around the reality of student budgets. You log your transactions, set loose spending categories, and then just talk to it.

  • AI chat interface: Ask things like "Am I going to make rent this month?" or "Where did most of my money go last week?" and get answers grounded in your actual data, not generic tips
  • Expense tracking: Log transactions across student-relevant categories: tuition, food, transit, subscriptions, textbooks, going out
  • Budget insights: Personalized breakdowns showing where you're over, where you're fine, and where you should probably stop ordering delivery
  • Student-first UX: No investment jargon, no net worth tracking, no intimidating charts. Just clarity

The key differentiator is that the AI isn't bolted on. It's the product. Every number in the app exists to make the conversation smarter.


How We Built It

UniWallet is a full-stack web app split cleanly between a Node/Express backend and a Next.js frontend.

Backend: Node.js + Express + Prisma ORM connected to a Supabase PostgreSQL database. The AI layer calls the OpenAI API with structured financial context injected per user (their transaction history, budget limits, and spending categories) so the model always answers from real data.

Frontend: Next.js 15, Tailwind CSS v4, and shadcn/ui, with Supabase handling auth and real-time data sync.

Client (Next.js + shadcn/ui)
        │
        ▼
REST API (Express + Prisma)  ──▶  OpenAI API
        │
   Supabase (PostgreSQL)

The core insight behind the AI integration: the model's response quality is entirely dependent on what context it receives. We engineered the prompt layer so that every query is answered against a structured snapshot of the user's finances:

$$ \text{Response} = f!\left(\text{query},\ \sum_{i=1}^{n} t_i,\ \vec{b}_{\,\text{categories}}\right) $$

Where \( t_i \) is each logged transaction and \( \vec{b} \) is the user's budget vector. The function \( f \) (the language model) is conditioned on both, so it can answer "am I overspending on food?" with an actual dollar figure, not a guess.


Challenges We Ran Into

Getting the AI to stop making things up. Out of the box, a language model will confidently answer a financial question with invented numbers. We had to build a strict context-injection pipeline so the model is always anchored to real user data. Any ambiguity in the prompt structure surfaced immediately as hallucinated transactions.

Replacing mock data with live API endpoints mid-hackathon. We started with localStorage placeholders to move fast on the UI. Ripping those out and wiring real Supabase queries through authenticated Next.js server components, while keeping the UI reactive, cost us more time than we expected. Auth state across client and server is genuinely tricky in the Next.js App Router.

Scope discipline. We had a whiteboard full of features: Plaid bank sync, recurring transaction detection, predictive budgeting, academic calendar integration. Every one of them was cut. The real challenge wasn't building; it was deciding what to not build so the core experience was actually good.

Designing for people with no money. This sounds obvious, but it shaped every product decision. A finance app for students has to feel low-stakes and approachable. The moment the UI feels like a Bloomberg terminal, you've lost your user.


Accomplishments That We're Proud Of

We shipped a working end-to-end product: real auth, real database, real AI responses grounded in real user data. That full loop (log a transaction, ask the AI about it, get a meaningful answer) works. During demos, every single person's reaction was some version of "wait, it actually knows my numbers?" That felt good.

We're also proud of the prompt engineering layer. Getting a general-purpose language model to behave like a financially-aware assistant, consistent and grounded without hallucinating, required real iteration. It's not flashy, but it's the hardest part of the product and it holds up.

And honestly? We're proud we cut scope. Shipping something focused and functional beats shipping something bloated and broken.


What We Learned

Prompt engineering is product design. How you structure context for an LLM directly determines the user experience. It's not a backend detail; it's the core of what makes the product feel smart or frustrating.

The App Router is powerful and unforgiving. Next.js 15 with server components and Supabase auth requires a clear mental model of what runs where. We didn't have that at the start. We do now.

Ship the loop, not the features. One working end-to-end flow (ask a question, get a real answer) is worth more than five half-built features that don't connect. We learned to ask "does this close the loop?" before building anything.

Students are an underserved market. We talked to people during the hackathon. The need is real, consistent, and nobody has actually solved it well.


What's Next for UniWallet

  • Plaid integration: automatic bank and credit card transaction syncing so you never manually log anything
  • Recurring expense detection: surface subscriptions and patterns the user hasn't noticed
  • Academic calendar awareness: flag historically high-spend periods (start of semester, finals week) before they sneak up on you
  • Predictive budgeting: given spending trajectory, project end-of-month balance and surface warnings early
  • Mobile-first redesign: most students will use this on their phone, standing in line at the grocery store

The foundation is solid. The next phase is making it automatic, so financial awareness happens in the background without the user having to think about it.


Built with Node.js · Express · Prisma · Supabase · OpenAI API · Next.js 15 · Tailwind CSS v4 · shadcn/ui

Built With

Share this project:

Updates