Skip to content
/ jot Public

An open-source, lightweight, AI-enriched notepad that can listen and understand, built for meetings and study.

License

Notifications You must be signed in to change notification settings

h0ds/jot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

59 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Jot

An open-source, privacy-first AI meeting notepad for macOS

Keep your meeting transcripts local with AI-powered summaries. No account required.

Why Jot? Unlike cloud-based tools, Jot runs Whisper transcription locally on your Mac. No account required, no subscriptions, no data leaving your machine (except optional AI summaries).

Features

  • Apple Notes-Inspired UI - Clean, minimal interface with sidebar navigation and rich text editing
  • Live Transcription - Real-time speech-to-text during meetings using Whisper AI (runs locally, no cloud required)
  • Chat with Note - Ask questions about your notes or request AI to add/modify content
  • Privacy-First - All transcription happens on your Mac, no account/signup needed, SQLite database you control
  • Dual Audio Recording - Capture both system audio and microphone simultaneously via macOS ScreenCaptureKit
  • AI Summaries - Generate intelligent meeting summaries with 8 contextual prompts (action items, key decisions, Q&A, etc.)
  • Multi-Color Highlights - Organize your notes with 6 highlight colors (yellow, orange, pink, purple, green, blue)
  • Apple Notes Import - Drag notes from Apple Notes to Finder, then import .txt/.md/.html/.rtf files
  • Audio Playback - Optional embedded player to review meeting audio
  • Keyboard Shortcuts - Cmd+N (new note), Cmd+Backspace (delete), Cmd+R (toggle recording)
  • Open Source - MIT licensed, audit the code, contribute features, self-host if you want

Tech Stack

  • Frontend: React 19 + TypeScript + Vite 7 + Tailwind v4
  • Editor: Tiptap v3 (rich text with tables, lists, highlights)
  • Backend: Tauri v2 (Rust 1.93) with macOS ScreenCaptureKit
  • Database: SQLite via tauri-plugin-sql
  • Transcription: Whisper (whisper-rs, runs locally)
  • AI: Multi-provider support (OpenAI, Anthropic, DeepSeek, Moonshot)
  • State: Zustand

Installation

Requirements

  • macOS 10.15+ (Catalina or later)
  • Node.js 22.x (for development)
  • CMake (for building Whisper)
    brew install cmake
    
  • Rust 1.93+ (for Tauri)
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    
  • pnpm (package manager)
    npm install -g pnpm
    

Development Setup

# Clone the repository
git clone https://github.com/yourusername/jot.git
cd jot

# Install Node 22 (using nvm)
nvm install 22
nvm use 22

# Install dependencies
pnpm install

# Start dev server
./dev.sh
# Or manually:
export MACOSX_DEPLOYMENT_TARGET=10.15
pnpm tauri dev

Production Build

export MACOSX_DEPLOYMENT_TARGET=10.15
pnpm tauri build

Note: Production builds currently have issues with whisper-rs CMake linking. Use GitHub Actions for releases or run in dev mode.

Usage

First-Time Setup

  1. Grant Screen Recording Permission

    • System Settings > Privacy & Security > Screen Recording
    • Enable "Jot"
    • Restart the app
  2. Download Whisper Model

    • Click Settings (βš™οΈ) in sidebar
    • Select a model (Tiny = 74 MB, Base = 142 MB, Small = 466 MB)
    • Click "Download Model"
    • Wait for download to complete
  3. Add AI API Key (for summaries and chat)

Recording a Meeting

  1. Click Record button (or press Cmd+R)
  2. Choose audio sources:
    • System Audio - Capture speakers (Zoom, Meet, etc.)
    • Microphone - Capture your voice
  3. Speak normally - live transcription appears every 15 seconds
  4. Click Stop to end recording
  5. (Optional) Click Summarize for AI-generated summary

Importing from Apple Notes

  1. In Apple Notes, select a note
  2. File > Export as Plain Text... (or drag to Finder)
  3. In Jot, click Upload (πŸ“€) icon in sidebar
  4. Select .txt/.md/.html/.rtf files (batch supported)
  5. Notes appear in "Imported" group

Keyboard Shortcuts

Shortcut Action
Cmd+N Create new note
Cmd+Backspace Delete current note
Cmd+R Toggle recording (start/stop)
Cmd+B Bold
Cmd+I Italic
Cmd+U Underline

File Locations

  • Database: ~/Library/Application Support/com.jot.app/jot.db
  • Whisper Models: ~/Library/Application Support/com.jot.app/models/
  • Audio Recordings: ~/Library/Application Support/com.jot.app/recordings/ (if "Keep Audio" enabled)

AI Providers

