The battery still had 60 %. My greenhouse still hit 35 °C.
At 5:54 PM the sun got low, my code decided it was night, and it switched the cooling off. 38 °C outside.
(Digital twin, grid cut 4–8 PM.)
The fix: cooling follows the air, not the sun. At 30 % battery it runs 1 fan + the wet pad.
Same evening: grid back at 8 PM with 14 % left, inside never above 27 °C.
Should I get a bigger battery?
sumithshridhar.github.io/gh0…
1/ My greenhouse thought it was 27.5 °C. It was really 30.5.
One of its two temperature sensors froze at 9 AM. The controller averages them, so the cooling never caught up. No alarm all day.
(Digital twin.)
2/ The fix: a live sensor flickers. A frozen one repeats the exact same number. 20 min of the same number, and it's marked bad.
Same day with the fix: caught at 9:20, afternoon avg 25.4 °C, not 30.
Try it: sumithshridhar.github.io/gh0… (Sensor failure)
What should I break next?
My greenhouse doesn't water on a timer. It waits for the sun.
A sensor outside measures sunlight and the controller adds it up like a bucket. Every 100 J/cm²: about 150 mL per plant, row by row.
(Digital twin.)
One full day in the twin, run twice:
sunny: 12 drinks, ~1.9 L per plant
cloudy: 8 drinks, ~1.4 L
Same code, same settings. A timer can't tell the difference.
What should I show you next?
I hit my greenhouse's digital twin with a 38 °C heat wave.
The cooling stepped up: one fan, both fans, then the wet pad (38 °C air in, 26.6 °C out).
It held for 45 seconds. Then the wet pad switched on and off 145 times in 90 minutes.
The bug was one rule: pad OFF if humidity > 82 %. The pad itself pushes humidity to 84 %, so it shut off, hot air rushed in, and it came back on. Over and over.
Fix: cool in stages, step down in reverse, hold each stage 5+ min. Now 1 switch, a steady 26.9 °C.
2:14 AM. Nobody's in my greenhouse. My robot is.
It rides pipe rails between the tomato rows, photographs every plant from 5 heights, and tonight it flagged #042: early blight suspected.
(Digital twin. The robot's vision is simulated.)
Then the twin's code takes over: photo + location to the farmer's phone → AI suggests drier nights, fans on, rescan the neighbours → the safety PLC checks the limits first.
It doesn't spray. It finds the 1 plant worth a human's look.
sumithshridhar.github.io/gh0…
82 active days. 46,065 messages. 12.1B tokens. Peak hour: 12 AM.
My Claude Code stats, ~21,000x the tokens in The Lord of the Rings.
What it built: a Shorts pipeline that posted 100+ videos unattended, agent guard rules, a 3D greenhouse twin.
Open to AI/automation roles.
I killed the pump in my greenhouse's digital twin to see who would notice.
Nobody's on site. The control code handles it: no flow for 2 s → pump off → one retry → irrigation blocked → farmer alerted.
Filming it found 3 bugs in my own safety logic.
The 3 bugs, all fixed: it only checked flow when the pump started, a stale timer could restart the pump after the PLC said no, and it re-requested water every few seconds.
AI suggests, PLC decides, hardware protects.
Run the failure tests: sumithshridhar.github.io/gh0…
This is a fruit fly's entire brain: 139,255 neurons, 54.5 million synapses.
Every point is a real neuron from the FlyWire connectome. More than half of them do one job: seeing.
Rendered in @Blender, built with Claude Code.
Brain Maps #2. 1 mm³ of human brain is next.
How it was made, for free on a 4 GB RTX 3050 laptop:
- Claude Code (@claudeai, Opus 5.5) turned FlyWire's 139,255 cells + 16.8M connections into a Blender scene in Python
- Blender EEVEE: 1,460 frames in ~10 min
- Kokoro TTS, Whisper word timing
- @Remotion captions
The escape shot is real wiring: all 104 LC4 "looming" cells feed the giant fibres, 805 synapses. Shadow in, jump out.
Fact-check before posting caught a label: "7,000 strongest links". They're a random 7,000 of 1.39M strong ones. Fixed.
Data: FlyWire v783 (CC-BY 4.0)
GH-01: 115 components, 54 plants, all real parts.
AI suggests → safety PLC decides → hard-wired cut-offs if both fail.
Digital twin first. Real build next.
16,384 floating cubes. Turn them and they become 5 different paintings.
Mona Lisa. Girl with a Pearl Earring. The Scream. Van Gogh's self-portrait. And from above: The Starry Night.
Same cubes every time. Built in @Blender with Claude Code.
The trick is combinatorics, not editing.
Each row of cubes is a permutation, so every side view sees exactly one cube per pixel. The rows form a Latin square, so the top view does too.
Every cube carries 5 pixels, one per painting. The script checks both before it renders.