Skip to content

Per-bullet feedback — redesign from flat dump to actionable model #38

Description

@s-annam

Per-bullet feedback — redesign from a flat dump to an actionable model

Part of M5 · UI Improvements.

Problem

PerBulletFeedback in src/components/Result.tsx renders one BulletRow per detected bullet, each with three check pills (action verb / 8–30-word length / metric). On a real resume this means ~35 rows dumped in a single scroll. It's accurate but unusable: no hierarchy, no prioritization, and it buries the signal ("most of your bullets lack a metric") under 35 individually-rendered lines.

Goal

Replace the flat list with a UI that:

  1. Leads with the high-level shape — e.g. "12 of 35 bullets need attention" plus a per-check rollup ("28 missing a metric · 9 too long · 4 weak verb"). The summary line already exists in PerBulletFeedback; promote it to the primary content.
  2. Categorizes bullets by failure mode (missing metric / length / weak verb), so the user works one category at a time instead of scanning 35 mixed rows.
  3. Encourages drill-down without forcing it — collapse the per-bullet detail behind an expand affordance per category (or a "show flagged bullets" toggle); passing bullets shouldn't render at full weight at all.
  4. Gives the user a model to act on — order by impact, show the worst offenders first, make it obvious what to fix next.

Stretch (flag as a separate phase — the high-value play)

Auto-rewrite flagged bullets to address their issues (add a metric placeholder, tighten length, lead with a strong action verb). This is where the real value is — turning a diagnostic into a fix. Likely depends on the in-browser AI rewrite work (M4 · #3-area) for the generative side; the deterministic side can pre-fill structure (verb list, length trim) without a model. Do not bundle the rewrite into the first pass — ship the categorized/summarized read-only redesign first, then layer rewrite on top.

Acceptance (first pass — read-only redesign)

  • High-level summary (counts + per-check rollup) is the primary content, above any per-bullet detail
  • Bullets grouped by failure category; passing bullets not rendered at full weight
  • Per-bullet detail is drill-down (collapsed by default), not a flat 35-row dump
  • Worst-first / impact ordering so the user knows what to fix next
  • npm run typecheck + npm run build + npm run test green

Out of scope (this issue)

  • The auto-rewrite stretch — tracked as a follow-up once the read-only redesign lands.

Files

  • src/components/Result.tsxPerBulletFeedback / BulletRow (likely extract into a features/ component; Result.tsx is already over the 200-LOC guideline)
  • src/lib/score/score.tsBulletObservation shape (read-only; check whether categorization needs any new derived field)

Metadata

Metadata

Assignees

Labels

featureNew functionalityimprovementEnhancing existing functionality

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions