Aidan DavisHarmony

Full-stack engineer · web, mobile, and offline systems

I build software people use at work, end to end — field apps, office tools, sync, permissions, and the document pipelines underneath them.

About

I’m a full-stack engineer at RamRod Software, building inspection software for a housing business while I finish a CS degree at Swinburne. I’ve been there since 2022 and I own the whole stack.

Since 2025 I’ve been rebuilding the company’s toolchain from scratch. It’s a Convex, Next.js, and React Native monorepo, and about 1,100 of its 1,150 commits are mine. Three parts were hard: a multi-org permission model I had to design, not adopt, an offline sync layer that resolves conflicts without losing a day of field work, and a document compiler that turns a typed content model into the Typst PDFs clients get. None of those had a clean off-the-shelf answer.

Before the rebuild I maintained what it replaced: nineteen C# projects, three Office add-ins, and a Xamarin field app passing SQLite files between office and field with no central server. It taught me to reason about data consistency with no network to arbitrate, to make emitters injection-safe, and to write permission boundaries down rather than assume them.

Skills

Primary
TypeScriptC#ReactReact NativeNext.jsConvex
Working
.NETSQLitePowerSyncExpoBunZodTypstClerkAzureAzure OpenAIVSTOXamarinElysiaEffectDaytona
Familiar
BlazorAuth0PGlitelibSQLDrizzle

Experience

  • RamRod Software Pty Ltd 2022 — present

    Full-stack engineer — principal author of the current inspection platform

Education

  • Swinburne University of Technology expected 2028

    Bachelor of Computer Science, in progress

Selected work

Gus the inspection platform

Highlights

Written on site
Inspectors capture as they inspect, so hours of report writing left the working day.
One system
Three Office add-ins, a field app, and a file share collapsed into one place to look.
In daily use
Darbecca’s inspectors and office staff run every job through it, booking to delivery.
Records came across
Two decades of legacy records migrated in, so nothing had to be re-keyed by hand.
Principal author
I wrote 1,100 of 1,150 commits, about 372,000 lines across fifteen packages.
Backend scale
131 tables, 304 indexes, and 452 functions behind one web app and one field client.

Stack: Convex · Next.js · React Native · Clerk · TypeScript · Bun

Parts of Gus

Choosing the infrastructure
Failed early
Two stacks were proven unfit before either could become the thing to maintain.
Sync, not ORM
Testing Postgres offline is why the platform runs on a sync engine that survives no signal.
Nothing shipped open
Permissions landed before the screens they protect, so no release went out unguarded.
Decisions kept
Every rejected stack still runs from git, so the choice can be re-argued, not just asserted.
First attempt
A 2024 Blazor Server prototype answered the domain questions and lost on delivery.
Second attempt
The 2025 Next.js and Convex attempt reached 101 commits and 23 tables before it was cut.

Stack: Blazor · Auth0 · PGlite · libSQL · Drizzle · Convex

Typed document compiler
Vendor removed
The business stopped paying a third party to render the reports it sends clients.
No re-typing
The report compiles from what the inspector captured, so nobody re-keys it in the office.
No broken reports
User text can’t become document syntax, so a defect note can’t corrupt a client’s PDF.
Signed rendering
Rendering requests are signed and fail closed, so nothing renders on the service’s behalf.
Editor stays out
Editor state never reaches the document package, so an editor change can’t break old reports.
Two formats
One model produces both the PDF a client reads and the DOCX the office edits.

Stack: Typst · Zod · Bun · Elysia · Effect · TypeScript

Offline field capture
Hostile sites
Buildings with no reception and whole disconnected days still produce a finished report.
Evidence survives
Photos that can’t be retaken survive dropped connections without duplicating or vanishing.
Conflicts are visible
Conflicts and tombstones are records, so a bad merge can be read rather than guessed at.
Sync we control
Running the sync tier in-house makes an outage ours to fix rather than a vendor’s to schedule.
On-device data
A subset of the backend streams into on-device SQLite, so the app works with no signal.
Day-end reconcile
A full day of offline edits reconciles once the inspector has signal again.

Stack: PowerSync · SQLite · React Native · Expo · Convex

In-house agent runtime
Same permissions
Agents resolve through the same access rules as people, so nothing gains reach by automating.
Sandboxed work
Each thread runs real commands in its own sandbox, with results tracked as data.
Built in
The runtime lives inside the product, so it reads the same records everyone else does.
Runtime scale
About 22,900 lines of agent runtime, with threads forming an explicit delegation tree.

Stack: Convex · Azure OpenAI · Daytona · React Native · TypeScript

Database I/O reduction
Bill traced
One query was consuming 74 GB against a 50 GB monthly database budget.
Hidden rows found
A pagination bug that could silently skip records between pages surfaced and was fixed.
Measured first
Per-function bandwidth found the cost before anything was changed on a hunch.
Cause documented
Duplicate subscriptions, relation fanout, and invalidation were written up, not guessed.

Stack: Convex · React · TypeScript

Office and SQLite transport what Gus replaced

Highlights

Kept it running
Nineteen C# projects stayed live daily while their replacement was built alongside.
Failures got visible
Crash and usage telemetry turned a silent field app into one the business could debug.
Reports stayed right
A wrong report comes from a bad merge, so correctness there was the whole job.
Office automation
Word and Outlook generated and delivered reports without anyone re-typing them.
Notes on photos
Inspectors could annotate evidence on site, delivered across schema, capture, sync, and upload.
Nineteen projects
Nineteen C# projects, about 84,000 lines, across seven .NET target frameworks since 2019.

Stack: C# · .NET · VSTO · Xamarin · SQLite · Azure Files

Contact