Find what wreaks havoc before the bell. A live, source-backed weakness finder for combat robots.
Pick a published matchup—or enter any two bots. Havoc uses Bright Data search results to gather current public evidence, maps that evidence onto five systems—Drive, Weapon, Control, Armor, and Thermal—and renders a stage-ready matchup brief showing what to watch.
Havok does not claim to predict a winner. It compresses scattered public reporting into a fast pre-fight brief for fans, commentators, and lightweight scouting. Every subsystem signal links back to the source snippet that produced it.
Bright Data is the live research layer, not a decorative integration. The app sends one current search for each bot through the token-only Bright Data remote MCP, normalizes the organic results, and retains source URLs and retrieval times. An explicit SERP zone can instead use the direct SERP API. Without Bright Data, Havoc can still demonstrate its UI from a clearly labeled fixture, but it cannot claim fresh evidence.
The matchup picker is populated automatically, too. Havoc reads the official BattleBots public roster and upcoming-event feeds, then uses a Bright Data MCP search as a freshness receipt for the next published card. The result is cached for 15 minutes: page refreshes do not repeatedly spend credits. Published cards can change, so the UI labels them as current data rather than an arena feed.
OpenAI is the primary synthesis path when OPENAI_API_KEY is present. Havoc
uses Structured Outputs
to create the compact matchup brief. Without it, a deterministic local
classifier derives the same response shape from Bright Data snippets.
official roster + schedule -> Bright Data receipt -> matchup picker
selected bots -> Bright Data search -> sourced snippets -> OpenAI or local classifier
-> five-system signal cards -> evidence drawer
Requires Node.js 22 or newer. There are no package dependencies and no build step.
cp .env.example .env
# Add BRIGHTDATA_API_KEY to .env
npm startOpen the URL printed by the server. It uses CONDUCTOR_PORT, then PORT, then
3000, in that order.
A Bright Data token is enough: Havoc uses the remote MCP by default. Set
BRIGHTDATA_SERP_ZONE only when you want to switch to the direct SERP API.
Recommended AI synthesis:
OPENAI_API_KEY=your_key
OPENAI_MODEL=gpt-5.4No key is ever sent to the browser or returned from /api/health.
.env.local is loaded automatically and remains gitignored. The shorter
aliases BRIGHTDATA_KEY and OPENAI_KEY are accepted alongside the names in
.env.example.
- Live + AI: Bright Data evidence, synthesized by OpenAI.
- Live + local: Bright Data evidence, deterministic keyword classifier.
- Demo fixture: Used when Bright Data is unavailable; visibly labeled and never presented as live research.
POST /api/analyze
Content-Type: application/json
{"leftBot":"Switchback","rightBot":"Ribbot"}Supporting endpoints:
GET /api/healthreports which optional integrations are configured.GET /api/lineupreturns upcoming published matchups and the current competitor registry; live results are cached for 15 minutes.GET /api/demoreturns the built-in presentation fixture.
- Scores represent the density and salience of public evidence, not a measured probability of mechanical failure.
- Missing evidence stays missing; it is not converted into a positive claim.
- Generated observations carry source IDs displayed in the evidence drawer.
- Public reporting may be incomplete, stale, or wrong. This is directional research, not engineering or betting advice.
MIT. “BattleBots” and robot/team names belong to their respective owners. Havok is an unofficial public-data research project and does not ship team logos, show footage, or robot photography. It is not affiliated with BattleBots, National Havoc Robot League, or Havoc Robotics.