Skip to content
IoT & Edge Systems Lab Self-Hosted Platform • 15+ System Modalities

CultiVue: Multi-Modal Agritech Platform

A self-hosted command center for growers managing hydroponics, raised beds, containers, and aquaponics side-by-side — featuring zero external dependencies, hardware telemetry ingestion, and WCAG 2.1 AA edge UX.

Role: Product & Systems Architect
•
Stack: Node.js • Express • SQLite • Docker • Vanilla JS
•
Hardware: ESP32 • Arduino • HMAC Webhooks
•
Delivery: 3-Month Evolution from Mobile Spike

IoT Platform & Agritech Architecture

A self-hosted command center for growers who run more than one kind of garden.

CultiVue is a general-purpose agricultural management platform for growers who juggle hydroponics, soil raised beds, container gardens, and aquaponics side by side. Engineered with zero external runtime build tools, it deploys as a lightweight single-container Docker service with hardware sensor ingestion, multi-user authentication, and complete data ownership.

Role & Scope

Systems Architect

Polymorphic DB schema, zero-build edge SPA, ESP32 REST API, Docker

Scale

15+ System Types

Hydroponic, soil, container, and aquaponics with adaptive metrics

Core Bet

Zero-Build Edge UX

Vanilla JS + CSS custom properties runnable on low-power Raspberry Pi

Impact

100% Sovereign

Single-container deploy, persistent SQLite volume, zero cloud subscription

One platform for every growing method in the backyard.

Most gardening software forces growers into a narrow silo — either strictly hydroponic PPM calculators or basic soil journaling. CultiVue treats 15+ garden types as first-class citizens, adapting telemetry cards and metric fields dynamically so growers stop juggling three disparate apps to manage one backyard.

Private telemetry that never touches external servers.

Self-hosted by design. Docker + SQLite (better-sqlite3) means growers own their database, sensor logs, and audit trails. No subscriptions, no cloud dependencies, and no risk of a commercial vendor sunsetting the platform tomorrow.

cultivue.local/dashboard
CultiVue dashboard showing 6 gardens, 20 plants, 10 active tasks, and 80 log entries with real-time pH and PPM readings

The Multi-System Growing Challenge

Serious growers don't run one kind of garden — they run all of them.

CultiVue originated as HydroMate — a focused Flutter mobile prototype engineered in 72 hours for hydroponic nutrient monitoring, adapting an earlier inventory architecture. It worked well in bench testing, but field feedback revealed a fundamental disconnect: the same growers monitoring DWC (Deep Water Culture) and NFT (Nutrient Film Technique) reservoirs also maintained soil raised beds, container herbs on the patio, and indoor seed starting trays.

A narrow single-modality mobile application couldn't accommodate that operational scope. Serious growers were stitching together spreadsheets, paper notebooks, and proprietary IoT apps to manage one coherent backyard. Worse, none of the available software let them retain their raw data or integrate low-cost hardware sensors directly.

cultivue.local/gardens
CultiVue gardens list showing 6 gardens across hydroponic, soil, and drip system types with location badges and live metrics

Gardens directory showcasing polymorphic system types, location tags, and real-time sensor metrics.

Strategic Trade-Offs: The Forks in the Road

Edge computing constraints, schema polymorphism, and UI runtime overhead.

Designing software intended for edge home servers (Raspberry Pi, low-power NUCs, NAS units) requires relentless architectural discipline. We evaluated and rejected two conventional software architecture paths.

Alternative Path Rejected

Heavy SPA Framework & Complex Build Toolchain

The Premise: Build with a standard React/Next.js/Tailwind stack with SSR and client-side hydration.

Why It Failed: Crushing memory footprint on edge devices. When deploying to a Raspberry Pi 4 already managing local Docker daemons, a heavy Node runtime and huge client JavaScript bundles cause high latency and thermal throttling in humid greenhouse environments.

Alternative Path Rejected

Loose Schemaless Document Store

The Premise: Store all sensor telemetry and garden configurations as arbitrary JSON blobs in a NoSQL document database.

Why It Failed: Broken time-series queries and lack of referential integrity. Aggregating rolling pH averages, detecting low-water threshold breaches, and tracking plant growth stages across multiple locations requires strict foreign key relationships and indexable columnar data.

The Systems Architectural Synthesis

