A scanner call server written in Golang, with Angular and Flutter clients.
Find a file
2025-01-10 20:10:14 -05:00
client api 2025-01-10 20:10:14 -05:00
cmd switchpart (#62) 2024-12-01 17:26:10 -05:00
internal Unify JSON output of calls endpoints for UI 2025-01-05 10:50:19 -05:00
pkg Set maxAge 2025-01-09 13:44:43 -05:00
sql Alert rules 2025-01-07 22:17:27 -05:00
util Omitempty 2024-11-25 16:04:07 -05:00
.gitattributes count SQL 2024-12-27 14:25:07 -05:00
.gitignore Relay 2024-11-18 18:31:17 -05:00
.mockery.yaml Partitioning (#60) 2024-12-01 03:01:09 -05:00
config.sample.yaml Add sameSiteNoneForInsecure option 2025-01-05 11:31:12 -05:00
go.mod bump deps 2024-11-26 09:29:13 -05:00
go.sum bump deps 2024-11-26 09:29:13 -05:00
LICENSE License, querier interface 2024-07-28 19:51:23 -04:00
Makefile split web build 2025-01-02 22:18:32 -05:00
README.md credits 2024-12-27 17:14:55 -05:00

stillbox

"When they say stillbox, you know it's real."

A Golang scanner call server and Angular frontend. Basically a rewrite of rdio-scanner with a cleaner backend (not frontend, so far; I am not a frontend guy and it shows) and a more opinionated featureset.

Primary differences:

  • Backend written as if Go is actually a typed language

    I never would have started this project if existing projects were this way, as modifying them would have been far easier.

  • No directory watch source, for now

    This is not a feature I need personally, but would be simple to implement as another source.

  • Only supports Postgres DB right now. May add SQLite someday.

    Most all database access is abstracted using a repository architecture. The calls table is also partitioned, with configurable intervals and retention.

  • Filter calls by duration in search

    This feature was a major impetus for even starting the project.

  • Both REST and WebSocket APIs

    REST is used for the admin interface, and WebSockets/protobuf are used for listener apps, including Calls (both Flutter and terminal versions).

  • Uses protobuf instead of JSON for the WebSocket API (no slices of integers for call audio!)

    Another thing that originally spawned the project.

  • Talkgroup activity alerting

    We use go-trending to implement this.

  • "Native" flutter client (Calls) for Android/iOS/macOS/Linux/Windows (in progress)

    This client, as of this writing, works for listening linearly only. More functionality to come. Currently available here.

  • RadioReference talkgroup import, SDRtrunk talkgroup playlist export

    Just copy and paste from RadioReference. You can also have your talkgroup labels in SDRtrunk!

  • Incidents functionality (group past calls together and retain them)

    Keep track of interesting past calls and link them to your friends. Calls linked to an incident are even swept away before retention pruning is done!

  • No premiumization nags or advertising of any kind

    Another thing that drove me to start this project. It's either open source, or it isn't, folks.

  • 3-clause BSD license

    But that doesn't mean I don't want your improvements so that I may incorporate them!

Note

If this message is still here, the database schema initial migration and protobuf definitions are still subject to change.

Once stillbox is actually usable (but not necessarily feature-complete), I will remove this note, and start using DB migrations and protobuf best practices (i.e. not changing field numbers).

© 2024, Daniel Ponte

Licensed under the 3-clause BSD license. See LICENSE for details.

Credits

Thanks to, among others: