Offline and mobile
How Trailkeep works without a connection, what syncs automatically when you're back online, and mobile-specific UI and device notes.
Trailkeep is built to keep working when your signal drops — with important limits depending on whether you use the website, the Android app, or the iPhone app.
How offline works
Trailkeep uses two layers:
Data cache (always on) — Trips and gear data are cached locally for up to 7 days. Trip and safety edits queue while offline and replay when you reconnect. The return-by countdown runs from cached data on your device — no network needed to see the timer tick. Pack lists are view-only offline (browse cached packs; edits need signal). Gear Vault is online-only — the vault icon is disabled offline.
App shell cache (web only, when enabled) — On the website, a service worker can precache the interface for faster repeat visits. This is separate from your trip data. Live data always comes from the data cache layer above, not the service worker.
iPhone app: The service worker layer does not run inside the native iPhone app. You still get cached trip data and queued edits, but offline behaviour is more limited than on Android or the website — especially after force-quitting the app. See Native apps below.
What you can do offline
From cache — no network needed once data has loaded while you had signal:
- View previously loaded trips, days, and waypoints
- View gear lists, categories, and items (lists load in the background when you open the dashboard online — you do not need to open Pack first)
- Browse the trip and gear dashboards
- See return-by and Check-in Timer countdowns
If you go offline before pack lists ever loaded this session (and have no prior cache), Plan → Pack shows Pack lists unavailable offline — not an empty "create first list" screen. Open the app online once so lists can cache.
What queues and syncs later
These queue in the background when offline and run automatically in order when connectivity returns:
- Check in now — GPS is captured at the moment you tap (on your device); the check-in waits for signal to confirm with the server. While waiting, the button shows Not confirmed yet and the timeline says Saved on device · not confirmed.
- Start trip (Go) on an existing planned trip — Same pattern; your start time is recorded when you tap, not when signal returns.
- Editing existing trips, days, and waypoints (trips that were on the server before you went offline)
Pack planner: view cached gear lists offline; editing, reorder, and new items need signal. Gear Vault cannot be opened offline (vault icon disabled); if the panel was already open when you lost signal, you can close it but not reopen it until you reconnect.
Check in by text: If you have no data connection, use No data? Check in by text (cell or satellite) under the check-in button — it opens your phone's Messages app with a pre-filled message. Works over regular cell SMS or satellite SMS. When you return, confirm on the Daily progress row (Did your check-in text send? → Yes, it sent). You do not need to wait for a reply text from Trailkeep — your phone shows send success or failure; the app syncs when you have data again. A confirmation text back from Trailkeep is planned for a future update. See Satellite SMS check-in (iOS) or Android.
What requires a live connection
Some actions cannot queue because they need the server immediately:
| Operation | Why |
|---|---|
| Create a new trip | Needs server row before offline edits — plan trips while you have signal |
| Reorder days | Server must persist display order |
| Edit pack lists (gear tab) | View-only offline — reconnect to edit or reorder |
| Open Gear Vault | Online-only — vault toggle disabled offline |
| Finish or cancel trip | Trip lifecycle and contact notifications |
| Adjust return | Return-by deadline must reach the server immediately |
| Extend timer (+2 hours) | Server must anchor the new deadline |
| Undo check-in | Blocked while offline |
| Cancel overdue alert | Must reach the server to stop contact emails |
| Cloning a trip or gear list | Fresh limit check from the database |
| CSV or LighterPack URL import | File/URL fetch and limit check |
| Sign in | Always live |
| Real-time collaborative editing | WebSocket connection required |
Overdue alerts: If you miss your return deadline, Trailkeep alerts your emergency contacts from the server — your phone does not need to be online for that. But a check-in you made offline only counts once it syncs. Check the connectivity strip under the tabs or the dot on your avatar (see below).
Cache is stored in your browser's or app's local storage. In private/incognito mode on the web, storage may be blocked — data is only kept in memory until you close the tab.
Sync status indicator
Connectivity strip (primary) — When you're offline or changes are syncing, a compact bar appears under the Start / Plan tabs with tab-specific guidance. Examples:
| Situation | Strip shows |
|---|---|
| Offline on Pack | View only — Reconnect to edit packs and use the vault |
| Offline with queued edits | Offline — e.g. 2 changes saved on device · Tap for details |
| Back online, replaying | Syncing — e.g. Uploading 2 changes |
| Just finished sync | Back online — Your changes are synced (brief, then hides) |
| Replay failed | Sync paused — Tap for details · Reconnect or try again |
The user avatar in the header also has a small coloured dot in the bottom-right corner (secondary indicator — always visible when online):
| Dot colour | Meaning |
|---|---|
| Green | Connected, all changes saved |
| Amber (pulsing) | Syncing — back online, replaying queued changes |
| Red | Offline — changes are queued locally |
Tap the connectivity strip when it shows pending changes or sync paused to see a plain-English list of what is waiting (for example, "Check-in", "Waypoint: Camp"). If sync failed while you were online, Try again uploads the queue once more.
Trip planner rows — When you edit a day or waypoint offline, that row also shows Saved on device beside the day title or under the waypoint name until Trailkeep confirms the change with the server. The Start tab uses stronger copy for check-ins (Saved on device · not confirmed) because emergency contacts are not updated until sync completes.
App updates
When a new version is available on the website, a toast appears once: "Update available — New version ready. Reload when convenient to update." There is no forced reload.
Native app updates come through the App Store or Google Play.
Installing as a PWA
Trailkeep can be installed as a Progressive Web App on the website — it runs with its own icon and no browser chrome.
iOS (Safari only): Open Trailkeep in Safari → Share → "Add to Home Screen." Chrome and other browsers on iOS cannot install PWAs.
Android (Chrome recommended): Chrome shows "Add to Home Screen" or "Install app" in the menu.
Native apps (iOS and Android)
| Android app | iPhone app | |
|---|---|---|
| Cached trip/gear data | Yes | Yes |
| Pending check-ins and edits (sync when back online) | Yes | Yes |
| Return-by countdown offline | Yes | Yes |
| Service worker shell | Yes | No |
| Full offline after force-quit | Stronger | Weaker shell — trip data and overdue banner restore from cache; auth/profile may need signal once |
For serious backcountry use with patchy signal, check in by text (cell or satellite SMS) is the reliable no-data path on any platform.
Mobile dashboard layout
Gear Vault
On desktop (≥1024px), the Gear Vault opens as a sticky sidebar beside your pack list when you tap the gear icon in the Pack list header. The panel is hidden until you open it — tap the icon again or the panel X to close.
Offline: the vault icon is disabled without signal. Pack lists remain view-only offline; vault actions always need a connection.
On mobile (below 1024px) it becomes a full-screen overlay panel:
- Slide in from the left over a blurred backdrop
- Tap the backdrop or the X button to close
- Close automatically if you resize the window above 1024px while one is open
Mobile item row display
On mobile screens (≤744px), item rows use a coloured border system instead of inline icon columns:
- Left border — signals functional status: blue for worn items / water sources, amber for consumables / resupply points
- Right border — signals star rating: yellow / red / green matches the star colour
An item that is both worn and starred shows both borders simultaneously. This gives instant status at a glance without expanding the row.
On desktop, the same information is shown via small inline icons in a dedicated column.
Star colour cycle: tapping the star cycles none → yellow → red → green → none. The colours have no enforced meaning — common conventions are yellow (important), red (critical), green (packed and ready).
Finding actions on mobile: tap the chevron ▾ to expand a row, then tap the ⋮ menu for star, type toggles, price, and vault actions. Delete is always visible outside the menu.
The coloured border system only appears in your dashboard. In the shared/public view, mobile uses inline icons next to item names — no border colours.
iOS notes
Input zoom
Safari on iOS auto-zooms when a text input smaller than 16px receives focus. Trailkeep prevents this by setting maximum-scale=1.0, user-scalable=no on the viewport — pinch-to-zoom is disabled while using Trailkeep. The viewport-fit=cover setting ensures content fills correctly on devices with a notch.
GPS permissions
Location permission is requested when you check in or capture GPS on a trip. If capture fails, check-in still completes — coordinates are just omitted. In the native iPhone app, check iOS Settings → Trailkeep → Location if GPS stops working.
GPX file upload
The file picker on iOS opens the Files app / iCloud Drive. GPX files downloaded from other apps (Garmin Connect, AllTrails, Komoot) may need to be moved to the Files app first if they were saved to the source app's private container.
Android notes
GPX file naming
Some Android apps export GPX files with incorrect or missing file extensions. If an upload fails or shows no file selected, rename the file to end in .gpx using a file manager app.
Location permissions
When prompted for GPS access during day completion, select "While using the app" — Trailkeep does not request background location and does not need "Allow always."