Choosing a Wordmark, and the Bugs Only a Real Email Send Found
A wordmark picked over a dozen rounds, a three-pixel error no strip could show, and two email bugs only a real send could find.
Today had two halves that looked unrelated until the evening. The morning shipped the reminder change from yesterday, so a started-and-left entry now gets a quiet nudge to finish instead of silence, and the server decides that from a timestamp, not from the words. The afternoon was supposed to be housekeeping before the beta's build freeze. It turned into a dozen rounds of logo work and two bugs in email code I had been treating as done. Most of those threads ended the same way: the thing looked right until it sat on the real page.
Stop auditioning fonts, start drawing letters
I came in with four reference images and a sentence: clean and simple, but with a small variation in a letter or two so it does not read as plain text. My AI pair sent back twelve fonts. Then twelve more, capitals this time, with the quirks it could find inside each family. I liked one. It still looked basic.
What broke the loop was noticing what I was actually responding to. Never a font. Always a detail. The crossed strokes of one W. A notch at the bottom-left corner of a D in a heavy display face, where the stem stops just short of the foot. The shape of a K in a reference I pasted, where the long diagonal starts at the foot of the stem and the short leg branches off the diagonal instead of the stem. When I wrote "I like the subtle notch at the bottom left corner," the work changed character. We stopped choosing and started drawing.
The final wordmark is a light geometric face in capitals, tracked wide, with three letters redrawn on top of it: the D and the L with that open corner, the K built the way the reference built it, the O left alone. The drawn letters use the stroke width measured from the rendered font, so nothing reads heavier than its neighbours. A small amber "beta" sits at the shoulder of the W, which retired the pill we had been using. Ten or so reference images across three briefs, thirty mock-ups in one round and forty in the next, and the answer was three letters and a gap three and a half pixels wide.
I am not sure I could have specified that up front. I could only recognise it. That is worth remembering the next time I write a brief and expect the first batch to land.
Three pixels nobody could see in a strip
For most of the afternoon the candidates lived in strips: the mark, the word, a caption, stacked ten or twelve high. Strips are good for comparing. They are bad for judging, because the eye compares rows to each other and forgives everything else.
So we moved the last rounds onto the live landing page, at the width of my phone, with only the wordmark swapped. The first thing I noticed had nothing to do with fonts. "The text doesn't look vertically aligned with the eclipse. Is it just me?" It was not just me. Measured on the page, the capitals sat three pixels above the mark's centre, on every single variant. The cause is dull and general: a flex container centres the text's line box, and a line box reserves room under the baseline for descenders that capitals never use, so a word in capitals rides high. I had to measure it to believe it. The fix centres the cap height instead, and the built page now measures the offset at zero.
Measurement caught a second mistake the same hour. The first drawn D came out more than twice too heavy, because the stroke width had been read with a method that rounds to whole pixels and a light face has a stroke of one and a third. Re-measured from the rendered pixels, the drawn letters finally matched. Both errors were invisible in a strip and measurable on the page. I want that sentence on a wall somewhere.
One sky, one symbol
Two decisions came out of the same instinct, and I want to record the reasoning because the instinct could have gone the other way.
I liked a version where the O was a crescent moon. Then I asked whether a moon makes sense beside a logo that is already an eclipse. My pair's answer was the one I would give a client: two celestial signs in one lockup compete, and the mark is the stronger. A crescent next to the eclipse says "night" a second time and starts to look like a different product's logo at favicon size. The O is plain now. The character lives in the D, the K and the L, where nothing else is competing for the same meaning.
The second decision was whether to change the heading font to match. Every heading in the app is a warm serif, chosen for reading at night on a dark screen. I kept it. A wordmark with hand-drawn letters is a mark, not a typeface choice, and marks are allowed to stand apart from the type a product reads in. The pairing had already had its real-page test, in a way: every capture that afternoon was the live landing with the two faces together, and I had not once noticed a clash. And the thin geometric face would read badly at text sizes on a dark theme, which is the one thing a bedtime app cannot trade away for consistency.
Built is not sent
The last hour was supposed to be the easy part: send myself the two beta emails to check the new wordmark in the band. The first send failed before it left. The template carried an HTML comment as a marker for a paragraph that changes per recipient, and the platform's HTML output step strips comments, so the marker never reached the code and its own guard refused to send. Reading the file raw fixed that. The second email then sent, with a button that did nothing: the replace that inserts the form link swaps the first match only, and with the file read raw the first match was now inside the file's own header comment, which named the placeholder as documentation. The button kept the placeholder.
Neither bug was subtle. The first was in code written two days earlier that I had marked done because it was built and reviewed. The second had been there all along and only showed once the first was fixed. None of it had ever been sent. A test send takes ninety seconds, and I had skipped it because the previous version had passed and the change looked small. The rule I wrote down tonight is that a change to anything that sends owes a real send the same day, to a real inbox, on the real phone. Reviewed is a state of the code. Sent is a state of the world.
In the same spirit, eight feedback tickets that had sat open since May were closed tonight with the reason each one was resolved, worked through my own admin screen in my own browser with the AI pair driving. One wrong tab opened along the way, an already-closed ticket, and nothing changed. The point was never the tickets. The point is that the next round of testers lands in a system where the questions that had sat open since May each have an answer attached, the same standard I am asking the product to meet.
Today's merge is the last patch before the build freezes for the beta. The lockup, the nudge, the emails and the forms all point at the same two weeks starting October 26.
Mental Models
You recognise the brief; you rarely write it. When a round of options misses, ask what detail you responded to, not which option was closest. A notch on one letter told us more than forty mock-ups did.
Compare in a strip, judge on the page. A strip shows differences between candidates. Only the real surface shows what is wrong with all of them at once, like three pixels of misalignment shared by every row.
Measure anything your eye has approved or only half-doubted. The stroke that looked right and the alignment I could not quite trust were both wrong by amounts the right measurement settled.
One sky, one symbol. When two elements claim the same meaning, keep the stronger one and give the weaker one a different job or none.
Reviewed is a state of the code; sent is a state of the world. Anything that sends, posts or notifies owes a real run on the real device the day it changes, however small the change looks.