Built a QR Code Generator That Doesn't Suck
Posted by nuung@reddit | programming | View on Reddit | 33 comments
TL;DR: Made a QR generator with no ads, no login, no server tracking. Just UTM parameters + logos + high-res downloads.
🔗 Try it here | 📖 Full story on Medium
Why I built this
Needed QR codes for marketing campaigns. Every existing service had the same issues:
- Force you to sign up for basic features
- Watermark their branding on YOUR QR codes
- Replace your URLs with their redirect domains (!!)
- Track every scan and collect your data
What makes this different
✅ 100% client-side - No data ever leaves your browser
✅ UTM parameter presets - Facebook, email, print campaigns with one click
✅ Logo integration - Drag & drop, auto-centers perfectly
✅ High-res downloads - 1200x1200px for print quality
✅ Real-time preview - See changes instantly
✅ Open source - Check the code yourself
Tech stack
- Vanilla JavaScript (no frameworks needed)
qrcode-generator
library- Canvas API for rendering
- GitHub Pages hosting
- Zero dependencies on external services
The entire thing runs in your browser. I literally cannot see what QR codes you generate because there's no server.
Perfect for
- Marketing campaigns with UTM tracking
- Business cards and event materials
- Product packaging QR codes
- Anyone who values privacy
No registration, no payment, no bullshit. Just works.
GitHub: https://github.com/nuung/qrcode-gen
Live Demo: https://nuung.github.io/qrcode-gen/
programming-ModTeam@reddit
This is a demo of a product or project that isn't on-topic for r/programming. r/programming is a technical subreddit and isn't a place to show off your project or to solicit feedback.
If this is an ad for a product, it's simply not welcome here.
If it is a project that you made, the submission must focus on what makes it technically interesting and not simply what the project does or that you are the author. Simply linking to a github repo is not sufficient
MaximRouiller@reddit
If you take a small link and make the logo large enough, you can end up with a QR code that isn't parsable.
davvblack@reddit
nice! my only suggestion would be for the utm/tracking stuff to stay empty by default, for people not using it. if you do need it, you'd need to paste into each field anyway right?
Artistic_Sir_4178@reddit
add the option to change the error correction level please 🙏
nuung@reddit (OP)
Oh, thank you so much! I totally missed that part — I’ll add it right away.
Iggyhopper@reddit
Did you use AI to write a sentence?
nuung@reddit (OP)
yeah,, Im not good at Eng. But not all of them, some sentence.
Iggyhopper@reddit
I suppose that is a benefit.
You shall pass.
nuung@reddit (OP)
updated! :)
rsclient@reddit
Need a quick QR code to connect to Wi-Fi? Here my trivial Wi-Fi QR generator
It ticks a bunch of the same boxes as this: it's all client=side with only static files on the server. And AFAICT it generates actually standards-compliant WIFI URLs, which I really needed :-)
Supuhstar@reddit
Man this QR code generator sucks
thgintaetal@reddit
Can you add a one-click way to disable including UTM tracking parameters? Not everyone needs them.
Currently, the way to remove them isn't obvious: deleting the contents of all the UTM fields worked, but two of those are starred as mandatory.
nuung@reddit (OP)
you can use the clear button “ Quick Presets” below!
zalo@reddit
With high cell size and low margin, I’m noticing non-grid aligned cells https://imgur.com/a/yezKoQv
nuung@reddit (OP)
oh thank you so much! I will fix it! I think it’s probably two separate resizing issues!
179b5529@reddit
well, it sucks
nuung@reddit (OP)
Does the design suck? If you tell me what specifically sucks, I’ll do my best to improve it!
MrChocodemon@reddit
The "Cell Size" and "Margin" sliders are swapped in their functionality
nuung@reddit (OP)
Ah, it's not actually changing, but since the margin is calculated as
margin * cellSize
, it appears to change proportionally when the cell size changes. I think that's why it feels like the behavior has changed. I'll try to make it more intuitive! thank you!ChemTechGuy@reddit
This is the kind of shit I love to see from my fellow software engineers. Great job OP, love that you were able to remove some unnecessary bullshit from our world
nuung@reddit (OP)
thank you!! :)
Chisignal@reddit
Nice! But it’s missing for example error correction levels, which is one of the things I often miss in QR code generators. I don’t particularly care about UTM tags, I can produce that URL myself, but changing the amount of redundancy (effectively, size) is something I often do depending on the medium the QR code is going to be in.
nuung@reddit (OP)
Oh that’s right. thank you so much! I will fix it!
nuung@reddit (OP)
updated! :)
Motor_Let_6190@reddit
👍🏾🏆💯
roxya@reddit
Is altering the position pattern and timing pattern cell sizes an actual thing people do? It seems odd to me
nuung@reddit (OP)
nuung@reddit (OP)
what ?! y?! oh no.. origin: I once used it to adjust the QR code when embedding it in an eBook, because it would break or become unreadable in the final version.
Chisignal@reddit
Not sure what happened here but FYI your comment is empty lol
spicypixel@reddit
Would be nice to remove the logo if you don't want it after uploading and seeing it looks horrific and you preferred a logo-less design.
Good work.
nuung@reddit (OP)
ohhhh sorry I forgot that!! thank you for real feedback 🙏🙏🙏
tkrombac@reddit
This is great work! Very clean interface and complete function set. Congrats and thank you.
nuung@reddit (OP)
thank you so much! :)