Blog

Thoughts, stories, and updates.

Locale Migration Strategy: When Adding Beats Replacing

Abstract: When adding new language support to a production system, the choice between migration and additive strategies can make the difference between a smooth rollout and a potential disaster. Here’s how we avoided a risky database migration by choosing to extend rather than replace our existing Traditional Chinese implementation.

Claude Code: From 30% to 50% Better Than Cursor Agent Mode

Abstract: Claude Code has evolved from a 30% to 50% productivity improvement over Cursor’s agent mode, but rapid development comes with architectural debt. Here’s how I’m navigating the trade-offs and using MCP tools to enhance the workflow.

Mem0's Aggressive `infer=True` Behavior: When LLM Filtering Goes Too Far

Abstract: Mem0’s infer=True mode is designed to intelligently filter and deduplicate memories, but the default prompts are not meant for general use cases and are for personal information management! This post explores the root causes of aggressive filtering and provides practical solutions for more permissive memory management.

Getting Browser Tools MCP Server Working with Claude Code: A Simple 2-Step Solution

Abstract: This post provides a straightforward solution for configuring the browser-tools MCP server with Claude Code. When your MCP server fails to connect with claude mcp list, the issue is typically that Claude doesn’t know how to find or start the server. This guide walks through the simple 2-step process...

DSPy + OpenRouter: Why the Standard Integration Falls Short (And How to Fix It)

Abstract: The standard DSPy OpenRouter integration has a critical limitation: it doesn’t support model failover and always shows “LiteLLM” as the app name in OpenRouter’s leaderboards. Here’s how to fix it with custom headers to get automatic failover and proper app attribution.

Integrating RevenueCat Web Billing in React/Next.js: A Practical Guide

Abstract: This post walks through integrating RevenueCat Web Billing into a plain React/Next.js app. It covers the full setup: creating accounts, configuring products, using the RevenueCat Web SDK, and handling entitlements. Code samples and a recommended context/component hierarchy are provided, along with key gotchas (like the need for both Stripe...

Cache Me If You Can: Getting Service Worker Update Toasts to Play Nice with New Jekyll Layouts

Abstract: This post details the process of debugging and fixing service worker update notifications for new custom layouts in a Jekyll site using the Hux Blog theme. It covers how to ensure new pages are properly cached, how to handle missing client-side scripts, and how to gracefully fix JavaScript errors...

Exploring 'Futures Thinking': A Design Dive for 8-Bit Oracle

Abstract: This post explores ‘Futures Thinking,’ a potential experimental feature for the 8-Bit Oracle. It delves into the design considerations for a ‘Triple Hex Mode’ to help users map multiple potential future scenarios from a single I-Ching inquiry, including how AI could assist in categorizing these scenarios.

Android Passkeys: Frontend Adventures with CredentialManager and Jetpack Compose

Abstract: This post details the journey of building the Android frontend for FIDO2 passkey authentication. It covers tackling the CredentialManager API, migrating local data storage from Proto DataStore to Preferences DataStore, and the debugging strategies employed, including Logcat and in-app debug displays, all within a Jetpack Compose environment.

FIDO2 Passkeys for Android: Backend Challenges in Python

Abstract: This post details a developer’s journey through the backend challenges of implementing FIDO2 passkeys for an Android application using a Python backend. It covers critical aspects such as correctly configuring assetlinks.json for app-to-website association, handling data serialization for credential options and responses, and the nuances of Base64URL encoding/decoding required...