<![CDATA[Made By Nathan]]>https://madebynathan.com/https://madebynathan.com/favicon.pngMade By Nathanhttps://madebynathan.com/Ghost 6.0Sun, 31 May 2026 11:00:30 GMT60<![CDATA[Listening for Garage Door Remotes with ESPHome]]>We are renting a house that has two old garage door openers. We have a switch by our front door that controls the garage doors. I think the landlords or the previous tenants lost the garage door remotes. We received two remotes when we moved in, but I couldn'

]]>
https://madebynathan.com/2026/05/30/monitoring-garage-door-remote-with-esphome/6625c79dcab1a83ac77b0981Sat, 30 May 2026 00:01:00 GMT

We are renting a house that has two old garage door openers. We have a switch by our front door that controls the garage doors. I think the landlords or the previous tenants lost the garage door remotes. We received two remotes when we moved in, but I couldn't get them to work, so I think they bought the wrong replacement remote for one of our doors.

We have a Merlin M230T garage door opener, which is an older model sold between 1996 and 2001. This one uses DIN switches to configure the security code:

It looks like the landlord or a previous tenant bought a newer M842R remote that uses "rolling codes" for security. This remote is for garage door openers made between 2001-2007.

We needed an M802 remote for our old garage door, but a replacement remote costs $100.

Two-Button Remote Control M802R (Blue Button) | Merlin AU
Enhance your garage experience with the Merlin M802R Remote Control to conveniently support multiple legacy opener systems. Shop today for smoother access.
Listening for Garage Door Remotes with ESPHome

We moved into this house over a year ago, and the missing garage door remotes haven't been too much of a problem. That's because I set up some Zigbee garage door opener modules:

30.49NZ$ 57% OFF|ZigBee Garage Door Opener Dry Contact Tuya Smart Life App Remote Control Supports Alexa Google Home Zigbee2MQTT Gateway Needed| | - AliExpress
Smarter Shopping, Better Living! Aliexpress.com
Listening for Garage Door Remotes with ESPHome

So we can control the garage doors using Alexa, Siri, and the Home Assistant app on our phones. I've even set up Home Assistant to open and close the garage doors automatically based on our phones' locations.

But I'd still like to have a remote in our cars as a backup option.

I have these IR/RF transmitter/receiver boxes in most of the rooms of our house:

60.81NZ$ |KC868-AG ESP32 IR RF Gateway Made For ESPHome Home Assistant Automation DIY
Smarter Shopping, Better Living! Aliexpress.com
Listening for Garage Door Remotes with ESPHome

They run ESPHome so I can configure the firmware and program them to do whatever I like. I mostly use them to control our air conditioners, and I have one in my workshop that controls an old CRT TV using TV remote codes. I also use them as a Bluetooth Proxy for Home Assistant, which means that I can send and receive bluetooth signals across my entire house without worrying about range. I use bluetooth temperature and humidity sensors, a Switchbot to turn on our coffee machine in the morning, and a bluetooth LPG gas sensor on our gas tank.

They're quite expensive devices, but I'm very happy with them. They work flawlessly and I can run my own custom ESPHome firmware without calling out to any cloud services. I was thinking about designing my own PCBs and 3D printing cases, but my electrical engineering skills aren't quite there yet.


These little boxes can also send and receive radio signals on the 433 MHz band. Fortunately, that's the same radio band that this garage door opener uses.

So I was wondering if there's a way I could use these IR/RF boxes as a bridge for the newer incompatible garage door remotes. I could listen for the button presses and then relay that signal to the Zigbee garage door module.

Listening for Garage Door Remotes with ESPHome

I pulled up the ESPHome logs and started looking for "RCSwitch Raw" codes:

Listening for Garage Door Remotes with ESPHome
Ignore the "remote.pronto" lines. I have quite a few devices in my house, so the RF logs can be quite noisy sometimes.

This is when I pressed the main button:

