Makes QR codes that point at a URL you can change later, with a scan count and a design editor for colours and a logo in the middle.
Build me a QR code service that replaces the paid generators: codes I own, that keep working when a poster is already printed, with scans I can count. STACK - Node 20+ with Fastify - SQLite through better-sqlite3, WAL mode - A QR library for the matrix, and my own SVG renderer on top of it so the styling is mine - Caddy in front THE DATA MODEL - codes: id, slug, kind, destination, title, tags_json, style_json, is_dynamic, created_by, created_at, archived_at, expires_at, password_hash - code_versions: id, code_id, destination, changed_by, changed_at — a dynamic code's destination is appended, never overwritten - scans: id, code_id, created_at, referrer_host, country, city, device, os, ip_hash, bot - batches: id, name, template_json, created_at — a thousand codes generated at once with a counter or from a CSV - Kinds: url, wifi, vcard, email, sms, geo, text, event. Each has its own encoded payload format, and the formats are exactly per specification — a vCard that Android reads and iOS does not is a wasted print run STATIC AND DYNAMIC, WHICH IS THE WHOLE DECISION - A static code encodes the destination itself: it works forever, needs no server, and can never be changed - A dynamic code encodes a short link on my own domain: it can be re-pointed after printing, and it stops working the day the service does - The interface makes the reader choose deliberately and states the trade-off in one sentence, because this is the choice people regret - Dynamic codes redirect through /q/:slug with a 302, never a 301 — a permanent redirect cached in a phone can never be re-pointed RENDERING - SVG first, PNG rendered from it, and a PDF with crop marks for print - Error correction level chosen by intent: L for screens, Q or H when a logo is placed in the middle, and the interface refuses a logo larger than the correction level can survive - Quiet zone of four modules, always. Most unscannable codes in the world are missing it - Styling: module shape, eye shape, foreground and background colour, and a logo. Contrast between foreground and background is checked and a low-contrast code is refused with an explanation - Test render at the size it will be printed, with a note of the minimum physical size for the amount of data: a URL of ninety characters on a business card does not scan BATCHES - Generate from a CSV, or from a template with a counter - Every code in a batch gets its own slug and its own scan counter - Export as a zip of SVG and PNG, plus a CSV of slug to destination - A print sheet: N codes to a page with labels, as a PDF COUNTING SCANS - Only dynamic codes can be counted, and the interface says so where the number would be - Scans, unique scanners, by day, by country, by device - A unique scanner is a distinct salted hash of address and user agent within the window, and the page says so - Bots and preview fetchers flagged and excluded — a link preview in a messaging app is not a scan - Export to CSV CARE OF PRINTED THINGS - A dynamic code can expire, and an expired code lands on a page that says what it was and where to go instead — never a 404, because the poster is still on the wall - A code can be password-protected, showing a form before the destination - Archiving keeps the history and stops the redirect, with the same explanatory page THE INTERFACE - One screen: kind, content, style, preview at three sizes, download - The preview is the real code, scannable from the screen, updating as you type - A list with scan counts, searchable by title and tag - Dark and light, one accent OPERATIONS - .env: DATABASE_PATH, BASE_URL, HASH_SALT, GEOIP_DB_PATH, SESSION_SECRET - Migrations on boot, each once - The redirect answers from one prepared statement and records the scan after responding - Nightly backup off the machine, restore script - Health endpoint that renders one code and resolves one redirect WHAT MATTERS MOST Scannability and the static-versus-dynamic decision. Build the renderer with correct quiet zones and error correction first, print a page of codes at real sizes and scan them with three phones in bad light. A code that looks beautiful and does not scan is a poster nobody can use. Give me the repository, migrations, .env.example, a seed with codes of every kind, and a README with deploy steps behind Caddy and a table of minimum print sizes.
What you lose
- A redirect you can repoint after the code is printed, which is the only reason to pay rather than generate one for free
- Scan counts by day, place and device
- A designer for colours and a centre logo that still scans reliably
If you would rather not build
- Any static generator, if the target never changes
- A redirect on your own domain, which is the same idea
What it costs
as published on their pricing page
| Plan | Billed monthly | Billed yearly | Last read |
|---|---|---|---|
| — | $9/mo | — | — |
Their pricing page is where these came from. Seeing a different price? Tell us.
The escape hatch
open source · no votes, no paid placement
qr-code-styling
$0Adds colours, shapes and a centre logo while keeping the code scannable.
kozakdenys/qr-code-stylingfree · open source
Why this verdict
our own opinion · changed only by a person
94/100
Verdict yes at 94, among the highest here. A QR library plus a redirect table. The only real design constraint is how much logo a code can survive.
History
tracked since 10 Aug 2026 · nothing is ever overwritten
Questions about QR Code Generator
answered from the record above
Is QR Code Generator free?
No — the plan we track is $9 a month. Starter from around $9/month billed monthly for dynamic codes with tracking.
Can you replace QR Code Generator by building your own?
YES. Replaceable in one session with an AI coding agent. Replacement score 94 out of 100, build time one session. Read what you lose before you decide.
How much does QR Code Generator cost?
$9 a month on Starter — $108 a year. Recorded 10 Aug 2026.
What do you lose by replacing QR Code Generator?
A redirect you can repoint after the code is printed, which is the only reason to pay rather than generate one for free; Scan counts by day, place and device; A designer for colours and a centre logo that still scans reliably. If any of those carry weight for you, keep paying.
Is there an open-source alternative to QR Code Generator?
Yes: node-qrcode, qr-code-styling. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

