- Rebuild the settings modal on the native
<dialog>element - Replace the custom settings toggle with a restyled checkbox
- Replace search with composable filters by channel, protocol, baud, and recipient; filter state is kept in the URL so deep links and browser back/forward work
- Rewrite the
pagestable to store channel, protocol, baud, content type, and per-decode metadata as structured columns (migration runs on receiver startup) - Drop the full-text search toggle; text search is a single trigram-accelerated substring match
- Capture tone-only pages, previously dropped by the length-based spam filter
- Log spam-filtered pages separately from database failures in receiver stats
- Split
receiver.pyinto focused modules underreceiver/src/ - Add
MMNG_DUMP_DIRtap for capturing raw multimon-ng stdout
- Show the protocol family (POCSAG/FLEX) and baud rate as a chip beside the source channel name
- Add a bottom pagination control below the table on desktop
- Disable the next-page button when there are no more results to load
- Make filter-columns tab focusable
- Soften the inline-code tooltip style
- Preserve field-separator spacing in decoded pager messages
- Add Biome linting for JS
- Switch healthchecks to static Go binary (dmptrluke/healthcheck)
- Add provenance and SBOM attestations to Docker builds
- Move DockerHub credentials to environment secrets
- Add build concurrency (cancel superseded runs)
- Bump CI dependencies (setup-uv, upload-artifact, download-artifact)
- Hardcoded SDR sample rate to 1 MSPS; removed
sample_ratefromchannels.jsonconfig. - Rewrote Quick Start section in README.
- Switched receiver from psycopg2 to psycopg (v3) for PostgreSQL access.
- Replaced global
runningflag withthreading.Eventfor cleaner shutdown handling. - Converted receiver Dockerfile to multi-stage build, removing build tools from the runtime image.
- Pinned multimon-ng to release tag 1.4.1 instead of building from HEAD.
- Hardcoded stats logging interval to 60 seconds (removed
STATS_INTERVALenv var). - Bumped CI action versions (checkout v6, buildx v4, login v4, build-push v7).
- Fixed Docker Hub image name from
pokesag-servertopokesag-receiverin CI.
- Config file validation: empty channels, missing keys, and empty protocol lists now produce clear error messages at startup.
- Health monitoring for multimon-ng subprocesses; receiver exits for restart if a decoder dies.
- Added
restart: unless-stoppedto all services in docker-compose.yml. - Added
.dockerignorefor the receiver build context.
- Removed
STATS_INTERVALenvironment variable (was configurable, now fixed at 60s). - Removed
netcat-openbsdfrom receiver image (unused).
- General code polishing and cleanup. (
7577d9a)
Major release: new receiver backend, frontend overhaul, and modernized build tooling.
- Hover tooltips for annotated codes in messages.
- Hash-based color coding for recipient identifiers.
- Source filtering in search.
- RTL-SDR device selection by serial number (
RTL_DEVICE_SERIAL). - Container healthchecks for both receiver and web services.
- Mobile layout mode with responsive design overhaul.
- Breaking: Replaced Lua-based receiver with Python/GNURadio backend; configuration now uses
channels.jsoninstead of individual env vars. - Replaced webpack with esbuild for frontend bundling.
- Upgraded to Node 22.
- Redesigned UI with darker theme, higher contrast, and react-bootstrap-icons.
- Removed CodeQL analysis workflow.