Inspiration
We wanted to solve the “where should we eat?” problem in a way that felt social and personal. Too many apps show generic lists; we wanted recommendations that understood who you’re with and what you all like. That led to two core ideas: an AI chat that suggests places using your location and preferences, and a social taste graph that visualizes how you and your friends overlap in food preferences—so picking a spot for the group actually feels informed.
What it does
- AI restaurant chat: Users ask in natural language (e.g. “Good sushi near me” or “Date night for two”) and get conversational recommendations powered by Gemini, with optional location and friend context.
- Restaurant search: Search is backed by Google Places (text search, photos, ratings) and results are stored in Supabase for the app and social features.
- Social taste graph: A dedicated Network tab shows an interactive graph of you and your friends. Edges show similarity scores and reasons (e.g. shared cuisines, shared restaurants), so you can see why you’re taste-aligned.
- Friends & profiles: Add friends, view their profiles, and manage your own—including profile photo uploads to Supabase Storage and a bio.
- Reviews: Users can leave reviews on restaurants; the backend and Supabase store and serve them.
- Maps: Restaurant results can be viewed on a map for quick discovery.
How we built it
- Mobile (Expo + React Native + TypeScript): Cross-platform app with tabs: Home (AI chat), Search, Network (social graph), Map, Friends, and Profile. Auth via Supabase (Google sign-in). The app calls our FastAPI backend for all protected or API-key-dependent features.
- Backend (FastAPI + Python): Handles JWT verification, serves the social graph (
/api/network/graph), runs the Gemini recommendation chat with optional @mentions for group preferences, and proxies Google Places for search and photos. Uses Supabase for profiles, friends, restaurants, reviews, and profile image storage. - Social graph: Similarity is computed from stored preferences (cuisine weights, taste profile) and restaurant visit data, then exposed via API; the frontend renders an interactive graph with edge tooltips (score + reason).
- Deployment: Backend on Render; mobile runs in Expo Go or simulators, pointing at the deployed API. Supabase is the single source of truth for auth and data.
Challenges we ran into
- Security: Keeping API keys and tokens server-side only. The mobile app only gets the Supabase anon key and backend URL; every protected route verifies JWTs. Getting this right took careful wiring between Supabase auth and our FastAPI middleware.
- Social graph design: Deciding what to store (preferences, friends, visits) and how to compute similarity so the graph felt meaningful without over-engineering in a short timeline.
- Group-aware AI: Supporting @mentions in the chat so Gemini could reason about “me + my friends” meant resolving display names to profile data and injecting that context into the prompt in a clear, reliable way.
- Judge-friendly setup: Enabling others to run or review the app without committing secrets. We documented only the public env vars and kept backend secrets in Render; judges can review code and, with the shared frontend config, run the app locally.
Accomplishments that we're proud of
- Shipping a full-stack app in a hackathon: mobile UI, backend API, social graph, AI chat, search, reviews, and maps.
- Building the social taste graph as a first-class feature—both the data model and the interactive visualization—so “who do I eat like?” is visible at a glance.
- Making recommendations group-aware with @mentions so the AI can suggest places that work for everyone in the conversation.
- Deploying the backend to Render and documenting the repo so judges can understand and (with env config) run the project without ever touching our secrets.
What we learned
- How to tie together multiple APIs (Supabase, Google Places, Gemini) behind one backend so the client stays simple and keys stay server-side.
- How to design and expose a “social graph” feature—from profiles and preferences to similarity scoring and an API that the frontend can render clearly.
- Practical auth and deployment: JWT verification on FastAPI, env handling for Expo, and keeping the repo safe for public submission while still runnable by judges.
What's next for Taste Buds
- Richer graph: Use more signals (reviews, ratings, check-ins) to improve similarity and add filters (e.g. “friends who love brunch”).
- Push & notifications: Remind users when friends add reviews or when a highly matched friend tries a new place.
- Discovery feed: A feed of “friends’ recent finds” and “trending near you” to reduce decision fatigue.
- Native builds: EAS Build for TestFlight/Play Store so users don’t need Expo Go, plus deeper integration (e.g. share sheets, widgets).
- Offline & performance: Cache graph and recent recommendations, and optimize cold starts on the free tier.
Built With
- expogo
- fastapi
- python
- reactnative
- render
- typescript
- uvicorn
Log in or sign up for Devpost to join the conversation.