Case study · client engagement
Domex Lawn Care: bilingual iOS app + cutover-ready web for a Brevard County service business.
Live on the App Store · Next.js + Cloudflare web staged · EN/ES end-to-end · single-digit-$ infra · Open the app →
Context
Family-run lawn care business in Brevard County, FL, operating since 2012. The owner wanted a faster path from "customer needs a quote" to "customer has a quote in hand", without losing the personal, family-run feel that defines the business. The marketing channel (a GoDaddy Website Builder site) was working well enough that disrupting it for a tech rebuild was the wrong starting point.
What shipped first: the iOS app
Native iOS app, bilingual EN/ES, on the App Store as Domex Lawn Care.
The app went where customer pain was clearest: fast quote requests, photo attachments (customers send pictures of their yard), a plant catalog (Florida-friendly palms, shrubs, sod, natives) the owner can quote from, and 24-hour response framing.
Stack: Expo SDK 54, React Native, Supabase (auth + database), TanStack Query, Sentry for production error tracking, expo-camera for the photo flow, Maestro for E2E tests. Premium typography via Expo Google Fonts (Archivo Black, Inter, JetBrains Mono).
Submitted, reviewed, approved, live. No back-and-forth with Apple beyond the initial cycle.
What's staged: the web migration
Next.js 16 + React 19, deployed to Cloudflare Workers via OpenNext, bilingual via next-intl, contact pipeline via Resend, bot protection via Cloudflare Turnstile, form validation via Zod.
Built at domex-web.andrei-cabrera.workers.dev. Already serving traffic, already configured for the apex (NEXT_PUBLIC_SITE_URL=https://domexlawncare.com), with domexlawncare.com already provisioned as a Custom Domain on the Cloudflare side.
The Resend email pipeline went on a send.domexlawncare.com subdomain. That's safe to verify without touching the apex DNS or disrupting the customer's current GoDaddy site. DKIM, SPF, and DMARC records were added at GoDaddy ahead of the cutover, customer-paced.
Infra cost: single-digit dollars per month, all on free tiers (Cloudflare Workers + Resend free tier + Turnstile + Supabase free tier).
The judgment call: managed migration
The default move for a developer in this situation is "rip the GoDaddy site, deploy the new one, customer adjusts." That move trades the customer's confidence for the developer's pace.
Instead:
- App-first launch sequence. Built the piece where the customer felt the gap most acutely. Quote-to-customer time, not marketing channel.
- Email pipeline on a subdomain, not the apex. Verified the entire contact pipeline without touching live DNS. Risk-free preparation.
- Custom domain provisioned ahead of cutover. Cloudflare side is ready. When the customer chooses to flip the DNS A/CNAME at GoDaddy, the new site goes live in minutes, with no last-minute scrambling.
- GoDaddy stays live until the customer is ready. Their channel, their pace.
That sequence isn't more technically impressive than the alternative. It's more respectful. Senior client work is mostly about that delta.
Stack at a glance
iOS: Expo 54 · React Native · Supabase · TanStack Query · Sentry · expo-camera · Maestro · EN/ES
Web (staged): Next.js 16 · React 19 · OpenNext on Cloudflare Workers · next-intl · Resend · Cloudflare Turnstile · Zod · EN/ES
Migration discipline: Subdomain-first email verification · Custom-domain pre-provisioning · Customer-paced DNS cutover