01 / 04 · System overview
Employer platform · May 2020–Present
CraveUp - Restaurant Ordering & Management Platform
A multi-surface restaurant commerce platform built at Crave - customer web ordering, a merchant business-manager dashboard, a React Native order-manager app, and shared Node.js services for orders, menus, payments, and live staff updates.
01 Scope
The product context behind the work.
Problem
Restaurant ordering is not one screen. Customers need a reliable web ordering flow, owners need a dashboard for menus, locations, discounts, customers, and orders, and in-store staff need a fast order-manager app that reflects the same order and menu state in real time.
My contribution
- Built customer web ordering flows across menu browsing, cart, checkout, fulfillment selection, discounts, tips, fees, and Stripe-backed payment methods.
- Built merchant business-manager surfaces for dashboard analytics, order management, customers, discounts, locations, team/API keys, menu operations, item availability, store hours, fulfillment settings, and Stripe account/subscription flows.
- Built React Native order-manager workflows for active and scheduled orders, live Socket.IO updates, order state actions, item availability, pause/resume behavior, and receipt printing.
- Worked across shared Express/MongoDB services so the web ordering app, dashboard, and in-store app stayed aligned around orders, menus, locations, payments, and provider events.
Selected production stories
Story 01 · Mobile operations
Implementation and deployment confirmed
Built a production printer workflow for in-store order management
- Problem
- Restaurant staff needed an order-manager release that could discover, connect, disconnect, persist, and print through two widely used receipt-printer families.
- My contribution
- I built the React Native printer-management flow, native and platform wiring, persistent printer state, receipt printing, the official-SDK migration, connection repairs, and server-side printer-setting and error reporting.
- Verified result
- The feature set was pushed to production and the team prepared the location for go-live.
- Proof boundary
- External merchant acceptance was not recovered, and I do not claim sole ownership of the full order-manager product.
Story 02 · Production debugging
Confirmed delivery
Fixed timezone validation that was rejecting valid scheduled orders
- Problem
- Valid orders were rejected because fulfillment validation compared the schedule against server time instead of the restaurant location's timezone.
- My contribution
- I diagnosed the timezone mismatch, implemented location-aware schedule comparison, tested and merged it, then refined interval date binding and the customer-facing error.
- Verified result
- The fix reached the main production branch and the customer was notified.
- Proof boundary
- No independent measurement of customer recovery was retained.
Story 03 · Production incident
Confirmed production fix
Restored launch-day order visibility in the merchant dashboard
- Problem
- During a new-store launch, incoming orders were missing from the merchant dashboard because order and analytics date filters used the wrong timezone.
- My contribution
- I corrected the date parsing in the order-list and analytics paths, merged the production fix, and reported completion.
- Verified result
- The fix was deployed during the launch incident and acknowledged by the stakeholder.
- Proof boundary
- No separate customer screenshot or runtime trace was retained.
02 Approach
Important engineering decisions.
CraveUp is a restaurant ordering and management platform built at Crave. It spans customer web ordering, a merchant business-manager dashboard, a React Native order-manager app, and shared Node.js services for orders, menus, payments, live updates, and provider events.
On the customer side, the web ordering flow covers menu browsing, cart, fulfillment selection, checkout, payment methods, discounts, tips, fees, and order creation. The flow supports several restaurant fulfillment patterns, including takeout, delivery, table-side, room service, ASAP orders, and scheduled orders.
On the merchant side, the business manager gives operators the surfaces needed to run the store: dashboard analytics, order list/detail/export, customer views, discounts, locations, team/API-key access, menu operations, item availability, store hours, fulfillment settings, and Stripe account/subscription flows.
For in-store staff, the React Native order-manager app handles the operational loop: active orders, scheduled orders, order history, live Socket.IO order updates, confirm/ready/complete/cancel/refund paths, item availability, order pause/resume behavior, and receipt printing through supported printer integrations.
Underneath, the platform is held together by shared Express/MongoDB services: public ordering APIs, admin APIs, order lifecycle routes, receipt image generation, Socket.IO merchant/location rooms, Stripe payment and account surfaces, and generic provider/webhook integrations. The proof focus is the system breadth: one commerce platform across customer, merchant, staff, and backend surfaces.
03 Evidence
Evidence chapters.
02 / 04 · Product journey
Order lifecycle across three audiences
03 / 04 · System boundary
One menu and order contract across three surfaces
04 / 04 · Delivery / verification
Hands-on contribution scope
04 Delivered & verified
What the public proof supports.
Delivered scope
Customer side
Web ordering from menu discovery through cart, fulfillment selection, checkout, payment, and order creation
Merchant side
Dashboard surfaces for orders, analytics, customers, discounts, menu operations, locations, fulfillment settings, and team/API access
Staff side
React Native order manager for live order events, status transitions, item availability, pause/resume behavior, refunds/cancellations, and receipt printing
Stack
Reflections
- The hard part was consistency: menus, prices, fulfillment rules, payment state, and order state had to read correctly across customer web, the merchant dashboard, and the in-store app.
- Each surface served a different user - customer, owner/operator, and staff - but all three depended on the same order and menu contracts.
Next step
Have a similar project?
If this looks close to the product work you need, book a short call and I will help scope the next step clearly.