dynamic qr codes
One QR code.
Forever.
The code never changes. What it points to is up to you.
any phone camera opens it
Studio sticker
Where it points.
Saving takes effect everywhere the moment you press it. Nothing printed changes.
Activity.
A scan is a country code and a timestamp. Nothing that identifies whoever pointed their phone at it.
History.
Every destination this code has had. Append-only: nothing here can be edited or deleted.
An uploaded image
Active since 14 August 2026 · current
- Point here again
/santi
Active from 3 March 2026
- Point here again
https://toscanini.me
Active from 11 January 2026
how it works
Print once. Change your mind forever.
Three steps, and the line comes back to the last one.
Claim
Pick a handle. iris mints an eight-character slug and a code that encodes it. The slug is yours forever and is never reissued.
Download the SVG. Put it on a sticker, a poster, a business card, a wall. It is a normal QR code, and every phone camera already reads it.
Retarget
Change where it goes. A URL, your linktree, an image. The pixels never move, so nothing needs reprinting.
The same eight characters, at every size.
A printed QR normally encodes its destination, which is why changing your mind means reprinting. This one encodes a slug that belongs to you. Twenty millimetres is enough for a phone to read it, and the destination behind it is a row in a database you control.
Export as SVG for print, PNG at three sizes for the web, or a phone wallpaper laid out to clear the clock.

The code can be a picture.
A scanner reads the centre of each module and nothing else. Split every module into 9 dots, keep the centre one, and the rest of the square is free. iris dithers a photograph into that free space, so the 57×57 code above is also a 171-pixel portrait.
It costs some of the tolerance a scanner has for blur and small print, which is why a picture-code wants error correction at H and a print of 40 mm or more. The address it encodes is exactly the one it would encode without the picture.
what it does
A code you can change your mind about.
Everything else follows from the one idea.
your page
One code, every link.
Point the code at your iris page and it becomes a hub: name, bio, and as many links as you like, in the order you choose. Recognised services carry their own mark and sort themselves into sections, straight from the URL.
Three themes, mobile-first, no cookies and no tracking script.
wallpaper
Wear it on your lock screen.
Export the code as a phone wallpaper, laid out to clear the clock and the widgets. Someone can scan your phone from across a table.
9:41
Friday, 16 August
iris.toscanini.me/santi
scan counts
You will know if anyone scans it.
Every scan is a timestamp and, when Cloudflare tells us, a two-letter country. The row on the right is the whole record — there is no second table.
No IP address. No user agent. No referrer. No cookie on the redirect path.
ip_address user_agent referrer session_id
Columns that do not exist. The redirect answers in one lookup and does not wait for the scan to be written.
after the scan
Somebody scans. This is what they get.
No interstitial, no consent banner, no app prompt. One redirect and a page that loads before they have put their phone down.
- Paper
- Ink
- Dusk
Santiago T.
@santi
Photography, prints and workshops. One code for all of it.
faq
Questions.
What happens if I change where the code points?
Nothing visible. The QR encodes iris.toscanini.me/q/<slug> and the slug never changes, so retargeting is a row rewritten in a database. Anything already printed keeps working.
Can I change my handle?
Yes. Your printed codes survive it: a code pointed at "my profile" resolves your current handle at scan time rather than storing it. The only thing that breaks is the old iris.toscanini.me/<handle> URL, if you had shared it directly.
What do you record when someone scans?
A timestamp and, when Cloudflare provides it, a two-letter country code. No IP address, no user agent, no referrer, no cookie. The redirect answers in one database lookup and does not wait for the scan to be written.
Does a picture in the code make it harder to scan?
A little, and only at the margin. Every module keeps its centre, so the address is intact; what the picture spends is the tolerance a scanner has for blur, small print and bad light. Keep error correction at H, scan the export from your screen before printing, and print it at 40 mm or larger. A plain code is still the safer choice for a tiny sticker.
Is it free?
Yes. iris is small and cheap to run, and there is no plan to charge for it.
What if iris is ever down?
Scans stop resolving until it is back, and then every printed code works again. The pixels encode your slug, not the destination, so an outage cannot break the code itself. iris is a small independent service with no formal uptime guarantee; if you are printing at serious scale, get in touch first.
Can I delete my account?
Ask, and it goes: profile, links, codes, scan history, uploaded images. There is no self-serve delete button yet, so requests are handled personally.
Print it once. Decide later.
Claim a handle, get a code, download the SVG. About a minute, and then you never have to reprint it.
free, with no plan to charge for it