The Detective

Field documentation · the stack

How we built this.

Most product pages tell you about the features. This one tells you about the foundations. The decisions we made before we wrote a line of customer-facing code; the picks we'd defend if you asked; the picks we're honest about wanting to revisit.

The Detective is built by two founders. There is no team behind the team. What follows is the stack we'd hand a friend asking how to build something like this, with the tradeoffs labelled.

The stack.

Frontend
Server-first React framework on TypeScript
App Router for server-component-first rendering. Same shape we already shipped multiple production SaaS projects on; the marginal cost of one more is near zero.
Database
Managed Postgres with row-level security on every table
Real Postgres, real RLS, a generous free tier. Auth ships in the same package, so a single dependency covers two layers.
Hosting
Edge-capable hosting with per-PR preview deployments
Edge runtime for routes that need it, plain Node for routes that don't. Preview deployments per PR are how we caught most of our pre-launch regressions.
Runner
Background job orchestrator
Long-running pipeline jobs out of process. The web request returns in milliseconds; the runner takes the minutes it takes. Survives a serverless cold-start without losing state.
Email
Transactional email with idempotency keys + bounce webhooks
Transactional only, no marketing blasts. Idempotency + bounces meant we could ship retries without inventing a queue.
Payments
Merchant-of-record processor
Merchant-of-record so we never touch a card number, and so tax / fraud / chargeback exposure sits with the processor rather than us.
Observability
Error monitoring + cron health pinger
Errors go to one place, cron health to another. Both have generous hobby tiers and zero seats charged for solo founders. The chat / product analytics / LLM tracing stacks are wired but flagged off until they earn their cost.

The methodology page links directly to the production code paths for the runner pipeline. The repo itself is currently private; open-sourcing the runner is on the post-PMF roadmap.

Four principles the code enforces.

If we cannot ground a claim, we do not make it.
Every claim in every report is anchored to a real source URL. The pipeline is built so a hallucinated citation cannot leave the synthesis stage — not because the agent is asked nicely, because the schema rejects unbound claims.
We refuse rather than fabricate.
When the public evidence on a niche is too thin to support a verdict, the runner aborts the spend, surfaces three salvage angles, and adds a free re-run credit to your account. A confident wrong answer is worse than an honest refusal.
We name what is low-confidence.
Sources are tagged primary, industry, media, or low. The viewer downweights low-confidence dots visibly. The verdict can come out Preliminary instead of GO. We never quietly lower the bar to ship a result.
We cap the budget before we spend it.
Hard ceiling per analysis at the runner. The cap exists so a runaway prompt can never silently turn into a four-figure mistake against a two-figure subscription. The cap is set high enough that an honest analysis never hits it.

The decisions we made.

The chapter on the picks we'd defend if you asked. The preflight gate, the credit-then-refund ladder, the source tier tagging. Each one started as a meeting between us; this section will tell you how each meeting went.

Field notes in progress

What we'd change.

The honest list of the picks we'd revisit if we were starting from scratch tomorrow. No vendor was harmed in the making of this section; this is about our taste evolving, not their service degrading.

Field notes in progress

Want to see the pipeline run?

The methodology page walks through the five stages a real analysis goes through. The /sample report shows the output shape end to end. The intake form is the front door.