SkipLine
Inspiration
Food insecurity in the Twin Cities is not only a food shortage problem. It is an information and time problem. Many patrons travel long distances, wait in unpredictable lines, and often do not know what food will be available when they arrive. Providers manage inventory manually, while suppliers lack visibility into real demand.
We wanted to build something that treated food access like modern logistics instead of emergency aid. Inspired by platforms like DoorDash and Amazon, we designed SkipLine to coordinate Patrons, Providers, and Suppliers through one shared system.
What It Does
SkipLine is a centralized food access platform that allows:
- Patrons to reserve food ahead of time and skip long lines using QR pickup.
- Providers to manage inventory and prepare orders efficiently.
- Suppliers to monitor shortages and respond to real-time demand signals.
The goal is simple: SkipLine helps working people quickly access food shelves that match their dietary needs while eliminating wait times and uncertainty.
How We Built It
Our system was built using:
- Next.js 15 (App Router)
- TypeScript
- Local JSON database (
foodhub.json) - Serverless-compatible data layer
- QR-based pickup workflow
The architecture connects three roles through a shared inventory system.
Core Architecture
- Providers maintain inventory records.
- Patrons create pickup orders validated against stock levels.
- Orders generate encoded QR data for fast confirmation.
- Pickup confirmation automatically deducts inventory quantities.
All business logic is centralized inside db.ts, ensuring consistent state management across API routes and interfaces :contentReference[oaicite:0]{index=0}.
Key Features
- Real-time inventory visibility
- Reservation-based food pickup
- QR-code express checkout
- Supplier urgency monitoring
- Automated stock prioritization
The supplier dashboard continuously polls inventory data and ranks providers based on urgency levels, allowing faster restocking decisions :contentReference[oaicite:1]{index=1}.
Challenges We Faced
1. State Synchronization Bugs
Because the application relies on a filesystem database locally but switches to in-memory storage in serverless environments, we encountered inconsistent state updates during testing. Orders would appear created but inventory deductions failed due to initialization timing.
Solution:
We enforced initDb() execution at every API request to guarantee store initialization before mutations.
2. Inventory Race Conditions
Multiple simulated users placing orders exposed edge cases where stock validation passed simultaneously for two requests.
Lesson: Even small-scale logistics systems require transactional thinking.
3. QR Pickup Validation
Designing a secure but lightweight QR structure required balancing simplicity and verification. We encoded order ID, provider ID, and timestamps to prevent incorrect confirmations.
4. Scope Control During a Hackathon
Our initial vision expanded quickly into routing optimization, nutrition analytics, and transportation prediction. Time constraints forced us to prioritize a working end-to-end workflow instead of feature breadth.
What We Learned
- Food insecurity is deeply connected to time poverty and logistics inefficiency.
- Operational transparency can be as impactful as increasing supply.
- Building real systems requires solving edge cases, not just designing interfaces.
- Even a prototype benefits from strong data modeling and role separation.
Future Work
Planned extensions include:
- OCR-based inventory check-in automation
- Public transit navigation integration
- Nutrition filtering for dietary needs
- Predictive demand forecasting
Impact
SkipLine reframes food access as an information coordination problem. By allowing patrons to reserve food, providers to prepare efficiently, and suppliers to respond intelligently, the platform reduces friction across the entire food distribution network.
Instead of waiting in line, users simply SkipLine.
Built With
- api
- code
- css
- datastore
- json
- local
- next.js
- node.js
- qr
- react
- rest
- tailwind
- typescript
Log in or sign up for Devpost to join the conversation.