import React, { useState } from 'react'; interface TechnicalDocsProps { onBack: () => void; } const TechnicalDocs: React.FC = ({ onBack }) => { const [activeSection, setActiveSection] = useState('architecture'); const sections = [ { id: 'architecture', label: 'System Architecture' }, { id: 'infrastructure', label: 'Infrastructure Design' }, { id: 'mlops', label: 'MLOps Workflow' }, { id: 'decisions', label: 'Engineering Decisions' }, { id: 'observability', label: 'Observability' }, { id: 'live', label: 'Live System Status' }, ]; const renderSection = () => { switch (activeSection) { case 'architecture': return (

GeoCrop System Architecture

{/* Simplified SVG Architecture Diagram */} React Frontend FastAPI Gateway ML Worker Redis Queue MinIO (S3) PostGIS DB

Tech Rationale

  • MinIO: Local data sovereignty + S3 compatibility for geospatial artifacts.
  • Redis: Decouples long-running ML inference from API response times.
  • TiTiler: Dynamic COG tiling directly from MinIO without intermediate storage.

Data Flow

Requests flow from the React frontend to the FastAPI gateway, which enqueues jobs in Redis. The ML Worker pulls STAC data from Digital Earth Africa, runs inference, and persists COGs to MinIO.

); case 'infrastructure': return (

Infrastructure Design (K3s)

A production-grade Sovereign MLOps cluster designed for low-resource environments.

Resource Strategy

  • Namespaces: Logical isolation using geocrop and argocd.
  • API/Web: Capped at 512MB RAM to maximize efficiency.
  • Worker/Jupyter: Allocated up to 2GB for heavy ML compute.

GitOps Layer

  • Argo CD: Automated synchronization between Git and the Cluster.
  • Gitea: Lightweight self-hosted Git service and CI runner.
  • Terraform: Infrastructure as Code for namespaces and volumes.

Principle: "Everything deployed is version-controlled, reproducible, and vendor-agnostic."

); case 'mlops': return (

End-to-End MLOps Workflow

1. Data Ingestion & Training

Zimbabwe crop labels are batched and stored in MinIO. Training is executed in Jupyter or via automated scripts in the cluster.

2. Experiment Tracking (MLflow)

All runs log parameters, metrics, and models to MLflow at ml.techarvest.co.zw, ensuring full reproducibility.

3. CI/CD & Deployment

Gitea Actions build the Worker container. Argo CD detects the update and rolls out the new model to the production cluster.

); case 'decisions': return (

Engineering Decisions & Trade-offs

Argo vs Kubeflow

Decision: Argo CD + Argo Workflows.
Rationale: Kubeflow is too resource-heavy for a single-node VPS. Argo provides the necessary automation with a fraction of the RAM overhead.

Gitea vs GitLab

Decision: Gitea.
Rationale: GitLab requires 4GB+ RAM just to start. Gitea runs comfortably on 256MB, providing high-performance source control and CI for small clusters.

Standalone PostGIS

Decision: Replaced Supabase with native PostGIS container.
Rationale: Removed the GoTrue/PostgREST/Kong overhead while retaining critical spatial query capabilities for geospatial ML.

MinIO Storage

Decision: On-cluster S3-compatible storage.
Rationale: Guarantees data sovereignty and reduces egress costs/latency when training models on large satellite datasets.

); case 'observability': return (

Observability & Monitoring

The platform maintains 99.9% visibility through a layered monitoring stack.

📈
Grafana
Metrics Visualization
🔍
Prometheus
Time-series DB
Uptime Kuma
SLA & Heartbeats
Endpoints: uptime.techarvest.co.zw | grafana.techarvest.co.zw
); case 'live': return (

Live Infrastructure Status

Service Tier Status Internal Health
Object Storage (MinIO) Core/Data ● ONLINE Healthy (Erasure Coding)
GitOps (Argo CD) Ops/Orch ● SYNCED 12 Apps Managed
Inference (ML Worker) Compute ● READY Redis-Queue Linked
Tracking (MLflow) Research ● ACTIVE PostGIS Backend
Lab (JupyterHub) Research ● ONLINE 20Gi PV Attached
); default: return null; } }; return (

Technical Portfolio

GeoCrop MLOps Platform Deep-Dive

{renderSection()}
); }; export default TechnicalDocs;