Skip to content

Changelog

All notable changes to Sojourn will be documented in this file.

[v0.5.0] - 2026-04-01

Added

Notes

  • Block-level drag handles — every block in the note editor (paragraphs, headings, lists, blockquotes, horizontal rules, code blocks, scripture embeds) now has a drag handle for reordering. On desktop, handles appear on hover; on touch devices, they're always visible.
  • Touch reorder action bar — tapping a drag handle on mobile opens a compact bottom toolbar with move up/down buttons, indent-into-list buttons (when adjacent to a list or sublist), and a close button. The selected block is highlighted with teal "grabbed" bars.
  • Indent into list — dedicated buttons in the touch action bar move a block into an adjacent list or sublist. Separate from move up/down which only swap siblings at the same level.
  • Grabbed block highlight — when reordering on mobile, the active block shows teal left+right accent bars with a subtle teal background wash, making it visually clear which block is being moved.

Memorization

  • Mobile typing improvements — persistent hidden input with dynamic positioning for stable mobile keyboard focus. First-letter mode shows red highlights on wrong answers and auto-scrolls on mobile.

Fixed

  • Fixed drag handle alignment inconsistency across block types — handles now vertically center with each block's first line using computed font metrics
  • Fixed drag-and-drop duplicating blocks instead of moving on desktop — bypassed ProseMirror's internal drag processing that interfered with widget-initiated drags
  • Fixed drop indicator bouncing erratically during drag — simplified to a single boundary-nearest strategy
  • Fixed list blocks nesting inside other lists when reordered — lists now swap as siblings instead of entering adjacent lists
  • Fixed keyboard drag cancel (Escape) undoing too many history entries — removed duplicate move count increment
  • Fixed blocks inside list items losing drag handles — plugin now recurses into list children
  • Fixed drop targets missing for top-level lists — boundaries now include list top/bottom edges
  • Fixed scripture block drop position misalignment on mobile
  • Fixed mobile scroll behavior for memorization first-letter mode

Changed

  • Extracted drag-and-drop infrastructure into reusable shared libraries (tiptapDragDrop.ts, DraggableBlock.ts, BlockHandlePlugin.ts, touchDrag.ts)
  • Replaced scripture-block-specific inline DragHandle.vue component with a unified ProseMirror plugin system
  • Configurable splash screen social media links

[v0.4.0] - 2026-03-23

Added

  • Reference detection in search — typing a Bible reference like "John 3:16" in the search bar automatically detects it and shows the passage directly instead of running a keyword search. Supports full citation syntax including verse ranges, comma-separated verses, and semicolon-separated multi-tab queries.
  • Semicolon multi-tab search — separate search queries with semicolons (e.g., "faith; John 3; hope") to open each as its own tab. Works in both the search bar and the command palette.
  • AI search throttling — client-side throttle with retry UI prevents overuse of premium AI search. Separate throttle bucket from standard search.
  • Hide search results — hide individual verses or AI passages from results. Toggle visibility with "Show hidden" button.
  • Unified result cards — search results, AI passages, and reference results now use a consistent card design.

Command Palette

  • Fluid Bible passage lookup — type a Bible reference (e.g., "John 3:16", "Jude 4") directly in the command palette to see a "Go to [reference]" command. Supports single-chapter books where bare numbers are verses (e.g., "Jude 4" → Jude 1:4).

Notes

  • Mobile bottom sheet for inline verses — inline scripture references now open in a native-feeling bottom sheet on mobile instead of a popover.
  • Inline verse expansion — expand inline verse references up or down to include adjacent verses, with a convert-to-passage option.

Memorization

  • Redesigned passage cards — memorization cards now show stat pills (mastery, stability, last reviewed) with tappable popovers for detailed information.

Other

  • Splash page redesign — new split layout with Daybreak/Terrain themes and social links.
  • Send Feedback button — added to user profile dropdown for quick access.
  • Mailcoach integration — email marketing integration.

