Privacy

HonestQR is built so the common action — making a code — does not require handing over data. This page says what still leaves the browser, and what does not.

Making a code

The generator runs in your browser. The URL, text, Wi-Fi password, contact details, email, SMS message, colors, and logo are not uploaded to create the PNG or SVG. The download is a file your browser saves. We do not have an account system, so there is no profile attached to a code.

Checking a code

Decoding an image happens on your device. If the code is not a web address, nothing is sent. If it is a web address, the browser sends that address to our checker, which requests it and records each redirect's URL and status code. The checker returns that list. It does not return the page body. It does not write the address into the waitlist database. Your Cloudflare account, if you deploy this project, may still keep its own request logs according to the log settings you choose. Turn those off if you do not want them. The checker refuses private and local addresses so it cannot be used to browse your network.

The checker rate-limits by IP address, more than ten traces a minute. That IP is held in memory on the worker for the rate-limit window. It is not stored next to a waitlist email.

Waitlist

If you ask to be told about editable links or scan stats, we store the email address, the time, and whether you submitted it from the generator or the check-up. The same address is stored once. You can ask for it to be deleted by emailing hello@honestqr.example. Until you replace that placeholder address with a mailbox you read, deletion requests have nowhere to go — set the address before you invite the public.

Analytics and ads

Cloudflare Web Analytics is wired up as an optional, cookieless beacon. It loads only after you choose Allow, and only if a real site token has been configured. The repository ships with the token empty, so the beacon is not requested. Advertising slots are in the HTML but hidden. They stay hidden until an operator sets the ads flag after an AdSense approval. If that happens, Google AdSense can set cookies, and the script still waits for Allow. Reject leaves both off. The choice is stored in local storage in this browser, not in a cookie we set.

The banner is shown to every visitor. A static site cannot know who is in the EU without a lookup we do not want to run. Showing the choice to everyone covers EU visitors without that lookup.

Contact

Questions about this policy go to hello@honestqr.example.