Outback sunset at Menindee, New South Wales: a lone tree in silhouette against the last light
Photo: Dylan Shaw, Unsplash
Mobile consulting

Apps that survive the field.

For teams whose app is already in production and now has to hold up: crashes in the wild, a native module nobody owns, maps and sync that must work with no signal. The engineering is the same whatever the stack — plain React Native, Expo with a web target, fully native in Swift and Kotlin, or an installable web app; with Nitro or Expo Modules or neither. Senior, fixed-scope help from Sydney — not staff augmentation, not a greenfield agency.

99.5%+
crash-free users, through a full replatform
30×
faster map taps on Android, after the marker rig
~3×
category-median app engagement
21 GB → 2.3 GB
offline maps for nine regions, self-hosted

A good fit

  • A production app — React Native, Expo, or native — that has slowed down, crashes for real users, or is stuck between "the MVP shipped" and "this scales".
  • Native work: module debt, a New Architecture migration, a Swift or Kotlin hot path — as a Nitro module, an Expo Module, or a plain native module — or a fully native build where that's the right call.
  • An offline / sync / maps pipeline that needs someone who has built one before — on the phone or in the browser.
  • A product that wants a native-feeling app without an app store in the way: an installable, offline-first web app with sync that doesn't lose data.
  • A mobile surface that ships without a safety net and needs one: an integration harness and end-to-end suite that stays green, with QA in the loop.
  • A US or ANZ team that wants senior mobile judgment with real overlap: Sydney mornings meet US afternoons, and East Coast morning standups fall in the Sydney evening.

Offline-first: a tale of two apps

One is a React Native app with seven native modules, used across Australia and New Zealand; the other is an installable web app for a gym with no reception. Both treat offline as the normal state.

CamperMate's map of the South Island of New Zealand: campsite, food and activity pins across the whole island, with Free and Paid Campsites filters

CamperMate

React Native app · Head of Tech, TripTech / THL

A travel app whose users are, by definition, out of range. Every place in a country ships to the phone as an encrypted SQLite snapshot: built weekly from Postgres with an FTS5 index for search in 27 languages and an R*Tree for the map viewport, SQLCipher-encrypted, then re-keyed on install to a key that never leaves the device's keychain. Hourly patches keep it current, and one filter expression compiles to both SQLite and the online search engine, so results match with or without signal.

Where JavaScript wasn't enough, the answer was native: seven in-house Expo Modules in Swift and Kotlin, from an on-device tile server and a background snapshot downloader to a native marker renderer and memory-pressure hooks.

The map's tap had picked the wrong pin for a year, on three SDKs, with the documentation followed to the letter. What fixed it was a test rig on each platform that puts real fingers on real pins and reads the pixels back: it disproved our own theory twice, found the bug, turned up three defects upstream in react-native-maps, and cut Android tap latency thirty-fold. Which pin did you tap?

  • 99.5%+ crash-free users through a full replatform
  • Encrypted at rest; FTS5 + R*Tree; self-healing search index
  • 7 Expo Modules in Swift and Kotlin
  • Marker hit-testing fixed on iOS, Android and web; 30× faster taps on Android
  • 700+ test files, Maestro end-to-end, native harnesses run on device
The offline maps build in two stages: an OpenStreetMap extract becomes a vector tile archive, which is then drawn into the raster tiles the app loads
The tiles underneath are self-hosted too: OpenStreetMap cut to vector tiles once per region, drawn to raster once per style, 21 GB down to 2.3 GB across nine regions. How the maps pipeline works.
Rampset's home screen: the next two workouts with lifts, sets and weights, and a Start workout button

Rampset

Installable offline-first web app · free, open source, MIT

A strength-training app for a room with no reception. The browser's own database is the source of truth; the network is an optimisation. Sync runs through a Durable Object per user with an append-only op log, and a production data-loss incident became durable-sync, the library that now stands in front of it. It is free to use and self-host on your own Cloudflare account.

  • Installs from the browser, no app store
  • Works fully offline; rest timer survives the phone locking
  • Free to run on your own Cloudflare account
  • 256 app tests, 87 in the sync library
The story

Five ways to engage

Fixed scope, agreed exit criteria, contracted through Zack Design (Australia). All fees in USD; the bands are for one app of ordinary size.

Platform audit

Before you hire, migrate, or greenlight a rebuild.

A set of decisions, not a report: what to keep, what to replace, what to stop building, and in which order — with the reasoning, so your team can defend each call without me. Covers architecture, dependencies, crash and performance triage, the offline / sync / maps risks, and the build question itself — React Native, native, or web — the same calls made on CamperMate's app and its offline maps. I put my name to it.

Duration
1–2 weeks
Fee
US$12–22k

Rescue sprint

When the app is in production pain and you need a finite intervention.

One senior engineer, embedded in your repo with your team: stabilise crashes, cut jank, land a native hot path as a Nitro or Expo module or in a Swift and Kotlin codebase, unstick an offline / maps pipeline, or take a web app installable and offline-first. Exit criteria agreed before day one.

Duration
4–6 weeks
Fee
US$40–75k

Test harness

When releases are a leap of faith and QA is finding what CI should have.

A full integration harness and end-to-end suite for your app, written and wired into CI, then kept green. Tests are composable building blocks your QA team can assemble into new flows without an engineer, and AI-driven: failures are triaged and explained on every run, and coverage grows from the incidents that actually happen. Where the platform won't tell you what it did, the rig reads the screen — the approach that fixed CamperMate's markers.

