Chip IPO Radar
Real-time intelligence feed tracking AI chip company IPO filings, secondary valuations, and supply-chain signals — built for investors, procurement leads, and AI infrastructure teams.
What It Does
- IPO Filing Tracker — monitors SEC EDGAR for S-1/S-1A filings from AI chip and semiconductor companies in real time
- News Intelligence — aggregates AI chip IPO news from Brave Search across targeted queries (Cerebras, Groq, Tenstorrent, supply chain, secondary valuations)
- Signal Engine — computes IPO momentum signals from filing activity + news volume, with confidence scores
- Watchlist — track specific companies and their IPO stage (pre-IPO → filed → trading)
Data Sources
| Source | URL | What | Refresh | Failure Mode |
|--------|-----|------|---------|--------------|
| SEC EDGAR Full-Text Search | https://efts.sec.gov/LATEST/search-index | S-1/S-1A filings for AI chip/semiconductor companies | Every 6 hours | Shows "data unavailable", logs error |
| Brave Search News API | https://api.search.brave.com/res/v1/news/search | News about chip IPOs, valuations, supply chain | Every 30 minutes | Shows notice, skips without key |
No hardcoded or fabricated data. All filings come from real SEC EDGAR API calls. News comes from Brave Search. If a source is unavailable, the UI displays "data unavailable" — never synthetic values.
Setup
npm install
cp .env.example .env
# Edit .env — add BRAVE_API_KEY for news
node server.js
Open: http://localhost:4714/chip-ipo-radar/
Environment Variables
| Variable | Required | Description |
|----------|----------|-------------|
| PORT | No | HTTP port (default: 4714) |
| BRAVE_API_KEY | For news | Brave Search API key |
| OPENROUTER_API_KEY | Optional | For future LLM analysis features |
API Endpoints
All endpoints are public — no authentication required.
### Filings (SEC EDGAR)
````
GET /chip-ipo-radar/api/filings # Paginated filing list
GET /chip-ipo-radar/api/filings/stats # Filing statistics
GET /chip-ipo-radar/api/filings/search?q= # Search by company name
GET /chip-ipo-radar/api/filings/:id # Single filing detail + EDGAR links
POST /chip-ipo-radar/api/filings/refresh # Trigger manual EDGAR scrape
### News (Brave Search)
````
GET /chip-ipo-radar/api/news # Paginated news articles
GET /chip-ipo-radar/api/news/topics # Topic breakdown
GET /chip-ipo-radar/api/news/recent # Latest 10 articles
POST /chip-ipo-radar/api/news/refresh # Trigger manual news scrape
### Signals
````
GET /chip-ipo-radar/api/signals # Paginated signal list
GET /chip-ipo-radar/api/signals/summary # Dashboard summary
GET /chip-ipo-radar/api/signals/latest # Latest 20 signals
POST /chip-ipo-radar/api/signals/compute # Recompute signals
### Watchlist
````
GET /chip-ipo-radar/api/watchlist # List watchlist
POST /chip-ipo-radar/api/watchlist # Add company
PATCH /chip-ipo-radar/api/watchlist/:id # Update status/notes
DELETE /chip-ipo-radar/api/watchlist/:id # Remove company
### System
````
GET /chip-ipo-radar/health # Health check
GET /chip-ipo-radar/api/status # Data source availability + counts
Architecture
chip-ipo-radar/
├── server.js # Express app, middleware, route mounting
├── db.js # SQLite (WAL), schema, prepared statements
├── scheduler.js # node-cron: EDGAR every 6h, news every 30min
├── scrapers/
│ ├── edgar.js # SEC EDGAR EFTS full-text search scraper
│ ├── news.js # Brave Search news scraper
│ └── signals.js # Signal computation from real data
├── routes/
│ ├── filings.js # Filing CRUD + refresh trigger
│ ├── news.js # News CRUD + refresh trigger
│ ├── signals.js # Signal API + compute trigger
│ └── watchlist.js # User watchlist management
└── public/ # Vanilla JS SPA
├── index.html
├── app.js
└── style.css
Stack
- Node.js >=22 + ESM
- Express 4
- better-sqlite3 (WAL mode)
- node-cron (scheduled scraping)
- helmet + compression