Earmark ads
3 hooks × 1 body, paid social
Three hooks, one body: three ad angles that all hand into the same product moment, readable muted.






The brief, the idea and the craft
Brand
Earmark (the brand of the “Ask Earmark” reveal): the customer-call workspace. "Ask every customer call." This is the follow-up job for the same client: the launch reveal shipped first, and this is the performance-ad pack. Brand, palette, type, mark and UI components are reused from the reveal's code, not redrawn. The case shows exactly that benefit: a new pack for an existing client is a recomposition, not a rebuild. It still had to not look like a re-export: the product beats move from the reveal's lime to pine, the end card moves to lime, and every hook, the body choreography and the type moments are new.
Brief
Three 10–15 s ads that share ONE body and differ only in the first ~2 s, each a different ad angle, readable muted, landing in < 1.5 s, frame 0 a thumbnail, respecting Reels/TikTok safe zones. 9:16 primary, 4:5 rebuilt.
Format
6 masters: earmark-ad-{a,b,c}-9x16.mp4 (1080×1920) and earmark-ad-{a,b,c}-4x5.mp4 (1080×1350, recomposed, not cropped). 13.0 s, 30 fps, H.264 + AAC, faststart, Concept tag in metadata. In code: one <Body> (an Ask card component, frame-identical from 2.0 s), three <Hook> variants, two layouts.
Hooks
| angle | frame 0 (thumbnail) | lands by | hands into the body | |
|---|---|---|---|---|
| A | pain / stat | one giant 212 (pine field, lime numeral, ~600 px tall) + "customer calls" | "last quarter." ON 0.5, "Read any?" ON 1.0 | the 212 flies, shrinks and lands in the card's status line "212 calls · reading…" |
| B | product-first | the Ask box holding "Why did we lose deals" + caret (120 px), keyboard peeking | " in Q3?" by 0.5, Send 0.9, answer arriving 1.33 | the typed prompt becomes the card's query line |
| C | social proof | a live call transcript: “Honestly? No SAP sync, no deal.” with ghost words turning ink as spoken | highlight 1.0–1.33 | the quote's citation lifts out and docks in the reading list (hard cut on the chip) |
What makes it work
- The body is provably identical. Lossless renders of A, B and C differ by 0 pixels at every checked frame from 2.0 s on, in both formats. Three angles cost one body plus three 2 s openings: the reuse story in one fact.
- Each hook hands one element into the product. A number, a typed question or a quote becomes part of the UI, so every opening turns into the same answer without a cut that resets attention.
- Feed reality first. Sound-off readable, frame 0 is a real thumbnail, must-read inside the 9:16 safe zone (14 % top / 22 % bottom / 6 % sides) and 4:5 margins, CTA clear of the icon column. The guides were checked on review sheets, never burned in.
- Data that adds up, consistent with the reveal: 212 calls, 38 lost deals, 17 + 12 + 9 = 38, $412k + $268k + $131k = $811k, all call dates real Q3 2026 weekdays.
- Fictional names checked: Ostrava Rail, Marlowe & Daughters and Bluewater Co-op return no company of that name (closest: Blue Water Shipping, a differently named Danish forwarder). Halvorsen Freight and Kestrel Fleet are from the reveal.
Production notes
Structure (shared body)
| time | beat |
|---|---|
| 0.0–2.0 | Hook A / B / C |
| 2.0–3.0 | Reading: pinned question, "212 calls · reading…", progress, the calls being read (✓ at 2.47) |
| 3.0–7.0 | The answer streams in and pushes the dimmed list down (never an empty sheet): "3 reasons we lost 38 deals in Q3": No SAP integration (17 deals · $412k) · Per-truck pricing above 200 vehicles (12 · $268k) · Onboarding takes 6+ weeks (9 · $131k), each with a receipt (company · date · ▶ position in the call) |
| 7.0–10.0 | Proof: a tap lifts reason #1 into a hero card that carries its own content: $412k ARR lost, with both receipts (Halvorsen Freight · Sep 10 · ▶ 14:08, Ostrava Rail · Aug 4 · ▶ 22:41, hook C's call) |
| 10.0–13.0 | End card on lime: mark fold-snap · Earmark · "Ask every customer call." · Try it free → (static from 11.4 s) |
All on an original 120 BPM bed: type slams on 0 / 0.5 / 1.0 / 1.5, hand-off 2.0, stream 3.0, proof stab 7.0, resolve 10.0, CTA 11.0, button 12.0.
Deliverables
- 6 masters (above), web copies
*-web.mp4(< 25 MB) - posters: first frame (
-poster-f0.png) and mid-body (-poster-body.png, 8.8 s, proof card) - contact sheets (aspect-correct)
- vs-reference sheets, phone-proxy strips,
loudness.txt,body-identity.txt, CREDITS.md
Audio
Original, synthesized in-house: one bed family whose 11 s body is sample-identical across the three ads, with three different 2 s intros (type hits; typing + UI; a synthesized speech-like "call" texture, no real voice). UI SFX sit on the exact frame of each event (keystrokes, Send, ✓, receipt pops, tap, lift, fold click). Mixed to −16.0 LUFS (A, B) and −16.3 (C, bed −0.3 dB to keep its hook transient ≤ −1.5 dBTP after re-encode); true peak −1.9…−2.3 dBTP delivered and −2.1…−2.4 after an AAC 256k re-encode (see loudness.txt).
Posters and stills






Credits and licensing
- Concept
Brand and data are fictional (Concept). Earmark, Kestrel Fleet, all people (Dana Okafor, Radek Novák, Mareike Lund), companies, calls and figures were invented by Glint Studio for this portfolio piece. The customer names were web-checked on 25 Oct 2026.
- Design, motion, code
Glint Studio. UI rebuilt in React/SVG and rendered with Remotion 4 (no screen recordings, no stock or AI imagery).
- Fonts (all SIL Open Font License 1.1, via Google Fonts)
- Bricolage Grotesque (display, the 212 / $412k numerals on its wdth axis, wordmark) — OFL-1.1
- Inter (UI, transcript) — OFL-1.1
- DM Mono (call positions) — OFL-1.1
- Audio
No third-party audio, no real or cloned voice: hook C's "call recording" is a synthesized speech-like texture.
A piece like Earmark ads is the Launch Video package: US$990, fixed.
See the packages