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
6 changes: 1 addition & 5 deletions backend/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,11 +225,7 @@ def delete_note(notes_dir: str, note_path: str) -> bool:

full_path.unlink()

# Remove empty parent directories
try:
full_path.parent.rmdir()
except OSError:
pass # Directory not empty, that's fine
# Note: We don't automatically delete empty folders to preserve user's folder structure

return True

Expand Down
65 changes: 58 additions & 7 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
<!-- Primary Meta Tags -->
<title>NoteDiscovery - Your Self-Hosted Knowledge Base</title>
<meta name="title" content="NoteDiscovery - Your Self-Hosted Knowledge Base">
<meta name="description" content="A lightweight, privacy-focused note-taking application. Self-hosted, free, and open source. Write, organize, and discover your notes with markdown support.">
<meta name="keywords" content="note taking, markdown editor, self-hosted, knowledge base, open source, privacy, notes app, docker, second brain, obsidian alternative">
<meta name="description" content="A lightweight, privacy-focused Markdown note-taking application with LaTeX math, Mermaid diagrams, and code highlighting. Self-hosted, free, and open source.">
<meta name="keywords" content="note taking, markdown editor, self-hosted, knowledge base, open source, privacy, notes app, docker, second brain, obsidian alternative, notion, evernote, onenote, latex, mermaid, diagrams, math equations">
<meta name="author" content="Gamosoft">
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://www.notediscovery.com">
Expand All @@ -17,7 +17,7 @@
<meta property="og:type" content="website">
<meta property="og:url" content="https://www.notediscovery.com">
<meta property="og:title" content="NoteDiscovery - Your Self-Hosted Knowledge Base">
<meta property="og:description" content="A lightweight, privacy-focused note-taking application. Self-hosted, free, and open source.">
<meta property="og:description" content="A lightweight, privacy-focused Markdown note-taking application with LaTeX math, Mermaid diagrams, and code highlighting. Self-hosted, free, and open source.">
<meta property="og:image" content="https://www.notediscovery.com/og-image.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
Expand All @@ -28,7 +28,7 @@
<meta name="twitter:site" content="@gamosoft">
<meta name="twitter:creator" content="@gamosoft">
<meta name="twitter:title" content="NoteDiscovery - Your Self-Hosted Knowledge Base">
<meta name="twitter:description" content="A lightweight, privacy-focused note-taking application. Self-hosted, free, and open source.">
<meta name="twitter:description" content="A lightweight, privacy-focused note-taking application with LaTeX math, Mermaid diagrams, and code highlighting. Self-hosted, free, and open source.">
<meta name="twitter:image" content="https://www.notediscovery.com/og-image.png">
<meta name="twitter:image:alt" content="NoteDiscovery - Self-hosted note-taking application interface">

Expand Down Expand Up @@ -509,7 +509,7 @@ <h1>NoteDiscovery</h1>
<div class="hero">
<div class="hero-content">
<h2>Take Control of Your Notes</h2>
<p>A lightweight, privacy-focused note-taking application that puts you in complete control of your knowledge base. Write, organize, and discover your notes with a beautiful, modern interface—all running on your own server.</p>
<p>A lightweight, privacy-focused note-taking application with powerful features: LaTeX math equations, Mermaid diagrams, code highlighting, and more. Write, organize, and discover your notes with a beautiful, modern interface—all running on your own server.</p>
<a href="https://github.com/gamosoft/NoteDiscovery" class="cta-button">Get Started on GitHub →</a>
</div>
</div>
Expand Down Expand Up @@ -550,6 +550,24 @@ <h3>Lightning Fast</h3>
<p>Instant search and navigation. Works offline, always responsive.</p>
</div>

<div class="feature">
<div class="feature-icon">🧮</div>
<h3>LaTeX Math</h3>
<p>Beautiful equation rendering with MathJax. Perfect for scientific notes.</p>
</div>

<div class="feature">
<div class="feature-icon">📊</div>
<h3>Diagrams</h3>
<p>Create flowcharts, mind maps, and diagrams with Mermaid syntax.</p>
</div>

<div class="feature">
<div class="feature-icon">💻</div>
<h3>Code Highlighting</h3>
<p>Syntax highlighting for popular coding languages. Developer-friendly notes.</p>
</div>

<div class="feature">
<div class="feature-icon">📂</div>
<h3>Simple Storage</h3>
Expand All @@ -559,7 +577,7 @@ <h3>Simple Storage</h3>
<div class="feature">
<div class="feature-icon">🎨</div>
<h3>Beautiful Themes</h3>
<p>Multiple built-in themes with full customization support.</p>
<p>8 built-in themes with dark/light modes and full customization.</p>
</div>

<div class="feature">
Expand Down Expand Up @@ -619,6 +637,38 @@ <h2>Why Choose NoteDiscovery?</h2>
You own your data
</div>
</div>

<div class="benefit-item">
<span class="emoji">🔗</span>
<div class="text">
<strong>Wiki Links</strong>
Connect notes with internal links
</div>
</div>

