ae5au / gmrs.app-website

Lookup for amateur and GMRS radio licensees with cross-referencing between holders of both licenses
https://gmrs.app/
Apache License 2.0
11 stars 5 forks source link
amateur-radio gmrs

gmrs.app-website

Lookup for amateur and GMRS radio licensees. Cross-referencing for those that hold both licenses.

Premise

Many GMRS radio operators are also licensed amateur radio operators. If you know an operator's call sign for one service, this app helps find the record for the other service. Even if the operator isn't licensed on the other service, you can lookup their details.

Match is first checked based on the FRN (FCC registration number). A few things to remember:

"Possible matches" are licenses with a different FRN but a matching street, city, and state. Some normalization is done to try to match cases such as where one address spells out "Street" and another uses abbreviated "St.", but there are plenty of cases that would not match. Don't fully trust this section to show all possible results.

A scheduled workflow downloads the data weekly when the FCC publishes new full files. Currently that is scheduled for 0700 UTC on Monday morning.

Tech bits

The site runs totally in the browser with no server processing other than serving the static files. How do we query a database with over a million total records from the browser without using a lot of data transfer? Magic! Well, not exactly...

sql.js-httpvfs from phiresky is a virtual file system wrapper around a WebAssembly client for SQLite. It allows a browser to query a database hosted on a static file hoster without fully downloading the database. It depends on a good/simple database and index structure which is a great fit for this application. It also depends on the hoster supporting HTTP range requests and responding with only the specific part of the file requested.

The site is currently hosted on GitHub Pages which works well. I might move to Cloudflare Pages if they implement range requests (they are supposed to be working on it).

There is a Python script that downloads the files from the FCC, parses the needed tables into a SQLite in-memory DB, and then joins only the needed data into a SQLite file. That file is then indexed, optimized, and split into chunks.

The site is written in Node.js and packaged with webpack. This was my first experience with Node. I'm sure there are plenty of things to improve. PRs are welcome!

Development