Client-side personal knowledge engine. Save any URL, summarize it, classify it, search it semantically, all from a Chrome extension talking directly to your own Qdrant cluster.
flowchart TB
A[User saves a link] --> B[Fetch webpage content<br/>title, body, meta tags]
B --> C[Gemini reads page<br/>extracts title, author,<br/>summary, tags<br/>picks a class]
C --> D[Gemini turns the text<br/>into a 768-dim<br/>semantic vector]
C --> E[Tokenize text into<br/>keyword frequencies<br/>BM25-style sparse]
D --> F[(Qdrant indexes one point:<br/>dense vector + sparse vector<br/>+ metadata payload)]
E --> F
G[User searches or browses] --> H{What kind of intent?}
H -->|free-text query| I[Gemini embeds the query<br/>into a 768-dim vector]
H -->|click a class chip| J[Build payload filter<br/>class equals chosen id]
H -->|recency toggle| K[Build time filter<br/>created in last 2 hours]
I --> L[(Qdrant runs hybrid search:<br/>sparse keyword search +<br/>dense cosine search<br/>in parallel)]
J --> M[(Qdrant scrolls all points<br/>matching the payload filter)]
K --> L
L --> N[Rank with sparse priority:<br/>strong keyword wins,<br/>semantic fills the gaps]
M --> O[Sort newest first<br/>by last-classified time<br/>LIFO]
N --> P[Top results to the user]
O --> P
F -.same collection.- L
F -.same collection.- M
style F fill:#22263a,stroke:#6c63ff,color:#fff
style L fill:#22263a,stroke:#6c63ff,color:#fff
style M fill:#22263a,stroke:#6c63ff,color:#fff
- Save any webpage with one click. Page text gets fetched, sent to Gemini for extraction (title, author, summary, tags) and classification, then embedded into a 768-dim vector and indexed in Qdrant alongside a BM25-style sparse vector.
- Search your vault semantically. Hybrid retrieval: sparse keyword match (a person's name, a tag, a domain) wins when it's strong; dense cosine fills paraphrase queries.
- Classify with your own categories. Define classes like
agents,karpathy,videos,blogs,finetuning, Gemini picks one per save, you reassign by drag-and-drop if needed. - Browse by class. Color-coded chips, LIFO ordering (last saved or last reassigned first).
- Export everything to CSV with one click.
- Local-first. All keys live in
chrome.storage.local. Traffic goes directly to Gemini and your own Qdrant cluster, no proxy, no third-party server.
- Hybrid search (Qdrant named vectors: 768-d Cosine
dense+ IDF-modifiedsparse) - Sparse-priority ranking with cosine fallback (avoids tech-corpus dense-cluster collapse)
- Auto-deduplication via deterministic UUID derived from URL hash
- Drag-and-drop class reassignment with optimistic UI
- Per-link delete with confirm modal
- Per-class link counts
- User-defined classes with custom colors
- Recency boost (last 2h filter on
created_at) - Bulk URL ingestion
- CSV export with UTF-8 BOM (Excel-friendly)
- Toast notifications (auto-dismiss + manual close)
- Reclassify-all with retry+backoff and progress UI
- oEmbed enrichment for YouTube and Vimeo (channel + title even on JS-rendered pages)
- Gemini API key : https://aistudio.google.com/app/apikey
- Qdrant Cloud cluster : https://cloud.qdrant.io/
git clone https://github.com/Goodnight77/semantic-resource-vault.git
cd semantic-resource-vaultIn Chrome / Edge / Brave:
- Open
chrome://extensions - Enable Developer mode
- Click Load unpacked → pick the cloned folder
- Click the extension icon → ⚙ Options
- Paste Gemini key, Qdrant URL, Qdrant API key
- Click Test Connection — accept the prompt to create the
semantic_vault_hybridcollection (hybrid: dense 768 + sparse IDF) - Click Save All Settings
- While in Options, define your classes with colors at the top of the page
Open the popup → Save tab → Save Current Page. The status line shows the auto-assigned class chip:
✓ Saved: 2000s vibe playlist [in: music]
Bulk Add tab → paste one URL per line → Ingest All URLs.
Search tab → type a query → Search. Toggle Recency Boost to restrict to the last 2 hours.
![]()
Header ⊞ Classes button → click a chip. Drag any card onto another chip to reassign its class. Click × on a card to delete from the vault.
Click ⚙ Options to configure API keys and manage classes.
Options → Classes section → Export CSV. Downloads a UTF-8 file with class metadata + every saved link.
After editing your class list, hit Reclassify all existing links in Options to re-run the AI classifier over already-saved points.
you can see your collection and points live-update in Qdrant Cloud's UI as you save, search, reclassify, and delete links.
- Gemini API key, Qdrant URL, Qdrant API key, all stored in
chrome.storage.local(unsynced, local to this Chrome profile). - Page text only ever goes to Gemini's API and your own Qdrant cluster.
- No analytics, no telemetry, no third-party services beyond those two.