<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>jpzip blog (en)</title>
    <link>https://jpzip.nadai.dev/en/blog/</link>
    <atom:link href="https://jpzip.nadai.dev/en/blog/feed.xml" rel="self" type="application/rss+xml" />
    <description>Notes on jpzip — Cloudflare Pages design, MCP servers, AI-assisted development, and indie OSS.</description>
    <language>en</language>
    <lastBuildDate>Mon, 25 May 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>Migrating from ken_all / jpostcode to jpzip-ruby</title>
      <link>https://jpzip.nadai.dev/en/blog/0011-migrate-from-jpostal-ruby/</link>
      <guid isPermaLink="true">https://jpzip.nadai.dev/en/blog/0011-migrate-from-jpostal-ruby/</guid>
      <pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate>
      <description>Migrate off ken_all (KEN_ALL.csv in a database) and jpostcode (submodule-bundled data) to jpzip-ruby's CDN lookup: field mapping, no monthly imports, and the one feature you lose.</description>
      <category>Migration</category>
      <category>Ruby</category>
      <category>Rails</category>
      <category>CDN</category>
    </item>
    <item>
      <title>jpzip-js on Cloudflare Workers: Cache API, KV, or DO</title>
      <link>https://jpzip.nadai.dev/en/blog/0010-cloudflare-workers-edge/</link>
      <guid isPermaLink="true">https://jpzip.nadai.dev/en/blog/0010-cloudflare-workers-edge/</guid>
      <pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate>
      <description>Run jpzip-js inside a Cloudflare Worker for Japanese postcode lookups, and choose between Cache API, Workers KV, and Durable Objects by cost and measured p50/p99 latency. The short answer is usually &quot;none of them.&quot;</description>
      <category>Use Case</category>
      <category>Cloudflare</category>
      <category>Workers</category>
      <category>TypeScript</category>
      <category>Edge</category>
    </item>
    <item>
      <title>Migrating from zipcoda to jpzip-js: live API to static CDN</title>
      <link>https://jpzip.nadai.dev/en/blog/0009-migrate-from-zipcoda-js/</link>
      <guid isPermaLink="true">https://jpzip.nadai.dev/en/blog/0009-migrate-from-zipcoda-js/</guid>
      <pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate>
      <description>Move from the zipcoda.net runtime postcode API to jpzip-js's static CDN model — response field mapping, JSONP and CSP cleanup, dropping rate-limit workarounds, and measured latency and cache wins.</description>
      <category>Migration</category>
      <category>JavaScript</category>
      <category>TypeScript</category>
      <category>CDN</category>
    </item>
    <item>
      <title>Address autofill with Next.js Server Actions (App Router)</title>
      <link>https://jpzip.nadai.dev/en/blog/0008-nextjs-server-actions/</link>
      <guid isPermaLink="true">https://jpzip.nadai.dev/en/blog/0008-nextjs-server-actions/</guid>
      <pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate>
      <description>Build a postcode-to-address autofill form with Next.js 16 App Router Server Actions and jpzip-js — progressive enhancement that works without JavaScript, the Edge runtime, and server-side caching via the use cache directive.</description>
      <category>Framework Integration</category>
      <category>Next.js</category>
      <category>TypeScript</category>
      <category>Forms</category>
      <category>Edge</category>
    </item>
    <item>
      <title>Build a Postal-Code Address Autofill Form with Rails, Hotwire, and jpzip-ruby</title>
      <link>https://jpzip.nadai.dev/en/blog/0007-rails-hotwire-form/</link>
      <guid isPermaLink="true">https://jpzip.nadai.dev/en/blog/0007-rails-hotwire-form/</guid>
      <pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate>
      <description>Autofill a Japanese address from a postal code in Rails with Turbo Frame or a Stimulus fetch controller, plus an L2 cache that stops Puma workers from re-fetching the same CDN bucket.</description>
      <category>Framework Integration</category>
      <category>Ruby</category>
      <category>Rails</category>
      <category>Hotwire</category>
      <category>Forms</category>
    </item>
    <item>
      <title>Address auto-fill in React Hook Form with Zod and jpzip</title>
      <link>https://jpzip.nadai.dev/en/blog/0006-react-hook-form-zod/</link>
      <guid isPermaLink="true">https://jpzip.nadai.dev/en/blog/0006-react-hook-form-zod/</guid>
      <pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate>
      <description>How to wire jpzip-js into a React Hook Form with a Zod schema. Covers postcode validation, onBlur lookup, setValue auto-fill, double-fetch suppression, and aria-busy for accessibility.</description>
      <category>Framework Integration</category>
      <category>React</category>
      <category>TypeScript</category>
      <category>Forms</category>
      <category>Zod</category>
    </item>
    <item>
      <title>Migrating from Yubinbango to jpzip-js: drop JSONP, gain types</title>
      <link>https://jpzip.nadai.dev/en/blog/0005-migrate-from-yubinbango-js/</link>
      <guid isPermaLink="true">https://jpzip.nadai.dev/en/blog/0005-migrate-from-yubinbango-js/</guid>
      <pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate>
      <description>A step-by-step migration from JSONP-based Yubinbango to jpzip-js. Keep your microformats h-adr forms intact, switch to fetch-only data loading, and tighten your CSP.</description>
      <category>Migration</category>
      <category>JavaScript</category>
      <category>TypeScript</category>
      <category>Forms</category>
    </item>
    <item>
      <title>How Claude Code shipped 8 language SDKs in 6 hours</title>
      <link>https://jpzip.nadai.dev/en/blog/0004-claude-code-8-sdks-6-hours/</link>
      <guid isPermaLink="true">https://jpzip.nadai.dev/en/blog/0004-claude-code-8-sdks-6-hours/</guid>
      <pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate>
      <description>How I shipped Go / TypeScript / Python / Rust / Ruby / Dart / PHP / Swift SDKs for jpzip in 6 hours using Claude Code — spec-first design, Go as the reference implementation, translation-not-transpilation prompting, and per-language gotchas.</description>
      <category>Claude Code</category>
      <category>AI</category>
      <category>SDK</category>
      <category>multi-language</category>
      <category>OSS</category>
    </item>
    <item>
      <title>How I serve 120,677 Japanese postcodes from Cloudflare Pages (no Worker, no R2)</title>
      <link>https://jpzip.nadai.dev/en/blog/0002-cloudflare-pages-static-zipcode-delivery/</link>
      <guid isPermaLink="true">https://jpzip.nadai.dev/en/blog/0002-cloudflare-pages-static-zipcode-delivery/</guid>
      <pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate>
      <description>The data-delivery design behind jpzip — shard layout, ETL pipeline, and why I deliberately use no Worker, no R2, no KV.</description>
      <category>Cloudflare</category>
      <category>CDN</category>
      <category>ETL</category>
      <category>Go</category>
    </item>
    <item>
      <title>I wrote an MCP server so Claude can natively look up Japanese postcodes</title>
      <link>https://jpzip.nadai.dev/en/blog/0003-mcp-server-japanese-postcode/</link>
      <guid isPermaLink="true">https://jpzip.nadai.dev/en/blog/0003-mcp-server-japanese-postcode/</guid>
      <pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate>
      <description>A tiny stateless MCP server that lets Claude resolve Japanese postcodes — tool design, cache lifetimes, cross-script (kanji/katakana/romaji) search.</description>
      <category>MCP</category>
      <category>Claude</category>
      <category>TypeScript</category>
      <category>AI</category>
    </item>
    <item>
      <title>I built a postcode-data micro-SaaS on Cloudflare Pages' free tier (and it costs me $0)</title>
      <link>https://jpzip.nadai.dev/en/blog/0001-cloudflare-pages-micro-saas/</link>
      <guid isPermaLink="true">https://jpzip.nadai.dev/en/blog/0001-cloudflare-pages-micro-saas/</guid>
      <pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate>
      <description>The story behind jpzip, a one-person side project, and why it stays free forever — not by luck, but by design. 120,677 Japanese postcodes served from Cloudflare Pages alone.</description>
      <category>Cloudflare</category>
      <category>OSS</category>
      <category>indie</category>
      <category>micro-SaaS</category>
    </item>
  </channel>
</rss>
