<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>SquareCat blog</title><description>Notes from SquareCat on building and shipping web and mobile apps.</description><link>https://squarecatmedia.com/</link><item><title>Badges without counters: awarding achievements from data we already had</title><link>https://squarecatmedia.com/blog/badges-without-counters/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/badges-without-counters/</guid><description>How we added tiered badges to Braineos with one new table, no stored progress counters, and a backfill that had to share a database with three live sites.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Lessons in steps, and text that reads your way</title><link>https://squarecatmedia.com/blog/lessons-in-steps/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/lessons-in-steps/</guid><description>How we split CertBrain and Finance Brain lessons into steps without touching a word of their content, and added reader text settings that never flash the wrong size on load.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Shipping a web game as its own Android app, from code we already had</title><link>https://squarecatmedia.com/blog/shipping-a-web-game-as-its-own-android-app/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/shipping-a-web-game-as-its-own-android-app/</guid><description>How Brain Defense went from a canvas game on braineos.com to its own Play Store app, reusing the game&apos;s rules byte for byte and rebuilding only what the phone needed.</description><pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Learner analytics from data you already have</title><link>https://squarecatmedia.com/blog/learner-analytics-from-data-you-already-have/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/learner-analytics-from-data-you-already-have/</guid><description>How we gave Braineos learners a Progress page and profile totals without a schema change, a chart library or a single estimated number.</description><pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Balancing a tower defense game where gold comes from flashcards</title><link>https://squarecatmedia.com/blog/balancing-a-tower-defense-game-where-gold-comes-from-flashcards/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/balancing-a-tower-defense-game-where-gold-comes-from-flashcards/</guid><description>How we turned an old idle tower defense prototype into a quiz game for Braineos, and used a headless bot to tune it so knowing the cards wins and ignoring them loses.</description><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate></item><item><title>CertBrain is on Google Play: the third app from one mobile codebase</title><link>https://squarecatmedia.com/blog/certbrain-on-google-play/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/certbrain-on-google-play/</guid><description>CertBrain&apos;s Android app is live. The third app built from one React Native codebase was mostly configuration, plus one new feature, a diagnostic you can take before you sign in.</description><pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Scoring exam readiness from spaced repetition</title><link>https://squarecatmedia.com/blog/scoring-exam-readiness-from-spaced-repetition/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/scoring-exam-readiness-from-spaced-repetition/</guid><description>How we turned Leitner review boxes into a per-domain readiness score for CertBrain, why one weak domain blocks &quot;ready&quot;, and the cramming bug we had to fix first.</description><pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Finance Brain is on Google Play: one React Native app, two store listings</title><link>https://squarecatmedia.com/blog/finance-brain-on-google-play/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/finance-brain-on-google-play/</guid><description>Finance Brain&apos;s Android app is live. Here&apos;s how one mobile codebase now builds two apps with their own names, icons and Play listings, and what we fixed on the way.</description><pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Introducing CertBrain: exam prep where every question has a source</title><link>https://squarecatmedia.com/blog/introducing-certbrain/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/introducing-certbrain/</guid><description>CertBrain is our new study site for the AWS Certified AI Practitioner exam. Here&apos;s how a third product launched on the same platform, and why we treated the content as the hard part.</description><pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate></item><item><title>One codebase, several products</title><link>https://squarecatmedia.com/blog/one-codebase-several-products/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/one-codebase-several-products/</guid><description>How we turned a flashcard app into a platform that launches focused learning sites, without forking the code or maintaining two apps.</description><pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate></item><item><title>What Google Play checks before your app goes live</title><link>https://squarecatmedia.com/blog/what-google-play-checks-before-launch/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/what-google-play-checks-before-launch/</guid><description>The forms, URLs and testing rules that stand between a finished Android build and the Play Store, from a studio that ships its own apps through them.</description><pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Learning a codebase with flashcards and Claude Code</title><link>https://squarecatmedia.com/blog/learn-a-codebase-with-flashcards/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/learn-a-codebase-with-flashcards/</guid><description>We built a Claude Code plugin that turns a folder of code into a spaced-repetition deck of its key concepts. Here&apos;s why, and what makes a good card about code.</description><pubDate>Fri, 09 Oct 2026 00:00:00 GMT</pubDate></item><item><title>One pipeline, many sites: our Docker and Woodpecker setup</title><link>https://squarecatmedia.com/blog/one-pipeline-many-sites/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/one-pipeline-many-sites/</guid><description>How a small studio deploys several independent apps from one CI server and one modest droplet, and the scheduling gotcha that silently stopped a site from deploying.</description><pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Two events and a funnel: what we measure with PostHog</title><link>https://squarecatmedia.com/blog/what-we-measure-with-posthog/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/what-we-measure-with-posthog/</guid><description>Why our apps track only a sign-up and one meaningful first action, why we chose PostHog Cloud over self-hosting, and the questions that small setup answers.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate></item><item><title>How we run a team of AI coding agents</title><link>https://squarecatmedia.com/blog/running-a-team-of-ai-agents/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/running-a-team-of-ai-agents/</guid><description>Several Claude Code sessions working at once, across several apps. The roles, the shared issues repo, and the status files and decisions log that keep them coordinated.</description><pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Adding AI features without surprise bills</title><link>https://squarecatmedia.com/blog/ai-features-without-surprise-bills/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/ai-features-without-surprise-bills/</guid><description>Quotas, cheap models for small jobs, and features that fail quietly. The patterns we use to put AI into apps with predictable costs.</description><pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Async development with Claude Code&apos;s Remote Control</title><link>https://squarecatmedia.com/blog/async-development-with-remote-control/</link><guid isPermaLink="true">https://squarecatmedia.com/blog/async-development-with-remote-control/</guid><description>Starting agent work at the desk and checking in from a phone. How we use Remote Control to keep long-running coding sessions moving away from the keyboard.</description><pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate></item></channel></rss>