Professional work / AssetWorks LLC / 2026
Replatforming a field asset-validation product
Moved a legacy Oracle and SOAP web product to a modern TypeScript stack, without breaking the mobile apps field teams were already using.
Went live in October 2026
- 16
- mobile API endpoints covering the full mobile contract
- 4
- codebases audited to define the migration surface
- 1 flag
- per device for instant rollback to the legacy backend
- 12
- destructive actions audited for data-loss safety
The problem
Field teams scan physical assets and confirm their records with mobile apps that talk to a legacy Oracle database through Java SOAP services. The web product needed to move to a modern stack, but devices in the field could not all be updated at once, and any break in the mobile contract would stop people in the middle of an inventory.
My role
Primary developer on the new web application and the bridge that lets the existing mobile apps run against it: architecture, implementation, migration design, and verification.
- Field devices
- Android app (Kotlin)
- iOS app (Swift)
- Hardware scanners and RFID
- Legacy path
- Java SOAP services
- Oracle database
- Bridge
- Per-device backend flag
- 16-endpoint mobile API
- Dual-write device registration
- New platform
- Next.js web app
- Fastify services
- PostgreSQL
- AWS S3 images
What I did
Find the real contract before replacing it
Ran an AI-assisted audit across four codebases (web, Java web services, database code, and the Android/iOS apps) to pin down which SOAP methods the mobile apps actually call. Several methods that existed in the code were not used at all, which narrowed the work.
Rebuild on Next.js, Fastify, and PostgreSQL
Rebuilt the web app as a Next.js frontend over Fastify services and PostgreSQL, run locally as a multi-service Docker Compose stack. Replaced mock screens with live queries and worked through PostgreSQL edge cases during integration.
Bridge the mobile apps, with rollback per device
Built a 16-endpoint mobile API covering the full mobile contract: auth, subsets, field settings, validation download and upload, cycle counts, sync, and lookups. I compared three migration options and chose routing inside the existing service, controlled by a per-device flag, so any device can be switched back instantly.
Move data and files deliberately
Designed a new PostgreSQL schema for mobile device registration to replace legacy Oracle tables, with a dual-write path during the transition. I chose schema-level isolation over a second database so cross-schema joins, backups, and monitoring stay simple. Moved image attachments to AWS S3 with presigned downloads.
Protect people from data loss
Audited every destructive action in the app (12 in all) and added confirmations where three were missing. Added a recovery-restore feature that runs as one atomic transaction and checks that a snapshot belongs to the same customer before restoring it.
Stack
- TypeScript
- Next.js
- React
- Fastify
- Node.js
- PostgreSQL
- Docker Compose
- AWS S3
- Oracle (legacy)
- SOAP (legacy)
- Tailwind CSS