Overview
ArrivHQ runs as a Progressive Web App (PWA) on mobile and desktop. Most of the time the PWA "just works" — it caches assets for fast loads, supports push notifications, and lets you install ArrivHQ to your home screen like a native app.
Occasionally a PWA can get stuck. The most common symptom is a redirect loop: you tap the icon, see the app try to load, and it bounces between pages or shows "Safari cannot follow more than 20 redirects." This page explains why that happens and how to recover.
If you're not stuck and just want a clean reset, visit arrivhq.com/reset-pwa in any browser. The page runs through the recovery steps automatically and sends you to sign-in.
Why a PWA Gets Stuck
The PWA stores three things locally on your device:
- A service worker (SW) — a small piece of JavaScript that caches assets and intercepts network requests.
- A session cookie — your signed-in JWT, lasting up to an hour before it refreshes against the server.
- Local storage / IndexedDB — small bits of app state.
Trouble usually starts when one of those gets out of sync with the server. For example, if your account state changes on the server (a tenant is removed, your role changes, an invitation is accepted) but the JWT in your browser still claims the old state, the app keeps trying to route based on the stale claim. Refreshing in the PWA usually doesn't help because the service worker is serving cached responses.
FAQ
I'm in a redirect loop. What do I do?
Easiest path — open Safari (or Chrome, whatever your regular browser is, not the PWA icon), navigate to arrivhq.com/reset-pwa, and let the page finish. It will unregister the service worker, clear caches, expire your sign-in cookies, and redirect you to /login. Then go back to the PWA (close it from your multitasking switcher first if it's already open) and sign in fresh.
If you can't get to a regular browser easily:
- From inside the PWA, tap the share button (box with an up-arrow — usually bottom on iPhone, top-right on iPad, browser menu on Android).
- Choose "Open in Safari" (iOS) or "Open in Chrome" (Android).
- The same URL opens in your regular browser. Navigate to
/reset-pwathere. - Close the PWA, reopen it, sign in.
Reset PWA didn't help. What now?
If you went to /reset-pwa and still see the loop, the next step is to clear browsing data for arrivhq.com from your device:
iPhone / iPad (Safari PWA):
- Open Settings → Safari → Advanced → Website Data.
- Search "arrivhq" — you'll see entries for
arrivhq.com,api.arrivhq.com,staging.arrivhq.comas applicable. - Swipe left on each and tap Delete.
- Long-press the PWA icon on your home screen → Remove App → Delete App.
- Open Safari, navigate to
arrivhq.com, sign in, and re-add to home screen via Share → Add to Home Screen.
Android (Chrome PWA):
- Long-press the PWA icon → App info → Storage & cache → Clear storage.
- Open Chrome, navigate to
arrivhq.com, sign in. - Optionally re-install via Chrome menu → Add to Home screen.
Desktop (Chrome / Edge):
- Open
chrome://apps/(Chrome) oredge://apps/(Edge). - Right-click the ArrivHQ app → Remove or Uninstall.
- Navigate to
arrivhq.comin a regular browser tab, sign in fresh. - Re-install via the browser's address-bar install icon.
My PWA loads but shows old content / missing features
That's the service-worker cache holding onto a stale shell. Most browsers will pick up a new version on the next launch, but you can force it:
- Visit
arrivhq.com/reset-pwain a regular browser tab. - Close the PWA (multitasking switcher).
- Re-open the PWA.
The newer service worker activates on next launch and replaces the cached assets.
Does ArrivHQ work offline?
The service worker caches enough of the shell to show a friendly "you're offline" page if the network drops while you're using the app. It does not work fully offline. Sign-in, your stays list, messages, and checklists all require a live connection to ArrivHQ's API.
If you see a "We're temporarily unavailable" banner instead of working pages, that means our API is unreachable from your device. Your local data is safe — you'll just need to try again shortly. The banner includes a "Stuck in a redirect loop? Reset the app." link if the API outage left your session in a bad state.
Why does this happen at all?
Three reasons, in order of frequency:
- Stale auth claims — your sign-in token still references state that changed on the server (a tenant role, an invitation acceptance). The fix is to refresh the token by signing out + back in.
/reset-pwadoes this for you. - Old service worker — your device cached the SW from a previous deploy, and the new deploy isn't picking up because the old SW intercepts requests for it. Reset clears the SW.
- Provider hiccups — sometimes our hosting provider has an outage that leaves the app in a half-working state. The maintenance banner covers this case; refreshing after the banner clears resolves it.
I'm a host. Does any of this affect my data?
No. Everything on your device (the service worker, the cache, the JWT cookie) is just a copy of state that lives on the server. Clearing the PWA, signing out, or resetting your device doesn't change anything on your account. Your properties, reservations, expenses, and uploads are all stored server-side and reload as soon as you sign in again.
I'm a guest. Does any of this affect my reservation?
No. Your reservation and any access codes / messages live on the server, attached to your account. The PWA on your phone is just a viewer. If you reset or delete the app and sign in again, you'll see your reservation exactly as you left it.
Limits & Requirements
- The
/reset-pwaroute is public — it doesn't require a sign-in and won't redirect you somewhere else first. Safe to visit any time. - After resetting, you'll need to sign in again. If you've forgotten your password, use the Reset password link on the sign-in page.
- Push notifications need to be re-enabled after a reset (Settings → Notifications inside the app, once you're signed in).