Apptillion.
Case Studies

The constraint is the interesting part

Every one of these had a requirement that ruled out the obvious architecture — a credential nobody would hand over, a file nobody would upload, a golf course with no signal. Here is what that forced, and what shipped because of it.

01

DocketReady

Legal technology
Visit the live site

A federal court filing gets rejected for reasons that have nothing to do with its argument: a scanned page with no searchable text, an unflattened form field, a personal identifier left visible. The check exists, but it happens in someone's head at 9pm the night before a deadline.

The constraint

Every competing product asks the firm to hand over its CM/ECF credentials. For a solo attorney, giving a new vendor the keys to file on their behalf is a professional-liability question, not a software question. The product had to be useful without ever holding a credential — which ruled out the entire category of automated filing.

The decision

Run every deterministic check in the browser, so the document never leaves the machine. OCR and identifier scanning became an opt-in server job with an explicit retention choice, and the output never claims a redaction is confirmed — it flags a possible identifier and makes a human confirm it. Court-specific rules ship as versioned rule packs keyed to court and date, so a rule change is a data update rather than a deploy.

What shipped

  • Browser-local PDF analysis — encryption, searchable text, page size, fonts, attachments
  • Versioned per-court rule packs with effective dates
  • Stripe Checkout with a signed webhook and an idempotent event ledger
  • Filing-pack credits that are never granted from a URL parameter, only a verified session

Next.js · TypeScript · Supabase · Stripe

02

PayPreflight

Construction billing
Visit the live site

An AIA-style pay application is a spreadsheet where a single wrong retainage figure delays a payment by a month. The person preparing it is an office manager with eleven other jobs to bill, and the person catching the error is a project accountant who would rather not have to.

The constraint

Contractors will not upload a billing workbook containing job costs, margins, and subcontractor pricing to a stranger's server to try out a tool. The trust barrier came before the value could be demonstrated, which meant the usual free-trial-behind-a-signup pattern was dead on arrival.

The decision

The entire check runs client-side. No account, no upload, no server round trip — the workbook is parsed in the browser and the findings render locally. That single decision removed the objection that was killing the funnel, and it made the privacy claim structurally true rather than a policy promise. A sample workbook with planted errors lets a skeptical visitor see the output before touching their own numbers.

What shipped

  • In-browser XLSX parsing with no server upload path at all
  • Deterministic checks: summary math, retainage, schedule totals, duplicate lines
  • Downloadable CSV correction report keyed to cell references
  • A deliberately broken sample workbook for evaluation without risk

Next.js · TypeScript · Stripe

03

TeeLedger

League operations
Visit the live site

A golf league commissioner runs a season on a spreadsheet, a group text, and a laminated pairings sheet. Scores get entered twice, substitutes break the handicap math, and the standings are only correct until someone remembers a match from two weeks ago.

The constraint

Scores get entered on a phone at the turn, where the course has no signal. An architecture that assumed connectivity would fail in exactly the moment the product exists to serve — and a league that loses a card once never trusts the software again.

The decision

Offline-first, with a revision-aware score outbox in IndexedDB and a transactional sync RPC that resolves conflicts deterministically rather than last-write-wins. Finalized scores are immutable at the database level and every change lands in an audit log, because the thing a commissioner actually needs is to be able to prove what happened when two players disagree in the parking lot.

What shipped

  • Multi-tenant leagues with row-level isolation and published league subdomains
  • IndexedDB score outbox with revision-aware transactional sync
  • Immutable finalized scores plus a full audit log
  • Per-golfer annual Stripe checkout with signature-verified idempotent webhooks
  • PWA with generated icons and a service worker for genuine offline use

Next.js · TypeScript · Supabase · Stripe · PWA

04

LiftSignal

Public-record intelligence
Visit the live site

State elevator certificate reports are public, published on a schedule, and nearly unusable — a flat file with no history, no addresses that match anything, and no indication of what changed since last time. Independent service contractors want the changes, not the file.

The constraint

The valuable signal is the delta between two publications, but the state publishes only the current snapshot and overwrites it. Worse, an inference like 'this building's contract may be in play' is commercially useful and legally dangerous — a certificate entry does not establish that equipment is unsafe or that anyone is out of compliance.

The decision

Preserve every source snapshot on retrieval so change detection has something to compare against, and make the claims policy a structural part of the product rather than a footer. Every delivered row carries its source link, retrieval date, and a field-level confidence rating, and the language is constrained at the data layer: 'state-reported certificate event' and 'likely operator', never 'non-compliant'. Human review sits between extraction and delivery.

What shipped

  • Snapshot preservation with change detection between publications
  • Territory filtering, address normalization, and likely-operator research
  • Field-level confidence with source link and retrieval date on every row
  • A human review and correction queue before anything reaches a customer
  • Multi-state source adapters with per-state go/no-go validation

Next.js · TypeScript · Supabase · Resend

Your build gets the same standard

Signed webhooks, tenant isolation, audit trails, and an explicit statement of what the software will not decide. Start with a discovery sprint and you will have the specification, the prototype, and the fixed price within a week.