# SCTAK radio reference directory

Built September 28, 2026. Local artifacts, not deployed or RF-tested.

92 records: 36 SCHEART analog entries, 31 fixed DMR entries, three deployable DMR resource entries, and 22 NOAA weather-radio transmitters serving SC. Of the NOAA transmitters, 16 are in SC and six are in neighboring states with published SC county coverage. Deployable entries are resource listings, not a claim that three repeaters are currently on air.

`catalog.json` is the normalized dataset; `catalog.geojson` has the same records with null geometry when coordinates are unknown. Only the 22 NOAA records currently have provider coordinates. `radio-directory.html` in the website root provides service and text filters. No fake repeater map pins or nearest-repeater claims are included.

Sources:

- [SCHEART analog table](https://scheart.us/repeater-frequencies-pl-and-node/)
- [SCHEART DMR table and operating guidance](https://scheart.us/repeater-system-frequencies-talk-groups/)
- [NOAA SC station listing](https://www.weather.gov/nwr/stations?State=SC)
- [NOAA published station metadata](https://www.weather.gov/source/nwr/JS/ccl-data.js)

SCHEART rows were manually transcribed from the public operator pages into `scheart-analog.tsv` and `scheart-dmr.tsv`. Direct HTTP download encountered a browser challenge; no challenge was bypassed. Table facts were obtained through the web reader. No RepeaterBook data was imported. Confirm redistribution arrangements before public/commercial release.

The analog source explicitly identifies repeater input/output, mapped respectively to a user's radio transmit/receive. Published unusual values are preserved: Rock Hill node 40 lists a negative 600 kHz offset at 147.030 MHz. Do not silently change it to the common regional convention. The CTCSS column does not separately specify encode and decode behavior, so that distinction is unverified.

The DMR table's frequency columns lack explicit input/output headings in the inspected page. Both frequencies are stored in source order; radio_receive_hz/radio_transmit_hz remain null until direction is confirmed. Color code 1 is operator-published. Consult the linked operator page for current talkgroups, time slots and emergency-operation changes. Programming files are intentionally not generated from ambiguous data.

NOAA records are receive-only references. The import retains callsign, coordinates, frequency, provider status, SC county coverage and six-digit SAME codes as strings, including leading zeros. Status is a retrieval-time snapshot, not continuous monitoring or a local reception test. County coverage does not guarantee reception at every location.

Rebuild with `python tools/build_radio_catalog.py`. It uses local source files and does not refresh the network data. To refresh NOAA, download the metadata URL to `raw/noaa-stations.js` and rebuild. To refresh SCHEART, recheck the operator tables and edit the TSV source records. Downloaded JavaScript is never executed; only its JSON data array is parsed.

Validation: rebuild checks unique IDs, valid frequency ranges, receive-only NOAA semantics and six-digit SAME codes. JSON and GeoJSON counts match. Source sampling checked analog positive/negative offsets and 12.5 kHz DMR precision. The new viewer passes JavaScript syntax validation; browser interaction/layout QA remains outstanding.

Next: obtain operator-confirmed repeater coordinates, resolve DMR RX/TX headings, verify on-air status, add non-SCHEART club-owned repeaters under suitable data permissions, and integrate the GeoJSON with AE/TAK. This collection is not all SC amateur repeaters.
