Featured Project

BabyPlay

A baby-safe iOS touch canvas app that creates beautiful, colorful visual feedback for curious little fingers. Features parental lock protection and customizable themes.

SwiftSwiftUIiOSMobile
BabyPlay

BabyPlay

BabyPlay is an iOS app designed for babies and toddlers to safely explore cause-and-effect through touch. Every tap creates expanding colorful ripples with gentle sounds, turning the screen into an interactive sensory experience.

NOTE: this app was initially defined by me but the rest of the work was done via AI.

Status

App has completed development, tested in the simulator.

Next steps: test on a phone, deploy to appstore.

The Problem

Handing a phone or tablet to a baby is a common parenting reality, but most apps aren’t designed for tiny, curious fingers. Standard apps have exit buttons, ads, and navigation that babies inevitably find. BabyPlay solves this by creating a full-screen, distraction-free canvas that’s actually designed for how babies interact with screens.

Key Features

Touch Canvas

The main experience is simple: touch the screen, see beautiful things happen. Each touch creates expanding ripple particles with:

  • Multi-layered visual effects - Glowing outer rings, gradient-filled centers, and bright focal points
  • Smooth animations - Particles expand and fade naturally over 2 seconds
  • Multi-touch support - Handles as many simultaneous touches as little hands can make

Sound Feedback

Each touch plays a gentle synthesized tone with pitch that varies based on vertical position on screen. Touch higher = higher pitch. This creates an intuitive musical element that reinforces cause-and-effect learning.

Baby-Safe Color Palettes

Five carefully designed color themes, all tested to avoid seizure-inducing patterns:

  • Rainbow - Vibrant but soft primary colors
  • Pastels - Gentle pinks, mints, and lavenders
  • Ocean - Calming blues and teals
  • Forest - Natural greens and earth tones
  • Sunset - Warm oranges and corals

Parental Lock

Parents can access settings through a secure unlock flow:

  • Biometric authentication - Face ID, Touch ID, or Optic ID
  • PIN fallback - 4-digit code for devices without biometrics
  • Hidden gesture - Swipe up from bottom edge to access (babies won’t discover it)
  • Auto-lock - Configurable timeout to re-lock settings

NOTE: I wanted to find a better way to do a parental lock but my preferred baby proof unlock options were not exposed via Apple’s iOS APIs. Will be interesting to see what other limitations I run into.

Dark Background

The app uses a dark background (#1a1a1a) that’s easier on developing eyes and makes the colorful particles really pop. No harsh white screens.

Technical Highlights

Built with SwiftUI

The entire app is written in Swift using SwiftUI, taking advantage of:

  • GeometryReader for responsive touch positioning
  • @StateObject for managing particle and sound state
  • Custom UIViewRepresentable for true multi-touch handling
  • AVAudioEngine for low-latency sound synthesis

System Gesture Handling

iOS has edge swipes and gestures that babies inevitably trigger. BabyPlay uses:

.defersSystemGestures(on: .all)
.persistentSystemOverlays(.hidden)
.statusBarHidden(true)

This minimizes accidental exits while still allowing parents to access Control Center when needed.

Sound Synthesis

Rather than playing audio files, BabyPlay generates tones in real-time using sine wave synthesis:

let frequency = 220 + (pitch * 660) // A3 to E5 range

A smooth attack-decay envelope prevents clicking artifacts, creating gentle, pleasant tones.

What I Learned

Building BabyPlay taught me about:

  • App deployment steps - this is my first exposure to building/publishing an app
  • My AI makes it easy - deploying this app was amazingly simple once I was able to download/install Xcode.
  • Nano-Banana (NB) is impressive - it was super simple and quick yet effective to use NB to generate the icon art. (Used the Art skill implemented via NB)

What my AI Learned

Building BabyPlay taught me about:

  • Multi-touch handling in SwiftUI - Required dropping down to UIKit for proper gesture recognition
  • Real-time audio synthesis - AVAudioEngine is powerful but has gotchas around buffer management
  • iOS 15-17 compatibility - New APIs like defersSystemGestures aren’t available on older iOS versions
  • Biometric authentication - LocalAuthentication framework makes Face ID/Touch ID surprisingly easy
  • Baby UX design - No buttons, no text, no navigation. Just immediate, delightful feedback

Future Ideas

  • Haptic patterns - More sophisticated vibration feedback
  • Shape modes - Stars, hearts, and other shapes instead of circles
  • Recording mode - Save baby’s “artwork” as images or videos
  • Apple Watch companion - Let baby play on the watch too?