v0.4.0 — Full profile capture + side panel UI
Highlights
New
- Full LinkedIn profile scraping into IndexedDB (
userProfilestore): experience, education, skills, certifications, languages, recent posts, recent comments. Issue #16. - Side panel UI — UI migrated from action popup to Chrome Side Panel API. Stays open across LinkedIn tab navigation; full height of the browser window.
- Welcome onboarding on first install. Explicit consent before any scraping; clean opt-out via Skip.
- Auto-open flow: first user gesture on a
/in/<handle>/page opens the side panel automatically (no extension-icon click). - Capture Hero card at top of side panel: stats grid (exp/edu/skl/pst/cmt), Refresh, Copy JSON to clipboard for data analysts.
- SSI auto-capture triggered after profile capture so both visuals light up together.
- System notification with capture summary when the side panel may not be focused.
Parsers (LinkedIn 2026 DOM)
- Rewritten for current LinkedIn structure:
<div componentkey="entity-collection-item-…">+<p>lists instead of<li>(which LinkedIn 2026 dropped). - Authwall detection: capture fails loudly with "session expired" instead of silently saving empty arrays.
- Aggressive scroll with progressive
scrollIntoViewto force SDUI hydration of lazy-loaded sections.
Performance & UX
- Capture time ~50s → ~20s via target-aware scroll bail and
<li>-hydration wait dropped (LinkedIn no longer uses<li>). - One-shot capture (no auto-refresh on subsequent panel opens; Refresh button only).
- Tab-hijack guard: if the user manually navigates the LinkedIn tab during capture, the extension does NOT force-restore the URL.
- Concurrency lock prevents racing captures from welcome + Hero + legacy button.
Privacy
captureFullProfiledefault is now off; only opted in via Welcome → "Open my LinkedIn and capture profile". Skip explicitly clears it.- All data stays local. No backend, no upload.
Bug fixes
- Post-drafts modal hang fix (MV3 service worker eviction): sanitize stuck
inFlighton panel open + watchdog timer. parseEducationoff-by-one stride.parseTopcardMetalocation regex no longer matches UI banners like "Open to work".parseSkillsListrejects role-context strings like "Senior Software Engineer at Pinnacle".- IDB
userProfilecache works even when the legacy chrome.storage ProfileContext is absent (no OpenAI key).
Install
Unzip and Load unpacked at chrome://extensions. Requires Chrome 116+ for Side Panel API.
What's Changed
Full Changelog: v0.3.1...v0.4.0