{"id":50409761,"url":"https://github.com/weaiw/trove-ai","last_synced_at":"2026-05-31T03:02:30.403Z","repository":{"id":359775527,"uuid":"1247469826","full_name":"weaiw/trove-ai","owner":"weaiw","description":"中文互联网内容的个人 AI 稍后读 + 知识库 · Read-later + AI knowledge base for the Chinese internet","archived":false,"fork":false,"pushed_at":"2026-05-23T12:30:26.000Z","size":388,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-23T13:07:33.931Z","etag":null,"topics":["ai","chinese","fastapi","knowledge-base","nextjs","obsidian","pgvector","rag","read-later","second-brain","semantic-search"],"latest_commit_sha":null,"homepage":"https://github.com/weaiw/trove-ai","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/weaiw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-23T11:07:46.000Z","updated_at":"2026-05-23T12:30:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/weaiw/trove-ai","commit_stats":null,"previous_names":["weaiw/trove-ai"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/weaiw/trove-ai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weaiw%2Ftrove-ai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weaiw%2Ftrove-ai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weaiw%2Ftrove-ai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weaiw%2Ftrove-ai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weaiw","download_url":"https://codeload.github.com/weaiw/trove-ai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weaiw%2Ftrove-ai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33717419,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","chinese","fastapi","knowledge-base","nextjs","obsidian","pgvector","rag","read-later","second-brain","semantic-search"],"created_at":"2026-05-31T03:02:27.660Z","updated_at":"2026-05-31T03:02:30.392Z","avatar_url":"https://github.com/weaiw.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Trove AI — 拾遗\n\n**Read-later + AI knowledge base, built for the Chinese internet.**\n\n[![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](LICENSE)\n[![Backend: FastAPI](https://img.shields.io/badge/Backend-FastAPI-009688)](https://fastapi.tiangolo.com)\n[![Frontend: Next.js 14](https://img.shields.io/badge/Frontend-Next.js%2014-black)](https://nextjs.org)\n[![pgvector](https://img.shields.io/badge/Vector-pgvector-336791)](https://github.com/pgvector/pgvector)\n[![Responsive: PC · Pad · Mobile](https://img.shields.io/badge/Responsive-PC%20·%20Pad%20·%20Mobile-007aff)]()\n[![Status: active](https://img.shields.io/badge/status-active-success.svg)]()\n\n[中文 README](README.zh.md) · [Self-host guide](docs/SELF_HOST.md) · [Obsidian plugin](https://github.com/weaiw/trove-sync-obsidian)\n\n\u003c/div\u003e\n\n---\n\n## Why Trove AI?\n\nYou save 1000 articles. You re-read 5.\n\nThe problem isn't that you have too much — it's that your tools treat \"save\" and \"read\" as the same action. WeChat 收藏 buries them. **收藏 ≠ reading.** That gap is the entire problem.\n\n**Pocket shut down in 2024. Omnivore shut down too.** Their users' carefully curated libraries vanished overnight.\n\n**Trove AI is a self-hostable, AI-powered second brain** that turns \"save for later\" back into \"actually read \u0026 remember.\" Built first-class for the Chinese internet (WeChat 公众号 / 知乎 / 抖音 / 小红书 / B 站 / 头条 / 掘金 / CSDN), with WeChat Bot ingress, automatic knowledge graph, and one-way Obsidian sync as built-in features.\n\nIt's yours to host. It's yours to keep.\n\n---\n\n## Highlights\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n#### 📥 Multi-platform capture\nWeChat 公众号 · **视频号 (WeChat Channels)** · 头条 · 抖音 · 小红书 · B 站 · Medium · CSDN · 掘金 — and any OpenGraph-aware URL.\nJS-rendered \u0026 no-parser pages (视频号, CSDN, Medium, …) are extracted via a *trafilatura → headless-Chromium render → BeautifulSoup* cascade for clean main-content.\nIngestion via: browser bookmark, WeChat Bot, paste, upload (PDF/DOCX/EPUB/etc), one-sentence Spark generation.\n\n\u003c/td\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n#### 🧠 AI does the work, not you\nEvery article gets: AI-extracted title, 5-sentence summary, 3-5 key points, auto-tags, source-aware author extraction, 1024-dim vector embedding, mind-map auto-generation, video transcription.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n#### 🔍 Semantic search + RAG Q\u0026A\nAsk *\"What did I read about prompt engineering?\"* → get answer with citations to **your** library, not the public internet.\n\n\u003c/td\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n#### 🕸 Auto-grown knowledge graph\nEach new article finds its 3 closest siblings by semantic distance. Watch your knowledge connect itself.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n#### 🛤 Learning paths\nOne sentence → AI picks articles from your library, orders them, presents as a curriculum.\n\n\u003c/td\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n#### 💬 WeChat Bot ingress\nForward an article URL to your bot → it's in your library 5 seconds later, with summary, tags, and \"related to your earlier reads\" suggestions.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n#### 📝 One-way Obsidian sync\nCompanion plugin writes a Markdown snapshot to your vault. Never overwrites your local edits. Your data survives any future Trove shutdown.\n\n\u003c/td\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n#### 🏢 Multi-tenant, production-grade\nJWT auth · per-user data isolation · revocable sync tokens · service-token impersonation for bots · admin user management.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n#### 📂 Real knowledge-base craftsmanship\nFolder hierarchy · tag system · archive · favorite · recycle bin · weekly review reminder · related-articles recommender on every read view.\n\n\u003c/td\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n#### 🌐 All content types\nWeb links · clipboard paste · PDF · Word · Excel · PPT · EPUB · CSV · plain notes · Spark (1-sentence → full article AI generation).\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n#### 📱 Full-device responsive\n**PC · iPad · mobile** all work natively. Touch-optimized reader, gesture-friendly knowledge graph, mobile-first layouts. Use Trove from any device, anywhere.\n\n\u003c/td\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n#### 🌗 Light / dark / system theme\nAuto-switching based on OS preference, or pin to your favorite mode. Eye-friendly serif reader font for long sessions.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n## Screenshots\n\n\u003e ⚠️ Add screenshots in `docs/screenshots/` — see open issues for placeholders.\n\n| Dashboard | Reader | Knowledge graph | Settings |\n|---|---|---|---|\n| _(placeholder)_ | _(placeholder)_ | _(placeholder)_ | _(placeholder)_ |\n\n---\n\n## Who is it for?\n\n- **Product managers and researchers** drowning in saved-but-never-read articles\n- **Engineers and lifelong learners** who want their weekly tabs to compound into knowledge\n- **Privacy-conscious users** who don't want their reading habits living in some startup's database\n- **People burned by Pocket / Omnivore shutdowns** wanting data sovereignty\n- **Content curators** building structured personal knowledge bases\n- **Self-hosters** who run their own infrastructure for fun and survival\n- **Cross-device readers** who switch between phone (commute) → iPad (couch) → laptop (desk) and want all three to feel native\n\n---\n\n## Compared to alternatives\n\n|  | Trove AI | Pocket | Omnivore | Readwise | Hoarder/Karakeep | Memos |\n|---|---|---|---|---|---|---|\n| Open source | ✅ AGPL-3.0 | ❌ | ✅ (was) | ❌ | ✅ MIT | ✅ MIT |\n| Self-host | ✅ Docker | ❌ | ✅ (defunct) | ❌ | ✅ Docker | ✅ Docker |\n| **Chinese platforms** | **✅ 6+ deep parsers** | ❌ | Weak | ❌ | Weak | N/A |\n| AI summary | ✅ Any provider | ❌ Basic | ✅ | ✅ | ✅ | ❌ |\n| Knowledge graph | ✅ Auto | ❌ | ❌ | ❌ | ❌ | ❌ |\n| Learning paths | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| WeChat Bot | ✅ Built-in | ❌ | ❌ | ❌ | ❌ | ❌ |\n| Obsidian sync | ✅ Plugin | ❌ | ✅ | ✅ Paid | ❌ | ❌ |\n| **Responsive (PC/pad/mobile)** | ✅ All native | ✅ | Limited | ✅ | Limited | Limited |\n| Multi-tenant | ✅ | N/A | ✅ | N/A | Limited | Limited |\n| Status | ✅ Active | ⛔ **Shut down 2024** | ⛔ **Shut down 2024** | ✅ Paid | ✅ Active | ✅ Active |\n\nTrove AI is the **only** option that combines: deep Chinese platform support · WeChat Bot · auto knowledge graph · Obsidian sync · self-host · full-device responsive UI. If any one of those is critical to you, the alternatives don't cover it.\n\n---\n\n## Quick Start (5 minutes)\n\n### Prerequisites\n\n- **Docker** ≥ 24.0 with Compose v2 (`docker compose ...`, not `docker-compose`)\n- ~ **4 GB RAM** free\n- ~ **5 GB disk**\n\nThat's it. No Python or Node required on the host.\n\n### Steps\n\n```bash\n# 1. Clone\ngit clone https://github.com/weaiw/trove-ai.git\ncd trove-ai\n\n# 2. Configure secrets\ncp .env.example .env\n# Edit .env, at minimum:\n#   POSTGRES_PASSWORD=$(openssl rand -base64 24)\n#   SECRET_KEY=$(openssl rand -base64 48)\n\n# 3. (Optional) Pre-fill LLM keys (or skip — configure via web UI later)\ncp backend/app/config_store.example.json backend/app/config_store.json\n\n# 4. Run\ndocker compose up -d\n\n# 5. Open\nopen http://localhost\n```\n\nFirst-time setup creates an admin user. The credentials appear in backend logs:\n\n```bash\ndocker compose logs backend | grep -i admin\n```\n\nFull self-host guide with troubleshooting: **[`docs/SELF_HOST.md`](docs/SELF_HOST.md)**.\n\n### Cloud deployment\n\nAny Docker-capable VM works. Battle-tested on:\n- **腾讯云 Lighthouse / CVM** (recommended for China users)\n- AWS EC2 t3.medium\n- DigitalOcean 4GB droplet\n- Hetzner CX22\n\nBring your own reverse proxy (**Caddy / Traefik / Nginx**) for HTTPS, or use Cloudflare Tunnel.\n\n---\n\n## Architecture\n\n```\n        ┌──────────────────────────────────────────────────────┐\n        │       Any device — PC · iPad · mobile · browser       │\n        │   • Web app   • WeChat Bot   • Obsidian plugin        │\n        └─────────────────────────┬────────────────────────────┘\n                                  │\n                          ┌───────▼───────┐\n                          │  Nginx :80    │\n                          └───┬────────┬──┘\n                              │        │\n                  ┌───────────▼──┐  ┌──▼────────────┐\n                  │  Frontend    │  │  Backend       │\n                  │  (Next.js 14)│  │  (FastAPI)     │\n                  │  Responsive  │  │  async         │\n                  └──────────────┘  └───┬────────────┘\n                                        │\n                  ┌─────────────────────┼─────────────────────┐\n                  │                     │                     │\n        ┌─────────▼──────────┐ ┌────────▼───────┐  ┌──────────▼────────┐\n        │  PostgreSQL 16     │ │  Redis 7       │  │ External APIs     │\n        │  + pgvector        │ │  (cache)       │  │ LLM + embedding   │\n        │  • articles        │ │                │  │ • DeepSeek        │\n        │  • embeddings 1024d│ │                │  │ • 讯飞 / OpenAI   │\n        │  • knowledge_edges │ │                │  │ • SiliconFlow     │\n        │  • users + tokens  │ │                │  │ • any compatible  │\n        └────────────────────┘ └────────────────┘  └───────────────────┘\n```\n\n### Tech stack\n\n| Layer | Choice | Why |\n|-------|--------|-----|\n| Frontend | **Next.js 14** + TypeScript + Tailwind | App router, server components, responsive-first |\n| Backend | **FastAPI** + SQLAlchemy async + pydantic | Async-native, type-safe, auto OpenAPI docs |\n| Database | **PostgreSQL 16** + **pgvector** | One DB for both relational data and vector search |\n| Cache | **Redis 7** | Sessions, queues |\n| Crawler | **Playwright** + **curl_cffi** + httpx | Defeats Chinese anti-bot (TLS fingerprint, XHR intercept, JS VM bypass) |\n| LLM | Any **OpenAI-compatible** | DeepSeek, 讯飞星辰, OpenAI, SiliconFlow, MiniMax, 智谱, ... |\n| Embedding | **SiliconFlow bge-m3** (1024-dim) or local fastembed (384-dim) | Cloud quality with local fallback |\n| Reverse proxy | **Nginx** | Single ingress, fast static serving |\n\n---\n\n## Configuration\n\nEverything user-facing is configurable via the web UI:\n\n**Settings page** → AI 对话模型 / 嵌入模型 / 缓存\n\n| What | Where |\n|------|-------|\n| LLM provider + key + model | Settings → AI 对话模型 |\n| Embedding provider + key + model | Settings → 嵌入模型 |\n| Cache clearing / rebuilding | Settings → 系统缓存 |\n| Obsidian sync token | Personal Settings → Obsidian 备份 |\n| WeChat Bot binding | Personal Settings → WeChat |\n| Review schedule | Personal Settings → 周期回顾 |\n\n### Environment variables\n\n| Var | Required | What |\n|-----|----------|------|\n| `POSTGRES_PASSWORD` | ✅ | DB password |\n| `SECRET_KEY` | ✅ | JWT signing secret (≥ 32 random chars) |\n| `OPENAI_API_KEY` | ❌ | Optional fallback if no UI config |\n| `DEEPSEEK_API_KEY` | ❌ | Optional fallback |\n| `SILICONFLOW_API_KEY` | ❌ | Optional fallback |\n| `MINIMAX_API_KEY` | ❌ | Optional fallback |\n| `SERVICE_TOKENS` | ❌ | `tokenA:userA,tokenB:userB` — for bots |\n| `LINKMIND_PUBLIC_BASE` | ❌ | Public URL for bot deep links |\n\nSee `.env.example` for the complete template with comments.\n\n---\n\n## API endpoints (high-level)\n\n| Endpoint | Purpose |\n|----------|---------|\n| `POST /api/auth/login` | User login → JWT |\n| `POST /api/articles` | Add article by URL |\n| `POST /api/articles/upload` | Upload file (PDF / Word / EPUB / etc) |\n| `POST /api/articles/notes` | Write a note |\n| `POST /api/articles/spark` | One-sentence → AI-generated article |\n| `POST /api/assistant/ask` | RAG Q\u0026A on your library |\n| `GET /api/knowledge/graph` | Knowledge graph data |\n| `POST /api/learning/paths/generate` | Generate learning path |\n| `POST /api/sync/issue-token` | Mint long-lived Obsidian sync token |\n| `GET /api/sync/articles` | Paginated articles for sync |\n| `POST /api/sync/revoke-all-tokens` | Revoke all sync tokens |\n\nFull OpenAPI spec at `http://localhost/api/docs` once running.\n\n---\n\n## Obsidian Sync — companion plugin\n\nPlugin repo: **[weaiw/trove-sync-obsidian](https://github.com/weaiw/trove-sync-obsidian)** (MIT)\n\n**One-shot snapshot to your local vault.** Never overwrites your edits. Your data survives any future shutdown.\n\nSetup:\n\n1. Web app → **Personal Settings → Obsidian Backup → Generate Sync Token**\n2. Download plugin from [Releases](https://github.com/weaiw/trove-sync-obsidian/releases/latest)\n3. Drop into `\u003cyour-vault\u003e/.obsidian/plugins/trove-sync/`\n4. In Obsidian → Community plugins → enable **Trove AI Sync**\n5. Paste token + server URL → click **Sync Now**\n\nThe plugin auto-detects already-synced articles via dual-OR (sync_state.json ∪ frontmatter scan), so it's safe to lose either side of the index.\n\n---\n\n## Documentation\n\n- [`docs/SELF_HOST.md`](docs/SELF_HOST.md) — Full self-host guide with troubleshooting\n- [`CONTRIBUTING.md`](CONTRIBUTING.md) — How to contribute\n- API docs at `/api/docs` (auto-generated from FastAPI)\n\n---\n\n## Roadmap\n\n### v1.1 — current\n- ✅ WeChat Channels (视频号) capture\n- ✅ Smart generic extraction (trafilatura → headless render → BeautifulSoup)\n- ✅ Article-scoped Q\u0026A (📄 this-article / 📚 whole-library toggle)\n\n### v1.0\n- ✅ Multi-platform capture (8+ sources)\n- ✅ AI processing pipeline (summary / key-points / tags / embedding / mind-map)\n- ✅ RAG Q\u0026A + semantic search\n- ✅ Auto knowledge graph + learning paths\n- ✅ WeChat Bot ingress\n- ✅ Obsidian sync plugin\n- ✅ Multi-tenant + revocable sync tokens\n- ✅ Self-host via Docker\n- ✅ Responsive UI for PC / pad / mobile\n\n### v1.1\n- 🔜 Browser extension (one-click clip from any tab)\n- 🔜 Image local download (offline-safe backup)\n- 🔜 Pocket / Omnivore import\n- 🔜 Better article deduplication\n- 🔜 PWA support for \"add to home screen\" on mobile\n\n### v1.2\n- More LLM providers (Claude, Gemini, Doubao native)\n- Per-user theme \u0026 language preferences\n- Bulk re-process articles with new AI prompts\n- Article version history\n\n### v2 — research\n- Obsidian community marketplace submission\n- Multi-vault Obsidian sync\n- Notion / Logseq / Reflect export\n- Audio podcast generation from saved articles\n- Daily / weekly digest emails\n\n---\n\n## FAQ\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eWill Trove AI work without paying for an LLM API?\u003c/strong\u003e\u003c/summary\u003e\n\nYes — embedding has a local CPU-only fallback (`BAAI/bge-small-en-v1.5`, 384-dim).\nFor LLM features (summary, tags, RAG), you need at least a free-tier API:\n- **DeepSeek** — cheapest at ~$0.27 / 1M tokens\n- **讯飞 / 智谱** — both offer free trial credits\n- **OpenAI / Claude / Gemini** — pay-per-use\n- **MiniMax / SiliconFlow** — generous free tiers\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eHow much does it cost to run?\u003c/strong\u003e\u003c/summary\u003e\n\n~ **$5-10/month** on a small VPS + LLM API usage.\nAt \u003c 1000 articles/month with DeepSeek, expect ~$2-5/month in LLM costs.\nFor totally free, use local embedding + skip AI summary features.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eCan I migrate from Pocket / Omnivore / Readwise?\u003c/strong\u003e\u003c/summary\u003e\n\nDirect importer coming in v1.1. Workarounds:\n- Pocket export → individual URL list → bulk paste via `/api/articles/batch`\n- Omnivore → markdown export → use `/api/articles/upload`\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eIs anything sent to third parties without my consent?\u003c/strong\u003e\u003c/summary\u003e\n\nOnly to the LLM provider **you explicitly configure**. The API key and base URL are entirely under your control.\nFor air-gapped operation, use local embedding only and skip LLM-powered features.\nNo analytics, no telemetry, no third-party JS in the frontend.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eDoes it work well on mobile?\u003c/strong\u003e\u003c/summary\u003e\n\nYes — built mobile-first with responsive layouts. Reader, library, search, knowledge graph all touch-optimized.\nv1.1 adds PWA so you can \"add to home screen\" on iOS / Android.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eDo I need to know coding to deploy?\u003c/strong\u003e\u003c/summary\u003e\n\nBasic Docker familiarity helps. [`docs/SELF_HOST.md`](docs/SELF_HOST.md) walks through every step.\nIf you're stuck, open an issue and the community usually responds within a day.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eHow is data isolated between users?\u003c/strong\u003e\u003c/summary\u003e\n\nEvery row in `articles`, `tags`, `folders`, `knowledge_edges`, `learning_paths`, `wechat_accounts` is tagged with `user_id`.\nAll queries filter on `current_user.id`. JWT auth + per-user revocable sync tokens.\nCross-tenant leaks are mechanically prevented at the ORM layer.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eWhat happens if I delete an article?\u003c/strong\u003e\u003c/summary\u003e\n\nIt goes to a per-user recycle bin (`deleted_at` column). Auto-purge after 30 days, restorable before that.\nThe Obsidian plugin **never** propagates deletes — your local file stays unless you manually delete it.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eCan I run this commercially?\u003c/strong\u003e\u003c/summary\u003e\n\nYes, under AGPL-3.0: you can charge users for hosting, **as long as you publish your modifications** to those users.\nFor closed-source SaaS deployment, contact the maintainer for a commercial license.\n\u003c/details\u003e\n\n---\n\n## Contributing\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md).\n\nEspecially welcome:\n- New platform parsers (parser_service.py)\n- Translations (English, 日本語, others)\n- UI polish and accessibility\n- Bug reports with reproduction\n- Comparison tests with other LLM providers\n\n---\n\n## Acknowledgements\n\n- Built with **[Hermes](https://hermes.ai)** AI coding agent + **[DeepSeek](https://www.deepseek.com)** as the LLM brain — over **2.7 billion tokens** spent in vibe-coding, 0 lines of human-written code\n- Backend: [FastAPI](https://fastapi.tiangolo.com) · [SQLAlchemy](https://www.sqlalchemy.org) · [pgvector](https://github.com/pgvector/pgvector) · [Playwright](https://playwright.dev) · [curl_cffi](https://github.com/lexiforest/curl_cffi)\n- Frontend: [Next.js](https://nextjs.org) · [Tailwind](https://tailwindcss.com) · [lucide-react](https://lucide.dev) · [react-flow](https://reactflow.dev)\n- Embedding: [BAAI/bge-m3](https://huggingface.co/BAAI/bge-m3) · [fastembed](https://github.com/qdrant/fastembed)\n- Inspired by **Pocket**, **Omnivore**, **Readwise** — and frustrated by the first two shutting down\n\n---\n\n## License\n\nCore: **[AGPL-3.0](LICENSE)**.\nObsidian plugin: [MIT](https://github.com/weaiw/trove-sync-obsidian/blob/main/LICENSE).\n\nFor commercial closed-source SaaS deployment, contact the maintainer for a separate commercial license.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\nIf Trove AI saves your knowledge from yet another startup shutdown,\n**please drop a ⭐ — it costs you nothing and helps the project be discovered.**\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweaiw%2Ftrove-ai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweaiw%2Ftrove-ai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweaiw%2Ftrove-ai/lists"}