Codifi
The whole field workflow in one product, built for crews with no signal.
- My part
- Product designer, then Head of Product. I designed it and wrote most of the frontend.
- When
- 2023 to 2026
- With
- A small team. Hugo Bounoua, our solutions architect, built the sync engine and much of the backend.
- Built in
- TypeScript, React, React Native and Mapbox

One survey should not need six apps.
Fieldwork ran on a stack nobody chose. A form builder for the forms, a map app for the points, web GIS for the layers, a spreadsheet for checking, a database somebody built years ago, and a word processor for the report. Every seam between them was a manual handoff, and a place the data could go wrong.
Codifi replaces the seams. You set a project up once, collect on an iPad with no signal, check the data on the web before you leave the site, and the report is written from the same records.
Hydra: sync you do not have to think about
Hydra is Codifi’s offline-first sync engine. Every change is saved on the device the moment it is made, and travels when there is signal. Nobody presses save, and nobody stands in a field watching a bar fill.
Hugo Bounoua, our solutions architect, built the engine. My job was everything a crew sees of it, and the rule I held to was that sync should never be something they have to manage. It has one icon and three states. When two people change the same field while they are apart, the most recent edit wins, and the older value stays in the history, where anyone can see it and bring it back.
Version 3.3 went a step further with Nearby Sync. Two tablets in the same field trade their records directly, with no internet involved. Later, whichever one finds signal carries the crew’s records up with it.

Try it: two tablets, no signal
- Turn the signal off on both tablets.
- Change the depth on each one. They now disagree, and neither minds.
- Bring one signal back, then the other, and watch the office.
Maya’s iPad
STP-014
Everything here is synced.
Tablet to tablet. No internet.
Sam’s iPhone
STP-014
Everything here is synced.
Both tablets have signal, and everything is synced.
What the office sees
- Result
- Negative
- Depth
- 40 cm
| When | Who changed what | Recall |
|---|---|---|
| 9:12 | Maya on iPad. Depth: new to 40 cm | |
| 9:12 | Maya on iPad. Result: new to Negative |
A toy of mine in a couple of hundred lines, not Codifi’s code. It does what Codifi’s public documentation says a crew will experience, and nothing more.
Ripple: forms that do the math
Ripple is Codifi’s formula engine. Someone writes a rule once, in the project’s template, and it runs everywhere the form does: on an iPad with no signal, in the browser, and on the server. It adds up repeating rows, reaches up to a parent record, asks a question only when it applies, and does geometry: area, length, distance to a line.
What I cared about was how that feels to fill in. A calculated field is marked, so you know a formula is behind it. If you type over it, your value stands, because the person at the hole knows something the formula does not. And a question that does not apply is simply not there.

Try it: a shovel test that fills itself in
A shovel test on transect T-2
STP-014
Stratigraphy
| Top (cm) | Bottom (cm) | Texture | Thickness FX |
|---|---|---|---|
Result
Location
Drag the point, or use the sliders.
The five rules behind this form
ValueThickness
Each horizon’s thickness is its bottom minus its top.
{"-": [ {"getFieldByLabel": [ {"var": ""}, "Bottom"]}, {"getFieldByLabel": [ {"var": ""}, "Top"]} ]}Right now: 20 cm, 25 cm
ValueTotal Depth
Total depth is the deepest horizon’s bottom. If you type a depth yourself, yours wins.
{"maxRepeater": ["Horizon", "Bottom"]}Right now: 45 cm
VisibilityArtifact Count
Only ask how many artifacts when the result is Positive.
{"==": [ {"getFieldByLabel": [ {"var": ""}, "Result"]}, "Positive"]}Right now: hidden
ValueDistance from Transect
Measure from this point to its parent transect’s line, to a tenth of a metre.
{"round": [ {"pointToLineDistance": [ {"var": ""}, {"parent": [ {"var": ""} ]} ]}, 1]}Right now: 3.3 m
VisibilityOff the line
Warn when the point is more than 10 m off the transect.
{">": [ {"getFieldByLabel": [ {"var": ""}, "Distance from Transect"]}, 10]}Right now: hidden
The rules are written the way Codifi’s docs show Ripple storing them, as JsonLogic. The little engine running them here is mine, not Codifi’s.
Reports: the deliverable writes itself
The report is the reason the fieldwork happens. In Codifi it is a Word or Excel file with tags in it. You bring the template your agency already accepts, and the server fills it from the records: fields, tables of child records, photos with their captions and bearings.
Nothing is retyped, so nothing is mistyped. The Memphis office cut its post-field data entry from days to hours.
Try it: one template, the same records
This report is written from the shovel test in the form above. Go back and mark STP-014 Positive, and the last line here changes.
Anything in double curly brackets is filled in from the records. Edit it. A tag the engine cannot read prints __INVALID TAG__, the way a real report does.
The report
Transect T-2: shovel test results
Recorded by Maya R. on October 14, 2026
3 shovel tests were dug on this transect.
| STP-012 | Negative | 60 cm |
|---|---|---|
| STP-013 | Positive | 45 cm |
| STP-014 | Negative | 45 cm |
Cultural material was found. See the positive tests above.
Every tag was filled.
The tags follow Codifi’s documented conventions. The engine is another toy of mine.
Maps, and knowing exactly where you stand
Most of what I built with my own hands is here. A record in the field is a place before it is anything else, so the map had to be good enough to trust and quick enough to use with gloves on.
- Draw Mode
- Capture and edit points, lines and polygons on the device, with vertex editing and undo.
- Magnet Snapping
- The crosshair pulls onto geometry that is already on the map.
- Offset Capture
- Record a point you cannot stand on, from a bearing and a distance.
- LiveTrack
- Walk the line and it draws itself, with more points on the turns.
- Camera Compass
- The camera shows your bearing, referenced to true north, and saves it with the photo.
- External GPS
- Survey-grade receivers over Bluetooth, from Emlid, Bad Elf, Juniper, Trimble, EOS and Garmin, with the quality of the fix shown as you work.