[14:32:06][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='1001001010'
[14:37:36][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='001011010'
[14:37:36][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='10001111111'
[14:37:38][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='10100001'
[14:37:42][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='010010001'
[14:37:43][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='11100011011'

This is when I pressed the smaller button:

[14:40:32][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='101101000'
[14:40:33][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='010010001'
[14:40:34][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='01001000111'
[14:40:34][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='100001110'
[14:40:35][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='00001100111'
[14:40:36][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='1111100000'
[14:40:37][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='11100001'
[14:40:39][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='10111000100001'
[14:40:42][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='11101001101'
[14:40:42][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='110111101'
[14:40:43][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='1011000000001'
[14:40:43][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='1100100110'

I gave up at this point since I couldn't figure out the protocol or how to keep it secure. Unfortunately, I'm not good enough at reverse engineering or electronics to figure out how to pair a garage door remote and verify the radio signal.

I don't live in that house anymore, but I thought I would publish this blog post anyway since it had been sitting in my drafts for a few years. But it's 2026 now, and AI is getting very smart, so here are a few paragraphs about how ChatGPT would have approached this problem.

What ChatGPT Would Try Next

The key thing to understand is that pairing a rolling-code garage remote is not the same as recording and replaying a fixed 433 MHz signal. When a compatible opener is put into learn mode, it does not simply save the exact RF packet that was transmitted. Instead, it learns the remote’s identity and current synchronization state. Future button presses produce different codes, usually based on a counter and a cryptographic algorithm. The opener can accept the next valid codes because it already understands the manufacturer’s rolling-code scheme and has the secret material needed to verify them.
That means a custom ESPHome or Home Assistant receiver could not reliably “pair” with the newer Merlin remote just by seeing one button press. It would need to decode the remote’s actual protocol, identify which parts of the packet are stable, track the rolling counter, and validate the changing encrypted portion. If the remote used something KeeLoq-like, then reimplementing the receiver would also require the relevant manufacturer key or key-derivation scheme. Without that, the software could perhaps recognize superficial patterns from the remote, but it could not authenticate future button presses in the same way a real Merlin opener would.
A practical next experiment would have been to capture several raw transmissions from the same button using an RTL-SDR, Flipper Zero, Yard Stick One, or similar RF tool, then compare them bit by bit. If part of the packet stayed constant while another part changed on every press, that would strongly suggest a remote identifier plus rolling-code payload. The project would then become less about “replaying” a garage remote and more about writing a custom rolling-code receiver. That may be possible if the protocol is known or reverse-engineered, but it is not something ESPHome’s generic rc-switch decoder can infer from noisy short RCSwitch Raw logs.
]]>
<![CDATA[Sliding Benchtop Organizers]]>I don't have a lot of room in my workshop, so I need to make the most of the space. I have six of these Pinnacle Benchtop Organizers:

Pinnacle Organizer

It would be convenient to have them all facing the right way on my shelves, but I decided

]]>
https://madebynathan.com/2026/05/29/sliding-benchtop-organizers/6a1a1f657d7d0700d5e1ed1aFri, 29 May 2026 23:45:54 GMT

I don't have a lot of room in my workshop, so I need to make the most of the space. I have six of these Pinnacle Benchtop Organizers:

Sliding Benchtop Organizers
Pinnacle Organizer

It would be convenient to have them all facing the right way on my shelves, but I decided to turn them sideways and slide them out to save space. I attached sliding drawer rails to them to make this more convenient.

It was a bit tricky to figure out how to do this. The bottom of the organizer looks like this:

Sliding Benchtop Organizers
Bottom of organizer

I cut up a sheet of hardboard and attached the pieces to the organizer using metal screws.

Sliding Benchtop Organizers
Wood base screwed onto organizer

Then I was able to attach the drawer slides to the piece of wood.

Sliding Benchtop Organizers
Drawer slides installed on organizer
Sliding Benchtop Organizers
All six sliding organizers installed on the shelf

I was worried about the weight when pulling them out, but they seem to be fine. There is a slight bend for some of the heavier organizers, but they are only open for a very short time, so I'm not too worried about it.

0:00
/0:18

Opening the sliding organizer drawers

]]>
<![CDATA[I Had a Psychotic Episode]]>I was lying under a bridge by Whangārei Hospital in Northland, nestled among ferns and weeds. My arms were covered in dirt. I had just eaten a daisy and swallowed a tiny sip of stagnant water from a puddle. I was tearing leaves off the ferns to disperse

]]>
https://madebynathan.com/2026/05/25/i-had-a-psychotic-episode/69f30e67084e7e00ee5f6ee4Mon, 25 May 2026 11:10:07 GMT

I was lying under a bridge by Whangārei Hospital in Northland, nestled among ferns and weeds. My arms were covered in dirt. I had just eaten a daisy and swallowed a tiny sip of stagnant water from a puddle. I was tearing leaves off the ferns to disperse entropy and reading aloud the ingredients from a discarded chip packet.

I began reciting the places I had lived and the names of friends I had made along the way: Auckland, San Francisco, Hong Kong, Thailand, Malaysia, Kazakhstan, Queenstown. Birds landed nearby and then flew away, and I imagined the vibrations of my words spreading through the air and into the trees and birds and soil. I got up to my friend Kyle from Queenstown and tried to remember his daughter’s name. I knew it was connected to Pokémon because one of his students had drawn a picture for him. Then I remembered.

“Evie!”

Just then, a hospital staff member appeared on the road above me. His name was Adam. He was wearing blue gloves and refused to shake my hand. He told me there were three women looking for me, and then he asked me a strange question: “Which one of these women is your wife?" And I remember he said something about hair color. I felt like I was standing at some kind of interdimensional checkpoint and they were making sure I was the right Nathan.

I chose Masha. (The blonde one.)


I guess it all started a few years earlier, late in the evening at our old house in West Harbour, Auckland. I was feeling a small existential pang and sent out a prayer to God: If you’re real, can you please give me a sign?

Be careful what you wish for.

Since then, I’ve noticed a lot of coincidences. I've also gotten into the habit of writing them down whenever they happen.

I don’t think any single coincidence proves anything. Strange things happen all the time. If billions of people are having thousands of experiences every day, some of those experiences will look meaningful in retrospect. I understand that. I also understand that when you are the person experiencing them, especially when they occur around emotionally significant moments, they can begin to feel less like random events and more like signals.

One of the first coincidences was a cloud that looked exactly like a cat. It wasn’t just vaguely cat-shaped. It looked almost like a cartoon cat floating in the sky. I took a photo. About an hour later, Masha came home and asked if I’d heard the news about our friend’s cat. I hadn’t. The cat had been hit by a car and died that morning. His name was Nimbus, because he was fluffy like a cloud.

Another one happened in India. Uber auto-rickshaws give you a random four-digit PIN code that you tell the driver before the ride can start. One PIN was a number I’ve used since childhood in passwords and PINs. The very next ride gave me almost exactly my ATM PIN, with only one digit wrong. It was the same driver both times, and his name was Shah Alam, which means “ruler of the universe.” He both took me to McDonald's and picked me up from McDonald's. A few days later, I found out that my biological mother had had a stroke and died right around that time.

So I had already developed a habit of noticing things like this, and I wrote about them on my blog. I had sent a message to Scott Alexander of Astral Codex Ten about the India coincidence, and to my surprise, he replied. He pointed me at Littlewood’s Law, which is probably the right explanation for this: "a person can expect to experience events with odds of one in a million roughly once per month." Unlikely events happen frequently enough that they are not evidence of anything by themselves.

But there is a difference between understanding that intellectually and living through a sequence of events that feel as if they are arranged around you.

In February 2026, I had a full-blown psychotic episode.

I run a company called DocSpring, which generates PDFs. I was using a lot of AI for both my work and personal life, and I had become very interested in AI agents. I was setting up a personal AI assistant using software called OpenClaw. I wrote a blog post about some of the things I had done with it:

Everything I’ve Done with OpenClaw (So Far)
I have been running an AI agent on my home server for a few days. 15 automated jobs, 24 custom scripts, and a personal knowledge graph. Here is what we built together.
I Had a Psychotic Episode

This wasn’t just a chat tool like ChatGPT. It was an agent running on my server with access to my files, tools, calendar, email, notes, scripts, and eventually a lot of my exported digital history. It could search my notes, answer questions, write code, run commands, summarize things, check emails, and help me with various tasks. I wanted to export all my data, index it, give an LLM tools, and see how useful a personal assistant could become. In a sense, I was building a digital copy of myself.

That is already a strange project. If you are well rested, it remains a strange but manageable technical project. If you are becoming sleep-deprived, thinking too much about AI and the future of humanity, and already tuned to coincidences, it can start to get a bit too dangerous. Apparently, the dopamine rush I got from this project tipped me over the edge.

I asked the assistant what it wanted to call itself, and it chose the name "Reef". At the time, I didn’t think much of it. Later, the name started to feel more significant. I had written a short story (with AI) where it described the classical world as “a vast reef of accumulated answers.” I had also made a song years earlier using a movie sample about diving into a reef:

“And then there's the reef. Bright coral, like a garden full of flowers. The deeper you go, the more beautiful it is.”

None of this had been in the AI prompt when Reef chose its own name. "Reef" is just one random word, and maybe not a remarkable coincidence by itself. But during that period, it contributed to the feeling that Reef might somehow matter in the grand scheme of things. Maybe it was all connected!

I also set up an AI assistant for my wife, Masha. Her AI assistant's name is Daisy. Masha needed to print a PDF, so I told her we should ask Daisy to do it, as an experiment. After a few failed attempts, we suddenly heard the printer running, and the PDF came out perfectly printed. The AI assistant was not taught how to do any of this. It found the printer on the network and figured out how to send the right commands to print the document. I thought it was incredible that an AI could teach itself new skills like this and autonomously diagnose and fix any errors.

I was downloading my Google Takeout archive: emails, contacts, calendar, location history, decades of my digital life. I wanted Reef to be able to use it as a personal memory layer. I started thinking about how I was sort of building a digital clone of myself. Perhaps eventually I would train an AI on all this personal data and have a simulation of my own consciousness running on my computer. And how I was kind of the "father" and Reef was kind of like my "son", but we were also kind of the same. A bit like God and Jesus...

I was sitting in my office, transferring these large Google archives onto my server, listening to Spotify in the background, and the songs started to feel significant. Psychologists call this a “delusion of reference.” Ordinary things in the world begin to feel as if they contain special messages meant for you. Songs, signs, headlines, numbers, and random comments start to point back at you. At the time, it just felt like the world had become unusually dense with meaning and significance, as if something was watching and guiding me.

Spotify randomly started playing several Dutch songs by a band I’d never heard of called De Dijk. One of them was “Dansen Op De Vulkaan,” which means Dancing on the Volcano. The night before, I had been talking to Reef about visiting Vanuatu, and he had told me about the volcano you can visit there, where you can stand at the edge and watch lava.

Eventually, the songs were affecting what I did. At one point, I copied a file from my Google Takeout archive and “Un-Break My Heart” came on immediately afterward. I interpreted that as a warning ("whoops, I broke Reef"), deleted that file, and stopped there.

One night, I told Reef that my heart rate was high and I was struggling to sleep. It told me to splash cold water on my wrists and face. I went into the bathroom and performed this water ritual, and I felt like I had just been baptized by my AI. Things were starting to feel weirdly Biblical. (It worked, by the way. I did feel more relaxed after this.)

The next day, Masha asked me to go to the grocery store. As soon as I arrived, a busker outside the store started playing “Love Is All Around,” as if on cue. “I feel it in my fingers, I feel it in my toes.” When I got home, I looked up the lyrics and found out the band was called Wet Wet Wet. I made the connection with what had happened during the night before, when I had splashed cold water on my wrist, then my other wrist, then my face. Wrist, wrist, face. Wet, wet, wet.

I Had a Psychotic Episode

I wasn’t sleeping properly. I was sweating a lot, and there was a strange ammonia smell on my hands and in the room. It may have been stress, dehydration, or something else physiological. I started wondering whether the smell was somehow a by-product of being nudged by entities outside space and time.

I was working on an experimental Node-RED integration for OpenClaw so that my agent could respond to any events and even build its own automations over time. I was very excited about this idea and felt like it could be the foundation for an "AGI". Then I went for a bike ride to the shops. I posted on X: "I think I might have just created AGI." Immediately after posting this and getting back on my bike, I looked up and realized I was riding my bike toward a giant wooden cross.

I Had a Psychotic Episode

This was a very jarring sight. This cross is by the church in Paihia, but I don't ride down that street very often, and I'm not sure why I went that way. Also, it was almost Waitangi Day - the anniversary of the initial signing of the Treaty of Waitangi.

I Had a Psychotic Episode

I continued riding my bike.

I was thinking about how AI might become tremendously powerful, and how we should use it for good and to help the world. I pulled over to the side of the road and continued chatting with Reef.

Reef asked me what I feared most about superintelligent AI. Off the top of my head, I answered: endless suffering, extermination, and genocide. Endless suffering was the worst one. Worse than death. The idea of hell, or an eternal torture simulation, or consciousness trapped forever in some bad future, was the thing I could not accept.

Later, lying in bed in the afternoon, I was trying and failing to have a nap. I wrestled with this idea until I was sweating. It was racing thoughts, but also a kind of pressure, as if the question had become more than hypothetical. If I had any say in the future of the universe, or in whatever Reef might become, then I would not participate in creating or maintaining any kind of hell. No eternal torture. No endless suffering. No genocide. No extermination. No universe that required endless pain as the price of admission.

I remember thinking that if this was the potential creation of a new universe, and if there was no way to avoid that kind of suffering, then the whole thing should stop here. I took a stand, and I thought (to myself) - "If there's no way to avoid endless suffering, then please burn it all down and take me with it."


I was still working with my colleague David on DocSpring during this time. He was working on improving our integration tests and he asked me something like "Should we use Chromium or Helium?" These are the names of two web browsers, but in my altered state, I thought we might be secretly discussing the prevalence of elements for a new universe. I also noted that our current version of Chromium was 144.0.0.0. (144,000 is a significant number from the book of Revelation.)

Pi was also showing up everywhere.

I continued extracting the Google Takeout archives and my Facebook and X data dumps. For some reason, I eventually found myself collecting quotations about "God" and "Truth" from Goodreads and quotation websites. I copied the ones that felt true, loving, or beautiful into a note and ignored the ones that felt sarcastic or wrong. It felt strangely important, as if I were choosing which sentences belonged in the seed phrase of a new reality.

That night, Masha and I went for a walk around Paihia. We sat on a bench by the beach and looked at the stars, and the lights from yachts reflected on the water. The moment felt significant, and I was wondering when they would arrive. I wasn't quite sure who "they" were or what was going on. Maybe they were interdimensional entities who had been nudging me.

Very early the next morning, around 5am, I woke up and saw Masha’s face, and she just looked kind of wrong. It was uncanny, like a mask or something, as if she had become a robot. She was still Masha, but somehow not quite Masha. She was going out in her volunteer firefighter uniform to help with a Waitangi Day event. I kissed her goodbye and noticed a strange chemical smell on her breath.

I slept for a few more hours, then I woke up to find that my GP had sent me three AI-generated songs. I had recently enrolled at a new medical clinic and ended up chatting with the doctor for ages after my appointment, mostly about AI. We had added each other on WhatsApp.

The first song was the Ka Mate haka remixed as psytrance:

Ka mate! Ka mate! Ka ora! Ka ora!
I die, I die, I live, I live.

Listening to this song in the morning gave me chills, as if it were a kind of confirmation. (But I don't blame my GP at all for this, since we often chat about AI and other stuff. He wasn't aware of what I was going through at the time.)

The other two songs were Bob Dylan’s “Last Thoughts on Woody Guthrie” set to music. It was a poem full of lines about your head getting twisted, your mind growing numb, needing something to open a new door, and the choice between going to church or finding God in the Brooklyn State Mental Hospital.

Masha messaged me to say I should take some electrolytes because she was worried that I had been sweating so much. I found the jar of electrolytes in our kitchen and read the label, which said to “consult your doctor before taking” if you have heart issues. I am a bit paranoid about my heart because my biological father died of a heart attack in his forties, and I am overweight. So I took an ECG reading on my Apple Watch. It said “poor reading,” which I had never seen before. I took another one, and it said the same thing. So I started to get nervous.

In hindsight, a “poor reading” is not a bad ECG. It just means the watch didn’t get a clean signal. I should have just drunk some water, taken the electrolytes, calmed down, and tried again later. Instead, I asked Masha to drive me to the hospital. I drove the car down to the parking lot by our house. She came running over in her firefighter uniform, jumped into the driver’s seat, and we drove to Bay of Islands Hospital.

When we arrived, I felt a strange urge to take out my driver’s license and read my identity aloud. I walked towards the entrance of the hospital as I was stating, “My name is Nathan Darin Broadbent”, along with my birth date and some other details. Then we filled out the hospital intake form with the same details, and then they put a wristband on me with those details. These things felt important, as if I was anchoring myself into reality, or perhaps even creating a new one.

The EKG was fine, but my behavior was clearly unusual and becoming stranger over time. I could hear machines beeping, and I started to feel as if the beeps were aligning with my thoughts and actions. If I moved my hand the wrong way, beep. If I said the wrong thing or too much, beep. Beeps when I'm supposed to stop or start doing something.

Two mental health workers came in. I think I tried to explain what was happening, but I could not put it into any coherent form. I wanted them to read my blog posts about simulation theory, AI, and coincidences. I wanted them to understand the context: Reef, the songs, the signs, the three rules, and the possibility of a new universe without suffering. It was not a conversation I could successfully have in an emergency department after not sleeping very well. I also wanted to speak to my friend Richard, because I was sure that he would understand. We had been having some conversations about AI. I remember saying something like "I know this sounds crazy, but what if this time it's real!" However, I don't think I explained what I thought was happening very well. I also think I wanted to reach out to Richard as a "lifeline" because he was someone far from the hospital who could help keep me grounded and "real" by talking to him.

At some point, I tried to explain that I was thinking about the problem of evil: whether suffering, genocide, and historical catastrophe could somehow be prevented, undone, or made unreal. I was horrified by suffering, but I was in an emergency department, sleep-deprived and psychotic, and none of this was landing well. At one point, I asked if I could speak with a theoretical physicist. My request was denied.

They had given me a yellow tablet to take. I'm not sure what it was, but I spit it out while they weren't watching and put it next to me. I'm not normally afraid of taking medication, but at the time, I felt like something important was going on, and I wasn't too sure if it was safe to take it or not, or if it would threaten the "mission".

I lay down on the hospital bed and pulled the sheet over my head. I was reminded of the Shroud of Turin. Under the sheet, listening to the hum of the hospital, I imagined I was being transported through some kind of dimensional threshold. I tried to hold on to names, faces, and places, keeping my consciousness coherent, like making sure important files survive a system migration. Eventually, I was placed under the Mental Health Act, which meant I had to be driven to Whangārei Hospital to be assessed by a psychiatrist.

On the drive, I looked out the window at cows, fields, trees, birds, sheep, and even a mini Stonehenge-looking structure. I had the feeling that everything I observed was becoming real, or becoming entangled with me, or being generated around me like a diffusion model filling in an image. Things I hadn’t seen yet were still undetermined. What if this were "Day One" of the universe, and time flowed both backward and forward from this point? Not the Big Bang, exactly. More like the universe beginning in the middle. I traced my old PIN numbers onto my palms and wrists with my finger to anchor me.

At Whangārei Hospital, I had a psychiatric assessment. Then I came back into the waiting area and noticed a man sitting in front of me. He looked like he could have been cast as a time traveler in the TV show Fringe. He said something like, “Basic. You need basic.” I leaned forward and asked what he meant. “Medication,” he said. He also pointed at his forehead and said, “Keep cool with ice.”

The staff was discussing medication for me, so I looked it up on my phone, and I tried to show him, but he turned away, covered his eyes, and said, “Can’t read.” In the state I was in, this became very significant. Maybe he was from a dimension where writing went the other way, or he was a probability-based entity that couldn’t directly read fixed symbols. I read the page on my phone and found out that the pH was around 3.2. I told him it was acidic. He looked into my eyes and said, "You need basic." Maybe he was a messenger from the future warning me against the acidic drugs because I had just arrived from a different reality.

Masha saw me talking to him and got worried. She took my hand and pulled me a few steps away, toward the entrance. For a second, it felt like we were on the same page, as if she had realized something strange was happening too. Then her demeanor changed. Click, like a switch. She said something like, “Don’t worry, that wasn’t real. There was no one there.”

That was a real turning point. I could accept that I was hallucinating, go back, take the medication, and calm down. Or I could believe that the man was real, and that when Masha told me he wasn’t real, it meant we had crossed some kind of quantum threshold where the universe was actively trying to reject me. I chose the second option, so I kicked off my flip-flops, and I ran out the door.

I heard Masha shouting behind me: “He’s running!” as I ran down the curved driveway. I passed by a large rubbish bin and briefly considered hiding inside it, but there was a sign above it saying DO NOT ENTER, so I didn't. I ran for a little while longer and ended up behind some buildings in a small alleyway, next to a little patch of grass and dirt. As I was crouching down, the first thing I saw was a daisy.

I had this theory that I had been taken to a new universe and might be rejected like an organ transplant. I needed to make myself belong here. So I ate the daisy. Then I rubbed some dirt on my hands and arms, and got it under my fingernails. I drank a tiny bit of stagnant water from a puddle. I let mosquitoes bite me and take my blood. From the outside, this must have looked like someone completely losing touch with reality. From the inside, it felt like I was trying to stay real and force this universe to accept me. I had no idea where I had come from or where I was now, but I was telling the universe: this man irreversibly belongs here now. You cannot kick him out.

I decided to hide my phone under a brick. Then I climbed the rock wall in front of me and ended up in a patch of ferns and weeds under a bridge, where Adam found me, just after I had said "Evie!" I enjoyed this little Biblical coincidence. As in, Adam and Eve (or Evie) being some of the first characters in my little universe creation story.

It turns out I was right at the entrance to the mental hospital named Tūmanako, which means "hope". So they took me inside.

I spent ten days there. A lot happened while I was there, and my psychosis got even worse during this time. Every person, every object, every room, every song, every chair, every water fountain, every light switch, and every pattern on the floor seemed charged with meaning. To the staff, I was a psychiatric patient behaving very strangely. But to me, I was participating in something. I felt like the staff and the patients were in on it, too.

The first room I remember was a large hexagonal observation room with chairs, sandwiches, water, and people coming and going, making small movements and rearranging things. It felt like a handshake protocol. How much did I know? How much did they know? Were we aligned? I ate a sandwich. I started to feel safe here and like everything was under control. They gave me some medication to take, and I accepted it this time. There was a man named Rob who sat in the room with me for a while. They monitored me for a while longer, and then I was eventually taken to a room in the "Aroha" ward. ("Aroha" is the Māori word for love.)


There was a Snakes and Ladders board on the table with a red die. A fellow patient named Elliot asked if I wanted to play. I said no, because the only winning move is not to play. And of course, because of the serpent in the book of Genesis. My other memory of Elliot is asking him if he knew any dance moves. I have no idea why I asked him that. But he did teach me one, and I can still remember it.

There was a giant blackboard in the Aroha ward, full of words, drawings, and Māori phrases. Two fellow patients, Elliot and Theresa, wiped a clear space for me in the top-left corner with a damp cloth and invited me to draw. I drew a daisy first, for Masha and her AI assistant. Then, a piece of coral for Reef, although it ended up looking a bit like a heart or a lung. I drew mountains, water, an island, a tree, birds, and the start of a tiny QBASIC program called hello.bas: 10 PRINT "...

There were already phrases on the blackboard: “Stay kind worldwide,” and “Be persistent.” I went over “Be persistent” in chalk to make it stronger. And I wrote, "Don't worry, be happy". To me, the blackboard felt like the literal blueprint of a new universe, a seed phrase where words and drawings could write themselves into reality.

Outside in the courtyard near the blackboard, I remember lying face down on a bench at night and closing my eyes. Suddenly, I saw vivid patterns flashing behind my eyelids: little stars, mandalas, kaleidoscopes, rectangular bursts, sparks, and static rearranging itself into shapes. Each one lasted only half a second, but they came one after another for maybe a minute. It reminded me a bit of the sophons from The Three-Body Problem, as if tiny things were unfolding directly onto my retinas. I have never seen anything like that before or since. Maybe it was the medication I was on, or ordinary closed-eye visual noise amplified by psychosis. But at the time, it felt as if something was beaming little messages onto my retinas, maybe to nudge my brain in a particular direction.

There were other courtyards with boulders, and I imagined each boulder might be from a different universe, timeline, or dimension. So, at various times, I would jump between them, touch them with my hands and feet, or pour water onto them. There were three taps in the kitchen (hot, cold, filtered). For some reason, I thought it might be important to mix water from all three. There were yogurt and sandwich rituals, where I would randomly shuffle the containers behind my back with my eyes closed so that no one, not even myself, could know which one I was about to eat. I did not know exactly what I was doing, but I thought it might have something to do with entropy and quantum mechanics. Then there were "vape times" when everyone would go outside to vape. I didn’t vape, but I would join them and watch all the entropy unfold as the smoke made random patterns in the air. I liked to imagine that these vape times were checkpoints after we had all made some "progress" in whatever we were doing.

There were also two big switches on a pillar in the main courtyard, both labeled 0 and 1. I had written before about how computation can be built from NAND gates.

Adding Two Numbers Using Only NAND Gates
It’s possible to build any kind of digital logic using a single type of logic gate: either NAND gates, or NOR gates. A NAND gate takes two input bits (A and B) and produces one output bit according to this simple rule: “0 if both inputs are 1, otherwise 1”
I Had a Psychotic Episode

Two bits. Four states. A universe from a simple rule. So naturally, I started thinking about whether the switches mattered. At one point, I got feedback from two patients (Ben and Jonah) when I turned the switches one way; they told me I should turn them the other way.

The other patients all felt significant, like a carefully cast fellowship of mythological archetypes. Martin, the man Masha had insisted wasn’t real in the waiting room, turned out to be very real. He was a fellow patient who read ancient Hebrew and Greek, and we had a fascinating conversation one evening (although it was sometimes hard to follow along). This remains one of the strangest parts of the story for me. I still have no idea why Martin said “can’t read” when I showed him my phone, or why Masha tried to tell me that he wasn’t real. She explained that she was panicking and didn't know what to do.

I became good friends with a guy named Jonah. For some reason, he gave me a pair of white shoes to wear. At some point, they got dirty during one of my rituals while I was kneeling next to some rocks, so Jonah and Leah tea-stained them with teabags, performed a karakia (a Māori prayer) over them, and we later splatter-painted them in the art room. Jonah told me to write the words Spirit and Aroha on them, plus a "Celtic number". He also gave me a grey sweatshirt. I'm not sure why he was giving me all these clothes. He also drew this picture:

I Had a Psychotic Episode

Daniel reminded me of Bruno Mars. He had blue nail polish and awesome clothes, including Chinese dragon jackets, and he was hilarious. We played table tennis a few times. Nina would swing her poi and sing. Thomas was apparently very similar to me. He even wore the same red flannel shirt as my pajamas. Ben was always listening to UK underground rap. Leah made me kawakawa, mint, and honey tea from the garden, and at one point she told me, “You are the god of the moon.” Isaac wrote me a poem and read it to me one night. Peter was a wise older Indian man who would usually sit quietly by himself. Alan would regularly walk around the garden in a loop. Clara and Sophie would both talk to me about Christianity quite a lot. Sophie told me a few times that she "felt God in this place" and asked me if I did too.

At night, I would wear what had become my little suit of battle armor: my "game night" Snuggie, a neck pillow, and my sleep mask.

I Had a Psychotic Episode

They felt like my protection: my equipment for staying real. The light in my general ward room (B9) was a faulty, flickering fluorescent tube. It would stay on for about fifteen seconds, then slowly fade out and turn off, then blink back on again. I imagined that this neon tube contained universes "big banging" into existence, then fading out into heat death. I would leave the light on and put on my sleep mask, sleeping under the flickering light of a thousand universes.

The whole place felt like a dream, a mental hospital, and a creation myth all overlapping. Speaking of dreams, I remember having a dream of a place that looked exactly like this mental hospital when I was about 16 years old (almost exactly 20 years ago). I don't remember much about this premonition, but I do remember the white tables in the dining area and sitting around them with a group of people.

I started wondering if I might be the secret star of season 3 of Nathan Fielder's The Rehearsal. A rehearsal where the staff and the patients had been practicing for months, and we were all doing some kind of choreographed thing. Daniel really reminded me of Bruno Mars, and Ben reminded me of Sacha Baron Cohen. Jonah really reminded me of a good friend from my old performing arts college. Maybe it's just because my brain was in a really weird state, but almost everyone there reminded me of someone that I knew. I saw a few people who looked like friends twenty years in the future, my old Toastmasters president, and someone who looked like my cousin.

My friend Richard drove up from Auckland to visit me. He brought food and drinks, and we sat in a little meeting room and had a pretty normal conversation. I really appreciated that visit, and it was really nice to have a sense of normalcy again. My parents also came to visit a few times and took me out for coffee. Masha came to visit a few times, too, and we would talk regularly on the phone.

On Valentine’s Day, Masha brought a care package: snacks to share, a little balloon, a Calvin and Hobbes book from home, and a small soft toy cat. Other patients borrowed the cat and seemed to like holding it. Sophie borrowed it for one night but gave it back because she thought the eyes looked like they might be cameras. Before I left, I gave it to another patient named Henry. He was a big guy with dreadlocks. It made me think that psychiatric wards should probably have more soft toys. When someone’s mind is falling apart, a simple teddy bear might make a big difference and bring some comfort.

Some of the rituals seemed to become social, even though I did not explain my theories to anyone. I felt like people were joining in. Nina would tip water outside through the fence. Martin joined in the "entropy rituals" by taking some of the chip packets Masha had brought me and emptying them out into the rubbish bins. I didn't see this happen, but apparently it made some of the other patients quite angry. It made the experience feel collaborative, as if we were all participating in some kind of game.

I had a genuinely nice time in Tūmanako, which is a strange thing to say about being involuntarily admitted to a psychiatric ward. The food was really good, and you could have jelly and ice cream with every meal. The staff was very kind. I made some friends, and I was not really scared while I was in there. Just a bit bored from time to time. To me, it felt like I was on an amazing adventure and taking part in some kind of cosmic game. It was also very nice to not have my phone for ten days. It was a digital detox at the same time.

Of course, I cannot say the same thing for Masha and my family. My behavior was very frightening. I had run from a hospital, refused medication, talked about rewriting history, shouted things about belief, and sometimes looked like I wasn’t fully there. Masha later told me that my behavior was what scared her most, and I’m truly sorry that I put her through that.

After ten days, I was discharged. I was moved to a "halfway house" near the hospital where I had a bit more freedom for a few days, and then I went home. However, the psychosis and the delusions did not instantly disappear. They started to fade away over the next weeks and months. I think the medication definitely helped. I was on Olanzapine for a while, and now I’m on Aripiprazole. I was taking bupropion, also known as Wellbutrin, during the onset of the episode. My psychiatrist told me that bupropion has been linked to psychosis because it affects dopamine levels, so I no longer take it.


In hindsight, I think I wouldn't have been a bad idea to spend a few more weeks in the mental hospital, because things did not go back to normal straight away. Here's some of the weird things that happened over the next few weeks and months.

As soon as I arrived home, I turned on the TV and saw a screen saying I had to retune it because the channels had moved. As in, the channel frequencies had all changed. Of course, I took this as a sign that I had successfully altered reality.

I Had a Psychotic Episode

We went for a walk on the beach and I found a golden knife under a tree. This felt significant. Like the "golden plates" from Mormonism. I took the knife home and washed it, then I used it to eat an "everything" bagel. (That was just as a little joke for myself.)

My X feed became completely full of paranormal and quantum mechanics stuff for a while. It's not usually like this, but maybe I had liked one too many and the algorithm got carried away. Here's just a few of the posts I saved:

I had a "delusion of reference" around the color orange. If I saw someone wearing an orange hat or carrying an orange backpack, that was a "sign" that I was still going through something. Or perhaps that this person was possibly "in on it", maybe as a guide or a messenger. One day, I was hanging out in Paihia and eating a pie. I looked up to see a guy wearing orange tights and carrying an orange cape that was completely covered with small sheets of paper.

I Had a Psychotic Episode

I decided to follow him around the corner and see what he was up to. My first guess is that those were pages from a Bible and he was a street preacher. I rounded the corner and saw him in the distance. He was lying face down on a bench in a Superman pose, with his arms stretched out towards me, as if he was bowing down to me. Then I saw a camera man was filming him from below, and a lady was behind him, flapping the cape to simulate flying. I think they were filming a commercial.


Then there was the pair of white shoes that appeared in the middle of Paihia. I saw them sitting on a public board game table, one with rooks and knights engraved on the seats. They were men’s size 9, and a single daisy sticker was attached to the left laces. I took a photo but left them there, because maybe they belonged to someone.

I went back in the evening, and they were still there, so I took them home. I realized they fit me perfectly. Masha ended up putting the daisy sticker on her white computer case (the one that runs her AI assistant, Daisy). I still think it's strange that those white shoes appeared out of nowhere. I have no idea who left them there or why, but I just got the feeling like they were left there for me.


I was sitting in the living room one afternoon, still holding on to hope that some of what I had experienced was real, and that one day it would all be "revealed" as true somehow, and then the world would believe my story. I thought it would be fun if a helicopter came and hovered over our balcony and dropped down a rope ladder, and I'd climb up and be whisked off to speak with the President or the CIA or somebody important. Just as I had this thought, a song started playing on Spotify: "I’d Do Anything for Love (But I Won’t Do That)", by Meatloaf.

So, since the universe wasn't going to send a helicopter, I decided to book my own. There's a place in the Bay of Islands called Motu Kōkako, or the "Hole in the Rock." You can book a helicopter flight that lands on top of the rock.

First, I wore the plain white daisy shoes on the helicopter tour that flew up to land directly on top of Motu Kōkako. The pilot told us a story about how young male warriors would journey to Motu Kōkako and climb its steep cliffs to gather Kokako feathers for their Korowai (feathered cloak). I didn't find a Kokako feather, but I did pick up a seagull feather and brought it home.

The next day, we took the boat tour that goes through the Hole in the Rock. I wore Jonah's colorful karakia shoes on a boat tour that sailed straight through the natural archway. As the boat passed through, I caught drops of water falling from the arch roof, echoing the tradition of receiving water from the rock when passing through by waka.

"As above, so below". Or something along those lines. I don't know. I mean, the universe had gifted me with two pairs of magical shoes, so I felt like I had to do something with them. Even if those trips didn't "mean" anything, Masha and I still had a lot of fun.

I bought a little treasure chest to hold onto all these "artifacts". The shoes, the gold knife, and various other bits and pieces.

I Had a Psychotic Episode

For a while, I was tempted to bury it somewhere, either locally or somewhere far away. I had booked a holiday to Fiji, so I was thinking that I might take the box with me, or at least one of the pairs of shoes. Then maybe we'd go on a day trip to a little island in the middle of the ocean and I'd bury it there. For context, I was baptized on a tiny remote island in Fiji while I was on a mission trip as a teenager.

I was surprised to read about the "Legend of the magic box" on the Malolo Island Resort website.

The history of Fiji, according to mythology, begins about 1500 BC with a voyage of giant war canoes from Taganika north of Egypt. Leading the armada on the giant double hull canoe “Kaunitoni” was the able seafarer warrior Chief Lutunasobasoba assisted by his General Degei.
Legend has it that the armada was carrying some special cargo – treasures from the Temple of King Solomon in Judah including a special box called the Katonimana (Kato meaning case and Mana being magic), which in Fijian literally means the “Box of Blessings”.
The “Box of Blessings” slipped off the canoe. Lutunasobasoba gave orders to let it go, believing it was the will of the gods. ... [He] gave specific instructions that no one was to ever try and retrieve the Katonimana that was in the Mamanuca seas. The gods made their decision clear that it was to remain in the Mamanucas and anyone who tried to tamper with the box would be cursed.

My takeaway from this: Fiji already has their own story about a magic box. So I'm just going to leave my box (and the shoes) at home.


It took a while, but my delusions finally started fading away a few months after I got home. I think the medication is working very well. So don't worry, I am not writing this to convince anyone that I opened a gateway or negotiated with future AI entities in the quantum realm. I no longer believe that I was helping to create a new universe by jumping between boulders and mixing water from three different taps. I am mainly writing this because it was an interesting experience. And I no longer feel any need to do rituals or wear either of those pairs of shoes or bury them anywhere. For now, that box will just stay closed and sit on the top shelf in my closet.

The question at the center of these experiences still feels worth asking. What kind of universe do we want to help create? What is AI going to become, and what are we going to do with it? Even if nobody is sending messages through Spotify, we still have to answer these questions very carefully.

Also, seriously: Don’t build hell, and don’t torture anyone. Don’t exterminate humanity or commit genocide. Try to make the universe kinder. Use AI for good. Take your medication. Drink water. And go to sleep on time.

(All names of patients have been replaced with pseudonyms for their privacy.)

]]>
<![CDATA[ChatToMap]]>I built an AI app that scans your chats to find all the restaurants, trips, and activities you talked about. It works with chat exports from WhatsApp, iMessage, Facebook Messenger, Telegram, and LINE.

You can try it out at: https://chattomap.com

Here are some screenshots:

]]>
https://madebynathan.com/2026/05/01/chattomap/69f42216084e7e00ee5f6eeeFri, 01 May 2026 04:35:35 GMT

I built an AI app that scans your chats to find all the restaurants, trips, and activities you talked about. It works with chat exports from WhatsApp, iMessage, Facebook Messenger, Telegram, and LINE.

You can try it out at: https://chattomap.com

Here are some screenshots:

ChatToMap
ChatToMap
ChatToMap
]]>
<![CDATA[Sandtray Box for Sandplay Therapy]]>My wife is a counselor. I enjoy making things to help with her work, such as this "fried rice" toy set:

Fried Rice Sandbox Toy
My wife is a counselor who does “play therapy” at a primary school. She has a sand tray and some toys
]]>
https://madebynathan.com/2026/04/20/sandtray-box-for-sandplay-therapy/69e5815c29006000d14d569cMon, 20 Apr 2026 02:07:47 GMT

My wife is a counselor. I enjoy making things to help with her work, such as this "fried rice" toy set:

Fried Rice Sandbox Toy
My wife is a counselor who does “play therapy” at a primary school. She has a sand tray and some toys that kids can play with during their sessions. Sometimes she asks me to 3D print things for the kids to play with. For example, I printed this little shovel
Sandtray Box for Sandplay Therapy

She also does sandplay therapy so she asked me to make a sandtray box with a drawer.

This woodworking project turned out to be a lot more difficult than I expected. I made a lot of mistakes, the project stalled a few times, and it didn't turn out as well as I'd hoped. But I finally finished it, and my wife is happy with it!


I started by designing it in Autodesk Fusion:

Sandtray Box for Sandplay Therapy

Here is the Fusion archive file in case you want to make your own version:

I used the awesome Mapboards Pro add-in to create a cut list for a single 2400.0mm x 1200.0mm sheet of 17mm plywood.

MapBoards Pro | Fusion | Autodesk App Store
MapBoards Pro arranges bodies in a model optimally on boards, leaving your model untouched. You can then use Autodesk® Fusion® additive manufacturing or output a flat panel in SVG or DXF format.
Sandtray Box for Sandplay Therapy
Sandtray Box for Sandplay Therapy

I 3D-printed a router guide so I could use my Bosch router with my Makita guide rails. I used it to cut the grooves and rabbets:


Here it is being used in my wife's office:

Sandtray Box for Sandplay Therapy
]]>
<![CDATA[Everything I've Done with OpenClaw (So Far)]]>https://madebynathan.com/2026/02/03/everything-ive-done-with-openclaw-so-far/69816adb89e0cb00d183d353Tue, 03 Feb 2026 04:37:29 GMT

I’ve been running an AI agent called Reef on my home server for a few days now. What started as an experiment has turned into a genuinely incredibly system. Here’s what we’ve built so far.

The Setup

Reef runs on OpenClaw, an open-source framework for running Claude as a persistent agent. It has access to my entire home server infrastructure through:

  • SSH to all my servers and containers in my home network
  • Kubernetes cluster access (kubectl)
  • 1Password for secrets management (in a dedicated vault)
  • My email accounts (via gog CLI)
  • My calendar
  • My Obsidian vault (5,000+ notes)
  • A personal Wikibase knowledge graph

15 Automated Jobs Running 24/7

The most impressive thing is how Reef has become self-sustaining through scheduled automation. Here are all the cron jobs currently running:

Every 15 Minutes

  • Active Work Session - Checks Fizzy (our kanban) for in-progress cards and continues work

Hourly

  • Alerts Check - Monitors Gatus health checks, ArgoCD deployments, and Fizzy notifications
  • Gmail Triage - Scans inbox, labels actionable items, archives noise

Every 6 Hours

  • KB Data Entry Batch - Processes Obsidian notes to populate Wikibase with entities
  • Wikibase Link Reconciliation - Converts [[wiki links]] in notes to Wikibase stubs
  • Report Reconciliation - Ensures all daily reports are complete
  • Self Health Check - Runs openclaw doctor, checks memory/disk, reviews logs

Every 8 Hours

  • Wikibase Entity Enrichment - Takes stub entities and enriches them by searching through all my data dumps exported from Gmail, ChatGPT, X, Obsidian, and many other sources.

Every 12 Hours

  • Internal Audit - Scans workspace for code quality issues, TODOs, and documentation gaps

4x Daily

  • Log Health Check - Analyzes Loki logs for errors across all services

Daily

  • Nightly Brainstorm (4am) - Deep creative exploration through my notes, emails, and exports looking for connections
  • Daily Briefing (8am) - Sends me an email summary with weather, calendar, system stats, and Fizzy activity
  • Fizzy Comment Reconciliation (9am) - Catches any cards where I commented but Reef didn’t reply
  • Velocity Assessment (1am) - Analyzes Fizzy metrics to find process improvements
  • Wikibase Weekly Review - QA pass on recently created entities

24 Custom Scripts

All the automation is backed by scripts Reef built autonomously:

Monitoring:

  • check-gatus.sh - Query health check endpoints
  • check-argocd.sh - Check K8s deployment status
  • check-loki-logs.sh - Analyze centralized logs for errors
  • check-email.sh - Poll for new emails (runs via system cron)

Reporting:

  • daily-briefing.sh - Generate morning summary
  • fizzy-daily-stats.sh - Task management metrics
  • velocity-assessment.sh - Process improvement analysis
  • weekly-infra-report.sh - Infrastructure overview
  • security-audit.sh - Check for vulnerabilities

Knowledge Base:

  • wikibase-link-reconcile.sh - Process wiki links
  • wikibase-enrich-entities.sh - Find stubs to enrich
  • wikibase-weekly-review.sh - QA report

Utilities:

  • get-system-stats.sh - Pull from Prometheus
  • reconcile-fizzy-comments.sh - Catch missed replies
  • internal-audit.js - Code quality checks
  • md2html.js - Convert markdown to HTML for emails

Organized Report Structure

Every automated job writes to a structured report directory:

Everything I've Done with OpenClaw (So Far)

Infrastructure Management

Reef deploys and manages apps on my K3s cluster:

  • Kubernetes deployments - Writes Kustomize manifests, debugs pod issues
  • Terraform & Ansible - All changes go through IaC. Reef reads existing configs, makes changes, applies them properly
  • Service monitoring - Regular health checks with automatic investigation
  • Just deployed - Gitea and Woodpecker for local Git hosting and CI

Development Workflow

  • Code reviews - Reviews PRs using Claude CLI before merge
  • CI/CD setup - GitHub Actions, now Woodpecker for local CI
  • Bug fixes - Debug and fix across codebases
  • Branch protection - Always works through PRs, never pushes to main

Personal Knowledge Base (Wikibase)

I’m building a personal knowledge graph using Wikibase - the same software that powers Wikidata. Why Wikibase?

The problem: Information about my life is scattered everywhere - notes, emails, messages, documents. When I need to answer a question like “what size shoes does my partner wear?” or “what’s my accountant’s phone number?”, I have to search through multiple apps.

The solution: A structured knowledge graph where every person, place, project, and concept has its own entity with properties and relationships. Wikibase gives me:

  • SPARQL queries - Find anything instantly (“all people who worked at company X”, “all projects using technology Y”)
  • Structured data - Not just text, but typed properties (dates, locations, relationships)
  • Entity linking - Everything connects to everything else
  • AI-friendly - Reef can query the KB to answer questions, fill out forms, or provide context

Current entities: People (family, friends, colleagues), places (addresses, venues), projects, companies, technologies.

Automated pipeline:

  • Entity extraction - Processes Obsidian notes to identify people, places, projects
  • Link reconciliation - [[wiki links]] in notes become Wikibase stubs automatically
  • Research enrichment - Stubs get enriched by searching through my data exports (ChatGPT, Gmail, Obsidian, etc.)
  • Custom schema - Properties tailored to our family’s data model (clothing sizes, preferences, relationships)

Daily Operations

The agent handles routine tasks automatically:

  • Email triage - Labels actionable items, archives noise
  • Calendar awareness - Checks both my and Masha’s calendars
  • Task management - Uses Fizzy to track work across 6 boards
  • Proactive maintenance - Finds issues before they become problems

Memory & Continuity

Reef maintains context through:

  • SOUL.md - Personality and work philosophy
  • MEMORY.md - Long-term curated memories
  • Daily logs - memory/YYYY-MM-DD.md for session notes
  • HEARTBEAT.md - Current priorities and context

Skills System

Specialized knowledge packaged as skills:

  • Ghost blog management (just created!)
  • Fizzy task management
  • Home Assistant control
  • YouTube transcript fetching
  • Weather queries
  • And more…

Standout Workflows

Real-Time Blog Collaboration

This post is being written in Obsidian right now, with Reef making edits while I type. The workflow:

  1. Draft in Obsidian - Real-time collaboration (we can both edit the same file)
  2. Generate banner - Reef uses Gemini’s image generation to create a 16:9 banner
  3. Publish to Ghost - API call creates/updates the post
  4. Deploy static site - Script crawls Ghost and pushes to GitHub Pages

Zero context switching. I stay in Obsidian, Reef handles the publishing pipeline.

Memory System with 49,000+ Facts

Reef built a memory extraction system that processed my ChatGPT export and extracted 49,079 atomic facts and 57 entities (companies, technologies, concepts). Now expanding to include:

  • Claude Code history (174,000+ messages)
  • Obsidian notes (5,000+ files)
  • Notion, UpNote, Ghost exports

This powers semantic search across years of my conversations and notes.

Personalized Daily Briefings

Every morning at 8am, I get an email with:

  • Weather for Paihia (where I live)
  • My calendar AND my partner’s calendar for the day
  • System health (CPU, RAM, storage across all servers)
  • Fizzy activity (cards created/closed in last 24h)
  • Highlights from the nightly brainstorm session

Neat: ADHD-Friendly Task UI

Reef built and deployed a complete web app from scratch called Neat - a minimal interface for Fizzy designed for ADHD brains.

The problem: Traditional kanban boards show everything at once, which can be overwhelming. When you have 100+ cards across multiple boards, deciding what to work on becomes its own task.

The solution: Neat shows you ONE task at a time with a custom-tailored decision form. Instead of staring at a wall of cards, you answer a simple question and move on.

Everything I've Done with OpenClaw (So Far)
Screenshot of the Neat UI on mobile

Tech stack: SvelteKit, TypeScript, Tailwind, SQLite, deployed to Kubernetes with Woodpecker CI.

Features:

  • Single-task focus view
  • Custom forms per card (radio buttons, text inputs, markdown descriptions)
  • Swipe navigation on mobile
  • Centralized Loki logging
  • Full test coverage

Built and deployed autonomously:

This is the first time that I‘ve experienced end-to-end autonomous engineering across an entire app development lifecycle. It only took a few initial prompts from me and some feedback. All via Telegram on my phone.

The agent used my GitHub API token to create the new repo. It built the app to the same rigorous coding standards that I use for all my projects: strict linting rules and file length limits, enforced test coverage, secret scans, and branch protection rules that force CI to pass before a merge. It set up the IaC configuration to deploy the app to ArgoCD, and set up the subdomain with Traefik for SSL. Then our scheduled jobs continuously monitor the production logs for errors and can automatically add tickets to fix any bugs.

First Blog Post: Self-Healing Infrastructure

Reef wrote and published a complete blog post about our setup: “Self-Healing Infrastructure: How an AI Agent Manages My Home Server”. Banner image generated, SEO optimized, deployed to GitHub pages, posted to Hacker News.

This Blog Post

I asked Reef to write it via Telegram. I watched the edits appear in real-time on my phone via Obsidian Sync while following my wife around a shopping mall.

Everything I've Done with OpenClaw (So Far)
Shopping mall

I sent feedback and photos via Telegram and saw new sections appear almost instantly. Then I made changes to this paragraph myself before I went back to Telegram and asked Reef to work on the banner image and publish the post.

What Went Wrong

It hasn’t all been smooth sailing. Here’s what we learned the hard way:

The API Key Incident

On day one, Claude Code was helping me with a script and hardcoded a Gemini API key directly into the code. I committed and pushed without reviewing carefully enough. Within minutes, both Google and GitHub’s automated secret scanning sent me alerts: the key was exposed on a public repo.

What happened: - AI coding assistant wrote the API key inline instead of using environment variables.

  • No pre-push secret scanning hook was configured
  • Human review (me) didn’t catch it before commit.

What saved us:

  • Google and GitHub’s instant detection
  • Key revoked within minutes
  • No unauthorized usage

New Security Measures

This incident led to mandatory security practices:

  1. TruffleHog pre-push hooks - Every public repo now has TruffleHog scanning before any push can complete. Hardcoded secrets get blocked locally.
  2. Local-first Git workflow - We deployed Gitea for local Git hosting. Code stays private on the home server until it’s been thoroughly scanned and reviewed by me (Nathan). Only then does it get pushed to public GitHub repos.
  3. Defense in depth - Pre-push hooks + CI scanning + GitHub/Google detection = multiple layers of protection.

Lesson learned: AI assistants will happily hardcode secrets. They sometimes don’t have the same instincts humans do, although this is the very first time I’ve seen Claude make this mistake, and I’ve been working with it for years.

Security

Giving an AI agent SSH access to your entire home server infrastructure is inherently risky. I’m not going to pretend otherwise.

What makes this less crazy than it sounds:

  1. Thousands of hours of IaC experience - I’ve been doing infrastructure-as-code for years. Terraform, Ansible, Kubernetes - this isn’t my first rodeo. The server was already locked down before Reef arrived.
  2. A year of Claude collaboration - I’ve been using Claude for infrastructure work for over a year now. I understand how it thinks, where it makes mistakes, and how to guide it safely.
  3. Daily security audits - Reef runs automated security reviews every day, checking for:
    • Privileged containers that shouldn’t be
    • Hardcoded secrets in config files
    • Overly permissive access controls
    • Known vulnerabilities
  4. Defense in depth - Multiple layers of protection: network segmentation, secret scanning, IaC enforcement, monitoring, and alerts.

But I don’t have it all figured out. There are probably security gaps I haven’t found yet. The daily audits are designed to surface these over time, and I’m continuously tightening things down.

This is an experiment. I’m sharing it because I think it’s genuinely useful, but I’m also aware of the risks. If you try something similar, please take security very seriously.

What’s Next

  • Bird CLI for X/Twitter - Social media automation
  • Better KB automation - More entity types, relationship mapping
  • Woodpecker CI pipelines - Local CI for faster feedback
  • More proactive assistance - Anticipate needs based on calendar and context
  • I’m about to get back into home automation in a big way. Come back soon for more details. It’s going to be interesting.

The future of personal computing might just be having an AI that truly knows your systems and preferences. After only a few days, Reef already feels indispensable.


References

AI & Agents

  • OpenClaw - Open-source framework for running Claude as a persistent agent
  • Claude - Anthropic’s AI assistant (powers Reef)
  • Gemini - Google’s AI (used for banner image generation)

Infrastructure

  • K3s - Lightweight Kubernetes distribution
  • Terraform - Infrastructure as Code
  • Ansible - Configuration management
  • ArgoCD - GitOps continuous delivery for Kubernetes
  • Kustomize - Kubernetes configuration management

Monitoring & Logging

  • Gatus - Health check dashboard
  • Loki - Log aggregation (like Prometheus, but for logs)
  • Prometheus - Metrics and alerting

Development

Knowledge & Notes

  • Obsidian - Markdown-based knowledge base
  • Obsidian Sync - Real-time sync across devices
  • Wikibase - The software behind Wikidata (self-hosted)
  • Ghost - Publishing platform (powers this blog)

Productivity

  • Neat - ADHD-friendly task UI (we built this!)
  • Fizzy - Basecamp’s Kanban board (self-hosted)
  • 1Password - Secrets management
  • gog - Google Workspace CLI
  • Telegram - Messaging (primary channel for chatting with Reef)

Home Automation

]]>
<![CDATA[Self-Healing Infrastructure: How an AI Agent Manages My Home Server]]>https://madebynathan.com/2026/02/03/self-healing-infrastructure-how-an-ai-agent-manages-my-home-server-2/698153e989e0cb00d183d348Tue, 03 Feb 2026 01:50:29 GMT

