A premium, modern VC discovery interface with real-time live data enrichment, built for high-signal startup scouting.
- App Shell: Clean sidebar navigation and global search placeholder with a modern SaaS glassmorphic aesthetic.
- Companies Directory: Mock data seed with faceted filters (Industry, Stage) and an interactive, sortable table.
- Company Profile: Deep-dive into a company's timeline, add private notes, save them to a list, and trigger the AI enrichment engine.
- Lists & Saved Searches: Manage scouting scopes, persist data to
localStoragevia Zustand, and export subsets as CSV. - Live Enrichment API: A server-side API endpoint (
/api/enrich) that securely fetches real website markup viacheerio, parses standard tags, and synthesizes NLP keywords and signals without exposing API keys.
- Framework: Next.js 16 (App Router)
- Styling: Tailwind CSS v4 + Lucide React for consistent, crisp glassmorphic aesthetics
- State: Zustand with
persistmiddleware for local database emulation - Server: Next.js Route Handlers (
/api/enrich) for safe server-side execution - HTML Parsing:
cheeriofor server-side DOM traversal
-
Install dependencies:
npm install
-
Environment Variables: Create a
.env.localfile at the root. The enrichment engine falls back to NLP heuristics if an LLM key is not present, but you can securely add one without exposing it to the client:OPENAI_API_KEY="your-key-here" # Optional: For enhanced AI extraction
-
Run the development server:
npm run dev
-
Open http://localhost:3000 to view the app.
This is the core intelligence endpoint of VCScope. It performs real-time, server-side data extraction and heuristic analysis on a given startup's website URL.
The endpoint is designed to quickly scrape a company's public website and synthesize actionable signals (like whether they are actively hiring, publishing content, or monetizing) and keywords without requiring the user to leave the platform.
| Field | Type | Required | Description |
|---|---|---|---|
url |
string |
Yes | The full, valid URL of the company to analyze (e.g., https://anthropic.com). |
id |
string |
No | A unique identifier for the company. If provided, the endpoint will cache the results to prevent spamming the target site on subsequent requests. |
Example Request:
{
"url": "https://anthropic.com",
"id": "comp_ANTH"
}- Cache Check: If an
idis provided and a cached result exists in server memory, it returns immediately to save bandwidth. - Secure Fetch: The server makes a server-to-server
fetchrequest to the targeturlwith an 8-second strict timeout. TheUser-Agentis masqueraded slightly (VCScopeBot/1.0) to request public HTML. - DOM Parsing: The returned HTML is loaded into
cheerio. Unnecessary noise (scripts, styles, navs, footers, iframes) is stripped out to focus on the core textual content. - Data Extraction & Heuristics:
- Title & Description: Grabs the
<title>and<meta name="description">tags. - What They Do: Extracts the first 100 characters of the description, and scrapes
<h1>/<h2>tags (between 15-100 characters long) to build a quick summary of the company's mission. - Derived Signals: Scans the raw HTML string for keywords like
careers,jobs,blog,news, orpricingto detect if the company is actively hiring, publishing, or monetizing. - Keywords: Runs a naive local NLP word frequency algorithm on the title and description, stripping out common stop words, to return the top 6 unique keywords over 4 characters long.
- Title & Description: Grabs the
- AI Augmentation (Optional): If
OPENAI_API_KEYis detected in the environment variables, the system can utilize a secure server-side LLM call to generate a more accuratesummaryoverriding the naive extraction. - Response & Cache: Constructs the final payload, updates the in-memory cache, and returns it to the frontend.
Returns a 200 OK with the following structure upon success:
{
"summary": "AI safety and research company...",
"whatTheyDo": [
"AI safety and research company. Builders of...",
"Building safe AI systems",
...
],
"keywords": ["research", "company", "safety", "builders"],
"derivedSignals": [
"Actively hiring (Careers page detected)",
"Publishing content (Blog/News detected)"
],
"sources": [
"https://anthropic.com",
"https://anthropic.com/about",
"https://anthropic.com/careers"
]
}400 Bad Request: Returned if theurlparameter is completely missing.{ "error": "URL is required" }500 Internal Server Error: Returned if thefetchfails (e.g. 404, site block, DNS failure), or the 8-second timeout is hit.{ "error": "Failed to fetch https://... (Status: 404)" }
This app is optimized for Vercel.
Simply push to a GitHub repository, link it to Vercel, and ensure your .env variables are configured in the Vercel dashboard.
# Production Build
npm run build
npm run start