Personal Project

Learn 21

An iOS app that teaches basic blackjack strategy and practices Hi-Lo card counting through quick drills, voice prompts, and live feedback.

Individual Jan 2024 - Feb 2024

Project

Personal

Platform

iOS

Tech Stack

Swift, SwiftUI, SwiftData, Combine

Role

Everything basically

Learn 21 screenshot 1

What the app does

  1. Playing Blackjack

    Risk-free blackjack sessions with adjustable goals for each practice run.

  2. Strategy Trainer

    Real-time advice that points to the safest mathematical move before you commit to a hand.

  3. Hi-Lo Drills

    Rapid card streams update the running count while players call out the answer under a timer.

  4. Stats & Streaks

    Accuracy, average response time, best streak, and a heat map of mistakes by situation.

Key takeaways

  • Translated Hi-Lo into code by implementing running and true count updates, drill generation, and validation against known decks.
  • Built an advice layer that blends Hi-Lo and basic strategy practice into real-time feedback before every hand.
  • Card counting is hard, and good UX makes the grind feel possible.

Tech stack

SwiftSwiftUISwiftDataCombine

Links

Long story

The idea came after I rewatched the movie 21 and I suddenly wanted to finally learn how card counting actually works. YouTube tutorials felt complicated and lacked hands-on practice, and the existing apps were either too flashy, focused on gambling, or offered no useful feedback. Building my own trainer felt like the perfect way to turn that curiosity into a Swift playground.

I spent weekends during the Apple Developer Academy challenge building a basic blackjack game just to get the logic right. For a moment I thought I would need SpriteKit for the visuals, but I realized a clean SwiftUI interface matched the trainer vibe much better.

Once the core game worked, I layered in the Hi-Lo system. I turned it into a memory-style drill that streams cards one by one and forces the player to keep a running count under a timer. When the drills felt solid, I bolted on a guided blackjack mode driven by a long chain of if-else statements mapped straight from the strategy chart.

The last mile was adding stats, streak tracking, and a tutorial so new players could understand what the numbers meant. I even tried publishing to the App Store just for the experience, but the build kept getting flagged as simulated gambling. After multiple resubmissions I settled on distributing the build through TestFlight.

Despite the bumps, Learn 21 is still one of my favorite projects because it merged learning, design, and personal curiosity into something genuinely useful.