/marketplace:expand-personalisation — Find or Design Personalisation Opportunities
If you see unfamiliar placeholders or need to check which tools are connected, see CONNECTORS.md.
Two modes:
audit — rank surfaces that aren't yet personalised but could be, by leverage × feasibility × risk. Produces a backlog.
<surface-name> — design the personalisation approach for one specific surface from scratch. Produces a ship-ready proposal.
Both modes load the company's generated marketplace-context skill (if present) to ground the work in real state rather than guesses.
Usage
/marketplace:expand-personalisation audit
/marketplace:expand-personalisation onboarding-flow
/marketplace:expand-personalisation abandoned-browse-email
/marketplace:expand-personalisation paywall-screen
Workflow
1. Load Company Context
Check for a marketplace-context skill (in ./.claude/skills/*-marketplace-context/ and ~/.claude/skills/*-marketplace-context/).
If present, read:
marketplace.md for monetization model and north-star
surfaces.md for current personalisation state across the product
events.md for what data exists per surface
liquidity.md to understand which segments are thin
gotchas.md for known failure modes
If absent, run /marketplace:bootstrap-context bootstrap first — or fall back to a generic conversation, collecting the same information interactively before proceeding.
2. Branch by Mode
Mode A — Audit
Enumerate candidate surfaces from references/surfaces-to-personalise.md. This is the master menu of 30+ surfaces a two-sided marketplace can personalise beyond listings.
Cross-reference with surfaces.md. For each candidate, classify current state:
covered — already personalised (skip)
static — exists but not personalised (candidate)
missing — doesn't exist in the product (candidate, but document as a product gap)
Score each candidate on three axes:
| Axis |
Scale |
Question |
| Leverage |
1-5 |
How much would personalising this move the north-star? (Traffic × conversion weight × per-user touches) |
| Feasibility |
1-5 |
What data and infrastructure exist to support it today? Are the right events logged? Is identity stitching solid enough? Is there a production path to serving? |
| Risk |
1-5 (lower is better) |
Exposure to feedback-loop bias, fairness concerns, cold-start cliffs, moderation cost, or confusing UX |
The score is leverage × feasibility ÷ risk, with ties broken by feasibility.
Produce a ranked backlog as a table:
| Rank | Surface | Leverage | Feasibility | Risk | Score | Notes |
|------|---------|---------|-------------|------|-------|-------|
| 1 | ... | 5 | 4 | 2 | 10.0 | ... |
For the top 3-5, produce a one-page ship-ready proposal each (see Mode B below).
Mode B — Design for a Named Surface
Classify the surface into a journey stage:
anonymous — no user identity (landing, logged-out homepage, anonymous search)
registered pre-paid — identified but not yet paid (onboarding, paywall, free tour)
paid pre-active — paid but not yet engaged (first-stay path, profile completion)
active — actively using the product (search, feed, messaging)
re-engagement — lapsed (push, email, abandoned-browse)
retained — steady-state (renewal, upsell, referral)
Load the right knowledge library based on stage:
anonymous or registered pre-paid → marketplace-pre-member-personalisation
paid pre-active / active / retained → marketplace-personalisation
- Mixed or unclear → load both
- If the proposal requires building new features (vision, text, wizard-sourced, or derived) → also load
marketplace-recsys-feature-engineering. The first-principles rules (firstp-start-from-the-decision-not-the-algorithm, firstp-reject-features-you-cannot-serve-at-inference, firstp-kill-features-a-popularity-baseline-already-captures) are the gate before any new-feature proposal can ship.
Determine the personalisation approach:
| Approach |
When to use |
| Rule-based |
No labels available, strong priors (e.g., paywall copy by inferred role) |
| Content-based |
Items have strong features, few labels (e.g., similar-listing module) |
| Collaborative |
Plenty of interactions, users are dense (homefeed, saved-search alerts) |
| Contextual bandit |
Exploration matters more than exploitation (new surface launch, cold stock) |
| ML ranker / reranker |
Mature surface, plenty of data, need fine control (search, homefeed) |
| Hybrid |
Almost always in practice |
Draft the proposal with these sections:
## {{surface name}}
### Why personalise this
{{1-paragraph business case, linked to north-star and any gotchas}}
### Approach
{{approach from the table above, plus why}}
### Data requirements
- **Events needed**: {{list, with gaps flagged}}
- **Identity requirements**: {{anonymous-safe / requires stitching}}
- **Training data volume**: {{sufficient / needs seeding / cold-start only}}
### Cold-start strategy
{{how the surface works when labels are missing}}
### Guardrails
- **Fairness**: {{supply exposure cap, side balance}}
- **Feedback-loop protection**: {{inverse propensity, re-rank cap, exploration slots}}
- **Quality floors**: {{min rating, min verification, etc.}}
### Observability
{{required dashboards and monitors, linking to observability.md}}
### Experiment design
- **Primary outcome**: {{metric}}
- **Guardrails**: {{list}}
- **MDE**: {{minimum detectable effect and power math}}
- **Cohort**: {{who sees the treatment}}
- **Ship criterion**: {{decision rule}}
### Risks
{{list}}
### Grounding rules
- {{rule-reference-1}} — {{one-line why}}
- {{rule-reference-2}} — {{one-line why}}
Validate the proposal against the gotchas log: is there a similar past incident? If so, reference it and adapt.
3. Present and Persist
- Show the audit table or the per-surface proposal to the user
- Ask: "Which of these would you like to commit to? I can record the choice in
surfaces.md as planned state"
- On approval, update
surfaces.md in the context skill with state: planned and a link to the proposal
Read-only posture
This skill reads from ~~product analytics, ~~data warehouse, and the generated marketplace-context skill, but does not execute any writes against those MCPs. The only files it writes are to surfaces.md in the context skill — and only after explicit user confirmation to commit a planned personalisation.
Examples
Audit
/marketplace:expand-personalisation audit
Returns a ranked backlog of non-personalised surfaces with scores and top-5 ship-ready proposals.
Design for a specific surface
/marketplace:expand-personalisation paywall-screen
Returns a ship-ready proposal for personalising the paywall — approach, data requirements, cold-start, guardrails, observability, experiment design, risks.
Design for a surface that doesn't exist yet
/marketplace:expand-personalisation abandoned-browse-email
If the surface is missing from surfaces.md, treat it as a new product gap and include a product recommendation: "build the surface first, then personalise".
Tips
- Cold-start first: the surfaces with the highest uplift are usually pre-paid / cold-start (onboarding branches, paywall copy, first-stay path) because they set the anchor for everything after. Bias toward these.
- Feasibility beats leverage when feasibility is low — a high-leverage idea with missing events is vaporware.
- Never propose ML on a surface with no observability — build monitoring first, or propose it as part of the ship plan.
- Don't duplicate existing work:
surfaces.md is the source of truth, check it before proposing.
- Prefer the simplest approach that works: rule-based first if priors are strong, bandits before ML, ML only when the data supports it.
Reference Files
| File |
Description |
| references/surfaces-to-personalise.md |
Master menu of 30+ surfaces a two-sided marketplace can personalise beyond listings, organized by journey stage |
Related Commands
/marketplace:bootstrap-context — run first to ground this in real state
/marketplace:explore-events <surface> — run to close feasibility gaps before committing
/marketplace:build-observability <surface> — run alongside any proposal that goes to ship
1---2name: expand-personalisation3description: Audit surfaces across a two-sided marketplace to find places that could be personalised but aren't, or design the personalisation approach for a named surface from scratch. Use when asking "where should we personalise next?", "how should we personalise the onboarding flow?", "what could we do beyond the listing feed?", "our paywall is static — how would we personalise it?", "give me a backlog of personalisation opportunities ranked by impact", or "design a personalisation approach for the abandoned-browse email". Covers every surface where a two-sided marketplace can deploy personalisation beyond the obvious listing feed — onboarding branches, paywall timing and copy, trust-copy variants, abandoned-browse re-engagement, saved search alerts, landing hero, first-stay paths for new suppliers, review ordering, zero-result fallback, related listings, messaging templates, push timing, profile-completion nudges, seasonal campaigns, and more. Grounds every recommendation in the research-based marketplace-personalisat4---56# /marketplace:expand-personalisation — Find or Design Personalisation Opportunities78> If you see unfamiliar placeholders or need to check which tools are connected, see [CONNECTORS.md](../../CONNECTORS.md).910Two modes:1112- **`audit`** — rank surfaces that aren't yet personalised but could be, by leverage × feasibility × risk. Produces a backlog.13- **`<surface-name>`** — design the personalisation approach for one specific surface from scratch. Produces a ship-ready proposal.1415Both modes load the company's generated marketplace-context skill (if present) to ground the work in real state rather than guesses.1617## Usage1819```20/marketplace:expand-personalisation audit21/marketplace:expand-personalisation onboarding-flow22/marketplace:expand-personalisation abandoned-browse-email23/marketplace:expand-personalisation paywall-screen24```2526## Workflow2728### 1. Load Company Context2930Check for a marketplace-context skill (in `./.claude/skills/*-marketplace-context/` and `~/.claude/skills/*-marketplace-context/`).3132**If present**, read:33- `marketplace.md` for monetization model and north-star34- `surfaces.md` for current personalisation state across the product35- `events.md` for what data exists per surface36- `liquidity.md` to understand which segments are thin37- `gotchas.md` for known failure modes3839**If absent**, run `/marketplace:bootstrap-context bootstrap` first — or fall back to a generic conversation, collecting the same information interactively before proceeding.4041### 2. Branch by Mode4243#### Mode A — Audit44451. **Enumerate candidate surfaces** from [references/surfaces-to-personalise.md](references/surfaces-to-personalise.md). This is the master menu of 30+ surfaces a two-sided marketplace can personalise beyond listings.46472. **Cross-reference with `surfaces.md`**. For each candidate, classify current state:48 - `covered` — already personalised (skip)49 - `static` — exists but not personalised (candidate)50 - `missing` — doesn't exist in the product (candidate, but document as a product gap)51523. **Score each candidate** on three axes:5354 | Axis | Scale | Question |55 |------|-------|----------|56 | **Leverage** | 1-5 | How much would personalising this move the north-star? (Traffic × conversion weight × per-user touches) |57 | **Feasibility** | 1-5 | What data and infrastructure exist to support it today? Are the right events logged? Is identity stitching solid enough? Is there a production path to serving? |58 | **Risk** | 1-5 (lower is better) | Exposure to feedback-loop bias, fairness concerns, cold-start cliffs, moderation cost, or confusing UX |5960 The score is `leverage × feasibility ÷ risk`, with ties broken by feasibility.61624. **Produce a ranked backlog** as a table:6364 ```markdown65 | Rank | Surface | Leverage | Feasibility | Risk | Score | Notes |66 |------|---------|---------|-------------|------|-------|-------|67 | 1 | ... | 5 | 4 | 2 | 10.0 | ... |68 ```69705. **For the top 3-5**, produce a one-page **ship-ready proposal** each (see Mode B below).7172#### Mode B — Design for a Named Surface73741. **Classify the surface** into a journey stage:75 - `anonymous` — no user identity (landing, logged-out homepage, anonymous search)76 - `registered pre-paid` — identified but not yet paid (onboarding, paywall, free tour)77 - `paid pre-active` — paid but not yet engaged (first-stay path, profile completion)78 - `active` — actively using the product (search, feed, messaging)79 - `re-engagement` — lapsed (push, email, abandoned-browse)80 - `retained` — steady-state (renewal, upsell, referral)81822. **Load the right knowledge library** based on stage:83 - `anonymous` or `registered pre-paid` → `marketplace-pre-member-personalisation`84 - `paid pre-active` / `active` / `retained` → `marketplace-personalisation`85 - Mixed or unclear → load both86 - **If the proposal requires building new features** (vision, text, wizard-sourced, or derived) → also load `marketplace-recsys-feature-engineering`. The first-principles rules (`firstp-start-from-the-decision-not-the-algorithm`, `firstp-reject-features-you-cannot-serve-at-inference`, `firstp-kill-features-a-popularity-baseline-already-captures`) are the gate before any new-feature proposal can ship.87883. **Determine the personalisation approach**:8990 | Approach | When to use |91 |----------|------------|92 | **Rule-based** | No labels available, strong priors (e.g., paywall copy by inferred role) |93 | **Content-based** | Items have strong features, few labels (e.g., similar-listing module) |94 | **Collaborative** | Plenty of interactions, users are dense (homefeed, saved-search alerts) |95 | **Contextual bandit** | Exploration matters more than exploitation (new surface launch, cold stock) |96 | **ML ranker / reranker** | Mature surface, plenty of data, need fine control (search, homefeed) |97 | **Hybrid** | Almost always in practice |98994. **Draft the proposal** with these sections:100101 ```markdown102 ## {{surface name}}103104 ### Why personalise this105106 {{1-paragraph business case, linked to north-star and any gotchas}}107108 ### Approach109110 {{approach from the table above, plus why}}111112 ### Data requirements113114 - **Events needed**: {{list, with gaps flagged}}115 - **Identity requirements**: {{anonymous-safe / requires stitching}}116 - **Training data volume**: {{sufficient / needs seeding / cold-start only}}117118 ### Cold-start strategy119120 {{how the surface works when labels are missing}}121122 ### Guardrails123124 - **Fairness**: {{supply exposure cap, side balance}}125 - **Feedback-loop protection**: {{inverse propensity, re-rank cap, exploration slots}}126 - **Quality floors**: {{min rating, min verification, etc.}}127128 ### Observability129130 {{required dashboards and monitors, linking to observability.md}}131132 ### Experiment design133134 - **Primary outcome**: {{metric}}135 - **Guardrails**: {{list}}136 - **MDE**: {{minimum detectable effect and power math}}137 - **Cohort**: {{who sees the treatment}}138 - **Ship criterion**: {{decision rule}}139140 ### Risks141142 {{list}}143144 ### Grounding rules145146 - {{rule-reference-1}} — {{one-line why}}147 - {{rule-reference-2}} — {{one-line why}}148 ```1491505. **Validate the proposal** against the gotchas log: is there a similar past incident? If so, reference it and adapt.151152### 3. Present and Persist1531541. Show the audit table or the per-surface proposal to the user1552. Ask: "Which of these would you like to commit to? I can record the choice in `surfaces.md` as `planned` state"1563. On approval, update `surfaces.md` in the context skill with `state: planned` and a link to the proposal157158## Read-only posture159160This skill reads from `~~product analytics`, `~~data warehouse`, and the generated marketplace-context skill, but does not execute any writes against those MCPs. The only files it writes are to `surfaces.md` in the context skill — and only after explicit user confirmation to commit a planned personalisation.161162## Examples163164### Audit165166```167/marketplace:expand-personalisation audit168```169170Returns a ranked backlog of non-personalised surfaces with scores and top-5 ship-ready proposals.171172### Design for a specific surface173174```175/marketplace:expand-personalisation paywall-screen176```177178Returns a ship-ready proposal for personalising the paywall — approach, data requirements, cold-start, guardrails, observability, experiment design, risks.179180### Design for a surface that doesn't exist yet181182```183/marketplace:expand-personalisation abandoned-browse-email184```185186If the surface is `missing` from `surfaces.md`, treat it as a new product gap and include a product recommendation: "build the surface first, then personalise".187188## Tips189190- **Cold-start first**: the surfaces with the highest uplift are usually pre-paid / cold-start (onboarding branches, paywall copy, first-stay path) because they set the anchor for everything after. Bias toward these.191- **Feasibility beats leverage** when feasibility is low — a high-leverage idea with missing events is vaporware.192- **Never propose ML on a surface with no observability** — build monitoring first, or propose it as part of the ship plan.193- **Don't duplicate existing work**: `surfaces.md` is the source of truth, check it before proposing.194- **Prefer the simplest approach that works**: rule-based first if priors are strong, bandits before ML, ML only when the data supports it.195196## Reference Files197198| File | Description |199|------|-------------|200| [references/surfaces-to-personalise.md](references/surfaces-to-personalise.md) | Master menu of 30+ surfaces a two-sided marketplace can personalise beyond listings, organized by journey stage |201202## Related Commands203204- `/marketplace:bootstrap-context` — run first to ground this in real state205- `/marketplace:explore-events <surface>` — run to close feasibility gaps before committing206- `/marketplace:build-observability <surface>` — run alongside any proposal that goes to ship