Polymorphic Relational Schema with Zero-Dependency Edge SPA

I architected a strongly-typed relational model in SQLite (better-sqlite3) where each garden type specifies its own valid metric definitions and threshold ranges. The frontend was engineered in pure vanilla JavaScript and CSS custom properties (~3800 LOC SPA) with zero external compilation dependencies. It includes a native theme engine (light/dark + 6 WCAG AA accent palettes), responsive bottom-sheet navigation for mobile devices, and Chart.js for hardware telemetry visualization. The entire platform runs comfortably on under 128MB of RAM.

Full-Stack Systems Delivery

Four architectural milestones from mobile prototype to IoT command center.

01

Polymorphic Schema Architecture: Supporting 15+ agricultural modalities in SQLite

The central architectural challenge was representing disparate agricultural modalities (DWC, NFT, Kratky, Ebb & Flow, Raised Beds, In-Ground, Containers, Aquaponics, and Microgreens) without schema bloat. I structured dynamic metric entities linked to garden types: hydroponic systems dynamically load pH, PPM, and water temperature inputs, while soil gardens surface moisture percentages and organic amendments, all operating over normalized tables.

cultivue.local/gardens/detail
CultiVue garden detail view showing plants with growth stage badges across tabbed Plants, Logs, and Tasks views
02

Zero-Dependency Edge UX: Native mobile ergonomics & WCAG 2.1 AA accessibility

Engineered a custom vanilla JS SPA shell with hash routing (navigateTo()). On desktop (>1024px), it provides a full 240px sidebar with 4-column telemetry grids. On mobile (<=768px), it shifts to an app-like bottom navigation bar with MD3 pill indicators, safe-area inset compensation (env(safe-area-inset-bottom)), full-width slide-out drawers, and bottom sheets. Implemented strict WCAG 2.1 AA compliance including focus trapping, keyboard navigation, and high-contrast colorways.

cultivue.local/logs
CultiVue logs view with pH and PPM telemetry trend charts
cultivue.local/tasks
CultiVue task management view showing active priority tasks
03

Hardware Telemetry Pipeline: REST endpoints & HMAC webhooks for ESP32 devices

Sensors are useless without reliable, low-overhead connectivity. Built a dedicated REST endpoint (POST /api/sensor/readings) with per-device API key authentication and rate limiting (100 req/min per key), allowing microcontrollers like ESP32 or Arduino to push readings in a few lines of C++. Added an outbound webhook dispatcher with HMAC signature verification to trigger automated relays or home automation events when sensor thresholds are breached.

cultivue.local/plants
CultiVue plants management showing growth stage badges and species names
04

Botanical Lifecycle Management: Seed inventory, stages, and planting calendar

Expanded the platform from environmental monitoring into complete crop lifecycle tracking. Built a seed inventory module tracking suppliers, packet dates, quantities, and germination success rates. Integrated the external Perenual botanical API to power a seasonal planting calendar that calculates custom sowing and harvest windows based on localized frost dates.

cultivue.local/seeds
CultiVue seed inventory showing 8 seed varieties with suppliers and germination stats

Agritech Platform Impact

A production edge operating system shipped in three months.

CultiVue evolved from a 3-day Flutter spike into a robust, self-hosted Node.js + SQLite web platform orchestrating 15+ garden types, hardware telemetry, multi-user role permissions, audit logging, and automated webhooks. By adhering to a strict PRD-first cadence, the entire system runs self-sufficiently without external SaaS fees or cloud lock-in.

15+ Types

Polymorphic Garden Models

0 Bundlers

Zero-Build Edge JavaScript

<128MB

RAM on Raspberry Pi 4

WCAG AA

Keyboard & A11y Verified

Self-Hosted Architecture Takeaway

Throwaway spikes clarify the real architectural boundary.

The original HydroMate mobile app in Flutter was valuable precisely because it was disposable: it proved the telemetry loop worked while immediately exposing that confining a user to a single modality was artificial. Embracing that feedback and rebuilding the platform on a polymorphic foundation allowed CultiVue to scale without structural regret.

Designing for edge computing and self-hosted environments enforces a powerful empathy: when your software runs on a user's own hardware, bloat is visceral. Eliminating dependencies and prioritizing keyboard navigation and solid state contracts isn't retro—it is the highest form of respect for the user's computing resources.

← Back to All Projects