# TallyFlow Architecture **Diagram:** [[TallyFlow-Architecture-Diagram.html]] ## Overview (Source-Verified) TallyFlow's architecture is centered on **TallyFlow Core**, which serves as the single integration hub and owns the primary data store. **Core** consists of: - Go backend (API layer, business logic, using Echo/gRPC patterns) - Vue.js 2 web frontend (tallyflow-web) for asset management, reporting, and configuration - MongoDB database (owned by Core) storing the asset registry, tags, photo metadata, zones, events, and audit history All other components communicate exclusively through Core's REST + WebSocket APIs. **TallyFlow Assets (Mobile)** is a Flutter application focused on field operations: lightweight inventory, geiger-counter-style seek & find, fast enrollment, zone movements, and shipping workflows. It syncs with Core. **TallyFlow Capture** (PhotoTag) is implemented as a Go microservice (photomicroservice) that handles photo + barcode association for quality control and visual documentation. It stores photo metadata in its own MongoDB collections but registers assets and events back to Core. **TallyFlow Print** is a Flutter + Rust application that generates Zebra ZPL-compatible labels and RFID encodings, with optional auto-registration into Core. **IoT** is a Rust-based service (tallyflow-iot) that ingests data from fixed RFID readers (Impinj, Zebra) and environmental sensors, pushing real-time tag events and sensor data to Core. This structure was verified by inspecting the repositories in `~/src/` (tallyflow-web, photomicroservice, tallyflow-iot, tallyflow_mobile, tallyflow-print, etc.). ## Key Data Flows - **Assets (Mobile) ↔ Core**: Enrollment, inventory updates, seek/find sync via API - **Capture → Core**: Photo metadata and QC records - **Print → Core**: Print jobs and optional asset registration - **IoT → Core**: Real-time tag/sensor events - **Core ↔ MongoDB**: Core owns and directly manages all persistent data (assets, photos, zones, history) - **Core Web UI (Vue.js)**: Operator interface for the full system Core is the only component that directly owns the database. All other modules are clients or data producers that route through Core.