Case study · Manifold Ventures (Internal Tool) · 2.5 months

AI-Powered VC Research & Outreach Platform

An intelligent platform that helps startup founders discover relevant venture capital firms and craft personalized outreach messages using Claude AI agents.

Client Manifold Ventures (Internal Tool)
Duration 2.5 months
Role Lead Full Stack Developer
12K+
Lines of Code
4
AI Agents
8
API Routes
3
Async Tasks

Key challenges.

  • Building AI agents that can research and discover relevant VCs based on startup context
  • Generating personalized LinkedIn outreach messages that don't feel templated
  • Managing async research tasks without blocking the UI
  • Creating a type-safe full-stack architecture with shared validation
  • Handling rate limits and failures in AI-powered research pipelines

Implementation highlights.

01

Multi-Agent VC Discovery System

Problem

Finding relevant VCs manually is time-consuming. Founders need to research investment thesis, check size, sectors, and recent portfolio companies for each firm—then find the right partner to contact.

Solution

Built a suite of specialized Claude agents: VC Discovery Agent analyzes startup context to find matching firms, Contact Discovery Agent researches individual partners, and Enrichment Agent fills in missing data. Each agent has focused prompts optimized for its specific research task.

Impact

What took hours of manual research now takes minutes. The system returns up to 10 best-fit VC firms with relevance reasoning, then discovers individual contacts with their focus areas and recent investments.

02

Personalized Outreach Generation

Problem

Generic outreach messages get ignored. Each message needs specific connection points—why this VC, why this partner, why now—that demonstrate real research.

Solution

Message Composer Agent takes the VC contact profile, firm investment thesis, partner's recent investments, and the startup context to generate tailored messages. It identifies specific connection points (portfolio synergies, thesis alignment, shared interests) and crafts a personalized opener.

Impact

Generated messages include 2-3 specific connection points per contact. The personalized opener references actual portfolio companies or stated interests, making outreach feel researched rather than mass-sent.

03

Async Research Pipeline

Problem

AI research tasks can take 10-30 seconds. Blocking the UI during this time creates a poor experience, and failures need graceful handling.

Solution

Implemented Graphile Worker for background job processing. Routes create research task records and enqueue jobs immediately. Frontend polls task status while showing progress. Failed tasks store error messages and support retry. The decoupled architecture means the API never blocks on AI calls.

Impact

Users can queue multiple research tasks and continue working. Task status updates in real-time. Failed researches are logged with errors and can be retried without losing context.

04

Type-Safe Full-Stack Architecture

Problem

Full-stack TypeScript projects often have type drift between frontend and backend. API contracts get out of sync, validation logic is duplicated, and runtime errors slip through.

Solution

Monorepo with shared package containing DTOs, Zod schemas, and constants. Backend routes validate with the same schemas frontend forms use. Repository pattern with typed Row interfaces, DTOs for API responses. Express 5's native async handling eliminates try-catch boilerplate.

Impact

Zero type mismatches between frontend and backend. Validation errors surface at compile time. Adding a new field to VC firms automatically updates types across the entire stack.

Tech stack.

TypeScriptReact 19Express 5PostgreSQLGraphile WorkerClaude APITanStack RouterTanStack QueryZodshadcn/uiTailwind CSS

Overview

VC Hunter is an internal tool built to streamline the venture capital research and outreach process for startup founders. Instead of spending days researching VCs, founders can describe their startup once and let AI agents discover relevant firms, find the right contacts, and draft personalized outreach messages.

The Challenge

The traditional VC outreach process is inefficient:

  1. Search for VCs that invest in your stage and sector
  2. Research their investment thesis and recent portfolio
  3. Find the right partner (not just any email on the website)
  4. Craft a personalized message that demonstrates you've done your homework
  5. Repeat for 50-100 firms

This takes weeks of work that founders should be spending on their product. The goal was to automate the research while keeping the outreach genuinely personalized.

Technical Approach

Agent Architecture

Rather than one monolithic AI call, I built specialized agents for each research task:

VC Discovery Agent: Takes startup context (stage, sector, check size, geography, unique aspects) and returns best-fit firms with reasoning for each match.

Contact Discovery Agent: Given a VC firm, researches partners and principals to find those with relevant portfolio companies or stated interest areas.

Enrichment Agent: Validates and fills in missing data—investment thesis details, contact LinkedIn URLs, recent investment announcements.

Message Composer Agent: Combines all context to generate outreach with specific connection points. Not templates—actual personalized content.

Data Model

The schema tracks the full research workflow:

  • vc_firms: Name, website, thesis, check size, stages, sectors, status
  • vc_contacts: Partner info, focus areas, recent investments, relevance score
  • vc_research_tasks: Async job tracking with input/output JSONB, retry support
  • startup_context: User's startup profile that feeds all AI agents

Async Processing

Graphile Worker handles all AI research as background jobs:

  1. User triggers discovery - API creates task record + enqueues job
  2. Frontend shows task status, polls for updates
  3. Worker executes agent - saves results to DB
  4. Task completes - frontend displays results

This pattern keeps the UI responsive during 10-30 second AI operations.

Type Safety

The monorepo structure ensures type consistency:

  • packages/shared: DTOs, Zod schemas, constants
  • apps/api: Repository pattern with typed DB rows
  • apps/web: React Query hooks consuming typed DTOs

Zod schemas validate both API requests and form inputs. A single schema change propagates everywhere.

Results

The tool is in active internal use at Manifold Ventures. Key outcomes:

  • Research Time: Days of manual work reduced to minutes of AI-powered discovery
  • Personalization: Every outreach message includes specific, relevant connection points
  • Data Quality: Enrichment agent fills gaps in VC data automatically
  • Developer Experience: Full-stack type safety means confident refactoring

Tech Stack Summary

Backend: Express 5, TypeScript, PostgreSQL, Graphile Worker, Graphile Migrate, Pino

Frontend: React 19, Vite, TanStack Router + Query, shadcn/ui, Tailwind CSS, React Hook Form

AI: Claude API (Anthropic), specialized agents for discovery/enrichment/composition

Patterns: Repository pattern, DTOs, Zod validation, async job queue, monorepo workspaces

Want something similar?

Ready to
ship?

I build production-grade applications with the same attention to architecture and reliability.