Wallet Wise

in-progress

An iteration on an existing group expense consolidator for tracking and settling shared travel expenses. We inherited a codebase without a working database connection, redesigned the PostgreSQL schema in Supabase to match the original team's intentions, and established foundational API routes. Ongoing.

Tech Stack

Node.jsExpressTypeScriptSupabasePostgreSQLReactTailwind
GitHub →

WalletWise is a group expense tracker for shared travel; a tool for splitting costs, tracking who paid what, and settling balances across multiple users on a shared trip.

The Context

We inherited this project from a previous team, who had done substantial planning work: a detailed Figma mockup, a clear product vision, and a React frontend structure with Tailwind styling. The components were mostly static shells not yet connected to data, and no backend existed. Our group built the entire backend from scratch, developed the React components to handle real data and user interaction, and used their Figma designs as our guide throughout.

The Database Problem

The original schema had three tables, Users, Adventures, and Expenses, connected only through a single adventure-id foreign key. There was no way to track which user paid for a given expense, who owed what to whom, or who belonged to which trip. The relationships the app needed simply didn't exist in the data model. I redesigned the schema to support the actual use case. The revised ERD introduced an adventure_members junction table to handle the many-to-many relationship between users and adventures. A user can belong to many trips, and a trip has many members. Expenses were linked to both an adventure and a payer, making it possible to calculate balances across the group.

What We Built

With a working database in place, we established the core API layer using an Express backend with a controller pattern to separate business logic from routing. We implemented endpoints for fetching adventures and creating new ones, with additional endpoints for expenses and balances in progress. On the frontend, all group trips display on the main page with member count and total spending. Clicking a trip expands to show description, member names, and travel dates. A Create Adventure flow accepts input and writes successfully to the database.

What I Learned

Reading someone else's codebase is a different skill than writing your own. Understanding another team's intentions, working within their structure, and building on it rather than starting over taught me things about code clarity and intentional planning that I've carried into every project since. It also showed me where I need to grow. SQL and relational data modeling remain areas I'm actively working to strengthen.

What's Next

Completing the expense and balance endpoints, wiring up the full Create Adventure frontend, and adding authentication so trips and expenses belong to real users.