Skip to content

feat: infer a project persona from the hero when there's no audience context - #27

Merged
gabelul merged 1 commit into
mainfrom
feat/persona-from-hero
Jul 16, 2026
Merged

feat: infer a project persona from the hero when there's no audience context#27
gabelul merged 1 commit into
mainfrom
feat/persona-from-hero

Conversation

@gabelul

@gabelul gabelul commented Jul 16, 2026

Copy link
Copy Markdown
Owner

Small gated fallback for persona sourcing, decided on evidence rather than theory.

The gap

The tailored project persona comes from an audience/brand description captured at setup. When a project has none (no README audience, thin docs), the scan falls back to generic built-ins — even on a landing page whose hero is a clear pitch to a specific user.

The fallback

Step 6a now: if Step 5b produced no project persona and the desktop hero pitches a specific, nameable audience, infer one persona from the hero, tagged as an unconfirmed hypothesis (inferred-visitor). It self-gates — a bare search box, app shell, or generic splash produces nothing, because a hero that isn't pitching an audience can't tell you who it's for.

Priority order: explicit audience text (always wins) → hero inference (this) → built-ins. A guess from pixels never overrides a real audience description.

Why gated, not universal — the evidence

I captured real heroes and had the vision model infer a persona from each, cold:

Hero Inferred persona Verdict
Linear ("product development system for teams and agents") shipping-fast eng/product lead evaluating team fit Sharp — beats the built-ins
Stripe ("financial infrastructure to grow your revenue") technical founder scaling payments Good, but picks one of its two audiences
Airbnb (a search box) generic "planning a getaway" No better than built-ins — correctly produces nothing

So the real gate isn't brand-vs-product, it's "is the hero pitch-forward?" The model makes that call itself.

Testing

Full suite green (1121 tests, 0 fail). Fallback wiring guarded in vision-personas.test.js (gated on missing context, pitch-forward hero, hypothesis tag, reads the desktop screenshot).

…context

When setup captured no audience/brand for the project, the tailored
persona had nowhere to come from and the scan fell back to generic
built-ins. Step 6a now has a fallback: if the desktop hero pitches a
specific, nameable audience, infer one project persona from it, tagged as
an unconfirmed hypothesis. It self-gates — a bare search box, app shell, or
generic splash produces nothing, because pixels that aren't pitching an
audience can't tell you who it's for. Verified against real heroes: sharp
on Linear and Stripe, correctly silent on Airbnb's search box. Explicit
audience text always wins; the fallback only fires when there was none.
@gabelul
gabelul merged commit 361a301 into main Jul 16, 2026
3 checks passed
@gabelul
gabelul deleted the feat/persona-from-hero branch July 16, 2026 20:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant