SeatBite
Inspiration
Stadium food has always been a frustrating experience. Long lines, missed plays, and cold food by the time you get back to your seat. We wanted to solve this by bringing the food to the fan — not the other way around. Inspired by apps like DoorDash, we asked ourselves: why can't stadium food delivery work the same way? SeatBite was born from that idea — a seamless, real-time food ordering and delivery system built specifically for stadiums.
What it does
SeatBite is a full-stack stadium food delivery app with two distinct interfaces:
- Customer Interface (Mobile): Fans browse a menu, add items to their cart, enter their seat number, and place an order — all from their phone without leaving their seat.
- Delivery Interface (Desktop): Stadium staff see incoming orders in real time, view the full order details including seat location, and mark orders as complete when delivered.
The app supports user authentication, real-time order tracking, cart management with quantity controls, and automatic order removal from the delivery dashboard once completed.
How we built it
SeatBite was built using a modern JavaScript stack optimized for rapid development:
- Frontend: React + Vite for fast development and hot reloading
- Styling: Inline styles with a consistent dark navy and gold design system
- Routing: React Router for seamless navigation between pages
- Backend & Database: Firebase Firestore for real-time data storage and retrieval
- Authentication: Firebase Auth with Email/Password sign-in
- State Management: React useState and useContext for cart and user type state
- Hosting: Firebase Hosting for instant deployment
We split the team across three parallel workstreams — Customer UI, Delivery UI, and Firebase backend — and integrated everything in the final hours of the hackathon.
Challenges we ran into
- Firestore inconsistencies: Some menu documents had field names with trailing spaces (e.g.,
ProteinvsProtein), causing data to silently fail to render. We added fallback logic to handle both cases. - Image handling: We discovered that Firebase Firestore cannot store JavaScript image objects, so we built a local
imageMapthat maps item names to imported assets across both the customer and delivery interfaces. - Scroll behavior: CSS conflicts between
overflow: hiddenon the body and our page containers caused scrolling issues that took significant debugging to resolve. - ArrayUnion limitations: Firebase's
arrayUnionprevents duplicate objects, which broke our quantity increment logic. We switched to spreading the array manually to allow proper quantity tracking. - Role-based routing: Managing two completely different UIs (mobile customer vs desktop delivery) within a single React app required careful use of React Context to persist the user type across navigation.
Accomplishments that we're proud of
- Built a fully functional end-to-end ordering system in under 30 hours
- Real-time order delivery dashboard that updates as customers place orders
- Clean, polished mobile UI that feels like a native app
- Role-based experience — the same login flow routes customers and delivery staff to completely different interfaces
- Firestore cart system that persists across sessions and syncs instantly
- Order completion flow that deletes the Firestore document and removes the order from the delivery dashboard in real time
What we learned
- How to structure a Firebase Firestore schema for a real-time ordering system
- How to use React Context to share state across deeply nested components
- The importance of consistent field naming in NoSQL databases
- How to build two completely different UI experiences (mobile and desktop) within a single React codebase
- How to debug data issues by logging raw Firestore responses to the console
- How to manage a team under time pressure by splitting work into parallel tracks with clear ownership
What's next for SeatBite
- Stripe Payment Integration: Full payment processing before order confirmation
- Real-time order status: Live status updates pushed to the customer (Preparing → On the way → Delivered)
- Pathfinding map: An interactive stadium map with Dijkstra's algorithm to show the delivery person the shortest path to the customer's seat
- Push notifications: Notify customers when their order is picked up and on the way
- Seat QR codes: Customers scan a QR code at their seat to auto-fill their seat number
- Analytics dashboard: Track popular items, peak ordering times, and delivery performance
- Multi-stadium support: Expand beyond a single stadium with configurable menus and layouts per venue
Log in or sign up for Devpost to join the conversation.