Geospatial field data collection for crews with no signal. I designed it, wrote most of its frontend and moved a national firm onto it.
- My part
- Founding designer, then Head of Product.
- When
- 2023 to 2026
- With
- 55 people at its peak, with nearly 30 in engineering. Later, a core product team of three. Who built what
- Built in
- TypeScript, React, React Native and Mapbox
- Its site
- www.codifi.com, which I rebuilt as well.

What a year of it came to
- 11% to 44%of project revenue in the domestic offices ran through Codifi, 2025 jobs to 2026 jobs
- 13 to 108people recording in Codifi each month
- 777 to 11,190records captured in a month
- 95%of Memphis’s 2026 field work ran in Codifi, with its margins held
- 38%fewer GIS hours after fieldwork per revenue dollar on finished Codifi jobs
- Days to hoursof data entry after fieldwork, in Memphis
At Chronicle Heritage. The user and record counts are August 2025 to August 2026. The GIS hours compare finished 2026 field jobs. The Memphis figures are that office’s own. How the rollout went
Part 1 of 3
What I made
One app in place of the six a survey used to need.
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.
I designed Codifi to replace 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. The report is written from the same records.
Eleven features I designed for a day in the field
Four of the eleven features I designed, each in a render of the real app. Any of the eleven opens for a closer look.

LiveTrack
Walk the boundary or the transect. The line draws itself as you go, with GPS accuracy on every point.

Bring your GNSS receiver
Pair a Bluetooth receiver. Satellites and fix quality ride along with every point you capture.

Offline map areas
Download the project area’s basemaps and imagery before you lose signal.

Record history
Who changed what and when, on every record. Review it before anything ships.
Seven more
Part 2 of 3
How I got a firm to use it
I worked with more than twenty offices and practice groups to get their fieldwork into Codifi.
More than twenty offices at once
I joined Codifi as employee seven and its sole designer. At its peak, the company had 55 people, with nearly 30 in engineering. I worked across product management, business analysis, engineering and QA before the restructure.
In August 2024 Codifi was folded into its parent. Chronicle Heritage is a cultural resource management firm working in all 50 states. Its offices ran fieldwork on web GIS, map apps, form builders and databases built by hand for each kind of project. My job became replacing all of it with one workflow, in more than twenty offices and practice groups at the same time.
That is a people problem more than a software one: a new tool costs good people time before it saves them any. So we built a cycle we could run with every team at once.

The cycle
- Deliverable inThe report or agency form the team has to produce, and the forms it uses today.
- An agent builds itThe composition, its forms and a demo project, set up in a sandbox for the team.
- They pick it apartThe team tries the demo against its own work, in a meeting with us.
- Recap and triageWhat changed and why, and a new demo. Back to step two until it fits.
- Into the fieldAnd when the product was the problem, the fix went to every team.
Around the cycle: training for crews and managers and site visits in Phoenix, Memphis and Pennsylvania. We moved more than 40 data models by API. What it came to is at the top of the page.
I had done this before, under a different title. Nine years as a pastor was nine years of helping people through change they did not ask for. The rest of that story is on the timeline.
In Memphis, days of data entry became hours
In late 2024 I spent days in the field with the Memphis crew, camera and notebook in hand. They were recording shovel tests in Codifi. I watched the work and turned what they told me into shipped changes within days.
The office cut its data entry after fieldwork from days to hours. By 2026 it was running 95% of its field work in Codifi with its margins held.

