PhotoAuctions Logo Design

Photography brands reach for the aperture constantly, and most versions of it collapse into the same shape: six solid wedges, radially symmetric, indistinguishable from a gear or a pie chart. The PhotoAuctions mark stays readable as an aperture because it's stroked rather than filled, and because the entire figure is generated from three numbers.
The unit box
Construction happens in a 100×100 viewBox with the mark centered at (50, 50). Every dimension is stored as a fraction of that box, which is why the brand book quotes R = 0.46 while the SVG carries `r="46"`. Nothing in the file is a measured pixel value, so scaling to a 512px app icon or a 40mm foil stamp is a viewBox change and nothing else.
Three numbers
The outer ring sits at R = 0.46. Six anchor vertices are spaced 60° apart on that ring, starting at −90° so one lands at top dead center. The inner ring sits at r = 0.18. Each blade is a straight segment from its vertex on the outer ring to a point on the inner ring rotated 33° clockwise.
Everything else is derived. The blade chord works out to √((0.46 − 0.18cos33°)² + (0.18sin33°)²) = 0.324 of the box, so each blade is 32.4 units long. Each one sits 17.6° off radial, which is the cant that makes the figure read as rotating rather than as spokes.
Why 33° and not 30°
At a twist of exactly 30°, the six inner tips land on the bisectors between the outer vertices. The tips then form a second regular hexagon interleaved perfectly with the first. That's a resolved configuration, and the eye finds the alignment and settles on it. 33° pushes each tip 3° past the bisector, which is 10% off that rest position and 55% of the 60° sector each blade owns. The interleave breaks, each tip crowds its clockwise neighbor slightly, and the figure reads as caught mid-rotation.
Symmetry doesn't enter into it. Any nonzero twist fixes the group at C6 with no mirror axes, because a reflection would flip the handedness of all six blades. The choice between 30 and 33 is about perceived alignment.
Stroke and caps
Nothing in the mark is filled. One stroke weight carries both the ring and the blades, with round linecaps on both ends of every blade. The weight measures around 7 units in the artwork; that figure is read off the render, since the construction sheet only publishes R, r, and twist.
The round caps have a measurable consequence. They extend each blade 3.5 units past its nominal endpoint, so the innermost ink sits at r = 14.5 instead of 18, and the central void comes out at 29 units against a 99-unit overall diameter. That's 29% open center, which is what keeps the figure from converging into an asterisk.
The generator
The whole mark is one circle plus a six-iteration loop:
```js
const cx = 50, cy = 50, R = 46, r = 18, twist = 33, w = 7;
const pt = (rad, deg) => [
cx + rad Math.cos(deg Math.PI / 180),
cy + rad Math.sin(deg Math.PI / 180),
];
const blades = Array.from({ length: 6 }, (_, i) => {
const a = -90 + i * 60;
const [x1, y1] = pt(R, a);
const [x2, y2] = pt(r, a + twist);
return `<line x1="${x1.toFixed(2)}" y1="${y1.toFixed(2)}" x2="${x2.toFixed(2)}" y2="${y2.toFixed(2)}"/>`;
}).join("\n");
const svg = `<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#111" stroke-width="${w}" stroke-linecap="round">
<circle cx="${cx}" cy="${cy}" r="${R}"/>
${blades}
</g>
</svg>`;
```
SVG's y-axis points down, so a positive twist renders clockwise, matching the mark. Changing `twist` to 0 gives spokes, and changing it to 60 collapses each blade onto its neighbor's vertex.
Where it breaks
At 16px the 7-unit stroke lands at about 1.1 device pixels on a 1× display, which hinting will round unevenly across the six blades and leave the ring looking thicker than the spokes. The 3° offset that does the work at poster size is invisible below roughly 48px. A favicon needs a separate cut with a heavier stroke and a larger inner radius, not the same file scaled down.
About the Author
CraftedPxl is a digital playground exploring the intersection of design, code, and photography.