Internal Review — Not a Public Page
CLEARCART currently does one thing well: it makes hidden product tradeoffs visible through five independent, confidence-rated pillar scores. That is necessary for behavior change but not sufficient. This document audits the extension and research library against established behavior-change science, then converts the gap into a prioritized backlog for the mid-August MVP and beyond.
01 — Diagnosis
content.js detects a product card, fetches scores, and renders a row of five colored pills.
popup.js/popup.html expand that into a per-pillar indicator breakdown with confidence
dots and sources. That is the entire user-facing loop today. It is an information display,
not a decision-support or behavior-reinforcement system.
Behavior-change research (Fogg's B=MAP model, the UK Behavioural Insights Team's EAST framework, Eyal's Hook Model) converges on the same point: showing someone accurate information changes what they know, not reliably what they do. Purchase behavior changes when the better option is easy to act on, socially reinforced, framed as a loss avoided, and followed by feedback that closes the loop. None of those four exist in the repo today.
The badge content.js:163 opens a side panel on click — it never proposes a
specific better-scoring alternative or lets the user act on one. The gap between "I now know this scores
low" and "I do something differently" is left entirely to the user.
pillars.js scores each product in isolation (0–100 per pillar). A shopper sees
"54" with no anchor for whether that's the best available option in the category or the worst. Loss-framed,
comparative framing changes choices more reliably than absolute scores.
All five pillars display with equal visual weight for every user. A parent optimizing for Quality/Planet
and a bargain shopper optimizing for Value are shown an identical badge. Values-matched framing is one of
the cheapest, highest-leverage behavior-change levers and nothing in popup.html
or the schema captures user priorities.
schema.prisma stores products, scores, and indicators — nothing about what a
user saw, clicked, or did after. Without an interaction/event model, there is no way to know whether badges
change purchase behavior at all, which is both a product risk and a missed white-paper contribution.
02 — Recommendations
Each maps to a specific, named gap above and to established behavior-change mechanics — not generic UX polish.
When a scored product isn't the category leader, surface the higher-scoring alternative directly in the panel with a single action to view/add it. Fogg's model treats ability (how easy the action is) as equally decisive as motivation — right now motivation (the score) exists but the action doesn't.
Touches: content.js badge click handler, popup.js panel, new /api/alternatives endpointReplace "Planet: 54" with "12 pts below the best Cage-Free option in this aisle." Loss-framed, comparative messages outperform absolute numbers in nearly every nudge literature review (Thaler & Sunstein; EAST's "Attractive" and "Timely" principles) because the reference point is concrete and immediate.
Touches: pillars.js scoring output, requires category-leader lookup at score timeA short onboarding ("what matters most: Planet, People, Quality, Value, or Transparency?") reorders and visually emphasizes the badge per user. Personally relevant framing increases both attention and follow- through versus a one-size-fits-all display.
Touches: popup.html new settings view, chrome.storage.sync, badge render orderOnce interaction data exists (Lever 06), surface aggregate behavior — "68% of shoppers who viewed this item chose the higher-scoring alternative." Social proof is one of the few nudges with consistently large, replicated effect sizes in the field, but it requires real data — do not fabricate a number here.
Touches: new Interaction model, aggregation job, badge/panel copyA running "this week / this trip" summary (e.g., "4 of 6 picks were high-confidence Planet leaders") reinforces the shopper's self-image as a conscious buyer — the same mechanism that makes fitness-app streaks and expense-tracker summaries sticky. This is the "reward + investment" half of Eyal's Hook Model.
Touches: popup.js summary view, Interaction model, session aggregationAdd a minimal event log (badge_view, panel_open, alternative_shown, alternative_clicked) to the schema before the MVP ships. This is cheap today and expensive to retrofit later — and it's the dataset that makes Levers 04–05 possible and gives the white paper an actual behavior-change result to report, not just a scoring methodology.
Touches: schema.prisma new Interaction model, content.js/popup.js event callsThe project's stated differentiator is refusing to hide tradeoffs behind a composite score. Every lever above must nudge toward a genuinely higher-scoring option and disclose when data is thin (e.g. "based on 3 shoppers so far") — never fabricate social proof, never hide a low pillar to make a swap look better, and never let personalization suppress a pillar the user chose to weigh low. Dark-pattern nudging would undermine the Transparency pillar the whole product is built on.
03 — Prioritized Backlog
Sequenced against the mid-August MVP deadline. P0 items are copy/schema/small-UI changes that fit before launch. P1 follows in the first post-launch iteration once real usage data exists. P2 depends on P1 data or is a larger build.
| Priority | Backlog item | Lever | Effort | Impact | Target |
|---|---|---|---|---|---|
| P0 | Add Interaction/Event model to schema | 06 · Measurement | S | High | Pre-MVP |
| P0 | Loss-framed pillar copy ("12 pts below best option") | 02 · Framing | S | High | Pre-MVP |
| P0 | Cost-per-use framing on Value pillar (mirror Diapers page model) | 02 · Framing | S | Medium | Pre-MVP |
| P0 | Surface one "why this matters" micro-explainer at Layer 1 (not just researcher Layer 3) | 01 · Ability | S | Medium | Pre-MVP |
| P0 | "Better option" swap CTA in panel (static category-leader lookup ok for pilot's 4 eggs) | 01 · Ability | M | High | Pre-MVP |
| P1 | Pillar-weight personalization (onboarding + reorder) | 03 · Personalization | M | High | v1.1 |
| P1 | Trip/session cumulative impact recap | 05 · Identity | M | Medium | v1.1 |
| P1 | Dynamic category-leader lookup (replace static pilot list) | 01 · Ability | L | High | v1.1 |
| P1 | Localize integration wired to the swap CTA (local farm as the alternative) | 01 · Ability | L | High | v1.1 |
| P1 | Real social-proof line once N > threshold ("X% switched") | 04 · Social Proof | M | High | v1.1 (data-gated) |
| P2 | Monthly goal-setting ("buy Fair Trade eggs this month") with progress tracking | 05 · Identity | M | Medium | v2 |
| P2 | Shareable cart-integrity recap card | 05 · Identity | S | Low–Med | v2 |
| P2 | Streaks/badges for repeated high-integrity picks | 05 · Identity | M | Low–Med | v2 (risk: gimmicky if overdone) |
| P2 | Aggregate transparency reports back to retailers/brands ("N shoppers viewed this Labor score") | 04 · Social Proof | L | High (systemic) | v2, post white paper |
04 — Strategic Note
The methodology (now consolidated into CAPSTONE.md) makes a strong scoring-design
argument: independent dimensions over composites, with confidence reported as its own axis. That's a contribution, but it's
a static one. Instrumenting the funnel now (Lever 06) turns the white paper into something with an actual
behavioral result — e.g. "shoppers shown a comparative, loss-framed score swapped to the
higher-scoring option at rate X vs. baseline Y" — which is a materially stronger empirical claim for a
petition built on documented, active, novel work than methodology description alone.
Practically: ship the P0 event log even in skeletal form before the pilot goes live. Every day it's missing is pilot data that can never be reconstructed retroactively.