Creating hamawardz.app - a free software for ham radio award creation

In the beginning, a fellow OM asked me for my professional opinion, how much effort it would be to create a fully automated award checking and creation homepage. He had an idea to create an award program, which is still in development.

I told him that, depending on the rules he plans to implement, it would be doable albeit no project for a day or two.

A few weeks later, the idea of doing an award program for an event I'm participating in, the Meme Appreciation Month 2023, popped up. Since this is a world wide event, "manual" award creation via sent in logs on an email account was out of the question. It had to be fully automated, or would not happen at all.

So I crawled through the depth of the internet to find out if such a solution exists. I did find award programs who still do it the manual way. There are awards which use Clublog for Logsearch, but email for the application process. On the top end, there are the solution that WRTC used for their award, which is a paid application  with all bells and whistles, such as some live integration features for instant log upload.

The problem was: a paid solution (as for most of the little ham radio projects out there) is out of the question. Furthermore: all these bells and whistles were not needed.

Our perfect solution was a webpage, where each participant could upload periodically (ideally daily of course) ADIF files for their callsign and each OM or YL out there could just - without logging in - check for their award progress and download their award once they became eligible.

As far as I am aware, such a piece of software did not exist. Time to roll up my sleeves.

As a base, I chose the Laravel PHP framework, because I already did some (albeit MUCH smaller, non-public projects) with it. Also, the framework runs really performantly on the smallest and tiniest of computers, even down to raspberry pis. Most shared hosting services allow for installation of laravel either out of the box or with some trickery (mostly on really really cheap plans). The configuration is easy and - because of the possibility to use a file-database like SQLite - there is no need for a database server for the backend. Laravel supports a wide variety of databases like MySQL, SQLite, MSSQL, PostgreSQL, and so on, so if someone wants or needs a bigger, full-fledged database, no problem there.

For myself, even though I adore SQLite and the database would likely still be more than enough for even a global event like Meme Appreciation month, I chose MySQL, because I already had a MySQL instance on hand. Anyone interested in why SQLite is such a nice choice for a project like that, I highly recommend this talk of the lead dev for SQLite: Link. For development, I used SQLite, so I can say the software is tested with SQLite and MySQL.

So I started working on database design, HTML, CSS and Javascript and after a good while, a first prototype emerged, which got tested and reviewed by some very nice people I know.

Even though this project was fun as hell and improved my Laravel skills from beginner to well intermediate, I sure lost some hair over a few features.

Parsing of ADIF files in PHP was one thing, but the most frustrating thing was the creation of the award PDF files in PHP. Most of the frustration in the end came from my (still) very lackluster skills in CSS in conjunction with some very poor documentation by the maintainers of the used libraries.

But in the end, I got it working.

We will use this software on its permanent domain over at hamawardz.app for the duration of Meme Appreciation Month 2023 as a trial run. If it proves to be stable, bug free and easily usable for this event, I'm strongly contemplating to open-source this project, so that anyone who wants to start an award program can use this software free of charge.

If I do so, I'll inform you on this blog.

For now, I hope I meet you on the bands this summer as DLØLOL and DLØNGCAT and that you are able to download a few awards during the event at hamawardz.app.

73 and good DX, de Stefan, DB4SCW