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.

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
Product screens

The order feed and the order card on one screen. The status can be changed by hand — for instance when the order is already in the POS and shouldn’t be sent again.

The incoming-calls widget in the order editor: the operator accepts a call and the guest’s phone drops straight into the form.

The Guest step: the profile loads by phone number with the loyalty level, the guest note and saved addresses; the restaurant, delivery time and cost are derived from the address.

The dish card: cooking options, modifiers, nutrition facts and the restaurant’s stock. Several items can be added in a row without closing the window.

The restaurant menu for operators — a table with stock, weight, price and SKU. Stop-listed dishes are highlighted; the cart with the order note sits on the right.

Checkout: payment method, a loyalty points hold, paid cutlery, “leave at the door” and a manual delivery price.

Operator and chef reports for a date range: type-aware column sorting and Excel export.
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.