brand: meet Pip, the courier bird (#132)

* docs: add mascot & brand design spec (Pip the courier bird)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: Pip wears a tie - update mascot spec to v5 flight loop

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs: add Pip brand PR implementation plan

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(plan): v7 master GIF - drop frame scaling, add enclosed-hole transparency

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(plan): v8 master GIF - fix hole classification (chest stays opaque)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(plan): scrub stale v5 references

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(plan): v10 master GIF - line-fitted envelope border clipping

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(plan): label pipeline as v10

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(plan): v16 master GIF - targeted removal of gap blob

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(plan): v17 master GIF - drop envelope border clipping, keep blob removal

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(plan): v19 final master GIF - user-approved thin outline repair

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(brand): add Pip mascot assets and regeneration pipeline

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(brand): Pip takes over the README header

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(spec): scrub stale scaling line

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(brand): avatar, social card, and mascot sources (PNG allowlist)

The global *.png personal-data rule silently excluded the mascot's source
sheets and generated PNGs; allowlist the upstream-controlled assets/mascot/
paths without weakening the fork-protecting rule.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Mads Lorentzen
2026-07-12 10:21:36 +02:00
committed by GitHub
co-authored by Claude Fable 5
parent 8bee3ddb97
commit 09f0417d78
17 changed files with 1042 additions and 1 deletions
@@ -0,0 +1,102 @@
# Mascot & Brand Design: Pip the Courier Bird
Date: 2026-07-11
Status: Approved
## Purpose
Give the project a distinctive, ownable brand mark to replace the placeholder
`claude_animation.gif`, anchor the donation appeal, and make shared repo links
recognizable. Decisions below were made interactively with the maintainer; this
document is the single source of truth for brand assets.
## 1. The mascot
**Pip**, a pixel-art courier bird. Identity: the AI agent that works for you on
your machine - it searches job portals and delivers applications while you live
your life. Pip is the agent, not the job seeker.
Canonical style: the outlined redesign (dark outline, happy closed eye,
expressive wing), which supersedes the original flat-style sprites. Pip wears a
**small dark tie** (same `#22333b` as the outline - the palette stays at 7
colors): the agent is dressed for the interviews it books you, and the tie
sways with the wing beats. The three original flat PNGs are retired as
candidates but kept as palette reference.
**Locked palette (exactly 7 colors):**
| Role | Hex |
|---|---|
| Body teal | `#2a9d8f` |
| Wing dark teal | `#1f6f65` |
| Beak & feet coral | `#e76f51` |
| Envelope border gray | `#969ba0` |
| Envelope & belly white | `#ffffff` |
| Envelope seal red | `#e63946` |
| Outline | `#22333b` |
The **red-sealed envelope** is the signature brand detail and appears in every
pose. No text, logos, or tooling motifs are ever baked into the sprite; the
mark stays pure and brand attachment comes from the surfaces around it
(section 3).
## 2. The animated mark
`assets/mascot/pip_flight_loop.gif` - the moving brand mark.
- 6 frames, 110 ms/frame, infinite loop
- Measured flap cycle: wing high, mid, flat, swept-down, low, rising - ordered
by per-frame wing-centroid measurement
- Beak-anchored: head fixed across frames; wing, body bob, envelope sway, and
tie swing carry the motion
- Every pixel snapped to the 7-color palette (no cross-frame color drift)
- No per-frame rescaling (the source birds are size-consistent; rescaling by
noisy measurements caused a visible zoom pulse in an early build)
- True transparent background (edge-connected flood fill; belly and envelope
whites stay opaque)
- 560 px square master, displayed at 200 px; approximately 30 KB
Provenance: an initial tie-less loop was generated with Gemini from a locked
prompt (palette, choreography, loop constraints); the final tie-edition frames
were generated with ChatGPT from the same design, then sliced, palette-snapped,
beak-anchored, and assembled locally, with two targeted art repairs (one stray
outlined blob removed and the exposed underside outline repainted). The full
pipeline lives in `assets/mascot/assemble_flight_loop.py` and reproduces the
shipped GIF exactly from `assets/mascot/sources/chatgpt_tie_sheet.png`.
## 3. Brand surfaces
1. **README header** - the flight-loop GIF replaces `claude_animation.gif`, same 200 px
centered slot. Alt text: "Pip, the courier bird".
2. **GitHub social preview card** - 1280x640 PNG uploaded in repo settings:
Pip + `ai-job-search` wordmark + tagline "job search that runs on your
machine". This card is the primary brand-attachment surface (shown on every
shared link).
3. **Avatar / favicon** - a static square pose in the outlined style (the
envelope-hugger composition reads best square). Until it is redrawn, a
cropped flight frame is acceptable.
4. **Seal-red echo** - `#e63946` may be reused sparingly as an accent (social
card). No other motifs enter the sprite.
## 4. Repo hygiene
- `.superpowers/` added to `.gitignore` (brainstorm mockups never ship)
- Brand assets live in `assets/mascot/`: the master GIF, the source sprite
sheets, the assembly script, and the retired flat PNGs (palette reference)
- Forks inherit the brand by default; nothing personal is embedded
## Out of scope
- Redrawing the standing / hugger poses in the outlined style (follow-up; the
Gemini prompt pattern from this session is reusable)
- Donation-strategy execution (separate initiative; the mascot supports it but
this spec does not change Ko-fi copy)
- Any change to the mascot to represent the job seeker, add text to the GIF,
or add tooling motifs - explicitly considered and rejected
## Success criteria
- README renders the transparent GIF cleanly in both GitHub light and dark
themes, no stray artifacts in any frame
- Social preview shows the lockup on link shares
- Total added repo weight for the README-rendered asset stays under 50 KB