Installing the app
Ojava installs as an app on iOS, Android, and desktop from one codebase, no separate download required to get started.
Install today
Ojava is a progressive web app, so you can install it straight from your browser and get an app icon, a full-screen experience, and no app-store wait.
- iPhone / iPad (Safari): tap Share, then “Add to Home Screen”.
- Android (Chrome): tap the menu, then “Install app” or “Add to Home screen”.
- Desktop (Chrome / Edge): use the install icon in the address bar.
For the per-device walkthrough, see the app download page.
One product, every device
The web app, the installable app, and the upcoming iOS and Android store apps are all built from a single codebase. That means a feature or fix lands everywhere at once and the experience stays consistent across web and mobile, rather than three apps drifting apart.
What syncs across devices
Your signed-in account uses the same records, food entries, workouts, water logs, fasting logs, meal plans, body measurements, reports, Ojava Coach context, and saved Coach threads on desktop and phone. When you log food or import a reviewed record through the account-backed paths, the same rows are available from the web app, installed app, and mobile shells.
For food logging on a phone, open Fitness > Nutrition in the mobile browser or installable app. It is the same account-backed Food Log path as desktop, so reviewed food rows, workouts, water, fasting, meal plans, reports, and Coach context stay tied to your signed-in account.
Most nutrition tracker settings now use account-backed sync when available: custom foods, saved meals, recipes, favorite foods, nutrition goals, completed diary dates, and food reminders can follow your signed-in account. Body progress photos save to private account storage with a browser fallback for transient upload or preview failures, while workout routine templates now sync through the account when you are signed in and fall back to browser storage when account access is unavailable. Ojava labels browser-local settings as ready for account sync, not already synced everywhere, until the matching database migrations and environment flags are active. Ojava Coach receives the same sync-status boundary when you ask what carries between phone, web, HealthKit, Health Connect, MyFitnessPal, Fitbit, or another partner connection, so it should not claim live partner sync or full mobile tracker-setting sync before those rails are active. For source-account and partner questions, Coach now also receives a consolidated native and platform sync diagnostic packet that separates live Ojava account rows from gated native, HealthKit, Health Connect, MyFitnessPal, writeback, and grocery handoff rails.
Food reminders can also use native local notifications inside the iOS or Android app after device permission is granted. The notification copy stays generic and opens the diary habit loop; it is not remote push, a medical alert, adherence proof, or diet treatment.
Fitness shows the same boundary in a Nutrition sync status card beside the tracker. It is there so mobile logging does not rely on a hidden capability answer: you can see which nutrition rows are account-backed today, which convenience settings still use this browser, and which partner rails need activation before Ojava can call them live.
Coach uses the same readiness framing for broader source setup questions. If you ask about Apple Health, Health Connect, Oura, WHOOP, Garmin, Fitbit, MyFitnessPal, a CGM, a smart scale, or a CSV export, it can separate rows already imported from file paths that work today, foreground native HealthKit or Health Connect sync that is code-built for the signed app, including workout-session duration, energy, distance rows, source-provided total energy burned, and basal body temperature, and partner paths that still need activation. The current native adapter does not expose dietary macro or water-intake samples, so those stay on reviewed imports and manual tracker rows until an adapter or provider path can truthfully read them. Coach should not claim store-app parity, background health-hub sync, partner credentials, device control, writeback, monitoring, or alerts until those rails are active.
Text your coach
When texting is available for your account, open Settings and choose Link my phone. Ojava shows a six-digit code that you send from the phone you want to use. Settings updates to connected after that message is received, without storing or displaying the raw phone number.
A linked phone can text Ojava with a short wellness question or workout note. Text messages are not fully private, so keep sensitive details in the signed-in app. You can reply STOP from the phone or choose Unlink phone in Settings at any time. Unlinking removes the active text connection and clears pending codes.
Works offline, safely
The installed app shows a branded offline page when you lose connection and caches only static assets (the app shell, styles, icons), never your records, API responses, or any health data. Your health data stays on the server, not in a device cache, so an installed app is not a copy of your record sitting on your phone.
Staying up to date
Because it is web-based, the installed app updates itself: when you open it, you get the current version with no manual update step. The store apps will follow the normal app-store update flow.
Native apps (roadmap)
Native App Store and Play Store apps are being prepared from the same codebase. The app shell has been verified in iOS and Android environments, and the store-ready build is part of the mobile build path. Account setup, signing, and store review still happen through the app stores, so the installable web app above is the way to use Ojava on your phone today.
Note