Project 01 of 06 / Hospitality software

CentralPass

Proprietary software I built so a venue can take its own orders instead of handing them, and a cut of every sale, to Uber Eats. I co-founded the company and wrote the platform: ordering, payments, a live staff queue, an owner portal, customer records and receipt printing. It took several months and it is live at Caffe Primo Firle.

Role
Co-founder, wrote the software
Build time
Several months, alongside a full time degree
Delivery
Isolated deployment per venue
Status
First venue live in production

The problem

Marketplace apps own the customer, the data and a slice of every order.

A cafe on Uber Eats gets orders, but it also gets a commission taken off each one, a customer it never learns the name of, and a menu it does not fully control. CentralPass exists to give the venue those three things back. Each venue gets a website under its own brand and domain, payments into its own Stripe account and its own customer records, while the operational core underneath (API, owner portal, staff dashboard, printer bridge) is the product I built and reuse.

Customer journey
Website, menu, ordering, checkout and bookings
Operations
Live order queue, status flow and availability
Administration
Menus, hours, offers, customers and reporting
Venue boundary
Separate deployment, database and configuration

Live deployment

Caffe Primo Firle is the first production proof.

These interfaces are from the CentralPass deployment built for Caffe Primo Firle. Customer and order identifying information was excluded from the images on purpose.

The Caffe Primo Firle customer ordering website, the first live venue deployment of CentralPass.
Bespoke customer siteVenue branded menu discovery, pickup ordering, checkout and bookings.
The CentralPass staff dashboard item availability screen for Caffe Primo Firle.
Staff dashboardTablet-first live orders and availability controls for service.
The CentralPass owner portal menu management screen for Caffe Primo Firle.
Owner portalMenu, hours, offers, customer and operational controls.

Built by hand

What several months of building actually consisted of.

None of this is a template, a no-code tool or a wrapper around someone else's ordering product. Each piece below is a system I designed, wrote, tested against a real service and deployed, and each one had to keep working when the piece next to it changed.

  1. The storefront. A React and Vite site per venue, with menu browsing, modifiers, pickup ordering, checkout and bookings, built to the venue's brand rather than to a CentralPass look.
  2. The API and data model. Node and Express on PostgreSQL: menus, modifiers, orders, customers, offers, opening hours, venue settings and role based access, with schema migrations that run before every deploy.
  3. Payments. Stripe checkout with the payment confirmed server side by webhook before an order is allowed into the staff queue. The browser is never trusted to say that money arrived.
  4. The staff queue. A tablet first dashboard, packaged with Capacitor, that receives new orders over Socket.io, moves them through preparation and marks items sold out for every other screen in real time.
  5. The printer bridge. A small Node service that lives beside the thermal receipt printer at the counter, takes jobs from the hosted API and prints them, so a cloud outage or a flaky cafe network degrades gracefully instead of silently losing tickets.
  6. The owner portal. Menus, hours, offers, customer records, reporting and time clock workflows, so the owner can run the venue without calling me.
  7. Per venue infrastructure. Each venue gets its own Railway project, database, R2 storage and configuration. Onboarding a new venue is a repeatable deployment, not a fork.

How the pieces connect.

  1. Venue storefrontReact and Vite experience adapted to each brand and customer journey.
  2. Platform APINode, Express, role-based access, business rules, webhooks and Socket.io events.
  3. PostgreSQLMenus, modifiers, orders, customers, offers, hours and venue settings.
  4. OperationsStaff queue, owner administration and the local receipt-printer bridge.

Engineering decisions

Decisions made for a busy service, not for a demo.

  1. Use real-time events where latency matters. Socket.io pushes new orders, status changes and sold-out updates across customer, staff and owner interfaces.
  2. Keep uploads off ephemeral compute. Menu images stream to Cloudflare R2 instead of living on a Railway container that can be replaced.
  3. Migrate before every deploy. The production start path fails fast if the PostgreSQL schema cannot be updated safely.
  4. Protect venue ownership. Each client retains its domain and Stripe account, while credentials remain outside public front ends and source control.

Current scope

CentralPass is built and operating at its first venue. It covers direct ordering and payments, live staff order management, owner controls, customer and offer workflows, straightforward bookings, basic time clock workflows and receipt printing. It replaces the ordering and customer side of a marketplace app. It is not presented here as a full POS, payroll, advanced rostering or delivery logistics replacement.

Stack and links

Web, cloud, data and hardware in one product.

Frontend
React, Vite, Zustand, Capacitor
Backend
Node.js, Express, Socket.io
Data and payments
PostgreSQL, Stripe
Infrastructure
Railway, Cloudflare R2

Public links

CentralPass
Product and venue-partnership website.

First live venue

Caffe Primo Firle
The first venue deployment of the CentralPass platform.

No credentials or internal administration links appear in this public case study.