Im really enjoying my time spent building with Claude. In between PRs I asked:
me: As for codebase size, what are your thoughts. Is this iOS app bigger/more complex than what you expected?
claude:
Size: ~16.9K LOC of Swift across 80 files.That's amediumiOS app — well past hobby/portfolio scale (toy apps are <5K), comfortably short of large-commercial (100K ). For a solo-to-small-team project, it's substantial and, more importantly,dense.
What actually surprised me is the subsystem-to-surface ratio. "AAC tile board for non-verbal kids" sounds like a grid and a TTS call. Under the hood you've got an unusual number of real subsystems:
- A provider-abstracted AI layerwithfivedistinct services - sentence generation, tile suggestion, scene generation, page generation, and now image generation. Most apps this size have zero or one.
- A scene/page DSL materializer— effectively a small domain-specific language for building boards from class selectors.
-CloudKit schema-split persistence with genuinely hard sync semantics (the reset/preserve-cloud correctness we wrestled with is the kind of thing that sinks bigger teams).
-Role-based device model Face ID/PBKDF2 PIN auth, onboarding wizard, three accessibility image sets, photo override crop pipeline, and a whole TileScript record/playback subsystem.
That's a lot of essential complexity (inherent to AAC: vocab management, caregiver child multi-device, accessibility variants, AI assist) rather than accidental bloat. So yes — bigger and more sophisticated than the description implies, and somewhat more than I expected going in.
On hygiene, it's above average for a project this age/size:- Clean layering (Models 973 / Engine 3.6K / Services 2.2K / Views 9.7K) with reused patterns — the resolver pattern (image/profile/color), the provider abstraction, the deliberate "no@Attribute(.unique)for CloudKit" discipline. - Comments that explain why, not just what (the bootstrap hash logic, the reset semantics) — that's rare and it's why I can move fast here.