What I've shipped, in plain language.
I keep this page so you can see qr-cow is alive and changing. Dates are real, entries are written by hand — no "released v1.27.3" robot prose.
What's next, in rough order
- soon
Bulk CSV import
Upload 200 rows; get 200 dynamic codes. Five people have asked; I want it too.
- next
Brand kits
Save a palette + logo + body shape, reuse across new codes in one click.
- later
Native iOS app
The PWA covers 90% of it, but a real app gets you the home-screen widget for top-3 codes.
- later
Scannability checker
Upload a photo of your printed code — get a 0-100 score based on contrast, error correction, and what the camera sees.
Shipped
Voice rewrite
Rewrote the hero, FAQ and pricing copy after re-reading them and realising they sounded like every other QR-code site. Also bumped Growth from $8 to $9 — $8 felt apologetic. New about page and changelog (this).
shippedwritingComparison pages + signed-in studio fix
Three competitor-comparison pages live — vs QRCode Monkey, QRTiger, Beaconstac. Honest 'where they win / where we win' tables, no marketing spin. Also fixed a small bug: signed-in users on /generate were still seeing the 'Sign up free' nudge. They now get the inline save panel instead. Caught by a user — thank you.
shippedfixPWA — install as an app
qr-cow is now installable. Add to home screen on iOS, install on Chrome desktop and Android — opens in its own window, runs offline for designing, and the dock shortcut takes you straight to 'New QR'.
shippedReal analytics
Country panel with flags. Device, OS, browser breakdowns. Hour-of-day heatmap. Took two weeks longer than I expected because geo headers from different CDNs don't agree on country codes.
shippedCrypto billing — NOWPayments
USDT (TRC20/ERC20/BEP20), BTC, ETH. Webhook-driven, so your plan upgrades the moment the network confirms. Roughly one minute on TRC20.
shippedv0.1 — public
Static and dynamic QR codes, the studio with six body shapes and gradients, logo upload, anonymous downloads. The launch felt anti-climactic and that was probably the right shape.
shippedBrand + name
After a week of stalling, picked the name (qr-cow) and the colour (orange). The mascot was meant to be a placeholder. Six weeks later it's still there.
writingThe first dynamic redirect
Wrote a 40-line FastAPI endpoint so my friend's café could change its menu without reprinting. That endpoint is still in the codebase, mostly unchanged.
shipped
Found a bug, want a feature, or just want to argue with the FAQ? [email protected] — replies usually within a day.