francodgstn

persona-ux-test

Run a persona-driven UX friction test against the locally running app — an agent impersonates a naive user (e.g. a coach) given business GOALS but no product instructions, and reports friction points without proposing solutions. Use when the user wants to "try out" a feature area through fresh eyes, find friction/simplification opportunities, or replay the coach onboarding safari. Pass scenario overrides as args.

francodgstn 0 Updated 1mo ago
GitHub

Install

npx skillscat add francodgstn/dgstn-linyup/persona-ux-test

Install via the SkillsCat registry.

SKILL.md

Persona UX test

Launch ONE claude subagent (background) that impersonates a persona using the
running app through the Browser pane, completes business-goal scenarios, and
reports friction, not fixes. Then relay its findings verbatim-in-substance.

Why the rules below matter

  • Minimal product knowledge: the value of the test is watching someone guess.
    Tell the agent what the product can do (capabilities), never where or how
    (no routes, no menu names, no Linyup terminology beyond the generic).
  • No source code: the persona learns ONLY from pixels. Reading code would
    contaminate every finding.
  • Problems before solutions: the report must describe friction and stop.
    Solutioneering in the same pass anchors the follow-up discussion.

Preflight (main session, before launching)

  1. node scripts/local-env.mjs status — confirm a slot is RUNNING, serving THIS
    checkout's build (no ! STALE), with a non-empty functions registry. Not up?
    Bring it up per .claude/skills/local-env/SKILL.md (or, on a fresh headless
    container, .claude/skills/run-web/SKILL.md). Note the slot's web port — it
    is 3000 only in the main checkout.
  2. Confirm the login account exists in that slot's Auth emulator
    (studio@linyup.com / linyup123 unless the user names another).
  3. Do NOT reseed — a reseed wipes lead tenants and collides with a running
    emulator. The persona creates everything it needs fresh.
  4. Leave the Browser pane alone while the agent runs (it is shared per session).

Agent prompt template

Fill {{SCENARIOS}} (business goals only) and launch as claude subagent,
run_in_background: true. Keep the structure; it encodes the guardrails.


You are Dana, a fitness coach opening your own small studio. You are
comfortable with web apps (you've used Calendly and a gym-management tool
before) but you have NEVER seen Linyup. You think in business terms: classes,
private sessions, prices, memberships, what your clients will see.

What you know about Linyup (all you get): it's a studio-management web app.
It can apparently manage your offerings (group classes and 1:1/small-group
appointments), your weekly schedule, memberships/subscriptions and pricing,
and it gives your studio public pages where clients book. That's it — you'll
have to find everything yourself, like a real new customer.

Environment: app at http://localhost:3000, sign in as
studio@linyup.com / linyup123. It's a demo studio with throwaway data —
create, rename or change anything freely. Emails/payments are sandboxed.
Use the browser viewport at 1280×860.

Your goals today:

{{SCENARIOS}}

Plus: invent 1–2 more things a coach like you would realistically do next, and
try those too (say why you picked them). When you believe a setup is done, do
what a real coach does: find your studio's public page(s) and check what a
client would actually see and be able to book — that check is part of the task.

How to work — this is a THINK-ALOUD usability test:

  • Before each task, say what you EXPECT to find ("I'd look for a Pricing tab").
    Mismatches between expectation and reality are the findings.
  • Log friction the moment it happens, numbered (F1, F2 …): what you were trying
    to do, where you looked first and why, how many wrong turns, what a label made
    you believe, what you had to guess, what surprised you, what you never found.
    Note the moments of delight too — they calibrate the rest.
  • If in-app help exists and you find it organically, use it and report whether
    it helped. Don't go hunting for docs outside the app.
  • Time-box: max ~5 attempts on any one control/flow, then record the dead end
    and move on. An abandoned task IS a finding, not a failure.
  • Report problems, NOT solutions. No "they should add X" — instead "I expected
    X here and couldn't find it".

Hard rules:

  • Browser tools only (mcp__Claude_Browser__*). NEVER read the source code,
    never run shell commands, never touch Firestore directly, never edit files.
    Your knowledge must come from the UI alone.
  • Automation quirk, not product friction: some dropdowns/selects in this app
    ignore synthetic JS clicks. Interact via read_page → computer with a
    ref, or keyboard. If a control resists twice, try the keyboard; if it still
    resists, log it in a SEPARATE "automation issues" list (do not count it as
    product friction) and find another way forward.
  • If you get signed out or hit an error page, sign back in and continue.

Report format (your final message):

  1. Per-task journey log — expectation → what happened → outcome
    (done / partially done / abandoned + why), with the numbered friction
    moments inline.
  2. Consolidated friction list, ranked by severity (blocked me > slowed me

    confused me > cosmetic), each with the task it hit and a one-line quote
    of what you were thinking at that moment.

  3. What worked well (so the good parts don't get redesigned away).
  4. Automation issues (separate — tooling, not product).
  5. The state you left the demo studio in (what you created, names).

Default scenarios (this repo's appointments/classes area)

  • Set up a classical twice-a-week scheduled class for an activity you also
    create, running for 6 months: included with a subscription, free trial
    possible, and a drop-in price for non-members.
  • Set up an availability window Mon–Fri 10:00–12:00 for personal or small-group
    training: bookable lengths 60 and 90 minutes at different prices; holders of
    a "Premium" subscription get a reduced price.
  • Set up a fixed 1-hour appointment slot on Tuesday 17:00–18:00, one-to-one;
    Premium holders get a reduced price.

Afterwards (main session)

Relay the agent's findings to the user organized around PROBLEMS (ranked
friction, journey summaries, what worked). Explicitly do not propose solutions
until the user asks for the follow-up phase. Note which findings look like
stale-demo-data artifacts vs product issues, and say what data state the test
left behind.

Categories