<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Epona&apos;s Blog</title><description>A developer blog about Rails, Phoenix, and engineering management</description><link>https://epona.me</link><language>en</language><item><title>From Astro to EmDash: A Pitfall Diary (Part 3)</title><link>https://epona.me/en/blog/from-astro-to-emdash-part3</link><guid isPermaLink="true">https://epona.me/en/blog/from-astro-to-emdash-part3</guid><description>After migrating from Astro to EmDash, the backend was left with two publication date fields, and scheduled publishing never worked. This post covers how to remove the redundant publication date, configure a Cron Trigger in wrangler.jsonc, and add a scheduled handler so scheduled publishing actually runs.</description><pubDate>Mon, 14 Sep 2026 11:35:00 GMT</pubDate></item><item><title>From Astro to EmDash: A Tale of Pitfalls (Part 2)</title><link>https://epona.me/en/blog/from-astro-to-emdash-part2</link><guid isPermaLink="true">https://epona.me/en/blog/from-astro-to-emdash-part2</guid><description>Continuing from the previous post: after binding a custom domain to EmDash, I nearly locked myself out of the admin panel I&apos;d just set up. Because WebAuthn is strictly bound to the domain, my existing Passkey stopped working, and I hadn&apos;t configured any email service yet. This post documents the nail-biting escape: how I used Claude Code to set up Cloudflare Email Sending as a lifeline, tracked down the broken magic links caused by a missing siteUrl, and finally resolved the Passkey binding issue on the custom domain.</description><pubDate>Tue, 08 Sep 2026 23:13:00 GMT</pubDate></item><item><title>From Astro to EmDash: A Migration Story (Part 1)</title><link>https://epona.me/en/blog/from-astro-to-emdash-part1</link><guid isPermaLink="true">https://epona.me/en/blog/from-astro-to-emdash-part1</guid><description>I&apos;ve been blogging on and off for years, trying WordPress, Jekyll, and Ghost before finally settling on Astro. Then Cloudflare announced EmDash, their WordPress competitor, and after watching it for a few months, I decided to make the move. Now, in 2026, I&apos;ve handed the entire migration over to Claude Code—drop in an official docs link, and the AI analyzes the project, installs the Connector, and even sets up D1 and R2 for me. This post documents the smooth initial deployment, plus two critical gotchas you need to know at the end.</description><pubDate>Mon, 07 Sep 2026 17:50:00 GMT</pubDate></item><item><title>When Claude Code Can&apos;t Find Git (But Git Works Fine in Terminal)</title><link>https://epona.me/en/blog/claude-code-cant-find-git</link><guid isPermaLink="true">https://epona.me/en/blog/claude-code-cant-find-git</guid><description>Claude Code&apos;s desktop app kept insisting I install Git, even though git ran perfectly in my terminal. The real culprit wasn&apos;t Xcode Command Line Tools or a broken PATH — it was a dead Homebrew symlink from 2022 sitting first in my resolution order. Here&apos;s the full debugging trail, including all the dead ends.</description><pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate></item><item><title>The Psychology of Money: Wealth Is What You Don&apos;t See</title><link>https://epona.me/en/blog/money-psychology-reflection</link><guid isPermaLink="true">https://epona.me/en/blog/money-psychology-reflection</guid><description>I recently read The Psychology of Money. Here are a few points that really resonated with me, and how they connect to some decisions I made this year.</description><pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Why I Returned to Basecamp</title><link>https://epona.me/en/blog/why-i-returned-to-basecamp</link><guid isPermaLink="true">https://epona.me/en/blog/why-i-returned-to-basecamp</guid><description>I tried Basecamp before and quit — not because it was bad, but because I couldn&apos;t keep up with the writing it demanded. Then the agent CLI arrived, and something clicked.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate></item><item><title>A Road Trip Through Kansai, Sleeping in My Car</title><link>https://epona.me/en/blog/kansai-road-trip-notes</link><guid isPermaLink="true">https://epona.me/en/blog/kansai-road-trip-notes</guid><description>At the end of April, I set out from Tokyo with a head full of worries, passing through Shizuoka, Nagoya, Kyoto&apos;s Arashiyama, the Nintendo Museum, Nara&apos;s mountain roads, Wakayama... Five days later, not a single worry remained.</description><pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Building Lexio with Two Claudes: A Workflow That Actually Works</title><link>https://epona.me/en/blog/building-with-two-claudes</link><guid isPermaLink="true">https://epona.me/en/blog/building-with-two-claudes</guid><description>How I use Claude Projects for architecture decisions and Claude Code for implementation—keeping thinking and coding deliberately separate, with Lexio as a real-world example.</description><pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Three Months as an Engineering Manager: Learning to Manage in Unfamiliar Territory</title><link>https://epona.me/en/blog/three-months-as-engineering-manager</link><guid isPermaLink="true">https://epona.me/en/blog/three-months-as-engineering-manager</guid><description>Three months into the promotion, I took on two projects I knew nothing about. No fancy methodologies—just showing up to standups, digging through Jira, and asking people. On making priority calls amid uncertainty, and why I&apos;ve stopped stressing about &quot;reading more management books.&quot;</description><pubDate>Sat, 14 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Inside Fizzy&apos;s Authentication Architecture: A Three-Tier Approach to Multi-Tenant SaaS</title><link>https://epona.me/en/blog/fizzy-authentication-architecture-three-tier-multi-tenant</link><guid isPermaLink="true">https://epona.me/en/blog/fizzy-authentication-architecture-three-tier-multi-tenant</guid><description>How 37signals&apos; Fizzy structures multi-tenant authentication with an Identity → User → Account model, enabling users to belong to multiple organizations cleanly.</description><pubDate>Fri, 09 Jan 2026 00:00:00 GMT</pubDate></item><item><title>2025 Year in Review: On Choices and Letting Go</title><link>https://epona.me/en/blog/2025-yearly-review</link><guid isPermaLink="true">https://epona.me/en/blog/2025-yearly-review</guid><description>In 2025, I bought a house in Japan, switched tech stacks, got promoted to Engineering Manager, and adjusted my writing rhythm. This year was full of decisions, and every decision meant giving something up. This is my year-end review and my thoughts on 2026.</description><pubDate>Fri, 26 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Raycast setups that make me more productive</title><link>https://epona.me/en/blog/raycast-setups-that-makes-me-more-productive</link><guid isPermaLink="true">https://epona.me/en/blog/raycast-setups-that-makes-me-more-productive</guid><description>A few simple Raycast setups that have stuck in my daily workflow: smart text snippets, hyper key app toggles, quick terminal shortcuts, and clipboard history.</description><pubDate>Tue, 18 Nov 2025 00:00:00 GMT</pubDate></item><item><title>A Developer&apos;s Ramblings on the Road to Becoming a Manager</title><link>https://epona.me/en/blog/from-developer-to-manager</link><guid isPermaLink="true">https://epona.me/en/blog/from-developer-to-manager</guid><description>&quot;Want to give being a Manager a shot next half?&quot; The CTO&apos;s casual remark after lunch opened a new chapter in my career. I was criticized the last time I was a Team Leader—can I do better this time? This post captures the preparations, worries, and expectations on the eve of the transition.</description><pubDate>Sat, 08 Nov 2025 00:00:00 GMT</pubDate></item><item><title>My First Rails Deployment Journey with Kamal</title><link>https://epona.me/en/blog/my-first-rails-deployment-journey-with-kamal</link><guid isPermaLink="true">https://epona.me/en/blog/my-first-rails-deployment-journey-with-kamal</guid><description>Notes on deploying a Rails app with Kamal for the first time: proxy conflicts with Caddy, Cloudflare forward_headers, and debugging Docker volume mounting errors.</description><pubDate>Wed, 22 Oct 2025 00:00:00 GMT</pubDate></item><item><title>Haste Makes Waste</title><link>https://epona.me/en/blog/think-before-code</link><guid isPermaLink="true">https://epona.me/en/blog/think-before-code</guid><description>While refactoring a project that I migrated from Phoenix to Rails, I realized that a lot of messy code isn&apos;t poorly written—it&apos;s poorly thought out. Instead of writing and revising as you go, it&apos;s better to think one step ahead before you start. As that famous line from JoJo goes: the detour is the shortest shortcut.</description><pubDate>Fri, 10 Oct 2025 00:00:00 GMT</pubDate></item><item><title>PostgreSQL 18 and Rails: Compatibility and Native UUIDv7</title><link>https://epona.me/en/blog/postgresql-18-rails-uuidv7</link><guid isPermaLink="true">https://epona.me/en/blog/postgresql-18-rails-uuidv7</guid><description>A look at PostgreSQL 18&apos;s release from a Rails developer&apos;s perspective: ActiveRecord compatibility patches and built-in native uuidv7() support.</description><pubDate>Sat, 04 Oct 2025 00:00:00 GMT</pubDate></item><item><title>Switching from Claude to ChatGPT</title><link>https://epona.me/en/blog/switching-from-claude-to-chatgpt</link><guid isPermaLink="true">https://epona.me/en/blog/switching-from-claude-to-chatgpt</guid><description>I recently switched from Claude to ChatGPT—here’s why, and what I’ve learned along the way.</description><pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate></item><item><title>My Tailwind CSS Journey: From Skeptic to Pragmatist</title><link>https://epona.me/en/blog/my-tailwind-css-journey-from-never-again-to-i-get-it-now</link><guid isPermaLink="true">https://epona.me/en/blog/my-tailwind-css-journey-from-never-again-to-i-get-it-now</guid><description>Why I initially dismissed Tailwind CSS as inline styles revisited, and what changed my mind after using it in real-world Rails and Phoenix projects.</description><pubDate>Sat, 06 Sep 2025 00:00:00 GMT</pubDate></item><item><title>Automating Formatting and Linting with Claude Code Hooks</title><link>https://epona.me/en/blog/claude-code-hooks-automation-guide</link><guid isPermaLink="true">https://epona.me/en/blog/claude-code-hooks-automation-guide</guid><description>How to use Claude Code hooks to automatically run code formatting and linting commands (like mix format or prettier) whenever files are modified.</description><pubDate>Sat, 12 Jul 2025 00:00:00 GMT</pubDate></item><item><title>Refactoring a Phoenix LiveView App with Claude Code and Tidewave</title><link>https://epona.me/en/blog/claude-code-tidewave-ai-development-experience</link><guid isPermaLink="true">https://epona.me/en/blog/claude-code-tidewave-ai-development-experience</guid><description>My experience using Claude Code with the Tidewave MCP server to refactor a Phoenix LiveView project to DaisyUI, and what worked well versus the real limitations.</description><pubDate>Tue, 24 Jun 2025 00:00:00 GMT</pubDate></item></channel></rss>