Fixed

  • Fixed verse navigation using incorrect element detection and scroll offset calculation
  • Fixed iOS keyboard dismissal hiding the navbar permanently
  • Fixed search expand button showing on single-verse references
  • Fixed search scroll-to-verse after clicking a result
  • Fixed search logging duplicate entries for partial reloads and reference lookups
  • Fixed search AI result cache memory leak with FIFO eviction
  • Fixed search close button not always visible on inactive tabs
  • Fixed search double requests for bookmarked reference URLs
  • Fixed search active tab switching incorrectly when returning from another module
  • Fixed search showing keyword results briefly before reclassifying bookmarked reference URLs
  • Fixed AI search throttle sharing a bucket with standard search
  • Fixed command palette passage lookup defaulting to Genesis 1 when no read tabs exist
  • Fixed command palette search producing double-slash URLs from empty search page
  • Fixed PWA opening to splash screen instead of read page
  • Fixed wake-screen-lock showing incorrect status
  • Fixed Vue reactive component warning from activeDrill ref

Changed

  • Extracted scripture inline view logic into useScriptureInline composable for better testability
  • Extracted CSRF token logic to shared lib/csrf.ts
  • Extracted HiddenResultsToggle shared component for search
  • Extracted AI result cache to testable module
  • Decoupled reference cache from Inertia::always for better performance
  • Added composite index on search_logs(user_id, created_at) for analytics queries
  • Server-side reference detection for bookmark/direct URL loads
  • Simplified notes editor toolbar and removed floating mobile logic
  • Used nextTick for input focus after DOM updates in command palette

[v0.3.0] - 2026-03-18

Added

Bible Reading

  • Share passage — share selected verses via the Web Share API (or clipboard fallback). Share links encode the selected verses in the URL (e.g., ?verses=16-18) and highlight them when opened.
  • Adjustable font size — choose from 5 font size levels for both reading and notes. Available in Settings > Appearance and via the command palette.

Notes

  • Note view page — a read-only view of any note at /notes/{id} with expanded scripture blocks and "Read in context" links that navigate to the verse with highlighting.
  • Print notes — print any note directly from the view page or the note card overflow menu. Print-optimized CSS hides app chrome for a clean printout.

Fixed

  • Notification modal no longer overflows on smaller screens
  • Scripture block styling updated for visual consistency
  • stopVersesWatch temporal dead zone error resolved
  • Print CSS no longer clips content across page breaks
  • Empty fill-in-the-blank fields now display at a readable width in note view
  • Verse selection drawer buttons now have proper aria-label attributes for screen readers
  • Note editor title input now has an accessible label
  • "More actions" buttons in note view and editor now have aria-label attributes
  • "View notes" button on verse rows now has an aria-label
  • parseVersesParam now caps ranges at 200 to prevent browser freezing from crafted share URLs
  • Note bulk move now validates locked source journal keys before starting the transaction
  • MemorizeSpeechController now verifies the user has memorized passages before synthesizing audio
  • DocumentStatus::Live enum used consistently instead of string literals
  • Duplicate throttle middleware removed from memorize session route
  • NotionExportService handles empty context arrays without errors
  • Cleanup command renamed from imports:cleanup to note-scan:cleanup and now purges failed scans older than 7 days

Changed

  • Prayer controller constructor dependencies changed from public to private for proper encapsulation
  • Memorization FullWord component now starts timing from mount instead of script evaluation for more accurate duration tracking

[v0.2.0] - 2026-03-17

Added

Notes

  • Trash bin — deleted notes are now recoverable for 30 days. Restore, permanently delete, or empty the entire trash from the new Deleted Notes page. Notes in encrypted journals are permanently deleted immediately for security.
  • Smart verse paste — copy a verse from the reading view, then paste it into a note to automatically create a scripture reference link.
  • Verse expansion — inline scripture references now have buttons to expand the verse text or convert to a full passage block.
  • Auto-save on title blur — note titles now save automatically when you click away, so you never lose a title during creation.
  • Bible reference auto-detection — typing or pasting a Bible reference (e.g., "John 3:16") in the note editor automatically converts it to a clickable scripture link.

Note Scanning

  • Improved scan progress — each scanned image now shows its own real-time status (uploading, processing, completed, or failed) instead of a single progress bar.
  • Retry failed images — if an image fails to process, you can retry, replace it with a new image, or remove it — no need to restart the entire scan.
  • Reliable uploads — image uploads now persist across page navigations and continue in the background even if you close the browser (Chrome/Edge).
  • Scan status on note cards — notes with an active scan show a status badge on the journal list so you can see progress at a glance.
  • Scan notifications — receive an in-app notification when your scan completes.

