GoodLeap · 2026
A short link that can survive being read aloud
Took an invoice short-link service from design to production in two weeks, where most of the design work was the security analysis.
On request- 2 weeks
- design to production
The situation
Contractors wanted a short, stable invoice link they could copy and paste into their own branded emails. The existing link was long, and carried tracking parameters that made it longer.
The complication is that a shared link has to be treated as a security surface rather than a convenience — which made the analysis, not the code, the bulk of the work.
The constraints
- The brief asked for a link under 30 characters and for tracking parameters that were about 68 characters on their own. Those two requirements could not both be met, and saying so early was more useful than picking one quietly.
- No URL-shortening capability existed to build on, and the platform-wide one was a long way off — so this had to be owned locally without pretending it was temporary.
The call
Write the security analysis down and argue every parameter explicitly, rather than inheriting the defaults implied by the brief — so each number in the design could be defended rather than just asserted.
Switch the alphabet from base62 to Crockford base32 after a colleague asked whether anyone would ever read a code aloud. Base32 auto-corrects the ambiguous characters — L against 1, O against 0 — and adding a check symbol catches transcription errors.
Ship a stub seam first so the frontend could integrate against the real shape while the real generator was still being reviewed.
What happened
Both phases went to production inside two weeks.
Codes are generated once and never regenerated, which is what makes a shared link stable — the property contractors actually wanted.
What I'd do differently
The readable-aloud question came from someone else in standup, late in the design, and it changed it. I had optimised for the machine's side of the code without ever asking how a human would encounter the thing. I would rather have asked that in the first hour than in the last.