The problem
Creditors holding a valid judgment still have to manually chase down a debtor's assets and identity across scattered public sources before they can collect.
That research is repetitive, error-prone, and expensive to outsource, which stalls small-dollar enforcement.
The approach
Built a self-serve product that turns a debtor lookup into an automated, queued research run across multiple open-source adapters.
Separated the web app from a long-running worker so investigations run as background jobs with live progress streamed back to the user.
Designed source adapters as pluggable modules so new open-source signals can be added without reworking the core.
What I built
- A Next.js 16 app with authenticated accounts, a research-request flow, and results dashboards
- A BullMQ job queue drained by a dedicated Node worker that runs source adapters, including Sherlock-based username/identity research
- A Drizzle ORM schema over PostgreSQL with generated, versioned migrations
- Redis-backed queueing, rate limiting, and server-sent-event pub/sub for real-time run updates
- Auth.js v5 authentication, Resend transactional email, and structured Pino logging
- CI on GitHub Actions plus Vitest and Playwright test suites; containerized worker for Railway deployment
- Next.js 16
- TypeScript
- Drizzle ORM
- PostgreSQL
- Redis
- BullMQ
- Auth.js v5
- Sherlock (OSINT)
- Vitest
- Playwright
- Railway