Jot supports multiple AI providers for summaries and chat. Choose your preferred provider in Settings:

  • OpenAI - GPT-5.2, GPT-5-mini (default), GPT-5-nano
  • Anthropic - Claude 4.6 Opus, Claude 4.5 Sonnet (default), Claude 4.5 Haiku
  • DeepSeek - DeepSeek Chat (default), DeepSeek Reasoner
  • Moonshot - Kimi k2.5

Your API key is stored locally in SQLite and only sent to your chosen provider. No data is shared with other providers.

Getting API Keys

Switching Providers

  1. Open Settings (βš™οΈ in sidebar)
  2. Click your preferred provider logo (OpenAI / Anthropic / DeepSeek / Moonshot)
  3. Enter your API key for that provider
  4. Use "Summarize" or "Chat with Note" - requests go to your selected provider

Troubleshooting

"Model not downloaded" error

  • Go to Settings > Download Model
  • Wait for download to complete (progress shown in button)
  • Model file should appear in ~/Library/Application Support/com.jot.app/models/

Recording fails with permission error

  • Grant Screen Recording permission in System Settings
  • Restart Jot after granting permission
  • Click "Open Settings" button in error message for quick access

Live transcription not working

  • Check that Whisper model is downloaded
  • Ensure you're speaking loud enough (test with system voice memo)
  • Try switching to a larger model (Base or Small) for better accuracy

Build fails with CMake errors

  • Ensure CMake is installed: brew install cmake
  • Set deployment target: export MACOSX_DEPLOYMENT_TARGET=10.15
  • Clean build: cd src-tauri && cargo clean

Development

Project Structure

jot/
β”œβ”€β”€ src/                        # React frontend
β”‚   β”œβ”€β”€ components/             # UI components (Sidebar, Editor, Settings, etc.)
β”‚   β”œβ”€β”€ store/                  # Zustand stores (notes, recording, settings)
β”‚   β”œβ”€β”€ lib/
β”‚   β”‚   └── ai/                 # Multi-provider AI integration
β”‚   β”‚       β”œβ”€β”€ types.ts        # Shared AI types
β”‚   β”‚       β”œβ”€β”€ providers.ts    # Provider registry (OpenAI, Anthropic, DeepSeek)
β”‚   β”‚       β”œβ”€β”€ client.ts       # Universal API client
β”‚   β”‚       β”œβ”€β”€ summarize.ts    # Meeting summarization
β”‚   β”‚       └── chat.ts         # Chat with note
β”‚   └── index.css               # Design system (CSS variables)
β”œβ”€β”€ src-tauri/                  # Rust backend
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ audio.rs            # ScreenCaptureKit audio recording
β”‚   β”‚   β”œβ”€β”€ transcribe.rs       # Whisper model download & transcription
β”‚   β”‚   β”œβ”€β”€ live_transcribe.rs  # Live chunked transcription
β”‚   β”‚   └── lib.rs              # Tauri commands
β”‚   └── tauri.conf.json         # Tauri configuration
└── package.json                # Frontend dependencies

Design System

  • Primary Color: Orange (#FD3200) at 4-12% opacity for backgrounds, solid for CTAs
  • Typography: Native macOS fonts (-apple-system, SF Pro Text)
  • Spacing: Generous whitespace, 6-10px border radius
  • Aesthetic: Apple Notes-inspired (clean, minimal, professional)

Code Style

  • TypeScript: Strict mode enabled
  • Components: Functional components with hooks
  • State: Zustand stores (separate concerns)
  • Memoization: useMemo/memo for performance
  • Lazy Loading: Settings, RecordingOptions, ImportModal

Bundle Size

  • Frontend: 676 kB (214 kB gzipped)
  • Lazy-loaded: Settings (2.43 kB), RecordingOptions (1.06 kB)
  • Zero TypeScript/ESLint warnings

Testing

# TypeScript check
pnpm tsc --noEmit

# Lint
pnpm lint

# Build frontend
pnpm build

# Rust check
cd src-tauri && cargo check

Roadmap

  • Chat with note (AI Q&A about meeting content)
  • Multi-provider AI support (OpenAI, Anthropic, DeepSeek)
  • Custom meeting templates (1-on-1s, user interviews, etc.)
  • Export to Markdown/PDF
  • HTML import parsing (preserve rich formatting)
  • Drag & drop file import
  • Full-text search with highlighting
  • Light/dark mode toggle
  • Windows/Linux support (requires alternative to ScreenCaptureKit)
  • iOS app for phone calls
  • AppleScript integration for direct Notes.app access

Contributing

Contributions welcome! Please:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feat/my-feature)
  3. Commit changes with descriptive messages
  4. Push to your fork and submit a pull request

License

MIT License - see LICENSE for details

Acknowledgments

Support


Made with ❀️ for productive meetings

About

An open-source, lightweight, AI-enriched notepad that can listen and understand, built for meetings and study.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published