https://github.com/pskillen/codeplug-tool
Tools and mapping for OpenGD77 codeplugs
https://github.com/pskillen/codeplug-tool
Last synced: 4 days ago
JSON representation
Tools and mapping for OpenGD77 codeplugs
- Host: GitHub
- URL: https://github.com/pskillen/codeplug-tool
- Owner: pskillen
- Created: 2026-06-17T14:55:02.000Z (12 days ago)
- Default Branch: main
- Last Pushed: 2026-06-18T13:22:58.000Z (11 days ago)
- Last Synced: 2026-06-18T14:16:59.000Z (11 days ago)
- Language: TypeScript
- Homepage: https://pskillen.github.io/codeplug-tool/
- Size: 351 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
# MM9PDY Codeplug Tool
A browser-based companion for amateur radio **codeplug** design — a modern layer on top of the clunky, vendor-locked **CPS** (customer programming software) we all have to live with.
**Live site:** [pskillen.github.io/codeplug-tool](https://pskillen.github.io/codeplug-tool/) (updated when a full GitHub release is published).
> **OpenGD77 CSV** is the first shipped import/export **format** — one format among several planned (Baofeng DM32 CSV, qDMR YAML, native YAML, and analogue-only formats like CHIRP). The data model and import/export layers are built to be format-agnostic; OpenGD77 is not special, just first.
## What it is
If you program DMR or FM radios, you already know the drill: every manufacturer ships its own CPS, most are dated, fiddly, Windows-only, and none of them talk to each other. Worse, they are closed ecosystems — the on-radio codeplug format is proprietary and undocumented.
So this tool deliberately does **not** try to write your radio's binary codeplug. Instead it helps you design a codeplug **layout** — channels, zones, talk groups, TG lists, contacts — with a far nicer UI than the CPS, then **exports it in a format your CPS already understands** (usually CSV). You import that into the vendor CPS as the last step and write it to the radio there.
Think of it as the planning and management front-end the CPS never gave you:
- **Visualise** your codeplug — see channels on a map instead of squinting at a spreadsheet of lat/long.
- **Manage** channels, zones, talk groups, and contacts with sane editing and validation.
- **Enrich** automatically where it helps (e.g. geography, references) rather than hand-typing everything.
- **Work across formats** from one consistent interface (OpenGD77 CSV first; more formats planned).
## How you'd use it
The tool is built around a small number of round-trip workflows:
1. **Start from your existing codeplug.** Export it from your CPS as CSV and import it here — OpenGD77, CHIRP, or another supported format.
2. **Or start fresh.** Create a blank project and build the codeplug from scratch.
3. **Edit and persist.** Changes save in your browser; optional native YAML and cloud sync are planned.
4. **Export for your radios.** Export the same project to **one or more** CPS formats when you are ready to flash — DMR via OpenGD77, analogue FM via CHIRP, etc.
Full workflow: [`docs/features/workflows/operator-lifecycle.md`](docs/features/workflows/operator-lifecycle.md).
### Storage
Your data lives in your browser's **LocalStorage** for now — nothing is uploaded to a server, and CSVs you load never leave your machine. Cloud sync (Dropbox, OneDrive, Google Drive) is planned so a codeplug can follow you across devices.
## Status and roadmap
| Capability | State |
| --- | --- |
| Channel map (markers, zone hulls, OSM/Mapbox tiles) | **Shipped** |
| Format-agnostic internal data model | **Shipped** (refactor ongoing) |
| Native YAML import / export | Planned |
| Export to a chosen format (OpenGD77 + CHIRP shipped; DM32, qDMR planned) | In progress |
| LocalStorage persistence | **Shipped** |
| Multiple projects, switchable | **Shipped** |
| CRUD for channels / zones / talk groups + TG lists / contacts | In progress |
| Read-only tabular report (zones, channels, TGs) | **Shipped** |
| Cloud storage (Dropbox / OneDrive / Google Drive) | Planned |
Planned work is tracked as [GitHub issues](https://github.com/pskillen/codeplug-tool/issues) — browse the open tickets for the current backlog and design notes.
### What ships today
**Report views** — import an OpenGD77 CPS export and browse channels, zones, talk groups, contacts, and RX group lists as tables with detail pages. Channels and zones pages include an inset map.
**Channel map** — plot channels with valid coordinates; draw coloured hulls around zone members. Default tiles are OpenStreetMap (no API key); configure Mapbox streets/satellite on **Settings** — tokens stay in browser LocalStorage only.
Open the [live app](https://pskillen.github.io/codeplug-tool/), or run locally and go to `/#/summary`. Docs: [`docs/features/report/`](docs/features/report/README.md), [`docs/features/map/`](docs/features/map/README.md).
## Development
This is a **Vite + React + TypeScript** single-page app (Mantine UI, react-leaflet maps) at the repo root, deployed to GitHub Pages.
```bash
npm install
npm run dev
```
Visit `http://localhost:5173/codeplug-tool/`. Useful scripts: `npm run lint`, `npm run format:check`, `npm run test`, `npm run build`.
Use local CPS exports from `sample-exports/` (gitignored) for testing — do not commit operator codeplugs.
### Where to find things
| You want… | Look in |
| --- | --- |
| Agent / editor conventions and repo layout | [`AGENTS.md`](AGENTS.md) |
| Build, versioning, and deploy details | [`docs/build/README.md`](docs/build/README.md) |
| Feature contributor docs (index) | [`docs/features/README.md`](docs/features/README.md) |
| Channel map internals | [`docs/features/map/README.md`](docs/features/map/README.md) |
| Git workflow (branching, commits, PRs) | [`.cursor/skills/git-workflow/SKILL.md`](.cursor/skills/git-workflow/SKILL.md) |
| Agent skills (progress tracking, feature docs, versioning) | [`.cursor/skills/`](.cursor/skills/) |
The deployed build shows its environment and version in the page footer — see the [version-number skill](.cursor/skills/version-number/SKILL.md) for how that is injected.
## Disclaimer
Frequency, coordinate, and site data come from the CSVs you load and are for amateur programming convenience only. They are **not authoritative** for emergency or any safety-critical operations. You are responsible for the data in your own codeplugs and exports.