QR codes are everywhere and every online generator either watermarks them, tracks scans through a redirect, or expires them. Generating your own takes an hour and the result is permanent.

1. Generate in the browser

A library does the encoding. Your job is the interface and the output options. No server means no tracking, no expiry, and static hosting.

qr-build.txt
Build a browser-only QR generator. No server.

- Input types: plain URL, plain text, wifi credentials, vCard. Give
  each a proper form rather than making me format the string.
- Live preview as I type.
- Error correction level selectable, with a plain-English explanation
  of the trade-off.
- Download as PNG at a chosen size, and as SVG for print.
- Optional foreground and background colours, with a contrast check —
  warn me if the combination won't scan reliably.

Say which library you're using and confirm it works entirely
client-side.

2. Understand error correction

QR codes carry redundant data so they still scan when partly damaged or obscured. Higher correction means a denser code that survives more damage — which is what makes putting a logo in the middle possible.

Expose it, and explain it. Most generators hide this and produce codes that fail when printed small.

3. The things that break scanning

Low contrast. Dark on light, with real contrast. Inverted codes fail on many scanners.

No quiet zone. The blank margin around the code is part of the specification. Cropping it tightly breaks scanning.

Too small for the data. A long URL at 2cm printed is unreadable. Shorten the URL rather than shrinking the code.

Colour on colour. Anything other than dark-on-light is a risk.

4. Export for print

SVG, not PNG, for anything going on paper. It scales to any size without softening, and print shops prefer it.

Test every code with two different phones before printing a thousand of anything. Scanner tolerance varies more than you'd expect.