Validating JSON against a 1980s Database

For nearly 30 years, the nonprofit rodeo association I compete with has used a 16-bit DOS application to manage membership and rodeo data. In 2023, they hired a company to help them upgrade to something more modern. The initial versions of this new system would only handle registration and would not integrate with the existing system, so it left rodeo staff with the same manual validation effort they’ve always had.

I wanted to ease the burden of manual validation, but knew whatever I produced would need to to be easy enough for the rodeo staff to install and use: although they are certainly technical enough to run a command-line application in a terminal emulator, I couldn’t reasonably expect the average user to install a long list of dependencies, build the application from sources, or to post-process its output with other scripting tools.

So I released a Rust application that hosts a Vue frontend they can load in their browser, and published binaries for their hardware and operating system. It reads the membership database files used by the current application and serves a localhost web app. There, they can paste JSON data produced by the new registration site, and it’ll validate it against the membership database, generate a report of validated registrations, highlight issues, and suggest fixes. In addition, it includes a fuzzy-search tool to quickly find members, even if there are typos in their registration details.

I included tools to generate random data and used them to host a demo they could play with immediately. The README includes detailed explanations of the program’s features, as well as instructions for more technical users on how they can use the command-line interface to quickly fuzzy-search the database or use the validation reports as part of a larger pipeline.

It was used successfully with the rodeos we’ve had since then, reducing manual validation effort from hours to seconds, and revealing issues easily missed when done manually.

It was a great way for me to get more experience with Rust and Vue. This series describes the background technical aspects of the existing system, my approach to integrating with it, my goals for the project and the reasoning behind them, and the challenges I encountered along the way.