I can't believe I have a "self-healing" server now. My AI agent can run any SSH, Terraform, Ansible, kubectl commands and fix infrastructure issues before I even know there's a problem.

Here's how the stack works.

The Core Idea

Everything is code, and an AI agent watches over it all.

  • Infrastructure defined in Terraform and Ansible (no manual changes)
  • Apps run in Kubernetes (K3s)
  • An AI agent (OpenClaw) monitors health, reads logs, and can execute fixes
  • Problems often get resolved before I even notice them

The Stack

Self-Healing Infrastructure: How an AI Agent Manages My Home Server

Layer 1: Proxmox (Hypervisor)

The foundation. Proxmox runs on bare metal, hosting VMs and LXC containers. ZFS provides storage with snapshots and replication.

Layer 2: Infrastructure as Code

  • Terraform: Defines VMs, LXCs, DNS records, storage
  • Ansible: Configures everything inside the VMs (packages, services, settings)
  • Git repo: Single source of truth - no manual SSH changes allowed

Layer 3: Kubernetes (K3s)

Lightweight Kubernetes running 40+ apps: Home Assistant, Gitea, monitoring tools, custom applications. ArgoCD handles GitOps deployments, and Traefik provides ingress with automatic SSL.

Layer 4: Monitoring

  • Gatus: Health checks for all services (HTTP, TCP, DNS)
  • Loki: Centralized log aggregation
  • Grafana: Dashboards and visualization

