
There is already a rules post on this site. QR code design best practices holds the contrast floors, the size arithmetic, the logo ceiling and the testing checklist, and none of that is repeated here. This is the other half: what a code can actually look like, and what each look costs you.
The thing every idea spends
Every decorative choice draws on the same account, so it helps to name the account before spending any of it.
A decoder does two separate jobs. First it finds the code, by sweeping the image for the three corner squares and their characteristic run of dark and light in proportions near 1:1:3:1:1. Then it reads the code, sampling the grid and repairing whatever it got wrong using the error correction data built into the symbol. The first job is all or nothing: if detection fails, nothing else happens, and no amount of size or light rescues it. The second job is a budget: a bounded proportion of the modules can be wrong and still come out right.
Decorative ideas therefore fall into two classes. The ones that touch the corner squares or the quiet zone are gambling on detection, which is the risky class. The ones that only make modules harder to read are drawing on the repair budget, which is survivable until it is not. In our generator, error correction is fixed at the highest level, so the budget you have is already the largest the format offers and there is nothing left to add later. Spend it on one idea rather than three.
Module shape and eye style
The cheapest change with the biggest visual return is the shape of the modules. Rounded squares cost close to nothing: the module center, which is where a decoder samples, stays solidly dark, and the corners it loses are not load-bearing. Dots cost more. A circle inscribed in a square cell has noticeably less ink area, so at small sizes and on absorbent stock the effective contrast drops, and a run of adjacent dark modules that a reader expects as a continuous bar arrives instead as a dotted line. Fine on a screen at generous size. Risky on a business card.
Eye styles, meaning the three corner squares, are the other half of the same decision and considerably more dangerous. The ring-and-center proportion is the thing detection depends on. A rounded outer frame with a rounded center keeps those proportions and reads fine. An eye redrawn as a thin outline, a soft blob, a logo mark or a leaf changes the run lengths the detector is measuring, and when detection fails the symptom is nothing happening at all, which designers habitually misread as a bad print. The same all-or-nothing failure turns up in inverted codes, and the diagnosis is identical: a code that is not found is not read.
Two tones across the body
A gradient across the modules, or a split where the top half is one color and the bottom another, is one of the few purely decorative moves that can be nearly free. The condition is narrow and absolute: both ends have to stay firmly dark against the background. Designers fail this at the pale end, where the gradient runs into a mid-tone that looks fine on a bright monitor and sits too close to the background value once a decoder has thrown the color away.
That last clause is the one to keep. Thresholding discards hue and keeps lightness, so a saturated teal and a saturated orange of the same lightness are the same color to a reader, and a two-tone body that reads as high contrast to your eye can be almost flat to the decoder. The contrast rules give the thresholds to design against. The five-second version: convert the code to grayscale and look at it. If you struggle to separate modules from background there, no phone will manage it either.
A code drawn into an illustration
This is the idea people want most and plan for least. Modules become objects: coffee beans, leaves, stars, tiny bricks, a school of fish swimming in formation. Done well it is the most memorable thing on the page.
It costs the repair budget, and it costs more of that budget than a logo does. A logo is a single contiguous patch of damage in the middle, which is the cheapest place to put it, and the logo size ceiling explains why the center is cheap. An illustration distributes small errors everywhere instead: a bean that is slightly the wrong shape, a leaf whose stem crosses into a light cell, an outline that thins a module edge. Scattered damage across the whole grid can exhaust the budget having lost less total ink than one central logo would have cost.
Two habits keep it from collapsing. Draw only inside the matrix, never into the clear field around it. And keep the illustration expressive at the edges and literal in the middle: let the outer rings carry the character, and leave the corner squares and the timing rows alone entirely.
A code as a pattern, and a code inside a shape
Two related layout ideas, both about the field rather than the modules.
Tiling a code as a repeating background pattern looks excellent on stationery and packaging, and it works only if the real code stands clear of it. The safest construction is a solid light panel inset into the pattern, holding one full-size code with its margin intact, while the pattern behaves as decoration around it. A pattern that runs right up to the symbol hands the detector a field full of near-misses to test, which costs decode time at best.
Setting a code inside a shape, a circle, a hexagon, a badge with a ribbon, is fine with one measurement respected. The shape's inner edge has to stay clear of the matrix by four modules. The standard asks for four; our generator's default margin is two, and the slider on the Design step's color tab goes up to eight, so raise it before you draw a frame around anything. What eats a quiet zone covers how that clearance quietly disappears in layout and print.
Matching a brand palette
The instinct is to use the brand's signature color for the modules. That color is usually a mid-tone, chosen to look good next to white type, and a mid-tone is exactly what a decoder struggles with.
Use the darkest color in the palette for the modules and the lightest for the background, even when those are supporting colors rather than the hero ones. The code still reads as the brand, because the palette relationship survives, and it also reads as a code. If the palette has no genuinely dark member, borrow near-black for the matrix and let the brand color live in the frame, the call to action, or a pattern around the symbol. A frame is free. The matrix is not.
Where the idea meets the printer
Everything above was approved on a screen at four hundred pixels wide, and the finished object will be somewhere else at some other size. Three checks before the run.
Print at final size on the final stock, not on the office laser at whatever scale fits the page. Look at it in grayscale. And scan it with the oldest phone in the building, from the distance people will actually stand at.
If one of those fails, undo the most recent idea rather than adjusting everything at once, because the last decoration added is almost always the one that broke it. Setting the colors and shapes directly takes a couple of minutes, which means the honest workflow is to generate three versions and let the oldest phone in the office choose between them.
