TL;DR

Over the past months, I’ve built 8 distinct apps across iOS and TypeScript, totaling ~10,349 lines of code. This series documents what I learned: the patterns that worked, the mistakes I made, and the system that enabled shipping 5 projects to v1.0+.


Introduction

This is the first post in a series about building apps in public. Not the polished, everything-went-smoothly version—the real one, with the detours, rewrites, and hard-won lessons.

The “testkitchen” started as a place to experiment. Build small things. Learn by doing. What emerged was a collection of projects that taught me more about software development than any tutorial could.


The Projects

Completed (5)

ProjectPlatformLOCWhat It Does
PokeriOS/SwiftUI4,080Texas Hold’em against AI opponents
ElizaNode.js/Web1,523Pattern-matching chatbot with personas
GTD InboxReact970Frictionless thought capture
MadLibsiOS/SwiftUI1,523Word game with two play modes
QuestForgeiOS/SwiftUI2,253Choice-driven narrative game

In Progress (3)

  • CardRoom - React Native card game platform
  • ElizaPersonal - Personal assistant variant
  • Walkie-Talkie - Voice communication app

What This Series Covers

  1. This post: Overview and project summary
  2. Swift/SwiftUI Patterns: iOS conventions that scaled
  3. TypeScript Patterns: Web/Node conventions that worked
  4. Testing & TDD: How test-first development changed everything
  5. The GAS Framework: The planning system behind 1.6-hour deliveries

Key Numbers

  • 10,349 total lines of code
  • 51 execution plans completed
  • 1.6 hours average time per plan
  • 5 projects shipped to v1.0 or beyond
  • 18 key architectural decisions documented

The Unexpected Lesson

The most valuable thing I learned wasn’t a specific pattern or technique. It was this:

Small, scoped deliverables beat ambitious plans every time.

The projects that shipped fastest weren’t the simplest. They were the ones where I broke work into independent, testable pieces. Each piece delivered value. Each could be verified before moving on.

The projects that stalled? The ones where I tried to do too much at once.


Coming Up Next

In the next post, I’ll dive into the iOS/SwiftUI patterns that emerged across Poker, MadLibs, and QuestForge. We’ll look at:

  • MVVM vs @Observable (and when to use each)
  • Value types that prevent bugs
  • Animation patterns for consistent UX
  • The button style that every project uses

Follow Along

This series will publish weekly. Each post builds on the last, but you can jump to specific topics:


This post is part of the “Building Apps in Public” series documenting lessons from the testkitchen projects.