Selected work

Embodied AI · Hackathon 2026

Hydroclawnics

An AI agent that watches a hydroponic farm's sensor data, controls its equipment, and shows what it is doing in a 3D dashboard.

Measured highlights

Five sensors at once
read from an Arduino Uno R3
1 physical pot + 200 simulated pods
with the same agent code controlling both

Context

Hydroponic farms need constant monitoring across hundreds of pods, but most tools only show sensor data instead of acting on it, explaining what happened, or learning from it.

An AI agent watches a hydroponic farm's sensor data and directly controls its fans, heaters, humidifiers, and pH dosing to keep the plants alive, instead of waiting for someone to spot a problem on the dashboard.

How data moved

  1. Farm input

    An Arduino Uno R3 read temperature, TDS, flow, water level, and pH sensors at the same time.

  2. Live connection

    A Python serial bridge sent readings through FastAPI and WebSockets to the React dashboard.

  3. Control path

    Communication worked in both directions, so the application could receive telemetry and send equipment commands back.

My role

Responsibility
Full-stack and device integration
Team
Team of 3
Tools
React · Three.js · FastAPI · WebSockets · Arduino

I built the React dashboard, including the Three.js visualizer, toasts, charts, and responsive pod grid. I also built the farm simulator, worked on the Python serial bridge and backend integration, connected the live hardware to the dashboard, and helped tune the system prompts. A teammate handled the SQLite work.

Process & decisions

The agent explained problems without acting.

The agent understood the hydroponic science, but it did not have verified target ranges to work from. It could spend an entire response debating a critical reading and never do anything about it.

Use real crop ranges
We added verified target ranges for lettuce, tomato, basil, and spinach instead of asking the agent to figure them out from scratch.
Make every response end with a decision
We required OBSERVATION → DECISION → ACTION and limited the agent to three sentences of reasoning before it had to act.
Keep the response short
We capped each API call at max_tokens=400 so the agent could not use the whole cycle thinking out loud.

Outcome

Response length dropped by about 80%. Instead of circling the problem, the agent turned on the cooler and recorded why.

Before
800-token non-decision
After
120-token action