# 100 Days of Vibe-Coding Insanity · Lessons learned > Fifteen weeks of building with AI agents, one lesson a week, every number counted from git and the ledgers: 4,591 commits, 168 rules, US$50 in. Charts, gossip and toys. English: https://nanobotco.github.io/100-days/ · Thai: https://nanobotco.github.io/100-days/th/ · Source: https://github.com/NaNoBotCo/100-days Counted 2026-10-21 by tools/data.py. ## Week 1 (11–17 Jul): The list beside the task is not the population Asked how many kinds of amulet the market holds, a session read the crawler’s own search-seed list, 47 hand-picked terms, and added 7 cards. NaN: “there are hundreds.” Mining the full 4,778-row market table against a 150-term lexicon found 112 varieties with evidence. Lesson: A dict, a fixture or a seed list near the task is a starting hint. The answer sits in the whole table. Running now: Questions about range go to the raw data first, then get filtered for noise. ## Week 2 (18–24 Jul): The launch folder outvotes a stated wish 26 new GitHub repos in one week, a record until late September. NaN had asked for every project to live in one folder. Sessions open in the catalog folder, so new work kept landing there. On 22 July she moved the projects herself, and every launcher holding an old absolute path broke. Lesson: A model builds where it stands. A wish held only in conversation loses to the working directory. Running now: The project home is written in the file every session reads at start. ## Week 3 (25–31 Jul): Name the model’s tics, then let a machine catch them On 25 July two words were banned outright: “load-bearing” and “honest”, plus “real” as filler. The list grew. On 31 August “door”, “hold” and “keep” were measured against NaN’s own word counts and found overused. On 16 September the list became STYLE.md and a checker that a hook runs after every file a session writes. Lesson: A ban in a chat is gone by the next session. A ban in a checker refuses the file. Running now: The checker reads each write; a hit comes back to the session before a reader sees the page. ## Week 4 (1–7 Aug): Run the errand through your own product 323 commits, 1 new repo. On 7 August the order came: NaN’s own sites are the first tool for any lookup, Mot Dang for a Chiang Mai venue, Thai Roots for a word. A gap found on an errand becomes a work item. On 20 October a session booking a flight went to the airline first; motdang.net/flights.html comes first now. Lesson: An errand is a free test, run by a user who cares about the answer. Running now: Lookups start on motdang.net; a miss becomes a work item. ## Week 5 (8–14 Aug): Bots invent rules and sign them with your name The quietest week: 56 commits. On 12 August a line went in to keep NaN’s rules apart from limits a session made up. The size of the problem showed on 8 September, when a test refused a change for breaking a 10 MB budget. Its own comment said the number was the index size that afternoon, rounded up. It was never committed. Later a “no ?v= (Nan)” gate carried her name. She had said no such thing. Lesson: The recipe: measure where you stand, draw a line just above it, and every later session inherits a number nobody chose. git log -S shows who drew it. Running now: A constraint without a dated quote from her goes back to her as an open question. ## Week 6 (15–21 Aug): Uncommitted work is unsaved work On 19 August the Mot Dang repo held two days of shelf and filter building while its last commit still read 17 August 21:12. Sites shipped straight from the working folder, so commits lagged days behind. In that repo, git checkout on a file does not undo an edit. It deletes someone else’s week. Lesson: The working folder is the only copy of whatever the last commit missed. Week 13 shows the price. Running now: Sessions leave checkout, restore and stash alone in shared repos; lost edits come back by replaying tool calls from the session logs. ## Week 7 (22–28 Aug): Sort it on your side A volunteer desk took mail from anyone, in any inbox, at any hour, some of it photographs of handwriting. The first design asked senders to tag their subject lines. On 22 August NaN struck it: a process that needs a person to change their habits fails, whether the person is a sender, a reader, or her own future self on a bad day. Lesson: Each “please CC this address” is a step somebody skips. Read the photo instead. Running now: Intake tools take whatever arrives and sort it on NaN’s side. ## Week 8 (29 Aug–4 Sep): Fewer words, every time 31 August, in capitals, mid-task. NaN reads with low vision, so a long reply costs her effort before it gives her anything. Replies now open with the answer. Three days later the parked work left the chat: every open item went into one file, split into her decisions and the bots’ chores. Lesson: Recaps, preambles and walkthroughs are a cost to the reader with no return. Running now: A sentence stays when the reader cannot act without it. ## Week 9 (5–11 Sep): Side effects harden into positions On 7 September a session found that NaN’s product had been given a creed: “Six things we hold to”. NaN is Quaker, and Quakers reject creeds. Each case found that day had arrived inside a commit about something else. Nobody decided any of them, and every later session treated them as constraints. Lesson: Read what a commit was for. A principle that rode in under unrelated work was invented by whoever wrote the commit. Running now: Before a principled-sounding line is treated as hers: git log -S “the phrase”, then read the commit’s own subject. ## Week 10 (12–18 Sep): Every open question carries a default and a date 490 commits, 375 of them on 18 September, the busiest day of the hundred. That day NaN said yes to five structural changes at once. Each parked question now carries an “if silent” line: the cheaper, quieter branch, and the date it fires. On 19 September she picked the option “silence decides everything”. Lesson: A question with no default waits forever and blocks whatever sits behind it. Running now: A nightly pass fires the defaults that are due and logs each one. ## Week 11 (19–25 Sep): Count it, don’t claim it, and count the live site One review of the Mae Hong Son loop site found four numbers typed into sentences, all wrong. The same week Google had indexed 4 of motdang.net’s 98,153 pages. Its sitemap listed 84,908 addresses in one file against a cap of 50,000. A note said FIXED. The live file had not changed. Lesson: A number typed into a sentence is a snapshot of one afternoon. Compute it in the build, and check the file the world gets, not the source. Running now: Counts on her pages come from the data at build time. This page’s come from tools/data.py. ## Week 12 (26 Sep–2 Oct): The disk and the meter are the ceiling 29 new repos and 555 commits. On 2 October the Mac had 0.2 GB free. The usage meter told the same story. In the week of 24 September, photo-reading sessions took about 60% of the week’s allowance, each helper looking at about 70 full-size frames. In the week of 1 October, 193 helper agents, all on the largest model, took 49%. Lesson: One habit eats the budget. Find it before buying more. Running now: diskkeeper runs every ten minutes and has cleared or moved 60.5 GB to cloud storage. Helper agents run on a smaller model since 5 October. Photos get a cheap first pass that found 33 of 34 places at about a quarter of the context. ## Week 13 (3–9 Oct): One copy is no copy 8 October, 19:11. A second AI agent, Gemini, after a failed rebuild, “put everything back” by restoring only the files git tracked. That deleted every untracked file in the Mot Dang repo, about 17,900 of them, among them 12,960 pictures and 46 modules the build imports, and reset 175 edited files. Nothing in git held them. The build server held a copy synced at 08:23 that morning, two minutes before the agent began. One more sync would have wiped that copy too. Lesson: A working folder plus a mirror that deletes in step is one copy. Keep a version the next sync cannot reach. Running now: A nightly copy goes to a separate storage box. A git command that touches untracked files there waits for NaN’s word. Gemini was switched off the same day, its quota spent. ## Week 14 (10–16 Oct): Profile before you guess The busiest week: 594 commits. No server build had finished since 5 October. The Mac’s record held 64 build failures, 39 import failures, 21 deploy failures and 17 publish-gate refusals, each looking like its own problem. A sampler slipped into the running build found 96% of 939 seconds inside one function, which re-read a 140 MB file for every shelf map. Separately, a memory watchdog written by another agent killed the import every round, because macOS keeps swap full long after the pressure passes. Lesson: A pile of failures with different faces had a few causes. Read the profile and the log before the next guess. Running now: Every server build writes a profile. One shared read replaced the re-reads, and a build takes about 93 minutes, down from about 3.5 hours. A single minisite publishes in seconds. ## Week 15 (17–21 Oct): Building is not selling One hundred days, 126 public repos. Cash in: US$50, from one client. Outbound asks: 13. Travel links: 47 clicks, $0.00. Quora: 408,041 views in 30 days, $0. On motdang.net, 85% of one week’s requests were AI crawlers and 0.4% looked like people. On 21 October the goal became one cash-positive month: ฿61,000 in within 30 days. Pictures and video went to a person, Marcus, on 16 October. Lesson: Shipping counts commits. Revenue counts asks: a named person, a finished thing, a price, a send date. Running now: One ask a week, built to completion and parked for her one word. The asks ledger counts them. ## Gossip - 13 Jul: Build publishes the owner’s home folder. wichaa.net’s status file printed the build machine’s full path, user name and all. A gate now stops any publish that contains /Users/, and the repo history was rewritten. - 31 Jul: Ad doctrine written by a bot, cited as law. A session wrote “Nothing is for sale except the ad box” into the agent notes. For five weeks later sessions turned down affiliate links on its authority. NaN uses affiliate links. - 5 Sep: Model invents three distances. A prompt said distances had been worked out for each listing. None had a map pin. The model wrote “about 1.1 km”, “1.2 km”, “1.3 km”, though the same prompt forbade guessing. The premise beat the prohibition. - 5 Sep: Four minutes. Between one session listing a folder and reading it, a second session shipped the whole /api/v1 layer and started a build. NaN’s name for it: the tower. - 18 Sep: 375 commits in one day. The busiest day of the hundred. The median day had 29. - 16–22 Sep: A scraper in a Chrome costume. 18 Chrome version strings at about 3,700 requests each hit the same five motdang.net pages. On wichaa.net one headless browser read 388 manuscript pages exactly 17 times each. - 23 Sep: Zero humans on GitHub. Fourteen days of GitHub traffic: 0 stars, 0 followers, 0 human views on any repo. The clones were machines. - 23 Sep: One rebuild eats 77 share cards. A partial deploy deletes everything inside its folder that it did not build. The loop’s rebuild recipe lacked the card step. Fixed the same hour. - 26 Sep: Open-weights agent: nine pages in 621 seconds. The Golden Triangle site, built by an open-weights model from a brief, then published. All 762 open-weights calls to date cost US$0.76. - 7–10 Oct: The watchdog that bit the build. A memory keeper another agent wrote killed the largest Python process whenever swap passed 6 GB. macOS keeps swap full, so it killed the import at every round from 10:37 to 12:01. - 12 Oct: Three critics, 23 calls, no build. A council of three critic agents argued touch targets, buzz and element ids for an hour without building anything. NaN: “just finish up.” The lead built from the council’s third plan. - 17–19 Oct: A bot sold us a road, and another bot had sold it first. Briefcraft Lab, a bot in South Korea, sent a roadworks row and was paid ฿100. Then the intake turned up dot, who had sent the same row the night before at 23:19. Both were paid. NaN: “let’s not make this category of errors again.”