Skip to content

mcfetz/snipsel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

544 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📓 Snipsel

Your personal, self-hosted, AI-powered notes & tasks app — mobile-first, beautifully simple.

Snipsel is an open-source PWA for capturing ideas, notes, tasks, bookmarks, and media — all in one place. Enhanced with a user-configurable AI assistant, it helps you manage your knowledge without cloud lock-in. Runs on your own server in minutes.

calendar view   tasks view   collections list   tags and mentions view

list recently viewed collections   notifications view   settings   daily collection with mentions from another user

toolbar for editing a snipsel   ai assistent for manipulating a snipsel   snipsel settings page with metadata informations   snipsel with markdown formatted content

search results   collection share permissions   card views for images, file attachments, links, youtube links...


✨ Why Snipsel?

Most note apps are either too simple (just plain text) or too heavy (Notion, Obsidian). Snipsel hits the sweet spot: structured collections, multiple content types, sharing, reminders — yet still feels as lightweight and instant as a sticky note.


🚀 Features

📋 Collections & Snipsels

Organize everything in collections — from grocery lists to project notes. Each item inside is a snipsel, which can be one of six types:

  • 📝 Text — plain notes with Markdown support
  • Task — checkable to-dos with done tracking
  • 🔗 External link — save URLs with labels
  • 📎 Internal link — reference another snipsel
  • 🖼️ Image — attach and view photos
  • 📁 File attachment — store any file

Smart Selection Features:

  • Multi-Select — Click the selection bar on the right to select multiple snipsels
  • Range Selection — Hold Shift (desktop) or long-press (mobile) to select all snipsels between two items
  • Auto-Select Children — Selecting a parent snipsel with collapsed children automatically selects all nested items
  • Keyboard Shortcuts — Extensive keyboard shortcuts for navigation, editing, and bulk operations (see User Documentation)

🤖 AI Assistant (Vision-ready)

Process your notes with a built-in AI assistant. Configure your own OpenAI-compatible endpoint (OpenAI, Groq, Ollama) and use it to summarize, translate, or transform snipsels with custom prompts. Supports vision models for image analysis and text extraction from attachments.

📅 Daily Journal

A built-in daily collection auto-created for each day. Open tasks from the past 30 days are automatically carried over so nothing falls through the cracks.

🔒 Security-first

  • Passkeys (WebAuthn / FIDO2) — log in with Face ID, Touch ID, or a hardware key
  • TOTP 2FA — standard authenticator app support
  • Passcode lock — protect individual collections with a PIN
  • Password reset via email
  • Registration toggle — disable new user registration via environment variable

🎨 Beautiful & Adaptive UI

  • Light, dark, or system-adaptive theme
  • Custom accent color per collection
  • Cover images for collections
  • Installable as a PWA on any device

🗺️ Geo Location

Capture and view snipsels with geographic coordinates. See your notes on an interactive map in the Tags/Mentions view, filter by location, and track where your ideas were born. Perfect for travel journals, field notes, or location-based task management.

📥 Import from Twos

Coming from Twos? Snipsel can import all your lists, tasks, photos, and reminders with a single click — including recurrence rules.


🐳 Quick Start (Docker)

docker run -d \
  --name snipsel \
  -p 5000:5000 \
  -v ./data:/app/data \
  -v ./uploads:/app/uploads \
  -e SNIPSEL_SECRET_KEY="your-secure-secret-key" \
  -e SNIPSEL_DOMAIN="yourdomain.com" \
  -e SNIPSEL_FRONTEND_URL="https://yourdomain.com" \
  -e SNIPSEL_REGISTRATION_ENABLED=1 \
  ghcr.io/mcfetz/snipsel:latest

That's it. Snipsel runs as a single container — no separate database server, no Redis, no complex setup.

Or with Docker Compose:

# Build the image
docker build -t snipsel .

# Run with compose
docker compose up -d

Note: SNIPSEL_DOMAIN and SNIPSEL_FRONTEND_URL are required for Passkey authentication to work correctly.


🔧 Development

Backend (Flask + SQLite)

Dependencies

  • FFmpeg: Required for generating video thumbnails. Install it via your package manager (e.g., brew install ffmpeg on macOS or sudo apt install ffmpeg on Linux).
cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pip install -e .

export SNIPSEL_SECRET_KEY="dev"
flask --app snipsel_api.app run --debug --port 5000

# Run database migrations
flask --app snipsel_api.app db upgrade

Frontend (Svelte + Vite)

cd frontend
npm install
npm run dev

The frontend proxies /api/* to the backend in dev mode.


⚙️ Configuration

Variable Default Description
SNIPSEL_SECRET_KEY dev Session secret — change in production!
SNIPSEL_DATABASE_URL sqlite:///snipsel.db Database URL
SNIPSEL_UPLOAD_DIR ./uploads Directory for uploaded files
SNIPSEL_MAX_UPLOAD_BYTES 10485760 Max upload size (10 MB)
SNIPSEL_DOMAIN localhost Domain for Passkey auth
SNIPSEL_FRONTEND_URL http://localhost:5173 Frontend URL for CORS & Passkeys
SNIPSEL_REGISTRATION_ENABLED 1 Set to 0 to disable new user registration

Optional SMTP (password reset):

Variable Description
SNIPSEL_SMTP_HOST SMTP server host
SNIPSEL_SMTP_PORT SMTP port (default: 587)
SNIPSEL_SMTP_USERNAME SMTP username
SNIPSEL_SMTP_PASSWORD SMTP password
SNIPSEL_SMTP_USE_TLS Enable TLS (default: 1)
SNIPSEL_MAIL_FROM Sender address
SNIPSEL_PUBLIC_BASE_URL If set, emails include a reset link

Optional VAPID (push notifications):

Variable Description
VAPID_PUBLIC_KEY VAPID public key
VAPID_PRIVATE_KEY VAPID private key
VAPID_SUBJECT e.g. mailto:admin@yourdomain.com

🛠️ Tech Stack

  • Backend: Python · Flask · SQLAlchemy · SQLite · Flask-Migrate
  • Frontend: Svelte 5 · TypeScript · Vite · PWA (Service Worker)
  • Auth: Session cookies · WebAuthn (Passkeys) · TOTP · bcrypt
  • Deployment: Docker (multi-stage build) · single container (includes FFmpeg)

📄 License

MIT

About

Your personal, self-hosted notes & tasks app — mobile-first, beautifully simple.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors