A self-contained, static dashboard of frontier deep-tech research — breakthroughs by domain, who's commercializing them (and who isn't = your white space), TRL maturity, funding flows, and policy tailwinds. Built for deep-tech founders deciding what to build, not for deal-sourcing.
No backend, no build step, no JS framework:
| Path | What |
|---|---|
radar.html |
The whole dashboard — vanilla HTML/CSS/JS, zero dependencies. Renders data.json. |
data.json |
The intelligence snapshot (regenerated by the pipeline) |
pipeline/refresh.py |
The method — queries Perplexity across the sectors, founder-framed, emits data.json. Python stdlib only. |
pipeline/config.json |
(optional) override sectors + region |
.github/workflows/refresh.yml |
weekly GitHub Action that reruns the pipeline and commits the fresh data.json |
Drop both files in the same directory and link to it:
<a href="/radar.html">DeepTech Radar →</a>radar.html fetches data.json from its own directory, so as long as they sit together (e.g. /radar.html + /data.json, or /radar/radar.html + /radar/data.json) it just works. Hosts fine on GitHub Pages, Vercel, Netlify, or any static host. No server, no API key needed for the read-only dashboard.
To embed inside an existing page instead of linking out, use an iframe:
<iframe src="/radar.html" style="width:100%;height:90vh;border:0"></iframe>data.json is a point-in-time snapshot. Regenerate it with the bundled pipeline:
export PERPLEXITY_API_KEY=... # the only dependency
python pipeline/refresh.py # full refresh → data.json
python pipeline/refresh.py --section research --days 14 # one section, wider windowrefresh.py queries Perplexity Sonar Pro across the sectors and writes the exact schema the dashboard reads. Python 3.8+, standard library only — no pip install. Every prompt is founder-framed: it reports the breakthrough and the commercialization gap (the white space you could fill), the competition map, funding flows, and the build openings policy creates.
Auto-refresh: .github/workflows/refresh.yml runs it weekly and commits the new data.json. Add a PERPLEXITY_API_KEY repo secret (Settings → Secrets and variables → Actions) and it's hands-off. Trigger manually any time from the Actions tab.
Retarget it: drop a pipeline/config.json:
{ "sectors": ["Your", "Sectors", "Here"], "region": "Southeast Asia" }A curated, voiced, monthly companion to the live radar. The radar is the firehose; this is the hand-picked issue. Pipeline-drafts-you-trim:
# 1. Draft a high-quality candidate pool. --fresh pulls straight from
# OpenAlex across frontier wheelhouse queries, ranked by venue
# (Nature/Science/Cell…) + recency, reviews/case-reports excluded:
python pipeline/draft_issue.py --fresh --month 2026-06 --pick 12
# (or drop --fresh to draft from the radar's sector feed in data.json)
# optional: PERPLEXITY_API_KEY=... python pipeline/draft_issue.py --fresh --llm
# → writes issues/2026-06.draft.json — every paper a real DOI
# 2. Trim it: keep what excited you (picked:false to drop), rewrite each
# `why` line + the `intro` in your own voice.
# 3. Publish: rename to issues/2026-06.json, add "2026-06" to issues/index.json.Then it appears on two surfaces from the one issue file:
- Site —
papers.htmlrenders the latest issue + an archive switcher. Host it like the radar (e.g.papers/index.html+issues/→yoursite.com/papers). - Substack / newsletter —
python pipeline/to_substack.py 2026-06 > june.mdemits paste-ready markdown for Atoms & Cells or any newsletter.
Issue schema (issues/<YYYY-MM>.json):
It's static — host anywhere:
- Subpath of an existing site (e.g.
yoursite.com/deeptechradar): putradar.htmlasdeeptechradar/index.htmlnext todata.json. Most hosts (Netlify/Vercel/Cloudflare Pages) serveindex.htmlfor the clean path. - GitHub Pages: enable Pages on the repo; rename/symlink
radar.html→index.htmlat the root. - Standalone (Vercel/Netlify): point it at the repo, no build command, output dir = root.
{
"generatedAt": "ISO date",
"research": [{ name, breakthroughs:[{title,institution,trl,field,key_breakthrough,india_connection,date}], count }],
"globalStartups": [{ name, sector, country, stage, amount, amount_str, technical_thesis, india_relevance, source_url }],
"indiaStartups": [{ name, city, sector, funding_stage, amount, amount_str, technology_thesis, research_origin, source_url }],
"policies": [{ name, country, domain, funding_amount, startup_opportunities, opportunity, impact_score, source_url }],
"top10": [{ rank, name, thesis, market_size_2035, signal_strength, india_readiness, geographic_hubs }]
}- Title / tagline — edit the
<header>and.taglineinradar.html. - Theme — the
:rootCSS variables at the top (dark teal by default). - Sectors — determined by whatever domains are in
data.json; change them upstream in the pipeline.
{ "month": "2026-06", "title": "Papers I found exciting", "intro": "your opener", "papers": [{ title, authors, institution, domain, field, trl, india_connection, link, "why": "your one-line take", "picked": true }] }