<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Signal House</title>
    <link>https://signalhouse.nz/blog/</link>
    <description>Damon Zhang on building and running production software.</description>
    <language>en-nz</language>
    <item>
      <title>NearBuild: turning one council PDF into a searchable map</title>
      <link>https://signalhouse.nz/blog/nearbuild-council-pdf-to-map/</link>
      <guid>https://signalhouse.nz/blog/nearbuild-council-pdf-to-map/</guid>
      <pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate>
      <description>Auckland Council only publishes resource consent applications as a 300-page PDF. This is how I parse it every hour, keep the data honest, and put it on a map by address.</description>
    </item>
    <item>
      <title>Moving our static sites to CloudFront and private S3, then fixing a $39-a-day request bill</title>
      <link>https://signalhouse.nz/blog/static-sites-cloudfront-s3-migration/</link>
      <guid>https://signalhouse.nz/blog/static-sites-cloudfront-s3-migration/</guid>
      <pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate>
      <description>One CloudFormation stack per site, byte-level verification, a DNS cutover you can roll back, and the caching mistake behind 94% of our CloudFront requests.</description>
    </item>
    <item>
      <title>Kivoza: small file tools that say where your file goes</title>
      <link>https://signalhouse.nz/blog/kivoza-browser-tools-boundaries/</link>
      <guid>https://signalhouse.nz/blog/kivoza-browser-tools-boundaries/</guid>
      <pubDate>Sun, 20 Sep 2026 00:00:00 GMT</pubDate>
      <description>Seven small sites from one repo: image, OCR and PDF tools that run fully in the browser, and a Markdown converter that uploads only four formats, with consent, to a locked-down container.</description>
    </item>
    <item>
      <title>Rebuilding a tax app: golden assertions first, then 1,070 numbers against the old system</title>
      <link>https://signalhouse.nz/blog/paytaxnz-rebuild-golden-assertions/</link>
      <guid>https://signalhouse.nz/blog/paytaxnz-rebuild-golden-assertions/</guid>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <description>How I rebuilt PayTaxNZ from Laravel to a TypeScript monorepo without trusting myself: a pure tax engine, 186 assertions written before code, and a field-by-field reconciliation with zero unexplained differences.</description>
    </item>
    <item>
      <title>Money code in a church app: integer cents, advisory locks and idempotency keys</title>
      <link>https://signalhouse.nz/blog/aparima-money-code/</link>
      <guid>https://signalhouse.nz/blog/aparima-money-code/</guid>
      <pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate>
      <description>Giving, refunds, recurring plans and venue deposits look like simple forms. Under them are five rules that stop double charges, lost refunds and leaked data.</description>
    </item>
  </channel>
</rss>