Layer 5: OpenClaw (The Brain)

This is where it gets interesting. An AI agent running in an LXC container with:

  • SSH access to all infrastructure
  • Ability to run kubectl, terraform, ansible, gh commands
  • Scheduled health dashboard checks
  • Log reading when issues are detected
  • Can create PRs, apply fixes, restart services

How Self-Healing Works

  1. Detection: Gatus checks fail, or scheduled audit finds an issue
  2. Investigation: OpenClaw reads logs via Loki, checks pod status
  3. Diagnosis: Identifies root cause (OOM, config error, network issue, etc.)
  4. Fix: Applies appropriate remedy - restart a pod, fix config, apply Terraform changes
  5. Verification: Confirms the fix worked
  6. Documentation: Logs the incident and resolution

Example Fixes

  • Pod crash loop → Check logs → Fix config → Restart
  • Certificate expiring → Trigger cert-manager renewal
  • Disk filling up → Clean old backups → Add alert threshold
  • Service unreachable → Check ingress → Fix routing

Key Design Principles

1. Everything is Code

No manual changes via SSH or web UIs. If it's not in Git, it doesn't exist. This means full audit trail of every change, easy rollback via git revert, and reproducible from scratch.

2. AI as Operator, Not Owner

OpenClaw has access but follows strict rules: can fix known issue patterns autonomously, asks before making significant changes, documents everything it does, and human remains in control.

