Skip to content

Mubashir2611/vc-discovery-app

Repository files navigation

VC Scout — AI-Powered Venture Capital Intelligence Platform

A full-stack VC pipeline management tool with real-time AI enrichment, built as a technical assessment.

React TypeScript TailwindCSS Express Claude AI


What It Does

VC Scout helps venture capital analysts track, research, and organize investment opportunities in one place. Instead of juggling spreadsheets and browser tabs, analysts get a unified pipeline where they can search companies, run AI enrichment on any company website in seconds, save curated watchlists, and replay saved searches — all persisted locally with zero backend database required.


Features

Company Pipeline

  • Browse and manage portfolio companies with a sortable, paginated table
  • Real-time search across company name, sector tags, and location
  • Filter by funding stage (Seed → Public) and sector
  • Sort any column — name, stage, funding, location
  • URL-driven filter state — filtered views are bookmarkable and shareable
  • Add Company modal with full form validation

AI Enrichment (Claude Haiku)

One click on a company profile scrapes the live website, sends the content to Claude, and returns structured intelligence:

  • 1–2 sentence analyst summary
  • 3–5 "what they do" bullets
  • 5–8 keyword/sector tags
  • Derived market signals (Hiring, API Product, Enterprise Focus, B2B SaaS, etc.)

Results are cached server-side — no duplicate API calls on repeat visits.

Company Profile

  • Funding stage, founded year, HQ location, total raised at a glance
  • Signals timeline — funding rounds, product launches, hiring surges, partnerships, press
  • Analyst notes — personal thesis notes, saved to localStorage per company
  • Save to List — add the company to any curated watchlist from the profile

Lists

  • Create named watchlists (e.g. "AI Infrastructure", "Series A Targets")
  • Preview member companies at a glance on each list card
  • Export to CSV or JSON for further analysis in Excel / Notion / Airtable
  • Double-confirm delete to prevent accidental data loss

Saved Searches

  • Save any search + filter combo with a custom name
  • Replay with one click — navigates to the Companies page with all filters pre-applied
  • View and manage saved query history with creation dates

Tech Stack

Layer Technology
UI Framework React 19 + TypeScript 5.8
Styling Tailwind CSS 4 (utility-first, zero runtime CSS-in-JS)
Routing React Router 7 (URL-driven state via useSearchParams)
Icons Lucide React
Build Tool Vite 6 (sub-second HMR)
Backend Node.js + Express 4 (Vite middleware mode)
AI Model Anthropic Claude (claude-haiku-4-5)
Web Scraping Cheerio (server-side HTML parsing)
Persistence localStorage (companies, lists, searches — no DB required)
Runtime tsx (TypeScript executor, no separate compile step in dev)

Project Structure

vc-scout/
├── server.ts                    # Express server + /api/enrich endpoint
├── src/
│   ├── pages/
│   │   ├── Companies.tsx        # Pipeline table: search, filter, sort, pagination, add
│   │   ├── CompanyProfile.tsx   # Profile view: enrichment, signals timeline, notes
│   │   ├── Lists.tsx            # Curated watchlists + CSV/JSON export
│   │   └── SavedSearches.tsx    # Saved queries with one-click replay
│   ├── components/
│   │   └── Layout.tsx           # Sidebar navigation with active state
│   ├── lib/
│   │   └── store.ts             # localStorage CRUD (getCompanies, addCompany, saveCompany)
│   └── types.ts                 # TypeScript interfaces + 8 seeded companies
└── .env                         # ANTHROPIC_API_KEY

Single Express server handles both the REST API and Vite's dev middleware on the same port — no CORS config, no proxy setup needed.


Getting Started

Prerequisites

Setup

git clone <repo-url>
cd vc-scout
npm install

Create a .env file in the project root:

ANTHROPIC_API_KEY="sk-ant-..."

Start the dev server:

npm run dev

Open http://localhost:3000.


How AI Enrichment Works

User clicks "Enrich" on a company profile
        ↓
POST /api/enrich { url: "https://company.com" }
        ↓
Server fetches website HTML (10s timeout)
        ↓
Cheerio strips scripts/styles/nav → extracts clean body text (12k char cap)
        ↓
Prompt + content sent to Claude Haiku
        ↓
Structured JSON returned: summary, bullets, keywords, signals
        ↓
Cached in-memory on the server (no repeat calls)
        ↓
Frontend writes enrichment data to localStorage on the company record

If the website is unreachable (SPA with no SSR, Cloudflare block, timeout), the server falls back to domain-only mode — Claude infers from the URL rather than failing hard.


Key Engineering Decisions

URL-driven state — All filters, sort direction, and page number live in useSearchParams, not local component state. This makes views bookmarkable and enables the Saved Searches feature to pre-populate the Companies page by simply navigating to /?q=fintech&stage=Series+A.

Single server, dual role — Express mounts Vite's dev middleware directly, so the API and the React app both run on port 3000. No proxy config, no CORS headers, no concurrently hacks.

Graceful enrichment degradation — Website fetch failures (timeout, bot-blocked, JS-rendered SPAs) don't crash the request. The enrichment continues with domain-only context so users always get a result.

ESM-first"type": "module" in package.json. The server runs via tsx for TypeScript execution without a build step during development, keeping the feedback loop fast.

Zero-database persistence — localStorage is the data layer. No provisioning, no migrations, no connection strings. Works offline out of the box and removes all infrastructure friction for a demo/assessment context.


Assessment Checklist

Built to spec as a take-home technical assessment for a VC-focused engineering role:

  • Company table with search, sort, filter, and pagination
  • Company profile with AI-powered enrichment
  • Activity / signals timeline per company
  • Persistent notes per company
  • Curated lists with CSV and JSON export
  • Saved searches with one-click replay
  • Add new companies to the pipeline
  • Fully typed with TypeScript — no any abuse
  • Clean, production-ready UI with loading states and error handling

Scripts

npm run dev      # Start dev server (Express + Vite on port 3000)
npm run build    # Production Vite build
npm run lint     # TypeScript type check (tsc --noEmit)
npm run preview  # Preview the production build locally

Author

Muberser Hossain

Designed and built to demonstrate full-stack product thinking — not just code that works, but a tool a real VC analyst could open and immediately use.

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages