<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>OpenGeocoding blog</title>
    <link>https://opengeocoding.com/blog</link>
    <description>Notes on building OpenGeocoding.</description>
    <language>en</language>
    <atom:link href="https://opengeocoding.com/blog/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>Billing every API request exactly once, without a database on the request path</title>
      <link>https://opengeocoding.com/blog/billing-without-a-database-on-the-request-path</link>
      <guid isPermaLink="true">https://opengeocoding.com/blog/billing-without-a-database-on-the-request-path</guid>
      <pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Theo Mathieu</dc:creator>
      <description>How the OpenGeocoding API, running as several replicas on Kubernetes, checks keys, rate limits and credits from memory, writes usage to Postgres every 5 seconds without double billing, and what that trade-off costs.</description>
    </item>
    <item>
      <title>Building a geocoder whose world index rebuilds in minutes</title>
      <link>https://opengeocoding.com/blog/building-opengeocoding</link>
      <guid isPermaLink="true">https://opengeocoding.com/blog/building-opengeocoding</guid>
      <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
      <dc:creator>Theo Mathieu</dc:creator>
      <description>Why I moved from Nominatim to a Rust geocoder on Tantivy and open data, how I measure it against official address registries, and where it is still weak.</description>
    </item>
  </channel>
</rss>
