// the find
joreilly/Confetti
KMP/CMP GraphQL based conference project with Jetpack Compose Android, Compose for Wear, and Compose Multiplatform Desktop, Web and iOS clients along with GraphQL backend.
Confetti is a full-stack KMP conference schedule app — GraphQL backend on App Engine, Apollo Kotlin for the shared data layer, and Compose Multiplatform clients for Android, iOS, desktop, web, Wear OS, and Android Auto/Automotive. It's primarily a showcase project by John O'Reilly demonstrating how far KMP can stretch across form factors, and it's a real shipping app with actual conference data.
Apollo Kotlin is used properly throughout — normalized caching, type-safe operations generated from the schema, and the same GraphQL client code running on every platform. The Wear OS and Android Auto clients are genuine implementations, not toy wrappers — they have their own navigation stacks and handle platform-specific constraints. CI is thorough: separate workflows for Android/Wear/JVM, iOS, backend deploy, backend tests, web publish, and screenshot testing with baseline profiles. The backend data model is flexible enough to support multiple conferences without schema changes, using a conference header to switch context.
The backend uses Google Cloud Datastore, which is a sharp constraint — no SQL, no easy ad-hoc queries, and the data import pipeline is a collection of one-off scrapers per conference with no common abstraction, meaning adding a new conference requires writing new code rather than config. The web client is Compose/Wasm, which still has real-world limitations around bundle size and SEO — it's the right call for code sharing but a bad call for anyone who wants the schedule discoverable by search engines. There's almost no test coverage in the shared KMP module; the screenshot tests in androidApp cover one screen (SpeakerDetails) and that's essentially it for automated verification of the client logic.