This document summarizes the features from the original Laverna project that have been added to Notevo.
-
tags- Separate tag entity for better management (Laverna feature)- Fields: id, user_id, name, color, created_at, updated_at
- Unique constraint on (user_id, name)
-
user_settings- User preferences and configurations (Laverna configs feature)- Fields: theme, editor_mode, enable_mathjax, enable_syntax_highlighting, font_size, auto_save, keybindings_preset, language
- One settings record per user
- Added
pinnedboolean field for pinning important notes
- GIN index on
notes.tagsfor fast tag searching - Indexes on
tags.user_idandtags.name - Index on
user_settings.user_id
- Full RLS policies for
tagsanduser_settingstables - Auto-update triggers for all new tables
Added TypeScript interfaces:
Tag- Tag entity with color supportUserSettings- Complete user preferences including:- Theme selection (light/dark/system)
- Editor modes (normal/preview/distraction_free)
- MathJax toggle
- Syntax highlighting toggle
- Font size configuration
- Auto-save preference
- Keybindings preset (default/vim/emacs)
- Language selection
ExportData- Structure for import/export operations
Full ZIP-based backup and restore functionality (Laverna feature):
Functions:
exportAllData()- Export all notes, notebooks, tags, and settings to ZIPimportFromZip()- Import data from ZIP backup fileexportNotes()- Export selected notes onlyvalidateExportData()- Validate export structure
Features:
- Exports notes as both JSON (metadata) and Markdown (content)
- Includes manifest with version and export date
- Error handling with detailed error messages
- Compatible with Laverna's export format structure
Customizable keyboard shortcuts (Laverna feature):
Presets:
- Default - Standard shortcuts (Ctrl+N, Ctrl+S, etc.)
- Vim - Vim-style keybindings
- Emacs - Emacs-style keybindings
Supported Actions:
- New note, Save note, Delete note
- Toggle preview, Distraction-free mode
- Search, Toggle sidebar
- Formatting: Bold, Italic, Link, Quote
- Lists: Unordered, Ordered
- Headings: H1, H2, H3
Functions:
getKeybindingsForPreset()- Get keybindings by preseteventMatchesKeybinding()- Check if event matches keybindingformatKeybinding()- Format keybinding for display (e.g., "Ctrl+S")registerGlobalKeybindings()- Register global keyboard handlersgetAvailableActions()- List all available actions
Enhanced markdown processing (Laverna features):
Task/Todo Lists:
toggleTaskItem()- Toggle checkbox stateparseTaskItems()- Extract all tasks from contentgetTaskStats()- Get completion statistics
Code Blocks & Syntax Highlighting:
ensureCodeBlockLanguage()- Add default language to code blocksextractCodeBlocks()- Extract all code blocks with languages
MathJax Support:
hasMathExpressions()- Detect LaTeX/math in contentextractMathExpressions()- Extract all math expressions
Editor Utilities:
insertFormatting()- Insert formatting at cursorapplyHeading()- Apply heading levelscountWords()- Word count (excluding code)estimateReadingTime()- Reading time estimate
Execute the updated migration file in your Supabase dashboard:
-- Run the contents of supabase/migrations/0001_init.sqlOr using Supabase CLI:
supabase db pushThe import/export system requires additional packages:
npm install jszip file-saver
npm install -D @types/file-saverAdd to dependencies:
{
"dependencies": {
"jszip": "^3.x",
"file-saver": "^2.x"
}
}-
Settings Page (
/dashboard/settings)- Tabbed interface for different settings categories
- Theme selector
- Editor mode selector
- Keybindings preset selector
- Language selector
- Font size slider
-
Import/Export UI
- Export button in settings or sidebar
- Import dialog with file picker
- Progress indicator
- Error/success messages
-
Tag Management
- Tag list view
- Tag color picker
- Tag filtering in notes list
- Tag autocomplete in note editor
-
Keyboard Shortcuts Help
- Modal showing all shortcuts
- Customizable keybindings UI
- Preset selector
-
Editor Toolbar Enhancements
- Task list checkbox button
- MathJax toggle
- Syntax highlighting toggle
- Heading level selector
-
Distraction-Free Mode
- Full-screen editor
- Hide sidebar and other UI elements
- Escape key to exit
-
Tags CRUD
- Create, read, update, delete tags
- Link tags to notes
- Get tags by user
-
User Settings CRUD
- Get user settings
- Update user settings
- Initialize default settings on signup
-
Import/Export Server Actions
- Handle bulk note import
- Handle bulk note export
- Conflict resolution
| Feature | Original Laverna | Notevo (Before) | Notevo (After) |
|---|---|---|---|
| Markdown Editor | β | β | β |
| Client-side Encryption | β | β | β |
| Tags (separate) | β | β | β |
| User Settings | β | β | β |
| Import/Export (ZIP) | β | β | β |
| Keyboard Shortcuts | β | β | β |
| Task Lists | β | β | β (utils) |
| MathJax | β | β | β (utils) |
| Syntax Highlighting | β | β | β (utils) |
| Distraction-Free | β | β | β³ (ready) |
| Multiple Edit Modes | β | ||
| Dropbox Sync | β | β | β (N/A - Supabase) |
| RemoteStorage | β | β | β (N/A - Supabase) |
| Desktop App | β | β | β (future) |
| Mobile App | β | β | β (future) |
β
= Implemented
- Some Laverna features (Dropbox/RemoteStorage sync) are not needed due to Supabase backend
- Desktop and mobile apps can be future enhancements
- The modular architecture of Laverna was replaced with a more modern Next.js structure
- All security features from the original review have been maintained and enhanced