{"id":46085662,"url":"https://github.com/jxmx/smooth-qsl","last_synced_at":"2026-03-01T16:38:29.848Z","repository":{"id":132808537,"uuid":"80684125","full_name":"jxmx/smooth-qsl","owner":"jxmx","description":"Smooth QSL is a simple QSL manager. Upload ADIFs and then people can download printable QSLs from the logs.","archived":false,"fork":false,"pushed_at":"2026-02-01T03:27:25.000Z","size":1888,"stargazers_count":9,"open_issues_count":1,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-02-01T11:58:04.107Z","etag":null,"topics":["adif","amateur-radio","amateurradio","ham","ham-radio","hamradio","mysql","php","qsl","qsl-card","qso","radio"],"latest_commit_sha":null,"homepage":"https://mfamily.org/smoothqsl","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jxmx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-02-02T01:52:55.000Z","updated_at":"2026-02-01T03:27:29.000Z","dependencies_parsed_at":"2023-12-01T14:42:10.543Z","dependency_job_id":null,"html_url":"https://github.com/jxmx/smooth-qsl","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/jxmx/smooth-qsl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jxmx%2Fsmooth-qsl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jxmx%2Fsmooth-qsl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jxmx%2Fsmooth-qsl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jxmx%2Fsmooth-qsl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jxmx","download_url":"https://codeload.github.com/jxmx/smooth-qsl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jxmx%2Fsmooth-qsl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29974749,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T16:35:47.903Z","status":"ssl_error","status_checked_at":"2026-03-01T16:35:44.899Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adif","amateur-radio","amateurradio","ham","ham-radio","hamradio","mysql","php","qsl","qsl-card","qso","radio"],"created_at":"2026-03-01T16:38:29.306Z","updated_at":"2026-03-01T16:38:29.840Z","avatar_url":"https://github.com/jxmx.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Firefly QSL / Smooth QSL\nFirefly QSL is a simple QSL manager designed for amateur radio clubs\nand individuals who don't need the complex QSL management system of\nmajor contesters and DXpeditions. The primary design consideration\nis a simple, effective way for hams of all computer skill levels\nto be able to upload ADIF logs and to provide a quick and easy way\nfor other hams to download their QSLs. Designed\noriginally to support the Silvercreek Amateur Radio Association's 40th\nAnniversary Special Event.\n\nSmooth QSL has been rebranded as Firefly QSL to match the\nFirefly Field Day Logger application.\n\n## Major Changes from v2.x to v3\nThe following are the major changes in version 3:\n* Full administrative login structure and session manager\n* Support for multiple source callsigns to be loaded\n* All libraries updated to the latest versions\n* Refactoring the UI to be fully responsive\n* Dark mode\n* Configuration file has changed from `qslconf.php` to `config.php`\n\n\n# Installation\n## Prerequisites\n* A websever running PHP 8.2 or better with the PDO, pdo_mysql, and\n    imagick libraries available.\n* A database running MariaDB 11+\n* ImageMagick 6.x or better\n* Basic ability to use an xxMP stack (e.g. LAMP, WAMP, etc.)\n\n## New Installation\n1. Download the [latest stable release](https://github.com/jxmx/smooth-qsl/releases/latest).\n2. Edit `config.php` and change the configuration parameters as necessary.\n3. Copy or upload all of the files to your webserver directory or hosting account.\n4. Ensure the `cards` subdirectory is writable by the webserver. If this is\nbeing installed in a hosting provider than this is likely the default.\n5. Create the MySQL database as needed and load the `qsl.sql` into your MySQL server\n6. Check the install with `check_install.php `.\n\n## Upgrading from 2.x to 3\n1. Backup your existing data and database\n2. Download the [latest stable release](https://github.com/jxmx/smooth-qsl/releases/latest).\n3. Edit the new `config.php` and merge the configuration from the old `qsoconfig.php`\n    into the new file. The only material change is `$qsl_load_key` has been replaced\n    with `$club_password`.\n\n4. It is recommended to delete the existing website files and upload fresh ones from\n    the latest release rather than try to hand-deleve the changes.\n5. Ensure the `cards` subdirectory is writable by the webserver. If this is\n    being installed in a hosting provider than this is likely the default.\n\n6. Source the contents of `upgrade_2_to_3.sql` into the database. This makes\n    changes to the qsos table and deletes other now-unused tables.\n\n7. Check the install with `check_install.php `.\n\n## Basic Coniderations\nThe application is designed to have simple, user-friendly URLs. For example,\nputting the base files in a subdirectory `/qsl` resultes in the URL\n`https://example.com/qsl` for the main application. All references to\nincludes, configs, images, etc. are all relative paths so the application\nshould be installable virtually anywhere.\n\nThe `qslmaint.php` script is run randomly on an index.php page with a 1 in 4\nrandomized chance by default of deleting old generated cards.\n\n# Using Firefly QSL\nFor those uploading ADIFs, all the ham needs is the\n`$club_callsign` and `$club_password` that was set in\n`config.php`. Firefly QSL operates on a semi-trust basis in that\nhams are relied upon to use their legitimate call signs as is\nexpected throughout amateur radio. Setting a strong password is the\nonly protection against mischef such as loading bogus QSOs or\nmalicious actors attempting to DoS the database by filling it up\nor overworking the system.\n\nThe load process uses the following workflow:\n1. Navigate to `https://example.com/qsl/load`\n2. Enter the callsign of the QSLs. This does not have to match\nthe club callsigh. For example, a 1X1 or other call can be\nloaded. Select the ADIF file, set the location from which the\ncontacts were made, and upload the ADIF file.\n3. Review the ADIF checkload on the next screen. Click Commit\n4. A \"receipt\" page will appear.\n\nThe QSL retrieval process is straight forward:\n1. A ham navigates to `https://example.com/qsl`\n2. Enters their callsign\n3. Selects the QSO(s) they want to print on the card or certificate\n4. Requests the print\n5. QSL card is displayed. Save or print as desired.\n\n# Printing QSOs on the template\nFirefly QSL uses ImageMagick to \"draw\" text on top of the QSL template\nfile. `config.php` contains a series of positioning configuration directives\nthat details how the QSL records are printed on the card. This allows for\nmaximum flexibility in designing a card in regards to layout and size. However\nkeep the following in mind:\n\n* The callsign for the QSO is printed once and is independent\nof the other QSO information.\n* The QSO record is always printed as a line of information with\nrelative or absolute offsets moving from the left to the page.\n* The fields are in the order DATE, TIME, FREQ, RST, MODE, OPERATOR, COUNTY\n* Multiline fields are printed one after another ordered\nby DATE, TIME in ascending order\n\n# Embedding Firefly QSL in another Site\nIt is possible to embed Firefly QSL in another site via an `\u003ciframe\u003e`\ntag. For example, one user of Firefly QSL is embedding it in their\nQRZ.com page. To embed the application, it's imperative to use\nthe `sandbox=\"allow-downloads\"` attributes on the `\u003ciframe\u003e`\nobject or in-browser security will not permit the download of the\nfile. For example:\n\n```\n\u003ciframe sandbox=\"allow-downloads\" frameborder=\"1\" height=\"700px\"\n  name=\"myiFrame\"scrolling=\"no\" src=\"https://example.com/qsl/\"\n  style=\"border:0px #ffffff none;\" width=\"1000px\"\u003e\u003c/iframe\u003e\n```\n\n# Contributing and Support\nAll code contributions will be considered if you send me a pull request\non GitHub. However I have certain design and simplicity goals for\nthis system and may not accept pulls that I deem to be too\ncomplex or contravenes one of my design goals.\n\nI'll do my best to answer questions or fix bug as you find them but\nthis is a part-part-part time project for me. I will help as I can\nwith installation-related questions insofar as they deal with unclear\ndirections or bugs on particular platforms but I will not help with\ngeneral installation and configuration of a webserver, PHP, MySQL, etc.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjxmx%2Fsmooth-qsl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjxmx%2Fsmooth-qsl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjxmx%2Fsmooth-qsl/lists"}