11 — Multiplatform Clients
Rank 23 of 28 · Tier C · IOS/, Android/, app/web-platform
Stack: SwiftUI + Swift Concurrency; Kotlin + Jetpack Compose + Gradle; Next.js + TypeScript + Playwright + vitest
Why this ranks here. It is a large body of real work and it proves range — but a distributed-systems loop does not hire on it. Lead with the backend; use this to answer "have you owned a product end to end?" (yes, on three platforms).
iOS — 611,426 lines of Swift, 1,200 files
Thirteen product modes in one app:
| Mode | Files | Lines |
|---|---|---|
| Dating | 147 | 90,161 |
| Array | 122 | 90,017 |
| Billboard | 128 | 57,669 |
| Main | 160 | 37,714 |
| BoxOffice | 45 | 20,407 |
| Universal | 26 | 17,530 |
| Global | 110 | 17,246 |
| OpenHouse | 57 | 9,294 |
| Identity | 51 | 8,051 |
| Registration | 13 | 6,072 |
| Vitals | 14 | 2,582 |
| Login | 5 | 1,427 |
| Storefront | 5 | 820 |
Notable engineering: BillboardAudioEngine with an AudioEngineActor over
AVPlayer (Swift actors for audio-thread safety), a JamzAudioEngine doing
vDSP FFT constellation matching on-device, gRPC-generated gateways from the
shared protobufs, and WebRTC via stasel/WebRTC 147.
Android — 19 modules, Kotlin/Compose
A port of the iOS app to Kotlin + Compose. Toolchain installed, builds green.
core/ network · persistence · proto · security · universal
feature/ array · billboard · boxoffice · dating · globalchat · identity
login · mating · openhouse · shell · solomon · storefront · vitals
Convention-plugin Gradle setup (build-logic/) — the correct way to keep 19
modules consistent.
The valuable part is what was not done: seven pre-existing iOS defects were found during translation and reproduced deliberately rather than silently fixed, so the two platforms stay behaviorally identical and the bugs get fixed once, on purpose, in both. That restraint is a strong engineering signal.
Web — Next.js platform
app/web-platform — Next.js App Router covering every product mode (array,
auth, billboard, billing, bizz, blog, boxoffice, careers, dashboard, dating,
globalchat, identity, login, mating, openhouse, storefront, plus legal/press/
privacy/promo surfaces). Playwright e2e + vitest, buf-generated TypeScript
clients from the same protobufs the backend serves.
Interview surface this opens
- Swift actors and structured concurrency for real-time audio
- On-device DSP: FFT, constellation fingerprinting, and why it runs on-device
- Generating typed clients for three platforms from one protobuf source
- Cross-platform behavioral parity, and why you reproduce a bug instead of fixing it mid-port