{"id":"8452e155-6952-40d9-bc3e-f8b8290c86c6","timestamp":1790949848389,"matcher":{"static":{"/portfolios":{"redirect":"/projects"}},"wildcard":{},"dynamic":{}},"prerendered":["/blog/asking-website-analytics-the-wrong-questions","/blog/pillars/revenue-critical-code","/bookmarks","/blog/ink-player-review","/blog/cognitive-debt-is-cheap-until-the-code-takes-money","/blog/store-money-as-integer-cents-never-a-float","/blog/shift-left-assumes-someone-on-your-left","/blog/rubber-duck-debugging-in-php","/blog/cost-cutting-is-motion-not-a-strategy","/blog/the-refund-path-is-where-i-read-a-codebases-soul","/blog/when-to-automate-refunds","/blog/pillars/plugin-modernization","/blog/pillars/founder-engineering","/blog/pillars/products-that-last","/not-found","/blog/boring-code-is-a-feature-you-ship-to-your-future-self","/blog/you-dont-rewrite-a-plugin-with-a-big-install-base","/","/blog/three-questions-before-i-write-billing-code","/blog/the-first-hire-who-touches-your-billing-should-be-boring","/blog/shipping-a-feature-into-a-five-year-old-plugin","/blog/backward-compatible-migrations-on-an-install-base","/blog/why-i-run-uptime-checks-at-the-edge","/blog/build-vs-buy-for-billing","/blog/supporting-a-plugin-across-wordpress-versions","/blog/subscriptions-are-licensing-that-bills-on-time","/blog/six-payments-edge-cases-that-bite-at-2am","/contact","/blog/authentication-mistakes-in-early-products","/colophon","/privacy-policy","/bookmarks/things-you-should-never-do","/projects","/bookmarks/circuit-breaker","/blog","/bookmarks/technical-debt-quadrant","/bookmarks/strangler-fig-application","/bookmarks/implementing-idempotency-keys-in-postgres","/bookmarks/files-are-hard","/bookmarks/falsehoods-about-names","/travel","/bookmarks/simple-made-easy","/bookmarks/postmortem-culture","/bookmarks/webhooks-best-practices","/bookmarks/semantic-versioning","/bookmarks/do-things-that-dont-scale","/about","/blog/pillars/plugin-reviews"]}