client | ||
cmd | ||
internal | ||
pkg | ||
sql | ||
util | ||
.gitattributes | ||
.gitignore | ||
.mockery.yaml | ||
config.sample.yaml | ||
go.mod | ||
go.sum | ||
LICENSE | ||
Makefile | ||
README.md |
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).
License and Copyright
© 2024, Daniel Ponte
Licensed under the 3-clause BSD license. See LICENSE for details.
Credits
Thanks to, among others:
- rdio-scanner for the original inspiration
- go-trending and go-time-series
- isoweek
- minimp3