One design system, three surfaces
I owned Codifi’s design system. We refined it with an outside agency, and then I led a full redesign across the web app, the mobile app and the marketing site, so a crew lead on an iPad and a GIS analyst at a desk are plainly looking at the same product.
I designed in code. A prototype in the real product went to a field crew, and what came back went into the next build. I also designed how the product is presented. These are its App Store screens.




Motion with a reason
Nearby Sync needed an icon for something nobody can see: two tablets trading records with no internet between them. I drew it out of Codifi’s own mark. Unwind the ring and it lays out as a stream between two points.
It moves only when something happens. Turn Nearby Sync on and the stream grows out of nothing. When someone connects, a pulse runs out and back, because sync goes both ways. Then it stops. At rest it is a still drawing, so an icon that sits in the nav bar all day costs the battery nothing.
I worked the motion out as a prototype with an AI agent, then built it into the app.
Try it: the Nearby Sync icon
Nearby Sync is on and nothing is happening, so nothing is moving. The icon is a still drawing.
Logo to stream in five frames, drawn by the same code that animates it.
- The mark
- Its gaps close
- The ring unwinds
- It uncurls
- The stream
My motion study, rebuilt for this page with the same geometry and timings. It is not the app’s code.
Four releases in seven months
Over the last year I wrote about half of the web app’s commits and more than half of the mobile app’s, while owning the roadmap, the docs and the release notes.
Version 3.0
February 12, 2026
Hydra, the offline-first sync engine. Activity history on every project and record.
Version 3.1
March 31, 2026
Calculated fields and conditional visibility. Annotation and measurement. LiveTrack. QR codes and batch record creation. A QA table on the device.
Version 3.2
June 24, 2026
A redesigned web app. Raster map layers. Overlay data tables. Navigate To. A refreshed data entry screen. Auto-numbering.
Version 3.3
August 23, 2026
Nearby Sync. Single sign-on and multi-factor sign-in. Camera Compass. Magnet Snapping and Offset Capture. Draw Mode on the web. File Geodatabase export.
Building with AI agents
Since August 2025 I have written production code with Claude as a daily collaborator: more than 1,100 AI-assisted commits across the web and mobile apps.
The part that mattered was not the typing. It was writing down what the project knows, in a form an agent can use: layered docs that say how this codebase works, what its conventions are, and what not to touch. People read the same docs, and they are better for having to be that clear.
Then I taught the team. I wrote the guide a new teammate used to pick the workflow up.

Then get a whole company to use it
In 2024 Codifi was folded into its parent, Chronicle Heritage, and my job grew from shipping features to changing how a national firm works. That meant training crews and managers, visiting sites in Phoenix, Tallahassee and Memphis, listening to skeptics, and earning trust one office at a time.