In June I wrote about the Pi I bought for art and never unboxed. That post ended with the surveillance monitor – a live stream of my desk, pixelated into green blocks, running on a damaged camera.
I submitted that project to Element14’s Show & Tell competition. And it won.
The category was Show & Tell. The project was Station 202, the Raspberry Pi surveillance monitor. The prize is a test and measurement tool, still on its way. The winners announcement is here: https://community.element14.com/challenges-projects/project14/b/news/posts/winners-announcement-show-tell
I also submitted something to their Make a Connection challenge. That one was an M5Stack Atom Matrix that sends a message to a PC webcam or a phone camera using light. The matrix blinks a sequence and the camera reads it. That is the whole thing. No radio, no wires, no network. It works from several metres away, and the receiving end decodes the message when it is done. Optical one-way communication.
That entry is here: https://community.element14.com/challenges-projects/project14/b/make-a-connection/posts/blink_2d00_optical_2d00_one_2d00_way_2d00_communication_2d00_m5stack_2d00_atom_2d00_matrix
Between the Element14 entries I took part in Shipaton. The brief was to ship something. Anything. Just finish it and put it in a store.
I shipped two.
Tonight is a cooking inspiration app. One dish on a card. Swipe right to cook it, left for not tonight. It learns from what you turn down – never asks why, never shows a number, never nags. It noticed I swiped left on enough pork dishes and asked once whether to take them off the list. I didn’t have to tell it I don’t eat pork. It just figured it out.
The model is a contingency table, not an LLM. Greedy explaining-away and a specificity rule stop a pork habit from turning into “no meat”. 2,575 dishes ship inside the app, no network needed. No account, no sign-up, no cloud. Everything it knows stays on the phone.
The plate feature checks if a main is thin on protein, fibre or fat and offers something alongside it. It only adds. There is no code anywhere in the app for removing, reducing or warning. No calories, no macros, no score. The plate is covered or it is not, and it says which in words.
Google Play: https://play.google.com/store/apps/details?id=com.apn201.tonight
Devpost: https://devpost.com/software/tonight-qcestu
Palsta is a Finnish allotment simulator. Six plots of soil and a clock that runs whether you are watching or not. Grass comes up in a week. A rowan wants most of a season. An oak takes three months to reach adulthood and then stands for ten years of real time.
You water, you feed, you choose what goes where. That is the whole verb list.
The renderer has no idea what a screen is. A pure Kotlin module turns a seed, a species and a growth number into a list of paths and fills. The app draws with Compose, the widget draws with canvas, and a desktop preview tool draws with Java2D – all replaying the same drawing. There are no image files in the app. Every plant is generated from its own seed, so your birch is nobody else’s birch.
The world is server-authoritative. An hourly Cloud Function tick advances every garden. The client submits intents and Firestore rules refuse it everything else.
The anti-nag is structural. The only reminder is a home screen widget that shows your thirstiest plant. It never buzzes, never appears over anything, never counts a streak. The kindness is also structural: you have neighbours, and the only thing you can do to them is help. No chat, no usernames, no leaderboards, no way to pick who you get.
Devpost: https://devpost.com/software/palsta-a-slow-garden
The third hackathon was Agents for Humans. I built WhyF.
A small company wins a deal with a large customer. Procurement sends a spreadsheet with three hundred rows on it. Row 147 reads: “A formalised mapping of operational technology assets, together with their sensitivity tiering, is maintained on an ongoing basis.” Nobody there knows what that means. There is no security team to ask.
Search does not help. Every free source explaining these questions was written by someone selling the product the question implies you should buy.
WhyF takes one row and returns one verdict: what is actually being asked, whether it applies to a company this size, what evidence would satisfy it, what it costs, and whether the underlying control is worth doing at all. It is allowed to conclude that it is not.
The hard rule: it never tells you what to answer. Answering a questionnaire is a contractual representation. Getting a breach-history question wrong is a misrepresentation that can void an insurance policy. The agent explains, translates and prices. The human answers.
Built on the Strands Agents SDK, AWS Bedrock, Lambda and DynamoDB. Five stages, and the interface shows which one is running, which model it used and what it did – because “an LLM answered” and “a retrieval stage, a judging stage and a deterministic renderer answered” look identical from the outside and are not the same thing.
Measured against 329 real questionnaire rows: 94% answered from a card, 6% near miss with a named gap, 0% bare declines. Every row gets an answer or the nearest card plus a named gap.
Devpost: https://devpost.com/software/whyf
So that is what happened with the Pi I never unboxed. It won something.
Leave a Reply