Pricer EVO Platform Documentation¶
The Pricer EVO platform keeps the correct image on every Electronic Shelf Label (ESL) in a store. When a product price changes, a promotions campaign activates, or a new ESL is installed, the platform evaluates which design to render, generates the image, and pushes it to the physical hardware — all driven by data flowing through a shared DTO infrastructure rather than direct service-to-service calls.
How to use this documentation¶
- New to the system? Start with Architecture
- Looking for a specific DTO? See DTO Reference
- Understanding a service? See Services
- Following a data flow? See Flows
- Understanding platform infrastructure? See Platform
- Architecture decisions? See Decisions
Quick-find table¶
| Topic | Type | File | One-line description |
|---|---|---|---|
| System architecture | Overview | architecture.md | Two-layer model: functional services on top, DTOflow platform below |
| Platform overview | Overview | platform/overview.md | DTOflow server, CQS, and LFS — the shared data infrastructure |
| DTOflow server | Platform component | platform/dtoflow-server.md | DTO store with reader/writer/history gRPC services |
| Change Queue Service | Platform component | platform/cqs.md | Long-polling change notification stream for DTO subscriptions |
| Large File System | Platform component | platform/lfs.md | Binary asset storage (images, fonts) referenced by DTOs |
| DTO catalog | Reference | dtos/index.md | Full list of all ~30 DTOs with ID patterns and owners |
| Store / ESL DTOs | Reference | dtos/store-esl.md | store, storeesl, storeeslstatus, esltype, esldriver, storeeslposition |
| Link DTOs | Reference | dtos/links.md | link.v2 (current), link.v1 (deprecated), ecclink, studiolink, designerlink |
| Design DTOs | Reference | dtos/design.md | design, canvasdesign, canvastype, designimage, font, eccfont, palette |
| Image DTOs | Reference | dtos/images.md | eslimage, studioeslimage, ecceslimage, eccimage, renderedimage (deprecated) |
| Item DTOs | Reference | dtos/items.md | itemproperties, storeitemvalues, itemprocessingparameters |
| ECC DTOs | Reference | dtos/ecc.md | eccmodel, eccparameters, ecclink, eccfont |
| Task / pack DTOs | Reference | dtos/tasks.md | taskdefinition, communicationpack |
| Services catalog | Reference | services/index.md | All functional microservices with responsibilities and DTO ownership |
| link-registry | Service | services/link-registry.md | Manages storeesl, link, storeeslstatus |
| studio-renderer | Service | services/studio-renderer.md | Renders studioeslimage from studiolink + design |
| studio-link-evaluator | Service | services/studio-link-evaluator.md | Evaluates CEL expressions to produce studiolink |
| studio-design-library | Service | services/studio-design-library.md | Manages designs, fonts, palettes |
| studio-scenario-library | Service | services/studio-scenario-library.md | Manages communicationpacks and scenarios |
| item-registry | Service | services/item-registry.md | Manages storeitemvalues, itemproperties, itemprocessingparameters |
| pricer-server | Service | services/pricer-server.md | On-premise gateway; consumes eslimage from CQS and pushes to physical ESL hardware |
| eslimage-merger | Service | services/eslimage-merger.md | Merges studioeslimage + ecceslimage into the final eslimage |
| ecc-image-render-service | Service | services/ecc-image-render-service.md | Renders ecceslimage from ecclink |
| ecclink-projector | Service | services/ecclink-projector.md | Projects link.v2 variants to ecclink |
| Image rendering flow | Flow | flows/image-rendering.md | End-to-end: link change → image on ESL |
| Link lifecycle flow | Flow | flows/link-lifecycle.md | Creating and deleting links, storeesl bootstrap |
| ESL onboarding flow | Flow | flows/esl-onboarding.md | Physical ESL registration through to first image |
| Decisions catalog | ADR index | decisions/index.md | List of all architecture decision records |
| Canonical service names | Decision | decisions/PLT-2122-service-names.md | Short Cloud Run names replacing legacy service names (PLT-2122) |
| Link v2 migration | Decision | decisions/PLT-2484-link-v2.md | link.v1 deprecated, link.v2 is current (PLT-2484) |
| Image ownership split | Decision | decisions/PLT-2487-image-split.md | renderedimage superseded by studio/ecc/esl image split (PLT-2487) |
| CQS re-enqueue | Decision | decisions/ADR-009-cqs-reenqueue-streaming.md | Streaming API to split a heavy notification into smaller tiered ones |
Key concepts¶
DTO (Data Transfer Object) A versioned protobuf message that represents a piece of system state — for example, a store, an ESL assignment, a rendered image. DTOs are the primary currency of the platform. Each DTO type has a defined ID pattern, a single owning service that writes it, and zero or more subscribing services that read it. When a DTO changes, the platform notifies subscribers automatically.
DTOflow
The shared data infrastructure layer. It consists of a DTO server (dtoflow-spanner) that stores the latest version of every DTO, a Change Queue Service (dtoflow-changequeue) that delivers prioritised change notifications to subscribers, and a Large File System (dtoflow-lfs) for binary assets such as rendered images and font files. Functional services interact with DTOflow via generated gRPC reader/writer/history services — they do not communicate directly with each other.
CQS (Change Queue Service) The event bus of the platform. Each functional service declares a named queue and registers which DTO types it wants to receive changes for. When a DTO is written, CQS delivers a notification to every queue that subscribed to that DTO type. Services long-poll their queue to receive changes in priority order. This decouples publishers from subscribers: a service does not need to know which other services care about the DTOs it writes.
LFS (Large File System)
A platform service for storing and retrieving large binary assets that are too big to embed directly in a DTO message. Image files and font binaries are stored in LFS; the corresponding DTO carries a file_path field pointing to the LFS location. The dtoflow-lfs service provides a gRPC API for upload and download, with access governed by the same DTO ownership rules as the rest of DTOflow.