Theme
/
Theory

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.