LinkedIn Brand Assistant
Manifest V3 Chrome extension that injects an AI writing companion directly into the LinkedIn feed. Shadow DOM isolation prevents style conflicts with LinkedIn's CSS. All state persists to chrome.storage.local — never lost when the Manifest V3 service worker terminates between interactions.
- Client
- Leadswave / Chrome Web Store
- Role
- Full-Stack & Chrome Extension Developer
- Timeline
- 2025 – 2026
- Stack
- 7 technologies
A closer look



- Closed Shadow DOM widget isolation: extension styles can't bleed into LinkedIn's DOM and LinkedIn's styles can't override the widget
- Manifest V3 service worker state persisted to chrome.storage.local — never relies on in-memory module variables that reset on worker termination
- DOM text extraction: strips tracking attributes, SVG icons, and navigation noise before sending context to the LLM — 200-400 tokens of clean post text
- Tone-customizable generation: Insightful, Inquiring, and Supportive comment modes
- Client-side API key configuration for private, secure token management without a backend
- Published to the Chrome Web Store
Need a similar delivery process for your product? I can help shape the scope and ship the implementation end to end.
Start a projectActive LinkedIn professionals spend meaningful time reading posts and composing thoughtful replies. The challenge is that composing a genuinely engaged response requires understanding the post's content, matching the appropriate tone, and writing something that adds rather than echoes. This friction interrupts reading flow.
The technical challenge was injecting a usable UI into a third-party page without breaking it. LinkedIn's CSS is dense with high specificity. Naive injection of styled components causes either style collisions — where LinkedIn overrides your styles — or style leakage — where your styles break LinkedIn's layout.
Style isolation required Shadow DOM. Every widget mount attaches a shadow root to a host container element, creating a DOM boundary completely separate from the main document's style cascade. LinkedIn's CSS cannot enter the shadow tree, and the extension's styles cannot leak out. The React tree mounts inside the shadow, with its stylesheet loaded as a link element appended to the shadow root itself.
Manifest V3's service worker lifecycle is aggressive — service workers terminate after short idle periods. Any state stored as module-level variables is lost on termination. All user settings, API keys, and authentication state are persisted to chrome.storage.local and read from storage on each use.
Context extraction walks only text nodes in the post body element, stripping tracking attributes, SVG paths, and nested navigation content. The resulting context is 200–400 tokens of clean, representative post text.
The extension renders a compact AI companion button alongside each LinkedIn post in the feed. Clicking it opens a panel inside the Shadow DOM widget showing the extracted post summary and three tone-selectable comment drafts. Users can edit any draft before copying it to the LinkedIn comment box.
The companion web app at lnbrandassistant.xyz provides onboarding, API key configuration, and usage documentation.
Published to the Chrome Web Store with a clean, isolated UI that survives LinkedIn's frequent frontend deployments without breaking. The Shadow DOM architecture means LinkedIn's CSS updates don't affect the widget's appearance, and the extension's styles don't affect LinkedIn's layout.
The Manifest V3 service worker implementation handles the browser's aggressive termination behavior correctly — state is never lost between user interactions regardless of how long the browser has been idle.