You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Let operators pull authoritative DMR data from the BrandMeister network instead of hand-typing it, mirroring the ukrepeater.net feature (#92) but for the DMR side. BrandMeister exposes an unauthenticated, CORS-enabled public API, so it is callable directly from the browser SPA — no proxy/server required.
Three flows, delivered in phases (below):
Flow A — Channel datasource: when adding/editing a DMR channel, look up a repeater on BrandMeister (by ID / callsign) and pre-fill channel information (frequencies, colour code, etc.).
Flow B — Auto-generate talk groups + RX group list: query the talk-group APIs for a repeater to auto-generate the talk groups it carries (if not already present) and build an RX group list tailored to that repeater.
Flow C — Validate against an authoritative source: check existing local talk groups / channels against BrandMeister and surface a diff.
Data source
Halligan API v2 — the API behind the BrandMeister Dashboard. It authenticates dashboard users and routes queries to the correct backend servers in the decentralised BrandMeister network.
Base URL: https://api.brandmeister.network/v2/
Docs: https://api.brandmeister.network/docs/
Public read endpoints are unauthenticated and CORS-compatible for the queries we need (repeater / talk-group lookups).
Treat as third-party / potentially unstable: degrade gracefully on failure, cache responses, attribute the source in the UI, and keep the "not authoritative for emergency operations" disclaimer.
TODO during implementation: confirm exact v2 endpoint paths and response shapes against the live docs, plus which endpoints are genuinely unauthenticated + CORS-open vs. requiring a token.
Architecture / vendor boundaries
Add a network-backed "remote DMR directory" source — a sibling to existing import adapters under src/lib/import/, not a CSV file adapter. Mirror the generic "remote repeater directory" pattern introduced for ukrepeater.net (feat: import by callsign or qth from ukrepeater.net #92) so multiple directories can plug in.
This is an import-boundary concern only: field mapping (BrandMeister → internal Channel / talk group / RX group list) lives in the new source/adapter. The internal models stay vendor- and radio-neutral — no BrandMeister constants, no caps, no profile assumptions in mutations/validation/CRUD.
Likely multi-commit work: branch from origin/main, atomic conventional commits per logical change (do not batch into one end-of-plan commit), open a PR linking Closes #<this>. Pair with the docs/features / progress-tracking skills for the build log.
Problem / outcome
Let operators pull authoritative DMR data from the BrandMeister network instead of hand-typing it, mirroring the ukrepeater.net feature (#92) but for the DMR side. BrandMeister exposes an unauthenticated, CORS-enabled public API, so it is callable directly from the browser SPA — no proxy/server required.
Three flows, delivered in phases (below):
Data source
Halligan API v2 — the API behind the BrandMeister Dashboard. It authenticates dashboard users and routes queries to the correct backend servers in the decentralised BrandMeister network.
https://api.brandmeister.network/v2/https://api.brandmeister.network/docs/Architecture / vendor boundaries
src/lib/import/, not a CSV file adapter. Mirror the generic "remote repeater directory" pattern introduced for ukrepeater.net (feat: import by callsign or qth from ukrepeater.net #92) so multiple directories can plug in.Channel/ talk group / RX group list) lives in the new source/adapter. The internal models stay vendor- and radio-neutral — no BrandMeister constants, no caps, no profile assumptions in mutations/validation/CRUD.Field mapping (import boundary only) — to be finalised against live API
Channel.rxFrequency/Channel.txFrequencyChannel.colourCodeTalkGroupentitiesRxGroupListvendorExtrasScope / phasing
Open questions
vendorExtras) vs discard.Relates to
Workflow note
Likely multi-commit work: branch from
origin/main, atomic conventional commits per logical change (do not batch into one end-of-plan commit), open a PR linkingCloses #<this>. Pair with thedocs/features/ progress-tracking skills for the build log.