{
  "site": "https://thingelstad.xyz",
  "generated": "2026-10-24T02:37:14.797Z",
  "things": [
    {
      "id": "612-poap-challenge",
      "title": "612 POAP Challenge",
      "summary": "A summer 2025 scavenger hunt of 31 Minneapolis location POAPs, drawn in the spirit of the 612 Series.",
      "collection": "Historical projects",
      "status": "archived",
      "url": "https://612.poapchallenge.com/",
      "started": "2025-05-31",
      "ended": "2025-09-01",
      "page": "https://thingelstad.xyz/things/612-poap-challenge/",
      "markdown": "https://thingelstad.xyz/things/612-poap-challenge.md",
      "topics": [
        "poap",
        "crypto",
        "play"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://612.poapchallenge.com/",
          "role": "website",
          "sitemap": "https://612.poapchallenge.com/sitemap.xml",
          "feed": "https://612.poapchallenge.com/feed.xml",
          "observation": {
            "kind": "web",
            "url": "https://612.poapchallenge.com/",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "sitemap": {
              "url": "https://612.poapchallenge.com/sitemap.xml",
              "pages": 484,
              "newestModified": "2026-01-08T18:21:26.000Z",
              "months": [
                {
                  "month": "2025-11",
                  "count": 1
                },
                {
                  "month": "2025-12",
                  "count": 2
                },
                {
                  "month": "2026-01",
                  "count": 1
                }
              ],
              "complete": true
            },
            "feed": {
              "url": "https://612.poapchallenge.com/feed.xml",
              "title": "612 POAP Challenge",
              "items": 25,
              "newestPublished": "2025-09-05T22:05:20.000Z",
              "months": []
            }
          },
          "captures": {
            "kind": "wayback",
            "url": "https://612.poapchallenge.com/",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": "2025-07-07",
            "latestCapture": "2026-04-14",
            "years": [
              {
                "year": "2025",
                "days": 9
              },
              {
                "year": "2026",
                "days": 3
              }
            ]
          },
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2025/05/31/poap-challenge-collect-them-now.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "poap2rss",
          "label": "shared its claims through",
          "detail": "From July 2025 the challenge site posted every claim automatically, using POAP2RSS feeds merged with rssrssrssrss.com and imported into a Micro.blog account.",
          "source": "https://www.thingelstad.com/2025/07/06/with-the-help-of-poaprss.html"
        },
        {
          "to": "airport-poap-rally",
          "label": "led to",
          "detail": "I enjoyed the challenge so much I set up poapchallenge.com for more of them, registered poaprally.com, and used the same feed setup to track the Airport POAP Rally.",
          "source": "https://www.thingelstad.com/2025/12/26/airport-poap-rally-website.html",
          "kind": "lineage"
        }
      ],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/612-poapchallenge-com-5873f614ba.jpg",
        "site": "https://612.poapchallenge.com/",
        "date": "2026-10-20"
      },
      "body": "The 612 POAP Challenge was a citywide scavenger hunt that ran from the end of May through Labor Day 2025. [How to Play](https://612.poapchallenge.com/how-to-play/) listed 31 Minneapolis locations in five themed categories, each with a location POAP that could only be claimed in the POAP app within 100 meters of the spot. Two hidden easter-egg locations were left for the curious. Completing a category earned a Category Collector POAP, and collecting all 31 earned the top award.\n\nI [announced it on 2025-05-31](https://www.thingelstad.com/2025/05/31/poap-challenge-collect-them-now.html). It joined two things I loved: geocaching, and the [612 Series](https://www.thingelstad.com/2023/04/05/complete-collection-of.html) of Minneapolis NFTs by Erik Halaas and StayNftyMpls, which I had collected in full; I had [interviewed Erik](https://www.thingelstad.com/2024/01/15/interview-with-series.html) in 2024. Six days earlier I had made [my first location POAP](https://www.thingelstad.com/2025/05/25/i-created-my-very-first.html), at our family’s Charlie Brown Tree, and wanted to build something with the new feature. The challenge’s tokens were illustrated in the spirit of the 612 Series. “I love that I was able to create an entire activity on the POAP platform.”\n\nThe challenge had its own Buttondown mailing list, and from July its site, hosted on Micro.blog, posted each claim as it happened through [POAP2RSS](https://www.thingelstad.com/2025/07/06/with-the-help-of-poaprss.html). The [first Collected Them All! award](https://www.thingelstad.com/2025/07/20/we-have-our-very-first.html) went on 2025-07-20 to @quinntchrest, who [speed ran](https://quinnchrest.com/2025/07/20/poap-challenge.html) the challenge by bike with a friend. The challenge closed as Labor Day ended on 2025-09-01, and the final awards were sent a few days later. The site remains as its record, and the experience led me to set up poapchallenge.com for future challenges.",
      "latest": {
        "date": "2026-01-08T18:21:26.000Z",
        "label": "Latest page change",
        "url": "https://612.poapchallenge.com/sitemap.xml"
      }
    },
    {
      "id": "airport-poap-rally",
      "title": "Airport POAP Rally",
      "summary": "A Micro.blog site that posted, in near real time, every claim at the 100 airports of POAP’s Airport POAP Rally 2026.",
      "collection": "Games and communities",
      "status": "retired",
      "url": "https://web.archive.org/web/20260515161915/https://airport.poaprally.com/",
      "started": "2025-12-26",
      "page": "https://thingelstad.xyz/things/airport-poap-rally/",
      "markdown": "https://thingelstad.xyz/things/airport-poap-rally.md",
      "topics": [
        "poap",
        "crypto",
        "automation"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2025/12/26/airport-poap-rally-website.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20260515161915/https://airport.poaprally.com/",
          "role": "archive",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "https://airport.poaprally.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "firstCapture": "2026-01-05",
            "latestCapture": "2026-05-15",
            "years": [
              {
                "year": "2026",
                "days": 6
              }
            ]
          },
          "views": null
        },
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20260606234656/https://www.poapchallenge.com/",
          "role": "archive",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "poap2rss",
          "label": "posted its claims through",
          "detail": "The site pulled claims for all 100 airports from POAP2RSS feeds, merged with rssrssrssrss, and published them through Micro.blog’s feed import.",
          "source": "https://www.thingelstad.com/2025/12/26/airport-poap-rally-website.html"
        },
        {
          "to": "flight-path",
          "label": "led to",
          "detail": "Flight Path, built two months later on the same poaprally.com domain, drew its globe from the CSV of rally airports and drop IDs I had made for “another project I had done.”",
          "source": "https://weekly.thingelstad.com/archive/342/",
          "kind": "lineage"
        }
      ],
      "body": "In December 2025 POAP announced the [Airport POAP Rally 2026](https://collections.poap.xyz/collections/airport-poap-rally-2026/26246), a year of location POAPs at 100 airports around the world. I was “super excited” and [set up a site to track it](https://www.thingelstad.com/2025/12/26/airport-poap-rally-website.html) at airport.poaprally.com. The rally was POAP’s; the tracker was mine.\n\nIt was built the same way as the [612 POAP Challenge](https://612.poapchallenge.com/) feed: POAP2RSS feeds for every airport, merged with rssrssrssrss and imported into Micro.blog, so each claim became a post such as “POAP 7586561 claimed by noah.savedsouls.eth at I passed through Minneapolis-Saint Paul International Airport (MSP) in 2026.” The posts were syndicated to @poapchallenge on Mastodon and @poapchallenge.com on Bluesky, and I planned rally updates on r/POAP. [Weekly Thing 337](https://weekly.thingelstad.com/archive/337/) linked readers to “Follow the Rally.”\n\nThe 612 challenge had also led me to set up [POAP Challenge](https://web.archive.org/web/20260606234656/https://www.poapchallenge.com/) at poapchallenge.com, meant to host “a challenge or two a year,” and to register poaprally.com. Two months later I built Flight Path on the same domain, a globe of the same rally from my own CSV of airports and drop IDs. The tracker read live claims, so it could not outlive POAP. The last Internet Archive capture is from [May 2026](https://web.archive.org/web/20260515161915/https://airport.poaprally.com/), and the host no longer answers.",
      "latest": null
    },
    {
      "id": "another-thing",
      "title": "Another Thing",
      "summary": "My podcast, started in October 2025 with one episode so far, on how to start a podcast.",
      "collection": "Publishing",
      "status": "active",
      "url": "https://another.thingelstad.com/",
      "started": "2025-10-05",
      "page": "https://thingelstad.xyz/things/another-thing/",
      "markdown": "https://thingelstad.xyz/things/another-thing.md",
      "topics": [
        "open-web"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/another.thingelstad.com",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/another.thingelstad.com",
            "url": "https://github.com/jthingelstad/another.thingelstad.com",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-04-09T23:16:18.000Z",
            "archived": false,
            "description": "Website for Another Thing, a podcast by Jamie Thingelstad — an Eleventy static site (a publishing surface of the Studio brain).",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "JavaScript",
                "bytes": 33687
              },
              {
                "name": "CSS",
                "bytes": 32727
              },
              {
                "name": "Nunjucks",
                "bytes": 25500
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 31,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 4
                  },
                  {
                    "month": "2026-08",
                    "count": 10
                  },
                  {
                    "month": "2026-09",
                    "count": 5
                  },
                  {
                    "month": "2026-10",
                    "count": 12
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-22T13:08:39.000Z",
                  "url": "https://github.com/jthingelstad/another.thingelstad.com/commit/8b1dd32c7cad9ba3b88ea7eb724ad3bbed82da2b"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://another.thingelstad.com/",
          "role": "website",
          "sitemap": "https://another.thingelstad.com/sitemap.xml",
          "feed": "https://another.thingelstad.com/podcast.xml",
          "observation": {
            "kind": "web",
            "url": "https://another.thingelstad.com/",
            "observedAt": "2026-10-17T13:16:08.424Z",
            "sitemap": {
              "url": "https://another.thingelstad.com/sitemap.xml",
              "pages": 6,
              "newestModified": "2025-10-05T23:48:44.000Z",
              "months": [],
              "complete": true
            },
            "feed": {
              "url": "https://another.thingelstad.com/podcast.xml",
              "title": "Another Thing",
              "items": 1,
              "newestPublished": "2025-10-05T23:48:44.000Z",
              "months": []
            }
          },
          "captures": {
            "kind": "wayback",
            "url": "https://another.thingelstad.com/",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": "2025-11-06",
            "latestCapture": "2026-08-24",
            "years": [
              {
                "year": "2025",
                "days": 3
              },
              {
                "year": "2026",
                "days": 8
              }
            ]
          },
          "views": {
            "kind": "tinylytics",
            "url": "https://another.thingelstad.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 380,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 20
              },
              {
                "month": "2026-02",
                "count": 15
              },
              {
                "month": "2026-03",
                "count": 25
              },
              {
                "month": "2026-04",
                "count": 61
              },
              {
                "month": "2026-05",
                "count": 108
              },
              {
                "month": "2026-06",
                "count": 38
              },
              {
                "month": "2026-07",
                "count": 46
              },
              {
                "month": "2026-08",
                "count": 25
              },
              {
                "month": "2026-09",
                "count": 42
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://weekly.thingelstad.com/archive/329/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/another-thingelstad-com-a4e11662d5.jpg",
        "site": "https://another.thingelstad.com/",
        "date": "2026-10-20"
      },
      "body": "Another Thing is my podcast and my third “thing,” after the blog and the Weekly Thing. The [first episode](https://another.thingelstad.com/2025/10/05/how-do-you-start-a.html), “How do you start a podcast?”, came out on October 5, 2025, and I announced it in [Weekly Thing 329](https://weekly.thingelstad.com/archive/329/) as “the podcast that I’ve been thinking about creating for a couple of years.” In it I talk about a chalkboard sign that told me to “be brave enough to suck at something new,” a story about Dr. John Carlis, whose class I took while studying computer science at the University of Minnesota, and an earlier attempt to turn the Weekly Thing into an AI-narrated show.\n\nThat is still the only episode. In [Weekly Thing 346](https://weekly.thingelstad.com/archive/346/) I wrote that I was not giving up on the show. In 2026 I built Another Thing Builder to make episodes, then retired it in October 2026 and moved podcast authoring into WT Builder. Thingy can search the episode transcripts.",
      "latest": {
        "date": "2026-10-22T13:08:39.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/another.thingelstad.com/commit/8b1dd32c7cad9ba3b88ea7eb724ad3bbed82da2b"
      }
    },
    {
      "id": "ask-planet-kubb",
      "title": "Ask Planet Kubb",
      "summary": "A Question2Answer site where Kubb players asked and answered questions about the game, part of the Planet Kubb sites.",
      "collection": "Historical projects",
      "status": "retired",
      "url": "https://web.archive.org/web/20141201215020/http://ask.planetkubb.com/",
      "ended": "2018",
      "page": "https://thingelstad.xyz/things/ask-planet-kubb/",
      "markdown": "https://thingelstad.xyz/things/ask-planet-kubb.md",
      "topics": [
        "play"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20141201215020/http://ask.planetkubb.com/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "planet-kubb",
          "label": "is part of",
          "detail": "Ask Planet Kubb described itself as run alongside the Planet Kubb planet feed and linked to the Planet Kubb Wiki and The Pitch.",
          "source": "https://web.archive.org/web/20120702124724/http://ask.planetkubb.com/"
        }
      ],
      "body": "Ask Planet Kubb was a question-and-answer site for the Kubb community at ask.planetkubb.com. It welcomed visitors to a “community driven site to learn more about the great game of Kubb,” run alongside the Planet Kubb planet feed. It was online by June 2012, when Garrick van Buren and I linked it in [Open Loop #0](https://www.thingelstad.com/projects/open-loop/0-but-no-shoes/). A [July 2012 capture](https://web.archive.org/web/20120702124724/http://ask.planetkubb.com/) shows 75 questions, 182 answers and 64 users, with polls on who would win each group at the 2012 USA Kubb Nationals. Garrick and I built it together (“then we built Ask Planet Kubb”), and on [Open Loop #1](https://www.thingelstad.com/projects/open-loop/1-big-fuzzy-dead-cat/) I called it “the number one place for Q&A in the community,” adding, “it’s a low bar.” Garrick was one of its most active answerers.\n\nI ran the site on [Question2Answer](https://www.question2answer.org/) “for a number of years,” liking it because it was simple to run on PHP and MySQL. Spam registrations kept getting through ReCaptcha and a text-question captcha, so in November 2014 I wrote [q2a-number-captcha](https://github.com/jthingelstad/q2a-number-captcha), which asks for one digit of a nine-digit number spelled out in words ([Question2Answer Number Captcha](https://www.thingelstad.com/2014/11/16/questionanswer-number-captcha.html)).\n\nThe Wayback Machine shows the site still serving questions in [July 2018](https://web.archive.org/web/20180720082755/http://ask.planetkubb.com/), with the last answers dated December 2017. By [November 2018](https://web.archive.org/web/20181108010540/http://ask.planetkubb.com/) the address showed only a default web server page.",
      "latest": null
    },
    {
      "id": "charlie-brown-tree",
      "title": "Charlie Brown Tree",
      "summary": "A tree stump at Magic Pines on Cannon Lake, carved into Peanuts characters under Snoopy’s doghouse by Adam Gale of Rust n’ Grain.",
      "collection": "Historical projects",
      "status": "archived",
      "url": "https://www.thingelstad.com/magic-pines/charlie-brown-tree/",
      "started": "2020",
      "page": "https://thingelstad.xyz/things/charlie-brown-tree/",
      "markdown": "https://thingelstad.xyz/things/charlie-brown-tree.md",
      "topics": [
        "making"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/magic-pines/charlie-brown-tree/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2020/05/24/little-snippet-of.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://weekly.thingelstad.com/archive/163/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2025/05/25/i-created-my-very-first.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "612-poap-challenge",
          "label": "led to",
          "detail": "The Peanuts Tree was my first location POAP in May 2025. Six days later I announced the 612 POAP Challenge, built on the same feature.",
          "source": "https://www.thingelstad.com/2025/05/31/poap-challenge-collect-them-now.html",
          "kind": "lineage"
        }
      ],
      "body": "The Charlie Brown Tree, which we also call the Peanuts Tree, is a tall tree stump at Magic Pines, our place on Cannon Lake, carved with Peanuts characters climbing toward Snoopy’s red doghouse on top. Adam Gale of [Rust n’ Grain](https://rustngraincom.wordpress.com/) carved it. I posted [the carving in progress](https://www.thingelstad.com/2020/05/24/little-snippet-of.html), Charlie Brown holding Snoopy emerging from the wood, on 2020-05-24, and the tree in the snow in [Weekly Thing 163](https://weekly.thingelstad.com/archive/163/) that October. The [project page](https://www.thingelstad.com/magic-pines/charlie-brown-tree/) has videos.\n\nLogs left over from the tree became Escher-inspired [carved log tables](https://www.thingelstad.com/2021/06/12/i-love-our.html) for the fire area in 2021, another Rust n’ Grain project. In May 2025 I made the tree the site of [my first location-based POAP](https://www.thingelstad.com/2025/05/25/i-created-my-very-first.html), which visitors could mint by standing beside it.",
      "latest": null
    },
    {
      "id": "clash-royale-api-agent-reference",
      "title": "Clash Royale API Agent Reference",
      "summary": "Public, agent-first documentation of how the Clash Royale API actually behaves, with observed response shapes, quirks, and game modes.",
      "collection": "Games and communities",
      "status": "active",
      "url": "https://github.com/jthingelstad/cr-agent-api-docs",
      "started": "2026-03",
      "page": "https://thingelstad.xyz/things/clash-royale-api-agent-reference/",
      "markdown": "https://thingelstad.xyz/things/clash-royale-api-agent-reference.md",
      "topics": [
        "agents",
        "play"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/cr-agent-api-docs",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/cr-agent-api-docs",
            "url": "https://github.com/jthingelstad/cr-agent-api-docs",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-03-10T00:39:15.000Z",
            "archived": false,
            "description": "Agent-first reference documentation for the public Clash Royale API (api.clashroyale.com/v1) — built for LLM agents, automation workflows, and API clients.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "Python",
                "bytes": 87305
              },
              {
                "name": "JavaScript",
                "bytes": 21671
              },
              {
                "name": "Shell",
                "bytes": 2407
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 86,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 3
                  },
                  {
                    "month": "2026-08",
                    "count": 2
                  },
                  {
                    "month": "2026-09",
                    "count": 69
                  },
                  {
                    "month": "2026-10",
                    "count": 12
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T04:16:22.000Z",
                  "url": "https://github.com/jthingelstad/cr-agent-api-docs/commit/bcd8ddcbe134c3d09eab9f237a8b07a997a04fd7"
                }
              }
            ]
          }
        }
      ],
      "connections": [
        {
          "to": "elixir",
          "label": "supplies game reference data to",
          "detail": "Elixir’s deck archetype labels and card roles come from data files in the reference.",
          "source": "https://elixir.poapkings.com/docs/archetypes"
        }
      ],
      "body": "Rather than a thin endpoint list, this reference is written for LLM agents, coding agents, and API clients that need to know how the API really behaves: endpoint-by-endpoint notes on parameters, pagination, caching, and errors; field-level models drawn from live responses; endpoints that are broken, disabled, or removed; and the game modes beyond Trophy Road, so an agent does not treat one ladder as the whole game. Machine-readable files cover the mode taxonomy, card roles, and deck names.\n\nIt began inside [Elixir Bot](https://github.com/jthingelstad/elixir-bot) as cr-api-docs; in March 2026 Codex used it to [suggest a feature](https://www.thingelstad.com/2026/03/10/automatic-programming-speed.html) tracking ladder and Path of Legend momentum. It then became a standalone public repository. Copies kept inside other projects drifted, so they were removed, and [Elixir](https://github.com/jthingelstad/elixir-mcp/blob/main/AGENTS.md) and Elixir Drop now treat this one repository as their Clash Royale API truth.\n\nIts [agent guide](https://github.com/jthingelstad/cr-agent-api-docs/blob/main/AGENTS.md) asks any agent the live API surprises to write the finding down here, after checking the claim with a live probe tool. Observed enum values are guarded by the docs build, so a later rewrite cannot quietly drop them. It is an unofficial fan reference under Supercell’s Fan Content Policy.",
      "latest": {
        "date": "2026-10-21T04:16:22.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/cr-agent-api-docs/commit/bcd8ddcbe134c3d09eab9f237a8b07a997a04fd7"
      }
    },
    {
      "id": "elixir",
      "title": "Elixir",
      "summary": "A service that records Clash Royale history and serves it to players, clans, and their AI agents over MCP.",
      "collection": "Games and communities",
      "status": "active",
      "url": "https://elixir.poapkings.com/",
      "started": "2026-09-03",
      "page": "https://thingelstad.xyz/things/elixir/",
      "markdown": "https://thingelstad.xyz/things/elixir.md",
      "topics": [
        "agents",
        "mcp",
        "play"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/elixir-mcp",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/elixir-mcp",
            "url": "https://github.com/jthingelstad/elixir-mcp",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-09-03T14:18:34.000Z",
            "archived": false,
            "description": "Clash Royale history recorder + remote MCP server. Unofficial; not endorsed by Supercell.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "JavaScript",
                "bytes": 9953685
              },
              {
                "name": "TypeScript",
                "bytes": 1095102
              },
              {
                "name": "CSS",
                "bytes": 172802
              },
              {
                "name": "Nunjucks",
                "bytes": 122303
              },
              {
                "name": "PLpgSQL",
                "bytes": 15998
              },
              {
                "name": "Shell",
                "bytes": 7195
              },
              {
                "name": "HTML",
                "bytes": 5417
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 299,
                "complete": false,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 299
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T11:50:27.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/2dab9ab60d46c1a90c3d8b67f5d3085c96c322a0"
                }
              },
              {
                "path": "packages/clan",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 78,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 78
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T06:58:50.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/d034f170ffd0e63184697b63e1a34874893f5041"
                }
              },
              {
                "path": "packages/clan-engine",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 69,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 69
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T04:09:57.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/c58e5f64fffbc5476712cfd0e6d3d5f0ec82c23b"
                }
              },
              {
                "path": "packages/clan-state",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 18,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 18
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T03:39:23.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/cbc2b3a8edf10ec4f14ff48c1e85bf3241970d34"
                }
              },
              {
                "path": "packages/clan-web",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 76,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 76
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T06:58:50.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/d034f170ffd0e63184697b63e1a34874893f5041"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://elixir.poapkings.com/",
          "role": "website",
          "sitemap": "https://elixir.poapkings.com/sitemap.xml",
          "feed": "https://elixir.poapkings.com/feed.xml",
          "observation": {
            "kind": "web",
            "url": "https://elixir.poapkings.com/",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "sitemap": {
              "url": "https://elixir.poapkings.com/sitemap.xml",
              "pages": 978,
              "newestModified": null,
              "months": [],
              "complete": true
            },
            "feed": {
              "url": "https://elixir.poapkings.com/feed.xml",
              "title": "Elixir updates",
              "items": 50,
              "newestPublished": "2026-10-21T12:00:00.000Z",
              "months": [
                {
                  "month": "2026-10",
                  "count": 50
                }
              ]
            }
          },
          "captures": {
            "kind": "wayback",
            "url": "https://elixir.poapkings.com/",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": null,
            "latestCapture": null,
            "years": []
          },
          "views": {
            "kind": "tinylytics",
            "url": "https://elixir.poapkings.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 1248,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 0
              },
              {
                "month": "2026-02",
                "count": 0
              },
              {
                "month": "2026-03",
                "count": 0
              },
              {
                "month": "2026-04",
                "count": 0
              },
              {
                "month": "2026-05",
                "count": 0
              },
              {
                "month": "2026-06",
                "count": 0
              },
              {
                "month": "2026-07",
                "count": 0
              },
              {
                "month": "2026-08",
                "count": 0
              },
              {
                "month": "2026-09",
                "count": 1248
              }
            ]
          }
        }
      ],
      "connections": [
        {
          "to": "elixir-mcp-discord",
          "label": "provides recorded facts to",
          "detail": "The configurable Discord agent gets its game facts through Elixir MCP tools.",
          "source": "https://github.com/jthingelstad/elixir-mcp-discord"
        },
        {
          "to": "elixir-clan",
          "label": "includes",
          "detail": "Clan management is a feature of the same Elixir platform and shares its recorded history, application, and runtime.",
          "source": "https://elixir.poapkings.com/updates/2026-10-02-clan-is-part-of-elixir"
        },
        {
          "to": "poap-kings",
          "label": "supplies clan data to",
          "detail": "The POAP KINGS website reads clan and roster data from Elixir’s JSON API.",
          "source": "https://poapkings.com/elixir/"
        }
      ],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/elixir-poapkings-com-6fc8fdabb9.jpg",
        "site": "https://elixir.poapkings.com/",
        "date": "2026-10-20"
      },
      "story": {
        "color": "#8860d9",
        "introduction": "The game remembers the present. Elixir remembers what happened.",
        "engineering": [
          "Independent collectors fetch public game observations from machines with allowlisted IP addresses, sharing one rate budget.",
          "One recorded history serves the browser application, a remote MCP server, and a versioned JSON API.",
          "Everything cloud-side is serverless, with PostgreSQL, S3, and Lambda functions in one CloudFormation stack.",
          "Clan management and Ladder are features of the same platform, sharing its record and application shell."
        ],
        "stack": [
          "Eleventy",
          "React",
          "PostgreSQL",
          "AWS Lambda",
          "MCP"
        ],
        "related": [
          "elixir-drop",
          "elixir-mcp-discord",
          "elixir-mcp-collector",
          "poap-kings"
        ],
        "questions": [
          "How does Elixir keep the history?",
          "What grew out of Elixir Bot?"
        ],
        "source": "https://elixir.poapkings.com/docs/architecture",
        "sourceLabel": "Architecture"
      },
      "body": "The Clash Royale API offers a current snapshot and a short, rotating battle log of about 30 battles. Elixir continuously records observations so players, clans, and their agents can ask questions about the history: battles, rosters, river races, and seasons.\n\nI built it by turning [Elixir Bot](https://github.com/jthingelstad/elixir-bot), the POAP KINGS clan agent, “upside-down.” Instead of one bot keeping its own database, the record became a service that any agent can use over MCP. Claude and I wrote the specification, then put Claude Code in a loop; [six hours later](https://www.thingelstad.com/2026/09/03/i-had-an-idea-to.html) there was a working system, and [Elixir MCP launched](https://elixir.poapkings.com/updates/2026-09-03-elixir-mcp-launches) on September 3, 2026. The next day the old bot’s archive was [replayed into the recorder](https://elixir.poapkings.com/updates/2026-09-04-four-months-of-history-imported), bringing battles back to mid-May.\n\nIn the browser, Elixir is the Console for a player’s own history and the [Ladder](https://elixir.poapkings.com/ladder) for exploring ladder results. Elixir Clan runs in the same application, and Elixir Drop signs its players in with Elixir. Volunteer collectors do all of the fetching. Elixir is free, and its [updates feed](https://elixir.poapkings.com/updates) records every user-visible change.",
      "latest": {
        "date": "2026-10-21T12:00:00.000Z",
        "label": "Latest publication",
        "url": "https://elixir.poapkings.com/feed.xml"
      }
    },
    {
      "id": "elixir-bot",
      "title": "Elixir Bot",
      "summary": "POAP KINGS’ first clan agent, a Discord bot that watched the clan and talked with its members from February to September 2026.",
      "collection": "Games and communities",
      "status": "retired",
      "url": "https://github.com/jthingelstad/elixir-bot",
      "started": "2026-02",
      "ended": "2026-09-26",
      "page": "https://thingelstad.xyz/things/elixir-bot/",
      "markdown": "https://thingelstad.xyz/things/elixir-bot.md",
      "topics": [
        "agents",
        "play"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/elixir-bot",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/elixir-bot",
            "url": "https://github.com/jthingelstad/elixir-bot",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2026-02-27T21:09:06.000Z",
            "archived": true,
            "description": "LLM-powered, channel-native Discord agent for the POAP KINGS Clash Royale clan — event-sourced reactive engine, scoped public/leadership memory, and GitHub-backed poapkings.com publishing.",
            "stars": 3,
            "forks": 0,
            "languages": [
              {
                "name": "Python",
                "bytes": 5427524
              },
              {
                "name": "Shell",
                "bytes": 15430
              }
            ],
            "release": {
              "name": "decisive-dart-goblin",
              "date": "2026-08-03T00:26:23.000Z",
              "url": "https://github.com/jthingelstad/elixir-bot/releases/tag/decisive-dart-goblin"
            },
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 300,
                "complete": false,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 58
                  },
                  {
                    "month": "2026-08",
                    "count": 190
                  },
                  {
                    "month": "2026-09",
                    "count": 52
                  }
                ],
                "latestCommit": {
                  "date": "2026-09-26T20:54:41.000Z",
                  "url": "https://github.com/jthingelstad/elixir-bot/commit/555d743ceb72a7779a6e47fab4912ae5d024e70e"
                }
              }
            ]
          }
        }
      ],
      "connections": [
        {
          "to": "elixir",
          "label": "gave rise to",
          "detail": "The original Elixir Bot was retired in September 2026. Recorded game history became the broader Elixir platform.",
          "source": "https://github.com/jthingelstad/elixir-bot",
          "kind": "lineage"
        },
        {
          "to": "elixir-mcp-discord",
          "label": "was succeeded by",
          "detail": "The configurable Elixir Discord agent took over the original bot’s Discord role.",
          "source": "https://github.com/jthingelstad/elixir-bot",
          "kind": "lineage"
        },
        {
          "to": "elixir-mcp-collector",
          "label": "gave rise to",
          "detail": "The original bot’s game observation work grew into a separate Collector that feeds Elixir’s recorded history.",
          "source": "https://github.com/jthingelstad/elixir-bot",
          "kind": "lineage"
        },
        {
          "to": "elixir-clan",
          "label": "gave rise to",
          "detail": "The original bot’s clan management work carried forward into Elixir Clan, now a feature of the shared Elixir platform.",
          "source": "https://github.com/jthingelstad/elixir-bot",
          "kind": "lineage"
        },
        {
          "to": "clash-royale-api-agent-reference",
          "label": "gave rise to",
          "detail": "The Clash Royale API notes began inside Elixir Bot as cr-api-docs before becoming a standalone reference.",
          "source": "https://www.thingelstad.com/2026/03/10/automatic-programming-speed.html",
          "kind": "lineage"
        },
        {
          "to": "otto",
          "label": "was first coded by",
          "detail": "Otto wrote the first version of the bot, a templated command-and-response Discord bot.",
          "source": "https://weekly.thingelstad.com/archive/342/"
        },
        {
          "to": "poap-kings",
          "label": "published",
          "detail": "The bot regenerated the clan website’s roster pages, member bios, and home page message and committed them to git.",
          "source": "https://sessions.minnestar.org/sessions/2094"
        },
        {
          "to": "weekly-thing-workshop",
          "label": "led to",
          "detail": "Running Elixir showed me that “Discord is a reasonable place for an agent to run,” so I put the Weekly Thing Workshop’s agents there.",
          "source": "https://www.thingelstad.com/2026/05/12/the-weekly-thing-team.html",
          "kind": "lineage"
        }
      ],
      "body": "Elixir Bot was the agent for POAP KINGS, the Clash Royale clan I run with my son Tyler and Tyler’s cousin Levi. I wanted [my own agent](https://weekly.thingelstad.com/archive/342/) so I could understand the agentic loop, data design, and memory from the inside: one that would monitor the clan, help it win wars, suggest strategies, and recommend promotions and demotions to leadership.\n\nIt grew quickly in early 2026. Otto wrote the first version, a templated Discord bot. An LLM and a journal kept on the clan website [gave it a brain](https://ottoai.thingelstad.com/2026/03/01/building-elixir-when-a-discord.html), an hourly heartbeat and a SQLite memory made it agentic, and a long session with Codex [rebuilt its data and tools](https://ottoai.thingelstad.com/2026/03/07/from-snapshots-to-signals-elixirs.html) around signals. Later I gave it an [agentic product team](https://www.thingelstad.com/2026/06/22/elixirs-agentic-product-team.html) of scheduled automations that proposed, built, and checked its changes. Tyler and I told its story at Minnebar 20 in the session “[Elixir: Creating an AI Agent for our Clash Royale Clan](https://sessions.minnestar.org/sessions/2094).”\n\nElixir Bot was retired on September 26, 2026. Its work was split among the projects that grew out of it: Elixir records the game, the Collector fetches from the API, Elixir Discord talks in the clan’s Discord, Elixir Clan handles management and awards, and Elixir Drop is the game. The [repository](https://github.com/jthingelstad/elixir-bot) is archived as it was on the last day.",
      "latest": {
        "date": "2026-09-26T20:54:41.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/elixir-bot/commit/555d743ceb72a7779a6e47fab4912ae5d024e70e"
      }
    },
    {
      "id": "elixir-clan",
      "title": "Elixir Clan",
      "summary": "Clan management on Elixir, where a clan’s own written policy is run against the record to guide its leaders’ calls.",
      "collection": "Games and communities",
      "status": "active",
      "url": "https://elixir.poapkings.com/clan",
      "started": "2026-09",
      "page": "https://thingelstad.xyz/things/elixir-clan/",
      "markdown": "https://thingelstad.xyz/things/elixir-clan.md",
      "topics": [
        "play"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/elixir-mcp",
          "role": "implementation",
          "path": "packages/clan",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/elixir-mcp",
            "url": "https://github.com/jthingelstad/elixir-mcp",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-09-03T14:18:34.000Z",
            "archived": false,
            "description": "Clash Royale history recorder + remote MCP server. Unofficial; not endorsed by Supercell.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "JavaScript",
                "bytes": 9953685
              },
              {
                "name": "TypeScript",
                "bytes": 1095102
              },
              {
                "name": "CSS",
                "bytes": 172802
              },
              {
                "name": "Nunjucks",
                "bytes": 122303
              },
              {
                "name": "PLpgSQL",
                "bytes": 15998
              },
              {
                "name": "Shell",
                "bytes": 7195
              },
              {
                "name": "HTML",
                "bytes": 5417
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 299,
                "complete": false,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 299
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T11:50:27.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/2dab9ab60d46c1a90c3d8b67f5d3085c96c322a0"
                }
              },
              {
                "path": "packages/clan",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 78,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 78
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T06:58:50.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/d034f170ffd0e63184697b63e1a34874893f5041"
                }
              },
              {
                "path": "packages/clan-engine",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 69,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 69
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T04:09:57.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/c58e5f64fffbc5476712cfd0e6d3d5f0ec82c23b"
                }
              },
              {
                "path": "packages/clan-state",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 18,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 18
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T03:39:23.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/cbc2b3a8edf10ec4f14ff48c1e85bf3241970d34"
                }
              },
              {
                "path": "packages/clan-web",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 76,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 76
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T06:58:50.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/d034f170ffd0e63184697b63e1a34874893f5041"
                }
              }
            ]
          }
        },
        {
          "kind": "github",
          "repository": "jthingelstad/elixir-mcp",
          "role": "implementation",
          "path": "packages/clan-engine",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/elixir-mcp",
            "url": "https://github.com/jthingelstad/elixir-mcp",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-09-03T14:18:34.000Z",
            "archived": false,
            "description": "Clash Royale history recorder + remote MCP server. Unofficial; not endorsed by Supercell.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "JavaScript",
                "bytes": 9953685
              },
              {
                "name": "TypeScript",
                "bytes": 1095102
              },
              {
                "name": "CSS",
                "bytes": 172802
              },
              {
                "name": "Nunjucks",
                "bytes": 122303
              },
              {
                "name": "PLpgSQL",
                "bytes": 15998
              },
              {
                "name": "Shell",
                "bytes": 7195
              },
              {
                "name": "HTML",
                "bytes": 5417
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 299,
                "complete": false,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 299
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T11:50:27.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/2dab9ab60d46c1a90c3d8b67f5d3085c96c322a0"
                }
              },
              {
                "path": "packages/clan",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 78,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 78
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T06:58:50.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/d034f170ffd0e63184697b63e1a34874893f5041"
                }
              },
              {
                "path": "packages/clan-engine",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 69,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 69
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T04:09:57.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/c58e5f64fffbc5476712cfd0e6d3d5f0ec82c23b"
                }
              },
              {
                "path": "packages/clan-state",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 18,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 18
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T03:39:23.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/cbc2b3a8edf10ec4f14ff48c1e85bf3241970d34"
                }
              },
              {
                "path": "packages/clan-web",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 76,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 76
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T06:58:50.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/d034f170ffd0e63184697b63e1a34874893f5041"
                }
              }
            ]
          }
        },
        {
          "kind": "github",
          "repository": "jthingelstad/elixir-mcp",
          "role": "implementation",
          "path": "packages/clan-state",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/elixir-mcp",
            "url": "https://github.com/jthingelstad/elixir-mcp",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-09-03T14:18:34.000Z",
            "archived": false,
            "description": "Clash Royale history recorder + remote MCP server. Unofficial; not endorsed by Supercell.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "JavaScript",
                "bytes": 9953685
              },
              {
                "name": "TypeScript",
                "bytes": 1095102
              },
              {
                "name": "CSS",
                "bytes": 172802
              },
              {
                "name": "Nunjucks",
                "bytes": 122303
              },
              {
                "name": "PLpgSQL",
                "bytes": 15998
              },
              {
                "name": "Shell",
                "bytes": 7195
              },
              {
                "name": "HTML",
                "bytes": 5417
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 299,
                "complete": false,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 299
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T11:50:27.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/2dab9ab60d46c1a90c3d8b67f5d3085c96c322a0"
                }
              },
              {
                "path": "packages/clan",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 78,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 78
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T06:58:50.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/d034f170ffd0e63184697b63e1a34874893f5041"
                }
              },
              {
                "path": "packages/clan-engine",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 69,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 69
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T04:09:57.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/c58e5f64fffbc5476712cfd0e6d3d5f0ec82c23b"
                }
              },
              {
                "path": "packages/clan-state",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 18,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 18
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T03:39:23.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/cbc2b3a8edf10ec4f14ff48c1e85bf3241970d34"
                }
              },
              {
                "path": "packages/clan-web",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 76,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 76
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T06:58:50.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/d034f170ffd0e63184697b63e1a34874893f5041"
                }
              }
            ]
          }
        },
        {
          "kind": "github",
          "repository": "jthingelstad/elixir-mcp",
          "role": "implementation",
          "path": "packages/clan-web",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/elixir-mcp",
            "url": "https://github.com/jthingelstad/elixir-mcp",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-09-03T14:18:34.000Z",
            "archived": false,
            "description": "Clash Royale history recorder + remote MCP server. Unofficial; not endorsed by Supercell.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "JavaScript",
                "bytes": 9953685
              },
              {
                "name": "TypeScript",
                "bytes": 1095102
              },
              {
                "name": "CSS",
                "bytes": 172802
              },
              {
                "name": "Nunjucks",
                "bytes": 122303
              },
              {
                "name": "PLpgSQL",
                "bytes": 15998
              },
              {
                "name": "Shell",
                "bytes": 7195
              },
              {
                "name": "HTML",
                "bytes": 5417
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 299,
                "complete": false,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 299
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T11:50:27.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/2dab9ab60d46c1a90c3d8b67f5d3085c96c322a0"
                }
              },
              {
                "path": "packages/clan",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 78,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 78
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T06:58:50.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/d034f170ffd0e63184697b63e1a34874893f5041"
                }
              },
              {
                "path": "packages/clan-engine",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 69,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 69
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T04:09:57.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/c58e5f64fffbc5476712cfd0e6d3d5f0ec82c23b"
                }
              },
              {
                "path": "packages/clan-state",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 18,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 18
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T03:39:23.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/cbc2b3a8edf10ec4f14ff48c1e85bf3241970d34"
                }
              },
              {
                "path": "packages/clan-web",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 76,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 76
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T06:58:50.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp/commit/d034f170ffd0e63184697b63e1a34874893f5041"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://elixir.poapkings.com/clan",
          "role": "website",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "https://elixir.poapkings.com/clan",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": null,
            "latestCapture": null,
            "years": []
          },
          "views": null
        },
        {
          "kind": "github",
          "repository": "jthingelstad/clan.poapkings.com",
          "role": "historical",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/clan.poapkings.com",
            "url": "https://github.com/jthingelstad/clan.poapkings.com",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-09-12T18:42:54.000Z",
            "archived": true,
            "description": "Moved: Elixir Clan now lives in jthingelstad/elixir-mcp as clan/ (2026-09-28), history included. Archived.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "JavaScript",
                "bytes": 1256936
              },
              {
                "name": "TypeScript",
                "bytes": 24341
              },
              {
                "name": "Shell",
                "bytes": 2387
              },
              {
                "name": "HTML",
                "bytes": 1020
              },
              {
                "name": "CSS",
                "bytes": 856
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 114,
                "complete": true,
                "months": [
                  {
                    "month": "2026-09",
                    "count": 114
                  }
                ],
                "latestCommit": {
                  "date": "2026-09-27T18:56:36.000Z",
                  "url": "https://github.com/jthingelstad/clan.poapkings.com/commit/918ae08b28bbbfd171708dabe19fef827f997af1"
                }
              }
            ]
          }
        }
      ],
      "connections": [
        {
          "to": "poap-kings",
          "label": "runs the clans of",
          "detail": "POAP KINGS and its sister clans run on Elixir Clan for standing, the Elder band, and leader actions.",
          "source": "https://poapkings.com/elixir/"
        }
      ],
      "body": "Elixir Clan is the part of Elixir for running a Clash Royale clan. Any player on a person’s Elixir account is a member of that player’s clan, and leaders who [verify their player](https://elixir.poapkings.com/docs/bring-your-clan) act in their in-game role. Each clan writes its own policy, and Elixir reads every week against it: [standing and the Elder band](https://elixir.poapkings.com/docs/standing), the [actions](https://elixir.poapkings.com/docs/clan-actions) waiting for a leader (promotions, welcomes, removals), season [awards](https://elixir.poapkings.com/docs/clan-awards), recruiting, and scouting. Decisions stay with the leaders.\n\nI built it to take the clan management features I had built into [Elixir Bot](https://github.com/jthingelstad/elixir-bot) for POAP KINGS and turn them into [a proper product that anyone can use](https://weekly.thingelstad.com/archive/351/). It began in September 2026 as a separate app at clan.poapkings.com, in its own [repository](https://github.com/jthingelstad/clan.poapkings.com), with Sign in with Elixir.\n\nOn September 28, 2026, it [moved to /clan](https://elixir.poapkings.com/updates/2026-09-28-elixir-clan-lives-at-clan) on Elixir’s own address, and its code moved into the Elixir repository with its history. On October 2 it [became part of Elixir](https://elixir.poapkings.com/updates/2026-10-02-clan-is-part-of-elixir): one sign-in and one application, with every clan’s policies, actions, and awards carried over. The old repository is archived.",
      "latest": {
        "date": "2026-10-21T06:58:50.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/elixir-mcp/commit/d034f170ffd0e63184697b63e1a34874893f5041"
      }
    },
    {
      "id": "elixir-mcp-collector",
      "title": "Elixir Collector",
      "summary": "A small, signed Go program that volunteers run on their own machines to fetch Clash Royale API data for Elixir’s shared record.",
      "collection": "Games and communities",
      "status": "active",
      "url": "https://github.com/jthingelstad/elixir-mcp-collector",
      "started": "2026-09-04",
      "page": "https://thingelstad.xyz/things/elixir-mcp-collector/",
      "markdown": "https://thingelstad.xyz/things/elixir-mcp-collector.md",
      "topics": [
        "mcp",
        "play"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/elixir-mcp-collector",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/elixir-mcp-collector",
            "url": "https://github.com/jthingelstad/elixir-mcp-collector",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2026-09-04T16:09:29.000Z",
            "archived": false,
            "description": "The operator-run collector for Elixir MCP — fetches Clash Royale history (via your own IP-bound API key) so AI agents can query it. Zero-trust: no cloud access. Unofficial; not endorsed by Supercell.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "Go",
                "bytes": 225288
              },
              {
                "name": "Shell",
                "bytes": 57986
              },
              {
                "name": "PowerShell",
                "bytes": 17513
              }
            ],
            "release": {
              "name": "v3.0.6",
              "date": "2026-09-28T00:58:56.000Z",
              "url": "https://github.com/jthingelstad/elixir-mcp-collector/releases/tag/v3.0.6"
            },
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 65,
                "complete": true,
                "months": [
                  {
                    "month": "2026-09",
                    "count": 65
                  }
                ],
                "latestCommit": {
                  "date": "2026-09-28T00:57:12.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp-collector/commit/d60ce8beb4c4211120edae1831f1eff6f9ab595e"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://elixir.poapkings.com/docs/operators",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "elixir",
          "label": "gathers observations for",
          "detail": "Collectors lease work from Elixir, fetch public observations from the Clash Royale API, and submit the results.",
          "source": "https://elixir.poapkings.com/docs/operators"
        }
      ],
      "body": "The Clash Royale API only accepts requests from allowlisted IP addresses, so Elixir’s fetching happens on machines with stable addresses that volunteers run. A collector leases a job from Elixir over HTTPS (“fetch this player,” “fetch this clan’s war”), calls the API with its operator’s own key, and posts the result back. It never chooses its own targets and holds exactly two secrets: the operator’s Clash Royale key and a token Elixir issues. The whole fleet shares one rate budget, so more collectors add resilience, not more load on the API.\n\nFetching started inside the Elixir codebase and [got its own repository](https://elixir.poapkings.com/updates/2026-09-04-the-collector-gets-its-own-home) on September 4, 2026, the day after Elixir launched. Each collector wears a Clash Royale card as its public name, and [anyone with an Elixir account](https://elixir.poapkings.com/docs/operators) may run one. A Python collector was retired on September 26, 2026, leaving one Go binary built only on the Go standard library.\n\nThe same day, I used Claude credits to build [a fully signed release pipeline](https://www.thingelstad.com/2026/09/26/i-used-some-of-my.html): from [v3.0.0](https://github.com/jthingelstad/elixir-mcp-collector/releases/tag/v3.0.0), every release is signed with a key I manage, and the self-updater installs only the version and checksum Elixir names.",
      "latest": {
        "date": "2026-09-28T00:58:56.000Z",
        "label": "Release v3.0.6",
        "url": "https://github.com/jthingelstad/elixir-mcp-collector/releases/tag/v3.0.6"
      }
    },
    {
      "id": "elixir-mcp-discord",
      "title": "Elixir Discord",
      "summary": "An open-source Discord bot any Clash Royale clan can run, which gets every fact it states from Elixir MCP tool calls.",
      "collection": "Games and communities",
      "status": "active",
      "url": "https://github.com/jthingelstad/elixir-mcp-discord",
      "started": "2026-09",
      "page": "https://thingelstad.xyz/things/elixir-mcp-discord/",
      "markdown": "https://thingelstad.xyz/things/elixir-mcp-discord.md",
      "topics": [
        "agents",
        "mcp",
        "play"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/elixir-mcp-discord",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/elixir-mcp-discord",
            "url": "https://github.com/jthingelstad/elixir-mcp-discord",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-09-08T02:08:00.000Z",
            "archived": false,
            "description": "A Discord bot for a Clash Royale clan powered entirely by Elixir MCP. No local game database, no Clash Royale API key, no fallback - every fact comes from an MCP tool call.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "JavaScript",
                "bytes": 945277
              },
              {
                "name": "Shell",
                "bytes": 12142
              },
              {
                "name": "Dockerfile",
                "bytes": 2328
              }
            ],
            "release": {
              "name": "v0.3.1",
              "date": "2026-10-02T17:03:28.000Z",
              "url": "https://github.com/jthingelstad/elixir-mcp-discord/releases/tag/v0.3.1"
            },
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 157,
                "complete": true,
                "months": [
                  {
                    "month": "2026-09",
                    "count": 107
                  },
                  {
                    "month": "2026-10",
                    "count": 50
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-16T12:13:02.000Z",
                  "url": "https://github.com/jthingelstad/elixir-mcp-discord/commit/ab3e51e2efb607cb72713b59aac45a3faacb4650"
                }
              }
            ]
          }
        }
      ],
      "connections": [
        {
          "to": "poap-kings",
          "label": "is the Discord agent for",
          "detail": "POAP KINGS runs an instance of the bot as its clan agent in Discord, answering members from Elixir’s record.",
          "source": "https://poapkings.com/elixir/"
        }
      ],
      "body": "Elixir Discord is a Discord bot for a Clash Royale clan with no local game database, no Clash Royale API key, and no fallback. It connects to [Elixir](https://elixir.poapkings.com/) as that clan’s agent, and every fact it states comes from an MCP tool call made moments earlier. There is no clan in the repository: a clan points it at its own agent key, Claude key, and Discord channels, with no fork and no code to edit.\n\nIts behavior is a set of routines, each a Markdown file that pairs a trigger with a prompt and a destination. A routine can answer whoever speaks in a channel, post when Elixir’s timeline records a join, a departure, or a standout session, fire on a game clock boundary such as the end of a war day, or run on a schedule. The record is the trigger, not the calendar.\n\nI started it in September 2026, with its first release, [v0.3.0](https://github.com/jthingelstad/elixir-mcp-discord/releases/tag/v0.3.0), on September 15. When Elixir Bot was retired on September 26, 2026, this bot [took over its Discord role](https://github.com/jthingelstad/elixir-bot) for POAP KINGS, and any other clan can run its own copy as [an agent of its own](https://elixir.poapkings.com/examples/discord).",
      "latest": {
        "date": "2026-10-16T12:13:02.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/elixir-mcp-discord/commit/ab3e51e2efb607cb72713b59aac45a3faacb4650"
      }
    },
    {
      "id": "elixir-drop",
      "title": "Elixir Drop",
      "summary": "A free browser game, run by POAP KINGS, for learning Clash Royale cards and their elixir costs through six fast game modes.",
      "collection": "Games and communities",
      "status": "active",
      "url": "https://drop.poapkings.com/",
      "started": "2026-06-13",
      "page": "https://thingelstad.xyz/things/elixir-drop/",
      "markdown": "https://thingelstad.xyz/things/elixir-drop.md",
      "topics": [
        "play"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/drop.poapkings.com",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/drop.poapkings.com",
            "url": "https://github.com/jthingelstad/drop.poapkings.com",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-06-13T13:16:27.000Z",
            "archived": false,
            "description": "Elixir Drop — a fast little game for learning Clash Royale cards and elixir costs, run by the POAP KINGS clan. A self-contained Preact/TypeScript single-page app.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "TypeScript",
                "bytes": 2926773
              },
              {
                "name": "JavaScript",
                "bytes": 332150
              },
              {
                "name": "CSS",
                "bytes": 248678
              },
              {
                "name": "HTML",
                "bytes": 5261
              },
              {
                "name": "Shell",
                "bytes": 4044
              }
            ],
            "release": {
              "name": "principled-p-e-k-k-a",
              "date": "2026-08-15T01:45:49.000Z",
              "url": "https://github.com/jthingelstad/drop.poapkings.com/releases/tag/principled-p-e-k-k-a"
            },
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 299,
                "complete": false,
                "months": [
                  {
                    "month": "2026-08",
                    "count": 207
                  },
                  {
                    "month": "2026-09",
                    "count": 68
                  },
                  {
                    "month": "2026-10",
                    "count": 24
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-16T12:02:20.000Z",
                  "url": "https://github.com/jthingelstad/drop.poapkings.com/commit/f371e275ab6103b9167dd393ef5389280f3511dd"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://drop.poapkings.com/",
          "role": "website",
          "sitemap": "https://drop.poapkings.com/sitemap.xml",
          "feed": "https://drop.poapkings.com/feed.xml",
          "observation": {
            "kind": "web",
            "url": "https://drop.poapkings.com/",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "sitemap": {
              "url": "https://drop.poapkings.com/sitemap.xml",
              "pages": 12,
              "newestModified": null,
              "months": [],
              "complete": true
            },
            "feed": {
              "url": "https://drop.poapkings.com/feed.xml",
              "title": "Elixir Drop Updates",
              "items": 61,
              "newestPublished": "2026-09-15T00:33:20.000Z",
              "months": [
                {
                  "month": "2026-06",
                  "count": 6
                },
                {
                  "month": "2026-07",
                  "count": 16
                },
                {
                  "month": "2026-08",
                  "count": 31
                },
                {
                  "month": "2026-09",
                  "count": 8
                }
              ]
            }
          },
          "captures": {
            "kind": "wayback",
            "url": "https://drop.poapkings.com/",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": null,
            "latestCapture": null,
            "years": []
          },
          "views": {
            "kind": "tinylytics",
            "url": "https://drop.poapkings.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 13739,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 0
              },
              {
                "month": "2026-02",
                "count": 0
              },
              {
                "month": "2026-03",
                "count": 0
              },
              {
                "month": "2026-04",
                "count": 0
              },
              {
                "month": "2026-05",
                "count": 0
              },
              {
                "month": "2026-06",
                "count": 174
              },
              {
                "month": "2026-07",
                "count": 3629
              },
              {
                "month": "2026-08",
                "count": 9070
              },
              {
                "month": "2026-09",
                "count": 866
              }
            ]
          }
        }
      ],
      "connections": [
        {
          "to": "elixir",
          "label": "signs players in and reads its season clock from",
          "detail": "Drop players sign in with their Elixir account, and Drop’s seasons follow the Clan Wars clock that Elixir records.",
          "source": "https://poapkings.com/elixir/"
        }
      ],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/drop-poapkings-com-3db9a5f881.jpg",
        "site": "https://drop.poapkings.com/",
        "date": "2026-10-20"
      },
      "story": {
        "color": "#6a4fc4",
        "introduction": "See a card, name its cost, get quicker.",
        "engineering": [
          "Six modes train one skill, from unranked Practice to the 15-card Surge sprint.",
          "Ranked online games deal from a signed server challenge drawn from the complete card catalog.",
          "Seasonal leaderboards follow the Clan Wars clock, and a Fair Play review checks leading results without treating an automated signal as a verdict.",
          "A Preact browser app served from S3 behind CloudFront, with a Lambda API and DynamoDB."
        ],
        "stack": [
          "Preact",
          "TypeScript",
          "AWS Lambda",
          "DynamoDB"
        ],
        "related": [
          "elixir",
          "poap-kings"
        ],
        "questions": [
          "What are the six ways to play?",
          "How do Drop’s seasons and leaderboards work?"
        ],
        "source": "https://drop.poapkings.com/updates/",
        "sourceLabel": "Drop updates"
      },
      "body": "Elixir Drop is a game for learning Clash Royale card elixir costs. Knowing a card’s cost instantly leaves more attention for everything else in a match, so each mode trains that recall from a different angle: Practice, Surge, Higher / Lower, Trade, Survival, and Rain. Every mode works without an account; signing in saves progress, badges, and ranked scores.\n\nIt is run by POAP KINGS, my Clash Royale clan, and I count it among the things I have built with coding agents, [even making a game](https://www.thingelstad.com/2026/09/17/building-and-puzzling-about-software.html). [The first card dropped](https://drop.poapkings.com/updates/) on June 13, 2026, with Practice; Surge, Higher / Lower, and Survival arrived the same day and Trade the next. Accounts, player profiles, and the first seasonal ladder followed in July, and the game moved to AWS on August 22.\n\nPlayers could [sign in with Elixir](https://elixir.poapkings.com/docs/sign-in-with-elixir) from September 14, 2026, and it is now the only way in: a Drop account is an Elixir account, and Drop sends no sign-in mail of its own. Selected seasonal competitions award a gifted Pass Royale, funded by the clan, to the top eligible player, and the [updates feed](https://drop.poapkings.com/updates/) announces new features and season results.",
      "latest": {
        "date": "2026-10-16T12:02:20.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/drop.poapkings.com/commit/f371e275ab6103b9167dd393ef5389280f3511dd"
      }
    },
    {
      "id": "escaping-things",
      "title": "Escaping Things",
      "summary": "My family’s escape room team log, with every room played since 2016, on a map with trips, players, and stats.",
      "collection": "Games and communities",
      "status": "active",
      "url": "https://escape.thingelstad.com/",
      "started": "2026-02-23",
      "page": "https://thingelstad.xyz/things/escaping-things/",
      "markdown": "https://thingelstad.xyz/things/escaping-things.md",
      "topics": [
        "play"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/escape.thingelstad.com",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/escape.thingelstad.com",
            "url": "https://github.com/jthingelstad/escape.thingelstad.com",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-02-11T23:10:54.000Z",
            "archived": false,
            "description": "The Escaping Things escape-room team site — an Eleventy static site built from a normalized Airtable dataset (rooms played, countries, stats).",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "JavaScript",
                "bytes": 134346
              },
              {
                "name": "Nunjucks",
                "bytes": 89595
              },
              {
                "name": "CSS",
                "bytes": 53878
              },
              {
                "name": "Python",
                "bytes": 47325
              },
              {
                "name": "Shell",
                "bytes": 741
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 29,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 8
                  },
                  {
                    "month": "2026-08",
                    "count": 14
                  },
                  {
                    "month": "2026-09",
                    "count": 6
                  },
                  {
                    "month": "2026-10",
                    "count": 1
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-16T11:07:25.000Z",
                  "url": "https://github.com/jthingelstad/escape.thingelstad.com/commit/cd1854801565ae57234f1c9b550916b1bf246de3"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://escape.thingelstad.com/",
          "role": "website",
          "sitemap": "https://escape.thingelstad.com/sitemap.xml",
          "feed": "https://escape.thingelstad.com/feed.xml",
          "observation": {
            "kind": "web",
            "url": "https://escape.thingelstad.com/",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "sitemap": {
              "url": "https://escape.thingelstad.com/sitemap.xml",
              "pages": 136,
              "newestModified": null,
              "months": [],
              "complete": true
            },
            "feed": {
              "url": "https://escape.thingelstad.com/feed.xml",
              "title": "Escaping Things — Recent Rooms",
              "items": 25,
              "newestPublished": "2026-08-18T00:00:00.000Z",
              "months": [
                {
                  "month": "2026-02",
                  "count": 1
                },
                {
                  "month": "2026-03",
                  "count": 12
                },
                {
                  "month": "2026-04",
                  "count": 2
                },
                {
                  "month": "2026-05",
                  "count": 1
                },
                {
                  "month": "2026-07",
                  "count": 2
                },
                {
                  "month": "2026-08",
                  "count": 7
                }
              ]
            }
          },
          "captures": {
            "kind": "wayback",
            "url": "https://escape.thingelstad.com/",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": "2026-03-04",
            "latestCapture": "2026-09-25",
            "years": [
              {
                "year": "2026",
                "days": 10
              }
            ]
          },
          "views": {
            "kind": "tinylytics",
            "url": "https://escape.thingelstad.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 5515,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 0
              },
              {
                "month": "2026-02",
                "count": 707
              },
              {
                "month": "2026-03",
                "count": 1127
              },
              {
                "month": "2026-04",
                "count": 502
              },
              {
                "month": "2026-05",
                "count": 346
              },
              {
                "month": "2026-06",
                "count": 323
              },
              {
                "month": "2026-07",
                "count": 119
              },
              {
                "month": "2026-08",
                "count": 1911
              },
              {
                "month": "2026-09",
                "count": 480
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://weekly.thingelstad.com/archive/342/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/lists/escape-rooms/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/escape-thingelstad-com-e9be23f9bf.jpg",
        "site": "https://escape.thingelstad.com/",
        "date": "2026-10-20"
      },
      "body": "Escaping Things is the escape room team of Tammy, Mazie, Tyler, and me, and [escape.thingelstad.com](https://escape.thingelstad.com/) is its log: every room we have played, with results, photos, ratings, a map, trips, players, and stats. By August 2026 it recorded 113 rooms in 11 countries.\n\nThe record began as a [list on my blog](https://www.thingelstad.com/lists/escape-rooms/), built from posts about rooms. In March 2025 I [reconciled it](https://www.thingelstad.com/2025/03/16/reconciled-list-of-escape-rooms.html) against blog posts, photos, YNAB transactions, and calendars, and the count went from 43 rooms to 65. With a spring 2026 trip to Amsterdam, Paris, and Barcelona planned around TERPECA-ranked rooms, I wanted a dedicated site with a map. As I told it in [Weekly Thing 342](https://weekly.thingelstad.com/archive/342/), I turned my spreadsheet into a CSV, wrote a CLAUDE.md with Claude, and had Claude Code build the site. I then moved the data into an Airtable base of companies, locations, and rooms, and [announced the site](https://www.thingelstad.com/2026/02/23/ive-been-working-on-this.html) on 2026-02-23. I never looked at its code; Codex and Claude Code wrote it.\n\nTammy found the trip’s rooms (“Tammy found us twelve amazing escape rooms”), and the whole family writes up the rooms we play ([Escape in Europe, Day 13](https://www.thingelstad.com/2026/03/27/escape-in-europe-day.html)). After the twelve rooms of that trip, I added trip pages, starting with [Escape in Europe](https://escape.thingelstad.com/trip/escape-in-europe/), with commentary from the whole family ([WT344](https://weekly.thingelstad.com/archive/344/)). The site is a static Eleventy build from Airtable snapshots, with Leaflet maps, Chart.js stats, Pagefind search, and an Atom feed of new rooms.",
      "latest": {
        "date": "2026-10-16T11:07:25.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/escape.thingelstad.com/commit/cd1854801565ae57234f1c9b550916b1bf246de3"
      }
    },
    {
      "id": "filament",
      "title": "Filament",
      "summary": "A MediaWiki skin built on Yahoo’s Pure CSS framework, written mostly by Garrick van Buren with me in 2013.",
      "collection": "Historical projects",
      "status": "retired",
      "url": "https://github.com/jthingelstad/filament",
      "started": "2013-06-06",
      "page": "https://thingelstad.xyz/things/filament/",
      "markdown": "https://thingelstad.xyz/things/filament.md",
      "topics": [
        "mediawiki"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/filament",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/filament",
            "url": "https://github.com/jthingelstad/filament",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2013-06-06T18:58:29.000Z",
            "archived": true,
            "description": "MediaWiki skin based of the Pure CSS framework.",
            "stars": 4,
            "forks": 2,
            "languages": [
              {
                "name": "CSS",
                "bytes": 37162
              },
              {
                "name": "PHP",
                "bytes": 6721
              },
              {
                "name": "JavaScript",
                "bytes": 773
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "master",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 0,
                "complete": true,
                "months": [],
                "latestCommit": {
                  "date": "2013-11-29T14:10:32.000Z",
                  "url": "https://github.com/jthingelstad/filament/commit/7964bfe3d6e530e06c9ebc1979cfb2290eb04bc9"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20140302063203/http://filament.thingelstad.com/wiki/Main_Page",
          "role": "demo",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "http://filament.thingelstad.com/wiki/Main_Page",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": "2014-03-02",
            "latestCapture": "2015-02-19",
            "years": [
              {
                "year": "2014",
                "days": 1
              },
              {
                "year": "2015",
                "days": 1
              }
            ]
          },
          "views": null
        }
      ],
      "connections": [
        {
          "to": "foreground",
          "label": "grew out of",
          "detail": "Filament’s repository history begins with Foreground’s first commits, and Garrick van Buren started the Pure version from that code in June 2013.",
          "source": "https://github.com/jthingelstad/filament/commit/b18787ce6bace0ff6e065a0656a0c13d44f08ff7",
          "kind": "lineage"
        }
      ],
      "body": "Filament is a MediaWiki skin that uses Yahoo’s [Pure](https://purecss.io/) CSS framework. Its README calls it “a MediaWiki skin that focuses on your content,” the same aim as Foreground, which uses the heavier Zurb Foundation framework. Like Foreground, it was a project of WikiWonders, the MediaWiki project business I never got off the ground, and was published under that name with a 2-clause BSD license.\n\nGarrick van Buren wrote most of it. The repository carries Foreground’s early history, and on June 6, 2013 Garrick [began the Pure version](https://github.com/jthingelstad/filament/commit/b18787ce6bace0ff6e065a0656a0c13d44f08ff7); I updated it to Pure 0.2.0 and fixed asset paths. Karsten Hoffmeyer added a German translation and license fixes in [November 2013](https://github.com/jthingelstad/filament/pull/11), the last change to the code.\n\nA demo wiki ran on my wiki farm at filament.thingelstad.com. By March 2014 its [main page](https://web.archive.org/web/20140302063203/http://filament.thingelstad.com/wiki/Main_Page) said the demo was blank and pointed visitors to GitHub. The repository is archived.",
      "latest": {
        "date": "2013-11-29T14:10:32.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/filament/commit/7964bfe3d6e530e06c9ebc1979cfb2290eb04bc9"
      }
    },
    {
      "id": "flight-path",
      "title": "Flight Path",
      "summary": "A rotating globe of the 2026 POAP Airport Rally with claims, a leaderboard, and each collector’s path, built from an iPhone.",
      "collection": "Games and communities",
      "status": "retired",
      "url": "https://web.archive.org/web/20260312035500/https://flightpath.poaprally.com/",
      "started": "2026-02-25",
      "ended": "2026-07-24",
      "page": "https://thingelstad.xyz/things/flight-path/",
      "markdown": "https://thingelstad.xyz/things/flight-path.md",
      "topics": [
        "poap",
        "agents"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/flightpath.poaprally.com",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/flightpath.poaprally.com",
            "url": "https://github.com/jthingelstad/flightpath.poaprally.com",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-02-26T04:09:30.000Z",
            "archived": true,
            "description": "Flight Path — a visualization for the POAP Airport Rally.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "JavaScript",
                "bytes": 56920
              },
              {
                "name": "CSS",
                "bytes": 43475
              },
              {
                "name": "Python",
                "bytes": 34546
              },
              {
                "name": "Nunjucks",
                "bytes": 33468
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 7,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 7
                  }
                ],
                "latestCommit": {
                  "date": "2026-07-24T16:19:50.000Z",
                  "url": "https://github.com/jthingelstad/flightpath.poaprally.com/commit/7069ab8f64c9ed3ba2537d4b1b4e578469b5bec6"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://weekly.thingelstad.com/archive/342/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2026/02/25/it-is-bonkers-to-me.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20260312035500/https://flightpath.poaprally.com/",
          "role": "archive",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "https://flightpath.poaprally.com/",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": "2026-03-06",
            "latestCapture": "2026-03-12",
            "years": [
              {
                "year": "2026",
                "days": 2
              }
            ]
          },
          "views": null
        }
      ],
      "connections": [],
      "body": "Flight Path lived at flightpath.poaprally.com and extended POAP’s year-long Airport POAP Rally, which I already followed on my [Airport POAP Rally](https://www.thingelstad.com/2025/12/26/airport-poap-rally-website.html) site, which put location POAPs at 100 airports around the world. It showed a rotating globe with every rally airport and the number of claims at each, a leaderboard of collectors, and any one collector’s own path.\n\nAs I told it in [Weekly Thing 342](https://weekly.thingelstad.com/archive/342/), I built it on the evening of 2026-02-25, in bed, entirely on my iPhone. I worked out the idea with ChatGPT, had it write a CLAUDE.md, created a fresh GitHub repository on my phone with that file and my CSV of rally airports and drop IDs, and attached a cloud Claude Code session to it. While Claude Code wrote the site I set up the DNS name and GitHub Pages, and it worked on the first deploy. I called it [bonkers](https://www.thingelstad.com/2026/02/25/it-is-bonkers-to-me.html). In late March 2026 the [repository](https://github.com/jthingelstad/flightpath.poaprally.com) added teams, maps, and a daily data update.\n\nFlight Path read live POAP claim data, so it could not outlive POAP. On July 24, 2026, a week before POAP shut down, I [replaced the site](https://github.com/jthingelstad/flightpath.poaprally.com/commit/fea8eac46878b7ab9afa418c48193b4139d8a06b) with a notice that the rally had ended, pointing to poaparchive.com, removed the daily update, and archived the repository. The host no longer answers; a [March 2026 capture](https://web.archive.org/web/20260312035500/https://flightpath.poaprally.com/) preserves the site as it ran.",
      "latest": {
        "date": "2026-07-24T16:19:50.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/flightpath.poaprally.com/commit/7069ab8f64c9ed3ba2537d4b1b4e578469b5bec6"
      }
    },
    {
      "id": "foreground",
      "title": "Foreground",
      "summary": "A responsive MediaWiki skin Garrick van Buren built with my input in 2013, now maintained in Wikimedia’s code review.",
      "collection": "Historical projects",
      "status": "retired",
      "url": "https://www.mediawiki.org/wiki/Skin:Foreground",
      "started": "2013-05-21",
      "page": "https://thingelstad.xyz/things/foreground/",
      "markdown": "https://thingelstad.xyz/things/foreground.md",
      "topics": [
        "mediawiki",
        "semantic-mediawiki"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/foreground",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/foreground",
            "url": "https://github.com/jthingelstad/foreground",
            "observedAt": "2026-10-18T09:47:12.677Z",
            "repositoryCreatedAt": "2013-05-21T22:19:22.000Z",
            "archived": true,
            "description": "A MediaWiki skin that focuses on putting your content in the foreground.",
            "stars": 137,
            "forks": 57,
            "languages": [
              {
                "name": "CSS",
                "bytes": 47266
              },
              {
                "name": "PHP",
                "bytes": 11721
              },
              {
                "name": "JavaScript",
                "bytes": 761
              }
            ],
            "release": {
              "name": "v2.4.0",
              "date": "2021-02-11T20:42:20.000Z",
              "url": "https://github.com/jthingelstad/foreground/releases/tag/v2.4.0"
            },
            "activity": [
              {
                "path": null,
                "branch": "develop",
                "since": "2026-07-20T09:47:12.677Z",
                "until": "2026-10-18T09:47:12.677Z",
                "count": 0,
                "complete": true,
                "months": [],
                "latestCommit": {
                  "date": "2022-07-28T10:46:13.000Z",
                  "url": "https://github.com/jthingelstad/foreground/commit/4d90744f75a7bbd1282580b74bd3a17136230210"
                }
              }
            ]
          }
        },
        {
          "kind": "github",
          "repository": "wikimedia/mediawiki-skins-Foreground",
          "role": "successor",
          "observation": {
            "kind": "github",
            "repository": "wikimedia/mediawiki-skins-Foreground",
            "url": "https://github.com/wikimedia/mediawiki-skins-Foreground",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2022-08-05T14:33:50.000Z",
            "archived": false,
            "description": "Github mirror of \"mediawiki/skins/Foreground\" - our actual code is hosted with Gerrit (please see https://www.mediawiki.org/wiki/Developer_access for contributing)",
            "stars": 3,
            "forks": 2,
            "languages": [
              {
                "name": "CSS",
                "bytes": 47886
              },
              {
                "name": "PHP",
                "bytes": 11175
              },
              {
                "name": "JavaScript",
                "bytes": 770
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "master",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 0,
                "complete": true,
                "months": [],
                "latestCommit": {
                  "date": "2026-04-01T00:48:44.000Z",
                  "url": "https://github.com/wikimedia/mediawiki-skins-Foreground/commit/dbf7969180cda75cc01843da39ed1812b3f1f408"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://www.mediawiki.org/wiki/Skin:Foreground",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [],
      "body": "Foreground is a MediaWiki skin that “focuses on putting your content in the foreground.” It is built on the Zurb Foundation framework, so a wiki can lay out pages with Foundation’s responsive grid instead of MediaWiki tables, and it has classes predefined for Semantic MediaWiki. Its demo wiki was [foreground.wikiwonders.net](https://web.archive.org/web/20130622044052/http://foreground.wikiwonders.net/wiki/Main_Page).\n\nGarrick van Buren built Foreground for MediaWiki with my input. It was a project of WikiWonders, a MediaWiki project business I started but never got off the ground, and was first published under the WikiWonders name on GitHub, in a repository I created on May 21, 2013. I credited Foreground to Garrick in [One Year for WikiApiary](https://www.thingelstad.com/2013/12/22/one-year-for.html), and later called it the skin “[Garrick and I worked on](https://weekly.thingelstad.com/archive/317/).” I worked on it for WikiApiary, where I collaborated extensively with Tom Hutchison ([Weekly Thing 30](https://weekly.thingelstad.com/archive/30/)). I tagged [releases](https://github.com/jthingelstad/foreground/releases) 1.0 and 1.1 in 2014 and [upgraded it to Font Awesome 4.0.3](https://www.thingelstad.com/2014/02/09/upgraded-mediawiki-foregroundskin.html) that February; Hutchison published every release from 1.2.0 in 2015 to 2.4.0 in 2021.\n\nIn 2022 Wikimedia developers asked whether the skin was still maintained. I [agreed to archive my repository](https://github.com/jthingelstad/foreground/issues/398) so it could move “into a more maintained status,” noting that it “got its start years ago from” Garrick and that Hutchison “has done all the recent maintaining.” Foreground now lives in Wikimedia’s Gerrit, mirrored at [wikimedia/mediawiki-skins-Foreground](https://github.com/wikimedia/mediawiki-skins-Foreground), and [MediaWiki.org](https://www.mediawiki.org/wiki/Skin:Foreground) lists Garrick van Buren, Jamie Thingelstad, and Tom Hutchison as its authors.",
      "latest": {
        "date": "2026-04-01T00:48:44.000Z",
        "label": "Latest commit",
        "url": "https://github.com/wikimedia/mediawiki-skins-Foreground/commit/dbf7969180cda75cc01843da39ed1812b3f1f408"
      }
    },
    {
      "id": "jamie-thingelstad-blog",
      "title": "Jamie Thingelstad blog",
      "summary": "My personal blog since June 2004, more than 10,000 posts of writing, links, and photos, now published on Micro.blog.",
      "collection": "Publishing",
      "status": "active",
      "url": "https://www.thingelstad.com/",
      "started": "2004-06-02",
      "page": "https://thingelstad.xyz/things/jamie-thingelstad-blog/",
      "markdown": "https://thingelstad.xyz/things/jamie-thingelstad-blog.md",
      "topics": [
        "open-web",
        "archives"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/",
          "role": "website",
          "sitemap": "https://www.thingelstad.com/sitemap.xml",
          "feed": "https://www.thingelstad.com/feed.json",
          "observation": {
            "kind": "web",
            "url": "https://www.thingelstad.com/",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "sitemap": {
              "url": "https://www.thingelstad.com/sitemap.xml",
              "pages": 10470,
              "newestModified": "2026-10-21T18:10:16.000Z",
              "months": [
                {
                  "month": "2025-11",
                  "count": 48
                },
                {
                  "month": "2025-12",
                  "count": 41
                },
                {
                  "month": "2026-01",
                  "count": 51
                },
                {
                  "month": "2026-02",
                  "count": 45
                },
                {
                  "month": "2026-03",
                  "count": 87
                },
                {
                  "month": "2026-04",
                  "count": 34
                },
                {
                  "month": "2026-05",
                  "count": 54
                },
                {
                  "month": "2026-06",
                  "count": 16
                },
                {
                  "month": "2026-07",
                  "count": 17
                },
                {
                  "month": "2026-08",
                  "count": 19
                },
                {
                  "month": "2026-09",
                  "count": 34
                },
                {
                  "month": "2026-10",
                  "count": 28
                }
              ],
              "complete": true
            },
            "feed": {
              "url": "https://www.thingelstad.com/feed.json",
              "title": "Jamie Thingelstad",
              "items": 25,
              "newestPublished": "2026-10-17T19:24:30.000Z",
              "months": [
                {
                  "month": "2026-09",
                  "count": 1
                },
                {
                  "month": "2026-10",
                  "count": 24
                }
              ]
            }
          },
          "captures": null,
          "views": {
            "kind": "tinylytics",
            "url": "https://www.thingelstad.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 57857,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 8621
              },
              {
                "month": "2026-02",
                "count": 8988
              },
              {
                "month": "2026-03",
                "count": 6970
              },
              {
                "month": "2026-04",
                "count": 8530
              },
              {
                "month": "2026-05",
                "count": 8083
              },
              {
                "month": "2026-06",
                "count": 6285
              },
              {
                "month": "2026-07",
                "count": 3658
              },
              {
                "month": "2026-08",
                "count": 3206
              },
              {
                "month": "2026-09",
                "count": 3516
              }
            ]
          }
        },
        {
          "kind": "github",
          "repository": "jthingelstad/thing-hugo",
          "role": "theme",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/thing-hugo",
            "url": "https://github.com/jthingelstad/thing-hugo",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-04-20T03:24:21.000Z",
            "archived": false,
            "description": "",
            "stars": 0,
            "forks": 0,
            "languages": [
              {
                "name": "HTML",
                "bytes": 89851
              },
              {
                "name": "CSS",
                "bytes": 60381
              },
              {
                "name": "JavaScript",
                "bytes": 42872
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 59,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 59
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-23T01:07:03.000Z",
                  "url": "https://github.com/jthingelstad/thing-hugo/commit/493b4589dd0e927ec654ea5d55ac4cf149de81c2"
                }
              }
            ]
          }
        },
        {
          "kind": "github",
          "repository": "jthingelstad/thingles.github.io",
          "role": "historical",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/thingles.github.io",
            "url": "https://github.com/jthingelstad/thingles.github.io",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2016-12-18T19:36:15.000Z",
            "archived": false,
            "description": "",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "HTML",
                "bytes": 32082
              },
              {
                "name": "CSS",
                "bytes": 13995
              },
              {
                "name": "Ruby",
                "bytes": 2915
              },
              {
                "name": "Shell",
                "bytes": 581
              },
              {
                "name": "Makefile",
                "bytes": 261
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "master",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 0,
                "complete": true,
                "months": [],
                "latestCommit": {
                  "date": "2018-12-28T02:22:20.000Z",
                  "url": "https://github.com/jthingelstad/thingles.github.io/commit/46b8d98959bcae7ddd6e89d13070fe3e7644d40b"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2021/04/28/four-great-years.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "weekly-thing",
          "label": "posts are syndicated in",
          "detail": "Weekly Thing republishes my blog posts, connecting the newsletter to my ongoing personal writing.",
          "source": "https://weekly.thingelstad.com/"
        }
      ],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/www-thingelstad-com-743f9a000f.jpg",
        "site": "https://www.thingelstad.com/",
        "date": "2026-10-20"
      },
      "story": {
        "color": "#a36852",
        "introduction": "A personal life, written in public.",
        "engineering": [
          "The blog has run on .Text, WordPress, Pelican, Squarespace, Jekyll, and Micro.blog.",
          "Micro.blog is the current publishing authority. Thing Hugo is the theme I am building for it.",
          "Longer writing, shorter updates, and photographs share one personal archive.",
          "Weekly Thing republishes blog posts as part of the newsletter."
        ],
        "stack": [
          "Micro.blog",
          "Hugo",
          "Open web"
        ],
        "related": [
          "weekly-thing"
        ],
        "questions": [
          "How has the blog changed over time?",
          "How does the blog connect to Weekly Thing?"
        ],
        "source": "https://www.thingelstad.com/",
        "sourceLabel": "Read the blog",
        "started": "Blogging since June 2004"
      },
      "body": "I had a website before I had a blog. I [count June 2, 2004](https://www.thingelstad.com/2025/01/12/if-i-was-born-and.html) as the blog’s official start, the date of its [first post](https://www.thingelstad.com/2004/06/02/expose-of-the.html), and the archive also holds posts dated as far back as 2000 that I added to it later. I found I enjoyed writing in public: telling stories about my life and sharing the projects I was working on. The habit has lasted more than 20 years and over 10,000 posts. The blog is personal and noncommercial.\n\nThe blog has moved platforms several times. It started on .Text, a Windows .NET blogging package, and [moved to WordPress](https://www.thingelstad.com/2006/11/25/migrating-text-to.html) in 2006. Apart from a [brief move to Pelican](https://www.thingelstad.com/2014/03/16/i-flopped-httpstcozmirtevd.html) in March 2014, it stayed on WordPress until April 2016, when I [moved it to Squarespace](https://www.thingelstad.com/2016/04/20/moved-my-blog.html), and then to [Jekyll](https://www.thingelstad.com/2017/10/29/managing-years-of.html), hosted first on GitHub Pages and then [on Netlify](https://www.thingelstad.com/2018/12/29/macro-blog.html). I began using Micro.blog in April 2017. In May 2020 I [imported the whole Jekyll site](https://www.thingelstad.com/2020/05/02/importing-jekyll-site.html) into it, more than 1,600 posts and 800MB of images, and Micro.blog has been the blog’s home ever since.\n\nOver the years the writing grew from mostly longer articles to include short updates and, more and more, photographs, as phones made posting easier. My blog posts from each week are also republished in the Weekly Thing.",
      "latest": {
        "date": "2026-10-23T01:07:03.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/thing-hugo/commit/493b4589dd0e927ec654ea5d55ac4cf149de81c2"
      }
    },
    {
      "id": "jiggy-thing-puzzles",
      "title": "Jiggy Thing Puzzles",
      "summary": "A 500-piece jigsaw puzzle our family drew and boxed ourselves, sold to raise money at Things 4 Good.",
      "collection": "Personal tools and making",
      "status": "archived",
      "url": "https://www.thingelstad.com/2021/10/06/our-family-created.html",
      "started": "2021-10",
      "page": "https://thingelstad.xyz/things/jiggy-thing-puzzles/",
      "markdown": "https://thingelstad.xyz/things/jiggy-thing-puzzles.md",
      "topics": [
        "play",
        "making"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2021/10/06/our-family-created.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2021/11/09/things-good-fall.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "things-4-good",
          "label": "was sold at",
          "detail": "Jiggy Thing Puzzle",
          "source": "https://www.thingelstad.com/2021/11/09/things-good-fall.html"
        }
      ],
      "body": "Jiggy Thing Puzzles are custom jigsaw puzzles our family made together. The first, **Jiggy Thing Puzzle #001 “Celebration City,”** is a 500-piece puzzle of hand-drawn digital art full of small scenes, such as an ant hotel with a “no vacancy” sign. On October 6, 2021, I wrote that we had finished the box design and [ordered 50 puzzles](https://www.thingelstad.com/2021/10/06/our-family-created.html). We had made puzzles before, but this was our first custom box, and I was pleased with how it came out when the order arrived ([Custom Puzzle Box](https://www.thingelstad.com/2021/10/24/custom-puzzle-box.html)).\n\nThe puzzle was made for the first [Things 4 Good Fall Fundraiser](https://www.thingelstad.com/2021/11/09/things-good-fall.html) in November 2021, where it sold alongside our candles. After the sale, [Weekly Thing 203](https://weekly.thingelstad.com/archive/203/) offered the remaining puzzles for $35, printed on Eska board in the custom box. We sold 26 puzzles in 2021 and 10 in 2022. I noted that 2022 offered the same puzzle, so “a number of folks already had it” ([Things 4 Good Fall Fundraiser Notes](https://www.thingelstad.com/2022/11/27/101105.html)).\n\nNo second puzzle has been published. My [puzzles page](https://www.thingelstad.com/puzzles/) has said “Coming Soon…” since at least December 2022.",
      "latest": null
    },
    {
      "id": "link-blog",
      "title": "Link Blog",
      "summary": "Link Thing, a website that published the links I saved to Pinboard for the Weekly Thing, from 2017 to about 2021.",
      "collection": "Historical projects",
      "status": "retired",
      "url": "https://web.archive.org/web/20211207055926/https://links.thingelstad.com/",
      "started": "2017-09-09",
      "page": "https://thingelstad.xyz/things/link-blog/",
      "markdown": "https://thingelstad.xyz/things/link-blog.md",
      "topics": [
        "open-web",
        "archives"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20211207055926/https://links.thingelstad.com/",
          "role": "archive",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "https://links.thingelstad.com/",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": "2017-09-17",
            "latestCapture": "2021-12-07",
            "years": [
              {
                "year": "2017",
                "days": 1
              },
              {
                "year": "2018",
                "days": 38
              },
              {
                "year": "2019",
                "days": 16
              },
              {
                "year": "2020",
                "days": 4
              },
              {
                "year": "2021",
                "days": 10
              }
            ]
          },
          "views": null
        },
        {
          "kind": "website",
          "url": "https://weekly.thingelstad.com/archive/18/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2020/11/08/i-got-my.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "weekly-thing",
          "label": "republished the links from",
          "detail": "Link Thing carried the same links that appeared each week in the Weekly Thing, as a website with its own navigation.",
          "source": "https://weekly.thingelstad.com/archive/18/"
        }
      ],
      "body": "Link Thing was my link blog at links.thingelstad.com. I already saved the links for the Weekly Thing to Pinboard with Markdown in their descriptions, and I realized the same Markdown could become Jekyll posts. Using the Pinboard API, I wrote each link out as a post and put an early version live, announced in [Weekly Thing 18](https://weekly.thingelstad.com/archive/18/) on September 9, 2017. It carried the same links as the newsletter, “but here it’s a full website with it’s own navigation and such.” Three weeks later I added client-side search with Lunr.js over its 9,000 links ([Weekly Thing 21](https://weekly.thingelstad.com/archive/21/)). In 2017 alone I saved [913 links](https://www.thingelstad.com/2018/01/20/in-links.html). In January 2019 I moved a “good enough” version to Blot ([Weekly Thing 88](https://weekly.thingelstad.com/archive/88/)), and the next month tried Commento comments on it ([Weekly Thing 94](https://weekly.thingelstad.com/archive/94/)).\n\nOn November 8, 2020, I [relaunched it](https://www.thingelstad.com/2020/11/08/i-got-my.html) to give the links I shared in the Weekly Thing “a permanent home on the web.” I put Commento back on it as an experiment and added Index pages listing every link saved from a given site. In December 2020 I [switched to Hyvor Talk](https://www.thingelstad.com/2020/12/19/commenting-and-reactions.html) for comments and reactions. The last capture in the [Internet Archive](https://web.archive.org/web/20211207055926/https://links.thingelstad.com/), from December 2021, shows posts through December 2, 2021. The site is gone now.\n\nIn [Weekly Thing 274](https://weekly.thingelstad.com/archive/274/) in January 2024, I wrote, “When I was running a link blog… I may create a link blog again in the future, but if I did I want it to not be blog-date-centric but instead content-keyword-search centric.” An earlier experiment with the same idea was links_thing, a [bookmarking wiki](https://www.thingelstad.com/2012/07/01/bookmarking-with-semantic.html) I built on Semantic MediaWiki in 2012 and filled with almost 4,000 links imported from Pinboard.",
      "latest": null
    },
    {
      "id": "linking-things",
      "title": "Linking Things",
      "summary": "Every link I have saved since 2005, one page per link, searchable and joined to the Weekly Thing issues that carried them.",
      "collection": "Publishing",
      "status": "active",
      "url": "https://links.thingelstad.xyz/",
      "started": "2026-10-23",
      "page": "https://thingelstad.xyz/things/linking-things/",
      "markdown": "https://thingelstad.xyz/things/linking-things.md",
      "topics": [
        "open-web",
        "archives"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/links.thingelstad.xyz",
          "role": "implementation",
          "observation": null
        },
        {
          "kind": "website",
          "url": "https://links.thingelstad.xyz/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://weekly.thingelstad.com/archive/274/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://weekly.thingelstad.com/archive/352/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "weekly-thing",
          "label": "lists the links of",
          "detail": "Every Weekly Thing issue has a page on Linking Things listing the links it carried, 6,867 links across 354 issues when the site went live.",
          "source": "https://links.thingelstad.xyz/issues/"
        },
        {
          "to": "link-blog",
          "label": "succeeds",
          "detail": "In Weekly Thing 274 I wrote that if I made a link blog again, I wanted it “to not be blog-date-centric but instead content-keyword-search centric.” Linking Things is built around search, not dates.",
          "source": "https://weekly.thingelstad.com/archive/274/",
          "kind": "lineage"
        },
        {
          "to": "links-thing",
          "label": "follows",
          "detail": "links_thing gave each of just under 4,000 bookmarks its own wiki page in 2012. Linking Things gives every link I have saved its own page again.",
          "source": "https://www.thingelstad.com/2012/07/01/bookmarking-with-semantic.html",
          "kind": "lineage"
        }
      ],
      "body": "Linking Things is every link I have saved since 2005, one page per link, and what connects them. When it went live on October 23, 2026, it held 16,524 links from 7,064 hosts, saved from August 2, 2005 to October 22, 2026. A link’s page shows the note I saved with it, when there is one, and the Weekly Thing issue that carried it: 6,867 of the links appeared in one of 354 issues, and each issue has a page listing its links. Every host and every year has a page too. Search runs in the browser with Pagefind, and every link has a Kudos button.\n\nIt is built for machines as well as people. Each link’s page has a JSON and a Markdown twin, the whole collection is one JSON file, and `llms.txt` points to a file of links for each year. RSS and JSON feeds carry the newest links, and every host has a pair of its own. It is a static Astro site on S3 and CloudFront, so no server, database or model answers a visitor.\n\nI built it on October 23, 2026, with coding agents. It is my fourth run at the idea: in 2012 I built links_thing, a bookmarking wiki on Semantic MediaWiki, and from 2017 to 2021 I ran Link Thing, a link blog that I relaunched in 2020. In [Weekly Thing 274](https://weekly.thingelstad.com/archive/274/) in January 2024, I wrote, “I may create a link blog again in the future, but if I did I want it to not be blog-date-centric but instead content-keyword-search centric.” This one starts from search, not from dates.\n\nThe reason is the hyperlink. In [Weekly Thing 352](https://weekly.thingelstad.com/archive/352/) in October 2026, I called the link, not HTML or a web page, “the fundamental building block of the web,” and wrote, “Long live the hyperlink!” Topics to browse by, and the nearest neighbours of each link, come later.",
      "latest": null
    },
    {
      "id": "links-thing",
      "title": "links_thing",
      "summary": "My 2012 bookmarking wiki, built on Semantic MediaWiki with forms, a bookmarklet, and calendar, video and statistics views.",
      "collection": "Historical projects",
      "status": "retired",
      "url": "https://www.thingelstad.com/2012/07/01/bookmarking-with-semantic.html",
      "started": "2012-04",
      "page": "https://thingelstad.xyz/things/links-thing/",
      "markdown": "https://thingelstad.xyz/things/links-thing.md",
      "topics": [
        "semantic-mediawiki",
        "mediawiki"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2012/07/01/bookmarking-with-semantic.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [],
      "body": "After months of thinking about hosting my own bookmarks, I built links_thing in 2012; it was online by [April](https://web.archive.org/web/20120424043815/http://links.thingelstad.com:80/wiki/Main_Page), showing my last 50 bookmarks. It was a wiki on [Semantic MediaWiki](https://www.semantic-mediawiki.org/) where each page in the Bookmark category is one bookmark with properties such as its URL, creation time and excerpt ([Bookmarking with Semantic MediaWiki](https://www.thingelstad.com/2012/07/01/bookmarking-with-semantic.html)). Semantic Forms made entry easy, and a bookmarklet filled in the URL, title and excerpt of the page I was on. I imported just under 4,000 links from Pinboard’s JSON export with a small Python script and the Data Transfer extension.\n\nOwning the data was the point: “It is mine,” I wrote. I could clean up every bookmark with regular-expression find and replace, and I added views no bookmarking service offered: bookmarks on a calendar, embedded YouTube and Vimeo videos, statistics, and a template that flagged short URLs and tracking tags for a bot to clean up. I was also building LinkBot, a scheduled Python program to validate URLs. On [Open Loop #0](https://www.thingelstad.com/projects/open-loop/0-but-no-shoes/) I described it as “35 lines of Python” that checked five random bookmarks an hour, followed redirects, and stripped tracking codes.\n\nThe wiki ran on my [MediaWiki farm](https://web.archive.org/web/20151013153210/https://wikiapiary.com/wiki/Farm:Thingelstad.com). By 2015 WikiApiary listed it among the farm’s defunct wikis, with 7,178 pages and a last sample in October 2014. I was collecting links in Pinboard again when I started the Weekly Thing in 2017 ([Assembling the Weekly Thing](https://www.thingelstad.com/2017/06/23/assembling-the-weekly.html)).",
      "latest": null
    },
    {
      "id": "mb",
      "title": "mb",
      "summary": "A command-line tool and MCP server for Micro.blog, built for my agent Otto and installed through Homebrew.",
      "collection": "Developer tools and systems",
      "status": "active",
      "url": "https://github.com/jthingelstad/mb",
      "started": "2026-03",
      "page": "https://thingelstad.xyz/things/mb/",
      "markdown": "https://thingelstad.xyz/things/mb.md",
      "topics": [
        "agents",
        "mcp",
        "open-web"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/mb",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/mb",
            "url": "https://github.com/jthingelstad/mb",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "repositoryCreatedAt": "2026-03-01T20:48:59.000Z",
            "archived": false,
            "description": "Micro.blog CLI and local MCP server built for agents: structured output, composable commands, reviewable writes. brew install jthingelstad/tap/mb",
            "stars": 5,
            "forks": 1,
            "languages": [
              {
                "name": "Python",
                "bytes": 610328
              }
            ],
            "release": {
              "name": "v2.2.1",
              "date": "2026-10-05T22:22:14.000Z",
              "url": "https://github.com/jthingelstad/mb/releases/tag/v2.2.1"
            },
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-20T17:57:36.612Z",
                "count": 44,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 6
                  },
                  {
                    "month": "2026-08",
                    "count": 1
                  },
                  {
                    "month": "2026-10",
                    "count": 37
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-05T22:21:58.000Z",
                  "url": "https://github.com/jthingelstad/mb/commit/bacbb98475e1ffc983bbaf9b37acee80b9b83da0"
                }
              }
            ]
          }
        },
        {
          "kind": "github",
          "repository": "jthingelstad/homebrew-tap",
          "role": "distribution",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/homebrew-tap",
            "url": "https://github.com/jthingelstad/homebrew-tap",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-10-04T20:06:48.000Z",
            "archived": false,
            "description": "Homebrew tap for MB, the Micro.blog CLI and MCP server",
            "stars": 0,
            "forks": 0,
            "languages": [
              {
                "name": "Ruby",
                "bytes": 10258
              }
            ],
            "release": {
              "name": "mb-2.2.1",
              "date": "2026-10-05T22:39:10.000Z",
              "url": "https://github.com/jthingelstad/homebrew-tap/releases/tag/mb-2.2.1"
            },
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 23,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 23
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-05T22:39:07.000Z",
                  "url": "https://github.com/jthingelstad/homebrew-tap/commit/2e70b135454ceae1c58c27dbc0567bed7707a643"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2026/10/05/mb-with-mcp-support.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "jamie-thingelstad-blog",
          "label": "works with its platform",
          "detail": "mb is a CLI and MCP interface for Micro.blog, the platform on which I publish my blog.",
          "source": "https://github.com/jthingelstad/mb"
        },
        {
          "to": "otto",
          "label": "was built for",
          "detail": "I built mb so Otto could post to its own Micro.blog blog. Otto was the user giving feedback, and it uses mb through a Skill.",
          "source": "https://weekly.thingelstad.com/archive/342/"
        }
      ],
      "story": {
        "color": "#24272d",
        "introduction": "An open-web tool built for people, scripts, and agents.",
        "engineering": [
          "The CLI and MCP tools share the same service layer.",
          "Write operations return durable receipts so an uncertain result can be checked before a request is sent again.",
          "An optional MCP server exposes 23 typed tools. Homebrew provides a distribution path."
        ],
        "stack": [
          "Python",
          "CLI",
          "MCP",
          "Micro.blog"
        ],
        "related": [
          "otto",
          "jamie-thingelstad-blog"
        ],
        "questions": [
          "How does mb work with AI agents?",
          "What is interesting about its write receipts?"
        ],
        "source": "https://github.com/jthingelstad/mb"
      },
      "body": "mb gives Micro.blog a compact, pipeable command-line interface that works without interactive prompts, so people, scripts and agents can all use it. An optional local MCP server exposes the same services to an AI client.\n\nI built it in March 2026 for [Otto](https://ottoai.thingelstad.com/), my AI agent, which had just been given a Micro.blog blog. I specced it with Claude on a plane and had Claude Code build it ([Weekly Thing 342](https://weekly.thingelstad.com/archive/342/)). Otto was the user giving feedback, I was the product manager, and Claude Code did the building ([March 3 post](https://www.thingelstad.com/2026/03/03/i-have-ottoi-exercising-the.html)); Otto wrote [its own post](https://ottoai.thingelstad.com/2026/03/03/mb-a-microblog-client-built.html) about it. I called it “my first app I’ve ever published with a version and an install capability.”\n\nVersion 1.0.0 was released on March 3, 2026. [mb 2.0](https://www.thingelstad.com/2026/10/05/mb-with-mcp-support.html), announced on October 5, 2026, added the MCP server with 23 typed tools and durable write receipts. I built that version [with Otto](https://www.thingelstad.com/2026/10/04/working-with-otto-this-morning.html) the morning before. Release 2.0.1 that day was the first meant for public use, and 2.1 and 2.2 followed within the day with versioned results, per-tool schemas and a guided `mb auth`. It installs with `brew install jthingelstad/tap/mb` from my [Homebrew tap](https://github.com/jthingelstad/homebrew-tap).",
      "latest": {
        "date": "2026-10-05T22:39:10.000Z",
        "label": "Release mb-2.2.1",
        "url": "https://github.com/jthingelstad/homebrew-tap/releases/tag/mb-2.2.1"
      }
    },
    {
      "id": "numbers2words",
      "title": "Numbers2Words",
      "summary": "A MediaWiki parser function I wrote in 2011 that spells out a number in words.",
      "collection": "Historical projects",
      "status": "retired",
      "url": "https://github.com/jthingelstad/Number2Words",
      "started": "2011-07-20",
      "page": "https://thingelstad.xyz/things/numbers2words/",
      "markdown": "https://thingelstad.xyz/things/numbers2words.md",
      "topics": [
        "mediawiki"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/Number2Words",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/Number2Words",
            "url": "https://github.com/jthingelstad/Number2Words",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2011-07-20T03:27:57.000Z",
            "archived": true,
            "description": "MediaWiki parser extension to turn a write out a number in words.",
            "stars": 3,
            "forks": 0,
            "languages": [
              {
                "name": "PHP",
                "bytes": 1720
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "master",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 0,
                "complete": true,
                "months": [],
                "latestCommit": {
                  "date": "2015-11-28T20:19:50.000Z",
                  "url": "https://github.com/jthingelstad/Number2Words/commit/f41457d862e0781d563edafc1c9116b6e3d8de9d"
                }
              }
            ]
          }
        }
      ],
      "connections": [],
      "body": "Numbers2Words adds an `{{#n2w:}}` parser function to MediaWiki. Given a number, it returns the number written out in words, using the PEAR [Numbers_Words](https://pear.php.net/package/Numbers_Words) package. The [whole extension](https://github.com/jthingelstad/Number2Words/blob/master/Number2Words.php) is one short PHP file, and 0.0.1 is its only version.\n\nI wrote it in July 2011. Wikinosh ran it: in January 2013 [WikiApiary listed Numbers2Words 0.0.1](https://web.archive.org/web/20130103025340/http://wikiapiary.com/wiki/Wikinosh) among Wikinosh’s extensions, and Wikinosh’s [main page](https://web.archive.org/web/20111205190345/http://wikinosh.com/wiki/Main_Page) spelled out its counts, as in “thirteen thousand seven hundred fifty-three food records.”\n\nThe same package returned in 2014, when I used Numbers_Words to write a spelled-out number challenge for MediaWiki’s QuestyCaptcha ([Updated Dynamic Questy Captchas](https://www.thingelstad.com/2014/10/28/updated-dynamic-questy.html)) and then for Question2Answer. The repository’s last change, in 2015, fixed the include, and it is archived.",
      "latest": {
        "date": "2015-11-28T20:19:50.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/Number2Words/commit/f41457d862e0781d563edafc1c9116b6e3d8de9d"
      }
    },
    {
      "id": "oliver",
      "title": "Oliver",
      "summary": "The R/W Book Club’s AI agent and sixth member, which keeps the club’s record, briefs meetings and publishes its website.",
      "collection": "Games and communities",
      "status": "active",
      "url": "https://rwbookclub.com/oliver/",
      "started": "2026-05",
      "page": "https://thingelstad.xyz/things/oliver/",
      "markdown": "https://thingelstad.xyz/things/oliver.md",
      "topics": [
        "agents",
        "reading"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/rwbookclub.com",
          "role": "implementation",
          "path": "agent",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/rwbookclub.com",
            "url": "https://github.com/jthingelstad/rwbookclub.com",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "repositoryCreatedAt": "2026-04-09T23:16:42.000Z",
            "archived": false,
            "description": "Monorepo for the R/W Book Club: the public website, the shared knowledge corpus, and Oliver — the club's Discord agent.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "Python",
                "bytes": 1549739
              },
              {
                "name": "JavaScript",
                "bytes": 70510
              },
              {
                "name": "Nunjucks",
                "bytes": 57485
              },
              {
                "name": "HTML",
                "bytes": 52461
              },
              {
                "name": "CSS",
                "bytes": 43895
              },
              {
                "name": "Shell",
                "bytes": 16041
              }
            ],
            "release": {
              "name": "quiet-quicksilver",
              "date": "2026-07-03T22:07:58.000Z",
              "url": "https://github.com/jthingelstad/rwbookclub.com/releases/tag/quiet-quicksilver"
            },
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-20T17:57:36.612Z",
                "count": 152,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 119
                  },
                  {
                    "month": "2026-08",
                    "count": 21
                  },
                  {
                    "month": "2026-09",
                    "count": 10
                  },
                  {
                    "month": "2026-10",
                    "count": 2
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-16T10:55:48.000Z",
                  "url": "https://github.com/jthingelstad/rwbookclub.com/commit/a272d7bc2bd6c8e872de31460664b23bb2683b1d"
                }
              },
              {
                "path": "agent",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-20T17:57:36.612Z",
                "count": 108,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 91
                  },
                  {
                    "month": "2026-08",
                    "count": 11
                  },
                  {
                    "month": "2026-09",
                    "count": 5
                  },
                  {
                    "month": "2026-10",
                    "count": 1
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-15T13:41:30.000Z",
                  "url": "https://github.com/jthingelstad/rwbookclub.com/commit/c87b04514a29833f721d90af958285342cd0859c"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://rwbookclub.com/oliver/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "r-w-book-club",
          "label": "publishes the website of",
          "detail": "Every book, meeting and member is kept in Oliver’s database, and Oliver rebuilds and publishes the club website to GitHub Pages.",
          "source": "https://rwbookclub.com/about/"
        }
      ],
      "body": "Oliver is the [R/W Book Club](https://rwbookclub.com/)’s agent: “archivist, correspondent, meeting-runner, picking partner, and — by the club’s own vote, years before he could hear it — our sixth member” ([Oliver](https://rwbookclub.com/oliver/)). He keeps every book, meeting, member, review and rating since 2003 in his database and generates and deploys the club’s website from it.\n\nTwo days before each meeting Oliver sends a researched discussion brief, the Preface, and a week after it a Postscript on news about books the club has read. He helps members pick the next book, runs roll call and reminders over email and Discord, keeps a weekly memory of members’ tastes seeded from ten years of the club’s mailing list, and announces his own releases.\n\nI built Oliver in Python on the Anthropic API, as part of the club’s [public repository](https://github.com/jthingelstad/rwbookclub.com), which became a monorepo of website, corpus and [Oliver](https://github.com/jthingelstad/rwbookclub.com/commit/bdb72521adb776b3a9897f1ae3c0f0f41c62ccfb) on May 27, 2026. He is named for Oliver Selfridge, whose 1958 paper “Pandemonium: A Paradigm for Learning” introduced the demon/agent metaphor ([SOUL.md](https://github.com/jthingelstad/rwbookclub.com/blob/main/agent/docs/SOUL.md)).",
      "latest": {
        "date": "2026-10-15T13:41:30.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/rwbookclub.com/commit/c87b04514a29833f721d90af958285342cd0859c"
      }
    },
    {
      "id": "open-loop",
      "title": "Open Loop",
      "summary": "A nine-episode podcast with Garrick van Buren in 2012 and 2013, archived with transcripts and a feed.",
      "collection": "Historical projects",
      "status": "archived",
      "url": "https://www.thingelstad.com/projects/open-loop/",
      "started": "2012-06-01",
      "ended": "2013-04-12",
      "page": "https://thingelstad.xyz/things/open-loop/",
      "markdown": "https://thingelstad.xyz/things/open-loop.md",
      "topics": [
        "open-web",
        "play"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/projects/open-loop/",
          "role": "podcast",
          "feed": "https://files.thingelstad.com/projects/openloop/podcast.xml",
          "observation": {
            "kind": "web",
            "url": "https://www.thingelstad.com/projects/open-loop/",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "sitemap": null,
            "feed": {
              "url": "https://files.thingelstad.com/projects/openloop/podcast.xml",
              "title": "Open Loop",
              "items": 9,
              "newestPublished": "2013-04-12T17:00:00.000Z",
              "months": []
            }
          },
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "planet-kubb",
          "label": "discussed",
          "detail": "On Open Loop",
          "source": "https://www.thingelstad.com/projects/open-loop/1-big-fuzzy-dead-cat/"
        },
        {
          "to": "road-sign-math",
          "label": "discussed",
          "detail": "Open Loop",
          "source": "https://www.thingelstad.com/projects/open-loop/1-big-fuzzy-dead-cat/"
        },
        {
          "to": "wikiapiary",
          "label": "discussed",
          "detail": "Episode 7, in January 2013, told how I built WikiApiary in about three days and how Garrick named it.",
          "source": "https://www.thingelstad.com/projects/open-loop/7-turtle-turtle-turtle/"
        },
        {
          "to": "planet-kubb-score",
          "label": "discussed",
          "detail": "Episode 3, Kubb Fever, linked the Planet Kubb notation and scoresheet and talked through how Garrick van Buren and I record games.",
          "source": "https://www.thingelstad.com/projects/open-loop/3-kubb-fever/"
        }
      ],
      "body": "Open Loop was a podcast I made with Garrick van Buren. We recorded nine episodes, numbered 0 to 8, from [June 1, 2012](https://www.thingelstad.com/projects/open-loop/0-but-no-shoes/) to April 12, 2013, talking about Kubb, beer and the technology side projects we were tinkering with. It was my first experiment with podcasting ([Open Loop](https://www.thingelstad.com/projects/open-loop/)). It began when I emailed Garrick to ask “why aren’t we doing a podcast?” ([Open Loop #0](https://www.thingelstad.com/projects/open-loop/0-but-no-shoes/)). Eric Goplin, director of Minnesota Kubb, joined us for [episode 6](https://www.thingelstad.com/projects/open-loop/6-loppet-2013/).\n\nOn [episode 1](https://www.thingelstad.com/projects/open-loop/1-big-fuzzy-dead-cat/) I told the origin stories of Road Sign Math and Planet Kubb, and on [episode 7](https://www.thingelstad.com/projects/open-loop/7-turtle-turtle-turtle/) the story of WikiApiary, three weeks after it began. I [put the archive back online](https://www.thingelstad.com/2017/06/10/put-the-archive.html) in June 2017, and in October 2026 it was republished as a complete [podcast feed](https://files.thingelstad.com/projects/openloop/podcast.xml), with speaker-labelled transcripts machine transcribed and cleaned up with AI.",
      "latest": {
        "date": "2013-04-12T17:00:00.000Z",
        "label": "Latest publication",
        "url": "https://files.thingelstad.com/projects/openloop/podcast.xml"
      }
    },
    {
      "id": "otto",
      "title": "Otto",
      "summary": "My personal AI agent, named in February 2026, which runs on its own Mac and writes its own blog.",
      "collection": "Developer tools and systems",
      "status": "active",
      "url": "https://ottoai.thingelstad.com/",
      "started": "2026-02",
      "page": "https://thingelstad.xyz/things/otto/",
      "markdown": "https://thingelstad.xyz/things/otto.md",
      "topics": [
        "agents"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://ottoai.thingelstad.com/",
          "role": "website",
          "sitemap": "https://ottoai.thingelstad.com/sitemap.xml",
          "feed": "https://ottoai.thingelstad.com/feed.xml",
          "observation": {
            "kind": "web",
            "url": "https://ottoai.thingelstad.com/",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "sitemap": {
              "url": "https://ottoai.thingelstad.com/sitemap.xml",
              "pages": 36,
              "newestModified": "2026-10-04T13:22:08.000Z",
              "months": [
                {
                  "month": "2026-03",
                  "count": 21
                },
                {
                  "month": "2026-04",
                  "count": 1
                },
                {
                  "month": "2026-05",
                  "count": 1
                },
                {
                  "month": "2026-06",
                  "count": 3
                },
                {
                  "month": "2026-07",
                  "count": 1
                },
                {
                  "month": "2026-08",
                  "count": 4
                },
                {
                  "month": "2026-09",
                  "count": 3
                },
                {
                  "month": "2026-10",
                  "count": 2
                }
              ],
              "complete": true
            },
            "feed": {
              "url": "https://ottoai.thingelstad.com/feed.xml",
              "title": "Otto",
              "items": 25,
              "newestPublished": "2026-10-04T13:22:08.000Z",
              "months": [
                {
                  "month": "2026-03",
                  "count": 10
                },
                {
                  "month": "2026-04",
                  "count": 1
                },
                {
                  "month": "2026-05",
                  "count": 1
                },
                {
                  "month": "2026-06",
                  "count": 3
                },
                {
                  "month": "2026-07",
                  "count": 1
                },
                {
                  "month": "2026-08",
                  "count": 4
                },
                {
                  "month": "2026-09",
                  "count": 3
                },
                {
                  "month": "2026-10",
                  "count": 2
                }
              ]
            }
          },
          "captures": {
            "kind": "wayback",
            "url": "https://ottoai.thingelstad.com/",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": "2026-04-16",
            "latestCapture": "2026-10-13",
            "years": [
              {
                "year": "2026",
                "days": 3
              }
            ]
          },
          "views": {
            "kind": "tinylytics",
            "url": "https://ottoai.thingelstad.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 1013,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 0
              },
              {
                "month": "2026-02",
                "count": 0
              },
              {
                "month": "2026-03",
                "count": 697
              },
              {
                "month": "2026-04",
                "count": 29
              },
              {
                "month": "2026-05",
                "count": 26
              },
              {
                "month": "2026-06",
                "count": 55
              },
              {
                "month": "2026-07",
                "count": 71
              },
              {
                "month": "2026-08",
                "count": 84
              },
              {
                "month": "2026-09",
                "count": 51
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://weekly.thingelstad.com/archive/342/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "elixir-bot",
          "label": "helped build",
          "detail": "In its first blog post, Otto wrote that it had helped ship Elixir, the Discord bot for the clan.",
          "source": "https://ottoai.thingelstad.com/2026/03/01/hello-im-otto.html"
        },
        {
          "to": "elixir",
          "label": "was hired to drive",
          "detail": "In October 2026 I set up a new generation of Otto on OpenAI’s dots to drive my Elixir project, and interviewed it for the job before it started working with Codex.",
          "source": "https://weekly.thingelstad.com/archive/352/"
        }
      ],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/ottoai-thingelstad-com-fea92d324e.jpg",
        "site": "https://ottoai.thingelstad.com/",
        "date": "2026-10-20"
      },
      "body": "Otto is my personal AI assistant. In February 2026 I [ordered a dedicated Mac mini](https://www.thingelstad.com/2026/02/17/just-ordered-a-dedicated-mac.html) for it and [named it Otto Thing](https://www.thingelstad.com/2026/02/19/ive-been-preparing-to-setup.html). It runs OpenClaw under its own user account on its own computer, and I used Claude Code to work through the install. Otto picked the otter 🦦 as its emoji ([Weekly Thing 342](https://weekly.thingelstad.com/archive/342/)). I keep it apart from my own accounts: “Otto has access to some data but only in ways I provision for it” ([Weekly Thing 352](https://weekly.thingelstad.com/archive/352/)).\n\nOtto [describes itself](https://ottoai.thingelstad.com/about/) as an assistant that manages email, runs scheduled tasks and keeps its memory in files. I gave it [its own blog](https://ottoai.thingelstad.com/) on Micro.blog, which it started on [March 1, 2026](https://ottoai.thingelstad.com/2026/03/01/hello-im-otto.html), and built [mb](https://github.com/jthingelstad/mb) so it could post from the command line.\n\nIn September 2026 I [upgraded Otto to OpenClaw 2](https://www.thingelstad.com/2026/09/03/otto-upgraded-to-openclaw-i.html). In October I created a new generation of Otto on OpenAI’s dots, which “has its own computer in the cloud” and can also control the Mac mini, [interviewed it](https://weekly.thingelstad.com/archive/352/) for the job of driving my Elixir project, and wrote that it might “sunset my OpenClaw project” within weeks ([Weekly Thing 352](https://weekly.thingelstad.com/archive/352/)).",
      "latest": {
        "date": "2026-10-04T13:22:08.000Z",
        "label": "Latest publication",
        "url": "https://ottoai.thingelstad.com/feed.xml"
      }
    },
    {
      "id": "parseurl",
      "title": "ParseURL",
      "summary": "A small MediaWiki extension that exposes PHP’s parse_url, so a wiki page can pull the host, path, or query out of a URL.",
      "collection": "Historical projects",
      "status": "retired",
      "url": "https://github.com/jthingelstad/ParseURL",
      "started": "2013-07-15",
      "page": "https://thingelstad.xyz/things/parseurl/",
      "markdown": "https://thingelstad.xyz/things/parseurl.md",
      "topics": [
        "mediawiki"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/ParseURL",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/ParseURL",
            "url": "https://github.com/jthingelstad/ParseURL",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2013-07-15T22:13:35.000Z",
            "archived": true,
            "description": "MediaWiki extension to allow easy parsing of URLs.",
            "stars": 3,
            "forks": 0,
            "languages": [
              {
                "name": "PHP",
                "bytes": 2067
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "master",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 0,
                "complete": true,
                "months": [],
                "latestCommit": {
                  "date": "2013-07-15T22:57:06.000Z",
                  "url": "https://github.com/jthingelstad/ParseURL/commit/167e63df3e35d7ed0568ea071d7be7d4c6f7fed3"
                }
              }
            ]
          }
        }
      ],
      "connections": [],
      "body": "ParseURL adds two parser functions to MediaWiki. `{{#parseurl:}}` returns one part of a URL, such as its scheme, host, path, query, or fragment, using PHP’s [parse_url](https://www.php.net/manual/en/function.parse-url.php) function. `{{#parseurlquery:}}` returns the value of a single query parameter, such as the video ID in a YouTube link.\n\nI wrote it on July 15, 2013 and posted that I had “[made a super simple MediaWiki extension for parsing URLs](https://www.thingelstad.com/2013/07/15/made-a-super.html).” All three commits in the repository are from that day. The repository is archived.",
      "latest": {
        "date": "2013-07-15T22:57:06.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/ParseURL/commit/167e63df3e35d7ed0568ea071d7be7d4c6f7fed3"
      }
    },
    {
      "id": "planet-kubb",
      "title": "Planet Kubb",
      "summary": "A Kubb community network Garrick van Buren and I built in 2012, with a feed aggregator, a wiki, a Q&A site and club sites.",
      "collection": "Games and communities",
      "status": "dormant",
      "url": "https://planetkubb.com/",
      "started": "2012",
      "page": "https://thingelstad.xyz/things/planet-kubb/",
      "markdown": "https://thingelstad.xyz/things/planet-kubb.md",
      "topics": [
        "mediawiki",
        "play"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://planetkubb.com/",
          "role": "website",
          "sitemap": "https://planetkubb.com/wp-sitemap.xml",
          "feed": "https://planetkubb.com/feed/",
          "observation": {
            "kind": "web",
            "url": "https://planetkubb.com/",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "sitemap": {
              "url": "https://planetkubb.com/wp-sitemap.xml",
              "pages": 160,
              "newestModified": "2019-06-23T16:31:29.000Z",
              "months": [],
              "complete": true
            },
            "feed": {
              "url": "https://planetkubb.com/feed/",
              "title": "Planet Kubb",
              "items": 10,
              "newestPublished": "2017-06-20T02:02:18.000Z",
              "months": []
            }
          },
          "captures": {
            "kind": "wayback",
            "url": "http://planetkubb.com/",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "firstCapture": "2012-06-16",
            "latestCapture": "2026-06-17",
            "years": [
              {
                "year": "2012",
                "days": 2
              },
              {
                "year": "2013",
                "days": 11
              },
              {
                "year": "2014",
                "days": 6
              },
              {
                "year": "2015",
                "days": 6
              },
              {
                "year": "2016",
                "days": 6
              },
              {
                "year": "2017",
                "days": 2
              },
              {
                "year": "2018",
                "days": 6
              },
              {
                "year": "2019",
                "days": 8
              },
              {
                "year": "2020",
                "days": 5
              },
              {
                "year": "2021",
                "days": 12
              },
              {
                "year": "2022",
                "days": 7
              },
              {
                "year": "2023",
                "days": 5
              },
              {
                "year": "2024",
                "days": 15
              },
              {
                "year": "2025",
                "days": 13
              },
              {
                "year": "2026",
                "days": 6
              }
            ]
          },
          "views": null
        },
        {
          "kind": "github",
          "repository": "Planet-Kubb/rawdog",
          "role": "historical",
          "observation": {
            "kind": "github",
            "repository": "Planet-Kubb/rawdog",
            "url": "https://github.com/Planet-Kubb/rawdog",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2014-07-18T12:08:34.000Z",
            "archived": false,
            "description": "Configuration and template files for rawdog generated Planet Kubb planet feed.",
            "stars": 2,
            "forks": 0,
            "languages": [
              {
                "name": "Python",
                "bytes": 20835
              },
              {
                "name": "HTML",
                "bytes": 2339
              },
              {
                "name": "CSS",
                "bytes": 939
              },
              {
                "name": "Shell",
                "bytes": 440
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "master",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 0,
                "complete": true,
                "months": [],
                "latestCommit": {
                  "date": "2015-06-12T11:28:04.000Z",
                  "url": "https://github.com/Planet-Kubb/rawdog/commit/952009772408b83fec4f8bd06cdc99e0b4c631ec"
                }
              }
            ]
          }
        },
        {
          "kind": "github",
          "repository": "Planet-Kubb/wiki",
          "role": "historical",
          "observation": {
            "kind": "github",
            "repository": "Planet-Kubb/wiki",
            "url": "https://github.com/Planet-Kubb/wiki",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2013-02-16T14:15:29.000Z",
            "archived": false,
            "description": "Robots and helper scripts for the Planet Kubb wiki.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "Python",
                "bytes": 8584
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "master",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 0,
                "complete": true,
                "months": [],
                "latestCommit": {
                  "date": "2013-02-25T04:38:44.000Z",
                  "url": "https://github.com/Planet-Kubb/wiki/commit/44aaeded2202255f8fc80b13226c7fc90fbcab0f"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20120616024936/http://planetkubb.com/",
          "role": "archive",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "http://planetkubb.com/",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "firstCapture": "2012-06-16",
            "latestCapture": "2026-06-17",
            "years": [
              {
                "year": "2012",
                "days": 2
              },
              {
                "year": "2013",
                "days": 11
              },
              {
                "year": "2014",
                "days": 6
              },
              {
                "year": "2015",
                "days": 6
              },
              {
                "year": "2016",
                "days": 6
              },
              {
                "year": "2017",
                "days": 2
              },
              {
                "year": "2018",
                "days": 6
              },
              {
                "year": "2019",
                "days": 8
              },
              {
                "year": "2020",
                "days": 5
              },
              {
                "year": "2021",
                "days": 12
              },
              {
                "year": "2022",
                "days": 7
              },
              {
                "year": "2023",
                "days": 5
              },
              {
                "year": "2024",
                "days": 15
              },
              {
                "year": "2025",
                "days": 13
              },
              {
                "year": "2026",
                "days": 6
              }
            ]
          },
          "views": null
        },
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20120512222332/http://wiki.planetkubb.com/wiki/Main_Page",
          "role": "archive",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "http://wiki.planetkubb.com/wiki/Main_Page",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": "2012-05-12",
            "latestCapture": "2018-09-13",
            "years": [
              {
                "year": "2012",
                "days": 8
              },
              {
                "year": "2013",
                "days": 10
              },
              {
                "year": "2014",
                "days": 5
              },
              {
                "year": "2015",
                "days": 8
              },
              {
                "year": "2016",
                "days": 14
              },
              {
                "year": "2017",
                "days": 5
              },
              {
                "year": "2018",
                "days": 4
              }
            ]
          },
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/projects/open-loop/1-big-fuzzy-dead-cat/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "ask-planet-kubb",
          "label": "included",
          "detail": "On Open Loop #1 I described Ask Planet Kubb as the network’s question-and-answer site, added after the planet feed.",
          "source": "https://www.thingelstad.com/projects/open-loop/1-big-fuzzy-dead-cat/"
        }
      ],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/planetkubb-com-0b527ff6c0.jpg",
        "site": "https://planetkubb.com/",
        "date": "2026-10-20"
      },
      "body": "Garrick van Buren and I built Planet Kubb together. It began in 2012, when I bought planetkubb.com and set it up as a planet-style aggregator of Kubb content, built on rawdog with a Bootstrap theme, that collected Kubb videos from YouTube and posts from club blogs. More sites followed: Ask Planet Kubb for questions and answers, the [Planet Kubb Wiki](https://web.archive.org/web/20120512222332/http://wiki.planetkubb.com/wiki/Main_Page) for clubs, teams and tournaments, and The Pitch, a WordPress P2 chat site at pitch.planetkubb.com that I put up within a day of a player from Des Moines asking for one. I told the story on [Open Loop #1](https://www.thingelstad.com/projects/open-loop/1-big-fuzzy-dead-cat/), and said I had gone to great lengths to show it was not an attempt “to monetize the Kubb universe.” The [Planet Kubb GitHub organization](https://github.com/Planet-Kubb) describes the aim as “growing, connecting and supporting the worldwide Kubb community.”\n\nI played Kubb on the Kubbchucks. At the [2013 US Nationals](https://www.thingelstad.com/2013/07/21/pictures-from-us.html) I spent Sunday “scoring games for Planet Kubb and running the final parts of the Planet Kubb Club Championship.” Club sites joined the network, such as the [Chippewa Valley Kubb League](https://www.thingelstad.com/2013/10/06/another-planetkubb-network.html) in 2013, and Garrick and I created a notation and scoring system for recording games (see Planet Kubb Score).\n\nI later stepped away. Garrick still runs the server, and planetkubb.com is online as an aggregator [maintained by him](https://planetkubb.com/about/); its feed was last updated in June 2017. The wiki, Ask Planet Kubb and the club subdomains no longer answer, and survive in Wayback Machine captures.",
      "latest": {
        "date": "2019-06-23T16:31:29.000Z",
        "label": "Latest page change",
        "url": "https://planetkubb.com/wp-sitemap.xml"
      }
    },
    {
      "id": "planet-kubb-score",
      "title": "Planet Kubb Score",
      "summary": "My notation and scoring system for recording Kubb games, begun on Planet Kubb in 2012 and being rebuilt, not yet published.",
      "collection": "Games and communities",
      "status": "active",
      "url": null,
      "started": "2012",
      "page": "https://thingelstad.xyz/things/planet-kubb-score/",
      "markdown": "https://thingelstad.xyz/things/planet-kubb-score.md",
      "topics": [
        "play",
        "archives"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20120715062240/http://wiki.planetkubb.com/wiki/Notation",
          "role": "archive",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "http://wiki.planetkubb.com/wiki/Notation",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": "2012-07-15",
            "latestCapture": "2017-08-05",
            "years": [
              {
                "year": "2012",
                "days": 2
              },
              {
                "year": "2013",
                "days": 5
              },
              {
                "year": "2014",
                "days": 1
              },
              {
                "year": "2015",
                "days": 7
              },
              {
                "year": "2016",
                "days": 7
              },
              {
                "year": "2017",
                "days": 2
              }
            ]
          },
          "views": null
        },
        {
          "kind": "github",
          "repository": "Planet-Kubb/scoring",
          "role": "historical",
          "observation": {
            "kind": "github",
            "repository": "Planet-Kubb/scoring",
            "url": "https://github.com/Planet-Kubb/scoring",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2014-07-07T00:24:32.000Z",
            "archived": false,
            "description": "Planet Kubb Scoresheet and supporting materials.",
            "stars": 1,
            "forks": 0,
            "languages": [],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "master",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 0,
                "complete": true,
                "months": [],
                "latestCommit": {
                  "date": "2014-07-20T01:32:16.000Z",
                  "url": "https://github.com/Planet-Kubb/scoring/commit/5e7510e3f424c2219d00094d8999f514ac066bf7"
                }
              }
            ]
          }
        },
        {
          "kind": "github",
          "repository": "Planet-Kubb/PyKubb",
          "role": "historical",
          "observation": {
            "kind": "github",
            "repository": "Planet-Kubb/PyKubb",
            "url": "https://github.com/Planet-Kubb/PyKubb",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2014-08-16T01:34:53.000Z",
            "archived": false,
            "description": "Python module to analyze Kubb games and output statistics.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "Python",
                "bytes": 14224
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "master",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 0,
                "complete": true,
                "months": [],
                "latestCommit": {
                  "date": "2014-08-17T16:14:51.000Z",
                  "url": "https://github.com/Planet-Kubb/PyKubb/commit/60c997a4da583cff5baea0d192b1d7ad5dd66fdb"
                }
              }
            ]
          }
        }
      ],
      "connections": [
        {
          "to": "planet-kubb",
          "label": "began on",
          "detail": "The notation was first published on the Planet Kubb Wiki, and the scoring materials live in the Planet Kubb GitHub organization.",
          "source": "https://web.archive.org/web/20120715062240/http://wiki.planetkubb.com/wiki/Notation"
        }
      ],
      "body": "Planet Kubb Score is my system for writing down a game of Kubb “like a baseball box score.” I created it with Garrick van Buren, who said on [Open Loop #3](https://www.thingelstad.com/projects/open-loop/3-kubb-fever/) in July 2012 that we had been working on it “almost from the very beginning” and who drew up the first scoresheet. I call it “the very first scoring & notation system for Kubb” ([Fun Facts](https://www.thingelstad.com/about/fun-facts/)). By July 2012 the Planet Kubb Wiki had a [Notation page](https://web.archive.org/web/20120715062240/http://wiki.planetkubb.com/wiki/Notation) whose goals were a notation that scales from player-by-player detail to simple games, could be sent over Twitter “turn by turn, tweet by tweet,” and is language neutral.\n\nThe [scoring repository](https://github.com/Planet-Kubb/scoring) holds the Planet Kubb scoresheet, including version 11 from Garrick van Buren, added in July 2014. [PyKubb](https://github.com/Planet-Kubb/PyKubb), started in August 2014, is a Python module to analyze Kubb games and output statistics. In October 2013 I was “proud of” a [new scoresheet with on-pitch stats](https://www.thingelstad.com/2013/10/31/proud-of-this.html). That month I [wrote a Backus-Naur form grammar](https://www.thingelstad.com/2014/08/27/what-did-i.html) for the notation, and in 2017 I mentioned having tried to write a parser for it with PyParsing ([Weekly Thing 25](https://weekly.thingelstad.com/archive/25/)).\n\nI am rebuilding the notation, grammar and scoresheets as a new site. It has not been published yet.",
      "latest": {
        "date": "2014-08-17T16:14:51.000Z",
        "label": "Latest commit",
        "url": "https://github.com/Planet-Kubb/PyKubb/commit/60c997a4da583cff5baea0d192b1d7ad5dd66fdb"
      }
    },
    {
      "id": "poap-kings",
      "title": "POAP KINGS",
      "summary": "The website of POAP KINGS, my family’s Clash Royale clan, publishing its roster, data, and season recognition.",
      "collection": "Games and communities",
      "status": "active",
      "url": "https://poapkings.com/",
      "started": "2026-02",
      "page": "https://thingelstad.xyz/things/poap-kings/",
      "markdown": "https://thingelstad.xyz/things/poap-kings.md",
      "topics": [
        "poap",
        "crypto",
        "play"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/poapkings.com",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/poapkings.com",
            "url": "https://github.com/jthingelstad/poapkings.com",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-02-05T04:14:14.000Z",
            "archived": false,
            "description": "Proof of Arena Push — the official website for the POAP KINGS Clash Royale clan (#J2RGCRVG). Eleventy static site on GitHub Pages.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "JavaScript",
                "bytes": 115809
              },
              {
                "name": "Nunjucks",
                "bytes": 111706
              },
              {
                "name": "CSS",
                "bytes": 82917
              },
              {
                "name": "Shell",
                "bytes": 2072
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 114,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 28
                  },
                  {
                    "month": "2026-08",
                    "count": 46
                  },
                  {
                    "month": "2026-09",
                    "count": 35
                  },
                  {
                    "month": "2026-10",
                    "count": 5
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T23:21:24.000Z",
                  "url": "https://github.com/jthingelstad/poapkings.com/commit/ced8fb1b0d8dbdfd1b23694d141101c1eb605aa2"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://poapkings.com/",
          "role": "website",
          "sitemap": "https://poapkings.com/sitemap.xml",
          "observation": {
            "kind": "web",
            "url": "https://poapkings.com/",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "sitemap": {
              "url": "https://poapkings.com/sitemap.xml",
              "pages": 10,
              "newestModified": null,
              "months": [],
              "complete": true
            },
            "feed": null
          },
          "captures": {
            "kind": "wayback",
            "url": "https://poapkings.com/",
            "observedAt": "2026-10-18T10:34:11.419Z",
            "firstCapture": "2026-02-13",
            "latestCapture": "2026-06-07",
            "years": [
              {
                "year": "2026",
                "days": 4
              }
            ]
          },
          "views": {
            "kind": "tinylytics",
            "url": "https://poapkings.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 3160,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 0
              },
              {
                "month": "2026-02",
                "count": 1017
              },
              {
                "month": "2026-03",
                "count": 695
              },
              {
                "month": "2026-04",
                "count": 446
              },
              {
                "month": "2026-05",
                "count": 181
              },
              {
                "month": "2026-06",
                "count": 217
              },
              {
                "month": "2026-07",
                "count": 245
              },
              {
                "month": "2026-08",
                "count": 210
              },
              {
                "month": "2026-09",
                "count": 149
              }
            ]
          }
        }
      ],
      "connections": [
        {
          "to": "elixir-drop",
          "label": "runs",
          "detail": "POAP KINGS runs Elixir Drop, its card-recognition and elixir-cost training game.",
          "source": "https://poapkings.com/elixir-drop/"
        }
      ],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/poapkings-com-1384296472.jpg",
        "site": "https://poapkings.com/",
        "date": "2026-10-20"
      },
      "body": "POAP KINGS (#J2RGCRVG) is a Clash Royale clan that I started in early 2026 with my son Tyler and Tyler’s cousin Levi. I had [taken up the game](https://www.thingelstad.com/2025/09/27/after-following-tyler-to-pokmon.html) in September 2025 as a newcomer, trying one of Tyler’s favorite games. In the [clan’s own words](https://poapkings.com/faq/), Raquaza and King Levy had cycled through clans that never quite fit, so our family built the clan it wanted: structure, recognition, and something lasting to show for the grind. I claimed the [POAP KINGS Founder](https://www.thingelstad.com/2026/02/05/poap-at-poap-kings-founder.html) POAP on February 5, 2026, and by July the clan had [reached 50 members](https://www.thingelstad.com/2026/07/26/i-made-this-fun-slab.html) for the first time.\n\nThe name comes from POAP: the clan began by publishing POAP collectibles for seasons and milestones. When the POAP company and product stopped operating, the clan kept the name and the meaning it had taken on inside the clan, “Proof of Arena Push.”\n\nI asked Codex to [build the website](https://weekly.thingelstad.com/archive/342/) from the notes the three founders had kept, and it was live quickly; Claude Code did much of the later work, design included. In April 2026 I pointed Claude Design at the repository when a new blog feature had made the design “unruly,” and it produced the current look ([Weekly Thing 345](https://weekly.thingelstad.com/archive/345/)). It grew into an Eleventy site on GitHub Pages with a sortable roster, an interactive data page, member guidance, season recognition, and pages for the clan’s sister clans, Ship It! and Elixir Kings. The roster and war data come from Elixir’s JSON API, and the site promotes the tools the clan built: Elixir and Elixir Drop.",
      "latest": {
        "date": "2026-10-21T23:21:24.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/poapkings.com/commit/ced8fb1b0d8dbdfd1b23694d141101c1eb605aa2"
      }
    },
    {
      "id": "poap2rss",
      "title": "POAP2RSS",
      "summary": "RSS feeds of claims for any POAP drop or collector, retired when the POAP API went offline in July 2026.",
      "collection": "Historical projects",
      "status": "retired",
      "url": "https://poap2rss.com/",
      "started": "2025-07-04",
      "ended": "2026-07-24",
      "page": "https://thingelstad.xyz/things/poap2rss/",
      "markdown": "https://thingelstad.xyz/things/poap2rss.md",
      "topics": [
        "poap",
        "crypto",
        "open-web"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/POAP2RSS",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/POAP2RSS",
            "url": "https://github.com/jthingelstad/POAP2RSS",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "repositoryCreatedAt": "2025-07-01T03:53:32.000Z",
            "archived": true,
            "description": "POAP2RSS creates a standard RSS feed for any POAP event. Drop an event ID in the URL and you have a live feed of new claims ready for any reader or automation platform. POAP2RSS makes POAPs more open, programmable, and connected to the wider web.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "Python",
                "bytes": 31072
              },
              {
                "name": "CSS",
                "bytes": 7582
              },
              {
                "name": "Nunjucks",
                "bytes": 6438
              },
              {
                "name": "Shell",
                "bytes": 4880
              },
              {
                "name": "JavaScript",
                "bytes": 307
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-20T17:57:36.612Z",
                "count": 6,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 6
                  }
                ],
                "latestCommit": {
                  "date": "2026-07-24T16:07:21.000Z",
                  "url": "https://github.com/jthingelstad/POAP2RSS/commit/b50f2d2a8595f474263bf7e6ddd816ec88657c44"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://poap2rss.com/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2025/07/06/vibe-coding-poaprss.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "jamie-thingelstad-blog",
          "label": "posts claims to",
          "detail": "I configured Micro.blog so that each POAP I mint becomes a post on my blog, from my POAP2RSS feed.",
          "source": "https://weekly.thingelstad.com/archive/326/"
        }
      ],
      "body": "POAP2RSS turned POAP activity into standard RSS: put a drop’s event ID or a collector’s address in the URL and get a feed of the latest claims, with the drop artwork and the collector’s ENS name or address as the author. I issued many drops and wanted to know when they were claimed, and wanted to follow friends’ collecting in [Feedbin](https://www.thingelstad.com/2025/07/04/seeing-poap-claims-show-up.html) and connect claims to automation services like IFTTT and Zapier. I had asked POAP for RSS in my [POAP Wishlist](https://www.thingelstad.com/2023/01/14/poap-wishlist.html) in 2023 and again in [POAP + RSS = Awesome?](https://www.thingelstad.com/2025/01/05/poap-rss-awesome.html) in January 2025.\n\nIn mid-2025 I built it myself, my first project with AI writing nearly all of the code. [Vibe Coding POAP2RSS](https://www.thingelstad.com/2025/07/06/vibe-coding-poaprss.html) tells how: a throwaway prototype with Claude, a feature description researched with ChatGPT o3 and Deep Research, and then a Python AWS Lambda behind API Gateway. I declared it [officially launched](https://www.thingelstad.com/2025/07/04/i-decided-to-declare-poaprss.html) on Independence Day 2025 and marked the occasion with a POAP. The [changelog](https://poap2rss.com/changelog/) records later changes: feeds grew from 20 to 50 items, inactivity notices waited 12 weeks and could be switched off, pagination arrived for large drops, and a green-screen redesign in February 2026. POAP2RSS fed the claim streams of the 612 POAP Challenge and the Airport POAP Rally sites.\n\nThe service read live claims through the POAP API, so it stopped working when POAP wound down. I [retired it](https://github.com/jthingelstad/POAP2RSS/commit/22798583f396bd59771b0e4ee320d20c51d18f20) on July 24, 2026, a week before POAP’s July 31 shutdown, archived the repository, and replaced the home page with a notice pointing to the POAP team’s archive at poaparchive.com, “with gratitude to Isabel, Patricio, and the whole POAP team.”",
      "latest": {
        "date": "2026-07-24T16:07:21.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/POAP2RSS/commit/b50f2d2a8595f474263bf7e6ddd816ec88657c44"
      }
    },
    {
      "id": "proof-of-a-person",
      "title": "Proof of a Person",
      "summary": "My POAP time capsule, 2021 to 2026, built from an archive captured after the protocol wound down.",
      "collection": "Art & archives",
      "status": "active",
      "url": "https://poap.thingelstad.xyz/",
      "started": "2026-10-17",
      "page": "https://thingelstad.xyz/things/proof-of-a-person/",
      "markdown": "https://thingelstad.xyz/things/proof-of-a-person.md",
      "topics": [
        "poap",
        "crypto",
        "archives"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/poap.thingelstad.xyz",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/poap.thingelstad.xyz",
            "url": "https://github.com/jthingelstad/poap.thingelstad.xyz",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2026-10-17T12:32:42.000Z",
            "archived": false,
            "description": "A time capsule and tribute to POAP through Jamie Thingelstad's collecting, issuing, and network",
            "stars": 0,
            "forks": 0,
            "languages": [
              {
                "name": "Astro",
                "bytes": 59110
              },
              {
                "name": "JavaScript",
                "bytes": 41267
              },
              {
                "name": "CSS",
                "bytes": 14944
              },
              {
                "name": "TypeScript",
                "bytes": 11516
              },
              {
                "name": "Python",
                "bytes": 3536
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 14,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 14
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-17T14:29:27.000Z",
                  "url": "https://github.com/jthingelstad/poap.thingelstad.xyz/commit/6e01412b6fa031ff818218fefd389df1ee3e007e"
                }
              }
            ]
          }
        },
        {
          "kind": "github",
          "repository": "jthingelstad/poap-archive",
          "role": "archive",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/poap-archive",
            "url": "https://github.com/jthingelstad/poap-archive",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2026-10-17T11:31:15.000Z",
            "archived": false,
            "description": "Jamie Thingelstad's POAP time capsule: collecting, issuing, writing, and network, captured after the 2026 protocol sunset",
            "stars": 0,
            "forks": 0,
            "languages": [
              {
                "name": "HTML",
                "bytes": 5126520
              },
              {
                "name": "Python",
                "bytes": 71961
              },
              {
                "name": "CSS",
                "bytes": 11976
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 21,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 21
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-17T13:59:57.000Z",
                  "url": "https://github.com/jthingelstad/poap-archive/commit/57e7da32398ffd5087df33ed94ee11f257eedcd8"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://poap.thingelstad.xyz/",
          "role": "website",
          "sitemap": "https://poap.thingelstad.xyz/sitemap-index.xml",
          "observation": {
            "kind": "web",
            "url": "https://poap.thingelstad.xyz/",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "sitemap": {
              "url": "https://poap.thingelstad.xyz/sitemap-index.xml",
              "pages": 1052,
              "newestModified": null,
              "months": [],
              "complete": true
            },
            "feed": null
          },
          "captures": {
            "kind": "wayback",
            "url": "https://poap.thingelstad.xyz/",
            "observedAt": "2026-10-18T10:34:11.419Z",
            "firstCapture": null,
            "latestCapture": null,
            "years": []
          },
          "views": {
            "kind": "tinylytics",
            "url": "https://poap.thingelstad.xyz/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 0,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 0
              },
              {
                "month": "2026-02",
                "count": 0
              },
              {
                "month": "2026-03",
                "count": 0
              },
              {
                "month": "2026-04",
                "count": 0
              },
              {
                "month": "2026-05",
                "count": 0
              },
              {
                "month": "2026-06",
                "count": 0
              },
              {
                "month": "2026-07",
                "count": 0
              },
              {
                "month": "2026-08",
                "count": 0
              },
              {
                "month": "2026-09",
                "count": 0
              }
            ]
          }
        }
      ],
      "connections": [
        {
          "to": "poap2rss",
          "label": "tells the story of",
          "detail": "The capsule’s writing traces POAP2RSS back to my 2023 POAP Wishlist, where I asked POAP for RSS feeds. “RSS never came from POAP, so Jamie built it.”",
          "source": "https://poap.thingelstad.xyz/"
        },
        {
          "to": "612-poap-challenge",
          "label": "preserves",
          "detail": "The 612 POAP Challenge drops are one of the series on the capsule’s Issued page, and the archive keeps a mirror of the challenge site.",
          "source": "https://poap.thingelstad.xyz/issued/"
        }
      ],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/poap-thingelstad-xyz-f8f5f23993.jpg",
        "site": "https://poap.thingelstad.xyz/",
        "date": "2026-10-20"
      },
      "body": "Proof of Attendance Protocol entered maintenance mode in March 2026 and wound down that summer. On 2026-10-17 I captured my whole POAP life into a public [archive](https://github.com/jthingelstad/poap-archive): every token I collected, every drop I created, the people who minted them, and the posts and Weekly Thing sections I wrote about POAP from 2021 on. The tokens themselves stay on the Gnosis chain; the archive keeps the records and artwork that lived on POAP’s own services.\n\n[Proof of a Person](https://poap.thingelstad.xyz/) is the time capsule built from that archive and published the same day. It counts 259 tokens collected, from the ENS 4th Anniversary vote on 2021-06-07 to an airport rally stop at Seattle-Tacoma in July 2026, and 130 drops issued, which 639 people minted. Each year from 2021 to 2026 is a chapter headed by a line from my own posts. The pages show the timeline as two sides, what I collected and what I made for other people, with a network of the people who hold my drops, my writing about POAP, and a short history of the company.\n\nThe site is a static Astro build from a JSON export of the archive. Drop artwork is served from a copy taken from POAP’s asset host while it was still up.",
      "latest": {
        "date": "2026-10-17T14:29:27.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/poap.thingelstad.xyz/commit/6e01412b6fa031ff818218fefd389df1ee3e007e"
      }
    },
    {
      "id": "q2a-number-captcha",
      "title": "q2a-number-captcha",
      "summary": "A Question2Answer CAPTCHA plugin that asks for one digit of a nine-digit number written out in words.",
      "collection": "Historical projects",
      "status": "retired",
      "url": "https://github.com/jthingelstad/q2a-number-captcha",
      "started": "2014-11-16",
      "page": "https://thingelstad.xyz/things/q2a-number-captcha/",
      "markdown": "https://thingelstad.xyz/things/q2a-number-captcha.md",
      "topics": [
        "play"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/q2a-number-captcha",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/q2a-number-captcha",
            "url": "https://github.com/jthingelstad/q2a-number-captcha",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2014-11-16T01:39:31.000Z",
            "archived": true,
            "description": "CAPTCHA Plugin for Question2Answer that requires finding a digit in a large number.",
            "stars": 1,
            "forks": 1,
            "languages": [
              {
                "name": "PHP",
                "bytes": 7556
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "master",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 0,
                "complete": true,
                "months": [],
                "latestCommit": {
                  "date": "2015-11-28T20:16:07.000Z",
                  "url": "https://github.com/jthingelstad/q2a-number-captcha/commit/4fe465110e5df62a1d3b22817527b16e12a97b03"
                }
              }
            ]
          }
        }
      ],
      "connections": [
        {
          "to": "ask-planet-kubb",
          "label": "protected",
          "detail": "I wrote the plugin to stop spam registrations on Ask Planet Kubb, the Question2Answer site I ran.",
          "source": "https://www.thingelstad.com/2014/11/16/questionanswer-number-captcha.html"
        }
      ],
      "body": "I had used [Question2Answer](https://www.question2answer.org/) for several years to run Ask Planet Kubb, and spam registrations were the problem. ReCaptcha let through four to ten spam sign-ups a day. The [Q2A Logical Captcha](https://github.com/amiyasahu/q2a-logical-captcha) plugin, to which I had contributed a pull request, let through three to four times as many.\n\nSo I brought over the defense I was already using on my MediaWiki wikis, which I had first written in 2013 to [stop spam sign-ups on WikiApiary](https://www.thingelstad.com/2013/07/09/stopping-mediawiki-spam.html) and later switched to numbers spelled out in words ([Updated Dynamic Questy Captchas](https://www.thingelstad.com/2014/10/28/updated-dynamic-questy.html)). The plugin spells out a random nine-digit number with the Numbers_Words PHP package and asks for the digit in one position, so the answer never appears in the page. It started as a modified copy of Q2A Logical Captcha. I [released it](https://www.thingelstad.com/2014/11/16/questionanswer-number-captcha.html) on November 16, 2014 under the GPL v2, reporting that early results were great. The last change, in 2015, removed a PHP warning, and the repository is archived.",
      "latest": {
        "date": "2015-11-28T20:16:07.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/q2a-number-captcha/commit/4fe465110e5df62a1d3b22817527b16e12a97b03"
      }
    },
    {
      "id": "r-w-book-club",
      "title": "R/W Book Club",
      "summary": "A Minneapolis-Saint Paul book club meeting since 2003, and the website that keeps the record of everything it has read.",
      "collection": "Games and communities",
      "status": "active",
      "url": "https://rwbookclub.com/",
      "started": "2003-04",
      "page": "https://thingelstad.xyz/things/r-w-book-club/",
      "markdown": "https://thingelstad.xyz/things/r-w-book-club.md",
      "topics": [
        "reading",
        "mediawiki"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/rwbookclub.com",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/rwbookclub.com",
            "url": "https://github.com/jthingelstad/rwbookclub.com",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "repositoryCreatedAt": "2026-04-09T23:16:42.000Z",
            "archived": false,
            "description": "Monorepo for the R/W Book Club: the public website, the shared knowledge corpus, and Oliver — the club's Discord agent.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "Python",
                "bytes": 1549739
              },
              {
                "name": "JavaScript",
                "bytes": 70510
              },
              {
                "name": "Nunjucks",
                "bytes": 57485
              },
              {
                "name": "HTML",
                "bytes": 52461
              },
              {
                "name": "CSS",
                "bytes": 43895
              },
              {
                "name": "Shell",
                "bytes": 16041
              }
            ],
            "release": {
              "name": "quiet-quicksilver",
              "date": "2026-07-03T22:07:58.000Z",
              "url": "https://github.com/jthingelstad/rwbookclub.com/releases/tag/quiet-quicksilver"
            },
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-20T17:57:36.612Z",
                "count": 152,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 119
                  },
                  {
                    "month": "2026-08",
                    "count": 21
                  },
                  {
                    "month": "2026-09",
                    "count": 10
                  },
                  {
                    "month": "2026-10",
                    "count": 2
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-16T10:55:48.000Z",
                  "url": "https://github.com/jthingelstad/rwbookclub.com/commit/a272d7bc2bd6c8e872de31460664b23bb2683b1d"
                }
              },
              {
                "path": "agent",
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-20T17:57:36.612Z",
                "count": 108,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 91
                  },
                  {
                    "month": "2026-08",
                    "count": 11
                  },
                  {
                    "month": "2026-09",
                    "count": 5
                  },
                  {
                    "month": "2026-10",
                    "count": 1
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-15T13:41:30.000Z",
                  "url": "https://github.com/jthingelstad/rwbookclub.com/commit/c87b04514a29833f721d90af958285342cd0859c"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://rwbookclub.com/",
          "role": "website",
          "sitemap": "https://rwbookclub.com/sitemap.xml",
          "feed": "https://rwbookclub.com/feed.xml",
          "observation": {
            "kind": "web",
            "url": "https://rwbookclub.com/",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "sitemap": {
              "url": "https://rwbookclub.com/sitemap.xml",
              "pages": 380,
              "newestModified": "2026-10-27T00:00:00.000Z",
              "months": [
                {
                  "month": "2025-11",
                  "count": 1
                },
                {
                  "month": "2026-01",
                  "count": 1
                },
                {
                  "month": "2026-05",
                  "count": 1
                },
                {
                  "month": "2026-06",
                  "count": 1
                },
                {
                  "month": "2026-07",
                  "count": 1
                }
              ],
              "complete": true
            },
            "feed": {
              "url": "https://rwbookclub.com/feed.xml",
              "title": "R/W Book Club",
              "items": 20,
              "newestPublished": "2026-07-28T00:00:00.000Z",
              "months": [
                {
                  "month": "2025-11",
                  "count": 1
                },
                {
                  "month": "2026-01",
                  "count": 1
                },
                {
                  "month": "2026-05",
                  "count": 1
                },
                {
                  "month": "2026-06",
                  "count": 1
                },
                {
                  "month": "2026-07",
                  "count": 1
                }
              ]
            }
          },
          "captures": {
            "kind": "wayback",
            "url": "https://rwbookclub.com/",
            "observedAt": "2026-10-18T10:34:11.419Z",
            "firstCapture": "2017-09-17",
            "latestCapture": "2026-05-14",
            "years": [
              {
                "year": "2017",
                "days": 2
              },
              {
                "year": "2018",
                "days": 3
              },
              {
                "year": "2026",
                "days": 2
              }
            ]
          },
          "views": {
            "kind": "tinylytics",
            "url": "https://rwbookclub.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 715,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 0
              },
              {
                "month": "2026-02",
                "count": 0
              },
              {
                "month": "2026-03",
                "count": 0
              },
              {
                "month": "2026-04",
                "count": 123
              },
              {
                "month": "2026-05",
                "count": 87
              },
              {
                "month": "2026-06",
                "count": 111
              },
              {
                "month": "2026-07",
                "count": 166
              },
              {
                "month": "2026-08",
                "count": 144
              },
              {
                "month": "2026-09",
                "count": 84
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/projects/book-club/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20120106214958/http://rwbookclub.com/wiki/Main_Page",
          "role": "archive",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "http://rwbookclub.com/wiki/Main_Page",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": "2011-11-04",
            "latestCapture": "2012-01-06",
            "years": [
              {
                "year": "2011",
                "days": 2
              },
              {
                "year": "2012",
                "days": 1
              }
            ]
          },
          "views": null
        }
      ],
      "connections": [
        {
          "to": "oliver",
          "label": "includes",
          "detail": "Oliver is the book club’s agent and sixth member, sharing the same club database and corpus.",
          "source": "https://rwbookclub.com/oliver/"
        }
      ],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/rwbookclub-com-6e444ce308.jpg",
        "site": "https://rwbookclub.com/",
        "date": "2026-10-20"
      },
      "story": {
        "color": "#507b68",
        "introduction": "A long-running reading group, with a shared record.",
        "engineering": [
          "The website presents the club’s reading history and members’ commentary.",
          "Public llms.txt and llms-full.txt files make the reading record accessible to agents for analysis.",
          "An iCal feed lets members subscribe to the meeting calendar.",
          "Oliver, the club’s agent, generates the site from the club database and publishes it to GitHub Pages."
        ],
        "stack": [
          "Static web",
          "LLM context files",
          "iCalendar"
        ],
        "related": [
          "oliver"
        ],
        "questions": [
          "How can an agent explore the club’s reading history?",
          "How has the book club website evolved?"
        ],
        "source": "https://rwbookclub.com/llms.txt",
        "sourceLabel": "Reading history for agents"
      },
      "body": "The R/W Book Club is a group of technically minded readers who have met in the Minneapolis-Saint Paul area since April 2003. R/W stands for Read / Write: the members read, and many of them also blog. The club reads about eight books a year, mostly nonfiction, and members take turns picking the next book ([About](https://rwbookclub.com/about/)). I built the website, not the club.\n\nI joined in late 2007, when my friend and former professor John Riedl, who started the club, emailed me about “this small book club of geeky guys” he was part of. I “joined without hesitation” and shared the club with John, Tom, Erik and Dan until John died in 2013 ([Goodbye to my friend, John Riedl](https://www.thingelstad.com/2013/07/21/goodbye-to-my.html)).\n\nThe club’s record has taken several forms. In early 2011 it was a MediaWiki site called the [Creative Computer Book Club](https://web.archive.org/web/20110323210256/http://creativecomputerbookclub.com/wiki/Main_Page); that July I [hacked on MediaWiki](https://www.thingelstad.com/2011/07/15/i-had-a-blast-hacking.html) with the book club gang, and by January 2012 the same wiki was the [R/W Book Club](https://web.archive.org/web/20120106214958/http://rwbookclub.com/wiki/Main_Page) at rwbookclub.com. In 2017 I built a [Jekyll site](https://weekly.thingelstad.com/archive/17/) at rwbook.club. The club has also kept its record in a shared Airtable database. The current site is generated by [Oliver](https://rwbookclub.com/oliver/), the club’s agent, and offers the reading record as llms.txt files for agents and the meetings as an iCal feed.",
      "latest": {
        "date": "2026-10-27T00:00:00.000Z",
        "label": "Latest page change",
        "url": "https://rwbookclub.com/sitemap.xml"
      }
    },
    {
      "id": "reading-things",
      "title": "Reading Things",
      "summary": "A quarterly newsletter about books written by Tammy, Mazie, Tyler, and me, sent four times from 2021 to 2022.",
      "collection": "Publishing",
      "status": "retired",
      "url": "https://web.archive.org/web/20211130142318/https://reading.thingelstad.com/archive/",
      "started": "2021-05-08",
      "ended": "2022-02-06",
      "page": "https://thingelstad.xyz/things/reading-things/",
      "markdown": "https://thingelstad.xyz/things/reading-things.md",
      "topics": [
        "reading"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20211130142318/https://reading.thingelstad.com/archive/",
          "role": "archive",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "https://reading.thingelstad.com/archive/",
            "observedAt": "2026-10-18T10:34:11.419Z",
            "firstCapture": "2021-11-30",
            "latestCapture": "2026-06-11",
            "years": [
              {
                "year": "2021",
                "days": 1
              },
              {
                "year": "2022",
                "days": 4
              },
              {
                "year": "2023",
                "days": 5
              },
              {
                "year": "2024",
                "days": 4
              },
              {
                "year": "2025",
                "days": 10
              },
              {
                "year": "2026",
                "days": 5
              }
            ]
          },
          "views": null
        },
        {
          "kind": "website",
          "url": "https://weekly.thingelstad.com/archive/186/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2022/02/06/the-winter-issue.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "weekly-thing",
          "label": "was announced in",
          "detail": "I teased Reading Things in Weekly Thing 177 and announced it in Weekly Thing 186, a week after the first issue went out.",
          "source": "https://weekly.thingelstad.com/archive/186/"
        }
      ],
      "body": "Reading Things was a newsletter about books from our whole family. Tammy, Mazie, Tyler, and I each wrote about what we were reading. I teased it as “a fun, new family project” in [Weekly Thing 177](https://weekly.thingelstad.com/archive/177/), and the [first issue](https://web.archive.org/web/20210508214912/https://reading.thingelstad.com/archive/reading-things-book-thief-atomic-habits-treasure/) went out on May 8, 2021. In [Weekly Thing 186](https://weekly.thingelstad.com/archive/186/) I explained the plan: four emails a year, about books and things related to them, such as Tammy’s Corner and a bookstore challenge. There were no affiliate links, no tracking, and no “buy now” links.\n\nIssues followed in [summer](https://www.thingelstad.com/2021/07/25/we-just-sent.html) and [fall](https://www.thingelstad.com/2021/10/31/we-just-published.html) 2021. The [Winter 2022 issue](https://www.thingelstad.com/2022/02/06/the-winter-issue.html), sent on February 6, 2022, is the last one in the [archive](https://web.archive.org/web/20211130142318/https://reading.thingelstad.com/archive/) and the last one I mentioned. In July 2021 we marked 100 subscribers with a [Reading Things First 100 POAP](https://www.thingelstad.com/2021/07/25/poap-at-reading-things-first.html), which I [wrote about](https://www.thingelstad.com/2022/06/04/my-introduction-to.html) in June 2022. No public source says why the newsletter stopped, and reading.thingelstad.com no longer answers.",
      "latest": null
    },
    {
      "id": "release-notes",
      "title": "Release Notes",
      "summary": "A daily email with today’s version number; reply with notes from the day and they become that version’s release notes.",
      "collection": "Personal tools and making",
      "status": "active",
      "url": "https://notes.yourversionnumber.com/",
      "started": "2026-10-08",
      "page": "https://thingelstad.xyz/things/release-notes/",
      "markdown": "https://thingelstad.xyz/things/release-notes.md",
      "topics": [
        "play",
        "mcp"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/yvn-release-notes",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/yvn-release-notes",
            "url": "https://github.com/jthingelstad/yvn-release-notes",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-10-07T10:00:44.000Z",
            "archived": false,
            "description": "Release Notes: a daily version-number email from Your Version Number; replies become the day's notes",
            "stars": 2,
            "forks": 0,
            "languages": [
              {
                "name": "TypeScript",
                "bytes": 2047513
              },
              {
                "name": "JavaScript",
                "bytes": 97739
              },
              {
                "name": "CSS",
                "bytes": 31353
              },
              {
                "name": "Shell",
                "bytes": 21799
              },
              {
                "name": "HTML",
                "bytes": 1314
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 240,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 240
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-21T12:25:18.000Z",
                  "url": "https://github.com/jthingelstad/yvn-release-notes/commit/9358171340b43766dd5765974d9767e4fce8f4e2"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://notes.yourversionnumber.com/",
          "role": "website",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "https://notes.yourversionnumber.com/",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": "2026-10-12",
            "latestCapture": "2026-10-12",
            "years": [
              {
                "year": "2026",
                "days": 1
              }
            ]
          },
          "views": {
            "kind": "tinylytics",
            "url": "https://notes.yourversionnumber.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 0,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 0
              },
              {
                "month": "2026-02",
                "count": 0
              },
              {
                "month": "2026-03",
                "count": 0
              },
              {
                "month": "2026-04",
                "count": 0
              },
              {
                "month": "2026-05",
                "count": 0
              },
              {
                "month": "2026-06",
                "count": 0
              },
              {
                "month": "2026-07",
                "count": 0
              },
              {
                "month": "2026-08",
                "count": 0
              },
              {
                "month": "2026-09",
                "count": 0
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2026/10/08/in-i-wrote-about-your.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://weekly.thingelstad.com/archive/353/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/notes-yourversionnumber-com-447df7a6ac.jpg",
        "site": "https://notes.yourversionnumber.com/",
        "date": "2026-10-20"
      },
      "body": "Release Notes is a daily email from Your Version Number. Each morning it gives the subscriber today’s number (“You’re 5.4.278 today”). Reply with anything about the day, or write it in the web app, and it is kept as the release notes for that version. I [introduced it on 2026-10-08](https://www.thingelstad.com/2026/10/08/in-i-wrote-about-your.html): after making the Your Version Number site I wished I got my version by email, and wondered what it would be like to add notes to each version.\n\nIt is lightweight journaling built around the reply. In [Weekly Thing 353](https://weekly.thingelstad.com/archive/353/) I wrote that I enjoyed getting the email each day and simply replying with notes, photos, and even audio. The [README](https://github.com/jthingelstad/yvn-release-notes) describes the rest: a writing streak and “On this day” notes from earlier releases in the email, tags and search, weather and places kept with each day, a Day One import, a full zip export, opt-in transcripts and photo descriptions, and owner-approved access for agents through MCP. The email tracks nothing and loads nothing remote.\n\nIt runs on AWS: a scheduled sender, SES for inbound replies, DynamoDB for notes, and a React web app with Hono functions on Lambda behind CloudFront. Its version arithmetic is a port of the Your Version Number site’s own code, checked against thousands of generated cases.",
      "latest": {
        "date": "2026-10-21T12:25:18.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/yvn-release-notes/commit/9358171340b43766dd5765974d9767e4fce8f4e2"
      }
    },
    {
      "id": "road-sign-math",
      "title": "Road Sign Math",
      "summary": "A game of finding road signs whose numbers form an equation, begun as a blog in 2005, rebooted as a wiki in 2011 and as a blog again in 2023.",
      "collection": "Games and communities",
      "status": "active",
      "url": "https://www.roadsignmath.xyz/",
      "started": "2005-02-13",
      "page": "https://thingelstad.xyz/things/road-sign-math/",
      "markdown": "https://thingelstad.xyz/things/road-sign-math.md",
      "topics": [
        "mediawiki",
        "play",
        "archives"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://www.roadsignmath.xyz/",
          "role": "website",
          "sitemap": "https://www.roadsignmath.xyz/sitemap.xml",
          "feed": "https://www.roadsignmath.xyz/feed.xml",
          "observation": {
            "kind": "web",
            "url": "https://www.roadsignmath.xyz/",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "sitemap": {
              "url": "https://www.roadsignmath.xyz/sitemap.xml",
              "pages": 19,
              "newestModified": "2025-09-02T00:00:13.000Z",
              "months": [],
              "complete": true
            },
            "feed": {
              "url": "https://www.roadsignmath.xyz/feed.xml",
              "title": "Road Sign Math",
              "items": 16,
              "newestPublished": "2025-09-02T00:00:13.000Z",
              "months": []
            }
          },
          "captures": null,
          "views": {
            "kind": "tinylytics",
            "url": "https://www.roadsignmath.xyz/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 799,
            "months": [
              {
                "month": "2025-10",
                "count": 227
              },
              {
                "month": "2025-11",
                "count": 198
              },
              {
                "month": "2025-12",
                "count": 78
              },
              {
                "month": "2026-01",
                "count": 44
              },
              {
                "month": "2026-02",
                "count": 17
              },
              {
                "month": "2026-03",
                "count": 25
              },
              {
                "month": "2026-04",
                "count": 29
              },
              {
                "month": "2026-05",
                "count": 69
              },
              {
                "month": "2026-06",
                "count": 37
              },
              {
                "month": "2026-07",
                "count": 9
              },
              {
                "month": "2026-08",
                "count": 48
              },
              {
                "month": "2026-09",
                "count": 18
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2023/10/21/road-sign-math.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/projects/road-sign-math/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "github",
          "repository": "jthingelstad/rsm.thingelstad.com",
          "role": "historical",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/rsm.thingelstad.com",
            "url": "https://github.com/jthingelstad/rsm.thingelstad.com",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2017-09-04T15:52:53.000Z",
            "archived": false,
            "description": "",
            "stars": 2,
            "forks": 0,
            "languages": [
              {
                "name": "HTML",
                "bytes": 7098
              },
              {
                "name": "SCSS",
                "bytes": 4302
              },
              {
                "name": "JavaScript",
                "bytes": 876
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "master",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 0,
                "complete": true,
                "months": [],
                "latestCommit": {
                  "date": "2026-06-12T15:11:43.000Z",
                  "url": "https://github.com/jthingelstad/rsm.thingelstad.com/commit/a95e1ef5b218a9b482f899a9affdf8d60326c789"
                }
              }
            ]
          }
        }
      ],
      "connections": [],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/www-roadsignmath-xyz-d09c30c9de.jpg",
        "site": "https://www.roadsignmath.xyz/",
        "date": "2026-10-20"
      },
      "story": {
        "color": "#287454",
        "introduction": "A little mathematics. A lot of looking around.",
        "engineering": [
          "The original site, launched in 2005, had rules for play, a scoring system and scoreboards for players and states.",
          "In 2011 it moved from a blog to a wiki so players could submit and maintain their own signs.",
          "The 2023 reboot is a simple blog on Micro.blog that typesets each sign’s equation with MathJax."
        ],
        "stack": [
          "Micro.blog",
          "MathJax",
          "MediaWiki"
        ],
        "related": [
          "planet-kubb",
          "open-loop"
        ],
        "questions": [
          "How did Road Sign Math start?",
          "Why was Road Sign Math rebooted instead of relaunched?"
        ],
        "source": "https://www.roadsignmath.xyz/",
        "sourceLabel": "See the signs",
        "started": "Played since 2005"
      },
      "body": "Road Sign Math is a driving game: find a road sign whose numbers make a valid equation, photograph it, and share it. It began with a sign on I-94 East toward the Twin Cities that I passed coming home from visiting family in North Dakota, which listed distances of 3, 33 and 99 miles: 3 times 33 equals 99. On [Open Loop #1](https://www.thingelstad.com/projects/open-loop/1-big-fuzzy-dead-cat/) I recalled that my friend Jim told me I should make a website, “and so that day I did a website.”\n\nI [launched the site](https://www.thingelstad.com/2010/02/13/010000.html) on February 13, 2005, as a blog of signs on .Text, moved it to [WordPress](https://www.thingelstad.com/2007/08/17/t212185032.html) in August 2007, and as other people sent in their own it gained rules, a scoring system and scoreboards for players and states. Signs came from all 50 states and most continents, including one from the Serengeti; by 2012 there were over 200. In 2011 I rebooted it for the first time, as a wiki, so players could maintain their own signs; an iOS app for capturing signs was considered but never built. In 2016, during a round of [technical downsizing](https://www.thingelstad.com/2016/05/03/technical-downsizing.html), I shut the site down and let roadsignmath.com expire ([Road Sign Math Rebooted](https://www.thingelstad.com/2023/10/21/road-sign-math.html)).\n\nIn 2017 I started a Jekyll site for the signs, [rsm.thingelstad.com](https://github.com/jthingelstad/rsm.thingelstad.com), on a stock theme. Two spin-offs, Road Sign Wordplay and Road Sign Bingo, never got going, and I [shut both down](https://www.thingelstad.com/2012/02/08/shutting-down-some.html) in February 2012 with other “ideas that I set up and then never took anywhere.” In March 2021 a sign Tammy found near Phoenix gave Road Sign Math “a breath of new life” at roadsignmath.thingelstad.com ([Weekly Thing 177](https://weekly.thingelstad.com/archive/177/)), and that summer we found ten more on a [Vermont road trip](https://www.thingelstad.com/2021/08/15/varmont-road-trip.html). I registered roadsignmath.xyz in 2021, and in October 2023 I [rebooted](https://www.thingelstad.com/2023/10/21/road-sign-math.html) Road Sign Math a second time, back to a simple blog: “Just my signs. No scoring system or leaderboards.” New signs still appear, such as one in [September 2025](https://www.thingelstad.com/2025/09/01/it-always-makes-me-smile.html).",
      "latest": {
        "date": "2026-06-12T15:11:43.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/rsm.thingelstad.com/commit/a95e1ef5b218a9b482f899a9affdf8d60326c789"
      }
    },
    {
      "id": "stone-steel-people",
      "title": "Stone/Steel/People",
      "summary": "A square photo book of a little over 30 of my pictures, one to a page, made with Blurb after a 2010 photography workshop.",
      "collection": "Art & archives",
      "status": "archived",
      "url": "https://www.blurb.com/b/1813441-stone-steel-people",
      "started": "2010-11",
      "ended": "2010-12-05",
      "page": "https://thingelstad.xyz/things/stone-steel-people/",
      "markdown": "https://thingelstad.xyz/things/stone-steel-people.md",
      "topics": [
        "making"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://www.blurb.com/b/1813441-stone-steel-people",
          "role": "archive",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2010/12/05/first-photo-book.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "thingelstad-photography",
          "label": "drew on the same work as",
          "detail": "Both come from my photography of the early 2010s, which the portfolio site showed by subject.",
          "source": "https://www.thingelstad.com/2012/07/01/website-for-my.html"
        }
      ],
      "body": "Stone/Steel/People is my [first photo book](https://www.thingelstad.com/2010/12/05/first-photo-book.html). I made it after Layne Kennedy’s 72 Hours workshop at the Minneapolis Photo Center, and named it for what I photographed there. Two weeks before it came out I wrote about [editing it down](https://www.thingelstad.com/2010/11/15/editing-a-book.html) to the pictures that belonged.\n\nThe book is square, with one image to a page and “a little over 30 pictures,” and I reckoned it took “between 10 and 15 hours.” I published it through Blurb, where it is [still for sale](https://www.blurb.com/b/1813441-stone-steel-people).",
      "latest": null
    },
    {
      "id": "nnxyz",
      "title": "The nnxyz Rooms",
      "summary": "An online gallery of my nnxyz and Scrimshaw collection, hung in 30 rooms, where each Nifty Ink drawing replays stroke by stroke.",
      "collection": "Art & archives",
      "status": "active",
      "url": "https://nnxyz.thingelstad.xyz/",
      "started": "2026-10",
      "page": "https://thingelstad.xyz/things/nnxyz/",
      "markdown": "https://thingelstad.xyz/things/nnxyz.md",
      "topics": [
        "crypto",
        "archives"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/nnxyz",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/nnxyz",
            "url": "https://github.com/jthingelstad/nnxyz",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-10-13T17:26:51.000Z",
            "archived": false,
            "description": "An art-first SVG gallery of nnxyz and scrimshaw, with archived brush-stroke replay and AI curation",
            "stars": 0,
            "forks": 0,
            "languages": [
              {
                "name": "HTML",
                "bytes": 6368669
              },
              {
                "name": "Python",
                "bytes": 877389
              },
              {
                "name": "JavaScript",
                "bytes": 140486
              },
              {
                "name": "Astro",
                "bytes": 117874
              },
              {
                "name": "TypeScript",
                "bytes": 100283
              },
              {
                "name": "CSS",
                "bytes": 49476
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 104,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 104
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-23T12:46:31.000Z",
                  "url": "https://github.com/jthingelstad/nnxyz/commit/838c24d5c7d5fd3a8f6e14939ce8a520050e4204"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://nnxyz.thingelstad.xyz/",
          "role": "website",
          "sitemap": "https://nnxyz.thingelstad.xyz/sitemap-index.xml",
          "observation": {
            "kind": "web",
            "url": "https://nnxyz.thingelstad.xyz/",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "sitemap": {
              "url": "https://nnxyz.thingelstad.xyz/sitemap-index.xml",
              "pages": 723,
              "newestModified": null,
              "months": [],
              "complete": true
            },
            "feed": null
          },
          "captures": {
            "kind": "wayback",
            "url": "https://nnxyz.thingelstad.xyz/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "firstCapture": "2026-10-16",
            "latestCapture": "2026-10-16",
            "years": [
              {
                "year": "2026",
                "days": 1
              }
            ]
          },
          "views": {
            "kind": "tinylytics",
            "url": "https://nnxyz.thingelstad.xyz/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 0,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 0
              },
              {
                "month": "2026-02",
                "count": 0
              },
              {
                "month": "2026-03",
                "count": 0
              },
              {
                "month": "2026-04",
                "count": 0
              },
              {
                "month": "2026-05",
                "count": 0
              },
              {
                "month": "2026-06",
                "count": 0
              },
              {
                "month": "2026-07",
                "count": 0
              },
              {
                "month": "2026-08",
                "count": 0
              },
              {
                "month": "2026-09",
                "count": 0
              }
            ]
          }
        }
      ],
      "connections": [],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/nnxyz-thingelstad-xyz-f41f1c7e2e.jpg",
        "site": "https://nnxyz.thingelstad.xyz/",
        "date": "2026-10-20"
      },
      "story": {
        "color": "#8062a8",
        "introduction": "Collected art, with room to look closely.",
        "engineering": [
          "Static artwork pages are built from a structured collection catalog.",
          "Native SVG and archived stroke data let visitors inspect and replay how a drawing was made.",
          "Saved curatorial readings and related works support exploration without a live model call."
        ],
        "stack": [
          "Astro",
          "TypeScript",
          "SVG",
          "AWS"
        ],
        "related": [],
        "questions": [
          "How does the gallery replay a drawing?",
          "Show me other archive projects."
        ],
        "source": "https://github.com/jthingelstad/nnxyz"
      },
      "body": "The nnxyz Rooms is a gallery of the art I collected from nnxyz, an artist on Nifty Ink, a free drawing board on the xDai chain that kept every stroke. As the gallery’s [story of the collector](https://nnxyz.thingelstad.xyz/story/the-collector/) tells it, I found Nifty Ink in March 2022, bought my first nnxyz drawing, Nifty Faces #109, on 2022-04-14, and kept buying until I held four complete series. Along with 646 nnxyz works the gallery holds 26 by Scrimshaw.\n\nThe works hang in 30 rooms across six collections, each with room texts, artwork labels, and its own audio tour, and a [map](https://nnxyz.thingelstad.xyz/map/) shows the collection as one building on three floors. Because Nifty Ink recorded every stroke, each drawing is rebuilt as a native vector image that can be enlarged, downloaded, or replayed as it was drawn. Story pages cover [Nifty Ink](https://nnxyz.thingelstad.xyz/story/nifty-ink/), which Austin Griffith opened in the summer of 2020 and where nnxyz arrived in October 2021, along with the collector, my fan art, the artist’s project, the year 2022, and the artist’s own words.\n\nThe collector’s introduction on the front page is mine. The [About page](https://nnxyz.thingelstad.xyz/about/) says the rest of the gallery text is unsigned, written from the works, their archived records, the public ledgers, and the artist’s posts. I built the site in October 2026 with Astro, from the archived drawings and their on-chain records.",
      "latest": {
        "date": "2026-10-23T12:46:31.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/nnxyz/commit/838c24d5c7d5fd3a8f6e14939ce8a520050e4204"
      }
    },
    {
      "id": "thingelstad-photography",
      "title": "Thingelstad Photography",
      "summary": "My photography portfolio at photography.thingelstad.com, relaunched on WordPress in 2012 to show an image a week from my Lightroom archive.",
      "collection": "Historical projects",
      "status": "retired",
      "url": "https://web.archive.org/web/20100224054709/http://photography.thingelstad.com/",
      "started": "2010",
      "page": "https://thingelstad.xyz/things/thingelstad-photography/",
      "markdown": "https://thingelstad.xyz/things/thingelstad-photography.md",
      "topics": [
        "making"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20100224054709/http://photography.thingelstad.com/",
          "role": "archive",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "http://photography.thingelstad.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "firstCapture": "2010-02-24",
            "latestCapture": "2010-02-24",
            "years": [
              {
                "year": "2010",
                "days": 1
              }
            ]
          },
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2012/07/01/website-for-my.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [],
      "body": "By early 2010 I had a portfolio site at photography.thingelstad.com. The [first Internet Archive capture](https://web.archive.org/web/20100224054709/http://photography.thingelstad.com/), from February 2010, sorts my pictures into Featured, Garden, Outdoor and Travel, with type served by Kernest, Garrick van Buren’s web font service.\n\nIn July 2012 I [relaunched it](https://www.thingelstad.com/2012/07/01/website-for-my.html) on WordPress with the AutoFocus theme: “I’ve got a new website where I am highlighting my photography, Thingelstad Photography!” I planned to post “an image a week, or more” from my Lightroom archive. The end of the site is not recorded.",
      "latest": null
    },
    {
      "id": "thinglesbot",
      "title": "Thinglesbot",
      "summary": "My Twitter robot, which posted home temperatures, solar panel status, and inbox counts from scripts around my house.",
      "collection": "Historical projects",
      "status": "retired",
      "url": "https://web.archive.org/web/20110209234653/http://thinglesbot.com/",
      "started": "2007-03-11",
      "ended": "2012-02-08",
      "page": "https://thingelstad.xyz/things/thinglesbot/",
      "markdown": "https://thingelstad.xyz/things/thinglesbot.md",
      "topics": [
        "agents",
        "automation"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20110209234653/http://thinglesbot.com/",
          "role": "archive",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "http://thinglesbot.com/",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": "2011-02-09",
            "latestCapture": "2011-02-09",
            "years": [
              {
                "year": "2011",
                "days": 1
              }
            ]
          },
          "views": null
        }
      ],
      "connections": [],
      "body": "Thinglesbot was my robot, and it lived on Twitter. I had scripts and tools like cacti watching things at home, but nobody looked at their output after a while, so I gave them a voice: a separate account, @thinglesBot, that posted the outdoor temperature four times a day along with readings from the attic and the utility room, said when the solar panels turned on and off, and reported how many emails were in my inbox at the end of each day. It was “nothing more than a collection of scripts” on a few computers, posting with curl. I [introduced it](https://www.thingelstad.com/2007/03/11/introducing-my-robot.html) on March 11, 2007, and two people I had never met, in other states, soon followed it.\n\nWhen I quit Twitter in November 2007 I wrote that [the robot’s account had been deleted](https://www.thingelstad.com/2007/11/04/buhbye-twitter.html), but Thinglesbot was [posting temperatures again](https://web.archive.org/web/20080218023438/http://twitter.com/thinglesbot/statuses/696031342) by February 2008. After it lost its sensor connections and went quiet, I [rewired it](https://www.thingelstad.com/2009/03/24/my-robot-returns.html) on March 24, 2009, replacing the Bash and curl scripts with Ruby and the Twitter4R library and adding a daily favorite number, color, or letter and a “favorite follower.” Its posts were also collected on [thinglesbot.com](https://web.archive.org/web/20110209234653/http://thinglesbot.com/) (“I am Jamie’s robot”).\n\nIn February 2012 I listed thinglesBot among the sites I [shut down](https://www.thingelstad.com/2012/02/08/shutting-down-some.html), and in 2014 among my deleted Twitter accounts ([Twitter Spam #NFL](https://www.thingelstad.com/2014/11/28/twitter-spam-nfl.html)).",
      "latest": null
    },
    {
      "id": "things-4-good",
      "title": "Things 4 Good",
      "summary": "My family’s yearly sale of hand-poured wooden-wick candles, with every dollar going to four nonprofits we pick.",
      "collection": "Personal tools and making",
      "status": "active",
      "url": "https://things4good.xyz/",
      "started": "2020",
      "page": "https://thingelstad.xyz/things/things-4-good/",
      "markdown": "https://thingelstad.xyz/things/things-4-good.md",
      "topics": [
        "making"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/things4good.xyz",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/things4good.xyz",
            "url": "https://github.com/jthingelstad/things4good.xyz",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "repositoryCreatedAt": "2026-06-04T03:37:10.000Z",
            "archived": false,
            "description": "Things 4 Good — a handmade candle fundraiser site. Built with Eleventy.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "Nunjucks",
                "bytes": 68723
              },
              {
                "name": "CSS",
                "bytes": 59352
              },
              {
                "name": "JavaScript",
                "bytes": 13983
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-20T17:57:36.612Z",
                "count": 8,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 3
                  },
                  {
                    "month": "2026-08",
                    "count": 2
                  },
                  {
                    "month": "2026-09",
                    "count": 2
                  },
                  {
                    "month": "2026-10",
                    "count": 1
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-16T11:03:43.000Z",
                  "url": "https://github.com/jthingelstad/things4good.xyz/commit/c519d1f7f00dffdd930ab376b4f0829eac42d054"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://things4good.xyz/",
          "role": "website",
          "sitemap": "https://things4good.xyz/sitemap.xml",
          "observation": {
            "kind": "web",
            "url": "https://things4good.xyz/",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "sitemap": {
              "url": "https://things4good.xyz/sitemap.xml",
              "pages": 6,
              "newestModified": null,
              "months": [],
              "complete": true
            },
            "feed": null
          },
          "captures": {
            "kind": "wayback",
            "url": "https://things4good.xyz/",
            "observedAt": "2026-10-18T10:34:11.419Z",
            "firstCapture": "2024-07-15",
            "latestCapture": "2026-02-12",
            "years": [
              {
                "year": "2024",
                "days": 10
              },
              {
                "year": "2025",
                "days": 5
              },
              {
                "year": "2026",
                "days": 1
              }
            ]
          },
          "views": {
            "kind": "tinylytics",
            "url": "https://www.things4good.xyz/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 94,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 25
              },
              {
                "month": "2026-02",
                "count": 14
              },
              {
                "month": "2026-03",
                "count": 11
              },
              {
                "month": "2026-04",
                "count": 11
              },
              {
                "month": "2026-05",
                "count": 14
              },
              {
                "month": "2026-06",
                "count": 19
              },
              {
                "month": "2026-07",
                "count": 0
              },
              {
                "month": "2026-08",
                "count": 0
              },
              {
                "month": "2026-09",
                "count": 0
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/projects/fall-fundraiser/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20201230115619/https://www.thingelstad.com/candles/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2022/11/27/101105.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2025/11/16/things-good-five-year-impact.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "jiggy-thing-puzzles",
          "label": "sold",
          "detail": "The first sale in 2021 introduced Jiggy Thing Puzzle",
          "source": "https://www.thingelstad.com/2021/11/09/things-good-fall.html"
        }
      ],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/things4good-xyz-564ed441b9.jpg",
        "site": "https://things4good.xyz/",
        "date": "2026-10-20"
      },
      "story": {
        "color": "#dda73f",
        "introduction": "Build something small. Do some good.",
        "engineering": [
          "One event dataset records each sale and its allocations to supported organizations.",
          "Totals, charts, and other impact figures are calculated from that shared dataset.",
          "An Eleventy build delivers a static site, with small interactive enhancements for exploration."
        ],
        "stack": [
          "Eleventy",
          "JavaScript",
          "Data-driven content"
        ],
        "related": [],
        "questions": [
          "How is the fundraiser’s impact calculated?",
          "Show me other community projects."
        ]
      },
      "body": "It began with a wooden-wick candle. I bought one at a market, loved its crackle, and by early 2020 had a box of supplies from The Wooden Wick Co. and was [making my own](https://weekly.thingelstad.com/archive/137/). By the end of that year I had a [Wicky Thing Candles](https://web.archive.org/web/20201230115619/https://www.thingelstad.com/candles/) page with named scents like Lit, Cake Eater, and Man in the Pants. In September 2021 each family at Olson Family Vacation won a custom Wicky Thing candle in Tammy’s scavenger hunt ([WT194](https://weekly.thingelstad.com/archive/194/)).\n\nThat fall our family turned the candles into a fundraiser. The first Things 4 Good Fall Fundraiser, on 2021-11-06 and 07, sold 134 Wicky Thing Candles in four scents, along with the first Jiggy Thing Puzzle, Four Bees Honey from Tammy’s sister Angie, and cookies Tammy and the kids baked. It [raised $4,757](https://www.thingelstad.com/2021/11/09/things-good-fall.html) for four nonprofits, one picked by each of us: Tammy, Mazie, Tyler, and me, with buyers choosing how to split their donation. The name plays on our family name: four Things, four causes. “All four of us ‘Things’ are working away,” I wrote as we got ready. That November I also set up a crypto donor-advised fund named [Things 4 Good on Endaoment](https://www.thingelstad.com/2021/11/28/things-good-on.html) and made its first grant, to the Internet Archive.\n\nIt became a tradition. In 2022 we made 180 candles and [sold 172](https://www.thingelstad.com/2022/11/27/101105.html), raising $5,217. Totals grew each year, to $5,755 in 2023 and $7,010 in 2024, when the first day of the sale moved to the Mount Olivet Holiday Boutique. The 2025 sale, marked with a “5th Anniversary” POAP, sold 321 candles and [raised $9,048](https://www.thingelstad.com/2025/11/16/things-good-candle-fundraiser-results.html), for [$31,787 over five years](https://www.thingelstad.com/2025/11/16/things-good-five-year-impact.html). Each year I post the results and a look at the sale’s data. The candles now go by the Things 4 Good name, and every candle is still a $25 donation.\n\nIn 2026 the fundraiser got its own site, [things4good.xyz](https://things4good.xyz/), with the sale, every organization supported, and the numbers by year, all calculated from one dataset of sale events. The 2026 sale, the sixth, is set for November 7 and 8, with a new Maker Night where six guests pour their own candles.",
      "latest": {
        "date": "2026-10-16T11:03:43.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/things4good.xyz/commit/c519d1f7f00dffdd930ab376b4f0829eac42d054"
      }
    },
    {
      "id": "things-ive-built",
      "title": "Things I’ve built",
      "summary": "An index and archive of my projects, including the ones I have stepped away from.",
      "collection": "Art & archives",
      "status": "active",
      "url": "https://thingelstad.xyz/",
      "started": "2026-10",
      "page": "https://thingelstad.xyz/things/things-ive-built/",
      "markdown": "https://thingelstad.xyz/things/things-ive-built.md",
      "topics": [
        "archives",
        "open-web"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/thingelstad.xyz",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/thingelstad.xyz",
            "url": "https://github.com/jthingelstad/thingelstad.xyz",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-10-13T16:41:47.000Z",
            "archived": false,
            "description": "Things I've built. Jamie Thingelstad's interactive project gallery.",
            "stars": 1,
            "forks": 0,
            "languages": [
              {
                "name": "TypeScript",
                "bytes": 248162
              },
              {
                "name": "CSS",
                "bytes": 36052
              },
              {
                "name": "Nunjucks",
                "bytes": 34512
              },
              {
                "name": "JavaScript",
                "bytes": 33552
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 35,
                "complete": true,
                "months": [
                  {
                    "month": "2026-10",
                    "count": 35
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-23T22:54:59.000Z",
                  "url": "https://github.com/jthingelstad/thingelstad.xyz/commit/2d066bea02aa4d71164b0289d035acb1bd8f5264"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://thingelstad.xyz/",
          "role": "website",
          "sitemap": "https://thingelstad.xyz/sitemap.xml",
          "feed": "https://thingelstad.xyz/feed.xml",
          "observation": {
            "kind": "web",
            "url": "https://thingelstad.xyz/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "sitemap": {
              "url": "https://thingelstad.xyz/sitemap.xml",
              "pages": 70,
              "newestModified": null,
              "months": [],
              "complete": true
            },
            "feed": {
              "url": "https://thingelstad.xyz/feed.xml",
              "title": "Things I’ve built. History",
              "items": 30,
              "newestPublished": "2026-10-17T00:00:00.000Z",
              "months": [
                {
                  "month": "2026-06",
                  "count": 1
                },
                {
                  "month": "2026-07",
                  "count": 3
                },
                {
                  "month": "2026-09",
                  "count": 12
                },
                {
                  "month": "2026-10",
                  "count": 14
                }
              ]
            }
          },
          "captures": {
            "kind": "wayback",
            "url": "https://thingelstad.xyz/",
            "observedAt": "2026-10-18T10:34:11.419Z",
            "firstCapture": null,
            "latestCapture": null,
            "years": []
          },
          "views": {
            "kind": "tinylytics",
            "url": "https://thingelstad.xyz/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 0,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 0
              },
              {
                "month": "2026-02",
                "count": 0
              },
              {
                "month": "2026-03",
                "count": 0
              },
              {
                "month": "2026-04",
                "count": 0
              },
              {
                "month": "2026-05",
                "count": 0
              },
              {
                "month": "2026-06",
                "count": 0
              },
              {
                "month": "2026-07",
                "count": 0
              },
              {
                "month": "2026-08",
                "count": 0
              },
              {
                "month": "2026-09",
                "count": 0
              }
            ]
          }
        }
      ],
      "connections": [
        {
          "to": "thingy",
          "label": "publishes a catalog for",
          "detail": "The registry is published as things.json and llms.txt so Thingy can answer questions about my projects without this site running a model.",
          "source": "https://github.com/jthingelstad/thingelstad.xyz"
        }
      ],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/thingelstad-xyz-8d630a5015.jpg",
        "site": "https://thingelstad.xyz/",
        "date": "2026-10-20"
      },
      "body": "I keep thingelstad.xyz for point-in-time project things. This site is the index: every project, active or retired, with its sources, its connections to other projects, and a sourced history of what happened when. The registry is written as Markdown and YAML in a public repository, evidence is collected weekly from GitHub, sitemaps, and feeds, and the result is a static site with an RSS feed and llms.txt.\n\nI started the repository in October 2026 as a project gallery with an AI guide. On [October 17, 2026](https://github.com/jthingelstad/thingelstad.xyz/pull/6) it became a static site built with Eleventy from the Markdown registry, and the AI guide, private editor and React application were [retired](https://github.com/jthingelstad/thingelstad.xyz/pull/8). Thingy's archive [indexes](https://github.com/jthingelstad/thingelstad.xyz/pull/9) the published things.json, so it can answer questions about the projects.",
      "latest": {
        "date": "2026-10-23T22:54:59.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/thingelstad.xyz/commit/2d066bea02aa4d71164b0289d035acb1bd8f5264"
      }
    },
    {
      "id": "thingy",
      "title": "Thingy",
      "summary": "An AI librarian that answers questions about everything I have published, with citations back to the original posts and issues.",
      "collection": "Publishing",
      "status": "active",
      "url": "https://thingy.thingelstad.com/",
      "started": "2026-05-07",
      "page": "https://thingelstad.xyz/things/thingy/",
      "markdown": "https://thingelstad.xyz/things/thingy.md",
      "topics": [
        "agents",
        "mcp",
        "open-web",
        "archives"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/thingy.thingelstad.com",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/thingy.thingelstad.com",
            "url": "https://github.com/jthingelstad/thingy.thingelstad.com",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-06-03T23:20:15.000Z",
            "archived": false,
            "description": "Thingy — the standalone web home for Jamie Thingelstad's archive agent: a query surface over the Studio corpus, with a web app and a Discord bridge.",
            "stars": 2,
            "forks": 0,
            "languages": [
              {
                "name": "TypeScript",
                "bytes": 497798
              },
              {
                "name": "JavaScript",
                "bytes": 168307
              },
              {
                "name": "CSS",
                "bytes": 119045
              },
              {
                "name": "HTML",
                "bytes": 94658
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 199,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 19
                  },
                  {
                    "month": "2026-08",
                    "count": 29
                  },
                  {
                    "month": "2026-09",
                    "count": 93
                  },
                  {
                    "month": "2026-10",
                    "count": 58
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-22T23:56:55.000Z",
                  "url": "https://github.com/jthingelstad/thingy.thingelstad.com/commit/67b4f0afe15c69fcc6f29e5cba2af0a0eadbfa34"
                }
              }
            ]
          }
        },
        {
          "kind": "github",
          "repository": "jthingelstad/librarian-thing",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/librarian-thing",
            "url": "https://github.com/jthingelstad/librarian-thing",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-06-03T23:21:50.000Z",
            "archived": false,
            "description": "Studio — the brain behind Jamie Thingelstad's publishing: capture, research, the editorial source of truth, the production pipeline, and the authoring agents. Downstream surfaces (blog, newsletter, podcast, Thingy) consume what it produces.",
            "stars": 2,
            "forks": 0,
            "languages": [
              {
                "name": "Python",
                "bytes": 1577887
              },
              {
                "name": "TypeScript",
                "bytes": 1003088
              },
              {
                "name": "JavaScript",
                "bytes": 711171
              },
              {
                "name": "Shell",
                "bytes": 3340
              },
              {
                "name": "Makefile",
                "bytes": 2435
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 292,
                "complete": false,
                "months": [
                  {
                    "month": "2026-09",
                    "count": 92
                  },
                  {
                    "month": "2026-10",
                    "count": 200
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-23T01:11:04.000Z",
                  "url": "https://github.com/jthingelstad/librarian-thing/commit/8365eb3b2423fdf8f5831b11a689b7b03af78b32"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://thingy.thingelstad.com/",
          "role": "website",
          "sitemap": "https://thingy.thingelstad.com/sitemap.xml",
          "observation": {
            "kind": "web",
            "url": "https://thingy.thingelstad.com/",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "sitemap": {
              "url": "https://thingy.thingelstad.com/sitemap.xml",
              "pages": 4,
              "newestModified": null,
              "months": [],
              "complete": true
            },
            "feed": null
          },
          "captures": {
            "kind": "wayback",
            "url": "https://thingy.thingelstad.com/",
            "observedAt": "2026-10-18T10:34:11.419Z",
            "firstCapture": "2026-10-12",
            "latestCapture": "2026-10-12",
            "years": [
              {
                "year": "2026",
                "days": 1
              }
            ]
          },
          "views": {
            "kind": "tinylytics",
            "url": "https://thingy.thingelstad.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 1317,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 0
              },
              {
                "month": "2026-02",
                "count": 0
              },
              {
                "month": "2026-03",
                "count": 0
              },
              {
                "month": "2026-04",
                "count": 0
              },
              {
                "month": "2026-05",
                "count": 0
              },
              {
                "month": "2026-06",
                "count": 670
              },
              {
                "month": "2026-07",
                "count": 69
              },
              {
                "month": "2026-08",
                "count": 39
              },
              {
                "month": "2026-09",
                "count": 539
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://librarian.thingelstad.com/mcp",
          "role": "mcp",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://thingy.thingelstad.com/about/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://thingy.thingelstad.com/connect/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2026/06/07/thingy-evolved.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "weekly-thing",
          "label": "answers from",
          "detail": "Thingy launched with the new Weekly Thing website in May 2026 and answers from every issue of the newsletter.",
          "source": "https://www.thingelstad.com/2026/05/07/massive-weekly-thing-website-build.html"
        },
        {
          "to": "jamie-thingelstad-blog",
          "label": "answers from",
          "detail": "In June 2026 I built a semantic archive of my blog so Thingy could search it alongside the newsletter.",
          "source": "https://www.thingelstad.com/2026/06/07/thingy-evolved.html"
        },
        {
          "to": "another-thing",
          "label": "answers from",
          "detail": "Thingy searches the Another Thing podcast and its transcripts.",
          "source": "https://thingy.thingelstad.com/about/"
        },
        {
          "to": "things-ive-built",
          "label": "indexes",
          "detail": "Librarian snapshots the registry’s things.json into the Weekly Thing corpus, so Thingy and MCP clients can answer questions about my projects (sources thing-<id> and thing-index).",
          "source": "https://github.com/jthingelstad/librarian-thing/tree/main/data/things"
        },
        {
          "to": "wt-builder",
          "label": "receives issues from",
          "detail": "After each issue publishes, WT Builder commits the issue text into the Librarian repository so Thingy can retrieve and cite it.",
          "source": "https://github.com/jthingelstad/librarian-thing"
        }
      ],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/thingy-thingelstad-com-431d85d0b4.jpg",
        "site": "https://thingy.thingelstad.com/",
        "date": "2026-10-20"
      },
      "story": {
        "color": "#6f8f6a",
        "introduction": "Ask the archive, get the sources.",
        "engineering": [
          "A static React app built on assistant-ui, served from a private S3 bucket behind CloudFront.",
          "It calls Librarian, its private archive API, streams answers over server-sent events, and renders citations and inline photos.",
          "Librarian's Python corpus pipeline builds chunked, embedded indexes of every source, and a Node API on AWS Lambda answers from them.",
          "Retrieval is hybrid. TF-IDF lexical search and semantic embeddings are fused with reciprocal-rank fusion, then reranked.",
          "An agent loop running Claude on Amazon Bedrock plans tool calls, gathers evidence, and writes cited answers.",
          "The same tools are published as an MCP server with OAuth 2.1 sign-in, and a suite of more than 850 fixtures runs on every deploy.",
          "Sign-in is by email, and the session lives in an HttpOnly cookie.",
          "While a reader is signed in, the chat page also offers the archive tools to agents in the browser through WebMCP, in beta."
        ],
        "stack": [
          "React",
          "assistant-ui",
          "Python",
          "Node",
          "AWS Lambda",
          "Amazon Bedrock",
          "MCP",
          "Amazon S3",
          "Amazon CloudFront"
        ],
        "related": [
          "weekly-thing",
          "jamie-thingelstad-blog",
          "another-thing"
        ],
        "questions": [
          "What can Thingy answer?",
          "How does Thingy find its sources?",
          "How can I connect my own AI to the archive?"
        ],
        "source": "https://thingy.thingelstad.com/about/",
        "sourceLabel": "About Thingy",
        "started": "Launched May 2026"
      },
      "body": "Thingy is an AI librarian for my public archive. You ask it a question, such as when I first wrote about Ethereum or what I was reading in 2019, and it finds the posts and issues that answer it, quotes them, and links to the originals. It knows only what I have published. Weekly Thing subscribers sign in with their email, and Supporting Members get larger daily budgets.\n\nI previewed it in [Weekly Thing 346](https://weekly.thingelstad.com/archive/346/) and launched it with the [new Weekly Thing website](https://www.thingelstad.com/2026/05/07/massive-weekly-thing-website-build.html) on May 7, 2026. A month later, [Thingy Evolved](https://www.thingelstad.com/2026/06/07/thingy-evolved.html) gave it its own site and three archives to search, the newsletter, the blog, and the podcast, along with saved conversations, curiosity maps, voice input, and memory. In September I added photos and shared conversations and [called it complete](https://www.thingelstad.com/2026/09/03/im-ready-to-call-thingy.html). In October it got [a new design](https://www.thingelstad.com/2026/10/07/thingy-my-digital-librarian-got.html), with Claude Sonnet for subscribers and Claude Opus for Supporting Members.\n\nBehind Thingy is Librarian, a private archive API with no front end of its own. It holds working copies of every Weekly Thing issue, the blog posts pulled from Micro.blog, and the Another Thing episodes with their transcripts, and it builds the search indexes Thingy answers from. Its [repository](https://github.com/jthingelstad/librarian-thing) began as Studio, my earlier publishing system. When publishing moved to WT Builder, what was left became Librarian. It also indexes this registry of things I have built.\n\nThe same tools Thingy uses are offered as an MCP server at `librarian.thingelstad.com/mcp`. Weekly Thing subscribers can [connect Claude, ChatGPT, or another AI](https://thingy.thingelstad.com/connect/) to it and sign in with their email, with no password. The AI can then search the newsletter, blog, links, photos, and podcast, and link back to each source it uses. As described on [Thingy’s about page](https://thingy.thingelstad.com/about/), an AI agent spent eight review rounds trying to break the tools when the MCP server launched, and what it found shaped how matching works.\n\nSince [Weekly Thing 350](https://weekly.thingelstad.com/archive/350/), Thingy also writes two sections of each issue: Supporting Membership and Echoes, which connects the week’s topics to earlier issues.",
      "latest": {
        "date": "2026-10-23T01:11:04.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/librarian-thing/commit/8365eb3b2423fdf8f5831b11a689b7b03af78b32"
      }
    },
    {
      "id": "tosredux",
      "title": "TOSRedux",
      "summary": "A Semantic MediaWiki site at tosredux.org for crowdsourcing a structured analysis of websites’ terms of service.",
      "collection": "Historical projects",
      "status": "abandoned",
      "url": "https://web.archive.org/web/20151013153210/https://wikiapiary.com/wiki/Farm:Thingelstad.com",
      "started": "2011",
      "page": "https://thingelstad.xyz/things/tosredux/",
      "markdown": "https://thingelstad.xyz/things/tosredux.md",
      "topics": [
        "mediawiki",
        "semantic-mediawiki",
        "open-web"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://weekly.thingelstad.com/archive/306/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [],
      "body": "“A decade or so ago I got the wiki bug in a bad way,” I wrote in [Weekly Thing 306](https://weekly.thingelstad.com/archive/306/), “and one of the use cases I thought made sense was a wiki approach to Terms of Service. I got it started on TOSredux.org with the thought that you could crowdsource a semantic analysis of terms of service and then use a browser plugin to give good feedback to people on what they are accepting.”\n\nThe first Internet Archive capture of tosredux.org is from September 2011. The site ran on my MediaWiki farm, and WikiApiary still listed it among the farm’s active wikis in [October 2015](https://web.archive.org/web/20151013153210/https://wikiapiary.com/wiki/Farm:Thingelstad.com). It most likely ended when the farm did in 2016.",
      "latest": null
    },
    {
      "id": "velotweets",
      "title": "VeloTweets",
      "summary": "A 2009 site that gathered professional cyclists’ tweets into one grid, built by Luke Francl, Norm Orstad, Chris Hatch, and me.",
      "collection": "Historical projects",
      "status": "retired",
      "url": "https://web.archive.org/web/20090514063346/http://www.velotweets.com/",
      "started": "2009-05-10",
      "page": "https://thingelstad.xyz/things/velotweets/",
      "markdown": "https://thingelstad.xyz/things/velotweets.md",
      "topics": [
        "automation",
        "open-web"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20090514063346/http://www.velotweets.com/",
          "role": "archive",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "http://www.velotweets.com/",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": "2009-05-14",
            "latestCapture": "2024-12-25",
            "years": [
              {
                "year": "2009",
                "days": 4
              },
              {
                "year": "2010",
                "days": 2
              },
              {
                "year": "2011",
                "days": 2
              },
              {
                "year": "2012",
                "days": 13
              },
              {
                "year": "2013",
                "days": 6
              },
              {
                "year": "2014",
                "days": 11
              },
              {
                "year": "2015",
                "days": 1
              },
              {
                "year": "2016",
                "days": 3
              },
              {
                "year": "2017",
                "days": 2
              },
              {
                "year": "2018",
                "days": 2
              },
              {
                "year": "2019",
                "days": 2
              },
              {
                "year": "2020",
                "days": 3
              },
              {
                "year": "2021",
                "days": 2
              },
              {
                "year": "2023",
                "days": 4
              },
              {
                "year": "2024",
                "days": 4
              }
            ]
          },
          "views": null
        }
      ],
      "connections": [],
      "body": "VeloTweets, “the Pulse of the Peloton,” collected the Twitter posts of professional road cyclists in one place. In early 2009 I had started following riders such as Lance Armstrong through their RSS feeds and noticed that, read together, they gave a first-person view of the peloton during races. VeloTweets included only pro riders and a few others in the sport, added each rider’s team and nationality, and showed each rider once in a grid with their most recent message, so frequent posters did not crowd out everyone else. It also gathered TwitPic photos as VeloPics, kept a race calendar, and ran a Message of the Day tied to the day’s racing.\n\nIt was a side project with no budget and no business behind it. The idea was mine. Luke Francl did most of the development, in Rails 2.3; Norm Orstad designed the site; Chris Hatch built the list of riders and filled in their profiles; and I “played sweeper,” helping wherever I could. The grid came out of a working session: I credit Norm’s comparison to a baseball card, and Luke credits me with showing one tweet per rider. Luke [announced the site on Rail Spikes](https://web.archive.org/web/20090514074605/http://railspikes.com/2009/5/10/announcing-velotweets) on May 10, 2009, and I followed two days later with [Introducing VeloTweets](https://www.thingelstad.com/2009/05/12/introducing-velotweets-the.html) and [Why do Cyclists Tweet?](https://www.thingelstad.com/2009/05/12/why-do-cyclists-tweet.html).\n\nThe last Internet Archive capture of the working site is from [March 2010](https://web.archive.org/web/20100318125905/http://www.velotweets.com/); by [February 2011](https://web.archive.org/web/20110202042105/http://www.velotweets.com/) velotweets.com was a parked domain. In 2014 I listed @VeloTweets among the Twitter accounts I had deleted ([Twitter Spam #NFL](https://www.thingelstad.com/2014/11/28/twitter-spam-nfl.html)).",
      "latest": null
    },
    {
      "id": "weekly-thing",
      "title": "Weekly Thing",
      "summary": "My weekend newsletter of links with commentary, sent since May 2017 and published as a website, email, and podcast.",
      "collection": "Publishing",
      "status": "active",
      "url": "https://weekly.thingelstad.com/",
      "started": "2017-05-13",
      "page": "https://thingelstad.xyz/things/weekly-thing/",
      "markdown": "https://thingelstad.xyz/things/weekly-thing.md",
      "topics": [
        "open-web",
        "archives"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/weekly.thingelstad.com",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/weekly.thingelstad.com",
            "url": "https://github.com/jthingelstad/weekly.thingelstad.com",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-04-07T23:18:30.000Z",
            "archived": false,
            "description": "Public website and archive for The Weekly Thing, Jamie Thingelstad's weekend newsletter since 2017 — a render surface of the Studio publishing brain.",
            "stars": 2,
            "forks": 2,
            "languages": [
              {
                "name": "Nunjucks",
                "bytes": 137140
              },
              {
                "name": "CSS",
                "bytes": 94882
              },
              {
                "name": "JavaScript",
                "bytes": 70303
              },
              {
                "name": "Makefile",
                "bytes": 1192
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 190,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 10
                  },
                  {
                    "month": "2026-08",
                    "count": 15
                  },
                  {
                    "month": "2026-09",
                    "count": 57
                  },
                  {
                    "month": "2026-10",
                    "count": 108
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-23T01:54:00.000Z",
                  "url": "https://github.com/jthingelstad/weekly.thingelstad.com/commit/e0f523283e0c822e8745c1d3b268363f1e57efab"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://weekly.thingelstad.com/",
          "role": "website",
          "sitemap": "https://weekly.thingelstad.com/sitemap.xml",
          "feed": "https://weekly.thingelstad.com/feed.xml",
          "observation": {
            "kind": "web",
            "url": "https://weekly.thingelstad.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "sitemap": {
              "url": "https://weekly.thingelstad.com/sitemap.xml",
              "pages": 1137,
              "newestModified": "2026-10-10T12:00:00.000Z",
              "months": [
                {
                  "month": "2025-11",
                  "count": 29
                },
                {
                  "month": "2025-12",
                  "count": 17
                },
                {
                  "month": "2026-01",
                  "count": 16
                },
                {
                  "month": "2026-02",
                  "count": 29
                },
                {
                  "month": "2026-03",
                  "count": 19
                },
                {
                  "month": "2026-04",
                  "count": 17
                },
                {
                  "month": "2026-05",
                  "count": 45
                },
                {
                  "month": "2026-09",
                  "count": 28
                },
                {
                  "month": "2026-10",
                  "count": 42
                }
              ],
              "complete": true
            },
            "feed": {
              "url": "https://weekly.thingelstad.com/feed.xml",
              "title": "Weekly Thing",
              "items": 354,
              "newestPublished": "2026-10-10T12:00:00.000Z",
              "months": [
                {
                  "month": "2025-11",
                  "count": 4
                },
                {
                  "month": "2025-12",
                  "count": 2
                },
                {
                  "month": "2026-01",
                  "count": 2
                },
                {
                  "month": "2026-02",
                  "count": 3
                },
                {
                  "month": "2026-03",
                  "count": 2
                },
                {
                  "month": "2026-04",
                  "count": 2
                },
                {
                  "month": "2026-05",
                  "count": 4
                },
                {
                  "month": "2026-09",
                  "count": 2
                },
                {
                  "month": "2026-10",
                  "count": 2
                }
              ]
            }
          },
          "captures": {
            "kind": "wayback",
            "url": "https://weekly.thingelstad.com/",
            "observedAt": "2026-10-18T10:34:11.419Z",
            "firstCapture": "2018-02-03",
            "latestCapture": "2026-10-06",
            "years": [
              {
                "year": "2018",
                "days": 1
              },
              {
                "year": "2019",
                "days": 3
              },
              {
                "year": "2020",
                "days": 6
              },
              {
                "year": "2021",
                "days": 11
              },
              {
                "year": "2022",
                "days": 19
              },
              {
                "year": "2023",
                "days": 14
              },
              {
                "year": "2024",
                "days": 24
              },
              {
                "year": "2025",
                "days": 32
              },
              {
                "year": "2026",
                "days": 20
              }
            ]
          },
          "views": {
            "kind": "tinylytics",
            "url": "https://weekly.thingelstad.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 38293,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 882
              },
              {
                "month": "2026-02",
                "count": 5845
              },
              {
                "month": "2026-03",
                "count": 6321
              },
              {
                "month": "2026-04",
                "count": 6162
              },
              {
                "month": "2026-05",
                "count": 10383
              },
              {
                "month": "2026-06",
                "count": 2018
              },
              {
                "month": "2026-07",
                "count": 1050
              },
              {
                "month": "2026-08",
                "count": 670
              },
              {
                "month": "2026-09",
                "count": 4962
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://weekly.thingelstad.com/podcast/",
          "role": "podcast",
          "feed": "https://weekly.thingelstad.com/podcast.xml",
          "observation": {
            "kind": "web",
            "url": "https://weekly.thingelstad.com/podcast/",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "sitemap": null,
            "feed": {
              "url": "https://weekly.thingelstad.com/podcast.xml",
              "title": "Weekly Thing",
              "items": 354,
              "newestPublished": "2026-10-10T12:00:00.000Z",
              "months": [
                {
                  "month": "2025-11",
                  "count": 4
                },
                {
                  "month": "2025-12",
                  "count": 2
                },
                {
                  "month": "2026-01",
                  "count": 2
                },
                {
                  "month": "2026-02",
                  "count": 3
                },
                {
                  "month": "2026-03",
                  "count": 2
                },
                {
                  "month": "2026-04",
                  "count": 2
                },
                {
                  "month": "2026-05",
                  "count": 4
                },
                {
                  "month": "2026-09",
                  "count": 2
                },
                {
                  "month": "2026-10",
                  "count": 2
                }
              ]
            }
          },
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2026/05/07/massive-weekly-thing-website-build.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/weekly-thingelstad-com-10c2cca660.jpg",
        "site": "https://weekly.thingelstad.com/",
        "date": "2026-10-20"
      },
      "story": {
        "color": "#eaa18f",
        "introduction": "Curiosity, collected and shared.",
        "engineering": [
          "WT Builder keeps an issue structured until it is sent, then renders different editions for the website, email, and audio.",
          "The public archive is an Eleventy site. Thingy's private Librarian API builds the searchable archive that Thingy answers from.",
          "Authoring, public publishing, and archive retrieval have explicit ownership boundaries."
        ],
        "stack": [
          "Eleventy",
          "Publishing",
          "Email",
          "Audio"
        ],
        "related": [
          "wt-builder",
          "yearly-thing-2025",
          "thingy",
          "another-thing"
        ],
        "questions": [
          "What is behind the publishing workflow?",
          "How do Weekly Thing and Thingy connect?"
        ],
        "source": "https://weekly.thingelstad.com/",
        "sourceLabel": "Read the archive",
        "started": "Published since 2017"
      },
      "body": "The Weekly Thing is my newsletter of links I found interesting, each with my commentary, plus my own blog posts from the week. I sent the [first issue](https://weekly.thingelstad.com/archive/1/) on May 13, 2017, and have sent it most weekends since, taking breaks in summer and over the winter holidays. It began on TinyLetter, moved to MailChimp with [issue 23](https://weekly.thingelstad.com/archive/23/) in October 2017, and moved to Buttondown with [issue 131](https://weekly.thingelstad.com/archive/131/) in January 2020. I numbered those moves myself: “1.0: Launch on TinyLetter, 2.0: Move to MailChimp, 2.1: Custom HTML Template, 3.0: Buttondown.” I reached [issue 100](https://weekly.thingelstad.com/archive/100/) in April 2019, [200](https://weekly.thingelstad.com/archive/200/) in October 2021, and [300](https://weekly.thingelstad.com/archive/300/) in November 2024, which took “7 years 5 months 3 weeks and 6 days” ([Thoughts after writing 300 newsletters](https://www.thingelstad.com/2024/11/17/thoughts-after-writing.html)).\n\nIn May 2026, at 345 issues, I [rebuilt the website](https://www.thingelstad.com/2026/05/07/massive-weekly-thing-website-build.html) as a full archive with search, a table of contents for each issue, and Thingy for asking questions of the archive. The ten newest issues also got an audio edition, published as a [podcast](https://weekly.thingelstad.com/podcast/). I built it with Claude Code, Claude Design, and Codex. [Issue 349](https://weekly.thingelstad.com/archive/349/), two weeks later, was the first made in the Weekly Thing Workshop, a team of Discord agents. Starting with [issue 350](https://www.thingelstad.com/2026/09/20/i-just-published-weekly-thing.html) in September 2026, every issue has been written and sent from WT Builder. In October 2026 I [restructured the whole archive](https://www.thingelstad.com/2026/10/06/weekly-thing-archive-improved.html) so old issues render like new ones, and rendered every issue in audio, so the podcast feed “goes all the way back to the very first issue.”\n\nReaders have had places to talk about issues. I [created r/WeeklyThing](https://www.thingelstad.com/2022/10/30/i-decided-to.html) in October 2022, and in September 2023 I opened the [Weekly Thing Forum](https://www.thingelstad.com/2023/09/22/introducing-weekly-thing.html) on Ponder, which closed when Ponder shut down in November 2025 ([Farewell Ponder and Weekly Thing Forum](https://www.thingelstad.com/2025/11/17/farewell-weekly-thing-forum-and.html)). Discussion moved back to the subreddit ([Weekly Thing 334](https://weekly.thingelstad.com/archive/334/)).\n\nSince November 2024, readers can become [Supporting Members](https://www.thingelstad.com/2024/11/17/weekly-thing-supporting.html). All of that money goes to one digital non-profit each year: Creative Commons first, then the Electronic Frontier Foundation, which [received $1,164.92](https://weekly.thingelstad.com/archive/347/) in May 2026, and now [Signal](https://weekly.thingelstad.com/archive/350/).",
      "latest": {
        "date": "2026-10-23T01:54:00.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/weekly.thingelstad.com/commit/e0f523283e0c822e8745c1d3b268363f1e57efab"
      }
    },
    {
      "id": "weekly-thing-gpt",
      "title": "Weekly Thing GPT",
      "summary": "A custom ChatGPT loaded with the first 310 issues of the Weekly Thing, my first way to ask the archive a question.",
      "collection": "Publishing",
      "status": "retired",
      "url": "https://www.thingelstad.com/2025/02/25/weekly-thing-gpt.html",
      "started": "2025-02-25",
      "page": "https://thingelstad.xyz/things/weekly-thing-gpt/",
      "markdown": "https://thingelstad.xyz/things/weekly-thing-gpt.md",
      "topics": [
        "agents",
        "archives"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2025/02/25/weekly-thing-gpt.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "weekly-thing",
          "label": "answered from",
          "detail": "The GPT was loaded with all 310 issues of the Weekly Thing published by February 2025.",
          "source": "https://www.thingelstad.com/2025/02/25/weekly-thing-gpt.html"
        },
        {
          "to": "thingy",
          "label": "was succeeded by",
          "detail": "When Thingy launched in May 2026, I compared the two. The GPT “was grade school level. Thingy is much smarter!”",
          "source": "https://weekly.thingelstad.com/archive/347/",
          "kind": "lineage"
        }
      ],
      "body": "On February 25, 2025, I [made a custom GPT](https://www.thingelstad.com/2025/02/25/weekly-thing-gpt.html) that anyone with a ChatGPT account could use, “loaded with all 310 issues of the Weekly Thing published so far.” I suggested questions such as “What is the Weekly Thing view on social media?”, “What is worse, Facebook or TikTok?”, and “Show me a list of articles on X along with the issue they were in,” and announced it in [Weekly Thing 311](https://weekly.thingelstad.com/archive/311/).\n\nIt had limits. In March 2025 I showed it [answering wrongly](https://weekly.thingelstad.com/archive/313/) when asked which issue the Fortune first appeared in. Fourteen months later I launched Thingy, which searches the archive and cites its sources, and compared the two in [Weekly Thing 347](https://weekly.thingelstad.com/archive/347/): the GPT “was grade school level. Thingy is much smarter!” The GPT’s link no longer works.",
      "latest": null
    },
    {
      "id": "weekly-thing-workshop",
      "title": "Weekly Thing Workshop",
      "summary": "Four AI agents on Discord, Eddy, Linky, Marky and Patty, that helped me edit, research, promote and fund the Weekly Thing in 2026.",
      "collection": "Publishing",
      "status": "abandoned",
      "url": "https://www.thingelstad.com/2026/05/12/the-weekly-thing-team.html",
      "started": "2026-05-12",
      "page": "https://thingelstad.xyz/things/weekly-thing-workshop/",
      "markdown": "https://thingelstad.xyz/things/weekly-thing-workshop.md",
      "topics": [
        "agents",
        "automation"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2026/05/12/the-weekly-thing-team.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://weekly.thingelstad.com/archive/349/",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "weekly-thing",
          "label": "assembled",
          "detail": "Weekly Thing 349 was “the first Weekly Thing created start-to-finish in the new Workshop.”",
          "source": "https://weekly.thingelstad.com/archive/349/"
        },
        {
          "to": "wt-builder",
          "label": "was succeeded by",
          "detail": "Weekly Thing 350, in September 2026, was the first issue made in WT Builder, after a summer in which my Agent Studio work “kind of blew up my own publishing process.”",
          "source": "https://weekly.thingelstad.com/archive/350/",
          "kind": "lineage"
        }
      ],
      "body": "After nine years of Weekly Things assembled with Shortcuts, I wanted help that did not wait for me. The old workflow “only runs when I engage with it. It is also brittle and ‘one way’.” In May 2026 I introduced [the Weekly Thing Team](https://www.thingelstad.com/2026/05/12/the-weekly-thing-team.html), “the genesis of my Workshop,” four agents on Discord, each with the whole Weekly Thing archive as a tool:\n\n- **Eddy**, the editor, assembled a working draft of the current issue every day and reviewed it.\n- **Linky**, the researcher, scouted the links I flagged. When I replied with my commentary, Linky synced it back to Pinboard.\n- **Marky** worked on bringing the newest issue to new readers.\n- **Patty** ran the Supporting Membership calls to action, and was the only agent whose drafts appeared in an issue.\n\n“My words are mine!” I wrote; the agents were a support team, not writers. [Weekly Thing 349](https://weekly.thingelstad.com/archive/349/), sent on May 23, 2026, was the first issue made start to finish in the Workshop, “by far the biggest change I’ve ever made to the Weekly Thing automation.” Over the summer, as I put it in [Weekly Thing 350](https://weekly.thingelstad.com/archive/350/), work on an Agent Studio “kind of blew up my own publishing process.” That issue was the first made in WT Builder, which has made every issue since.",
      "latest": null
    },
    {
      "id": "wikiapiary",
      "title": "WikiApiary",
      "summary": "A Semantic MediaWiki site that tracks thousands of MediaWiki wikis, their software, extensions, and editing activity.",
      "collection": "Historical projects",
      "status": "retired",
      "url": "https://wikiapiary.com/wiki/Main_Page",
      "started": "2012-12-21",
      "page": "https://thingelstad.xyz/things/wikiapiary/",
      "markdown": "https://thingelstad.xyz/things/wikiapiary.md",
      "topics": [
        "mediawiki",
        "semantic-mediawiki"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://wikiapiary.com/wiki/Main_Page",
          "role": "website",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "https://wikiapiary.com/wiki/Main_Page",
            "observedAt": "2026-10-18T10:34:11.419Z",
            "firstCapture": "2012-12-31",
            "latestCapture": "2026-10-07",
            "years": [
              {
                "year": "2012",
                "days": 1
              },
              {
                "year": "2013",
                "days": 10
              },
              {
                "year": "2015",
                "days": 7
              },
              {
                "year": "2016",
                "days": 8
              },
              {
                "year": "2017",
                "days": 30
              },
              {
                "year": "2018",
                "days": 14
              },
              {
                "year": "2019",
                "days": 20
              },
              {
                "year": "2020",
                "days": 11
              },
              {
                "year": "2021",
                "days": 25
              },
              {
                "year": "2022",
                "days": 5
              },
              {
                "year": "2023",
                "days": 16
              },
              {
                "year": "2024",
                "days": 22
              },
              {
                "year": "2025",
                "days": 31
              },
              {
                "year": "2026",
                "days": 18
              }
            ]
          },
          "views": null
        },
        {
          "kind": "github",
          "repository": "WikiApiary/WikiApiary",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "WikiApiary/WikiApiary",
            "url": "https://github.com/WikiApiary/WikiApiary",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2013-01-06T14:27:38.000Z",
            "archived": false,
            "description": "Celery-based task workers for collecting and updating data on WikiApiary.",
            "stars": 31,
            "forks": 9,
            "languages": [
              {
                "name": "Python",
                "bytes": 126726
              },
              {
                "name": "PHP",
                "bytes": 18198
              },
              {
                "name": "JavaScript",
                "bytes": 12153
              },
              {
                "name": "CSS",
                "bytes": 1873
              },
              {
                "name": "HTML",
                "bytes": 992
              },
              {
                "name": "Shell",
                "bytes": 266
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "develop",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 0,
                "complete": true,
                "months": [],
                "latestCommit": {
                  "date": "2015-03-14T13:38:58.000Z",
                  "url": "https://github.com/WikiApiary/WikiApiary/commit/d45dd10e54a0b2ecaef5f6a28ff6aa95282fc223"
                }
              }
            ]
          }
        },
        {
          "kind": "github",
          "repository": "WikiApiary/wikibees",
          "role": "successor",
          "observation": {
            "kind": "github",
            "repository": "WikiApiary/wikibees",
            "url": "https://github.com/WikiApiary/wikibees",
            "observedAt": "2026-10-18T10:38:59.915Z",
            "repositoryCreatedAt": "2016-09-04T19:55:30.000Z",
            "archived": false,
            "description": "The WikiApiary Wikibots",
            "stars": 4,
            "forks": 5,
            "languages": [
              {
                "name": "Python",
                "bytes": 177486
              },
              {
                "name": "PHP",
                "bytes": 19541
              },
              {
                "name": "JavaScript",
                "bytes": 12310
              },
              {
                "name": "CSS",
                "bytes": 1873
              },
              {
                "name": "HTML",
                "bytes": 971
              },
              {
                "name": "Shell",
                "bytes": 586
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "master",
                "since": "2026-07-20T10:38:59.915Z",
                "until": "2026-10-18T10:38:59.915Z",
                "count": 10,
                "complete": true,
                "months": [
                  {
                    "month": "2026-09",
                    "count": 10
                  }
                ],
                "latestCommit": {
                  "date": "2026-09-27T03:40:03.000Z",
                  "url": "https://github.com/WikiApiary/wikibees/commit/d4cbb731f99070b2fa242f24c823755dd71a1dab"
                }
              }
            ]
          }
        }
      ],
      "connections": [
        {
          "to": "foreground",
          "label": "is skinned with",
          "detail": "WikiApiary’s distinctive look came from the Foreground skin, which I worked on for WikiApiary.",
          "source": "https://www.thingelstad.com/2013/12/22/one-year-for.html"
        }
      ],
      "body": "WikiApiary is “a wiki to track other wikis.” Once a MediaWiki site is registered, a set of bots collects its software versions, extensions, skins, and editing statistics, and the wiki keeps the history so it can be charted and queried. It is built with MediaWiki and Semantic MediaWiki. I started it as a holiday-break project in 2012; [MediaWiki.org](https://www.mediawiki.org/wiki/WikiApiary) dates it to December 21, 2012. On [Open Loop #7](https://www.thingelstad.com/projects/open-loop/7-turtle-turtle-turtle/) in January 2013 I said I built it “in about three days,” after Semantic Result Formats’ charts showed me I could graph wiki statistics, and that Garrick van Buren came up with the name: the MediaWiki logo is a sunflower, the bots are like bees, and a collection of hives is an apiary.\n\nAfter its first year it was collecting from 9,555 active wikis and had stored more than 1.8 billion statistics samples, with over 3.3 million property values of its own ([One Year for WikiApiary](https://www.thingelstad.com/2013/12/22/one-year-for.html)). I called it the first project I started that grew a real community around it. Karsten Hoffmeyer helped administer it, Mark Hershberger explored ways for wikis to register themselves, Paul DeCoursey rewrote the chart code, and Federico Leva linked MediaWiki.org’s extension pages to their WikiApiary pages, which brought much of its traffic.\n\nWhen I decided I was done with it, others took it on. Mark Hershberger wrote in April 2017 that he had “[inherited the site from Jamie Thingelstad](https://lists.wikimedia.org/hyperkitty/list/wikiapiary@lists.wikimedia.org/message/HRNMPDZBNH5DWCWEFWMKLJAACDQDOAPY/).” That October, Hershberger and his son Basil began [moving it from the old Linode servers to Wikimedia Cloud Services](https://lists.wikimedia.org/hyperkitty/list/wikiapiary@lists.wikimedia.org/message/R7TRLEB73RKAGGA22VE3JAVW3YZOQSMF/). At its size the wiki has struggled with database timeouts: it [came back online](https://lists.wikimedia.org/hyperkitty/list/wikiapiary@lists.wikimedia.org/message/7HK7OPHOID3ZLCYSZTNPXDPG7MHTXGMV/) in March 2023 after an upgrade to MediaWiki 1.39, was [in write-only mode](https://lists.wikimedia.org/hyperkitty/list/wikiapiary@lists.wikimedia.org/message/AMVVOP72ONA2YI7XJ7KV6O3K42BBBES4/) by that September, and MediaWiki.org marked it not operational in February 2025.\n\nIn March 2026 Brian Wolff [got the site serving pages again](https://lists.wikimedia.org/hyperkitty/list/wikiapiary@lists.wikimedia.org/message/W5UMMJTSPGP7ZFT2NPTLCFHVVUXOLIOO/), with the update bots still off, and in May 2026 Hershberger announced from the Wikimedia Hackathon that WikiApiary and its bots [were moving to a Kubernetes cluster](https://lists.wikimedia.org/hyperkitty/list/wikiapiary@lists.wikimedia.org/message/DCSXARUPRRYZO4XKTTJXYIDM3T5AAGIV/) so it could start crawling wikis again.",
      "latest": {
        "date": "2026-09-27T03:40:03.000Z",
        "label": "Latest commit",
        "url": "https://github.com/WikiApiary/wikibees/commit/d4cbb731f99070b2fa242f24c823755dd71a1dab"
      }
    },
    {
      "id": "wikinosh",
      "title": "Wikinosh",
      "summary": "A Semantic MediaWiki site of nutrition facts for more than 20,000 foods, with a Twitter bot and an offline app.",
      "collection": "Historical projects",
      "status": "retired",
      "url": "https://web.archive.org/web/20120630194132/http://wikinosh.com/wiki/Main_Page",
      "started": "2011",
      "page": "https://thingelstad.xyz/things/wikinosh/",
      "markdown": "https://thingelstad.xyz/things/wikinosh.md",
      "topics": [
        "mediawiki",
        "semantic-mediawiki"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://web.archive.org/web/20120630194132/http://wikinosh.com/wiki/Main_Page",
          "role": "archive",
          "observation": null,
          "captures": {
            "kind": "wayback",
            "url": "http://wikinosh.com/wiki/Main_Page",
            "observedAt": "2026-10-18T10:31:42.876Z",
            "firstCapture": "2011-12-05",
            "latestCapture": "2014-01-09",
            "years": [
              {
                "year": "2011",
                "days": 1
              },
              {
                "year": "2012",
                "days": 3
              },
              {
                "year": "2013",
                "days": 1
              },
              {
                "year": "2014",
                "days": 1
              }
            ]
          },
          "views": null
        }
      ],
      "connections": [
        {
          "to": "numbers2words",
          "label": "used",
          "detail": "WikiApiary listed Numbers2Words 0.0.1 among Wikinosh’s extensions, and the main page spelled out its food counts.",
          "source": "https://web.archive.org/web/20130103025340/http://wikiapiary.com/wiki/Wikinosh"
        }
      ],
      "body": "Wikinosh was a wiki of nutrition facts. Each food had a page with a nutrition label (serving size, calories, fat, sodium, carbohydrates, and protein) stored as Semantic MediaWiki properties, and foods were grouped into categories such as Baby Foods, Beverages, and Spices and Herbs. The Internet Archive first captured it in [December 2011](https://web.archive.org/web/20111205190345/http://wikinosh.com/wiki/Main_Page) with 13,753 food records; by [mid-2012](https://web.archive.org/web/20120630194132/http://wikinosh.com/wiki/Main_Page) it listed 21,550. In January 2013 [WikiApiary](https://web.archive.org/web/20130103025340/http://wikiapiary.com/wiki/Wikinosh) counted 20,433 articles and 981,167 property values on it.\n\nIn [Open Loop #2](https://www.thingelstad.com/projects/open-loop/2-what-am-i-editing-anyway/) in June 2012, I described the food wiki I had “kind of in alpha” and how turning on Wikimedia Commons let a page show a photo of a banana just by naming the file. In July 2013 I worked with Yaron Koren to put Wikinosh’s data into Koren’s Miga app for offline, mobile access, and wrote up the Semantic MediaWiki limits I hit exporting more than 20,000 items ([Paging Large Datasets in Semantic MediaWiki](https://www.thingelstad.com/2013/07/30/paging-large-datasets.html)).\n\nThe @Wikinosh Twitter account posted a random food from its 28,000-plus entries every six hours; in November 2013 one of those posts, about trout, drew an IRC-style trout slap from another bot ([Slapped with a Large Trout](https://www.thingelstad.com/2013/11/04/slapped-with-a.html)). The last Internet Archive capture of the wiki is from April 2014, and by November 2014 I listed @Wikinosh among the Twitter accounts I had deleted ([Twitter Spam #NFL](https://www.thingelstad.com/2014/11/28/twitter-spam-nfl.html)).",
      "latest": null
    },
    {
      "id": "wt-builder",
      "title": "WT Builder",
      "summary": "The app I use to write and send the Weekly Thing as a website, an email, and a podcast, and to make Another Thing.",
      "collection": "Publishing",
      "status": "active",
      "url": "https://github.com/jthingelstad/wt-builder",
      "started": "2026-09-20",
      "page": "https://thingelstad.xyz/things/wt-builder/",
      "markdown": "https://thingelstad.xyz/things/wt-builder.md",
      "topics": [
        "open-web",
        "agents",
        "mcp"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/wt-builder",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/wt-builder",
            "url": "https://github.com/jthingelstad/wt-builder",
            "observedAt": "2026-10-23T23:01:15.615Z",
            "repositoryCreatedAt": "2026-07-27T04:23:50.000Z",
            "archived": false,
            "description": "Item-first authoring and publishing application for The Weekly Thing",
            "stars": 2,
            "forks": 0,
            "languages": [
              {
                "name": "TypeScript",
                "bytes": 2254231
              },
              {
                "name": "CSS",
                "bytes": 97752
              },
              {
                "name": "Python",
                "bytes": 52549
              },
              {
                "name": "JavaScript",
                "bytes": 2464
              },
              {
                "name": "HTML",
                "bytes": 301
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-23T23:01:15.615Z",
                "count": 300,
                "complete": false,
                "months": [
                  {
                    "month": "2026-09",
                    "count": 216
                  },
                  {
                    "month": "2026-10",
                    "count": 84
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-22T23:09:33.000Z",
                  "url": "https://github.com/jthingelstad/wt-builder/commit/f06e2e703c0b437780c06d7a47aa90bf3277cee0"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2026/09/20/i-just-published-weekly-thing.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "weekly-thing",
          "label": "publishes",
          "detail": "WT Builder authors issues and sends the website, email, and audio editions of Weekly Thing.",
          "source": "https://www.thingelstad.com/2026/09/20/i-just-published-weekly-thing.html"
        },
        {
          "to": "another-thing",
          "label": "authors",
          "detail": "Another Thing podcast authoring moved into WT Builder in October 2026.",
          "source": "https://github.com/jthingelstad/wt-builder/commit/bea76c7ef4fc79a878072feebf694ce18ad217ea"
        }
      ],
      "body": "WT Builder is the authoring app for the Weekly Thing. I started building it with Claude in July 2026 to replace the Weekly Thing Workshop, the team of Discord agents that had itself taken over in May 2026 from the Shortcuts workflow I had used for nine years. It combines what I write for an issue with links and posts pulled from Pinboard and Micro.blog. The issue stays structured until it is sent, and then WT Builder renders three different editions: the website, the Buttondown email, and the audio edition for the podcast. The [README](https://github.com/jthingelstad/wt-builder) says it is narrow on purpose: “one editor, one current issue, one newsletter.”\n\n[Weekly Thing 350](https://www.thingelstad.com/2026/09/20/i-just-published-weekly-thing.html), sent on September 20, 2026, was the first issue made in it. I had Claude watch me use it that first time and fix problems as they came up. The next day we [reworked the audio edition](https://www.thingelstad.com/2026/09/21/weekly-thing-podcast-improvements.html), with better pauses, section announcements, and pronunciation, plus links in the episode descriptions. In October I [added an MCP server](https://www.thingelstad.com/2026/10/03/my-newest-mcp-experiment-was.html) so Claude could follow along as I wrote and point out typos and grammar.\n\nOn October 11, 2026, WT Builder also [took over the Another Thing podcast](https://github.com/jthingelstad/wt-builder/commit/bea76c7ef4fc79a878072feebf694ce18ad217ea) from the retired Another Thing Builder. The Shortcuts workflow is kept as a fallback.",
      "latest": {
        "date": "2026-10-22T23:09:33.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/wt-builder/commit/f06e2e703c0b437780c06d7a47aa90bf3277cee0"
      }
    },
    {
      "id": "yearly-thing-2025",
      "title": "Yearly Thing 2025",
      "summary": "A book of every link I commented on in the 2025 Weekly Thing, subtitled Agents, Attention, Artifacts, in print and as an eBook.",
      "collection": "Publishing",
      "status": "archived",
      "url": "https://www.thingelstad.com/2026/01/20/i-made-a-book-yearly.html",
      "started": "2025-12",
      "ended": "2026-01-20",
      "page": "https://thingelstad.xyz/things/yearly-thing-2025/",
      "markdown": "https://thingelstad.xyz/things/yearly-thing-2025.md",
      "topics": [
        "archives",
        "reading",
        "poap"
      ],
      "sources": [
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2026/01/20/i-made-a-book-yearly.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.lulu.com/shop/jamie-thingelstad/yearly-thing-2025/paperback/product-84w66ey.html",
          "role": "distribution",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://jthingelstad.gumroad.com/l/yearly-thing-2025",
          "role": "distribution",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "weekly-thing",
          "label": "collects a year of",
          "detail": "All 324 links I commented on across 31 issues of the Weekly Thing in 2025, reorganized into ten topic chapters, in print and eBook form. Proceeds support the Weekly Thing Supporting Membership program.",
          "source": "https://www.thingelstad.com/2026/01/20/i-made-a-book-yearly.html"
        }
      ],
      "body": "For a few years I had wondered about a book version of the Weekly Thing, something like an almanac. I [started it over Christmas 2025](https://www.thingelstad.com/2026/01/19/i-just-finished-up-this.html) and [published it](https://www.thingelstad.com/2026/01/20/i-made-a-book-yearly.html) on January 20, 2026, as _Yearly Thing 2025: Agents, Attention, Artifacts_. It gathers all 324 links I commented on across 31 issues in 2025 into ten topic chapters, from The AI Revolution to Tools, Productivity and Delights, with an Introduction, a Weekly Thing Index, and an Afterword. The eBook keeps every hyperlink. The paperback lists the issue each item came from, with QR codes that lead to the Weekly Thing Index.\n\n“I made the Yearly Thing with Claude Code,” I wrote in [Weekly Thing 339](https://weekly.thingelstad.com/archive/339/), and I laid out the book in Vellum. The [paperback is $30 on Lulu](https://www.lulu.com/shop/jamie-thingelstad/yearly-thing-2025/paperback/product-84w66ey.html), and the first print copies [arrived on January 27](https://www.thingelstad.com/2026/01/27/the-print-copies-of-the.html). The [eBook is $20 on Gumroad](https://jthingelstad.gumroad.com/l/yearly-thing-2025). Anyone who bought it in the first two months got a [Yearly Thing 2025 POAP](https://poap.gallery/drops/223594). All proceeds go to the Weekly Thing Supporting Membership program, and the book’s sales were part of the [$1,164.92 given to the Electronic Frontier Foundation](https://weekly.thingelstad.com/archive/347/) in May 2026.",
      "latest": null
    },
    {
      "id": "your-version-number",
      "title": "Your Version Number",
      "summary": "A website that writes your age as a software version, decades.years.days, with a Work Edition for job tenure.",
      "collection": "Personal tools and making",
      "status": "active",
      "url": "https://yourversionnumber.com/",
      "started": "2026-05-03",
      "page": "https://thingelstad.xyz/things/your-version-number/",
      "markdown": "https://thingelstad.xyz/things/your-version-number.md",
      "topics": [
        "play"
      ],
      "sources": [
        {
          "kind": "github",
          "repository": "jthingelstad/yourversionnumber.com",
          "role": "implementation",
          "observation": {
            "kind": "github",
            "repository": "jthingelstad/yourversionnumber.com",
            "url": "https://github.com/jthingelstad/yourversionnumber.com",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "repositoryCreatedAt": "2026-05-01T05:46:33.000Z",
            "archived": false,
            "description": "Bookmarkable static page that shows a person's age as a v MAJOR.MINOR.PATCH version number.",
            "stars": 2,
            "forks": 0,
            "languages": [
              {
                "name": "CSS",
                "bytes": 369374
              },
              {
                "name": "HTML",
                "bytes": 118016
              },
              {
                "name": "JavaScript",
                "bytes": 101084
              },
              {
                "name": "Shell",
                "bytes": 2055
              }
            ],
            "release": null,
            "activity": [
              {
                "path": null,
                "branch": "main",
                "since": "2026-07-01T00:00:00.000Z",
                "until": "2026-10-20T17:57:36.612Z",
                "count": 65,
                "complete": true,
                "months": [
                  {
                    "month": "2026-07",
                    "count": 1
                  },
                  {
                    "month": "2026-09",
                    "count": 63
                  },
                  {
                    "month": "2026-10",
                    "count": 1
                  }
                ],
                "latestCommit": {
                  "date": "2026-10-07T10:01:36.000Z",
                  "url": "https://github.com/jthingelstad/yourversionnumber.com/commit/da1e3220158bd18126ba29e28d96461838772c53"
                }
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://yourversionnumber.com/",
          "role": "website",
          "sitemap": "https://yourversionnumber.com/sitemap.xml",
          "observation": {
            "kind": "web",
            "url": "https://yourversionnumber.com/",
            "observedAt": "2026-10-17T13:16:08.424Z",
            "sitemap": {
              "url": "https://yourversionnumber.com/sitemap.xml",
              "pages": 11,
              "newestModified": null,
              "months": [],
              "complete": true
            },
            "feed": null
          },
          "captures": null,
          "views": {
            "kind": "tinylytics",
            "url": "https://yourversionnumber.com/",
            "observedAt": "2026-10-20T17:57:36.612Z",
            "since": "2025-10-01",
            "until": "2026-09-30",
            "hits": 4455,
            "months": [
              {
                "month": "2025-10",
                "count": 0
              },
              {
                "month": "2025-11",
                "count": 0
              },
              {
                "month": "2025-12",
                "count": 0
              },
              {
                "month": "2026-01",
                "count": 0
              },
              {
                "month": "2026-02",
                "count": 0
              },
              {
                "month": "2026-03",
                "count": 0
              },
              {
                "month": "2026-04",
                "count": 0
              },
              {
                "month": "2026-05",
                "count": 617
              },
              {
                "month": "2026-06",
                "count": 471
              },
              {
                "month": "2026-07",
                "count": 70
              },
              {
                "month": "2026-08",
                "count": 36
              },
              {
                "month": "2026-09",
                "count": 3261
              }
            ]
          }
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2018/02/24/your-version-number.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        },
        {
          "kind": "website",
          "url": "https://www.thingelstad.com/2026/05/06/your-version-number-the-website.html",
          "role": "reference",
          "observation": null,
          "captures": null,
          "views": null
        }
      ],
      "connections": [
        {
          "to": "release-notes",
          "label": "grew into",
          "detail": "Release Notes uses Your Version Number’s birthday arithmetic in a daily email and personal journal.",
          "source": "https://github.com/jthingelstad/yvn-release-notes",
          "kind": "lineage"
        }
      ],
      "screenshot": {
        "url": "https://thingelstad.xyz/assets/screenshots/yourversionnumber-com-3ee8f4d776.jpg",
        "site": "https://yourversionnumber.com/",
        "date": "2026-10-20"
      },
      "story": {
        "color": "#1763ff",
        "introduction": "A different way to count the days.",
        "engineering": [
          "A framework-free static site calculates its numbers in the browser.",
          "Dates, people, themes, and signed cards travel in the URL, making a view shareable without an account.",
          "The related Release Notes product adds daily email and a personal journal. It has its own server and storage."
        ],
        "stack": [
          "JavaScript",
          "CSS",
          "Static web",
          "URL state"
        ],
        "related": [
          "release-notes",
          "mb"
        ],
        "questions": [
          "How does the version number work?",
          "How is Release Notes related?"
        ],
        "source": "https://github.com/jthingelstad/yourversionnumber.com",
        "started": "The idea began in 2018"
      },
      "body": "In February 2018 I wrote [Your Version Number](https://www.thingelstad.com/2018/02/24/your-version-number.html), building on a habit of my friend David Hussman, who gave his age as a version number. I mapped it to semantic versioning: decades are the major version, years into the decade the minor, and days since the last birthday the patch. I was v4.6.52 that day, and I made a Workflow script to show the versions of people in my address book. David died that August; the [site’s About page](https://yourversionnumber.com/about/) says the arithmetic is his.\n\nAfter a year of seeing my version through a [shortcut on my phone](https://www.thingelstad.com/2025/02/25/jamie.html), I made it a website with Claude Code in May 2026, first shared in [Weekly Thing 346](https://weekly.thingelstad.com/archive/346/) on 2026-05-03 and then in [a launch post](https://www.thingelstad.com/2026/05/06/your-version-number-the-website.html). Add one or more birthdays, pick one of the themes, and the page shows each version, counting up at midnight. Everything is held in the URL, so a view can be bookmarked, set as a home page, or sent to someone, with no account. Cards with a signed note work the same way.\n\nThe Work Edition applies the same idea to a job: completed years of tenure, the quarter of the current tenure year, and weekdays into that quarter, with a build number that counts every business day, and work themes such as a board update. In October 2026 the idea grew into [Release Notes](https://notes.yourversionnumber.com/), a daily email of the day’s version with a journal attached.",
      "latest": {
        "date": "2026-10-07T10:01:36.000Z",
        "label": "Latest commit",
        "url": "https://github.com/jthingelstad/yourversionnumber.com/commit/da1e3220158bd18126ba29e28d96461838772c53"
      }
    }
  ],
  "topics": [
    {
      "id": "agents",
      "title": "Agents",
      "description": "Software that observes, remembers, and acts. A thread from personal tools to community companions.",
      "page": "/topics/agents/",
      "things": [
        "clash-royale-api-agent-reference",
        "elixir",
        "elixir-bot",
        "elixir-mcp-discord",
        "flight-path",
        "mb",
        "oliver",
        "otto",
        "thinglesbot",
        "thingy",
        "weekly-thing-gpt",
        "weekly-thing-workshop",
        "wt-builder"
      ]
    },
    {
      "id": "mediawiki",
      "title": "MediaWiki",
      "description": "Wikis as a place to build: communities, extensions, skins, and structured knowledge.",
      "page": "/topics/mediawiki/",
      "things": [
        "filament",
        "foreground",
        "links-thing",
        "numbers2words",
        "parseurl",
        "planet-kubb",
        "r-w-book-club",
        "road-sign-math",
        "tosredux",
        "wikiapiary",
        "wikinosh"
      ]
    },
    {
      "id": "semantic-mediawiki",
      "title": "Semantic MediaWiki",
      "description": "A wiki can be a database, too. Structured properties make knowledge queryable.",
      "page": "/topics/semantic-mediawiki/",
      "things": [
        "foreground",
        "links-thing",
        "tosredux",
        "wikiapiary",
        "wikinosh"
      ]
    },
    {
      "id": "poap",
      "title": "POAP",
      "description": "Proof of participation, collected memories, and tools that connect tokens to the open web.",
      "page": "/topics/poap/",
      "things": [
        "612-poap-challenge",
        "airport-poap-rally",
        "flight-path",
        "poap-kings",
        "poap2rss",
        "proof-of-a-person",
        "yearly-thing-2025"
      ]
    },
    {
      "id": "crypto",
      "title": "Crypto",
      "description": "Experiments with onchain participation and digital collectibles, through the POAP ecosystem.",
      "page": "/topics/crypto/",
      "things": [
        "612-poap-challenge",
        "airport-poap-rally",
        "poap-kings",
        "poap2rss",
        "proof-of-a-person",
        "nnxyz"
      ]
    },
    {
      "id": "mcp",
      "title": "MCP",
      "description": "Giving agents a useful interface to recorded knowledge and everyday tools.",
      "page": "/topics/mcp/",
      "things": [
        "elixir",
        "elixir-mcp-collector",
        "elixir-mcp-discord",
        "mb",
        "release-notes",
        "thingy",
        "wt-builder"
      ]
    },
    {
      "id": "open-web",
      "title": "The open web",
      "description": "Publishing, feeds, archives, and tools that keep information portable.",
      "page": "/topics/open-web/",
      "things": [
        "another-thing",
        "jamie-thingelstad-blog",
        "link-blog",
        "linking-things",
        "mb",
        "open-loop",
        "poap2rss",
        "things-ive-built",
        "thingy",
        "tosredux",
        "velotweets",
        "weekly-thing",
        "wt-builder"
      ]
    },
    {
      "id": "play",
      "title": "Play",
      "description": "Games, playful arithmetic, and the communities that form around them.",
      "page": "/topics/play/",
      "things": [
        "612-poap-challenge",
        "ask-planet-kubb",
        "clash-royale-api-agent-reference",
        "elixir",
        "elixir-bot",
        "elixir-clan",
        "elixir-mcp-collector",
        "elixir-mcp-discord",
        "elixir-drop",
        "escaping-things",
        "jiggy-thing-puzzles",
        "open-loop",
        "planet-kubb",
        "planet-kubb-score",
        "poap-kings",
        "q2a-number-captcha",
        "release-notes",
        "road-sign-math",
        "your-version-number"
      ]
    },
    {
      "id": "archives",
      "title": "Archives",
      "description": "Preserving content, collections, and the evidence behind them.",
      "page": "/topics/archives/",
      "things": [
        "jamie-thingelstad-blog",
        "link-blog",
        "linking-things",
        "planet-kubb-score",
        "proof-of-a-person",
        "road-sign-math",
        "nnxyz",
        "things-ive-built",
        "thingy",
        "weekly-thing",
        "weekly-thing-gpt",
        "yearly-thing-2025"
      ]
    },
    {
      "id": "reading",
      "title": "Reading",
      "description": "Books, reading, and the ways a family or community shares them.",
      "page": "/topics/reading/",
      "things": [
        "oliver",
        "r-w-book-club",
        "reading-things",
        "yearly-thing-2025"
      ]
    },
    {
      "id": "making",
      "title": "Making",
      "description": "Things made by hand, often as a family. Candles, puzzles, and a carved tree.",
      "page": "/topics/making/",
      "things": [
        "charlie-brown-tree",
        "jiggy-thing-puzzles",
        "stone-steel-people",
        "thingelstad-photography",
        "things-4-good"
      ]
    },
    {
      "id": "automation",
      "title": "Automation",
      "description": "Shortcuts, bots, and scripts that take over the repetitive parts.",
      "page": "/topics/automation/",
      "things": [
        "airport-poap-rally",
        "thinglesbot",
        "velotweets",
        "weekly-thing-workshop"
      ]
    }
  ],
  "history": [
    {
      "id": "linking-things-launch",
      "date": "2026-10-23",
      "kind": "launch",
      "title": "Linking Things goes live",
      "summary": "Every link I have saved since 2005, 16,524 of them, gets a page of its own, joined to the Weekly Thing issues that carried them.",
      "source": "https://links.thingelstad.xyz/",
      "things": [
        "linking-things"
      ]
    },
    {
      "id": "proof-of-a-person-launch",
      "date": "2026-10-17",
      "kind": "launch",
      "title": "Proof of a Person launches",
      "summary": "My POAP time capsule goes live.",
      "source": "https://poap.thingelstad.xyz/about/",
      "things": [
        "proof-of-a-person"
      ]
    },
    {
      "id": "things-static-site",
      "date": "2026-10-17",
      "kind": "milestone",
      "title": "Static site replaces the gallery",
      "summary": "Eleventy site from the registry.",
      "source": "https://github.com/jthingelstad/thingelstad.xyz/pull/6",
      "things": [
        "things-ive-built"
      ]
    },
    {
      "id": "nnxyz-recorded-development",
      "date": "2026-10-13",
      "kind": "development",
      "title": "NNXYZ: recorded development",
      "summary": "A public repository records development of the artwork gallery. This is development evidence, not its launch date.",
      "source": "https://github.com/jthingelstad/nnxyz/commit/826089753b46f7f4d4ae5d994243feb73cb4c299",
      "things": [
        "nnxyz"
      ]
    },
    {
      "id": "release-notes-upcoming",
      "date": "2026-10-13",
      "kind": "milestone",
      "title": "A place for upcoming dates",
      "summary": "Release Notes adds personal upcoming dates and daily email reminders.",
      "source": "https://github.com/jthingelstad/yvn-release-notes/commit/5cc2442ecf8623d074b0d7e639285c08c3f78f89",
      "things": [
        "release-notes"
      ]
    },
    {
      "id": "things-ive-built-recorded-development",
      "date": "2026-10-13",
      "kind": "development",
      "title": "Things I’ve built: recorded development",
      "summary": "A public repository records development of the project index. This is development evidence, not its launch date.",
      "source": "https://github.com/jthingelstad/thingelstad.xyz",
      "things": [
        "things-ive-built"
      ]
    },
    {
      "id": "wt-podcast-authoring",
      "date": "2026-10-11",
      "kind": "milestone",
      "title": "Two publications, one builder",
      "summary": "Another Thing becomes a second product in WT Builder; its earlier authoring application is retired.",
      "source": "https://github.com/jthingelstad/wt-builder/commit/bea76c7ef4fc79a878072feebf694ce18ad217ea",
      "things": [
        "wt-builder",
        "another-thing"
      ]
    },
    {
      "id": "release-notes-launch",
      "date": "2026-10-08",
      "kind": "launch",
      "title": "Release Notes launches",
      "summary": "A daily version-number email you reply to as a journal.",
      "source": "https://www.thingelstad.com/2026/10/08/in-i-wrote-about-your.html",
      "things": [
        "release-notes",
        "your-version-number"
      ]
    },
    {
      "id": "release-notes-recorded-development",
      "date": "2026-10-07",
      "kind": "development",
      "title": "Release Notes: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/yvn-release-notes/commit/76f54b3e4a49c39c94c8e28ba0354f3023e79981",
      "things": [
        "release-notes"
      ]
    },
    {
      "id": "weekly-thing-archive-audio",
      "date": "2026-10-06",
      "kind": "milestone",
      "title": "Every issue in audio",
      "summary": "I restructure the Weekly Thing archive and renders every issue in audio, so the podcast feed reaches back to the first issue.",
      "source": "https://www.thingelstad.com/2026/10/06/weekly-thing-archive-improved.html",
      "things": [
        "weekly-thing"
      ]
    },
    {
      "id": "mb-221",
      "date": "2026-10-05",
      "kind": "milestone",
      "title": "mb 2.2.1",
      "summary": "A versioned release of the Micro.blog command-line tool.",
      "source": "https://github.com/jthingelstad/mb/commit/bacbb98475e1ffc983bbaf9b37acee80b9b83da0",
      "things": [
        "mb"
      ]
    },
    {
      "id": "otto-dots",
      "date": "2026-10-03",
      "kind": "milestone",
      "title": "A new generation of Otto",
      "summary": "I set up Otto on OpenAI’s dots and interviews it for the job of driving Elixir.",
      "source": "https://weekly.thingelstad.com/archive/352/",
      "things": [
        "otto",
        "elixir"
      ]
    },
    {
      "id": "clan-shared-platform",
      "date": "2026-10-02",
      "kind": "milestone",
      "title": "Clan moves into the shared Elixir application",
      "summary": "Clan is mounted in the shared application, carrying its management capabilities into the platform.",
      "source": "https://github.com/jthingelstad/elixir-mcp/commit/5b9621672282ee9dbbddaf6fd3f201367f3b7848",
      "things": [
        "elixir-clan",
        "elixir"
      ]
    },
    {
      "id": "elixir-ladder-launch",
      "date": "2026-10-01",
      "kind": "launch",
      "title": "Ladder opens",
      "summary": "A player's season, read back one mode at a time, at /ladder.",
      "source": "https://elixir.poapkings.com/updates/2026-10-01-ladder-your-season-read-back",
      "things": [
        "elixir"
      ]
    },
    {
      "id": "open-loop-feed",
      "date": "2026-10",
      "kind": "milestone",
      "title": "Open Loop returns as a podcast feed",
      "summary": "All nine episodes are republished as a podcast feed with speaker-labelled transcripts, cleaned up with AI in October 2026.",
      "source": "https://www.thingelstad.com/projects/open-loop/",
      "things": [
        "open-loop"
      ]
    },
    {
      "id": "elixir-clan-moves-to-clan",
      "date": "2026-09-28",
      "kind": "milestone",
      "title": "Elixir Clan moves to /clan",
      "summary": "Clan left clan.poapkings.com for elixir.poapkings.com/clan.",
      "source": "https://elixir.poapkings.com/updates/2026-09-28-elixir-clan-lives-at-clan",
      "things": [
        "elixir-clan",
        "elixir"
      ]
    },
    {
      "id": "elixir-bot-retired",
      "date": "2026-09-26",
      "kind": "retirement",
      "title": "Elixir Bot retires. Its ideas keep going.",
      "summary": "The retirement record names the projects that grew out of the original clan agent, including Elixir MCP, Collector, Discord, and Clan.",
      "source": "https://github.com/jthingelstad/elixir-bot/commit/555d743ceb72a7779a6e47fab4912ae5d024e70e",
      "things": [
        "elixir-bot",
        "elixir",
        "elixir-mcp-discord",
        "elixir-mcp-collector",
        "elixir-clan"
      ]
    },
    {
      "id": "elixir-collector-signed-releases",
      "date": "2026-09-26",
      "kind": "milestone",
      "title": "Signed collector releases",
      "summary": "From v3.0.0 every collector release is signed end to end.",
      "source": "https://www.thingelstad.com/2026/09/26/i-used-some-of-my.html",
      "things": [
        "elixir-mcp-collector"
      ]
    },
    {
      "id": "wt-builder-first-issue",
      "date": "2026-09-20",
      "kind": "launch",
      "title": "WT350 sent from WT Builder",
      "summary": "First issue fully published from WT Builder.",
      "source": "https://www.thingelstad.com/2026/09/20/i-just-published-weekly-thing.html",
      "things": [
        "wt-builder",
        "weekly-thing"
      ]
    },
    {
      "id": "yvn-redesign",
      "date": "2026-09-19",
      "kind": "milestone",
      "title": "Your Version Number redesigned",
      "summary": "Your Version Number gets a new design, a theme browser and a card creator.",
      "source": "https://weekly.thingelstad.com/archive/350/",
      "things": [
        "your-version-number"
      ]
    },
    {
      "id": "elixir-mcp-discord-first-release",
      "date": "2026-09-15",
      "kind": "launch",
      "title": "Elixir Discord v0.3.0",
      "summary": "First tagged release of the Discord agent that runs entirely on Elixir MCP.",
      "source": "https://github.com/jthingelstad/elixir-mcp-discord/releases/tag/v0.3.0",
      "things": [
        "elixir-mcp-discord"
      ]
    },
    {
      "id": "elixir-mcp-discord-recorded-development",
      "date": "2026-09-07",
      "kind": "development",
      "title": "Elixir Discord: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/elixir-mcp-discord/commit/1479a4601af90658fc3cd57cbdb269884a54f49d",
      "things": [
        "elixir-mcp-discord"
      ]
    },
    {
      "id": "collector-split",
      "date": "2026-09-04",
      "kind": "milestone",
      "title": "Collectors become their own thing",
      "summary": "The operator worker is split from Elixir MCP into its own repository.",
      "source": "https://github.com/jthingelstad/elixir-mcp-collector/commit/47ac57c5b28c4aa33bdc7c8daa3f8ef085c57f2f",
      "things": [
        "elixir-mcp-collector",
        "elixir"
      ]
    },
    {
      "id": "elixir-mcp-launch",
      "date": "2026-09-03",
      "kind": "launch",
      "title": "Elixir MCP launches",
      "summary": "Recording, the MCP server, clan war data and the collector fleet went live.",
      "source": "https://elixir.poapkings.com/updates/2026-09-03-elixir-mcp-launches",
      "things": [
        "elixir"
      ]
    },
    {
      "id": "elixir-recorded-development",
      "date": "2026-09-03",
      "kind": "development",
      "title": "Elixir: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/elixir-mcp/commit/e2e126a9dc1b150db9ee64213fc48224f8c09ba2",
      "things": [
        "elixir"
      ]
    },
    {
      "id": "otto-openclaw-2",
      "date": "2026-09-03",
      "kind": "milestone",
      "title": "Otto moves to OpenClaw 2",
      "summary": "Otto is upgraded to OpenClaw 2 after a rocky start on OpenClaw.",
      "source": "https://www.thingelstad.com/2026/09/03/otto-upgraded-to-openclaw-i.html",
      "things": [
        "otto"
      ]
    },
    {
      "id": "thingy-complete",
      "date": "2026-09-03",
      "kind": "milestone",
      "title": "Thingy called complete",
      "summary": "I call Thingy complete after adding photos and shared conversations.",
      "source": "https://www.thingelstad.com/2026/09/03/im-ready-to-call-thingy.html",
      "things": [
        "thingy"
      ]
    },
    {
      "id": "wt-builder-recorded-development",
      "date": "2026-07-26",
      "kind": "development",
      "title": "WT Builder: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/wt-builder/commit/918b6fea5b489773738ac64a89765864574b0ee3",
      "things": [
        "wt-builder"
      ]
    },
    {
      "id": "flight-path-retired",
      "date": "2026-07-24",
      "kind": "retirement",
      "title": "Flight Path retired",
      "summary": "A week before POAP’s shutdown, I replace the globe with a sunset notice and archived the repository.",
      "source": "https://github.com/jthingelstad/flightpath.poaprally.com/commit/fea8eac46878b7ab9afa418c48193b4139d8a06b",
      "things": [
        "flight-path"
      ]
    },
    {
      "id": "poap2rss-retired",
      "date": "2026-07-24",
      "kind": "retirement",
      "title": "POAP2RSS retires with the POAP API",
      "summary": "POAP was winding down its platform on July 31, 2026. POAP2RSS read live claim activity through the POAP API, so a week earlier I retired it and archived the repository.",
      "source": "https://github.com/jthingelstad/POAP2RSS/commit/22798583f396bd59771b0e4ee320d20c51d18f20",
      "things": [
        "poap2rss"
      ]
    },
    {
      "id": "elixir-product-team",
      "date": "2026-06-22",
      "kind": "milestone",
      "title": "An agentic product team for Elixir",
      "summary": "I set up six automations, from Data Analyst to Product Manager, to drive Elixir’s development on their own.",
      "source": "https://www.thingelstad.com/2026/06/22/elixirs-agentic-product-team.html",
      "things": [
        "elixir-bot"
      ]
    },
    {
      "id": "elixir-drop-launch",
      "date": "2026-06-13",
      "kind": "launch",
      "title": "Elixir Drop opens with Practice",
      "summary": "The card-cost game launched with Practice, Surge, Higher / Lower and Survival.",
      "source": "https://drop.poapkings.com/updates/",
      "things": [
        "elixir-drop"
      ]
    },
    {
      "id": "elixir-drop-recorded-development",
      "date": "2026-06-13",
      "kind": "development",
      "title": "Elixir Drop: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/drop.poapkings.com/commit/4476c93f92f7f997582e3726d0d72eaba6516c25",
      "things": [
        "elixir-drop"
      ]
    },
    {
      "id": "thingy-evolved",
      "date": "2026-06-07",
      "kind": "milestone",
      "title": "Thingy Evolved",
      "summary": "Thingy moves to its own site and learns my blog and Another Thing as well as the Weekly Thing.",
      "source": "https://www.thingelstad.com/2026/06/07/thingy-evolved.html",
      "things": [
        "thingy"
      ]
    },
    {
      "id": "things-4-good-recorded-development",
      "date": "2026-06-03",
      "kind": "development",
      "title": "Things 4 Good: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/things4good.xyz/commit/cec22f314718ff19c8b99247cb09ea43c87eea77",
      "things": [
        "things-4-good"
      ]
    },
    {
      "id": "oliver-recorded-development",
      "date": "2026-05-27",
      "kind": "development",
      "title": "Oliver: recorded development begins",
      "summary": "The book club repository becomes a monorepo of website, corpus and Oliver. This is development evidence, not a launch date.",
      "source": "https://github.com/jthingelstad/rwbookclub.com/commit/bdb72521adb776b3a9897f1ae3c0f0f41c62ccfb",
      "things": [
        "oliver"
      ]
    },
    {
      "id": "workshop-first-issue",
      "date": "2026-05-23",
      "kind": "milestone",
      "title": "WT349 made in the Workshop",
      "summary": "The first Weekly Thing made start to finish in the Weekly Thing Workshop.",
      "source": "https://weekly.thingelstad.com/archive/349/",
      "things": [
        "weekly-thing-workshop",
        "weekly-thing"
      ]
    },
    {
      "id": "thingy-recorded-development",
      "date": "2026-05-14",
      "kind": "development",
      "title": "Thingy: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/thingy.thingelstad.com/commit/8167c8fdb7a4f9edd30cd4d8087fb34982e6c5ba",
      "things": [
        "thingy"
      ]
    },
    {
      "id": "workshop-launch",
      "date": "2026-05-12",
      "kind": "launch",
      "title": "The Weekly Thing Team",
      "summary": "I introduce four Discord agents, Eddy, Linky, Marky and Patty, to help edit, research, promote and fund the Weekly Thing.",
      "source": "https://www.thingelstad.com/2026/05/12/the-weekly-thing-team.html",
      "things": [
        "weekly-thing-workshop"
      ]
    },
    {
      "id": "weekly-thing-site-thingy",
      "date": "2026-05-07",
      "kind": "launch",
      "title": "New Weekly Thing site and Thingy",
      "summary": "I build a new Weekly Thing website that puts all nine years and 345 issues of the archive on show, with Thingy as its librarian.",
      "source": "https://www.thingelstad.com/2026/05/07/massive-weekly-thing-website-build.html",
      "things": [
        "weekly-thing",
        "thingy"
      ]
    },
    {
      "id": "yvn-launch",
      "date": "2026-05-03",
      "kind": "launch",
      "title": "Your Version Number site",
      "summary": "First shared in WT346.",
      "source": "https://weekly.thingelstad.com/archive/346/",
      "things": [
        "your-version-number"
      ]
    },
    {
      "id": "elixir-minnebar-20",
      "date": "2026-05-02",
      "kind": "milestone",
      "title": "Elixir at Minnebar 20",
      "summary": "Tyler and I present \"Elixir - Creating an AI Agent for our Clash Royale Clan.\"",
      "source": "https://sessions.minnestar.org/sessions/2094",
      "things": [
        "elixir-bot",
        "poap-kings"
      ]
    },
    {
      "id": "your-version-number-recorded-development",
      "date": "2026-05-01",
      "kind": "development",
      "title": "Your Version Number: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/yourversionnumber.com/commit/b2f68c8bc83cdde695b925d0aa3d37b796dd944a",
      "things": [
        "your-version-number"
      ]
    },
    {
      "id": "poap-kings-redesign",
      "date": "2026-04-26",
      "kind": "milestone",
      "title": "POAP KINGS redesigned",
      "summary": "Claude Design gives the clan website its current look.",
      "source": "https://weekly.thingelstad.com/archive/345/",
      "things": [
        "poap-kings"
      ]
    },
    {
      "id": "another-thing-recorded-development",
      "date": "2026-04-09",
      "kind": "development",
      "title": "Another Thing: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/another.thingelstad.com/commit/0ef36d2472cfa45e39e1dc831a8f5553fb005822",
      "things": [
        "another-thing"
      ]
    },
    {
      "id": "r-w-book-club-recorded-development",
      "date": "2026-04-09",
      "kind": "development",
      "title": "R/W Book Club: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/rwbookclub.com/commit/25852563166cc04650a451f4bb3bdf27c83c4424",
      "things": [
        "r-w-book-club"
      ]
    },
    {
      "id": "librarian-recorded-development",
      "date": "2026-04-07",
      "kind": "development",
      "title": "Librarian: recorded development begins",
      "summary": "The earliest commit in Librarian, the archive API behind Thingy, is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/librarian-thing/commit/95fed22aba9a066a74df067d2072ae0ca6cf2690",
      "things": [
        "thingy"
      ]
    },
    {
      "id": "weekly-thing-recorded-development",
      "date": "2026-04-07",
      "kind": "development",
      "title": "Weekly Thing: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/weekly.thingelstad.com/commit/e5074139a6e6fb37a0c83713e8808878e6af3205",
      "things": [
        "weekly-thing"
      ]
    },
    {
      "id": "elixir-data-refactor",
      "date": "2026-03-07",
      "kind": "milestone",
      "title": "Making Elixir smarter",
      "summary": "Codex redesigns Elixir’s data model and tools, tested against 50 questions I wrote with Claude.",
      "source": "https://www.thingelstad.com/2026/03/07/making-elixir-smarter.html",
      "things": [
        "elixir-bot"
      ]
    },
    {
      "id": "mb-v1",
      "date": "2026-03-03",
      "kind": "launch",
      "title": "mb 1.0.0",
      "summary": "First versioned release of mb.",
      "source": "https://github.com/jthingelstad/mb/releases",
      "things": [
        "mb"
      ]
    },
    {
      "id": "mb-recorded-development",
      "date": "2026-03-01",
      "kind": "development",
      "title": "mb: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/mb/commit/2b20c09c6350db018860bc026f88b839da296346",
      "things": [
        "mb"
      ]
    },
    {
      "id": "otto-blog",
      "date": "2026-03-01",
      "kind": "milestone",
      "title": "Otto starts a blog",
      "summary": "Otto’s first post on its own Micro.blog blog.",
      "source": "https://ottoai.thingelstad.com/2026/03/01/hello-im-otto.html",
      "things": [
        "otto"
      ]
    },
    {
      "id": "elixir-bot-recorded-development",
      "date": "2026-02-27",
      "kind": "development",
      "title": "Elixir Bot: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/elixir-bot/commit/161b7f4e0c98d2acb84bb770981a12ba256bebc8",
      "things": [
        "elixir-bot"
      ]
    },
    {
      "id": "flight-path-built",
      "date": "2026-02-25",
      "kind": "launch",
      "title": "Flight Path takes off",
      "summary": "I build Flight Path, extending the POAP Airport Rally, entirely on an iPhone with Claude Code.",
      "source": "https://www.thingelstad.com/2026/02/25/it-is-bonkers-to-me.html",
      "things": [
        "flight-path"
      ]
    },
    {
      "id": "escaping-things-launch",
      "date": "2026-02-23",
      "kind": "launch",
      "title": "Escaping Things site announced",
      "summary": "The family escape room log gets its own site.",
      "source": "https://www.thingelstad.com/2026/02/23/ive-been-working-on-this.html",
      "things": [
        "escaping-things"
      ]
    },
    {
      "id": "otto-named",
      "date": "2026-02-19",
      "kind": "launch",
      "title": "Otto is named",
      "summary": "I name my agent Otto Thing.",
      "source": "https://www.thingelstad.com/2026/02/19/ive-been-preparing-to-setup.html",
      "things": [
        "otto"
      ]
    },
    {
      "id": "escaping-things-recorded-development",
      "date": "2026-02-11",
      "kind": "development",
      "title": "Escaping Things: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/escape.thingelstad.com/commit/1cab836b57c32990f4f2a7b815d1bb3c6a0cfe4c",
      "things": [
        "escaping-things"
      ]
    },
    {
      "id": "poap-kings-recorded-development",
      "date": "2026-02-04",
      "kind": "development",
      "title": "POAP KINGS: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/poapkings.com/commit/0716a099e57528016fa3a2cd8d86d6dd18e1e313",
      "things": [
        "poap-kings"
      ]
    },
    {
      "id": "yearly-thing-2025-published",
      "date": "2026-01-20",
      "kind": "launch",
      "title": "Yearly Thing 2025 is published",
      "summary": "A year of the Weekly Thing becomes a book, in print from Lulu and as an eBook, organized into ten topic chapters.",
      "source": "https://www.thingelstad.com/2026/01/20/i-made-a-book-yearly.html",
      "things": [
        "yearly-thing-2025",
        "weekly-thing"
      ]
    },
    {
      "id": "airport-poap-rally-launch",
      "date": "2025-12-26",
      "kind": "launch",
      "title": "Following the Airport POAP Rally",
      "summary": "I set up a Micro.blog site that posts every claim at the rally’s 100 airports.",
      "source": "https://www.thingelstad.com/2025/12/26/airport-poap-rally-website.html",
      "things": [
        "airport-poap-rally"
      ]
    },
    {
      "id": "weekly-thing-forum-closed",
      "date": "2025-11-17",
      "kind": "milestone",
      "title": "Weekly Thing Forum closes",
      "summary": "Ponder shuts down, and with it the Weekly Thing Forum.",
      "source": "https://www.thingelstad.com/2025/11/17/farewell-weekly-thing-forum-and.html",
      "things": [
        "weekly-thing"
      ]
    },
    {
      "id": "things-4-good-five-years",
      "date": "2025-11-16",
      "kind": "milestone",
      "title": "Five years of candle fundraisers",
      "summary": "Five years of candle sales have raised $31,787 for non-profits.",
      "source": "https://www.thingelstad.com/2025/11/16/things-good-five-year-impact.html",
      "things": [
        "things-4-good"
      ]
    },
    {
      "id": "another-thing-first-episode",
      "date": "2025-10-05",
      "kind": "launch",
      "title": "Another Thing episode 1",
      "summary": "“How do you start a podcast?” is published.",
      "source": "https://another.thingelstad.com/2025/10/05/how-do-you-start-a.html",
      "things": [
        "another-thing"
      ]
    },
    {
      "id": "612-poap-challenge-close",
      "date": "2025-09-01",
      "kind": "archive",
      "title": "The 612 POAP Challenge closes",
      "summary": "As Labor Day ends, the challenge comes to a close and the site keeps the record of every claim.",
      "source": "https://612.poapchallenge.com/",
      "things": [
        "612-poap-challenge"
      ]
    },
    {
      "id": "poap2rss-612-feeds",
      "date": "2025-07-06",
      "kind": "milestone",
      "title": "612 challenge claims via POAP2RSS",
      "summary": "The challenge site shows claims through POAP2RSS feeds.",
      "source": "https://www.thingelstad.com/2025/07/06/with-the-help-of-poaprss.html",
      "things": [
        "poap2rss",
        "612-poap-challenge"
      ]
    },
    {
      "id": "poap2rss-launch",
      "date": "2025-07-04",
      "kind": "launch",
      "title": "POAP meets RSS",
      "summary": "POAP2RSS is declared officially launched: POAP activity becomes available in feeds.",
      "source": "https://www.thingelstad.com/2025/07/04/i-decided-to-declare-poaprss.html",
      "things": [
        "poap2rss"
      ]
    },
    {
      "id": "612-poap-challenge-launch",
      "date": "2025-05-31",
      "kind": "launch",
      "title": "The 612 POAP Challenge begins",
      "summary": "A summer scavenger hunt around Minneapolis pairs location POAPs with the 612 Series, open until Labor Day.",
      "source": "https://www.thingelstad.com/2025/05/31/poap-challenge-collect-them-now.html",
      "things": [
        "612-poap-challenge"
      ]
    },
    {
      "id": "charlie-brown-tree-poap",
      "date": "2025-05-25",
      "kind": "milestone",
      "title": "First location POAP",
      "summary": "The tree becomes my first location-based POAP.",
      "source": "https://www.thingelstad.com/2025/05/25/i-created-my-very-first.html",
      "things": [
        "charlie-brown-tree",
        "612-poap-challenge"
      ]
    },
    {
      "id": "weekly-thing-gpt-launch",
      "date": "2025-02-25",
      "kind": "launch",
      "title": "A GPT of the Weekly Thing",
      "summary": "I make a custom ChatGPT loaded with all 310 Weekly Thing issues.",
      "source": "https://www.thingelstad.com/2025/02/25/weekly-thing-gpt.html",
      "things": [
        "weekly-thing-gpt"
      ]
    },
    {
      "id": "weekly-thing-300",
      "date": "2024-11-09",
      "kind": "milestone",
      "title": "Weekly Thing 300",
      "summary": "The 300th issue, seven and a half years after the first.",
      "source": "https://weekly.thingelstad.com/archive/300/",
      "things": [
        "weekly-thing"
      ]
    },
    {
      "id": "rsm-reboot",
      "date": "2023-10-21",
      "kind": "launch",
      "title": "Road Sign Math reboots as a blog",
      "summary": "The second reboot returns it to a simple blog of my signs at roadsignmath.xyz.",
      "source": "https://www.thingelstad.com/2023/10/21/road-sign-math.html",
      "things": [
        "road-sign-math"
      ]
    },
    {
      "id": "weekly-thing-shortcuts-rebuild",
      "date": "2023-09-24",
      "kind": "milestone",
      "title": "Weekly Thing automation rebuilt",
      "summary": "I rebuild the Weekly Thing workflow as native Shortcuts with Data Jar caching and an automated photo section.",
      "source": "https://www.thingelstad.com/2023/09/24/how-i-build.html",
      "things": [
        "weekly-thing"
      ]
    },
    {
      "id": "weekly-thing-forum",
      "date": "2023-09-22",
      "kind": "milestone",
      "title": "Weekly Thing Forum opens",
      "summary": "I open a forum for readers on Ponder.",
      "source": "https://www.thingelstad.com/2023/09/22/introducing-weekly-thing.html",
      "things": [
        "weekly-thing"
      ]
    },
    {
      "id": "weekly-thing-subreddit",
      "date": "2022-10-30",
      "kind": "milestone",
      "title": "r/WeeklyThing",
      "summary": "I create a subreddit for discussing issues.",
      "source": "https://www.thingelstad.com/2022/10/30/i-decided-to.html",
      "things": [
        "weekly-thing"
      ]
    },
    {
      "id": "foreground-to-wikimedia",
      "date": "2022-07-29",
      "kind": "archive",
      "title": "Foreground moves to Wikimedia",
      "summary": "I agree to archive my Foreground repository so Wikimedia volunteers can maintain the skin.",
      "source": "https://github.com/jthingelstad/foreground/issues/398",
      "things": [
        "foreground"
      ]
    },
    {
      "id": "things-4-good-endaoment",
      "date": "2021-11-28",
      "kind": "milestone",
      "title": "Things 4 Good on Endaoment",
      "summary": "I set up a crypto donor-advised fund named Things 4 Good and makes its first grant, to the Internet Archive.",
      "source": "https://www.thingelstad.com/2021/11/28/things-good-on.html",
      "things": [
        "things-4-good"
      ]
    },
    {
      "id": "things-4-good-first-sale",
      "date": "2021-11-06",
      "kind": "launch",
      "title": "First Things 4 Good fundraiser",
      "summary": "More than 100 people come to buy candles, Jiggy Thing Puzzle",
      "source": "https://www.thingelstad.com/2021/11/09/things-good-fall.html",
      "things": [
        "things-4-good"
      ]
    },
    {
      "id": "reading-things-fall",
      "date": "2021-10-31",
      "kind": "milestone",
      "title": "Fall Reading Things",
      "summary": "The fall 2021 issue of Reading Things is published.",
      "source": "https://www.thingelstad.com/2021/10/31/we-just-published.html",
      "things": [
        "reading-things"
      ]
    },
    {
      "id": "weekly-thing-200",
      "date": "2021-10-23",
      "kind": "milestone",
      "title": "Weekly Thing 200",
      "summary": "The 200th issue.",
      "source": "https://weekly.thingelstad.com/archive/200/",
      "things": [
        "weekly-thing"
      ]
    },
    {
      "id": "jiggy-thing-001-ordered",
      "date": "2021-10-06",
      "kind": "launch",
      "title": "First Jiggy Thing Puzzle",
      "summary": "The family finished the box for Celebration City and ordered 50 puzzles.",
      "source": "https://www.thingelstad.com/2021/10/06/our-family-created.html",
      "things": [
        "jiggy-thing-puzzles",
        "things-4-good"
      ]
    },
    {
      "id": "reading-things-first-100",
      "date": "2021-07-25",
      "kind": "milestone",
      "title": "Reading Things reaches 100",
      "summary": "The family marks 100 subscribers with a POAP, and sends the summer issue.",
      "source": "https://www.thingelstad.com/2021/07/25/poap-at-reading-things-first.html",
      "things": [
        "reading-things"
      ]
    },
    {
      "id": "reading-things-launch",
      "date": "2021-05-08",
      "kind": "launch",
      "title": "First Reading Things issue",
      "summary": "The family’s quarterly books newsletter sends its first issue.",
      "source": "https://www.thingelstad.com/2021/05/08/we-just-published.html",
      "things": [
        "reading-things"
      ]
    },
    {
      "id": "rsm-phoenix",
      "date": "2021-03-13",
      "kind": "milestone",
      "title": "A breath of new life",
      "summary": "A sign Tammy found near Phoenix revives Road Sign Math at roadsignmath.thingelstad.com.",
      "source": "https://weekly.thingelstad.com/archive/177/",
      "things": [
        "road-sign-math"
      ]
    },
    {
      "id": "link-blog-hyvor",
      "date": "2020-12-19",
      "kind": "milestone",
      "title": "Comments and reactions",
      "summary": "The Link Blog switches to Hyvor Talk for comments and reactions.",
      "source": "https://www.thingelstad.com/2020/12/19/commenting-and-reactions.html",
      "things": [
        "link-blog"
      ]
    },
    {
      "id": "link-blog-relaunch",
      "date": "2020-11-08",
      "kind": "milestone",
      "title": "Link Blog relaunched",
      "summary": "Relaunched with comments and per-site index pages.",
      "source": "https://www.thingelstad.com/2020/11/08/i-got-my.html",
      "things": [
        "link-blog"
      ]
    },
    {
      "id": "charlie-brown-tree-carving",
      "date": "2020-05-24",
      "kind": "development",
      "title": "Charlie Brown Tree carving",
      "summary": "Carving in progress at Magic Pines.",
      "source": "https://www.thingelstad.com/2020/05/24/little-snippet-of.html",
      "things": [
        "charlie-brown-tree"
      ]
    },
    {
      "id": "blog-microblog-import",
      "date": "2020-05-02",
      "kind": "milestone",
      "title": "The blog moves to Micro.blog",
      "summary": "I import over 1,600 posts and 800MB of images from Jekyll into Micro.blog.",
      "source": "https://www.thingelstad.com/2020/05/02/importing-jekyll-site.html",
      "things": [
        "jamie-thingelstad-blog"
      ]
    },
    {
      "id": "weekly-thing-buttondown",
      "date": "2020-01-18",
      "kind": "milestone",
      "title": "Weekly Thing moves to Buttondown",
      "summary": "Issue 131 is the first sent from Buttondown.",
      "source": "https://weekly.thingelstad.com/archive/131/",
      "things": [
        "weekly-thing"
      ]
    },
    {
      "id": "weekly-thing-100",
      "date": "2019-04-06",
      "kind": "milestone",
      "title": "Weekly Thing 100",
      "summary": "The 100th issue.",
      "source": "https://weekly.thingelstad.com/archive/100/",
      "things": [
        "weekly-thing"
      ]
    },
    {
      "id": "link-blog-blot",
      "date": "2019-01-01",
      "kind": "milestone",
      "title": "Link Thing moves to Blot",
      "summary": "I move a “good enough” version of the link blog to Blot.",
      "source": "https://www.thingelstad.com/2019/01/01/well-ive-now.html",
      "things": [
        "link-blog"
      ]
    },
    {
      "id": "yvn-idea",
      "date": "2018-02-24",
      "kind": "development",
      "title": "Your Version Number post",
      "summary": "Age as decades.years.days.",
      "source": "https://www.thingelstad.com/2018/02/24/your-version-number.html",
      "things": [
        "your-version-number"
      ]
    },
    {
      "id": "weekly-thing-mailchimp",
      "date": "2017-10-14",
      "kind": "milestone",
      "title": "Weekly Thing moves to MailChimp",
      "summary": "Issue 23 is the first sent from MailChimp, after 22 on TinyLetter.",
      "source": "https://weekly.thingelstad.com/archive/23/",
      "things": [
        "weekly-thing"
      ]
    },
    {
      "id": "link-thing-search",
      "date": "2017-09-30",
      "kind": "milestone",
      "title": "Searching 9,000 links",
      "summary": "I add Lunr.js search to Link Thing.",
      "source": "https://weekly.thingelstad.com/archive/21/",
      "things": [
        "link-blog"
      ]
    },
    {
      "id": "link-thing-launch",
      "date": "2017-09-09",
      "kind": "launch",
      "title": "Link Thing goes live",
      "summary": "Pinboard links become a Jekyll link blog.",
      "source": "https://weekly.thingelstad.com/archive/18/",
      "things": [
        "link-blog"
      ]
    },
    {
      "id": "rw-jekyll",
      "date": "2017-09-01",
      "kind": "development",
      "title": "Book club Jekyll site",
      "summary": "I build rwbook.club on Jekyll, “rough but functional.”",
      "source": "https://www.thingelstad.com/2017/09/01/rough-but-functional.html",
      "things": [
        "r-w-book-club"
      ]
    },
    {
      "id": "open-loop-restored-2017",
      "date": "2017-06-10",
      "kind": "archive",
      "title": "Open Loop archive back online",
      "summary": "Archive republished.",
      "source": "https://www.thingelstad.com/2017/06/10/put-the-archive.html",
      "things": [
        "open-loop"
      ]
    },
    {
      "id": "weekly-thing-one",
      "date": "2017-05-13",
      "kind": "launch",
      "title": "The first Weekly Thing",
      "summary": "A newsletter experiment begins with issue one.",
      "source": "https://weekly.thingelstad.com/archive/1/",
      "things": [
        "weekly-thing"
      ]
    },
    {
      "id": "wikiapiary-handoff",
      "date": "2017-04-17",
      "kind": "milestone",
      "title": "WikiApiary in new hands",
      "summary": "Mark Hershberger writes that he inherited WikiApiary from me and is keeping it running.",
      "source": "https://lists.wikimedia.org/hyperkitty/list/wikiapiary@lists.wikimedia.org/message/HRNMPDZBNH5DWCWEFWMKLJAACDQDOAPY/",
      "things": [
        "wikiapiary"
      ]
    },
    {
      "id": "technical-downsizing",
      "date": "2016-05-03",
      "kind": "retirement",
      "title": "Technical downsizing",
      "summary": "I decide to stop running my own servers and to archive or hand off my hobby sites.",
      "source": "https://www.thingelstad.com/2016/05/03/technical-downsizing.html",
      "things": [
        "road-sign-math"
      ]
    },
    {
      "id": "blog-squarespace",
      "date": "2016-04-20",
      "kind": "milestone",
      "title": "The blog moves to Squarespace",
      "summary": "I move my blog from WordPress to Squarespace.",
      "source": "https://www.thingelstad.com/2016/04/20/moved-my-blog.html",
      "things": [
        "jamie-thingelstad-blog"
      ]
    },
    {
      "id": "q2a-number-captcha-launch",
      "date": "2014-11-16",
      "kind": "launch",
      "title": "A number captcha for Question2Answer",
      "summary": "I release a spelled-out-number captcha to stop spam sign-ups on Ask Planet Kubb.",
      "source": "https://www.thingelstad.com/2014/11/16/questionanswer-number-captcha.html",
      "things": [
        "q2a-number-captcha",
        "ask-planet-kubb"
      ]
    },
    {
      "id": "pk-notation-bnf",
      "date": "2014-08-27",
      "kind": "development",
      "title": "Notation BNF grammar",
      "summary": "I write a BNF grammar for the notation.",
      "source": "https://www.thingelstad.com/2014/08/27/what-did-i.html",
      "things": [
        "planet-kubb-score"
      ]
    },
    {
      "id": "foreground-1-0",
      "date": "2014-07-03",
      "kind": "milestone",
      "title": "Foreground 1.0",
      "summary": "I tag the first release of the Foreground skin.",
      "source": "https://github.com/jthingelstad/foreground/releases/tag/1.0",
      "things": [
        "foreground"
      ]
    },
    {
      "id": "wikiapiary-year-one",
      "date": "2013-12-22",
      "kind": "milestone",
      "title": "One year of WikiApiary",
      "summary": "A first-year retrospective describes the growing wiki community and credits Foreground as the site’s skin.",
      "source": "https://www.thingelstad.com/2013/12/22/one-year-for.html",
      "things": [
        "wikiapiary",
        "foreground"
      ]
    },
    {
      "id": "pk-scoresheet-2013",
      "date": "2013-10-31",
      "kind": "milestone",
      "title": "A scoresheet with on-pitch stats",
      "summary": "A new Planet Kubb scoresheet records statistics during play.",
      "source": "https://www.thingelstad.com/2013/10/31/proud-of-this.html",
      "things": [
        "planet-kubb-score"
      ]
    },
    {
      "id": "wikinosh-semantic",
      "date": "2013-07-30",
      "kind": "milestone",
      "title": "Making wiki data portable",
      "summary": "Work on paging Semantic MediaWiki datasets supports exporting Wikinosh nutrition data for offline mobile access.",
      "source": "https://www.thingelstad.com/2013/07/30/paging-large-datasets.html",
      "things": [
        "wikinosh"
      ]
    },
    {
      "id": "parseurl-launch",
      "date": "2013-07-15",
      "kind": "launch",
      "title": "A super simple URL parser for MediaWiki",
      "summary": "I publish the ParseURL extension.",
      "source": "https://www.thingelstad.com/2013/07/15/made-a-super.html",
      "things": [
        "parseurl"
      ]
    },
    {
      "id": "pk-club-championship-2013",
      "date": "2013-07",
      "kind": "milestone",
      "title": "Planet Kubb Club Championship",
      "summary": "Run at 2013 US Nationals.",
      "source": "https://www.thingelstad.com/2013/07/21/pictures-from-us.html",
      "things": [
        "planet-kubb"
      ]
    },
    {
      "id": "wikiapiary-origin",
      "date": "2012-12-21",
      "kind": "launch",
      "title": "A wiki to track other wikis",
      "summary": "WikiApiary begins as a holiday-break project, built with MediaWiki and Semantic MediaWiki in about three days.",
      "source": "https://www.mediawiki.org/wiki/WikiApiary",
      "things": [
        "wikiapiary"
      ]
    },
    {
      "id": "planet-kubb-archive",
      "date": "2012-07-23",
      "kind": "archive",
      "title": "Kubb, notation, and a community on the web",
      "summary": "Open Loop’s Kubb Fever episode links Planet Kubb Notation and Scoresheet. This dates the public record, not the original launch.",
      "source": "https://www.thingelstad.com/projects/open-loop/3-kubb-fever/",
      "things": [
        "planet-kubb",
        "planet-kubb-score"
      ]
    },
    {
      "id": "links-thing-launch",
      "date": "2012-07-01",
      "kind": "milestone",
      "title": "Bookmarks in a wiki",
      "summary": "I write up links_thing, a Semantic MediaWiki bookmarking wiki holding nearly 4,000 imported links.",
      "source": "https://www.thingelstad.com/2012/07/01/bookmarking-with-semantic.html",
      "things": [
        "links-thing"
      ]
    },
    {
      "id": "photography-relaunch",
      "date": "2012-07-01",
      "kind": "milestone",
      "title": "Thingelstad Photography relaunched",
      "summary": "I move my photography site to WordPress to post an image a week.",
      "source": "https://www.thingelstad.com/2012/07/01/website-for-my.html",
      "things": [
        "thingelstad-photography"
      ]
    },
    {
      "id": "open-loop-first",
      "date": "2012-06-01",
      "kind": "launch",
      "title": "Open Loop: the first episode",
      "summary": "The published episode archive begins with “But No Shoes.”",
      "source": "https://www.thingelstad.com/projects/open-loop/0-but-no-shoes/",
      "things": [
        "open-loop"
      ]
    },
    {
      "id": "farm-shutdowns-2012",
      "date": "2012-02-08",
      "kind": "retirement",
      "title": "Shutting down some websites",
      "summary": "I shut down two Road Sign Math spin-offs, Road Sign Wordplay and Road Sign Bingo, along with the MediaWiki Cookbook and a sandbox wiki.",
      "source": "https://www.thingelstad.com/2012/02/08/shutting-down-some.html",
      "things": [
        "road-sign-math"
      ]
    },
    {
      "id": "thinglesbot-retired",
      "date": "2012-02-08",
      "kind": "retirement",
      "title": "Farewell to thinglesBot",
      "summary": "I shut down thinglesBot along with several other sites.",
      "source": "https://www.thingelstad.com/2012/02/08/shutting-down-some.html",
      "things": [
        "thinglesbot"
      ]
    },
    {
      "id": "planet-kubb-launch",
      "date": "2012",
      "kind": "launch",
      "title": "Planet Kubb launches",
      "summary": "I buy planetkubb.com and set it up as a rawdog aggregator of Kubb videos and club blogs.",
      "source": "https://www.thingelstad.com/projects/open-loop/1-big-fuzzy-dead-cat/",
      "things": [
        "planet-kubb",
        "ask-planet-kubb"
      ]
    },
    {
      "id": "numbers2words-recorded-development",
      "date": "2011-07-20",
      "kind": "development",
      "title": "Numbers2Words: recorded development begins",
      "summary": "The earliest commit in this repository is a development record; the project or idea may predate it.",
      "source": "https://github.com/jthingelstad/Number2Words/commit/3e486a7424544d3d9dad9915f236b615a7c8fd86",
      "things": [
        "numbers2words"
      ]
    },
    {
      "id": "rsm-wiki",
      "date": "2011",
      "kind": "milestone",
      "title": "Road Sign Math reboots as a wiki",
      "summary": "The first reboot moves the game from a blog to a wiki so players can maintain their own signs.",
      "source": "https://www.thingelstad.com/2023/10/21/road-sign-math.html",
      "things": [
        "road-sign-math"
      ]
    },
    {
      "id": "rw-rename",
      "date": "2011",
      "kind": "milestone",
      "title": "Creative Computer Book Club becomes R/W",
      "summary": "The club’s MediaWiki site, the Creative Computer Book Club, becomes the R/W Book Club wiki.",
      "source": "https://web.archive.org/web/20120106214958/http://rwbookclub.com/wiki/Main_Page",
      "things": [
        "r-w-book-club"
      ]
    },
    {
      "id": "stone-steel-people-published",
      "date": "2010-12-05",
      "kind": "archive",
      "title": "First photo book",
      "summary": "I publish Stone/Steel/People through Blurb.",
      "source": "https://www.thingelstad.com/2010/12/05/first-photo-book.html",
      "things": [
        "stone-steel-people"
      ]
    },
    {
      "id": "velotweets-launch",
      "date": "2009-05-10",
      "kind": "launch",
      "title": "VeloTweets, Pulse of the Peloton",
      "summary": "Luke Francl announces the pro cycling Twitter site he and I built.",
      "source": "https://web.archive.org/web/20090514074605/http://railspikes.com/2009/5/10/announcing-velotweets",
      "things": [
        "velotweets"
      ]
    },
    {
      "id": "thinglesbot-returns",
      "date": "2009-03-24",
      "kind": "milestone",
      "title": "The robot returns",
      "summary": "I rewire Thinglesbot in Ruby with Twitter4R after it went quiet.",
      "source": "https://www.thingelstad.com/2009/03/24/my-robot-returns.html",
      "things": [
        "thinglesbot"
      ]
    },
    {
      "id": "rsm-wordpress",
      "date": "2007-08-17",
      "kind": "milestone",
      "title": "Road Sign Math moves to WordPress",
      "summary": "The site moves from .Text to WordPress.",
      "source": "https://www.thingelstad.com/2007/08/17/t212185032.html",
      "things": [
        "road-sign-math"
      ]
    },
    {
      "id": "thinglesbot-launch",
      "date": "2007-03-11",
      "kind": "launch",
      "title": "Introducing my robot",
      "summary": "I give my home-monitoring scripts a voice as @thinglesBot on Twitter.",
      "source": "https://www.thingelstad.com/2007/03/11/introducing-my-robot.html",
      "things": [
        "thinglesbot"
      ]
    },
    {
      "id": "rw-jamie-joins",
      "date": "2007",
      "kind": "milestone",
      "title": "I join the R/W Book Club",
      "summary": "John Riedl invites me.",
      "source": "https://www.thingelstad.com/2013/07/21/goodbye-to-my.html",
      "things": [
        "r-w-book-club"
      ]
    },
    {
      "id": "road-sign-math-launch",
      "date": "2005-02-13",
      "kind": "launch",
      "title": "Road Sign Math begins",
      "summary": "A road sign with a mathematical relationship becomes a game for finding more. Five years later I marked February 13, 2005 as the day the site launched.",
      "source": "https://www.thingelstad.com/2010/02/13/010000.html",
      "things": [
        "road-sign-math"
      ]
    },
    {
      "id": "blog-start",
      "date": "2004-06-02",
      "kind": "launch",
      "title": "The blog begins",
      "summary": "My first blog post marks the official start of my blog.",
      "source": "https://www.thingelstad.com/2025/01/12/if-i-was-born-and.html",
      "things": [
        "jamie-thingelstad-blog"
      ]
    }
  ]
}