BookmarkBrain / FOR_SMLFLG.md
smlflg's picture
Initial public upload from Projekte/BookmarkBrain
3ac10cb verified
|
Raw History Blame Contribute Delete
3.57 kB

BookmarkBrain

Was ist das?

Lokaler semantischer Bookmark-Manager fuer 591+ chaotische Browser-Bookmarks. Suche per natuerlicher Sprache ("der Bash-Cheatsheet von neulich"), auto-Tagging, und Browser-Extension β€” alles ohne Cloud, ohne Accounts.

Architektur & Tech-Stack

Browser Extension (WXT, Chrome+Firefox)
   |  HTTP localhost:7471
FastAPI Backend (backend/main.py)
   |
   β”œβ”€β”€ database.py    ← SQLite + FTS5 + sqlite-vec (alles 1 Datei)
   β”œβ”€β”€ models.py      ← Pydantic-Modelle
   β”œβ”€β”€ search.py      ← FEHLT (noch nicht implementiert)
   β”œβ”€β”€ embeddings.py  ← FEHLT
   β”œβ”€β”€ importer.py    ← FEHLT
   └── tagger.py      ← FEHLT
Schicht Tech
Backend FastAPI + SQLite
Vektor-Suche sqlite-vec (Extension) + FTS5
Embeddings paraphrase-multilingual-MiniLM-L12-v2 (384 dims, DE+EN)
Frontend htmx + Jinja2
Browser Extension WXT Framework (TypeScript)
Build uv (Python), pnpm (Extension)

DB-Schema (in database.py implementiert):

  • bookmarks β€” url, title, description, context, folder_path, domain, auto_tags, user_tags, embedding_text
  • bookmarks_fts β€” FTS5 virtual table
  • vec_bookmarks β€” sqlite-vec virtual table fuer 384-dim Embeddings

Hybrid-Suche (geplant): 0.7 * semantic + 0.3 * FTS5-normalized

Starten / Nutzen

cd ~/Projekte/BookmarkBrain
uv venv && source .venv/bin/activate
uv pip install -e .
uvicorn backend.main:app --reload --port 7471
# β†’ http://localhost:7471

Extension (separat):

cd extension && pnpm install && pnpm dev

Was funktioniert

  • database.py β€” Schema komplett implementiert: bookmarks-Tabelle, FTS5 virtual table, sqlite-vec virtual table, Indizes
  • models.py β€” Pydantic-Modelle fuer Request/Response
  • backend/main.py β€” FastAPI-App mit Routes (genauen Stand pruefen)
  • PLAN.md β€” detaillierter Architektur- und Feature-Plan vorhanden
  • pyproject.toml β€” Projekt-Config mit uv

Was fehlt

  • search.py β€” nicht vorhanden (semantische + FTS-Suche)
  • embeddings.py β€” nicht vorhanden (Model-Loading, Embedding-Generierung)
  • importer.py β€” nicht vorhanden (Netscape HTML + JSON Import)
  • tagger.py β€” nicht vorhanden (Auto-Tagging via TF-IDF + Domain-Rules)
  • Browser Extension β€” Grundstruktur im extension/-Ordner, ob kompilierbar unklar
  • Templates β€” ob UI-Templates vollstaendig sind, ungeprueft
  • Tests β€” test_importer.py, test_search.py, test_tagger.py fehlen noch

Entscheidungen & Lessons Learned

  • sqlite-vec statt ChromaDB/FAISS β€” Single File, SQL + Vektor kombinierbar, zero dependencies. Richtige Wahl fuer <2000 Bookmarks.
  • paraphrase-multilingual-MiniLM-L12-v2 β€” 384 dims, DE+EN nativ, 450 MB, CPU-tauglich, ONNX-Beschleunigung moeglich
  • Localhost HTTP statt Native Messaging β€” einfacher, Chrome+Firefox identisch, CORS reicht
  • "Was wollte ich damit?" als First-Class-Feature (context-Feld) β€” Alleinstellungsmerkmal vs. Raindrop/Linkding/Hoarder
  • Port 7471 β€” Mnemonic: "BRAIN" auf Telefon-Tastatur

Next Steps (priorisiert)

  1. importer.py β€” Netscape HTML Parser fuer bestehende Bookmarks (sofortiger Wert)
  2. embeddings.py β€” Model laden, Batch-Embedding bei Import
  3. search.py β€” Hybrid-Suche implementieren
  4. tagger.py β€” Domain-basierte Tags + TF-IDF
  5. UI-Templates vervollstaendigen
  6. E2E-Test: Import aus ~/Downloads/bookmarks_05.03.26.html, dann Suche
  7. Browser-Extension nach Phase-1 fertigstellen