Citalia Mobile
Builder · 2026
Native pocket scheduler for independent professionals: appointments, clients, reminders and payments from the phone, with no commissions.
- Native iOS
- Android
- Kotlin Multiplatform
- SwiftUI
Impact
- Native SwiftUI and Jetpack Compose apps on a shared Kotlin Multiplatform core
- Email reminders with one-tap attendance confirmation and cancellation
- Waitlist and "due again" suggestions to fill gaps and win clients back via WhatsApp
Context
Citalia Mobile is a pocket scheduler for professionals who work alone: barbers, hairdressers, nail artists, tattoo artists or trainers who book clients over WhatsApp, in a notebook or in notes. They lose money to forgotten appointments, no-shows and unrecorded payments. The app inherits Citalia’s domain model (appointments, services, clients, availability) but is self-serve and works offline.
My role
I designed and built the product end to end: a spec with user stories and acceptance criteria, architecture, the iOS and Android apps, the reminders backend and the landing page.
Approach
- Shared Kotlin Multiplatform core (domain, SQLDelight data layer and state holders) with native UI per platform: SwiftUI on iOS and Jetpack Compose with Material 3 Expressive on Android.
- On-device data and offline-first behavior; no account required.
- WhatsApp first: confirmations, reminders and payment requests with prefilled templates.
- Branded automatic emails (booked, rescheduled, cancelled and a 24-hour reminder) with “Confirm attendance” and “I can’t make it” actions.
- “Due again” learns each client’s usual visit frequency and suggests who to message; when an appointment is cancelled, it suggests who to offer the slot.
- Home screen widgets, an accessibility audit and performance testing with 2,000 appointments.
- Spec-driven development with AI agents: a story is only done when it has automated tests (unit and snapshot) passing in CI.
Impact
- A complete scheduler that is set up in under 2 minutes and used one-handed.
- Monthly metrics on what the app earned: confirmed visits, filled gaps and recovered revenue.
- One business-logic codebase for two native platforms.