← All projects

APCL

An offline-first, cross-platform app that runs pre-trained machine-learning models for pavement evaluation entirely on-device — no internet, no server, no excuses in the field.

FlutterDartONNX RuntimeMaterial 3GoRouterfl_chart

A pavement engineer’s real workplace isn’t a desk — it’s the shoulder of a road, a runway, a remote stretch of highway where the cell signal died kilometers ago. That’s exactly where the analysis needs to happen, and it’s exactly where most software stops working: the moment it needs a server, it’s useless.

APCL flips that. It’s a pavement-analysis app that runs pre-trained machine -learning models directly on the device — no connection, no backend, no round -trip to a cloud. You open it on a phone in the field, type in the field measurements, and get a prediction on the spot.

What it does

  • PCI prediction. Computes the Pavement Condition Index from field parameters, then feeds it into a decision flow that recommends maintenance actions.
  • EFC evaluation. Functional and friction evaluation, split into two paths — FI and NF — each backed by its own model, with the FI result able to prefill the NF analysis so the two flow together.
  • PG grade. Predicts the binder failure temperature from rheological inputs (viscosity, torsion, softening point, penetration) and turns it into a recommended PG grade.
  • SDCI tooling and an IMT Pave Express information module round out the pavement-engineering toolkit, with results rendered as interactive charts, not static numbers.
  • Works anywhere. One app across Android, iOS, Windows, macOS and Linux — and, crucially, it works with the network off.

Under the hood

The whole product is built around one hard constraint: the machine learning has to run on the device. That decision shapes everything.

On-device inference with ONNX Runtime. The models are exported to the ONNX format and loaded straight from the app’s bundled assets at runtime. Inference runs locally through ONNX Runtime over Dart FFI — input parameters become a typed tensor, the session runs, and the prediction comes back, all without a single network call. Nothing about a measurement ever leaves the device.

A platform-aware service layer. ONNX Runtime relies on native libraries that don’t exist on the web, so each model sits behind its own service with conditional compilation — a native implementation where dart:io is available (mobile and desktop) and a graceful stub elsewhere. The same calling code runs on every target; the right backend is wired in at build time. The services also degrade gracefully: if the native runtime is missing on a given device, the app stays up and reports the limitation instead of crashing.

One codebase, five platforms. Built on Flutter / Material 3, with GoRouter centralizing navigation behind typed route constants and fl_chart turning model outputs into live visualizations. The model files ship as app assets, so the entire ML capability travels inside the binary — install it once and it’s fully functional offline forever.

The stack

  • App — Flutter (Material 3) with Dart 3, GoRouter for typed navigation, fl_chart for interactive result visualizations.
  • Machine learning — four pre-trained models — PCI, PG, and EFC (which splits into its FI and NF sub-models) — exported to ONNX and executed on-device with ONNX Runtime via Dart FFI; per-model service layer with conditional native/web compilation.
  • Platforms — Android, iOS, Windows, macOS, Linux from a single codebase; Firebase Core for app integration and distribution.

Worth noting

I led APCL as lead engineer of a team of three, owning the full lifecycle — from architecture and the ML integration strategy through the UX and the cross-platform builds. It’s in active development now, with a public launch on the way.

The standout part is the engineering bet itself: putting real machine-learning inference fully on-device and offline-first, across five platforms, from one Flutter codebase. Most “ML apps” are a thin client in front of a cloud endpoint — the moment the signal drops, they’re dead. APCL is the opposite. The intelligence lives in the binary, the analysis happens where the road is, and the network is never in the critical path. That’s the difference between software that demos well and software an engineer can actually rely on in the field.

Coffee & talk?

Like what you just read? I build products like this end to end — and I'm always up for a conversation. Let's talk about yours, or just trade notes over coffee.

Rentheria · Guadalajara, México