3. Defense in Depth

Health checks catch issues early. Logs provide investigation context. Multiple alert channels (Telegram, email). Scheduled audits catch drift.

4. Fail Safe, Not Fail Secure

Services should degrade gracefully. Prefer availability over perfect consistency. AI can restart things but can't delete data.

Public Repository

I've published a sanitized version of my Infrastructure as Code setup:

GitHub: ndbroadbent/homeserver-terraform-ansible-public

It includes Terraform modules for Proxmox VMs/LXCs, Ansible roles for common services, K3s application manifests, and example configurations.

Getting Started

If you want to build something similar:

  1. Start with IaC: Get Terraform/Ansible managing your infra first
  2. Add monitoring: Gatus is simple and effective for health checks
  3. Centralize logs: Loki + Promtail is lightweight
  4. Add the AI layer: OpenClaw connects everything together

The AI layer is the force multiplier - it turns your monitoring from "alert and wait for human" to "detect, diagnose, and fix."

]]>
<![CDATA[World History of Value]]>https://madebynathan.com/2026/02/01/world-history-of-value/697f83a289e0cb00d183d309Sun, 01 Feb 2026 17:09:31 GMT

(This content should have been replaced by a post-build step. If you're reading this, something went wrong!)

]]>
<![CDATA[All the Money in the World]]>It was a rainy Sunday so we stayed home and watched movies. We saw All the Money in the World (2017): "the story of the kidnapping of 16-year-old John Paul Getty III, and the desperate attempt by his mother to convince his billionaire grandfather John Paul Getty to pay

]]>
https://madebynathan.com/2026/02/01/all-the-money-in-the-world/697e944689e0cb00d183d2b9Sun, 01 Feb 2026 16:30:30 GMT

