Build
Huntloop: AI-native sales intelligence
Sales intelligence built on one idea: the unit of value is a qualified opportunity with evidence, rather than a lead. Every prospect arrives scored across eight named dimensions with a cited trigger event, and a clear line between verified fact, model inference and unknown.
- AI
- Development
- Product
- Personal build
- Playwright tests
- 68
- Database checks
- 39
- AI tasks shipped
- 4
- Screens live
- 10
The challenge
Most prospecting tools optimize for volume: more names, more emails, a longer list. They leave the salesperson to work out why now, and they present a model's guess with the same confidence as a checked fact, so there is no way to tell which part of a profile to trust.
My contribution
- Set the product's non-negotiables before any code existed: the fact, inference and unknown distinction, the eight-dimension scoring model, and the requirement that every opportunity carry a why-now
- Designed the epistemic colour system carried through the whole design system, where no state is ever signalled by colour alone and a score that cannot be measured reads UNKNOWN rather than a silently defaulted zero
- Chose the monorepo architecture and the tenancy model: isolation enforced in the database itself rather than in application code, proven under a non-superuser role instead of assumed
- Made the call to ship two screens on clearly labelled fixture data rather than hide them, and backed the label with a CI check so it cannot quietly disappear
- Ran the audit programme and made the fix, accept or defer decision on each of its 34 findings
Results
- 68
Playwright browser tests, plus 39 database-level checks and 34 audit checks, all gating merge
- 18
of 34 audit findings closed in the first hardening pass, with no critical items left open
- 4
production AI tasks shipped: company research, source recommendation, qualification and why-now
An enforced bundle-size budget that caught a 33 kB regression at merge time
AI collaboration
Claude Code worked in the repository across the full build, from monorepo scaffolding through the audit pass. Claude models are also the product's own AI layer, running four production tasks: research a company, recommend sources, qualify an opportunity, and explain why now.
What I did
- The product rules the whole system had to satisfy: fact versus inference versus unknown, eight explainable dimensions, and why-now recency
- Scoping each unit of work and ordering the build, from foundation through AI tasks and screens to hardening
- Reviewing every generated diff before it landed, and deciding what merged as-is, what was revised, and what was deferred
- The fix, accept or defer call on each of the 34 audit findings
- Deciding which screens ship honestly labelled against fixture data versus not shipping at all
What AI executed
- First implementations of each feature: schema, isolation policies, API routes and UI components
- The four AI task prompts and their client and runner scaffolding
- Test suites, including migration tests against a real Postgres and the Playwright browser suite
- The audit pass itself: findings, severity, and the fixes for accepted items
- Design-system tokens and the component library, built to spec
Work completed
- Authentication and org membershipShipped
Magic link and Google sign-in, with a membership guard on every protected route.
- Onboarding pipelineShipped
Company research, then ICP definition, then source recommendations, each backed by a real AI task.
- Analyze screenShipped
Runs live qualification and why-now reasoning against a pasted company URL.
- Opportunity list and detailShipped
Reads the database directly: joins, evidence, triggers and buyers, with no mocked data.
- AI spend dashboardShipped
Per-org visibility into model-call cost, sourced from the run ledger.
- Multi-tenant isolationShipped
Enforced in the database and proven by tests running as a non-superuser role.
- Command Center and sources screensIn Progress
Built and functional on fixture data, labelled as illustrative on-screen, with CI failing if the label disappears.
- Company discovery and auto-scoringPlanned
Finding companies and computing scores end to end, beyond the seeded demo org.
- Remaining navigation destinationsPlanned
Eleven of seventeen are marked Soon in the UI rather than linked to a stub, by design.
Challenges and solutions
Isolation policies protect rows, but they do nothing for the model bill. A per-tenant product calling a paid API has a second resource to protect that database permissions never touch.
Shipped a per-org rate limiter backed by database-level tests, plus a ledger recording what every model call cost, so spend is attributable and visible before scale rather than after a surprise invoice.
The product was quietly claiming capabilities it did not have: most navigation destinations went nowhere, two screens rendered fixtures without saying so, and the README described a state the code had already drifted from.
Replaced dead links with explicit Soon states, put fixture labels in the UI itself with a CI check enforcing them, and rewrote the README to match the code rather than the plan.
Command Center and the sources screen could not be fully live until the discovery pipeline existed, leaving a choice between hiding them and shipping something not yet real.
Shipped them against labelled fixture data, which proves the design system and information architecture under real layout pressure. The label, and the CI check behind it, is what makes that an honest trade rather than a shortcut.
A half-applied database schema does not announce itself, and a migration that silently never landed surfaces later as a confusing runtime failure.
Wrote a doctor script that inspects a connected project and reports which migrations have actually been applied, turning an invisible state into a command anyone can run.
Technical implementation
Frontend
- Next.js 16 (App Router)
- Turbopack
- TypeScript
- Tailwind v4
Backend and data
- Supabase (Postgres, Auth, Storage)
- Row-level security
- Versioned migrations
AI layer
- Claude (Anthropic)
- Typed task runner
- Per-org attribution
- Cost ledger
Architecture
- npm-workspaces monorepo
- packages/ui
- packages/db
- packages/ai
Platform
- Vercel
- Durable job runner (Inngest / Trigger.dev)
- Stripe (planned)
Quality gate
- Playwright
- PGlite migration tests
- Bundle-size budget
- jsx-a11y lint rules
Available now
Want something like this built?
I scope, design and build products end to end, with AI coding assistants writing code under my direction. Tell me what you're building.