What Pica is and how we build it
Welcome to PICA — the real app you build across this whole course.
What Pica is. A diner sits at a table, scans a QR code, sees the menu on their phone, adds pizzas to a cart, signs in, orders and pays — all from the phone. A real "QR-to-table" ordering system.
What you should already know. This course is intermediate: we assume you know Kotlin basics (variables, functions, classes, val/var, data class, lambdas). Don't worry — the harder pieces (coroutines, Flow) we unpack exactly where they're needed.
How we build — the architecture spine. We do not pour in every library at once. Each lesson adds one real layer, right when it's needed:
1 setup · 2 Compose UI · 3 state / ViewModel
4 navigation (Nav3)· 5 Retrofit + API · 6 Koin (DI)
7 Room (cache) · 8a email/pw auth · 8b Google auth
9 authed requests · 10 QR scanning · 11 Stripe · 12 release · 13 capstone
Retrofit arrives at 5 (when we need real data), Koin at 6 (when manual wiring starts to tangle), Room at 7 (as a cache, not the primary store). Feel the pain, then earn the tool.
The backend is already written. You won't write a server — you get one ready-made (Go: Chi + SQLite, modernc.org/sqlite, goose migrations). You run it locally, and the app talks to it. The real endpoints:
GET /menu the pizza list
POST /register · POST /login email → a JWT session token
POST /orders · GET /orders orders (authenticated)
POST /create-payment-intent Stripe payment (test mode)
(Google sign-in becomes the same JWT on the server — that's lesson 8b.) If you want, you can extend or rebuild the server yourself — but that's optional.
Today, a small but real first step: create the project and run your first Compose screen on an emulator.