A Manifest V3 Chrome Extension designed to automate repetitive knowledge-work tasks. It integrates page text extraction, vector embeddings, dynamic Notion/HubSpot CRM synchronization, and multi-document synthesis inside the Chrome Side Panel.
Inspired by ideas from anthropics/skills and knowledge-work-plugins, this tool acts as a local digital assistant for researchers, operators, and sales teams.
- DOM Listener & Parser: Background scripts track active tabs. When a user lands on a research paper, article, or documentation page, the extension automatically extracts text and computes a structured AI summary in the sidepanel.
- Vector Semantic Search: Utilizes a lightweight client-side vector database (Wasm-based) to store page highlights and perform semantic search across the user's current browsing session.
- Dynamic API Sync: Exposes seamless integrations with Notion Database API and HubSpot CRM API.
- Automatic Categorization: The background agent reads the page context, categorizes the lead or article, and automatically pushes a structured entry to the user's workspace without manual copy-pasting.
- Supports drag-and-drop PDF extraction, feeding text chunks to the DeepSeek/OpenAI API with sliding-window chunking to bypass token limits.
Below is an abstract of the background syncer module that formats page metadata and saves it to Notion:
const syncToNotion = async (notionApiKey, databaseId, pageTitle, pageUrl, summary) => {
const url = `https://api.notion.com/v1/pages`;
const headers = {
"Authorization": `Bearer ${notionApiKey}`,
"Notion-Version": "2022-06-28",
"Content-Type": "application/json"
};
const payload = {
parent: { database_id: databaseId },
properties: {
Name: {
title: [
{ text: { content: pageTitle } }
]
},
URL: {
url: pageUrl
},
Category: {
select: { name: "Knowledge Extraction" }
}
},
children: [
{
object: "block",
type: "paragraph",
paragraph: {
rich_text: [
{ text: { content: summary } }
]
}
}
]
};
try {
const response = await fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
});
const data = await response.json();
if (!response.ok) throw new Error(data.message || "Failed to sync");
return { success: true, pageId: data.id };
} catch (error) {
console.error("Notion Sync Error:", error);
return { success: false, error: error.message };
}
};- Runtime: Vanilla JavaScript (ES6+), Tailwind CSS
- APIs: Chrome Extension API (MV3), Notion API, HubSpot API
- AI Client: OpenAI API (embeddings + completion)