The cards were good. They had been designed in September 2025, before we started working with MH Legal Hub: nine people, each with a personal QR code, 1,000 printed cards in all. A lawyer hands one over at a conference, the other person scans it, and the contact is saved.
In November 2026 we scanned one. The phone opened a page in Spanish saying that the QR code had been deactivated, with a link to a price list. All nine codes gave the same result.
Nobody at the firm had done anything wrong. The codes had simply depended on something the firm did not own.
What a dynamic code really is
There are two kinds of QR code, and they look identical on paper.
A static code holds the information itself: a web address, or a whole contact card. Nothing stands between the paper and the person scanning it.
A dynamic code holds a short address on a service provider’s server, and that server forwards the visitor to the real destination. It is sold as a convenience, since you can change the destination without reprinting. The price of the convenience is that every printed copy now depends on an account, a subscription and a company staying alive and willing. When the account stops, the provider decides what your client sees. In this case they saw an advertisement for the provider.
So a business card built this way is a rented object, and the rent is invisible until it stops being paid.
01 / 03
Dynamic, on a provider’s service
Who controls it
The provider
Change the destination
Yes, while the account runs
If the account ends
Dead on every printed copy
Needs a connection to work
Yes
02 / 03
Static, on your own domain
Who controls it
You
Change the destination
Yes, on your own site
If the account ends
Not affected
Needs a connection to work
Yes
03 / 03
Static, contact card inside
Who controls it
Nobody needs to
Change the destination
No, you reprint
If the account ends
Not affected
Needs a connection to work
No
| Dynamic, on a provider’s service | Static, on your own domain | Static, contact card inside | |
|---|---|---|---|
| Who controls it | The provider | You | Nobody needs to |
| Change the destination | Yes, while the account runs | Yes, on your own site | No, you reprint |
| If the account ends | Dead on every printed copy | Not affected | Not affected |
| Needs a connection to work | Yes | Yes | No |
What we did the same day
The first idea was to pay to reactivate the codes. We tried on November 2. The provider’s platform did not work, and that turned out to be useful, because paying would only have rented the same risk for another year.
We built the founder’s replacement that day, the other way: a static code holding a full contact card, with name, firm, role, phone, email and website inside the code itself. Scanning it offers to save the contact, with no server and no account behind it. A second version opens a WhatsApp conversation directly, with the WhatsApp icon set in the centre of the code. Both come as a landscape card and as a phone screen, so they can be shown from a phone across a table.
Paper is paper, and those printed cards will not repair themselves. Anything printed from now on carries a static code.
If a printed code depends on a monthly payment, the firm does not own its own business card.
Checking a code before it goes to print
Most QR failures come from the last step, and the design file looks perfect until then. These are the checks we now run on every printed code.
Decode the final artwork. Test the exported file that goes to the printer, at print size. A preview proves very little.
Use high error correction when you add an icon. QR codes carry redundancy in four levels, and the highest can restore about 30 percent of the code (Denso Wave). That margin is what lets an icon sit in the centre, and it is a margin to spend carefully. Our WhatsApp version still decoded when scaled down to 0.2 times its size.
Resize by whole multiples. A code is a grid of small squares, called modules. Scaling by a fraction makes some modules wider than others, and a scanner can fail on a code that looks fine to the eye. Scale by whole multiples of the module, then compare the grid with the original.
The rule for anything printed
- A printed code is static, either on a domain you own or with the contact card inside it.
- Test the final file at final size.
- If you need to change a destination later, do it with a redirect on your own site.