How I checked the result
I led a review of 1,082 jobs, joining revenue and costs to Codifi usage and GIS timesheets. Finished Codifi jobs held their margins on field-heavy work. GIS hours after fieldwork were 38% lower per revenue dollar on finished Codifi jobs. That comparison covers the firm’s jobs, not just Memphis.
Work that agencies review
What crews recorded in Codifi went into the reports state and federal agencies review. So the product had to meet each agency’s rules as well as the crew’s day.
- State and federal submissions
- Each state and territory had its own forms and rules. I configured Codifi jurisdiction by jurisdiction so its reports filled each agency’s own templates. They went to state historic preservation offices and to federal agencies like the Bureau of Land Management and the Forest Service.
- Defense
- The Defense POW/MIA Accounting Agency was one of Codifi’s first customers. I led the relationship and ran discovery and scoping. I built its configuration and training. Its teams successfully used Codifi on two missions in Europe.
- Security and accessibility
- I owned Codifi’s part of a CMMC Level 2 review for controlled unclassified information. I built in single sign-on and multi-factor authentication for enterprise users. I designed it to WCAG 2.2 AA.
I cut an office’s setup from weeks to hours
Bringing an office on used to mean weeks or months on a few databases across two or three offices. I used AI agents to build each team’s configuration from the forms and reports it already used.
I could turn a database around in hours and put a demo in front of the team. Then I folded in their changes and sent back the questions we still needed to settle. That let us keep working with up to twenty offices at a time.
What made it work was writing down what each project knows, in a form an agent can use: layered docs that say how the codebase works, what its conventions are and what not to touch. Then I taught the team to work the same way.
Part 3 of 3
How I designed and built it
I designed in the real product and put builds in crews’ hands. What they told me went into the next release.
I led the redesign across product and marketing
A crew lead on an iPad and a GIS analyst at a desk work from the same records. They should plainly be looking at the same product. I directed the rebrand with an outside firm and carried it into the frontends. Then I led a full redesign across the web app, the mobile app and the marketing site.
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 rebuilt the marketing site and made the release videos. The App Store screens below are mine too.




I rebuilt the marketing site around the whole workflow
I redesigned Codifi’s marketing site and rebuilt it in Next.js, replacing WordPress. The story follows a record from a paper form to the iPad, through checking in the office and into the report. The clips below are from that site.
Collect in the field
Check in the office
Deliver the report
- One thing at a time
- The first hero showed three devices at once. I changed it to a sequence with one object on stage at a time. The sync story moved further down the page where there was room to explain it.
- The product’s own design
- I used the product’s typography and colors on the site and showed the real app in the device renders. The App Store screens above carry the same design into the listing.
- One next step
- The site leads to booking a demo. Each section explains another part of the work before asking someone to book time.
I made offline sync something a crew never has to manage
A crew can spend the whole day out of signal. So the rule I held to was that sync should never be something they have to manage. 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.
Hydra is Hugo’s offline sync engine. My part was making it make sense to the people in the field: the cloud sync status, its icons and the motion that shows what is happening and when. When two people change the same field while they are apart the most recent edit wins. The older value stays in the history, where anyone can see it and bring it back.
Version 3.3 added Nearby Sync. Two tablets in the same field trade their records directly, with no internet involved. Whichever one finds signal later carries the crew’s records up with it.

Try it: two tablets, no signal
Step 1 of 4Turn the signal off on both tablets.
Maya’s iPad
Turn the signal off
STP-014
Everything here is synced.
Sam’s iPad
Turn the signal off
STP-014
Everything here is synced.
Both tablets have signal, and everything is synced.
What the office sees on the web
- 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 |
Two iPads with no signal and the office’s view under them. A guide takes you through it in four steps, from losing signal to seeing which edit the office keeps.
It was built for a bigger screen. On a phone it stacks into a long scroll.
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. 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.
I built the map tools crews trust in the field
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. Most of what I built with my own hands is here.
LiveTrack, snapping, the camera compass and external GPS are among the features above. Two more tools did the daily work:
- Draw Mode
- Capture and edit points, lines and polygons on the device, with vertex editing and undo.
- Offset Capture
- Record a point you cannot stand on, from a bearing and a distance.

