All case studies
FrontendFrontend Engineer

Coffeemania: Delivery Hub

The workstation for Coffeemania’s delivery operators: orders from every channel in one real-time feed, an order card that sends to the kitchen and the courier service, phone order intake and reports for the chefs.

Under NDA — happy to walk through the architecture and the code in a call.

Coffeemania: Delivery Hub

Outcome

6
order channels in one feed: website and app, Yandex Eda, Delivery Club, Sber, MirCity and table ordering
115
tracker tasks closed: 76 bugs and 39 improvements requested by operators
15
months as the product’s only frontend engineer — November 2023 to February 2025

The business problem

Delivery orders reach Coffeemania from everywhere: its own website and app, Yandex Eda, Delivery Club, Sber, MirCity, guests ordering at their table and calls to the delivery line. Operators needed one screen instead of the old hub: see new orders across all restaurants at once, spot what is late or unpaid, move each order through its statuses, pass it to the iiko POS and to White Cabs couriers — and take a phone order on the spot without losing the guest on the line. The data changes every minute, so the screen couldn’t rely on manual refresh.

My role

The only frontend engineer on the third version of the hub from November 2023 to February 2025: 326 of 327 frontend commits. A neighbouring team wrote the .NET and SignalR backend; we agreed the event contract together. I built the reports section, the order feed and card, the order editor, guest search and history from scratch, led the spring 2024 redesign and closed 115 tracker tasks — 76 bugs and 39 improvements requested by operators.

The solution

A React, TypeScript and Vite SPA with state in Effector and Patronum. All live data flows through one SignalR connection with automatic reconnect: the client invokes hub methods and server events land straight in Effector events — a new feed page, an updated card, the result of a send to iiko. New orders arrive on their own with a sound alert; REST is left only for auth and reports. The feed has a restaurant filter, tabs for orders, pre-orders and Cake Buro, debounced search, column sorting and pagination; each row flags exceeded cooking time, lateness, scheduled delivery, underpayment and uncalculated delivery. The order card brings together the guest (birthday today or tomorrow, first order or not, the guest note), a copyable address, dishes with modifiers and compliments, payment links and the actions: next status, manual status change without resending to the POS, resend to iiko, assembly receipt, sticker printing and handoff to White Cabs. The order editor is a three-step wizard: an incoming-calls widget fills in the phone and the guest profile with saved addresses; a new address is checked against DaData suggestions and the delivery zone, and the restaurant, delivery cost and time are derived from it, with scheduled slots or the special menu as options. The restaurant menu is a dense table with stock, weight, SKU, stop-list and a search that treats е/ё and и/й as the same letter. Editing an existing order works on a forked draft that merges back on save, and leaving the editor unsaved is intercepted. Operator and chef reports sort by typed columns and export to Excel. Builds run on Docker and GitLab CI with dev, qa and main branches.

Stack

  • React
  • TypeScript
  • Effector
  • Patronum
  • SignalR
  • Vite
  • SCSS Modules
  • DaData
  • ExcelJS
  • Docker