
The visit becomes a service order right there in the customer's yard — with or without a signal
Reticar Motores has been rebuilding heavy-duty engines in Chapecó for over 40 years, and its sales team lives on the road — trucking companies, diesel shops, farming co-ops across western Santa Catarina, northern Rio Grande do Sul and southwestern Paraná. The old app failed exactly where it couldn't: data sync. Epicora built the replacement — an offline-first mobile app (iOS and Android) and a full web panel —, migrated 3,819 customers and stitched together what had been separate: the visit, with a geolocated check-in, becomes a service order with a photo of the part, in the same place and the same minute.
- Client
- Reticar Motores (Chapecó, Brazil)
- What we did
- Full replacement of the field sales system — offline-first mobile app for reps plus web admin panel, with the entire database migrated
- Platform
- iOS and Android app (React Native · Expo) · Web (React 19 · Vite) · NestJS API · MongoDB · AWS
The starting point
Reticar wasn't starting from scratch — and that's what makes this harder, not easier. They already had an app, custom-built years earlier, that the sales team used every day. The problem: it had frozen in time — legacy code with no one maintaining it, and recurring bugs concentrated in exactly the part a field team cannot lose: data synchronization. When sync hangs, the rep isn't stuck with an ugly app; the rep is unable to work.
And Reticar's work happens on the road. The sales team serves machine shops, diesel mechanics, trucking companies and farming co-ops scattered across the countryside of three states — places where cell coverage is a hypothesis, not a fact. The rep arrives, inspects a cracked cylinder head in the yard, needs that account's history, has to log what they saw and open the service order. If any of those four things requires internet, the process breaks and turns into a note to be typed up later — with all the delay and rework that carries.
- Sync that froze the whole app — while it ran it blocked even basic actions, and it ran every single time someone opened the app.
- Legacy code with no maintenance: no new feature could ship without risk, and no one owned what already existed.
- Visits and service orders lived apart — what was seen at the customer didn't become a document in the same motion.
- Reps could see accounts that weren't theirs: the territory structure wasn't reflected in the system.
- No proof of physical presence at the customer — no time, no location.
The turning point
The founding decision was to treat the rep's app as a system that runs on its own and only then talks to the server — not as a screen querying an API. The app carries a local database on the phone itself and works off it: all 3,819 customers live on the device, search is local, the map is local, registration is local. When the signal returns, the queue uploads. That's the difference between "the app has an offline mode" and "the app is offline by design." It also changed when sync happens: in the old app it fired on every launch and froze everything; here it stopped being a toll gate at the door — each record created offline shows its own sync indicator, and work continues while the queue drains.
The second decision was to get the keyboard out of the way. Logging a visit by typing, standing in a trucking yard, doesn't happen — and what doesn't happen becomes a lost mental note. So the visit description became spoken: the rep records and the phone's own speech recognition transcribes into the text field, with a duration limit. No audio is uploaded anywhere and no external transcription service is involved — it's the device's native capability, which keeps the feature available in the field and the cost at zero.
The third was to make the system see Reticar's actual commercial structure. Territory became a four-level hierarchy — State, Macro-region, Micro-region and City — and reps are linked to regions, not to a list of accounts. Whoever covers the Chapecó macro-region sees Chapecó customers; whoever covers Passo Fundo sees Passo Fundo. Every grant and every revocation of that link is written to the audit log as its own event.
The decision that unlocked it
The check-in is what completes the visit — it isn't one more status button. When the rep arrives and checks in, the app records the time and geolocation, moves the visit from Scheduled to Completed, and immediately asks: "Create a Service Order for this customer now?". The order is born with customer and rep already filled in, and keeps a reference to the visit that originated it. That's what closed the gap between "I was there" and "I sold this" — and all of it works offline, because the customer's doorstep is exactly where the signal tends to disappear.
What we delivered
The rep's app, which works without internet
iOS and Android, published on both stores. Daily schedule, a map with every customer clustered by proximity, a customer list with local search across the entire base, service orders and profile — all reading from a local database on the device. Customer registration with validated tax ID and address by postal code, on-the-spot visit creation (for when the rep shows up unscheduled), and light, dark or system theme.
The visit with a geolocated check-in
A visit starts scheduled and only becomes Completed through the check-in, which records time and location — the proof of physical presence that didn't exist before. The description is entered by voice, transcribed on the device. One check-in per visit, no repeats; reversing it is restricted to administrators and is logged. And the full history of reschedules and cancellations is preserved, because in a sales operation what didn't happen is information too.
The service order born from the visit
A six-step wizard on the phone: parts for pickup with a photo taken on the spot — the cracked cylinder head, the alternator, whatever it is —, catalog services by category, parts by SKU, media, and the questions an engine shop actually asks: return the old parts? is it a bonus? Plus the vehicle details (plate, make, model, year, fuel, mileage, engine number). In the web panel the same order opens in full and exports to PDF in Reticar's identity.
The complete web admin panel
Customers, users, schedule as calendar or list, parts and pickups, services and categories, regions across four levels and service orders — all with search, filters, pagination and export. Three roles with distinct authority — Administrator, Operator and Sales rep — plus the structure that separates who owns the account from who the rep for it is: that's what lets the inside pre-sales cell open the order while the field rep stays the owner of the customer.
How we made it safe
Replacing the system of a live operation without stopping it
Delivery wasn't a "we go live on Monday." It was a seven-stage plan with a parallel-use period: during testing, Reticar's team ran the new app alongside the old one, with on-site training at the Chapecó headquarters, continuous support over WhatsApp and a formal in-person feedback round before the switch. Only then were the credentials handed over and the old system retired. Today Reticar runs 100% on the new one — and the project continued with a request board and active maintenance, not delivered-and-abandoned.
The entire base migrated, history included
3,819 customers were migrated from the old system keeping their original identifiers and registration dates — there are records from 2019 in the current base. That isn't an infrastructure detail: it's what lets a rep open the app and recognize their own book of business, instead of finding an empty system asking them to retype seven years of relationships. Migration was validated before the switch, and the customer map proves the real footprint of the operation — Chapecó holding the largest cluster, the rest spread across the countryside of three states.
Traceability instead of trust
Sensitive actions aren't erased, they're recorded. Deletions are soft deletes — customer, part, service and region leave circulation without leaving history —, every status transition of an order or a visit is logged with author, previous and new state, and granting or revoking region access is its own audit event. A check-in cannot be redone, and undoing one requires an administrator. Combined with region-scoped access, that's what makes auditable an operation happening 300 km from headquarters.
The outcome
The proof that the system stuck isn't the go-live date: it's that service orders keep coming in every day. Between July 16 and August 4, 2026 — the first three weeks in production — the team opened 76 orders, the most recent on the very day of this check. A system a team doesn't adopt leaves the counter frozen; this one didn't stop.
And the switch was total. Reticar doesn't keep the old app running in parallel "just in case," which is the most common ending when you replace a system in use: the seven field reps, the inside pre-sales cell and administration are all on the new one. Before that, the new app deliberately coexisted with the old during testing — trust was built on real usage, not requested in advance.
Related solutions
Related cases
Does your field team depend on a system that freezes when the signal drops?
Epicora builds apps that work offline by design — and replaces systems already in use without stopping the operation: the new one runs alongside the old until the team trusts it.