A browser page that generates mock IoT "cyber security trustmark" labels, built to show what a consumer-facing security label could look like.
Warning
Pre-1.0 — no stable release yet. Anything can change in any release, including a patch: APIs, CLI flags, config keys, file formats, and data already on disk. Keep your own backups. Project status. The badge above is generated from the adamXbot status list, which says what I promise for this project and every other one.
Important
This is an educational parody. The trustmarks generated by this tool are for demonstration purposes only and hold no official or legal weight. They are not issued by any government or security authority.
A creative experiment in generating "Cyber Security Trustmarks" for IoT devices, inspired by proposed consumer security labelling schemes. You fill in a form describing a device, the label redraws as you type, and you can download it or open a worked example of the verification report a shopper would land on after scanning the QR code.
It is three files — index.html, style.css and script.js — with no build step and no framework. A weekend project, finished and left alone.
Interested in why this exists? Read the full backstory →
- Draws the label as SVG, live. The trustmark is built in the browser and redraws on every form change: product name, star rating (0–3), manufacturer website, security-update window, test date, compatible smart-home ecosystems, remote access, app technology, compliance comments, an optional device IP, and a theme colour for 3-star labels. The label grows taller to fit whatever it has to hold.
- Downloads as SVG or PNG. The PNG is rasterised from the same SVG onto a canvas, so both come out of one source.
- Puts a working QR code on the label. It encodes the current page URL, and the page writes its whole state into the query string, so scanning the code reopens the exact label you generated.
- Includes an example verification report. Example verification page opens a modal standing in for the page behind the QR code, with buttons to share it by message, email or copied link.
- Adapts to the screen. Layout breakpoints at 1024, 850 and 640 px.
Nothing is stored server-side. The one piece of state that is not local is the Reg ID, which counts visits through counterapi.dev.
The live page is at cyberthing.awesome-aussie.com, served by GitHub Pages from main.
To run it yourself, clone the repo and open index.html, or serve the folder:
git clone https://github.com/adamXbot/CyberThing-Trustmark.git
cd CyberThing-Trustmark
python3 -m http.server 8000There is nothing to install, but it does need the network. The page pulls Inter and Outfit from Google Fonts, the QR library from jsDelivr, and analytics from Simple Analytics, then calls counterapi.dev for the Reg ID. The Reg ID falls back to a hardcoded value if that call fails, but label drawing needs the QR library, so it will not render offline.
Edit the three files and reload the browser. There is no package manager, no test suite and no CI workflow in this repo, so there is nothing to run before opening a pull request — check your change in the page instead, at a narrow width as well as a wide one.
Merges to main publish straight to the live site.
The visit counter that drives the Reg ID is counterapi.dev. Traffic is on a public Simple Analytics dashboard.
No licence file has been added, so default copyright applies and no permissions are granted. Ask if you want to reuse it.
Built with assistance of Gemini 3 Flash.

