Skip to content

🔍 Notesify v1.3.1 — Interactive Diff Viewer & Cross-Tab Sync

Choose a tag to compare

@badalsahani20 badalsahani20 released this 16 Oct 15:59
· 18 commits to main since this release

⚡ Overview

Notesify v1.3.1 introduces an intelligent, Git-style diffing experience for conflict resolution, fixes local draft caching during concurrent edits, and enables instant cross-tab editor synchronization across browser sessions.

When edits clash across tabs, Notesify isolates only the changed sentences—no more scanning thousands of unchanged words side-by-side. You can now resolve conflicts with confidence and see updates propagate in real-time.


✨ What's New

1. 🔍 Interactive Note Diff Viewer (NoteDiffViewer)

  • Smart Hunk Grouping: Automatically isolates changed sentences while keeping 3 lines of context above and below.
  • Unchanged Context Folding: Hides large chunks of identical text behind an interactive accordion pill (↕ Expand 24 unchanged lines) with a 1-click "Toggle Unchanged Lines" switch.
  • Unified & Split View Toggle:
    • Unified Diff: Clean single-column stream showing added lines in green (+) and removed lines in red (-).
    • Split Diff: Side-by-side synchronized comparison columns with independent line numbers.
  • Title Diff Detection: Clear visual indication when note titles differ between versions.

2. 🛡️ Frozen Conflict Draft Snapshots

  • When an Optimistic Concurrency Control (409 Conflict) triggers, Notesify captures a frozen snapshot of your draft (conflict.localDraft).
  • Clicking "Keep Mine (Rebase)" now guarantees your exact local draft is rebased onto the server, preventing subsequent autosaves from contaminating the chosen resolution.

3. 🌐 Authoritative Online Reload Revalidation

  • Fixed an offline-first caching edge case where refreshing a tab could perpetually serve stale local Dexie data.
  • Notesify now verifies if there are pending un-synced offline edits; if none exist, reloading a note fetches the authoritative cloud version and updates local IndexedDB storage.

4. 📻 Live Cross-Tab Synchronization

  • Conflict resolutions now broadcast in real time across browser tabs via BroadcastChannel("notesify_conflicts").
  • When you resolve a conflict in Tab A, Tab B’s TipTap editor automatically updates to the resolved text immediately without needing a manual refresh.

🧪 How to Test

  • Diff Viewer: Edit a note in two tabs simultaneously. Force a conflict (e.g., close one tab aggressively or simulate network lag) to trigger the diff viewer.
  • Cross-Tab Sync: Resolve a conflict in Tab A → Watch Tab B update instantly without refreshing.

🛠️ Technical Details & Commits

  • NoteDiffViewer.tsx: Lightweight diffing engine powered by diffLines with custom hunk boundary detection.
  • ConflictResolutionService.ts: Preserves local draft objects at conflict time and emits { entityId, resolution, note } payloads over custom events and BroadcastChannel.
  • HybridNoteRepository.ts: Enhanced getNote(noteId) with offline-guard heuristic: protects local draft if offline or queued operations exist, otherwise revalidates against remote API.
  • TipTap.tsx: Registered live resolution listener to update editor document nodes safely with { emitUpdate: false }.

📦 Desktop Asset

  • Windows Installer: Notesify.Setup.1.3.1.exe (~133.17 MB)