Active / Production · 2026
TUERCA
Field service management from the phone
Field service management app for technical teams: jobs, routes, supplies and collections. Published on Google Play and in production.
Technologies: React NativeExpotRPCDrizzle ORMPostgreSQLBetter-AuthSupabase
Overview
TUERCA is a field service management platform for small and mid sized service companies: work orders, multi stop routes, supplies, field collections and team roles. It runs as a React Native app published on Google Play, with a multi tenant backend behind it.
The problem
TUERCA started as a web SaaS dashboard for service professionals. The workflows were right, the usage was not: the person who needs the data is the technician, and the technician is on a roof, in a basement or in a van, never at a desk. Whatever happened during the day ended up being typed in at night, from memory.
So the product had to move to where the work happens. That meant rebuilding it as a mobile app, not wrapping the web one.
Decisions
- React Native with Expo: one codebase for iOS and Android, and over the air updates so a fix reaches technicians without waiting on a store review.
- Kept tRPC through the migration: the types the web app already had were reused by the mobile client, so what got rewritten was the UI layer and not the API.
- Drizzle ORM with PostgreSQL: typed schema and versioned migrations, which matters when the same database serves several organizations.
- Multi tenant from the schema up, with Better-Auth handling sessions and an Owner / Admin / Member role system: in a service company, who sees billing and who only closes their own jobs is not a detail.
- Route optimization instead of a map: the technician gets a list of stops and the app turns it into an ordered route, and each stop opens Google Maps with one tap for turn by turn navigation. Building the navigator was never the point, ordering the day was.
- Native calendar sync: jobs are pushed to the device calendar, so the schedule shows up where the technician already looks.
- NativeWind for the UI: the same utility vocabulary as the web version, dark mode first because the app is read outdoors and in badly lit places.
- End to end tests with Maestro on an emulator: the critical flows (registration, creating a job, closing it) are exercised as real gestures, so an update cannot silently break what a team uses every morning.
Job lifecycle
The full lifecycle of a job lives inside the app, from creation to collection:
- Job creation with client assignment, priority and scheduling.
- Activity timeline: technicians log updates from the field as the job moves.
- Supplies tracking: materials used, quantities and cost per job.
- Payment recording: field collections tracked per work order.
Every status change syncs across the team, so the office sees a job close at the same time the technician does.
E2E test: registration flow
Result
TUERCA is in production and published on Google Play, used by technical teams to run their day from the phone: they get the route, execute the stops, log supplies and record what they collected, with no second pass at the office.
The migration proved the part I cared about: with an end to end typed API and pure data access, going from web to React Native was a UI rewrite and not a rebuild. And Maestro turned the mobile release process into something I can repeat without crossing my fingers.