“Software can’t replace the site visit”
A senior field director told me that. However good our app got, he said, he would still have to go out to a site and look. Only there could he see how everything sat and which way it faced.
I took that as a challenge. I designed and built the answer on the phone and on the web.
Field directors brought it up to me more than once, and they asked for more. Next on their list was taking the photo points and their cones out as a GIS file.
Native where it counts
React Native let us write the mobile app once. Fieldwork asked for things it does not do on its own. So I treat React Native as a way to reach the platform, not a way round it.
Where it stopped I wrote the native part. A diagnostics module in Objective-C reports memory, CPU and thermal state. I wrote several Expo config plugins. I added Emlid and Bad Elf receivers to the app’s GPS accessory bridge. The bridge itself is mostly a colleague’s work. Those two protocols are mine.
In the current release the interface uses SwiftUI components through Expo UI, native sheets and the system’s Liquid Glass material. It behaves like the iPad it runs on. From version 2.0 on I also ran the iOS releases: I built the app, uploaded it to App Store Connect and took it through two Expo SDK upgrades.
I designed forms that do the math
A field form is full of math. Repeating rows get added up, values come down from a parent record, some questions only apply sometimes and the map brings area, length and distance to a line. The person filling it in is at the hole with no signal.
Ripple is Hugo’s formula engine. It runs a rule written once in the project’s template everywhere the form does: on an iPad with no signal, in the browser and on the server.
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) FX | Bottom (cm) | Texture | Thickness FX |
|---|---|---|---|
Step 1 of 5
Change where the first horizon ends. Try 30.
Result
Location
Drag the point, or use the sliders.
The six rules behind this form
ValueTop
The first horizon starts at the surface. Each one after starts where the one above it ended, and nobody types it.
{"if": [ {"==": [ {"rowIndex": [ {"var": ""} ]}, 0]}, 0, {"repeaterFieldAtRow": ["Horizon", "Bottom", {"-": [ {"rowIndex": [ {"var": ""} ]}, 1]} ]} ]}Right now: 0 cm, 20 cm
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
A shovel test form beside a small map and the rules that drive it. A short tour walks you through five changes and marks each rule as it fires.
It was built for a bigger screen. On a phone it stacks into a long scroll.
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
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.
A report template on the left and the page it writes on the right, from the shovel test in the form demo above. Mark STP-014 Positive up there and the last line here changes.
It was built for a bigger screen. On a phone it stacks into a long scroll.
Features I designed and built
I have been on the product since version 1, through version 2 and more than 25 releases since. These are some of the features I designed and helped build in the most recent ones.
I owned the roadmap, the docs and the release notes and cut the iOS builds myself.
Version 3.0
February 12, 2026
Hydra is Hugo’s offline sync engine. I designed and built what crews see of it: the sync status, recalling an earlier value and a history of every edit, offline ones included.
Version 3.1
March 31, 2026
The forms’ calculated fields and conditional visibility, on Ripple (Hugo’s formula engine). LiveTrack. Annotation and measurement. QR codes and batch record creation. A redesigned records list and a QA table on the device.
Version 3.2
June 24, 2026
The redesign across web and mobile. Pipelines for geospatial rasters: USGS 3DEP LiDAR flattened into digital elevation models, with hillshades lit from several directions or one the user picks. Historical topo and other raster layers.
Version 3.3
August 23, 2026
Nearby Sync’s experience and its icon. Camera Compass. Draw Mode and GeoTools on the web: trace, snap and shape history. Survey-grade positioning from the Emlid Reach RX2.

Three of us rebuilt it.
After Codifi’s larger startup phase, Hugo, Jonathan and I rebuilt the product and led its rollout. Each of us covered what the others could not: what to build, how it works underneath, and whether it actually does.
Alex Voigt
Head of Product
Designed the product and its design system and wrote most of what you touch in it. Took a minimal first version, redid most of its early designs and led it to a company-wide rollout.
Hugo Bounoua
Solutions architect
Architected Hydra, the sync engine, and Ripple, the formula engine, and built much of the backend underneath them.
Jonathan Sims
Project manager
Ran the projects, the regression testing and QA, and the log of what users asked for. Each release started from what crews needed and was tested before it went out.
I would work with both of them again tomorrow.
The demos on this page are mine. They do what Codifi’s public documentation says a crew will see and contain none of Codifi’s code.