# Architecture AVIS (Automated Violation Intelligence System) is designed as a **production-credible modular monolith**. The architecture avoids the complexity of microservices while providing true horizontal scalability using a task queue. ## 1. High-Level Architecture The system consists of three main tiers: 1. **Frontend**: A React + Vite dashboard for uploading images, reviewing flagged violations, and analytics. It features a dynamically themed Empty-State Hero dashboard, animated hardware-accelerated gradients, and real-time observability Trace Logs. 2. **API & Worker Layer**: A FastAPI application that handles HTTP requests and a Redis-backed queue that processes the heavy computer vision (CV) workloads asynchronously. 3. **Data Layer**: PostgreSQL for structured evidence and metadata, and MinIO (S3-compatible) for raw and annotated image storage. ```mermaid graph TD Client[React Dashboard] -->|Upload Image| API[FastAPI API] API -->|Enqueue Task| Queue[Redis Queue] Queue -->|Consume Task| Worker[Background Worker] Worker -->|Read/Write Meta| DB[(PostgreSQL)] Worker -->|Read/Write Images| Storage[(MinIO)] API -->|Query Status| DB ``` ## 2. Technology Stack ### Core Frameworks - **Backend**: Python 3.11+, FastAPI, Uvicorn, Pydantic, SQLModel. - **Frontend**: React, Vite, Chart.js. - **Database**: PostgreSQL (JSONB for unstructured evidence graphs) via `psycopg`. - **Object Storage**: MinIO. - **Message Broker**: Redis (for background task queues). ### ML & AI Components - **Object Detection**: Ultralytics YOLO11/YOLOv8 (runs on CPU/GPU). Detects vehicles, persons, and traffic lights. - **License Plate Recognition (ALPR)**: `fast-alpr` with ONNX runtime for detection and OCR. - **Vision-Language Model (VLM)**: Google Gemini Flash (free tier via `google-genai`), used strictly as a verification and fallback layer for ambiguous cases. ### Infrastructure & Deployment - **Orchestration**: Docker Compose (`docker-compose.yml`) stands up the entire production-like environment (Postgres, Redis, MinIO, API). - **Local Dev Mode**: A fast, zero-infra mode is supported using SQLite (instead of Postgres) and in-process background tasks (instead of Redis). ## 3. Scalability Path The monolith is built to scale out horizontally without architectural rewrites: - **API Nodes**: Stateless, can be scaled out behind a load balancer. - **CV Workers**: The heaviest workload (YOLO detection, OCR) is isolated to background workers consuming from Redis. Scaling means adding more worker nodes (potentially with GPUs). - **Storage**: MinIO can be seamlessly replaced by AWS S3; PostgreSQL can be moved to a managed service like AWS RDS. - **VLM API Limits**: The VLM is called sparingly (only for ambiguous cases), avoiding rate limits and keeping operational costs near zero. Results are hashed and cached to prevent redundant API calls. ## 4. Key Design Patterns - **Evidence Graph**: A typed graph structure representing detections (nodes) and their relationships (edges, e.g., `rides`, `has_plate`). This provides an explainable basis for the rules engine. - **Deterministic Rule Engine**: Rules (like "triple riding") are pure functions evaluating the Evidence Graph. No ML is used for the *reasoning* step, making it 100% predictable and unit-testable. - **Confidence Fusion**: A mechanism to blend raw detection confidence, rule evidence, and VLM confidence into a single actionable score.