Changelog
All notable changes to Note Stream will be documented in this file.
The format is based on Keep a Changelog.
[0.15.0] - 2026-02-28
Added
- Optional "Also delete all notes" checkbox on folder and project deletion modals; notes are moved to trash instead of unassigned
- Exact timestamps user setting: when enabled, time pickers use 1-minute intervals and the current time is not rounded to the nearest 15 minutes
Fixed
- Delete folder/project modals not opening due to
@click.stop inside flux:modal.trigger preventing event bubbling
- Foreign key constraint error when deleting a folder that had soft-deleted notes still referencing it; queries now use
withTrashed() before nullifying FK columns
- Pinned Meilisearch Docker image to
v1.35.0 to prevent silent version upgrades breaking the local data volume
[0.14.0] - 2026-02-23
Added
- Delete folders and projects from the sidebar with confirmation modals; notes are preserved but unassigned when their folder or project is removed
[0.13.0] - 2026-02-23
Added
- REST API for Flutter (and other mobile/external clients) backed by Laravel Sanctum token authentication
POST /api/auth/register and POST /api/auth/login endpoints returning Sanctum tokens
POST /api/auth/logout to revoke the current token
- Full CRUD API for Projects (
/api/projects)
- Full CRUD API for Notes (
/api/notes), Folders (/api/folders), Tags (/api/tags), and Attachments (/api/attachments)
- Note filtering:
?date=, ?project_id=, ?search=, ?trashed=true query parameters on GET /api/notes
POST /api/notes/{id}/restore to recover a soft-deleted note from trash
DELETE /api/notes/{id}/force to permanently delete a note
PUT /api/notes/{note}/tags to sync a note's tags
GET /api/notes/trashed/count to return the number of trashed notes
GET /api/user/settings and PUT /api/user/settings for reading/writing user preferences
ProjectResource, ProjectCollection, ProjectStoreRequest, ProjectUpdateRequest
NoteResource now includes project_id, deleted_at, created_at, updated_at, and eager-loaded project
- Feature tests for all new API endpoints (34 tests)
[0.12.0] - 2026-02-19
Added
user_settings table and UserSetting model for per-user key/value settings storage
UserSetting::getValue() and UserSetting::setValue() static helpers for reading/writing settings
User::settings() HasMany relationship and User::setting() convenience accessor
UserSettingFactory for use in tests
[0.11.0] - 2026-02-09
Added
- Fullscreen editor mode for editing existing notes, matching the new note fullscreen experience
- Expand/collapse button in inline edit toolbar to toggle fullscreen editing
- Escape key exits fullscreen edit mode without closing the editor
Fixed
- Test suite failing due to Meilisearch connectivity by setting
SCOUT_DRIVER=null in phpunit.xml
[0.10.3] - 2026-02-09
Removed
- Unused filter (funnel) and menu (ellipsis) icon buttons from the header
[0.10.2] - 2026-02-09
Fixed
- Sidebar folder, project, and tag creation forms flashing briefly on page refresh before Alpine.js initializes
[0.10.1] - 2026-02-09
Changed
- Renamed application from "DailyStream" to "Note Stream" across all views, branding, and config
[0.10.0] - 2026-02-06
Added
auth:sanctum middleware on all API routes to require authentication
- User-scoped queries in all API controllers (NoteController, FolderController, TagController, AttachmentController)
- Ownership authorization checks (
abort_unless) on show, update, and destroy API actions
NoteOptionsService extracting shared logic for loading folders/projects/tags, creating folders/projects, and parsing attendees
sanitizedContent Attribute accessor on Note model with HTML tag allowlist to prevent XSS
- Authorization policies:
NotePolicy, FolderPolicy, TagPolicy, AttachmentPolicy
- Model query scopes:
scopeForUser on Note, Folder, Tag, Project; scopeByDate on Note; scopeActive on Project
children() HasMany relationship on Folder model for nested folder support
- Foreign key constraints and composite primary key on
note_tag pivot table
- Reusable
<x-notes.folder-selector> and <x-notes.project-selector> Blade components
Changed
- API controllers now set
user_id server-side instead of accepting it from client input
- Form Requests authorize based on authenticated user instead of
return true
- NoteInput and Timeline Livewire components delegate to NoteOptionsService (DRY)
- Timeline renders
sanitized_content instead of raw HTML content
- Rewrote all API controller tests from Pest to PHPUnit with auth and authorization coverage
- Improved factory data quality: realistic hex colors, filenames, and MIME types
Fixed
- API endpoints were publicly accessible with no authentication or user scoping
- XSS vulnerability from unescaped
{!! $note['content'] !!} in timeline view
note_tag pivot table missing foreign key constraints allowing orphaned records
[0.9.0] - 2026-02-06
Added
- Trash view in sidebar showing count of soft-deleted notes
- Trash mode in timeline displaying deleted notes with "Deleted X ago" timestamps
- Restore action to recover soft-deleted notes from trash
- Permanent delete action with confirmation modal for irreversible deletion
- Mutual exclusion: trash mode clears when switching to search, project filter, or date view
[0.8.3] - 2026-02-06
Changed
- Moved note delete action from note card hover icon to the edit screen toolbar
- Delete confirmation modal now says "moved to trash" instead of "cannot be undone"
Removed
- Cancel button in edit screen (redundant with auto-save)
- Trash icon on note cards (delete now accessible from edit screen)
[0.8.2] - 2026-02-06
Fixed
- Mobile search bar no longer covers filter/search indicator banners
- Header uses solid white background with high z-index for consistent visibility
[0.8.1] - 2026-02-06
Added
- Swipe left/right on mobile to navigate between days in the timeline
Fixed
- Sidebar background now fully opaque on mobile to prevent content bleed-through
[0.8.0] - 2026-02-06
Added
- Full mobile responsiveness across the authenticated app experience
- Mobile sidebar as fixed overlay with backdrop, auto-closes on navigation
- Mobile search bar overlay in header (visible on small screens)
- Touch-friendly delete buttons always visible on mobile (no hover required)
- Dynamic viewport height (
h-dvh) for proper iOS Safari support
Changed
- Sidebar auto-collapses on mobile viewports using
matchMedia listener
- Header uses compact padding and abbreviated date format on mobile
- Timeline and note input toolbars wrap gracefully on small screens
- Dropdown menus constrained to viewport width on mobile
- Post/Save buttons expand to full-width on mobile for easier tapping
- Fullscreen editor footer toolbar stacks vertically on mobile
[0.7.0] - 2026-02-06
Added
- Attendee autocomplete suggestions from previous meeting notes when creating or editing meetings
- Reusable
<x-notes.attendee-input> Blade component consolidating duplicated attendee input logic
LoadsKnownAttendees trait for shared attendee query logic between NoteInput and Timeline
meeting() factory state on NoteFactory for easier test setup
[0.6.1] - 2026-02-06
Fixed
- Sidebar user footer and explorer not rendering due to undefined
collapsed Alpine variable
Changed
- Profile page now uses the sidebar layout instead of the old Jetstream navigation
- Restyled profile sections (form-section, action-section) as clean bordered cards matching app design
- Updated all profile form views and shared components to use slate color scheme
- Replaced gray/indigo colors with slate/emerald across modals, buttons, and inputs
[0.6.0] - 2026-02-06
Changed
- Redesigned landing page with Note Stream branding, hero section, and feature highlights
- Redesigned login, register, and all auth pages with consistent slate color scheme
- Updated guest layout to use Inter font matching the main app
- Replaced Jetstream logo with Note Stream "DS" branding on auth pages
- Updated form components (inputs, buttons, checkboxes) from indigo/gray to slate theme
- Set APP_NAME to "Note Stream" in environment config
[0.5.0] - 2026-02-06
Added
- Public changelog page rendered from Markdown
- Project filtering from sidebar with search-style layout
- Draft persistence for new notes using localStorage
[0.4.0] - 2026-02-04
Added
- Note deletion with confirmation modal
- Floating FAB, fullscreen mode, and full sidebar toggle
- Auto-save functionality for notes while editing
[0.3.0] - 2026-01-28
Added
- Date dividers to search results with navigation
- Calendar note indicators and reusable date divider component
- "Go to today" navigation and UI polish
- Date picker and time selector display
- Replace time input with Flux time-picker using 15-minute intervals
Fixed
- Database-agnostic query for calendar note indicators
- Flux UI paths in Tailwind content config
[0.2.0] - 2026-01-20
Added
- Full-text search with Laravel Scout and Meilisearch
- Smart paste for meeting attendees from Outlook/Gmail
- @mention support for meeting attendees in editor
- Inline note editing in timeline
- Interactive calendar sidebar with month navigation
- Sidebar explorer for folders, projects, and tags
- Note input form with type switching (note/meeting)
- Timeline display with date grouping
- Core models: Note, Folder, Tag, Attachment
- User authentication with Laravel Jetstream
[0.1.0] - 2026-01-15
Added
- Fresh Laravel 12 installation with Jetstream and Flux UI
- Base sidebar layout and component structure