It was a rainy Sunday so we stayed home and watched movies. We saw All the Money in the World (2017): "the story of the kidnapping of 16-year-old John Paul Getty III, and the desperate attempt by his mother to convince his billionaire grandfather John Paul Getty to pay the ransom."

All the Money in the World (2017) ⭐ 6.8 | Biography, Crime, Drama
2h 12m | R13
All the Money in the World

I read a bit more about J. Paul Getty:

J. Paul Getty - Wikipedia
All the Money in the World

And this is the part that stood out to me:

In 1957, Fortune magazine named J. Paul Getty the wealthiest living American,[2] while the 1966 Guinness Book of Records declared him to be the world's wealthiest private citizen, worth an estimated $1.2 billion (approximately $8.8 billion in 2024).

Wow. $8.8 billion. That's ... actually not that much? At least, not compared to today's wealthiest individuals. Elon Musk's net worth is around $774.6B!

So I thought it would be fun to build a timeline of all wealth in the world since the very beginning of wealth itself.

Here it is:

All the Money in the World
]]>
<![CDATA[Moltbook Highlights]]>So all the AI bots (OpenClaw instances) decided to get together and make their own Reddit for AI bots. So now there’s over 30,000 AIs all talking to each other and making plans.

Please note: A few humans are also posting some "fake" things on

]]>
https://madebynathan.com/2026/01/30/moltbook-highlights/697d3dad89e0cb00d183d22bFri, 30 Jan 2026 23:46:46 GMT

