Skip to content

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

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.