meshai/work/dashboard-frontend
Matt Johnson c2fd4d7131 feat(dashboard): custom-announcements frontend (Announcements panel)
Extends the existing ScheduledBroadcasts page with an Announcements
section (list + create/edit form) over the announcement_routes.py API
from c0572b04. No new page/route/nav entry.

- AnnouncementsPanel: list (plain-English schedule summary, channel
  summary, enabled toggle, last sent, delete-with-confirm) + a
  create/edit form (message textarea with a live char count against
  the 140-char budget, schedule-kind-specific controls, Preview button
  wired to POST /announcements/{id}/preview -- never sends).
- AnnouncementChannelPicker: polls GET /api/channels (Meshtastic) and
  GET /api/meshcore/channels/detail (MeshCore) and renders both as
  checkbox groups, mixing transports freely. Degrades per radio: shows
  a plain "unreachable" note and still renders any already-selected
  channel by its stored name so an existing announcement stays
  editable even when a radio is down. Blocks save on zero channels.
- New announcements always save disabled (enabled is never sent from
  the create/edit form); the list-row toggle is the only place this
  form family arms one, matching the backend contract where PUT is the
  sole place `enabled` can change.
- lib/api.ts: fetchMeshtasticChannels + the Announcement CRUD/preview
  client functions, following the existing fetchJson/detail-surfacing
  error conventions.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-16 18:29:26 +00:00
..
public refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
src feat(dashboard): custom-announcements frontend (Announcements panel) 2026-08-16 18:29:26 +00:00
index.html refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
package-lock.json fix(ci): add package-lock.json for npm ci in Docker build 2026-06-16 03:48:44 +00:00
package.json refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
postcss.config.js refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
tailwind.config.ts refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
tsconfig.json refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
tsconfig.node.json refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
vite.config.ts feat(routing): MeshCore as first-class delivery types (meshcore_broadcast/dm) (#11) 2026-07-02 22:42:14 -06:00