
  <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
      <title>John Seong</title>
      <link>https://johnseong.ca/blog</link>
      <description>Tech Lead | AI Systems</description>
      <language>en-us</language>
      <managingEditor>sandole97@gmail.com (John Seong)</managingEditor>
      <webMaster>sandole97@gmail.com (John Seong)</webMaster>
      <lastBuildDate>Sun, 01 Nov 2026 00:00:00 GMT</lastBuildDate>
      <atom:link href="https://johnseong.ca/tags/chrome-extension/feed.xml" rel="self" type="application/rss+xml"/>
      
  <item>
    <guid>https://johnseong.ca/blog/CatanAssistant</guid>
    <title>Reverse Engineering Colonist.io to Build a Catan Decision Engine</title>
    <link>https://johnseong.ca/blog/CatanAssistant</link>
    <description>One evening building a real-time Settlers of Catan assistant - a FastAPI search engine on top of catanatron, a Manifest V3 extension that taps the Colonist.io WebSocket, and the MessagePack protocol I had to decode to connect the two. What worked on the first live game, what broke, and why I am not training a neural net yet.</description>
    <pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate>
    <author>sandole97@gmail.com (John Seong)</author>
    <category>ai</category><category>game-ai</category><category>chrome-extension</category><category>reverse-engineering</category><category>python</category>
  </item>

    </channel>
  </rss>
