Skip to content

jonducrou/note-taker

Repository files navigation

Note Taker - Minimalist Always-On-Top Notes App

A minimalist, text-driven note-taking application for Mac that stays always-on-top and focuses on quick note capture with actionable items and connections.

Current Status: Full-featured v1.6.2 with Monaco editor, smart autocomplete, syntax highlighting, system tray integration, comprehensive note organization, complete audience filtering, improved keyboard navigation, and dynamic note timestamps.

Features

🎯 Text-First Design

  • 95% text area with minimal UI chrome
  • Distraction-free writing environment
  • Always-on-top window (300x400px)

📝 Smart Note Format

  • Metadata: #group @person format for organization
  • Actions: [] (incomplete) → [x] (completed)
  • Connections: Subject -> Subject (incomplete) → Subject -x> Subject (completed)
  • Reverse Connections: Subject <- Subject (incomplete) → Subject <x- Subject (completed)

🎨 Syntax Highlighting

  • Colour-coded metadata, actions, and connections
  • Visual distinction between completed and incomplete items
  • Headers and markdown support

Interactive Features

  • Double-click to complete: Double-click on [] or -> to toggle completion
  • Smart autocomplete: Recent suggestions for #groups and @audience from last 2 weeks
  • Auto-save: Automatically saves and updates existing notes after 1 second
  • Tab indentation: Tab/Shift-Tab for bullet point indentation
  • Keyboard navigation: Option+Up (newer notes) and Option+Down (older notes) to navigate between notes
  • Navigation with actions: Option+Left (next with actions) and Option+Right (previous with actions)
  • Dynamic window title: Shows note creation date/time in format "Tue 26 Aug 14:31"
  • Delete current note: Right-click system tray → "Delete Current Note" with confirmation dialog

📊 Smart Organization

  • Open Notes: Shows notes with incomplete items from last month
  • Time-based sections: Today, Yesterday, Prior Week, Previous Week
  • Audience grouping: "With..." menu groups notes by person from last month
  • Comprehensive filtering: Shows all audience members with notes from last month
  • System tray: Right-click menu with completion counts and quick access
  • Local timezone: All date groupings use local time (not UTC)

File Structure

Notes are stored as markdown files in ~/Documents/Notes/ with:

  • Filename: YYYY-MM-DD_HHMMSS.md
  • Format: YAML frontmatter + markdown content
  • Metadata: Extracted from #group and @person tags

Example Note

---
date: '2025-08-26'
group: Product
audience: ["Sarah", "DevTeam"]
created_at: '2025-08-26T10:30:00Z'
updated_at: '2025-08-26T10:30:00Z'
---

#Product @Sarah @DevTeam

# Product Meeting Notes

## Actions
[] Follow up with engineering team on API changes
[x] Schedule review meeting for next week

## Connections
Sarah -> Security team for compliance discussion  
DevTeam <x- Product requirements delivered

## Key Points
- Discussed new feature requirements
- Identified potential blockers

Usage

Getting Started

  1. Download and install the DMG from releases
  2. Launch - appears as always-on-top window in bottom-right corner
  3. Start typing with text-first interface (auto-saves after 250ms)
  4. Use #group and @person tags for organization
  5. Add actions with [] and connections with Subject -> Subject

Navigation

  • System tray: Left-click show/hide, right-click for menu
  • Double-click: Complete [] actions and -> connections
  • Tab/Shift-Tab: Indent/outdent bullet points
  • Type # or @: Smart autocomplete from recent notes
  • Delete note: Right-click tray → "Delete Current Note" → confirm deletion

Menu Organization

  • Open Notes: Recent notes with incomplete items
  • Today/Yesterday/Prior Week: Time-based groupings
  • With...: Notes grouped by audience member (shows all notes from last month)
  • All sections show completion counts in parentheses

Development

# Run the app in development mode
./run.sh                # Quick start script
npm run dev            # Development with hot reload

# Build and package
npm run build          # Build for production
npm run dist          # Create distributable DMG

# Code quality
npm run typecheck     # TypeScript checking
npm run lint          # ESLint checking
npm test              # Run comprehensive test suite (52 tests)
npm run test:coverage # Full coverage report
npm run test:all      # Run all tests including integration

Architecture

  • Frontend: React + TypeScript + Monaco Editor
  • Backend: Electron main process with SVG-based tray icon
  • Storage: Local markdown files with abstracted interface
  • Testing: Jest with comprehensive unit test coverage (49.57% FileStorage coverage)
  • IPC: Electron IPC for file operations, search, and menu structure

Recent Updates (v1.6.2)

  • Improved Navigation UX: Changed shortcuts from Cmd+arrows to Option+arrows to avoid conflicts with text editing
  • Better Typing Experience: Cmd+Left/Right now work normally for cursor movement without triggering navigation
  • Enhanced Test Coverage: 52 comprehensive tests covering core functionality
  • Code Cleanup: Removed 827 lines of unused code in v1.6.1
  • Stable Release: All tests passing with improved user experience

Contributing

This project welcomes contributions! Please see the comprehensive test suite for examples of the expected code quality and coverage standards.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages