Skip to main content

Architecture

Technical overview of Batchivo's architecture.

System Overview​

┌─────────────────────────────────────────────────────────────┐
│ Clients │
│ (Web Browser, Mobile, API Consumers) │
└─────────────────────────┬───────────────────────────────────┘
│
┌─────────────────────────▼───────────────────────────────────┐
│ Reverse Proxy │
│ (Traefik / Caddy / nginx) │
└─────────────┬───────────────────────────────┬───────────────┘
│ │
┌─────────────▼─────────────┐ ┌────────────▼────────────────┐
│ Frontend │ │ Backend │
│ (React + Vite) │ │ (FastAPI) │
│ │ │ │
│ • Single Page App │ │ • REST API │
│ • TypeScript │ │ • JWT Auth │
│ • TailwindCSS │ │ • Async SQLAlchemy │
│ • shadcn/ui components │ │ • Alembic migrations │
└───────────────────────────┘ └──────────────┬──────────────┘
│
┌────────────────────────────────┼────────────────┐
│ │ │
┌─────────▼─────────┐ ┌───────────▼──────┐ ┌─────▼─────┐
│ PostgreSQL │ │ Redis │ │ Storage │
│ │ │ │ │ │
│ • Multi-tenant │ │ • Session cache │ │ • Local │
│ • RLS policies │ │ • Rate limiting │ │ • S3 │
│ • Full-text │ │ • Job queue │ │ │
└───────────────────┘ └──────────────────┘ └───────────┘

Backend Stack​

FastAPI​

  • Async request handling
  • Automatic OpenAPI documentation
  • Pydantic validation
  • Dependency injection

SQLAlchemy 2.0​

  • Async engine and sessions
  • Declarative models
  • Relationship management

Alembic​

  • Database migrations
  • Version tracking
  • Auto-generation support

Authentication​

  • JWT tokens (access + refresh)
  • Secure password hashing (bcrypt)
  • Token rotation

Frontend Stack​

React 18​

  • Function components
  • Hooks for state management
  • React Router for navigation

TypeScript​

  • Strict type checking
  • Interfaces for API responses
  • Generic components

UI Framework​

  • TailwindCSS for styling
  • shadcn/ui components
  • Responsive design

Build Tool​

  • Vite for fast development
  • Hot module replacement
  • Optimized production builds

Database Design​

Multi-Tenancy​

Row-Level Security (RLS) ensures data isolation:

CREATE POLICY tenant_isolation ON spools
USING (tenant_id = current_setting('app.tenant_id')::uuid);

Core Tables​

┌───────────────┐     ┌───────────────┐     ┌───────────────┐
│ tenants │────<│ users │ │ spools │
└───────────────┘ └───────────────┘ └───────┬───────┘
│
┌───────────────┐ ┌───────────────┐ │
│ products │────<│product_materials│ │
└───────┬───────┘ └───────────────┘ │
│ │
┌───────▼───────────────────────────────────────────────────┐
│ production_runs │
├───────────────────┬───────────────────────────────────────┤
│ production_run_ │ production_run_ │
│ items │ materials │
└───────────────────┴───────────────────────────────────────┘

API Design​

RESTful Principles​

  • Resource-based URLs
  • HTTP methods for actions
  • Consistent response format

Versioning​

/api/v1/spools
/api/v2/spools (future breaking changes)

Error Handling​

{
"detail": "Spool not found",
"code": "NOT_FOUND",
"status_code": 404
}

Security​

Authentication Flow​

1. User submits credentials
2. Server validates and issues JWT pair
3. Client stores tokens securely
4. Access token included in requests
5. Refresh token used when access expires

Data Protection​

  • Passwords hashed with bcrypt
  • Sensitive data encrypted at rest
  • HTTPS enforced in production
  • CORS configured per environment

Observability​

Tracing (OpenTelemetry)​

  • Distributed request tracing
  • Span collection
  • Jaeger/Tempo integration

Metrics (Prometheus)​

  • Request latency
  • Error rates
  • Database pool stats

Logging (Structured)​

  • JSON format
  • Request context
  • Loki integration

Deployment​

Container Images​

  • Multi-stage Docker builds
  • Non-root user
  • Health checks

Orchestration​

  • Docker Compose for simple deployments
  • Kubernetes for production scale
  • Helm charts available

CI/CD​

  • GitHub Actions
  • Automated testing
  • Image building and pushing