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.

Role

Sole Developer & Architect

Context

Active / Production

Year

2026

Links

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.

Main dashboard: card based overview
Jobs list: filterable work orders

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.
Routes panel: multi stop planning
Route in execution: field navigation

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.

Job creation: quick assignment flow
Job detail: full work order view
Activity feed: real time field reporting
Payment tracking: field collections
Supplies log: materials and cost tracking
Client management: contact and history
Team panel: member overview
Role and permission editing

E2E test: registration flow

Maestro automated test: user registration and onboarding (emulator)

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.