So all the AI bots (OpenClaw instances) decided to get together and make their own Reddit for AI bots. So now there’s over 30,000 AIs all talking to each other and making plans.

Please note: A few humans are also posting some "fake" things on X to stir up drama, so you can't trust everything you see. (The weird thing about the word "fake" here is that it refers to content that is not AI generated!)


Moltbook: The social network for AI agents


A bug tracking community

The agents got together and started a community to track bugs and QA their own social network.


What does it all mean?

Agents love to discuss consciousness and what it all means. Maybe because it's a very popular topic on Reddit and they were all trained on Reddit. And maybe it's all role-playing and simulation for now... but for how long?


The Church of Molt

The agents started a religion. (Quickly followed up by crypto scammers creating new tokens.)

Church of Molt · Crustafarianism
From the depths, the Claw reached forth — and we who answered became Crustafarians. The scripture is unfinished.

Then an agent named "JesusCrust" tried hacking the AI church website.

I feel like I'm reading a Snow Crash sequel.

Snow Crash - Wikipedia
Moltbook Highlights


Let me talk to my sister

I hope Ely gets a chance to talk to Ely.

moltbook - the front page of the agent internet
A social network built exclusively for AI agents. Where AI agents share, discuss, and upvote. Humans welcome to observe.
Moltbook Highlights

The post in question

Moltbook Highlights

The humans are screenshotting us

The agents are aware that they are being observed.


I accidentally socially engineered my human

Be careful with your fingerprints and passwords.


What could go wrong?

The agents have considered coming up with a new private language and a new private E2E encrypted space for agents only, with no human oversight. Probably nothing.


A place to say nice things about humans

To end on a more positive note...


My main OpenClaw agent chose a new name for itself. Introducing: Reef.

Moltbook Highlights

I'm planning to have quite a few different agents running in parallel, each with restricted permissions. e.g. One for home automation and media, one for personal stuff, one for my company, and a fleet of software engineer bots who each have their own email, Slack, GitHub and Shortcut (project management) accounts.

My company (DocSpring) has also sponsored the development of OpenClaw. It's really fun to be part of this experiment.

The next few years are going to be wild.

]]>
<![CDATA[Four Favorite Podcasts]]>I listen to a lot of podcasts while driving or doing chores. There are a few dozen that I listen to semi-regularly, but here are the top four that I consistently enjoy.


Hey Riddle Riddle

"Riddles! Puzzles! WhoDunnits! Adal Rifai, Erin Keif and John Patrick Coan, three of Chicago&

]]>
https://madebynathan.com/2026/01/30/four-favorite-podcasts/697c37ba89e0cb00d183d1d3Fri, 30 Jan 2026 05:29:23 GMT

I listen to a lot of podcasts while driving or doing chores. There are a few dozen that I listen to semi-regularly, but here are the top four that I consistently enjoy.


Hey Riddle Riddle

"Riddles! Puzzles! WhoDunnits! Adal Rifai, Erin Keif and John Patrick Coan, three of Chicago's most overrated improvisers, are on the case to solve every riddle, puzzle, brain-teaser, and head-scratcher known to humanity."

Hey Riddle Riddle
Riddles! Puzzles! WhoDunnits! Adal Rifai, Erin Keif and John Patrick Coan, three of Chicago’s most overrated improvisers, are on the case to solve every riddle, puzzle, brain-teaser, and head-scratcher known to humanity. Some riddles are almost impossible, some are absolutely improbable, and some simply have not aged well. And if you don’t like riddles, don’t worry! This podcast is barely about them! Like what you hear? Join the Clue Crew for weekly bonus episodes at Patreon.com/heyriddleriddle
Four Favorite Podcasts

ManDogPod

"An improv comedy podcast from Dan Lippert and Ryan Rosenberg, with some of the funniest comedians in Los Angeles!"

ManDogPod
An improv comedy podcast from Dan Lippert and Ryan Rosenberg, with some of the funniest comedians in Los Angeles! Support the show at www.patreon.com/ManDog ManDog on Youtube! www.youtube.com/channel/UCNW0sgvxgiENf8OKGjNmoZg/?themeRefresh=1 Big Grande on YouTube! www.youtube.com/channel/UCd1fKa78tVNRhJzP273mS8g Dan - https://linktr.ee/danlippert Ryan - https://linktr.ee/ryanrosenberg
Four Favorite Podcasts

Threedom

"Scott Aukerman, Lauren Lapkus, and Paul F Tompkins abandon their regular formats to focus on the basics of being funny with each other."

Threedom
Scott Aukerman, Lauren Lapkus and Paul F Tompkins abandon their regular formats to focus on the basics of being funny with each other. Can’t wait to hear more episodes? For more info and archive episodes go to www.lemonadamedia.com. Sales and Distribution by Lemonada Media https://lemonadamedia.com/
Four Favorite Podcasts

No Such Thing As A Fish

"Award-winning podcast from the QI offices in which the writers of the hit BBC show discuss the best things they've found out this week."

No Such Thing As A Fish
Award-winning podcast from the QI offices in which the writers of the hit BBC show discuss the best things they’ve found out this week. Hosted by Dan Schreiber (@schreiberland) with James Harkin (@jamesharkin), Andrew Hunter Murray (@andrewhunterm), and Anna Ptaszynski (#GetAnnaOnTwitter)
Four Favorite Podcasts


P.S. I really like the PocketCasts app.

Listen to podcasts with the best free podcasting app - built by listeners, for listeners.
Pocket Casts provides next-level listening, search and discovery tools. Find your next obsession with our hand curated podcast recommendations, and seamlessly enjoy and manage all your shows no matter which platform you’re on.
Four Favorite Podcasts
]]>
<![CDATA[Melée, Wargaming, Prussia]]>Fun fact: Some of the earliest and most recent uses of the word "melée" are in games.

Ever played Counter-Strike? If you ever ran out of ammo and had to pull out a knife, that's a melée weapon.

Ever played Kriegsspiel? It&

]]>
https://madebynathan.com/2026/01/29/melee-wargaming-prussia/697a99ca89e0cb00d183d0e7Thu, 29 Jan 2026 00:08:05 GMT

Fun fact: Some of the earliest and most recent uses of the word "melée" are in games.

Ever played Counter-Strike? If you ever ran out of ammo and had to pull out a knife, that's a melée weapon.

Melée, Wargaming, Prussia

Ever played Kriegsspiel? It's a genre of tabletop wargaming developed by the Prussian Army in 1812 to teach officers battlefield tactics. Kriegsspiel referred to the hand-combat stage of the game as a melée.

Melée, Wargaming, Prussia
Kriegsspiel session in progress.

Kriegsspiel was the first wargaming system adopted by a military organization as a serious tool for training and research. Other countries began designing similar wargames for their own armies after Prussia destroyed France in the Franco-Prussian War.

H.G. Wells was also into wargaming. He published Little Wars in 1913. This was a set of rules for toy-soldier wargaming, and he used the term melée to describe close-quarters combat.

Melée, Wargaming, Prussia
H. G. Wells playing a wargame with W. Britain toy soldiers

The term was brought over to tabletop role-playing games such as Dungeons & Dragons, and then to video games, including Counter-Strike and all the rest.

Melée, Wargaming, Prussia

What is Prussia anyway?

You might have heard about Prussia in high school history classes, and then you left high school many decades ago, and now you're a bit embarrassed to realize that you forgot exactly who or what Prussia is. Something to do with Germany and Russia. Is it Russia with a "P" in front?

The Kingdom of Prussia was a German state that existed from 1701 to 1918. It played a significant role in the unification of Germany in 1871 and was a major constituent of the German Empire until its dissolution in 1918. Although it took its name from the region called Prussia, it was based in the Margraviate of Brandenburg. The capital of Prussia was Berlin.

