<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>AI | Timon Weitkamp | No Worries, Just Maps</title>
    <link>https://timonweitkamp.me/tags/ai/</link>
      <atom:link href="https://timonweitkamp.me/tags/ai/index.xml" rel="self" type="application/rss+xml" />
    <description>AI</description>
    <generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Thu, 05 Nov 2026 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://timonweitkamp.me/media/icon_hu11869890484969746898.png</url>
      <title>AI</title>
      <link>https://timonweitkamp.me/tags/ai/</link>
    </image>
    
    <item>
      <title>Opportunity Radar</title>
      <link>https://timonweitkamp.me/project/opportunity-radar/</link>
      <pubDate>Thu, 05 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://timonweitkamp.me/project/opportunity-radar/</guid>
      <description>&lt;p&gt;Before Opportunity Radar there was a scraper that ran on my laptop. It worked, but only for one person. After a while it had collected 561 leads, and every single one was still marked &amp;ldquo;New&amp;rdquo;, because there was no way for two people to work on the same list.&lt;/p&gt;
&lt;p&gt;Opportunity Radar is the team version. It collects opportunities from several sources and scores each one against the fit criteria of each practice in the company, first with rules and then with an LLM that reads the description. The team then triages the list, assigns leads to people, discusses them and records the Go/No-Go decision. The reasons behind past decisions are fed back into the scoring, so it gets better at filtering out what we never bid on.&lt;/p&gt;
&lt;p&gt;The frontend is React with TypeScript, the backend FastAPI with PostgreSQL, and everything runs in Docker on an EU server. To be honest about how it was built: I relied heavily on Claude to write it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&#34;https://timonweitkamp.me/project/smaller-builds/&#34;&gt;Smaller builds&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Talking to your field data on Signal</title>
      <link>https://timonweitkamp.me/project/signal-chatbot/</link>
      <pubDate>Wed, 04 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://timonweitkamp.me/project/signal-chatbot/</guid>
      <description>&lt;p&gt;SmartCane sends out a weekly report. That works, but a farmer&amp;rsquo;s question doesn&amp;rsquo;t always fit the week. Why is my field flagged? Should I harvest now? What does CI mean?&lt;/p&gt;
&lt;p&gt;So I&amp;rsquo;m building a chatbot on Signal that lets farmers &amp;ldquo;talk to their data&amp;rdquo;, on demand. When a message comes in, the bot checks who sent it, loads the latest indicators for that farmer&amp;rsquo;s fields, adds the weather, and looks up background from a small knowledge base. That knowledge base has about fourteen short documents on growth phases, diseases, pests, irrigation, nutrition, weeds and harvesting, plus optional agronomy documents from SASRI. All of that goes to a language model that runs on our own machine, and the answer goes back on Signal in the language the farmer wrote in. If the model is down, the farmer gets a short fallback message instead of silence.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&#34;https://timonweitkamp.me/project/smartcane-bv/&#34;&gt;SmartCane&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