<div class="benefit-item">
<span class="emoji">📄</span>
<div class="text">
<strong>HTML Export</strong>
Share standalone HTML files
</div>
</div>

<div class="benefit-item">
<span class="emoji">⌨️</span>
<div class="text">
<strong>Keyboard Shortcuts</strong>
Navigate and create with speed
</div>
</div>

<div class="benefit-item">
<span class="emoji">🔐</span>
<div class="text">
<strong>Optional Auth</strong>
Password protection when needed
</div>
</div>
</div>
</div>

Expand Down Expand Up @@ -671,10 +721,11 @@ <h2>Ready to Get Started?</h2>
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "NoteDiscovery",
"description": "A lightweight, privacy-focused note-taking application. Self-hosted, free, and open source.",
"description": "A lightweight, Obsidian and Evernote alternative, privacy-focused Markdown note-taking application with LaTeX math, Mermaid diagrams, and code highlighting. Self-hosted, free, and open source.",
"url": "https://www.notediscovery.com",
"applicationCategory": "ProductivityApplication",
"operatingSystem": "Linux, Windows, macOS",
"featureList": "Markdown editor, LaTeX math equations, Mermaid diagrams, Code syntax highlighting, Dark mode, Plugin system, Internal wiki links, HTML export, Full-text search, Self-hosted, Obsidian, Evernote, Notion, Onenote, Second brain",
"offers": {
"@type": "Offer",
"price": "0",
Expand Down
18 changes: 10 additions & 8 deletions frontend/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -734,8 +734,9 @@ function noteApp() {
const notePath = this.draggedNoteForLink;
const noteName = notePath.split('/').pop().replace('.md', '');

// Create markdown link
const link = `[${noteName}](${notePath})`;
// Create markdown link (URL-encode the path to handle spaces and special characters)
const encodedPath = notePath.split('/').map(segment => encodeURIComponent(segment)).join('/');
const link = `[${noteName}](${encodedPath})`;

// Insert at cursor position
const textarea = event.target;
Expand Down Expand Up @@ -775,7 +776,8 @@ function noteApp() {
event.preventDefault();

// Remove any anchor from the href (e.g., "note.md#section" -> "note.md")
const notePath = href.split('#')[0];
// Also decode URL encoding (e.g., "note%203.md" -> "note 3.md")
const notePath = decodeURIComponent(href.split('#')[0]);

// Skip if it's just an anchor link
if (!notePath) return;
Expand Down Expand Up @@ -2424,11 +2426,11 @@ function noteApp() {
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>${noteName}</title>

<!-- Highlight.js for code syntax highlighting -->
<!-- Highlight.js for code syntax highlighting (v11.9.0) -->
${highlightTheme ? `<link rel="stylesheet" href="${highlightTheme}">` : '<!-- No highlight.js theme detected -->'}
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>

<!-- MathJax for LaTeX math rendering (same config as preview) -->
<!-- MathJax for LaTeX math rendering (v3.2.2) -->
<script>
MathJax = {
tex: {
Expand All @@ -2452,11 +2454,11 @@ function noteApp() {
}
};
</script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/tex-mml-chtml.js"></script>

<!-- Mermaid.js for diagrams (if used in note) -->
<!-- Mermaid.js for diagrams (v10.9.0) -->
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.9.0/dist/mermaid.esm.min.mjs';
const isDark = ${this.getThemeType() === 'dark'};
mermaid.initialize({
startOnLoad: false,
Expand Down
20 changes: 10 additions & 10 deletions frontend/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
<link rel="icon" type="image/png" sizes="16x16" href="/static/favicon.svg">
<link rel="apple-touch-icon" href="/static/logo.svg">

<!-- Tailwind CSS from CDN -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- Tailwind CSS from CDN (v3.4.17) -->
<script src="https://cdn.tailwindcss.com/3.4.17"></script>

<!-- Alpine.js -->
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
<!-- Alpine.js (v3.14.1) -->
<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.14.1/dist/cdn.min.js"></script>

<!-- Marked.js for Markdown parsing -->
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<!-- Marked.js for Markdown parsing (v12.0.2) -->
<script src="https://cdn.jsdelivr.net/npm/marked@12.0.2/marked.min.js"></script>

<!-- MathJax for LaTeX math rendering -->
<script>
Expand All @@ -39,9 +39,9 @@
}
};
</script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/tex-mml-chtml.js"></script>

<!-- Highlight.js for code syntax highlighting -->
<!-- Highlight.js for code syntax highlighting (v11.9.0) -->
<link rel="stylesheet" id="highlight-theme" href="">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/csharp.min.js"></script>
Expand All @@ -57,9 +57,9 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/css.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/http.min.js"></script>

<!-- Mermaid.js for diagram rendering -->
<!-- Mermaid.js for diagram rendering (v10.9.0) -->
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.9.0/dist/mermaid.esm.min.mjs';
// Note: Mermaid is initialized dynamically by app.js renderMermaid() based on current theme
window.mermaid = mermaid;
</script>
Expand Down