Skip to content
back to portfolio

Culmination Digital LLC2026

SoberMark, a national addiction-treatment directory built from public data

Public directory of 10,900+ addiction-treatment providers across all 50 states, built from 20 federal and state data sources and kept current on a schedule, with search by location, level of care, insurance, and language. English and Spanish.

Founder, sole engineerNext.jsTypeScriptPostgreSQLStripeVercel

Live: SoberMark, the live directory

One of two products I build and run solo under my LLC, Culmination Digital. Source is private.

Read the build story: Building SoberMark

SoberMark is a public directory of addiction-treatment providers, searchable by location, level of care, insurance, and a dozen other filters. 10,900+ providers across all 50 states, assembled from public federal and state datasets and kept current on a schedule. It ships in English and Spanish.

Why it exists

A person looking for treatment usually starts at a search engine and lands on a directory. The useful facts (where a provider is, what level of care it offers, what it accepts) already exist in public federal data, but they are scattered across sources that disagree with each other. SoberMark is the work of pulling those sources into one clean, searchable record per provider.

How it's built

Next.js 16 on Vercel, TypeScript, and Postgres, with a separate data pipeline that pulls from 20 public sources (federal treatment, provider, and licensing data) on a schedule and refreshes the directory. Search works by location, level of care, insurance, language, telehealth, medication-assisted treatment, and more.

I built it spec-driven with a coding agent. The conventions, data rules, and decision log are written down in the repo first, and the tests and checks have to pass before anything ships. Claude also helps with a few back-office tasks, and the ownership-claim assistant is built so it can never approve or reject a claim on its own.

The trade-offs

Building from public data means the directory is broad before it is deep. A listing can be right about address and services and still know nothing about today's waitlist. Curating by hand does not scale to ten thousand providers for one engineer, so I chose breadth with honest labeling, plus a path for providers to correct or enrich their own record.

What I learned

How much of a data product is deciding which source to believe, and how much a written spec matters when a coding agent does a lot of the building. The full story is in the build post.