ai-notes / index.html
Lynote's picture
ui: promote Product Hunt as primary CTA, GitHub secondary
d7dce3f verified
Raw
History Blame Contribute Delete
11.7 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>AI Notes β€” Source-Grounded AI Note Taker (Open Source) | Lynote</title>
<meta name="description" content="Open-source, source-grounded AI note taker: turn documents, web pages, audio, video and YouTube links into notes where every bullet cites the exact source chunk. Local-first, bilingual, zero-dependency core." />
<meta name="keywords" content="open source ai note taker, ai notes, source grounded notes, citations, rag notes, local first notes, ai notes cli, anki export, bilingual notes" />
<meta property="og:title" content="AI Notes β€” Source-Grounded AI Note Taker (Open Source)" />
<meta property="og:description" content="Notes where every bullet cites the exact source chunk. MIT licensed, local-first, bilingual." />
<style>
:root { --bg:#0f1420; --card:#171f31; --card2:#1b2540; --fg:#e8edf7; --muted:#9aa7c0; --accent:#7b6dff; --accent2:#34d399; --line:#23304a; }
* { margin:0; padding:0; box-sizing:border-box; }
body { background:var(--bg); color:var(--fg); font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif; line-height:1.7; }
.wrap { max-width:960px; margin:0 auto; padding:48px 24px 72px; }
.logo { font-size:15px; letter-spacing:3px; color:var(--muted); text-transform:uppercase; }
.badge { display:inline-block; font-size:13px; padding:4px 14px; border-radius:999px; border:1px solid #2c3a55; color:#b9c6e2; background:rgba(123,109,255,.08); margin:20px 0; }
h1 { font-size:clamp(30px,5.5vw,48px); line-height:1.2; margin:0 0 16px; background:linear-gradient(90deg,var(--accent),var(--accent2)); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }
.sub { font-size:18px; color:var(--muted); max-width:720px; }
.stats { display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:14px; margin:34px 0 8px; }
.stat { background:var(--card); border:1px solid var(--line); border-radius:14px; padding:18px; text-align:center; }
.stat b { display:block; font-size:24px; background:linear-gradient(90deg,var(--accent),var(--accent2)); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent; }
.stat span { font-size:13px; color:var(--muted); }
h2 { font-size:26px; margin:56px 0 8px; }
.section-note { color:var(--muted); margin-bottom:22px; }
.grid { list-style:none; display:grid; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:14px; }
.grid li { background:var(--card); border:1px solid var(--line); border-radius:14px; padding:18px 20px; }
.grid strong { display:block; color:#fff; margin-bottom:6px; font-size:16px; }
.grid span { color:var(--muted); font-size:14.5px; }
.steps { list-style:none; display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:14px; margin-top:8px; }
.steps li { background:var(--card); border:1px solid var(--line); border-radius:14px; padding:20px; }
.steps em { display:block; font-style:normal; color:var(--accent2); font-size:13px; letter-spacing:1px; text-transform:uppercase; margin-bottom:6px; }
.steps strong { display:block; font-size:16px; margin-bottom:6px; }
.steps span { color:var(--muted); font-size:14.5px; }
pre { background:var(--card2); border:1px solid var(--line); border-radius:12px; padding:16px 18px; overflow-x:auto; font-size:13.5px; line-height:1.6; color:#d7e1f5; }
code { font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; }
details { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:14px 18px; margin-bottom:10px; }
summary { cursor:pointer; font-weight:600; color:#fff; }
details p { color:var(--muted); font-size:14.5px; margin-top:8px; }
.cta { display:inline-block; background:linear-gradient(90deg,var(--accent),var(--accent2)); color:#fff; font-size:17px; font-weight:600; padding:14px 30px; border-radius:12px; text-decoration:none; margin:36px 0 8px; }
.cta:hover { opacity:.9; }
.cta.secondary { background:var(--card); border:1px solid var(--line); font-weight:500; margin-left:10px; }
.links-label { font-size:12px; color:var(--muted); letter-spacing:1.5px; text-transform:uppercase; margin-top:36px; }
.links { display:flex; flex-wrap:wrap; gap:10px; align-items:center; margin-top:10px; }
.chip { font-size:14px; padding:8px 18px; border-radius:999px; border:1px solid var(--line); color:var(--fg); text-decoration:none; background:var(--card); }
.chip b { color:var(--accent2); }
.chip:hover { border-color:var(--accent); color:#fff; }
.note { font-size:13.5px; color:var(--muted); margin-top:24px; max-width:780px; }
</style>
</head>
<body>
<div class="wrap">
<div class="logo">Lynote</div>
<span class="badge">OPEN SOURCE Β· MIT Β· ZERO-DEPENDENCY CORE</span>
<h1>AI Notes</h1>
<p class="sub">
Source-grounded, bilingual, local-first AI note taker. Turn documents, web pages,
recordings, videos and YouTube links into structured notes where every bullet cites
the exact source chunk it came from β€” so you can verify, edit and reuse notes
instead of trusting a black box.
</p>
<a class="cta" href="https://www.producthunt.com/products/lynote-ai?launch=lynote-3" target="_blank" rel="noopener">
Find us on Product Hunt β†’
</a>
<a class="cta secondary" href="https://github.com/lynote-ai/lynote-notes" target="_blank" rel="noopener">
View on GitHub
</a>
<a class="cta secondary" href="https://lynote.ai/ai-notes?utm_source=huggingface&utm_medium=space&utm_campaign=hf_launch&utm_content=oss_notes" target="_blank" rel="noopener">
Try Lynote AI Notes
</a>
<div class="links-label">Free Lynote tools Β· open source</div>
<div class="links">
<a class="chip" href="https://www.producthunt.com/products/lynote-ai?launch=lynote-3" target="_blank" rel="noopener"><b>Product Hunt</b> β€” Lynote</a>
<a class="chip" href="https://github.com/lynote-ai/lynote-notes" target="_blank" rel="noopener">GitHub β€” lynote-ai/lynote-notes</a>
<a class="chip" href="https://huggingface.co/spaces/Lynote/free-ai-notes" target="_blank" rel="noopener">Free AI Note Taker β†’</a>
<a class="chip" href="https://huggingface.co/spaces/Lynote/free-ai-humanizer" target="_blank" rel="noopener">Free AI Humanizer β†’</a>
<a class="chip" href="https://huggingface.co/spaces/Lynote/free-ai-detector" target="_blank" rel="noopener">Free AI Detector β†’</a>
<a class="chip" href="https://huggingface.co/spaces/Lynote/free-ai-image-detector" target="_blank" rel="noopener">Free AI Image Detector β†’</a>
</div>
<div class="stats">
<div class="stat"><b>58</b><span>Tests Passing</span></div>
<div class="stat"><b>92%</b><span>Test Coverage</span></div>
<div class="stat"><b>0</b><span>Core Dependencies</span></div>
<div class="stat"><b>MIT</b><span>License</span></div>
</div>
<h2>Why Source-Grounded?</h2>
<p class="section-note">AI note tools usually give you a summary you cannot check. Lynote Notes is built around traceability.</p>
<ul class="grid">
<li><strong>Citations as a Contract</strong><span>Every bullet carries a source citation. Providers return chunk ids; the core resolves them and drops anything that does not exist β€” a hallucinated citation cannot leak into a note.</span></li>
<li><strong>Offline by Default</strong><span>The default extractive provider needs no model and no network. Configure any OpenAI-compatible endpoint (Ollama, vLLM, OpenAI) for generative notes, with automatic fallback.</span></li>
<li><strong>Bilingual by Design</strong><span>CJK unigrams + bigrams, sentence splitting on γ€‚οΌοΌŸοΌ› β€” English and Chinese work out of the box.</span></li>
<li><strong>Local-First Workspace</strong><span>One workspace is one SQLite file. No server, no account, inspectable with standard tools.</span></li>
<li><strong>Media Timestamps</strong><span>Audio and video citations point to HH:MM:SS, not just "somewhere in the file".</span></li>
<li><strong>Reuse Built In</strong><span>Export Markdown for reading or Anki TSV for memorising β€” straight from the same cited note.</span></li>
</ul>
<h2>Quickstart</h2>
<p class="section-note">Python 3.9+, works offline.</p>
<pre><code>git clone https://github.com/lynote-ai/lynote-notes.git
cd lynote-notes
pip install -e .
lynote-notes add lecture.md
lynote-notes add https://example.com/post
lynote-notes note --title "Weekly reading"
lynote-notes ask "What did we decide about pricing?"
lynote-notes export --note note_xxx --format anki --out cards.tsv</code></pre>
<h2>How It Works</h2>
<p class="section-note">Five small stages, one traceable pipeline.</p>
<ol class="steps">
<li><em>Step 1</em><strong>Ingest</strong><span>Text/Markdown, web pages, PDF, DOCX, YouTube captions, audio and video β€” optional backends stay behind extras.</span></li>
<li><em>Step 2</em><strong>Chunk</strong><span>Paragraph-aware splitting with overlap; media keeps timestamps.</span></li>
<li><em>Step 3</em><strong>Note</strong><span>A provider drafts sections from chunks; the core resolves every bullet to a real citation.</span></li>
<li><em>Step 4</em><strong>Ask</strong><span>BM25-lite retrieval finds the evidence; answers cite the chunks they came from.</span></li>
<li><em>Step 5</em><strong>Export</strong><span>Markdown for reading, Anki TSV for memorising.</span></li>
</ol>
<h2>Limitations</h2>
<ul class="grid">
<li><strong>Extractive Default</strong><span>The default provider selects and organises sentences from your sources rather than rewriting them. Use an LLM provider for more fluent notes.</span></li>
<li><strong>Lexical Retrieval</strong><span>BM25 matches words, not meanings. Paraphrased questions can miss relevant passages; embeddings are on the roadmap.</span></li>
<li><strong>Transcription Quality</strong><span>Depends on the ASR model size and audio quality β€” check important details against the source.</span></li>
<li><strong>No Live Capture</strong><span>No meeting bots by design: export the recording and upload it.</span></li>
</ul>
<h2>FAQ</h2>
<details>
<summary>How is this related to Lynote AI Notes?</summary>
<p>This Space presents the open-source core (MIT, on GitHub). Lynote AI Notes is the hosted product at lynote.ai/ai-notes, which adds a workspace UI, more formats and managed AI. The CLI and library here work standalone.</p>
</details>
<details>
<summary>Do I need an API key?</summary>
<p>No. The default extractive provider runs offline. An OpenAI-compatible endpoint is optional for generative notes.</p>
</details>
<details>
<summary>Does it work with Chinese content?</summary>
<p>Yes β€” tokenization and sentence splitting are bilingual by design, and notes can be generated from mixed-language workspaces.</p>
</details>
<details>
<summary>How do I verify a citation?</summary>
<p>Every citation names the source, a locator ("chunk 4" or "00:12:30") and a snippet. Open the source at that locator and compare β€” that is the point of the design.</p>
</details>
<p class="note">
This Space is a static demo page for the open-source project. The interactive Gradio demo
(paste text β†’ cited note β†’ ask questions) is kept ready in this repository and will be
enabled once the account has PRO hosting. Full product:
<a href="https://lynote.ai/ai-notes" style="color:var(--accent)">lynote.ai/ai-notes</a>.
AI notes can miss context or nuance β€” always check important details against the cited source.
</p>
</div>
</body>
</html>