<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tools | Timon Weitkamp | No Worries, Just Maps</title>
    <link>https://timonweitkamp.me/tags/tools/</link>
      <atom:link href="https://timonweitkamp.me/tags/tools/index.xml" rel="self" type="application/rss+xml" />
    <description>Tools</description>
    <generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sat, 07 Nov 2026 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://timonweitkamp.me/media/icon_hu11869890484969746898.png</url>
      <title>Tools</title>
      <link>https://timonweitkamp.me/tags/tools/</link>
    </image>
    
    <item>
      <title>Field Time Series Viewer</title>
      <link>https://timonweitkamp.me/project/field-time-series-viewer/</link>
      <pubDate>Sat, 07 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://timonweitkamp.me/project/field-time-series-viewer/</guid>
      <description>&lt;p&gt;When a field suddenly looks different in our weekly analysis, the first question is always: is this real? It can be a cloud the mask missed, actual crop change, or a field that is bare because it was just harvested. To answer that you need to look at the images themselves, and most of my colleagues don&amp;rsquo;t open QGIS.&lt;/p&gt;
&lt;p&gt;So I built a web app that shows the downloaded GeoTIFFs of every field we monitor. You pick a field and scroll through all its images in order.&lt;/p&gt;
&lt;p&gt;It is a Streamlit app in Python, with GDAL to read the rasters, packaged as a Docker image so it runs the same on a server as on a colleague&amp;rsquo;s laptop. Syncthing (open source, a bit like OneDrive) syncs the TIFFs from the laptops where they are processed to a server in the EU, and the viewer is hosted on that same server.&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;a href=&#34;https://timonweitkamp.me/project/smartcane-web-apps/&#34;&gt;SmartCane web apps&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>SmartCane web apps</title>
      <link>https://timonweitkamp.me/project/smartcane-web-apps/</link>
      <pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://timonweitkamp.me/project/smartcane-web-apps/</guid>
      <description>&lt;p&gt;The SmartCane pipeline needs clean inputs. If the field boundaries or the field data are wrong, the analysis is wrong too.&lt;/p&gt;
&lt;p&gt;Before, checking this meant opening QGIS or a script. Now there is a small set of browser tools for it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a data validation tool for the crop-analysis inputs&lt;/li&gt;
&lt;li&gt;a GeoJSON viewer and an ODK viewer, to look at field boundaries and field data&lt;/li&gt;
&lt;li&gt;a polygon analysis editor to check and fix field polygons&lt;/li&gt;
&lt;li&gt;a sugar mill locator: a map of mills in East and Southern Africa, coloured by country and sized by production, where you can draw in new mills and export them as CSV&lt;/li&gt;
&lt;li&gt;a viewer for our technical documentation, and a small ID generator&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each tool is a self-contained HTML and JavaScript page without a backend, so they are easy to host and to change. They are mainly for colleagues who are not technical, so they can check and prepare data themselves instead of waiting for me.&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;a href=&#34;https://timonweitkamp.me/project/field-time-series-viewer/&#34;&gt;Field Time Series Viewer&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <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>
    
    <item>
      <title>Smaller builds</title>
      <link>https://timonweitkamp.me/project/smaller-builds/</link>
      <pubDate>Tue, 03 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://timonweitkamp.me/project/smaller-builds/</guid>
      <description>&lt;p&gt;&lt;strong&gt;SmartCane documentation.&lt;/strong&gt; A documentation site for the SmartCane pipeline, built with Docusaurus. Every script gets a page in plain terms: what goes in and what comes out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Resilience handbook.&lt;/strong&gt; I drafted a handbook for Resilience, built with open-source book tooling.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This website.&lt;/strong&gt; Built with Hugo and the Hugo Blox theme, managed from R with blogdown, with an &lt;a href=&#34;https://timonweitkamp.me/experience-map/&#34;&gt;experience map&lt;/a&gt; in Mapbox. It started as a place to share code and notes on mapping irrigation, and I still use it to try things out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Related:&lt;/strong&gt; &lt;a href=&#34;https://timonweitkamp.me/project/opportunity-radar/&#34;&gt;Opportunity Radar&lt;/a&gt; · &lt;a href=&#34;https://timonweitkamp.me/project/smartcane-web-apps/&#34;&gt;SmartCane web apps&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
