Where we are: 15+ features shipped, 111/119 audit findings fixed, onboarding V2, upgrade modal, FAB with usage state, selection toolbar, milestones, streaks, prompt discovery, result preview, context menu sync, 127 tests, automated ship pipeline. The conversion plumbing works. The codebase is clean.
What this report covers: Every improvement idea, shipped or not, rated 1-10, organized by status. Plus 12 NEW ideas focused on making the side panel a sticky daily-use product, not a settings drawer. Full brand spec, visual design language, and sticky loop architecture.
Side panel: Instrument Sans (already loaded). Weights: 400 body, 500 labels, 600 section headers, 700 card titles.
Indicator/content scripts: System font stack (no network request). -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif
Monospace (stats/counts): Tabular numerals via font-variant-numeric: tabular-nums on any number display.
Cards: bg: white, border: 1px solid #e2e8f0, border-radius: 12px, padding: 16px, shadow: 0 1px 3px rgba(0,0,0,0.04). Hover: border-color: #24d580 with 150ms transition.
Buttons (primary): bg: #24d580, color: white, border-radius: 10px, height: 44px, font-weight: 600. Hover: bg: #1aab66. Press: transform: scale(0.98). Disabled: opacity: 0.5.
Badges: font-size: 11px, font-weight: 600, border-radius: 6px, padding: 2px 8px. Starter: bg: #f0fdf4, color: #16a34a. Pro: bg: #eef2ff, color: #6366f1.
Tab bar: Active tab underline: 2px solid #24d580. Inactive: color: #64748b. Active: color: #0f172a, font-weight: 600. 200ms transition on underline position.
Spacing: 16px between cards, 12px internal padding, 8px between label and value. Consistent 16px horizontal margin.
Tab switch: Underline slides left/right (not jump) via CSS transform: translateX() with 200ms ease-out.
Card expand: Accordion expand/collapse via max-height transition, 250ms ease.
Counter increment: Number changes use a 300ms count-up animation (CSS @keyframes, not JS interval).
Success state: Brief green flash (background: #f0fdf4 fading to white over 600ms) when a correction is confirmed.
Streak fire: 🔥 emoji does a subtle 200ms bounce (transform: scale(1.3) -> scale(1)) when streak increments.
Toast entry: Slide up from FAB position with 200ms ease-out + 10% opacity fade-in.
Every feature must feed into this cycle. If a feature doesn't connect to this loop, it doesn't ship.
| # | Feature | Sprint | Status |
|---|---|---|---|
| 1 | Onboarding V2 "Honest Theater" (6 Acts) | 18, 22 | SHIPPED |
| 2 | Limit-Hit Upgrade Modal | 21 | SHIPPED |
| 3 | FAB Redesign (usage badge, color states) | 21 | SHIPPED |
| 4 | Floating Selection Toolbar | 21 | SHIPPED |
| 5 | Smart Auto-Reselect After Processing | 21 | SHIPPED |
| 6 | Post-Correction Micro-Toast | 21 | SHIPPED |
| 7 | Toast Priority Queue | 23 | SHIPPED |
| 8 | Milestone System (6 thresholds + review CTA) | 23 | SHIPPED |
| 9 | CWS Listing Rewrite (value-led copy) | 23 | SHIPPED |
| 10 | L1 Tooltip Personalization | 23 | SHIPPED |
| 11 | Context Menu Dynamic Sync | 23 | SHIPPED |
| 12 | Uninstall Feedback URL | 23 | SHIPPED |
| 13 | 24h Modal Dismiss Persistence | 24 | SHIPPED |
| 14 | Toolbar Shortcut ID Mapping | 24 | SHIPPED |
| 15 | Daily Streak System (7/30-day milestones) | 24 | SHIPPED |
| 16 | Prompt Discovery Card in Side Panel | 24 | SHIPPED |
| 17 | Result Preview Toggle (wired) | 24 | SHIPPED |
| 18 | Dark Mode (side panel: always light, indicator: system) | 20, 22 | SHIPPED |
| 19 | Build Verification Script (8 checks) | 25 | SHIPPED |
| 20 | background.ts Decomposition (18 modules) | 25 | SHIPPED |
| 21 | Indicator Decomposition (17 files) | 25 | SHIPPED |
| 22 | 127 Tests, 0 Failures | 25 | SHIPPED |
The side panel is the most underused surface in Chrome extensions. It persists across page navigations. It stays open while the user browses. It's a companion, not a popup. These 12 ideas transform it from "settings drawer" to "writing command center."
The insight: Main tab = configuration (open once). Prompts tab = browsing (open sometimes). Notes tab = YOUR content (open daily). Users who store personal content in a tool don't uninstall it.
What's inside Notes:
• Quick Draft pad: Text area at top. User writes, pastes, or drafts. One-tap "Fix with BLN" button sends content through correction pipeline. Result appears inline as a diff. This is the "scratch pad for non-native speakers" that doesn't exist anywhere else.
• Recent Corrections feed: Last 15 corrections as compact cards: timestamp, original (strikethrough, muted), corrected (green), shortcut used, one-click re-copy. FIFO rotation, max 15 free / 50 pro. Each card is proof the product works.
• Saved snippets: Star icon on any correction saves it permanently. "Email closings I always use," "My standard intro paragraph." These become the user's personal writing library inside BLN.
Tab icon: Pencil or note icon, same weight as Main (grid) and Prompts (book) icons.
Draft pad: White background, 1px border #e2e8f0, 12px radius, 100px min-height, auto-grows to 200px max. Placeholder: "Draft something, paste text to fix, or save a snippet..." in #94a3b8.
"Fix with BLN" button: Below draft pad, full-width, 44px height, BLN green. Only shows when draft has >10 characters.
Correction cards: White background, left border 3px #24d580, 10px radius. Original text in #94a3b8 with strikethrough. Corrected text in #0f172a. Timestamp in #94a3b8 mono. Copy icon top-right, star icon next to it.
The Duolingo principle applied to writing. Users don't just accumulate corrections. They level up. Levels are based on total corrections + streak consistency + variety of shortcuts used.
| Level | Name | Requirement | Badge Color |
|---|---|---|---|
| 1 | Beginner | 0 corrections | #94a3b8 gray |
| 2 | Explorer | 25 corrections | #22c55e green |
| 3 | Writer | 100 + 3-day streak | #3b82f6 blue |
| 4 | Wordsmith | 500 + 7-day streak + 3 shortcuts used | #8b5cf6 purple |
| 5 | Native | 1000 + 30-day streak + 5 shortcuts used | #f59e0b gold |
Level badge replaces the current "0/180 today" text in the header. Shows: level icon + "Level 3: Writer" + XP progress bar to next level. Progress bar: 4px height, border-radius: 2px, bg #e2e8f0, fill with level color gradient. On level-up: the entire header does a 600ms glow animation in the new level's color.
Level-up toast: Special MilestoneToast variant with level badge, new title, and share button. "You've reached Level 3: Writer! 🎉"
Why 10/10: Levels create identity. A user who is "Level 4: Wordsmith" doesn't think "should I try a competitor?" They think "I'm almost Level 5." The level badge visible in the side panel header is a constant reminder of their investment. This is the retention mechanic that Duolingo proved works for language learning applied directly to writing improvement.
Rename "magnifier" to Recruiter. "scales" to Paralegal. "compass" to Startup Founder. "feather" to Copywriter. "heart" to Healthcare. Users scan names, not descriptions. A Korean developer looking for help with technical writing should see "Developer" not "telescope." 30 minutes in MongoDB. Zero code risk. Massive comprehension gain.
Two changes in one:
A) Most Used section: Above Main Functions, show user's top 3 shortcuts ranked by actual usage count. Track in bln_shortcut_usage: { [id]: count }. Each row: shortcut key badge + name + count + "Run" button. Before 10 total corrections, show "Your most-used shortcuts will appear here."
B) Reduce default view from 9 to 5: Show Rephrase, Translate, Grammar, Quick Reply, Simplify. Collapse Distill, Punctuation, APA Citation, MLA Citation into "Show more" expander. Persistent: if user expands once, stays expanded (stored in chrome.storage.local).
Most Used section header: "YOUR TOP SHORTCUTS" in #64748b, font-size: 11px, font-weight: 600, letter-spacing: 0.06em.
Each row: height: 44px, border-bottom: 1px solid #f1f5f9. Key badge: bg: #0f172a, color: white, border-radius: 6px, width: 28px, height: 28px, centered number. Usage count: color: #94a3b8, font-variant-numeric: tabular-nums. "Run" button: ghost style, color: #24d580, appears on row hover only.
"Show more" toggle: color: #64748b, font-size: 12px, chevron rotates 180deg on expand (150ms ease).
The side panel API supports per-site panels. Use sidePanel.setOptions({ path, tabId }) to show different content per domain. On Gmail: highlight "Draft a Quick Reply" and "Make Professional." On LinkedIn: highlight "Connection Request" and "Comment on Post." On generic sites: show default view. A small domain chip at the top of the side panel shows: "📧 Gmail Mode" or "💼 LinkedIn Mode." The user feels the extension understands WHERE they're writing, not just WHAT they're writing.
Implementation: Not separate HTML files per site. One panel, conditionally rendered sections. Read chrome.tabs.query({ active: true }) on panel mount, extract hostname, match against known domains, set a context state that reorders/highlights relevant shortcuts and shows site-specific prompt suggestions.
Critical while database shows 0 prompts. Every pack card gets a hardcoded before/after example. Even with zero live prompts, the card demonstrates value:
Legal: "The client want to proceed despite risk" -> "The client wishes to proceed notwithstanding the identified risks"
Recruiter: "We looking for someone good" -> "We're seeking a candidate who excels in this role"
Copywriter: "Our product is very good and you should buy it" -> "The tool that 10,000 writers trust to ship faster"
Before text: color: #94a3b8, text-decoration: line-through, font-size: 12px, italic.
Arrow: color: #24d580, "→" character, centered.
After text: color: #0f172a, font-weight: 500, font-size: 12px.
Container: bg: #f8fafc, border-radius: 8px, padding: 10px, inside the pack card below the description.
No competitor does this. BLN knows the user's L1 from onboarding. Every L1 has predictable error patterns. Korean speakers drop articles. Spanish speakers add unnecessary pronouns. Japanese speakers struggle with plural/singular. Show a small "Your Patterns" card on the Notes tab or Main tab that says: "As a Korean speaker, you tend to: drop articles (a/the), confuse prepositions (in/on/at), use present tense instead of past." This is static content per L1 (already partially built in onboarding-data.ts which has 16 L1 languages with patterns). Display it as educational content, not correction feedback.
Why 9/10: This makes the user feel understood at a linguistic level. "This tool knows that Korean speakers drop articles" is a fundamentally different value proposition than "this tool fixes grammar." It's the "fingerprints of your first language" brand thesis made tangible in the UI.
For users with bln_total_corrections < 5, replace the Writing Templates card with a guided "First Steps" card. Three steps with checkmark states: 1) Select text on any page, 2) Press your shortcut (shows configured key), 3) Paste the result. Progress: "2/5 corrections to unlock your writing stats." After 5 corrections, card morphs into the Writing Templates card with a 600ms cross-fade. The transition feels like leveling up.
Replace the plain "0/180 today" progress bar with a compact dashboard showing: level badge (from #02) + daily usage ring (circular, not linear) + streak fire + total lifetime corrections. For free users near limit: ring turns amber then red, "Upgrade" link appears. For pro users: green ring, "Unlimited" badge, lifetime stat.
Layout: 64px height row. Left: circular usage ring (32x32px SVG, stroke-dasharray for progress). Center: "Level 3: Writer" + "847 lifetime" stacked. Right: "🔥 5-day streak" vertically centered.
Ring colors: #24d580 (20+), #f59e0b (5-19), #ef4444 (1-4), pulsing red (0).
Lifetime counter: font-variant-numeric: tabular-nums, font-weight: 700, color: #0f172a.
Replace raw text area with structured form: Name field (40 char max, required) + Prompt textarea (500 char max, char counter) + ${text} variable hint ("Use ${text} where selected text should go") + warning if ${text} missing + Save button. Current state (screenshot 3) shows a jailbreak prompt pasted with no limits. This is both a UX and security problem.
Star icon on each function row. Pinned functions move to top. Combined with per-site context (#05): user can pin different functions per site. On Gmail: "Draft Reply" and "Professional" are pinned. On Slack: "Casual" and "Simplify" are pinned. Pro-only: free users get 2 pins, pro gets unlimited. Stored in bln_pinned: { [hostname]: shortcutId[] }.
Replace the current footer ("Sharing the ❤️ of Language...") with a live stat: "8,247 writers improved 47,000+ sentences this week." Pull from a simple backend endpoint that aggregates anonymized usage counts (already tracked via analytics). Updates weekly. The footer becomes social proof instead of a tagline. The user feels part of a community of non-native speakers all improving together.
#03 Pack profession naming (30min, backend)
#04 Most Used + function reduction (2h)
#10 Custom function validation (1h bonus)
#01 Notes Tab with draft pad + recent corrections + saved snippets (3h)
#02 Writing Level progression system (2.5h)
#09 Usage dashboard header (2h)
#06 Try-It previews on pack cards (2h)
#07 L1 Pattern Insights (3h)
#05 Per-site context switching (3h)
#08 Smart Welcome State (1.5h)
| # | Idea | Original Rating | Status |
|---|---|---|---|
| 7 | Writing History + Favorites Panel | 8/10 | -> Folded into Notes Tab (#01) |
| 8 | One-Click Tone Presets | 8/10 | NOT STARTED (Sprint 28+) |
| 10 | Proactive Grammar Hints (Gemini Nano) | 8/10 | NOT STARTED (requires origin trial) |
| 11 | Multi-Paragraph Batch Mode | 8/10 | NOT STARTED |
| 12 | Deep-Link Prompt Pack Auto-Load | 8/10 | NOT STARTED |
| 13 | Per-Site Settings Memory | 7/10 | -> Folded into Per-Site Context (#05) |
| 14 | 55-Locale CWS Listings | 7/10 | NOT STARTED (agent task) |
| 15 | Weekly Progress Email Digest | 7/10 | NOT STARTED (backend) |
| 17 | Keyboard Shortcut Customization | 6/10 | NOT STARTED |
| 20 | Referral / Invite System | 6/10 | NOT STARTED (backend) |