College students are constantly helping each other out. One person understands calculus, another can design a logo, someone else knows how to do nails, and someone has a car for an airport ride. The problem is that these skills are scattered across group chats, friend groups, and random conversations. We built Barter Buddies to turn that informal exchange into a community. Instead of paying money, UTSA students can trade what they know and what they can do. We also wanted the experience to feel different from a normal marketplace. Since every exchange feels a little like putting together a deal, we designed Barter Buddies around a heist-planning-room theme: students discover opportunities on The Board, find compatible trades, organize The Job, and track exchanges in The Ledger. What it does Barter Buddies is a UTSA-only skill-trading platform where students offer a skill or service and say what they want in return. A student might offer calculus tutoring and look for a gel manicure, trade graphic design for a ride to the airport, or exchange programming help for photography. Our matching system looks at what each student offers and wants. It prioritizes two-way matches where both students can directly help each other, while still allowing useful one-way opportunities to appear. Once students find a trade, they can propose an exchange, agree on the details, and track the exchange through its lifecycle until both sides confirm that it is complete. How we built it We built the frontend with React, TypeScript, Vite, Tailwind CSS, and Framer Motion, with a visual design inspired by investigation boards, dossiers, paper documents, and heist planning rooms. Our backend uses Python, FastAPI, and raw PostgreSQL with psycopg3. We intentionally kept the backend lightweight rather than using an ORM. Supabase provides PostgreSQL, authentication, and our data layer. Access is restricted to UTSA email addresses, keeping the platform focused on the campus community. The matching system compares each user's wants and offers. Matching skills increase the score, with a large bonus when the exchange works in both directions. We also built the exchange process as a state machine so trades move through controlled states rather than allowing arbitrary status changes. The frontend and backend are deployed separately, with the API hosted on Railway and the web application designed for deployment through Vercel. Challenges we ran into Our biggest challenge was integration. Different team members owned authentication, database schema, backend logic, and frontend screens, so pieces that worked independently still had to agree on the exact same API and database contract. Authentication was especially tricky. The browser authenticates directly with Supabase, but requests to our FastAPI backend still need the user's Supabase access token. We had to make sure our shared API layer automatically attached that token to every protected request. We also ran into the kinds of problems that only appear when separate systems finally meet: CORS configuration, environment variables that don't travel through Git, database permissions, file-name casing differences between macOS/Windows and Linux deployments, and keeping the frontend synchronized with a changing backend schema. Working under a hackathon deadline forced us to aggressively prioritize the core experience instead of continuing to add features. What we learned The biggest lesson was that integration is a feature. Having several individually working components means very little until a real user can move through the entire system. We learned how to coordinate a React frontend, authenticated FastAPI API, and Supabase database; how JWT-based authentication travels between those systems; and why clear API contracts become extremely important when multiple people are building different parts of the same application. We also learned a lot about designing for a theme without sacrificing usability. We kept thematic names such as The Board, The Job, and The Ledger, while leaving ordinary actions such as Sign in and Messages straightforward.

Share this project:

Updates

Submission history