Skip to content
Selected work

Senior Full-Stack Engineer at Crave · 2021 - 2024

Employer platform · Crave

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.

CraveUp restaurant ordering and management platform architecture
CraveUp restaurant ordering and management platform architectureOpen largerimage opens in a new tab

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 role

  • 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.

02 Approach

How the work was shaped.

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.

Gallery

Architecture and flow.

CraveUp order lifecycle
Order lifecycle from web checkout into staff operations, receipt printing, dashboard reporting, and provider hooks.Open largerimage opens in a new tab

03 Outcome

What the work made clearer.

Qualitative outcomes

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

Next.jsReactReact NativeTypeScriptNode.jsExpressMongoDBSocket.IOStripe

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, use the contact path and I will help scope the next step clearly.

Book a call