17.4 Section 17: Progressive Disclosure & UX Philosophy

Onboarding Flow What do you shoot

First-run wizard that asks what you shoot and pre-configures sensible defaults.

Where to find it

Runs automatically on first launch; resets if app data is cleared.

Summary

On a fresh install the app opens a short wizard before the viewfinder: pick your format, pick your film family, optionally pick a camera body. The app preloads a matching film stock, the right metering precision, the bias chip for that film type, and pins the calculators that format usually leans on. After the wizard the viewfinder loads with sensible defaults instead of a cold 35mm + ISO 400 baseline.

How it works

How it runs the first time

Right after you install the app and grant the camera permission, the wizard slides up over the viewfinder. It takes under a minute to complete. There is no skip-then-pester model: once you finish or skip, the wizard never reappears. If you wipe app data or clear storage, it will run again on the next launch.

What the screens ask

Step one is a welcome card with a Skip option for users who want to dive straight into the viewfinder. Step two picks your format: 35mm, Medium Format, Large Format, Cinema, or Alternative Process. Step three picks your film family: Black and White, Color Negative, or Slide. Step four offers an optional camera body picker scoped to the format you chose. Step five summarises the defaults the app is about to apply and ends with Start metering.

What gets pre-configured

Format sets the gate, the default ISO, and the metering precision (FAST for 35mm and cine, Auto-pro for medium format, Pro Always for large format). Film family sets a matching film stock (Tri-X for B and W 35mm and MF, FP4 for LF, Portra for color, Provia for slide) and the multi-spot bias chip (Protect shadows for B and W, Protect highlights for slide, Average for color negative). Each format also pins the calculators it typically uses: Bellows and Large Format Movements at the top for LF, Cine Shutter Angle for cinema, Alternative Process and Pinhole for alt-process. Camera body sets gear-based ranges so the shutter dial matches the body you actually own.

Why this exists

The app carries ~150 features. A cold first launch with no setup would land every new user at the same generic 35mm-Portra-400-Fast configuration regardless of whether they shoot 4x5 platinum prints or Super 8 cine. The wizard signals what kind of photographer you are in under a minute and lets the rest of the app start from a configuration that already looks like you.

Implementation notes (for developers)
OnboardingDialog (ui/onboarding/) is a full-screen blocking Dialog with six steps (Welcome, Format, Film Type, Film Stock, Camera Body, optional Lens, Done). Visibility flows from ViewfinderViewModel.onboardingVisible, a standalone StateFlow (D8 ceiling) seeded from AppMeta.onboardingCompletedAtMs during hydrateAppMetaFlags. onOnboardingComplete writes the picked defaults into UiState (selectedFormat / selectedIso / selectedFilmStock / multiSpotBias / cineFps / cineGauge / gearCameraId / gearLensId / rangesMode) plus the two standalone-StateFlow settings the wizard touches (_meteringPrecision flipped to PRO_AUTO_ON_CLIP, _pinnedCalculatorIds set per format), then forces _protectChipsBlinkEnabled to false, calls persistSettings(), and stamps AppMeta.onboardingCompletedAtMs so the wizard does not return. Pure mapping lives in OnboardingDefaults.kt: per-format ISO + metering precision + pinned-calculator CSV, per-film-type bias, with an explicit FilmStock pick that falls back to a per-family default when skipped. Fixed-lens bodies auto-attach their lens and skip the Lens step. MIGRATION_64_65 backfills the timestamp on the existing app_meta row so upgraders never see the wizard.

Search documentation