Skip to content
All work

Document management / title

A land-records scanner that filed 2,188 pages in a day and never blocks the scanner

Scan land records straight to the right lot: subdivision, unit, block, lot. Named automatically on the server.

Client
A 15,000-acre New Mexico land and hospitality operator
System
Records
My role
Design, build, and run
When
Sep to Oct 2026
Records by subdivision, sample data
Sample dataLand records filed by subdivision, unit, block and lot.

01 / Problem

What wasn't working.

Decades of lot files in filing cabinets. Scanning was slow, files were named by hand, and a network hiccup could stall the person at the scanner.

02 / Approach

What I built.

  1. 01

    Tablet app sets the location first: subdivision, unit, block, lot. The scan follows that location.

  2. 02

    Scanners drop PDFs on a buffer at the router. A receiver on the server routes each scan to the right tablet session.

  3. 03

    Design rule: nothing may block scanning. Naming and rotation fixes happen after, on the server.

  4. 04

    Expiring share links for sending a file outside the company.

03 / Architecture

How the pieces connect.

Kotlin / ComposeNext.js 16ConvexOpenWrt workerSQLiteTailscale
PDFnameScannerRouter bufferSMBReceiverserverTablet sessionlocation setArchiveConvexNaming workerPDFnameScannerRouter bufferSMBReceiverserverTablet sessionlocation setArchiveConvexNaming worker
DeviceEdge / networkServicePeople / UIDataAI

04 / Result

2,188

pages scanned and filed in one day. 77 sessions and 2,188 pages in one day. About 9,500 archive nodes. A nightly compaction cut the database from 19.99 GB to 74 MB. 183 automated tests across the receiver, router worker, and app.

File by place

Browse by subdivision, unit, block, and lot.

Server naming

About 10 s per page, rotation fixed, done after the scan.

Never blocks

The scanner keeps going while the network catches up.

Share links

Links expire. Access is logged.

Have a problem like this one?

Book a call

Next step

Tell me what isn't working.

A 30-minute call. You describe the problem, I tell you straight whether it's worth fixing and roughly what it costs.

Book a call