The problem this solves
Here is the contractor who needs this. You're three hours into a basement remodel in a 1962 split-level. Mechanical room is in the back corner with cinder block walls on three sides. The LTE bars are gone. You finished a tear-out, hit the truck for the next material run, and pulled out your phone to log a $480 dump-trailer haul-off and a 4-hour time entry for the helper.
The app errors out. "Network request failed." You try again. Same error. You shrug, get in the truck, and tell yourself you'll log it when you get to Home Depot. By the time the bars come back you're three jobs deep in your head and the basement entry never makes it in. The helper's hours go missing for the day. The dump fee doesn't hit the job's cost roll-up. The profit per job report you run on Friday is wrong by $640.
Most construction apps treat this like an edge case. It is not an edge case. Basements, attics, mechanical rooms, rural new construction, gated communities with bad cell coverage, and pump rooms at the back of pool builds are where contractors spend half their day. An app that gives up the moment LTE drops is an app that loses half the data it should be collecting.
How Workhand handles it
Every action that writes to the database has been rebuilt to work offline. You tap Add Cost, you fill in the form, you tap Save. If you have signal it lands on the server. If you don't have signal the cost gets queued on your phone, an optimistic row appears in the cost list immediately, and a small pill shows up in the header showing the count of pending changes waiting to upload.
Same for daily logs (with photos), time clock in and out, mileage entries, and chat messages. Same for the photo uploads inside each of those. The local queue handles file uploads first and row inserts second so the photo and the data stay tied together even when the upload happens hours later.
The second your phone gets signal again the queue drains. A green toast confirms how many items synced. The sync indicator pill clears itself. The realtime channels reconnect. The data on your phone and the data on the dashboard reconcile in about 30 seconds.
If anything fails on sync, Workhand classifies it. Network blip, server hiccup, low LTE flickering in and out, those retry automatically with exponential backoff. Permission errors, validation errors, anything truly broken lands in the Settings sync queue screen with a clear error message and per-row Retry and Discard buttons. Nothing fails silently. Nothing gets lost.
| What you get | How it works |
|---|---|
| Cost entries offline | Add a job cost without signal. The row appears in the list immediately. Queues for upload. |
| Daily logs offline with photos | Write notes, attach jobsite photos, save. Images queue with the log and upload together when signal returns. |
| Time clock in and out offline | Start and stop the clock without bars. The active timer banner stays accurate. Hours land in the report when sync happens. |
| Mileage entries offline | Log trips between jobs while still driving. IRS-rate write-offs do not depend on signal. |
| Chat messages offline | Send job chat with text and photo attachments. Messages appear in the thread immediately and reconcile with realtime on reconnect. |
| Sync indicator pill | Header pill shows the count of pending mutations. Tap to open the diagnostic screen. |
| Settings sync queue diagnostic | List of every queued mutation with type, age, last error, and per-row Retry, Discard. Plus bulk Sync now, Retry all, Clear all. |
| Pull-to-refresh everywhere | Every list screen, dashboard, job tab, and chat lets you swipe down to force a fresh fetch on demand. |
| Auto-sync on reconnect | Queue drains within about 30 seconds of regaining signal. Success toast tells you what synced. |
Why most construction apps fail at this
Bolting offline mode onto an app that was built online-first is hard. Three specific problems most field-service tools get wrong:
- They treat offline as "show cached read-only data." You can see your jobs, you can see your customers, but you can't make changes. The whole point of being in the field is making changes. Workhand's offline mode is write-capable, not just read-capable.
- They lose data on the next cold start. If the queue lives in memory and you force-quit the app or the phone reboots, the queue evaporates. Workhand persists the queue to device storage so a crash, a reboot, or a dead battery never costs you the work.
- They auto-logout the user when the auth token refresh fails offline. Most apps try to refresh the user's session every 50 minutes. If that fails because of no signal, the app boots the user to the sign-in screen. We fixed that explicitly. Workhand keeps you signed in through any network failure, only logs you out on a real auth error.
The architecture, in contractor terms
You don't need to know any of this to use it, but the engineers reading this page will appreciate the detail.
Every write action goes through a mutation queue. The queue lives in local device storage (AsyncStorage on iOS and Android, the standard mobile persistence layer) and survives app restarts. When you tap Save, Workhand first tries the network call. If the call fails with a network-shaped error, the action gets serialized into the queue with all the context needed to replay it later. If the call fails with a permission or validation error, that's a real error and you see it immediately.
A worker process drains the queue when the app is foregrounded, on a 30-second periodic timer, and whenever a hook calls drainOnce directly. Each mutation runs through a type-specific processor that knows how to handle the file uploads, foreign-key relationships, and constraints for that table. Successful mutations get committed and the cache is updated. Failed mutations get classified as retryable or fatal and handled accordingly. The queue has a 500-mutation cap and a 30-day age cap so it cannot grow without bound.
What this means in practice. The contractor in the basement gets to do his job. The data lands in the cloud about 30 seconds after he walks out of the building.
Who this is built for
- Pool builders working pump rooms and equipment pads behind houses where LTE is dead
- Remodelers in basements, mechanical rooms, and gut renovations in older homes
- HVAC techs crawling attics and mechanical closets on service calls
- Plumbers in crawl spaces, basements, and behind drywall
- Solar installers running roofs in rural neighborhoods where carrier coverage drops to one bar
- General contractors on new-construction jobs where the building is up but the wifi and cell repeaters are not yet in
- Landscape and hardscape contractors on rural properties or behind acreage where coverage thins out
- Subs and trade contractors who have ever started a time entry, walked into a building, and watched the app fail
Try Workhand free
Free plan includes offline mode on 1 active job. Upgrade to Pro at 34.99 per month for unlimited jobs, or Team at 89.99 per month for up to 15 users. 14-day free trial on paid plans.
Get the app See pricingCommon questions
Does Workhand work without internet?
Yes. Workhand has a real offline mode built into the app. Costs, daily notes with photos, time clock entries, mileage, and chat messages all keep working when the device has no signal. Each change queues locally and syncs automatically the second connection returns. A small pill in the header shows you how many items are waiting to sync so you always know where you stand.
What happens to my data if the app closes or the phone reboots while offline?
The queue is persisted to local device storage, not held in memory. If the app closes, the phone reboots, or the battery dies, your queued changes are still there when you reopen Workhand. As soon as the device gets signal again the queue drains automatically. No work is lost to a crash, a force-quit, or an overnight battery death.
How long can I work offline before things stop saving?
The offline queue holds up to 500 mutations and up to 30 days of work. That covers a one-day job in a no-signal basement easily, a week-long rural build comfortably, and basically any realistic field situation. If you somehow hit the cap, the oldest entries get trimmed first. In practice the queue drains every time you regain signal, so you rarely accumulate more than a few minutes of pending work at a time.
Do photos on daily logs and receipts still sync when I'm back online?
Yes. Photo uploads queue the same way text data does. The image stays on your device until you have signal, then the queue processor uploads the file and attaches it to the right cost row, daily log, chat message, or selection sheet. The system handles the file upload first and the row insert second so the photo and the data stay tied together even when the upload runs hours after the original action.
Why does the green pill say "N queued" in the header?
That's the sync indicator. It shows up only when there are pending offline changes waiting to upload. The number is the count of queued mutations. Tap the pill and you go straight to the Settings sync queue screen, where you can see what each item is, when it was created, and any error if it failed. The pill clears itself the second the queue empties.
What if a queued item fails to sync when I'm back online?
Workhand classifies failures into retryable (network blips, server timeouts) and fatal (permission errors, validation errors). Retryable failures back off exponentially and try again on the next sync pass. Fatal failures land in the Settings sync queue screen with a clear error message so you can tap Retry after fixing the problem, or tap Discard if the change is no longer needed. Nothing fails silently.
Does offline mode cost extra on Workhand?
No. Offline mode is included on every plan including Free. There is no add-on charge, no upgrade required, no per-mutation fee. Pro at 34.99 per month and Team at 89.99 per month unlock unlimited jobs and more users, but the offline behavior is universal.
Does Workhand sync in the background while I'm not using it?
No, and that is intentional. Background sync drains battery hard on a phone that already spends its day on a jobsite. Workhand syncs only while the app is in the foreground or transitioning to foreground. The queue drains within 30 seconds of regaining signal the next time you open the app. For field crews this is the right tradeoff. Your battery lasts the day and your data still gets where it needs to go.