Skip to content

ArttuAn/notegenius

Repository files navigation

NoteGenius Logo

The open-source NotebookLM alternative — powered by Claude AI.
Upload sources, chat with your documents, generate insights. 100% local. No limits.


Next.js TypeScript Claude AI Tailwind CSS SQLite License: MIT GitHub Repo stars


Why NoteGenius?

NoteGenius NotebookLM
AI Model Claude Sonnet 4.6 (superior reasoning) Gemini
Self-hostable
Open source
Source limits ✅ Unlimited ❌ 50
Citation popovers ✅ Shows exact passage on click ⚠️ Basic
Notes panel ✅ Markdown, pinnable, auto-save ⚠️ Limited
Generation types ✅ 7 types ⚠️ Fewer
Data ownership ✅ Local SQLite, your machine ❌ Google cloud
Dark mode ✅ Built-in
Cost ✅ Pay-per-token (Claude API) ❌ Google account

Features

📂 Multi-format Sources

Upload PDFs, paste plain text, add web article URLs, or drop in a YouTube link — transcripts are fetched automatically. All content is chunked and indexed in SQLite FTS5 for fast retrieval.

💬 Grounded Chat with Inline Citations

Ask anything about your documents. Every answer cites its sources with [1] markers. Click any citation to see the exact passage from the original document in a popover — not just the source name.

✨ 7 AI Generation Types

Type Description
Summary Executive summary across all sources
FAQ 8–12 likely reader questions with answers
Study Guide Key concepts, definitions & practice questions
Timeline Chronological event extraction
Key Topics Top themes with supporting evidence
Concept Map Hierarchical idea relationships
Podcast Script Two-host dialogue (Host A / Host B)

All generations stream in real-time and are saved to your notebook.

📝 Notes Panel

Write Markdown notes alongside your research. Auto-saves as you type, supports pinning, and keeps everything per-notebook.


Architecture

flowchart TD
    subgraph Sources["📂 Source Ingestion"]
        PDF["PDF\n(pdf-parse)"]
        URL["Web URL\n(cheerio + axios)"]
        YT["YouTube\n(transcript API)"]
        TXT["Plain Text"]
    end

    subgraph Processing["⚙️ Processing Pipeline"]
        Chunker["Sliding-window\nChunker\n1200 chars / 200 overlap"]
        SQLite[("SQLite\n+ FTS5 Index")]
    end

    subgraph Retrieval["🔍 Retrieval"]
        FTS["BM25 Full-text\nSearch (FTS5)"]
        TopK["Top-K Chunks\n(default: 8)"]
    end

    subgraph AI["🤖 Claude AI"]
        Chat["Streaming Chat\nclaude-sonnet-4-6"]
        Generate["Generation\n7 types"]
        Citations["Citation\nExtraction"]
    end

    subgraph UI["🖥️ Next.js Frontend"]
        Sources2["Sources\nPanel"]
        ChatUI["Chat\nPanel"]
        GenerateUI["Generate\nPanel"]
        Notes["Notes\nPanel"]
    end

    PDF & URL & YT & TXT --> Chunker
    Chunker --> SQLite
    SQLite --> FTS
    FTS --> TopK
    TopK --> Chat
    TopK --> Generate
    Chat --> Citations
    Citations --> ChatUI
    Generate --> GenerateUI
    Sources2 --> SQLite
    Notes --> SQLite
Loading

Data Flow

sequenceDiagram
    actor User
    participant UI as Browser
    participant API as Next.js API
    participant DB as SQLite
    participant Claude as Claude API

    User->>UI: Upload PDF / paste URL
    UI->>API: POST /api/sources (SSE)
    API->>DB: Create source row
    API-->>UI: SSE: status=processing
    API->>DB: Insert chunks + FTS index
    API-->>UI: SSE: status=ready
    UI->>UI: Show ✅ in Sources panel

    User->>UI: Ask a question
    UI->>API: POST /api/chat (SSE)
    API->>DB: FTS5 BM25 search → top-K chunks
    API->>Claude: Stream with source context
    Claude-->>API: Stream tokens + [1][2] citations
    API-->>UI: SSE: text chunks
    UI->>UI: Render message + citation popovers
Loading

Tech Stack

Frontend          Backend           AI              Data
─────────         ────────          ──              ────
Next.js 16        Next.js API       Claude          SQLite
TypeScript        Routes            Sonnet 4.6      better-sqlite3
Tailwind v4       SSE streaming     @anthropic-ai   FTS5 BM25
Radix UI          better-sqlite3    /sdk            Sliding-window
Sonner toasts     pdf-parse                         chunking
next-themes       cheerio
                  youtube-transcript

Getting Started

Prerequisites

Install

git clone https://github.com/ArttuAn/notegenius
cd notegenius
npm install

Configure

cp .env.example .env.local

Edit .env.local:

CLAUDE_API_KEY=sk-ant-your-key-here

Run

npm run dev

Open http://localhost:3000. The SQLite database is created automatically at ./data/notegenius.db on first run.


Project Structure

notegenius/
├── app/
│   ├── api/
│   │   ├── chat/          # Streaming Q&A + session management
│   │   ├── generate/      # 7-type AI generation (SSE)
│   │   ├── notebooks/     # CRUD for notebooks
│   │   ├── notes/         # CRUD for notes
│   │   ├── settings/      # App settings
│   │   └── sources/       # Source ingestion (SSE)
│   ├── notebook/[id]/     # Workspace page
│   └── notebooks/         # Dashboard page
│
├── lib/
│   ├── ai/
│   │   ├── chat.ts        # FTS5 retrieval → Claude streaming + citation parsing
│   │   ├── generate.ts    # 7 generation types → Claude streaming
│   │   └── prompts.ts     # All system prompts
│   ├── db/
│   │   ├── schema.ts      # SQLite schema + TypeScript types
│   │   ├── migrate.ts     # Idempotent migrations
│   │   └── queries/       # Typed query helpers per entity
│   └── ingestion/
│       ├── chunker.ts     # Sliding-window text chunker
│       ├── pdf.ts         # pdf-parse v2 extraction
│       ├── url.ts         # cheerio web scraper
│       └── youtube.ts     # Transcript fetcher
│
└── components/
    ├── notebook/
    │   ├── ChatPanel.tsx      # Streaming chat + citation chips
    │   ├── SourcesPanel.tsx   # Source list + upload dialog
    │   ├── GeneratePanel.tsx  # Generation type selector + results
    │   └── NotesPanel.tsx     # Auto-saving markdown notes
    └── ui/                    # Radix UI primitives

Environment Variables

Variable Required Default Description
CLAUDE_API_KEY Anthropic API key
DATABASE_URL ./data/notegenius.db SQLite file path

License

MIT — use it, fork it, ship it.


Built with Claude Code · Powered by Anthropic Claude

About

Open-source NotebookLM alternative powered by Claude AI. Upload sources, chat with your docs, generate insights.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors