Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added packages/web/public/apple-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 changes: 0 additions & 39 deletions packages/web/public/llms.txt

This file was deleted.

2 changes: 0 additions & 2 deletions packages/web/public/robots.txt

This file was deleted.

Binary file added packages/web/src/app/favicon.ico
Binary file not shown.
20 changes: 8 additions & 12 deletions packages/web/src/app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,13 @@
--font-sans: "Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;
--font-mono: "JetBrains Mono", ui-monospace, "Cascadia Code", monospace;

--color-background: #fbfbfd;
--color-foreground: #1a1a2e;
--color-muted: #9094a6;
--color-muted-foreground: #c2c5d1;
--color-border: #ebebf0;
--color-card: #f5f5fa;
--color-card-hover: #ededf5;
--color-accent: #8b9cf7;
--color-accent-light: #f0f1ff;
--color-terminal: #1e1e2e;
--color-terminal-fg: #d4d4e8;
--color-background: #ffffff;
--color-foreground: #111111;
--color-muted: #777777;
--color-muted-foreground: #bbbbbb;
--color-border: #e5e5e5;
--color-terminal: #111111;
--color-terminal-fg: #e0e0e0;
}

* {
Expand All @@ -24,7 +20,7 @@
body {
background-color: var(--color-background);
color: var(--color-foreground);
font-family: var(--font-sans);
font-family: var(--font-mono);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
Binary file added packages/web/src/app/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
28 changes: 21 additions & 7 deletions packages/web/src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,34 +15,38 @@ const jetbrains = JetBrains_Mono({
});

export const metadata: Metadata = {
metadataBase: new URL("https://kib.dev"),
title: "kib — The Headless Knowledge Compiler",
description:
"CLI-first, LLM-powered tool that turns raw sources into a structured, queryable markdown wiki. Ingest URLs, PDFs, YouTube, GitHub repos. Compile with AI. Search and query instantly.",
"CLI-first, LLM-powered tool that turns raw sources into a structured, queryable markdown wiki. Ingest URLs, PDFs, YouTube, GitHub repos, images. Compile with AI. Search and query instantly. MCP server included.",
keywords: [
"knowledge base",
"knowledge compiler",
"wiki",
"LLM",
"CLI",
"RAG",
"AI",
"knowledge compiler",
"MCP",
"MCP server",
"markdown",
"knowledge management",
"AI tools",
"Homebrew",
"Chrome extension",
],
authors: [{ name: "Keegan Thompson", url: "https://github.com/keeganthomp" }],
creator: "Keegan Thompson",
openGraph: {
type: "website",
title: "kib — The Headless Knowledge Compiler",
description: "Ingest anything. Compile a wiki. Query with AI. All from the terminal.",
description:
"Ingest anything. Compile a wiki. Query with AI. All from the terminal. MCP server for Claude Code, Cursor, and Claude Desktop.",
siteName: "kib",
},
twitter: {
card: "summary_large_image",
title: "kib — The Headless Knowledge Compiler",
description: "CLI-first, LLM-powered knowledge compiler.",
description: "CLI-first, LLM-powered knowledge compiler with MCP server.",
},
robots: {
index: true,
Expand All @@ -55,19 +59,29 @@ const jsonLd = {
"@type": "SoftwareApplication",
name: "kib",
description:
"The Headless Knowledge Compiler. CLI-first, LLM-powered tool that turns raw sources into a structured, queryable markdown wiki.",
"The Headless Knowledge Compiler. CLI-first, LLM-powered tool that turns raw sources into a structured, queryable markdown wiki. Supports ingesting URLs, PDFs, YouTube transcripts, GitHub repos, and images. Includes BM25 search, RAG query, and an MCP server with 8 tools for AI assistant integration.",
applicationCategory: "DeveloperApplication",
operatingSystem: "macOS, Linux",
offers: { "@type": "Offer", price: "0", priceCurrency: "USD" },
downloadUrl: "https://www.npmjs.com/package/@kibhq/cli",
softwareVersion: "0.4.2",
softwareVersion: "0.4.3",
author: {
"@type": "Person",
name: "Keegan Thompson",
url: "https://github.com/keeganthomp",
},
license: "https://opensource.org/licenses/MIT",
codeRepository: "https://github.com/keeganthomp/kib",
featureList: [
"Ingest URLs, PDFs, YouTube, GitHub repos, images",
"AI-compiled structured markdown wiki",
"BM25 full-text search with English stemming",
"RAG query with cited answers",
"MCP server with 8 tools for Claude Code, Cursor, Claude Desktop",
"Chrome extension for one-click webpage saving",
"Homebrew installation support",
"Plain markdown files, no database, no lock-in",
],
};

export default function RootLayout({ children }: { children: React.ReactNode }) {
Expand Down
85 changes: 85 additions & 0 deletions packages/web/src/app/llms.txt/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
export const dynamic = "force-static";

const content = `# kib — The Headless Knowledge Compiler

> CLI-first, LLM-powered tool that turns raw sources into a structured, queryable markdown wiki.

## What is kib?

kib is an open-source CLI tool that ingests raw source material (URLs, PDFs, YouTube transcripts, GitHub repos, images, local files), compiles it into a structured markdown wiki using LLMs, and lets you search and query your knowledge base from the terminal.

## Install

Homebrew (macOS & Linux):
brew tap keeganthomp/kib && brew install kib

npm:
npm i -g @kibhq/cli

## Quick Start

kib init
kib ingest <source>
kib compile
kib query "your question"
kib chat

## Key Features

- Ingest: URLs, PDFs, YouTube, GitHub repos, images, local files
- Compile: LLM structures sources into connected markdown articles with frontmatter, tags, and wikilinks
- Search: BM25 full-text search with English stemming, sub-50ms
- Query: RAG over your wiki with cited answers
- Chat: Interactive REPL with conversation history
- MCP Server: 8 tools (kib_status, kib_list, kib_read, kib_search, kib_query, kib_ingest, kib_compile, kib_lint) and 2 resources (wiki://index, wiki://graph)
- Lint: Health checks for orphan articles, broken wikilinks, stale sources
- Skills: Built-in and custom .ts skills with full vault/LLM/search access
- Export: Markdown or HTML static site output
- Chrome Extension: One-click webpage saving (coming soon to Chrome Web Store)

## MCP Server Integration

kib includes an MCP server that gives AI assistants direct access to your knowledge base. Supported clients: Claude Code, Claude Desktop, Cursor.

Configure automatically:
kib init # auto-configures MCP for detected clients
kib mcp # configure MCP without re-initializing

Manual configuration:
{
"mcpServers": {
"kib": {
"command": "kib",
"args": ["serve"],
"cwd": "/path/to/your/vault"
}
}
}

## LLM Providers

Anthropic (ANTHROPIC_API_KEY), OpenAI (OPENAI_API_KEY), Ollama (local, auto-detected).

## Architecture

Vault is plain files on disk. No database. No lock-in. Version with git.

Vault structure:
- .kb/ — manifest, config, cache, skills
- raw/ — ingested source material (never modified)
- wiki/ — compiled articles, INDEX.md, GRAPH.md
- inbox/ — drop zone for auto-ingest via kib watch

## Links

- GitHub: https://github.com/keeganthomp/kib
- npm: https://www.npmjs.com/package/@kibhq/cli
- Website: https://kib.dev
- License: MIT
`;

export function GET() {
return new Response(content, {
headers: { "Content-Type": "text/plain; charset=utf-8" },
});
}
Binary file added packages/web/src/app/opengraph-image.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 0 additions & 2 deletions packages/web/src/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { Architecture } from "@/components/architecture";
import { Features } from "@/components/features";
import { Footer } from "@/components/footer";
import { Hero } from "@/components/hero";
Expand All @@ -12,7 +11,6 @@ export default function Home() {
<main>
<Hero />
<Features />
<Architecture />
<Quickstart />
</main>
<Footer />
Expand Down
58 changes: 32 additions & 26 deletions packages/web/src/app/privacy/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,21 @@ export default function Privacy() {
return (
<>
<Nav />
<main className="mx-auto max-w-3xl px-6 pb-20 pt-28">
<h1 className="mb-2 text-3xl font-bold tracking-tight">Privacy Policy</h1>
<p className="mb-10 text-sm text-muted">Last updated: April 7, 2026</p>
<main className="mx-auto max-w-3xl px-6 pb-20 pt-32">
<h1 className="font-mono text-2xl font-bold tracking-tight">Privacy Policy</h1>
<p className="mt-2 mb-12 font-mono text-xs text-muted">Last updated: April 7, 2026</p>

<div className="space-y-8 text-[15px] leading-relaxed text-foreground/90">
<div className="space-y-10 font-sans text-sm leading-relaxed text-foreground/80">
<section>
<h2 className="mb-3 text-lg font-semibold">Overview</h2>
<h2 className="mb-3 font-mono text-sm font-semibold text-foreground">Overview</h2>
<p>
kib is an open-source, local-first knowledge compiler. Your data stays on your
machine. We do not operate servers that receive, store, or process your content.
</p>
</section>

<section>
<h2 className="mb-3 text-lg font-semibold">CLI Tool</h2>
<h2 className="mb-3 font-mono text-sm font-semibold text-foreground">CLI Tool</h2>
<p>
The kib CLI runs entirely on your local machine. All ingested content, compiled wiki
articles, and search indexes are stored in your local vault directory. When you use
Expand All @@ -36,71 +36,77 @@ export default function Privacy() {
</section>

<section>
<h2 className="mb-3 text-lg font-semibold">Chrome Extension</h2>
<h2 className="mb-3 font-mono text-sm font-semibold text-foreground">
Chrome Extension
</h2>
<p>
The kib Chrome extension extracts webpage content (text, title, and URL) from the
active tab when you click &quot;Save to kib.&quot; This content is sent to your
locally running kib server at <code>localhost:4747</code> and is never transmitted to
locally running kib server at{" "}
<code className="font-mono text-xs">localhost:4747</code> and is never transmitted to
any external server.
</p>
<p className="mt-3">The extension:</p>
<ul className="mt-2 list-disc space-y-1 pl-6">
<li>Does not collect personally identifiable information</li>
<li>Does not track browsing history or user activity</li>
<li>Does not use analytics, telemetry, or third-party scripts</li>
<li>Does not transmit data to any server other than your local machine</li>
<li>Stores only your local server connection preference using Chrome storage</li>
<ul className="mt-2 list-none space-y-1 pl-0">
<li>Does not collect personally identifiable information</li>
<li>Does not track browsing history or user activity</li>
<li>Does not use analytics, telemetry, or third-party scripts</li>
<li>Does not transmit data to any server other than your local machine</li>
<li>Stores only your local server connection preference using Chrome storage</li>
</ul>
</section>

<section>
<h2 className="mb-3 text-lg font-semibold">Third-Party Services</h2>
<h2 className="mb-3 font-mono text-sm font-semibold text-foreground">
Third-Party Services
</h2>
<p>
When you configure an LLM provider, your content is sent to that provider under their
terms of service. We encourage you to review the privacy policies of your chosen
provider:
terms of service. Review the privacy policies of your chosen provider:
</p>
<ul className="mt-2 list-disc space-y-1 pl-6">
<ul className="mt-2 list-none space-y-1 pl-0">
<li>
—{" "}
<a
href="https://www.anthropic.com/privacy"
target="_blank"
rel="noopener noreferrer"
className="underline underline-offset-2 transition-colors hover:text-foreground"
className="underline underline-offset-4 transition-colors hover:text-foreground"
>
Anthropic Privacy Policy
Anthropic
</a>
</li>
<li>
—{" "}
<a
href="https://openai.com/privacy"
target="_blank"
rel="noopener noreferrer"
className="underline underline-offset-2 transition-colors hover:text-foreground"
className="underline underline-offset-4 transition-colors hover:text-foreground"
>
OpenAI Privacy Policy
OpenAI
</a>
</li>
</ul>
</section>

<section>
<h2 className="mb-3 text-lg font-semibold">Website</h2>
<h2 className="mb-3 font-mono text-sm font-semibold text-foreground">Website</h2>
<p>
This website (kib.dev) is a static site. It does not use cookies, analytics, or
tracking of any kind.
</p>
</section>

<section>
<h2 className="mb-3 text-lg font-semibold">Contact</h2>
<h2 className="mb-3 font-mono text-sm font-semibold text-foreground">Contact</h2>
<p>
If you have questions about this policy, open an issue on{" "}
Questions? Open an issue on{" "}
<a
href="https://github.com/keeganthomp/kib"
target="_blank"
rel="noopener noreferrer"
className="underline underline-offset-2 transition-colors hover:text-foreground"
className="underline underline-offset-4 transition-colors hover:text-foreground"
>
GitHub
</a>
Expand Down
13 changes: 13 additions & 0 deletions packages/web/src/app/robots.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import type { MetadataRoute } from "next";

export const dynamic = "force-static";

export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: "*",
allow: "/",
},
sitemap: "https://kib.dev/sitemap.xml",
};
}
Loading
Loading