Customer Queuing System
A Redis-backed asynchronous processing layer at Caisse Manager that takes an order from intake through background workers, emitting the status events that downstream services — including the Kitchen Display System — consume in real time.
Role
Full-Stack Developer, Caisse Manager — order queue processing
Context
Part of the same Caisse Manager restaurant platform as the POS system above: before an order reaches the kitchen display, it passes through a queue-based processing layer that takes it from the POS/backend, runs it through background workers, and emits the status events that downstream services — including the Kitchen Display System — consume.
System
Orders are pushed onto a Redis-backed Bull queue as they're placed. Workers process each job — validating it and moving it through its status transitions — off the request path, then emit the resulting state as a real-time event that the Kitchen Display System and other connected services pick up.
Problem
Order intake needed to stay fast and responsive even when downstream processing — validation, status transitions, notifying every connected service — took longer than a single request should block for, without losing or duplicating orders under load.
Engineering challenge
Keeping order-status transitions consistent for every consumer (the kitchen display and other connected services) when the processing itself happens asynchronously, off the request path — a job that runs twice, or an event that arrives out of order, shows up as a real operational problem in a restaurant, not just a log line.
My contribution
- Worked on the Redis-backed Bull queue and worker layer that processes orders after intake from the POS/backend.
- Implemented order-status transitions as queued jobs, and the real-time events that notify downstream services — including the Kitchen Display System — of each change.
- Investigated and fixed reliability issues in queue and worker processing under load.
Technical decisions
- Processed order-status changes as background jobs rather than inline in the request path, so intake stayed fast regardless of downstream processing time.
- Used a single real-time event layer so every downstream consumer — the kitchen display included — reacts to the same state change, rather than each service polling for updates independently.
Technology
- Node.js
- The order-intake and status-processing service.
- Redis
- Backing store for the Bull queue.
- Bull
- Background workers that process order-status transitions off the request path.
- Socket.IO
- Broadcasts order-status events to downstream services in real time.
- Docker
- Containerized deployment, consistent with the rest of the Caisse Manager stack.
Result
A queue-based processing layer that decouples order intake from downstream status handling, feeding the Kitchen Display System and other connected services consistently.
What I learned
Decoupling intake from processing is what makes a system like this resilient — the queue is what keeps a slow downstream consumer from becoming the restaurant's bottleneck.