A Manifest V3 Chrome extension that reads visible data from a LinkedIn profile and generates concise, context-aware connection notes directly in-tab using the OpenAI API. Designed for speed, privacy, and simplicity — everything runs client-side with no external database or automation.
- In-tab UI: Floating “Note” panel on LinkedIn profile pages with
Generate,Copy, and tone options. - DOM Extraction: Parses visible profile sections (headline, experience, education, skills, recent activity).
- AI Integration: Calls an OpenAI-compatible endpoint (e.g.,
gpt-4o-mini) through a background service worker. - Guidance Input: Users can provide persistent custom instructions (“Focus on BC alumni,” “Mention awards,” etc.).
- Tone Control: Friendly / Neutral / Formal modes for stylistic variation.
- Privacy-first: No bulk scraping, automation, or server storage — all data handled locally.
- Offline / Quota Fallback: Local template generation if API call fails or quota is exceeded.
- Clipboard Support: One-click copy with fallback for restricted clipboard environments.
manifest.json
├── src/
│ ├── content.js ← injects panel + extracts DOM fields
│ ├── heuristics.js ← parsing and prioritization logic
│ ├── service_worker.js ← API communication, prompt building, post-processing
│ └── inject.css ← panel styling
├── options/
│ ├── options.html
│ └── options.js ← API key/model/identity/tone/guidance persistence
├── popup/
│ └── popup.html ← simple launcher
└── README.md
- User opens a LinkedIn profile.
content.jsextracts relevant info and injects the floating panel.- Clicking Generate sends extracted data + user guidance to the service worker.
- Service worker builds a compact JSON payload → OpenAI API → returns 1–3 drafts.
- Drafts are shown inline; user can cycle tone or regenerate.
- Copy button writes the chosen draft to clipboard.
-
Clone or download this repository:
git clone https://github.com/<your-username>/linkedin-note.git
-
Open Chrome →
chrome://extensions -
Toggle Developer Mode (top right)
-
Click Load Unpacked → select the
linkedin-notefolder -
Open a LinkedIn profile → click the Note chip to start generating
-
Click the extension icon → Options
-
Enter:
- API Base:
https://api.openai.com/v1 - Model:
gpt-4o-mini(or another compatible model) - API Key: (keep private — stored locally via
chrome.storage) - Identity line: e.g. “I'm Cooper, Boston College ’27, Human-Centered Engineering.”
- Company interest template: “Strong interest in {{company}}.”
- API Base:
-
Adjust tone and company interest preferences as desired.
Each request sends a minimal JSON payload like:
{
"name": "Alex",
"company": "OpenAI",
"headline": "Product Manager, Applied Research",
"detail": "red-teaming multimodal models",
"guidance": "Highlight BC alumni connection if relevant"
}- Output ≤ 200 characters
- No emojis, no calls-to-action
- Include identity line verbatim
- Reference exactly one concrete profile detail
- Natural tone (no forced closing phrases)
- Chrome Manifest V3
- JavaScript (ES6)
- DOM APIs / MutationObserver
- OpenAI API (Chat Completions)
chrome.storage.sync- Clipboard API
- HTML + CSS (Shadow DOM-safe styling)
- Operates only on user-opened pages
- Reads visible content only
- No automation of clicks, invites, or bulk actions
- No remote database — everything stays local
- API key and settings stored via
chrome.storage.sync
- Works best on
/in/profile URLs. - If the panel doesn’t appear after navigating within LinkedIn (SPA routing), reload the page.
- Use
chrome://extensions → Inspect views (service worker)for logs ([LN]prefix). - Ensure billing is attached to your OpenAI key to avoid 429 (insufficient_quota) errors.