18.1 Section 18: Offline-First Architecture

Full Offline Operation

Every feature works without a network connection.

Where to find it

Everywhere. The whole app runs without a network.

Summary

The film stock library, gear catalog, ephemeris (NOAA solar position equations + 29.53-day moon synodic), all calculators, all logging, all theme rendering happens on-device. No login. No telemetry. No analytics.

How it works

What offline-first means here

You can install the app, put the phone in airplane mode, and every feature still works. Metering, the film stock library, the gear catalog, the calculators, shot logging, the ephemeris, the help text you are reading right now: none of it makes a network call. The app has no login screen and never asks you to create an account.

Bundled assets

Everything the app needs to compute is shipped inside the APK. The film stock database, the lens and camera catalog, the developer chemistry tables, the ephemeris constants for sun and moon position, the icon set, the theme assets: all of it lives in the app package. No first-run download, no on-demand fetch.

Ephemeris is computed, not fetched

Sun and moon position come from on-device math: NOAA solar position equations for the sun, and a 29.53-day synodic calculation for moon phase. You give the app a date, time, latitude, and longitude; the app returns the answer locally. There is no API call to a sunrise or moonrise web service.

Persistence via Room

Your profiles, shot logs, rolls, and settings are stored locally in a Room database on the device. Nothing leaves the phone. If you uninstall the app you lose your data; if you back up your phone (Google or iTunes-style) the database goes with the backup.

No telemetry, no analytics

The app does not include an analytics SDK, a crash reporter that phones home, or any background service that contacts a server. The meter does not know you exist outside your phone. This is a deliberate choice that ties to section 22 (Trust and Data Ownership).

Implementation notes (for developers)
Architecture promise rather than a single screen. No HTTP client, no analytics SDK, no auth provider in the dependency graph.

Search documentation