Duration
6–10 weeks, then monthly
Fee
US$45–90k, then US$5–10k / month

Fractional lead

When mobile matters to revenue and you want senior judgment on tap.

Architecture decisions, the PR bar, release risk, experiments run to a decision (Statsig, GrowthBook or Datadog, with the metrics wired to your warehouse), and hiring interviews when useful, while your core team ships. Deliberately limited capacity — this is a boutique, not a full-time hire in disguise.

Duration
Monthly, about 15–20 hours a week
Fee
US$14–28k / month

Enterprise

When it's several apps, a large native-module surface, or many locales.

Any of the packages above, sized to the estate: an audit across a portfolio, a sprint that spans apps, a harness that has to cover all of it, or a lead across teams. Scoped on a short call and priced by app size rather than from the bands above.

Duration
Scoped to the estate
Fee
By app size

Audits often become a rescue sprint; a lead retainer usually follows a sprint that went well. Custom scopes are welcome.

Also on the record

Beyond Rampset: the libraries and tooling around it, and platform leadership from CamperMate, where Isaac is Head of Tech (TripTech / THL). The full account is on isaacrowntree.com.

react-native-nitro-unzip
Open-source ZIP extraction for React Native built on Nitro Modules — progress, cancellation, password support; about 500 files a second on iOS. Write-up.
durable-sync
The sync layer from Rampset, extracted into a zero-dependency library after a production data-loss incident: an append-only op log in a Durable Object's SQLite and a durable outbox on the client. No Postgres, no container. 87 tests, on npm. Write-up.
Nightly end-to-end suite with agent triage
A Playwright suite runs nightly against production; a failed run posts a signed report to thinkbot, an open-source Cloudflare Worker agent that investigates against GitHub, Datadog and Sentry and writes the explanation — and reports a suite that failed to run as its own incident, not as zero failures. How it works.
Experiments that end
The app's map peek was a three-arm Statsig experiment: the callout above the tapped marker won, shipped over the air, and the losing variants were deleted from the codebase rather than left behind a flag. On the web, flags go through OpenFeature with Datadog experiments and warehouse-native metrics in BigQuery, joined on the same visitor id the SDK assigns by — so the provider is one line and Statsig or GrowthBook is a swap, not a rewrite.
Platform leadership
Six production systems (the app, a Next.js platform, B2B, analytics, admin, a Cloudflare Workers edge fleet) with zero-downtime migrations between them.

How an engagement runs

  1. Discovery. A short call or written brief: stack, pain, constraints, what success looks like.
  2. Scope. A statement of work with fixed outcomes, timeline, assumptions and exit criteria.
  3. Contract. Signed with Zack Design; invoiced in USD.
  4. Delivery. The audit report, the sprint's merge train, or the retainer cadence — as scoped.
  5. Handoff. Documentation and an owner map. Follow-on work only if it still earns its place.

Questions

Couldn't we just point an AI model at the repo?

You can, and I use the same tools — CamperMate's marker fix started with Claude reading three SDKs' source instead of their docs. What a model can't do is carry the decision. It didn't take CamperMate's React Native app through a full replatform while it stayed at 99.5%+ crash-free, or decide that the offline maps should be self-hosted OpenStreetMap tiles, and get them from 21 GB to 2.3 GB. It won't be in your repo in month three when the plan meets reality, and nobody's name is on its recommendation. You're paying for the architect: the judgment about what to build, what not to, and the accountability that comes with it.

Can you work with a US team?

Yes. Sydney mornings line up with US afternoons, and US East Coast morning standups fall in the Sydney evening; the rest is async. Standup and review windows are written into the statement of work.

Expo or bare React Native?

Either. Expo managed, prebuild, and fully bare workflows are all fine. The audit recommends the shape that fits your release process and native-module needs rather than a preference.

Who owns the work?

You do. Everything produced under the statement of work is assigned to you, unless we agree otherwise up front — for example an open-source fix you'd like upstreamed.

How much capacity do you have?

Zack Design runs alongside Isaac's product leadership role, so capacity is limited and scoped on purpose. If the timing doesn't work you'll get a clear no, not a half-committed yes.

React Native, fully native, or a web app?

Any of them, and the audit says which. Plain React Native or Expo (with or without a web target) when one codebase should ship everywhere; fully native in Swift and Kotlin when the hardware, the platform APIs or the performance ceiling demand it; an installable web app when you don't need deep hardware access or app-store distribution and want to ship without review queues. Native modules are a tool, not a religion — Nitro, Expo Modules, or none. The offline data layer, the sync, the maps and the test rigs on this page carry across all of them: CamperMate is React Native with seven native modules where JavaScript ran out; Rampset is the same thinking in a browser, free and open source, so you can see exactly how it's built.

Is native modules / performance / offline really the specialty?

Yes. Native code in Swift and Kotlin — inside React Native as Nitro, Expo or plain modules, or on its own — crash and performance triage, and offline-first data and maps, on the phone and in the browser, are where the CamperMate and open-source work runs deepest. The packages above are built around them.

Start with a short note

Your app — React Native, native or web — and the outcome you need in the next 90 days. You'll get a reply with a straight read on fit.

[email protected]
isaacrowntree.com Sydney, remote