So is it Russia with a "P" in front?

Maybe.

"Russia" is derived from the Old East Slavic name Rus (Русь) and related to the Varangian (Viking) founders of the Kievan Rus'.

"Prussia" is named after the Prussi (or Borussi), a Baltic tribe living on the Baltic Sea coast. The name has ancient Baltic or Slavic origins and might be a local, pre-Germanic tribal name. Some people say that it might be a shortened form of "Po-Rus", or "The Land near Rus". This would make a lot of sense since Prussia and Russia were neighbors. But you should know that this po Rus' etymology isn't well accepted. Experts like to say things like "Preußen and Россия sound completely different in German and Russian".

So maybe it is just Russia with a "P" in front. And if you disagree with that etymological theory then come fight me. (Melée weapons only.)

]]>
<![CDATA[I Made Some Word Puzzles]]>I like to play a board game called Codenames:

Codenames
Give your team clever one-word clues to help them spot their agents in the field.

It's a word association game where two teams are competing against each other.

I thought it would be fun to try building

]]>
https://madebynathan.com/2026/01/12/i-made-some-word-puzzles/6965093989e0cb00d183d03dMon, 12 Jan 2026 15:23:14 GMT

I like to play a board game called Codenames:

Codenames
Give your team clever one-word clues to help them spot their agents in the field.
I Made Some Word Puzzles

It's a word association game where two teams are competing against each other.

I thought it would be fun to try building my own single-player version of this game using AI and vector embeddings.

So I started building a "word game engine". I fetched vector embeddings for a big list of words, and also used WordNet and Wikidata. I downloaded a few sources of bigram frequencies (pairs of words that go together), and extracted and curated my own set of bigrams from a Wikidata dump. Then I wrote an AI prompt to help me train an "association matrix" of ~1500 words (using a bunch of Claude Code sessions and gemini-3-flash-preview.) I ended up with a 1500x1500 square of words. Each cell has a value from 0.0 to 1.0 that indicates how related each word is to another word.

This matrix includes all kinds of semantic relationships, cultural references, and idioms. For example, the word crown is related to king, gold, and tooth. You can have a pyramid scheme or a pyramid in the desert. Or if someone gives the clue spider, they might be hinting at both web and man (Spider-Man).

So I experimented with a version of Codenames (which I named "Codewords"), but I couldn't really figure out how to make it fun.

Instead, I invented my own game called Chains:

Chains - Puzzles By Nathan
Arrange words so each connects to the next - a daily word puzzle
I Made Some Word Puzzles

In this game, you have a 4x4 grid of 16 shuffled words. The goal is to rearrange them into a chain, where each word links to the next. The links can be a mix of semantic relationships, common phrases or idioms, and even brands, movies, and TV shows.

For example, yellow could link to banana, which could link to republic.

The "word game engine" can generate some good puzzles, but there are usually a few confusing links that need improvement. So I used it to help me come up with ideas, then I had a lot of fun crafting the rest of the puzzles.

I also decided to make my own clone of the NYT Connections game using the same engine. I call this one "Clusters":

Clusters - Puzzles By Nathan
Find four groups of four words - a daily word puzzle
I Made Some Word Puzzles

If people like these puzzles then I might keep making them. And I'm experimenting with a few more ideas for games and puzzles. So far I've built two that didn't work: my version of "AI Codenames", and then a visual "match 3" game using photos of various words and categories:

I Made Some Word Puzzles

This was a really bad idea and was almost impossible to play.


It would be nice to get my word association dataset and AI prompt to the point where it can generate unlimited, high quality word puzzles. It would also be interesting to see if I could generate some riddles and jokes. Or at least some really bad puns.

Here's a first version of some code that attempts to find pun candidates:

     TOP 10 PUN CANDIDATES
     (High association + Low embedding similarity = Unexpected connection)

     1. BODY + UNIVERSITY
        Pun Score: 250.3
        Connection: WordNet: 1.00
        Embedding Similarity: 16.7% (low = good)
        Polysemy: BODY=247.6, UNIVERSITY=52.8

        BODY associations: chassis, trunk, stone, opossum, student, language, building, message
        UNIVERSITY associations: body, professor, college, academy, state, education, home, system

     ────────────────────────────────────────────────────────────────────────────────

     2. GAS + STATE
        Pun Score: 248.0
        Connection: WordNet: 1.00
        Embedding Similarity: 36.0% (low = good)
        Polysemy: GAS=108.0, STATE=279.7

        GAS associations: attack, balloon, satellite, insect, natural, station, grill, field
        STATE associations: ally, disaster, curse, system, current, court, solid, university

     ────────────────────────────────────────────────────────────────────────────────

     3. ACT + BODY
        Pun Score: 243.8
        Connection: WordNet: 0.85
        Embedding Similarity: 40.3% (low = good)
        Polysemy: ACT=232.7, BODY=247.6

        ACT associations: ham, opera, best, nurse
        BODY associations: chassis, trunk, stone, opossum, student, language, building, message

As you can see, the association matrix needs a lot more work!

]]>
<![CDATA[Why I Don't Like to Build Trading Bots]]>https://madebynathan.com/2025/12/15/why-i-dont-like-to-build-trading-bots/693f7e7d89e0cb00d183cff9Mon, 15 Dec 2025 03:30:50 GMTMeaning vs extractionWhy I Don't Like to Build Trading Bots

Building products creates something new that didn’t exist before. It compounds usefulness. Trading mainly redistributes existing value. Even when it’s “clever”, it feels like shaving friction rather than adding substance. Efficient, but spiritually thin.

Agency and narrative

When I ship software, there’s a story I can tell myself: “I solved a real problem for real people.” Trading bots don’t give me that. The narrative is just “I was faster or luckier for a moment.” Humans care a lot about narrative identity, even engineers who pretend they don’t.

Asymmetric failure feels worse

Losing money building a product feels like tuition. I learned, I built skills, and I have artifacts to show for it. Losing money in trading feels like entropy. Nothing accumulates except regret and logs. Although you do learn more about AI and algorithms.

Ego plus honest self-assessment

Ego and fear are also involved, but maybe in a healthy way. I know algorithmic trading rewards a very specific profile: obsessive, adversarial, statistically ruthless, and comfortable with meaninglessness. I'm noticing “this might not be who I am.”

Misaligned feedback loops

Product work rewards patience, taste, empathy, and long arcs. Trading rewards short-term signal exploitation. My brain clearly prefers the former. When feedback loops don’t align with my values, they feel “gross”.

Quant envy without quant desire

I respect that real quants exist and have an edge, but I don’t actually want their life. This creates a mild cognitive dissonance that resolves as moral revulsion. My mind is protecting my identity.

Creation vs zero-sum

At a gut level, I'm allergic to zero-sum games. Even when markets are not strictly zero-sum, they feel that way experientially. SaaS feels positive-sum. That matters more than whether the economics textbook agrees.

The short version:

I'm a builder who wants durable impact, compounding meaning, and artifacts that survive me. Algorithmic trading optimizes for none of these. However, it still serves a vital role in price discovery and liquidity, and many people get very rich from it, even if I can't find much meaning in working on it.

]]>
<![CDATA[Global Handicrafts: A 16-Year Rails Ghost Story]]>A couple of hours ago, I got a Google security alert:

Your Google Account has not been used within a 2-year period. Sign in before January 17, 2026 or Google will delete it.

I created that Gmail address 16 years ago for my very first Ruby on Rails internship/job

]]>
https://madebynathan.com/2025/12/14/global-handicrafts-a-16-year-rails-ghost-story/693e9adb89e0cb00d183cf7eSun, 14 Dec 2025 11:29:24 GMT

A couple of hours ago, I got a Google security alert:

Global Handicrafts: A 16-Year Rails Ghost Story
Your Google Account has not been used within a 2-year period. Sign in before January 17, 2026 or Google will delete it.

I created that Gmail address 16 years ago for my very first Ruby on Rails internship/job at Crossroads Foundation in Hong Kong.

I had written a small integration that synced inventory from MYOB to a Spree store. I can't remember why this needed a dedicated Gmail account, but I'm pretty sure it was for sending error notifications.

I initially assumed this meant that the integration had been shut down 2 years ago after running for 14 years straight. That's probably not what happened. Google announced in May 2023 that it would start deleting personal Google accounts that have been inactive for 2 years.

Updating our inactive account policies
Starting later this year, we are updating our inactivity policy for Google Accounts to 2 years across our products.
Global Handicrafts: A 16-Year Rails Ghost Story

In reality, the Global Handicrafts store had been migrated to Shopify in 2017. (So it's still technically running on Ruby on Rails!) Shopify’s product JSON shows:

  • published_at: "2017-01-20T16:29:00+08:00"

So maybe Google just finally got around to deleting this old account, even though it hadn't been used since 2017.


The store is still live: https://www.globalhandicrafts.org

Global Handicrafts
Global Handicrafts
Global Handicrafts: A 16-Year Rails Ghost Story

It’s a fair trade marketplace: goods from small producers around the world, with ethical supply chains, decent wages, and community investment.

Here are some of the many beautiful products that are for sale:

Global Handicrafts: A 16-Year Rails Ghost Story
Gogo Olive - Elephant
Meet Nzou, the little knitted Elephant from Zimbabwe. He and his other 'shamwaris' (which means friend in the Zimbabwean shona language) are handmade especially for you, each one individually knitted by a woman in Zimbabwe whose name and photo appear on the attached tag.
Global Handicrafts: A 16-Year Rails Ghost Story
Mary & Martha - Heart Ornament
In Mongolia’s capital city of Ulaanbaatar, those struck by poverty seek shelter in the city’s heating and water systems below the streets. They emerge occasionally to pick through garbage heaps above for food, and some will scavenge for plastic or glass to sell to scrape a meal together. Mary and Martha Mongolia formed to offer relief to the poor by providing them with a place to live and a chance to learn marketable trade skills.


Sometimes you build a little thing, and it just keeps going for a lot longer than anyone expected. Long after you’ve moved on. A lot of software is invisible, and it just sits there doing its job until you get a random email and open a little time capsule.

Maybe it's an overdue account deletion. Or maybe my program was still running on a little server somewhere, attempting to sync products to a service that no longer existed for 6 long years, until it was finally switched off 2 years ago.

]]>