ASP.NET Web Forms hobby app for Radio Direction Finding / fox-hunting — watches where a known cooperative transmitter is being heard on publicly-available receiver networks (PSKReporter, WSPRnet, Reverse Beacon Network, KiwiSDR) and renders the footprint on a Leaflet + Esri satellite map.
No hardware required. Single-user. Not a stalking tool.
- Open
FoxHunt.slnin Visual Studio 2022. - Right-click solution → Restore NuGet Packages.
- Make sure
..\..\Lib\(DTI libs:DTIControls.dll,DTIGrid.dll,Reporting.dll,BaseClasses.dll, etc.) is present alongside your sibling projects — FoxHunt's.csprojreferences them via HintPath. - F5. IIS Express launches → browser opens at
Default.aspxwhich redirects to/Hunt.aspx. - On first boot,
Global.asaxcreates SQLite tables and seeds 19 bands (CB 27MHz, 160m, 80m, ..., LPD433).
- Go to Targets → add
W1AW(ARRL HQ beacon) with bandHF 20m 14MHzand freq14074000. Save. - Go to Hunt → pick
W1AWfrom the target dropdown. - The Leaflet map should populate within a few seconds with colored dots: blue = PSKReporter, green = WSPRnet. Marker size is scaled to SNR.
- Toggle the heatmap layer on/off; toggle the KiwiSDR gray-pin layer on to see where v2 TDoA will be able to source receivers from.
- Visit Sessions to see the run you just started. Each target-pick opens a new session; reports are persisted.
Edit on Admin.aspx or directly in the SiteConfig SQLite table:
| Key | Default | Use |
|---|---|---|
RefreshSec |
30 |
(reserved for client poll cadence override) |
AppContactEmail |
dbeuttel@dconc.gov |
Sent as appcontact= to PSKReporter and as User-Agent tail. |
PskReporterBase |
https://retrieve.pskreporter.info/query |
Swap if they move endpoints. |
WsprLiveBase |
https://db1.wspr.live/ |
ClickHouse query endpoint. |
RbnBase |
https://www.reversebeacon.net/main.php |
Unused in v1 (RBN client stubbed). |
KiwiPublicUrl |
http://rx.kiwisdr.com/public |
Scraped every 5 min. |
- The project was bootstrapped from
VibeBaseProject, which carries unrelated pages (elections, candidates, trucks). These may show build warnings/errors you can ignore or clean up — seeFoxHunt/CLAUDE.md→ "Known inherited cruft" for a deletion list. FoxHunt functionality does not depend on any of them. - Leaflet + Leaflet.heat load from
unpkg.comCDN. If you lose internet, the map won't render tiles or code. Vendor them underassets/vendor/leaflet/if you want offline dev. - The RBN client returns an empty list. Wiring it up requires cross-referencing spot callsigns against the RBN stations DB for lat/lon — a known TODO for a v1.1.
┌──────────┐ ┌─────────────────────┐ ┌──────────────────────┐
│ Hunt.aspx│ JS │ /Handlers/ReportsApi│ │ PskReporterClient │
│ foxhunt-│─────▶│ │─────▶│ WsprClient │
│ map.js │ 30s │ ReceptionAggregator │ │ RbnClient (stub) │
└──────────┘ └──────────┬──────────┘ └──────────────────────┘
▲ │
│ ▼
│ ┌──────────────┐
│ L.circleMarker │ SQLite │
└─────────────────│ HuntSession │
+ L.heatLayer │ Report │
└──────────────┘
- v1.0 — Footprint viewer (shipped). PSKReporter + WSPRnet on Leaflet/Esri satellite map.
- v1.1 — RBN wireup (scheduled). Replace the empty stub in
FoxHuntCore/Clients/RbnClient.cswith a real implementation: scrapereversebeacon.net/main.php?hc={call}for spots, join skimmer callsigns against a cachedRbnSkimmertable populated from public stations list, emitReceptionReportrows with lat/lon. Handles CW/RTTY traffic, which PSKReporter and WSPRnet don't. - v1.2 — Emergencies Near Me (scheduled). A layperson-friendly emergency-services map at
/EmergencyMap.aspx. Geolocation-first: browser asks for your location, map centers on you, shows incidents within a radius you control (5–100 mi). Plain-English labels: "Police", "Fire", "Medical", "Helicopters Overhead", "Where's the action?" — no jargon. Pulls active calls from municipal open-data feeds in ~15 US cities behind the scenes, plus live police/EMS helicopter positions via OpenSky/adsb.fi, plus inline scanner audio playing recent calls from the matching channel via OpenMHz. Big red🚨 Emergencies Near Mebutton in the top nav on every page. Encrypted channels skipped automatically. No vehicle GPS tracking — agencies don't broadcast it; this map shows incident locations + helicopters + radio activity, not individual trucks. - v2.0 — TDoA overlay. Python sidecar (
directTDoA) invoked fromTdoaApi.ashxagainst 3+ selected KiwiSDRs, renders the solved point + uncertainty ellipse on the same Leaflet map. SeeFoxHunt/CLAUDE.md.
Hobby/educational. Only direction-find transmitters whose operator has consented (e.g. your own, licensed beacons like W1AW, WSPR/FT8 automatic beacons that publish their location anyway, or a cooperative fox deliberately put on air for the game). Do not use this for covert surveillance.