iot-fota-platform/
├── apps/ # Deployable applications (services, UI)
│ ├── api-gateway/ # External API (OpenAPI, auth, rate limits)
│ ├── device-service/ # Device registry & device auth (mTLS)
│ ├── firmware-service/ # Firmware storage, versions, metadata
│ ├── ota-orchestrator/ # Rollouts, scheduling, retries
│ ├── telemetry-service/ # Logs, metrics, device reports
│ ├── web/ # Nuxt 4 web UI
│
├── packages/ # Shared libraries (pure logic)
│ ├── shared-types/ # TypeScript types (devices, firmware, OTA)
│ ├── shared-crypto/ # Hashing, signing, verification helpers
│ ├── hono-rpc-contracts/ # RPC contracts between services
│ ├── openapi-specs/ # OpenAPI YAML/JSON definitions
│ ├── config/ # Shared config (env schemas, constants)
│ └── logger/ # Pino logger wrapper
│
├── docker/ # Infrastructure & ops
│ ├── apps/ # Dockerfiles per service
│ ├── compose/ # docker-compose stacks
│ ├── pg/ # PostgreSQL init & migrations
│ ├── redis/ # Redis docker container.
│ ├── mqtt/ # Mosquitto (TLS) docker container.
│ ├── supabase/ # supabase docker container.
│ └── rabbitmq/ # Rabbit MQ docker container.
│
├── tools/ # Dev & automation tools
│ ├── prisma/ # Prisma schema & generators
│ ├── drizzle/ # drizzle schema & generators
│ ├── scripts/ # Signing, keygen, seeding, etc.
│
├── firmware/ # Embedded side (not JS)
│ ├── mcu-client/ # C/C++ OTA client library
│ ├── esp32-demo/ # ESP32 reference implementation
│ └── linux-agent/ # Linux OTA agent
│
├── docs/ # Documentation
│ ├── architecture/ # Diagrams, flows
│ ├── security/ # Threat model, PKI, signing
│ ├── api/ # API docs
│ └── evaluation/ # Metrics & experiments
│
├── bun.lockb
├── package.json
├── docker-compose.yml
└── README.md