Your personal AI-powered knowledge management system.
Save anything from the web. Let AI score, summarize, and organize it β based on your profile, not generic algorithms.
KnowledgeOS is a self-hosted knowledge vault β a place where everything you find on the internet lands, gets evaluated by AI, and either gets archived or filtered out.
Instead of mindlessly saving bookmarks you never revisit, KnowledgeOS uses a personalized AI scoring pipeline to decide how relevant each piece of content is to you β based on your hobbies, professional context, and learning goals.
URL saved by user
β
βΌ
[Ingestion Job] βββΊ Fetch metadata (title, image, description)
β YouTube API / Reddit JSON / OpenGraph
βΌ
[AI Analysis Job] βββΊ Score 0β100, verdict, summary, tags
β Based on your personal profile
βΌ
[Inbox] βββΊ Review βββΊ [Vault] (permanent archive)
ββββΊ [Trash]
- Every saved resource is scored 0β100 based on your personal profile
- AI generates a verdict, summary, and tags
- Scoring uses a two-axis system: Intrinsic Quality Γ Relevance to your profile
- Protects against keyword hallucination β "AI" in title β match if content is a gimmick
- Inbox β staging area for new resources, shows AI score and verdict
- Vault β permanent curated archive with categories, notes, and detailed AI summaries
- One-click promotion from Inbox β Vault with automatic re-analysis
- Smart Mix β surfaces forgotten Vault items across different categories
| Source | What gets fetched |
|---|---|
| YouTube | Title, channel, duration, views, transcript excerpt |
| Articles / Websites | Title, description, author, og:image, favicon fallback |
- User-defined categories for Vault organization
- AI suggests category based on existing ones (or proposes new)
- Auto-tagging with niche, profile-relevant vocabulary
ProfessionalContextβ who you are, what you doLearningGoalsβ what you want to learnHobbiesβ your interests (genuinely used for scoring, not decoration)TopicsToAvoidβ hard filter, caps score at 0β10
- Hangfire-powered async processing pipeline
- Automatic retry with error recovery job
ErrorRecoveryJobβ periodically rescues stuck resources
KnowledgeOS.Backend/
βββ Controllers/ # REST API endpoints
βββ Services/
β βββ Ai/ # OpenRouter provider, AI service, prompt builder
β βββ Content/ # YouTube, Reddit, Website content fetchers
β βββ Processors/ # Resource processors
β βββ Abstractions/ # Interfaces
βββ Jobs/ # Hangfire background jobs (Ingestion, AI Analysis, Error Recovery)
βββ Entities/
β βββ Resources/ # Resource (base), VideoResource, ArticleResource, RedditResource
β β βββ InboxMetadata # AI score, verdict, inbox summary
β β βββ VaultMetadata # Detailed summary, category, user notes
β βββ Tagging/ # Tag, Category
β βββ Users/ # ApplicationUser, UserPreference
βββ DTOs/ # Data Transfer Objects
βββ Data/ # AppDbContext, EF Core (TPT strategy)
βββ Migrations/ # EF Core migrations
knowledgeos-frontend/
βββ app/
β βββ (auth)/
β β βββ login/ # Login page
β β βββ register/ # Registration page
β βββ dashboard/
β βββ inbox/ # Inbox view β scored resources awaiting review
β βββ vault/ # Vault view β curated archive with filters
β βββ add/ # Add new resource by URL
β βββ settings/ # User preferences & account settings
β βββ layout.tsx # Dashboard shell with navigation
βββ components/
β βββ InboxCard.tsx # Resource card for inbox (score, verdict, tags)
β βββ InboxDetailModal.tsx # Full resource detail view for inbox
β βββ VaultCard.tsx # Resource card for vault (category, notes)
β βββ VaultDetailModal.tsx # Full resource detail view for vault
βββ lib/
βββ api.ts # All API calls (typed fetch wrappers)
βββ types.ts # Shared TypeScript types
βββ categoryColor.ts # Category color mapping utility
βββ ThemeProvider.tsx # Dark/light theme context
- Table Per Type (TPT) β
VideoResource,ArticleResource,RedditResourceeach have their own table, sharing the baseResourcestable - 1:1 Metadata composition β
InboxMetadataandVaultMetadataare separate tables linked by FK, not flat columns onResource - Global query filters β all queries are automatically scoped to
CurrentUser.UserId - AI provider abstraction β multiple models registered as
IAiProvider,AiServicetries them in order with fallback - Next.js App Router β full server/client component split, JWT stored in
localStorage, all API calls typed via sharedlib/types.ts
- .NET 10 SDK
- Node.js 20+
- PostgreSQL
- OpenRouter API key (free tier works)
-
Clone the repository
git clone https://github.com/your-username/KnowledgeOS.git cd KnowledgeOS/KnowledgeOS.Backend -
Configure environment
Create a.envfile inKnowledgeOS.Backend/:JWT_KEY=your_super_secret_jwt_key_min_32_chars OPENROUTER_API_KEY=sk-or-...
-
Configure
appsettings.json{ "ConnectionStrings": { "DefaultConnection": "Host=localhost;Port=5432;Database=knowledge_os;Username=postgres;Password=yourpassword" }, "Ai": { "Model_1": "google/gemini-2.0-flash-exp:free", "Model_2": "meta-llama/llama-3.3-70b-instruct:free", "Model_3": "mistralai/mistral-small-3.1-24b-instruct:free" } } -
Run migrations & start
dotnet ef database update dotnet run
cd KnowledgeOS/knowledgeos-frontend
npm install
npm run devFrontend runs on http://localhost:3000, backend on https://localhost:5001.
The entire stack (PostgreSQL, backend, frontend) can be run with a single command.
-
Copy and configure the environment file
cp .env.example .env
Open
.envand set your values. The most important one isNEXT_PUBLIC_API_URLβ this is the address the browser uses to reach the backend, so it must be your machine's actual IP (notlocalhost) if you want to access it from other devices on the network or expose it externally:# Local network (phone, tablet, other PC on the same WiFi) NEXT_PUBLIC_API_URL=http://192.168.1.100:5000/api # VPS / public server NEXT_PUBLIC_API_URL=https://api.yourdomain.com/api # Ports (change if you have conflicts) FRONTEND_PORT=3000 BACKEND_PORT=5000 # Secrets JWT_KEY=your_min_32_char_secret_here OPENROUTER_API_KEY=sk-or-...
-
Run
docker compose up -d --build
-
Run database migrations (first time only)
docker compose exec backend dotnet ef database updateService Default address Frontend http://localhost:3000Backend API http://localhost:5000Swagger http://localhost:5000/swaggerAdminer (DB UI) http://localhost:8080Tip: To find your local IP on Linux run
ip route get 1 | awk '{print $7}'
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/auth/register |
Register new user |
POST |
/api/auth/login |
Login, returns JWT |
GET |
/api/auth/me |
Get display name |
PUT |
/api/auth/me/password |
Change password |
PUT |
/api/auth/me/display-name |
Change display name |
GET |
/api/preferences |
Get user preferences |
PUT |
/api/preferences |
Update user preferences |
POST |
/api/resources |
Save new resource (URL) |
GET |
/api/inbox |
Get inbox resources (paged) |
GET |
/api/inbox/mix |
Get smart mix (high/mid/low score) |
GET |
/api/vault |
Get vault resources (paged, filterable) |
GET |
/api/vault/mix |
Get vault rediscovery mix |
PUT |
/api/resources/{id}/status |
Promote / trash resource |
PUT |
/api/resources/{id}/category |
Assign category |
DELETE |
/api/resources/{id} |
Two-step delete (Trash β permanent) |
GET |
/api/categories |
List categories |
POST |
/api/categories |
Create category |
DELETE |
/api/categories/{id} |
Delete category |
- Browser extension β save to KnowledgeOS directly from any webpage with one click
- Extension for Shortcut app for iOS β add to KnowledgeOS from iPhone share sheet
- PWA (Progressive Web App) β installable mobile/desktop app with offline support and home screen shortcut
- Vector search β semantic similarity search across saved resources using embeddings
- Reddit as a source β support saving Reddit posts and comments with appropriate metadata and AI analysis
- AI re-analysis β manually trigger re-analysis after updating your profile
- Duplicate detection β warn when saving content already in vault (semantic, not just URL match)
- Trend surfacing β detect recurring themes across saved resources
- Nested categories β subcategories for deeper organization
- Collections / reading lists β group resources manually across categories
- Resource relations β link related resources together
- Settings page β manage account, preferences, AI model choice, and danger zone
- Admin panel β user management, job queue monitoring, system health
- Password reset via email β forgot password flow with email token
- Email verification β verify email on registration
- Pocket / Readwise import β migrate existing bookmarks
- Obsidian export β export vault as Obsidian-compatible Markdown vault
- RSS / Atom feed ingestion β auto-import from feeds
| Layer | Technology |
|---|---|
| Frontend | Next.js 16, React 19, TypeScript, Tailwind CSS 4 |
| Backend | ASP.NET Core 10, C# |
| Database | PostgreSQL + EF Core 10 (TPT) |
| Auth | ASP.NET Core Identity + JWT |
| AI | OpenRouter API (multi-model with fallback) |
| Background Jobs | Hangfire + PostgreSQL storage |
| Content Fetching | YoutubeExplode, HtmlAgilityPack, Reddit JSON API |
| API Docs | Swagger / OpenAPI |
MIT License β see LICENSE for details.