Bible Reading

  • Mobile verse actions — verse action buttons are now grouped in a dropdown menu on mobile for a cleaner reading experience.
  • Better abbreviation support — Bible book abbreviations with periods (e.g., "1 Cor.") and Roman numerals (e.g., "II Kings") are now recognized throughout the app.

Notifications

  • Clear all — dismiss all notifications at once with a single button.
  • Announcement emails — email announcements now send notifications with a refreshed design.

General

  • Open documentation — quickly access the documentation from the command palette (Cmd+K).

Fixed

  • iPhone double-space-to-period no longer interferes with the note editor
  • Search results no longer populate the wrong tab in certain cases
  • Prayer journals with encrypted empty fields now display correctly
  • Push notification registration handles server errors gracefully
  • Note auto-save no longer retries after leaving the page
  • Scanned content can now be properly undone after insertion

Changed

  • Removed inconsistent dark mode implementation until it can be fully built
  • AI features upgraded to the latest model for improved accuracy and 6x's the speed.

Security

  • Session data is now encrypted by default for all users
  • Added rate limiting across the app to prevent abuse
  • Improved input sanitization in the note editor
  • Fixed authorization checks on several endpoints

[v0.1.0] - 2026-03-11 - Initial Release

Added

Bible Reading

  • Multi-tab Bible reading with URL-encoded tab state (/read/Gen/1/Rev/1)
  • Verse-by-verse and paragraph reading modes
  • Verse selection drawer with copy, memorize, and note actions
  • Speed reading (RSVP) with smart word timing, punctuation pauses, verse-level navigation, and contextual speed ramp
  • Words of Christ displayed in red text
  • Screen wake lock to prevent display sleep during reading
  • Command palette (Cmd+K) with context-aware commands, drill navigation, and keyboard shortcuts

Bible Search

  • Multi-tab search with URL-encoded query state
  • Three parallel search strategies: keyword, alias expansion, and fuzzy
  • AI-powered semantic search for finding passages by meaning (premium)
  • Saved searches (up to 20 per user) and recent search history
  • Search result sorting, highlighting, and verse hiding
  • Search logging for admin analytics

Notes & Journals

  • Rich text note editor with formatting toolbar and slash commands
  • Scripture references: inline chips with popovers and block passages with drag-and-drop reordering
  • Auto-detection of typed Bible references (e.g., "John 3:16" converts to inline reference)
  • Fill-in-the-blank fields in notes
  • PIN-locked journals with server-side encryption
  • Bulk move notes between journals
  • Note auto-save with debounced saves and visual status indicator
  • AI-powered image-to-note scanning with batch processing (premium)

Prayer

  • Prayer request management with journals, contacts, tags, and event dates
  • Status tracking: active, archived, answered (with testimony)
  • Emphasized prayers pinned to top with amber visual treatment
  • Quick-add prayer requests from anywhere in the app via command palette
  • Guided prayer sessions with four modes and configurable timers
  • Anti-sleep chime with 11 sound effects and configurable intervals
  • AI-powered prayer list import from photos with smart merge
  • Bulk move prayers between journals
  • Virtual inbox for unassigned prayers

Memorization

  • Eight practice modes: full word, speak, first letter, word bank, tap to reveal, flash cards (both directions), listen
  • FSRS-5 spaced repetition algorithm with three-factor mastery scoring (EMA, stability factor, retrievability)
  • Hard mode difficulty multiplier for bonus stability gains
  • Passage cards with tier badges, recall bars, and mastery tooltips

Notifications

  • Real-time notifications via email, in-app, and push
  • Configurable notification preferences

Documentation

  • Documentation site with getting started guide
  • Feature guides for Bible reading, search, notes, memorization, prayer, speed reading, notifications, and settings
  • Documentation link in app navigation

Platform

  • Progressive Web App (PWA) with iOS/Android splash screens
  • Mobile-responsive layouts with adaptive navigation
  • Keyboard navigation and WCAG accessibility throughout

Last updated: