I find the data hiding inside problems other people treat as business-as-usual.
Eric Hall

15+ years building products at the intersection of knowledge, trust, and technology.

The thread connecting twenty years of work is not a technology or an industry — it is a question: how do people find what they need to know, and what gets in the way? From peer review to predictive analytics to location-based discovery, every project has been an attempt to close that gap. The tools change. The problem doesn't.

FIG. 01 TownCite
TownCite

TownCite is an AI research assistant for municipal records. It gives real estate professionals, attorneys, developers, and contractors instant, cited answers to questions they currently get by calling Town Hall, filing public records requests, or showing up in person. The first instance covers Swampscott, MA — every ZBA decision, planning board minute, conservation commission filing, zoning bylaw, and deed transaction since 2015, ingested into a retrieval-augmented generation pipeline and queryable in plain English. Essex County expansion is next.

What it taught me: Retrieval quality is determined entirely by ingestion quality — the model is the easy part. But the more durable lesson was about the value of the upfront conceptual work before a line of code is written. Deciding that the parcel was the atomic unit of the entire system — one small architectural choice made on day one — gave every subsequent decision a place to land. Data sources, metadata schema, retrieval strategy, the product vision itself: all of it snapped into place once the right organizing principle was named. Discovery is not a phase you skip to get to building. It's the building.
PythonPostgreSQLpgvectorClaude APIVoyage AIBM25DoclingLangfuseStreamlitHetzner
FIG. 02 Is This A Product?
Is This A Product?

A free conversational diagnostic that runs a product idea through six evidence-based layers — problem legitimacy, customer specificity, willingness to pay, artifact analysis, market signal, and verdict — then returns a gap scorecard grounded in published research from Levitt, Blank, Fitzpatrick, Cagan, and others. No accounts, no email capture, no opinions: every finding is traceable to a source.

What it taught me: Probabilistic systems resist deterministic instructions — never architect around a model's self-reporting. Scorecard signals rendered from result JSON beat anything the model emits mid-conversation. And a test harness only earns its keep if it simulates realistic user flow; firing pre-scripted turns blindly just tells you the happy path works.
Claude APIConversational UXNode.jsCloudflareExpressPM2
FIG. 03 Heddlepin
Heddlepin

Community exploration platform for obsessives — people who care too much about the right things and want to find their people in the real world. Pinned locations unlock full lore and community marks only when you physically show up. Built on Node.js, PostgreSQL + PostGIS, MapLibre, and Cloudflare.

What it taught me: Geographic UX is deceptively hard. The arrive-and-unlock mechanic required rethinking every assumption about how users interact with map interfaces — and forced me to feel every friction point my engineers warned me about.
Node.jsPostgreSQLPostGISMapLibrePWACloudflare
FIG. 04 Bracket Battle
Bracket Battle

Single-elimination bracket tracker for the 2026 NCAA Men's Lacrosse tournament. 16 teams, 15 picks, one champion. Deployed as a static site — zero backend, zero dependencies, zero budget.

Refreshed each year during NCAA Lacrosse championship season (2 weeks). Off-season between refreshes.

What it taught me: Constraints are a gift. Building with no server forced creative thinking about state, persistence, and UX that a just-add-a-database approach would have skipped entirely.
Vanilla JSStatic SiteGitHub Pages
FIG. 05
Melee

Melee is a social prediction platform for private friend groups — pick brackets, award-show ballots, or any structured event, then watch picks, trash talk, and the leaderboard update in real time. It wasn't designed, it was discovered: a one-off NCAA lacrosse bracket app revealed that the social layer — pick visibility, chatter, leaderboard transparency — drives more engagement than the event itself. AI-assisted event creation now lets a host scaffold any competition from a plain-English description in minutes.

What it taught me: The accidental beta taught me more than the roadmap did. A throwaway lacrosse bracket for friends revealed that the real product was the social layer around the picks, not the bracket itself — and writing a full ontology before generalizing surfaced assumptions no user interview would have.
AI Event CreationSchema DesignPostgreSQLSupabase