Skip to content
All work
In progress — client work

Ausdal Value Navigator

Know what your practice is worth — and what would make it worth more.

Ausdal Value Navigator live homepage

The problem

A practice owner planning their exit has no cheap way to find out what their book is worth, and no read at all on the diligence risks that would knock the price down. The alternative is a paid valuation engagement — too heavy for someone who is still just deciding whether to sell.

The approach

The whole product hangs off a deterministic engine in lib/valuation: it never reads the clock, generates randomness, queries the database, or calls a model, so the same inputs always yield the same output. That is a product requirement rather than a style preference — an advisor cannot take an unexplainable number to a buyer — and it makes the engine exhaustively unit-testable and lets a report’s scenarios be recomputed from stored inputs instead of persisted separately. Every valuation multiple lives in one heavily commented config file written to be read by the client, so confirming the methodology is a one-file data change against an already-tested engine. Built on Next.js 16 + React 19 with Drizzle on Aurora Serverless v2, Auth.js v5 magic-link auth over SES, and a Vitest + Playwright suite on SST 4.

Highlights

  • Three verticals and 20 business types, each valued on the measures its own market actually uses
  • A pure, deterministic valuation engine — no clock, no randomness, no I/O — so the same inputs always produce the same number
  • Every stored valuation carries an engineVersion, so a methodology change never silently rewrites what a client was already shown
  • One shared content model renders both the web report and the @react-pdf/renderer document

Tech stack

Next.js 16React 19Drizzle ORMAurora Serverless v2Auth.js v5Amazon SESReact PDFZodSST 4Playwright

Want to talk through how this was built?

I build and ship production apps end-to-end. Happy to dig into the architecture, the tradeoffs, or your next project.