Mobile Time Tracking for Consultants: How We Keep MinuteShark Running When Wi-Fi Dies - MinuteShark

Engineering

Mobile Time Tracking for Consultants: How We Keep MinuteShark Running When Wi-Fi Dies

Mobile time tracking for consultants fails in boring places: a lobby with captive-portal Wi-Fi, a basement conference room, a train between client sites. The work still happened. The browser tab that was supposed to hold your timer did not.

The engineering job is not “invent a research-grade offline database.” It is: keep a billable clock usable when the network is rude, then put the same workspace back together when you have a connection. That is why MinuteShark is a Capacitor 7 app wrapping Ionic and Angular 16 — not a bookmark you hope Chrome will keep alive.

Why a consultant timer cannot live only in a browser tab

Freelancers do not lose hours because they lack a Kanban column. They lose hours because the moment they did the work and the moment they can babysit a web app are different moments. You finish a workshop, walk into an elevator, and the captive portal kills the session. You remember the time on the sidewalk. The laptop is in a bag.

A web-only timer has a quiet dependency: the tab, the service worker you remembered to install, the laptop that stayed open. Client-site days violate all three. So at ElementPragma we treat iOS and Android as first-class surfaces for the same workspace — not a marketing screenshot of the desktop app.

That is also why we did not design the product as an employee-monitoring system that “keeps working” by watching your screen. There is no screenshot pipeline to fall back on when the network drops. The clock has to be something you started on purpose, on a task you chose, on a phone you already carry.

What Capacitor actually buys us (and what it does not)

MinuteShark’s UI is an Ionic + Angular 16 app. Capacitor 7 wraps that codebase for the iOS app and the Android app. The point of the wrapper is not a rewrite. It is access to the things a browser tab will not reliably do on someone else’s Wi-Fi:

  • A real home-screen app you can open without hunting a URL behind a hotel login page.
  • Local notifications for smart reminders — average duration, a time of day, a regular interval — so the ping is on the device, not trapped in a forgotten desktop tab.
  • Native extras where they belong (voice input for MinuteShark AI, iOS Live Activities) without forking the dashboard into three products.
  • Offline as a mobile benefit — you can still work with the app when the cafe network is theatre. We are not publishing a CRDT paper about it.

What Capacitor does not buy: a second product. Search, clients, projects, tasks, and the running timer should feel like the same app you already use on the web. If mobile were a “lite” timesheet, consultants would leave the real system on the laptop and we would have failed.

Cloud sync is the default. Offline is the courtesy.

Workspaces are cloud-synced. Signup creates a workspace. The same clients, projects, and tasks show up on phone and laptop. That is a product promise, not a sloganeering “we never store your data” claim — we do store workspace data, with SOC2 Type II and ISO27001 in the security story, regular backups, and enterprise-grade encryption. Consultants need the week to exist on the next device, not to vanish with a laptop battery.

The engineering trade-off we accepted: do not pretend every tap is a mathematically perfect offline-first replica. Billing data is money-adjacent. Silent conflict resolution is how you get a 14-hour entry you cannot explain. So the architecture prefers a single workspace in Firebase over a heroic local-only mode that later surprises you. Offline support is there so a dead portal does not strand the clock. Reconciliation happens when you are connected again — with the same confirmation discipline on AI writes that we already described in why MinuteShark AI never writes until you confirm.

Subscription management stays on the web. Stripe billing lives with the Angular web app. Apple Pay and Google Pay are available as payment methods; the plan change itself is not something we hide inside a native IAP maze. The phone is for tracking and talking to the workspace. The desk is for changing how you pay. That split is boring. Boring is how you avoid a support queue about mismatched receipts.

What still has to work on a bad network

If you only remember one product list from this post, make it the jobs a consultant actually has in a dead zone:

  1. See the running timer. Elapsed time, start time, task / project / client. Click the clock later to edit start and end if you mistimed a lunch.
  2. Start or stop from the surfaces you already use — dashboard search, the to-do widget, a project task list — not from a settings archaeology hunt.
  3. Get a reminder that is local. Average duration, a specific time of day, or a regular interval. A reminder that requires a live socket is a reminder that fails in the basement.
  4. Talk to MinuteShark AI when you can. Type or speak; on mobile, microphone → transcript review → send; then a proposal card you confirm. We do not pipe a noisy room into a silent write.

Algolia still powers the “Search anything or start a task” box when you are online. Chart.js still draws reports when you generate them. Quill still holds the notes you paste after the meeting. None of those libraries are the reason the phone app exists. Capacitor is. The libraries are how the same Angular app stays a keyboard-first web product on the days you are at a desk.

What we measure instead of “offline coverage %”

Internal dashboards (PostHog) can tell us whether people open mobile after a workshop. They cannot tell us whether a freelancer trusted the duration. So the tests that matter look like product, not connectivity theatre:

  • Did the person get a local reminder, or did we only notify if a tab was foregrounded?
  • Did we keep one timer, or did Capacitor accidentally look like a second device with a second clock?
  • After the network returned, did History show the entry on the task they meant — the leaf work under client → project → task — or a ghost from a failed write?
  • If they used voice, did they still review the transcript and the confirmation card?

jsPDF, docx, and xlsx are irrelevant in the lobby. They matter on Friday when a report becomes a document. The mobile engineering bet is that Friday is possible because Tuesday’s site visit did not fall on the floor.

If you are building a similar app

Wrap the real product. Do not ship a postcard of it. Put notifications on the device. Keep one authoritative workspace in the cloud. Treat offline as courtesy, not as a second source of truth. Leave billing admin on the web. And do not “solve” connectivity by watching the user’s screen — that is a different product, for a different buyer, and it is the opposite of what independents asked us for.

MinuteShark AI is included on every plan (Starter 30 messages/user/month, Standard 300, Enterprise 2,000, trial 120). The native apps are part of the same product, not an add-on SKU. Onboarding is still Add Client → Add Project → Add Task → Start Task, whether you are on fiber or on a lobby portal that has not loaded yet. The getting started guide is the short version; the features list is the longer map.

Previous Post Back to Blog Next Post