Broque Thomas
219f453b74
update recent updates
2026-03-15 14:41:32 -07:00
Broque Thomas
ab21855af3
Enrich repair findings with album art, artist images & live job progress
...
- All 9 repair jobs now emit report_progress() for real-time card updates
(phase, log lines, per-item activity) via WebSocket repair:progress events
- Enrich finding details with album/artist thumb URLs across all repair jobs
(dead_file, duplicate, metadata_gap, album_completeness, missing_cover_art,
acoustid_scanner, track_number_repair, fake_lossless, orphan_file)
- Track number repair: return match_score from fuzzy matching, add suffix-based
DB lookup for album/artist art (handles cross-environment path mismatches)
- Fix Plex/Jellyfin relative thumb URLs in findings endpoint via fix_artist_image_url
- Labeled media cards in finding detail panels (album title + artist name under images)
- Dashboard tooltip shows current job name + per-job progress instead of stale stats
2026-03-15 14:08:26 -07:00
Broque Thomas
7a706e8c11
Add fix actions for maintenance findings (dead files, orphans, duplicates, etc.)
...
- New fix_finding() dispatcher in repair_worker with per-type handlers:
dead_file (remove DB entry), orphan_file (delete from disk),
track_number_mismatch (update DB), missing_cover_art (apply artwork URL),
metadata_gap (apply found fields), duplicate_tracks (keep best quality)
- New POST /api/repair/findings/<id>/fix endpoint
- Frontend: contextual fix buttons per finding type, bulk "Fix Selected"
- Removed path_mismatch from fixable types (dry-run preview only)
2026-03-15 12:51:18 -07:00
Broque Thomas
dab94ce65d
update soulsync repair worker with new jobs
2026-03-15 10:18:50 -07:00
Broque Thomas
6fa3b490ea
Fix Windows path mangling for artist names with trailing dots (e.g. Fred again..)
2026-03-14 23:11:18 -07:00
Broque Thomas
cae2bd0c62
Add granular post-processing toggles for metadata services, cover art, and lyrics
2026-03-14 22:45:50 -07:00
Broque Thomas
5f72fe79a6
Embed Tidal, Qobuz, Last.fm, and Genius metadata into file tags during post-processing
2026-03-14 22:28:22 -07:00
Broque Thomas
264e696fe3
Fix per-profile ListenBrainz playlist cache scoping and stale data recovery
2026-03-14 21:11:59 -07:00
Broque Thomas
8f0b9518bc
Add per-profile ListenBrainz support with personal settings modal
2026-03-14 20:12:19 -07:00
Broque Thomas
9a22c49a0e
Add FLAC bit depth fallback option to quality profile
2026-03-14 19:24:25 -07:00
Broque Thomas
7e19e66ef3
Add quality enhance button to upgrade existing library tracks & Add iTunes fallback to Quality Enhance endpoint for full metadata source parity
2026-03-14 17:09:08 -07:00
Broque Thomas
0b8bfa1e6b
Scope automation-triggered watchlist scans to the calling profile & Fix watchlist scan silently skipping all albums due to metadata cache returning incomplete data
2026-03-14 13:23:03 -07:00
Broque Thomas
3bbbfb125e
Add $albumtype template variable with smart EP/Single/Album detection
2026-03-14 12:40:25 -07:00
Broque Thomas
a512d6ae70
Fix discover hero/modal to strictly filter similar artists by active source
2026-03-14 10:20:25 -07:00
Broque Thomas
945f86c643
Library Repair Worker: multi-job background maintenance daemon with 10 jobs, findings system, and management modal
2026-03-14 09:09:18 -07:00
Broque Thomas
6de3ab7cef
Add universal metadata cache for Spotify & iTunes API responses with browsable dashboard tool
2026-03-14 01:26:45 -07:00
Broque Thomas
c54e52e18d
Add Spotify Library discovery section, instrumental filter, custom exclusion terms & album download modal fixes
2026-03-14 00:21:44 -07:00
Broque Thomas
a5e72cff05
Add instrumental filter & custom exclusion terms to watchlist content filters
2026-03-13 23:09:12 -07:00
Broque Thomas
9856ec6772
update recent updates
2026-03-13 22:49:35 -07:00
Broque Thomas
e3fdb12d78
Preserve watchlist scan timestamps for UI display instead of wiping on lookback changes
2026-03-13 22:46:41 -07:00
Broque Thomas
32f1cc946c
Improve watchlist cross-provider matching accuracy and add manual artist linking UI
2026-03-13 22:28:13 -07:00
Broque Thomas
e1a5bf678a
Add library issue reporting system with actionable detail modal
2026-03-13 21:14:57 -07:00
Broque Thomas
57a8bdd107
Add album file reorganization to Enhanced Library Manager
2026-03-13 18:43:54 -07:00
Broque Thomas
d4d1b8c7a0
Update web_server.py
2026-03-13 16:34:29 -07:00
Broque Thomas
9261d1f182
update latest updates
2026-03-13 16:06:56 -07:00
Broque Thomas
02c1da76ba
update recent updates and fix spotify worker rate limit button
2026-03-13 14:08:30 -07:00
Broque Thomas
de2cc6db7a
Detect rate limits in methods that swallow 429 exceptions so the modal appears
2026-03-13 14:00:23 -07:00
Broque Thomas
7da7f3b112
Cache similar artist metadata at scan time to eliminate redundant Spotify API calls
2026-03-13 13:35:54 -07:00
Broque Thomas
ae6fb929bf
Cache hero slider artist metadata to eliminate Spotify API calls on every page load
2026-03-13 13:13:31 -07:00
Broque Thomas
5ee9390c05
Add album art to discovery pool by extracting image URLs from match data
2026-03-13 12:40:30 -07:00
Broque Thomas
55186c6a51
Add Deezer playlist sync tab with discovery, fix modal, and cache persistence
2026-03-13 12:29:49 -07:00
Broque Thomas
f9d80606e3
Expand debug info with library stats, service status, config, and configurable log output
2026-03-13 08:47:04 -07:00
Broque Thomas
603ed06465
Improve album download analysis with album-scoped track matching
2026-03-12 21:38:02 -07:00
Broque Thomas
7b83959c30
Add Navidrome ReportRealPath guidance when library files can't be found
2026-03-12 19:16:19 -07:00
Broque Thomas
e8df863205
enhanced library write all modal and confirmation dialog
2026-03-12 16:57:38 -07:00
Broque Thomas
ded906bef4
Fix false positive track matching & tag writing visibility for library files
2026-03-12 16:08:44 -07:00
Broque Thomas
a3bf858558
Seamless Spotify rate limit UX — replace intrusive modal with ambient indicators
2026-03-12 12:45:59 -07:00
Broque Thomas
8d059b2e65
Extend race guard verification to all download source monitors
2026-03-12 11:28:56 -07:00
Broque Thomas
dc9a8a3845
Fix wrong track downloads when album name matches a track title in hybrid mode
2026-03-12 10:40:33 -07:00
Broque Thomas
ef43e4b5a6
Add album pre-flight search to find complete album folders before track-by-track downloading
2026-03-12 10:23:29 -07:00
Broque Thomas
4d2487db81
Guard all direct Spotify API calls against rate limit ban
2026-03-12 10:00:06 -07:00
Broque Thomas
9557e6bdd3
Fix sync stuck at 80% — serialize datetime in SyncResult for WebSocket emit
2026-03-12 08:52:08 -07:00
Broque Thomas
691e026208
Fix Tidal API search — correct endpoint casing, JSON:API Accept header, and best-match selection
2026-03-11 22:51:51 -07:00
Broque Thomas
ac2c710a1e
Tidal & Qobuz Background Enrichment Workers
2026-03-11 21:26:20 -07:00
Broque Thomas
fb04d0f4bc
Full qobuz support
2026-03-11 17:43:27 -07:00
Broque Thomas
f4d8280642
css & error notification fixes
2026-03-11 14:56:45 -07:00
Broque Thomas
d329dd4fe8
Fix Tidal playlist endpoints redundantly re-fetching all playlists — use direct single-playlist fetch
2026-03-11 13:50:53 -07:00
Broque Thomas
e42f373f80
Isolate service client initialization so one failure doesn't break the entire app
2026-03-11 11:25:15 -07:00
Broque Thomas
bde2be1cfa
Spotify rate limit re-trigger loop caused by periodic auth probes
2026-03-11 08:28:36 -07:00
Broque Thomas
0aa8950436
fix build a playlist functionality and update the ui
2026-03-11 07:52:58 -07:00
Broque Thomas
e5450d9f89
Help Docs Overhaul & Settings Fixes
2026-03-10 23:50:21 -07:00
Broque Thomas
c06fd044a1
Profile Permissions & Page Access Control
2026-03-10 23:23:43 -07:00
Broque Thomas
a159ac3fd6
Fix activity feed blinking and show live relative timestamps
2026-03-10 20:34:57 -07:00
Broque Thomas
b75f115a85
update latest updates
2026-03-10 15:50:31 -07:00
Broque Thomas
58a2f1ac4a
Fix iTunes country setting not persisting on save
2026-03-10 13:27:30 -07:00
Broque Thomas
08cc10c909
update latest updates
2026-03-10 12:59:13 -07:00
Broque Thomas
7138125b9e
Fix post-processing race condition logging errors on already-moved files
2026-03-10 11:30:55 -07:00
Broque Thomas
dbe0ce4db4
Fix playlist folder mode race condition where second thread deletes successfully moved file
2026-03-10 10:01:39 -07:00
Broque Thomas
6506c2f163
update latest updates
2026-03-10 09:28:55 -07:00
Broque Thomas
dc7140c459
Add Last.fm and Genius to on-demand enrichment, settings reload, and enrich dropdown parity
2026-03-10 09:12:36 -07:00
Broque Thomas
f8d23ec37c
Add Last.fm and Genius API clients with settings integration
2026-03-09 22:35:10 -07:00
Broque Thomas
aa93458ed3
Configurable ListenBrainz API endpoint for self-hosted instances
2026-03-09 20:52:33 -07:00
Broque Thomas
bbccd3524f
Explicit content filter with configurable toggle to skip explicit tracks during downloads
2026-03-09 20:39:40 -07:00
Broque Thomas
16e01f6039
Pause enrichment workers during discovery to prioritize user-initiated API calls
2026-03-09 19:42:48 -07:00
Broque Thomas
d1890c768c
cleanup staging folder same as download folder
2026-03-09 17:10:35 -07:00
Broque Thomas
07a79e7af6
Full Cleanup automation: combined housekeeping sweep for quarantine, downloads, staging, and search history
2026-03-09 16:39:29 -07:00
Broque Thomas
6e16596b9d
update recent updates
2026-03-09 16:07:43 -07:00
Broque Thomas
eac97a6c2b
Smart Spotify rate limit detection with global ban, auto-suppression, and frontend modal
2026-03-09 16:05:33 -07:00
Broque Thomas
1ea262c749
fix cover images not appearing in music player modal
2026-03-09 14:55:23 -07:00
Broque Thomas
cc4502e5f8
Add server sync option to enhanced library write-tags flow
2026-03-09 14:17:56 -07:00
Broque Thomas
7411bd1eab
Clarify update notification for Docker users that image will follow
2026-03-09 13:15:03 -07:00
Broque Thomas
b3d607752b
Add version tracking to database backup manager & Fix radio mode next track closing modal and losing playback state
2026-03-09 13:10:25 -07:00
Broque Thomas
abec2965ac
Fix playlist folder downloads marked as failed despite successful processing
2026-03-09 12:04:57 -07:00
Broque Thomas
aebaa900c9
recent updates updated
2026-03-09 11:53:23 -07:00
Broque Thomas
8d46d3746b
Fix Docker upgrade crashes from stale volume mounts and partial DB migrations
2026-03-09 11:44:00 -07:00
Broque Thomas
ea1441d09d
"Write Tags to File" in the Enhanced Library Manager
2026-03-09 11:17:01 -07:00
Broque Thomas
5f58432ca4
Redesigned media player with expanded Now Playing modal and smart radio
2026-03-09 10:13:42 -07:00
Broque Thomas
acc88441c2
update latest updates.
2026-03-08 23:39:40 -07:00
Broque Thomas
7c50f350c0
Add a library management interface to the artist detail page with inline metadata editing, per-service manual matching, bulk operations, and full track/album management.
2026-03-08 23:37:02 -07:00
Broque Thomas
5f94352b40
Add cancellation support to all discovery workers
2026-03-08 18:12:37 -07:00
Broque Thomas
3f4770a735
Fix quality scanner stop button, rate limiting, and redundant Spotify client
2026-03-08 12:58:14 -07:00
Broque Thomas
b0761a6e62
update version modal
2026-03-08 12:33:41 -07:00
Broque Thomas
5daa8c0596
Add rich stats to automation run history
2026-03-08 12:20:50 -07:00
Broque Thomas
266d044797
Add Backup Manager dashboard tool card with list, download, restore & delete
2026-03-08 10:46:03 -07:00
Broque Thomas
b1cb9f9964
Add scheduled database backup system automation
2026-03-08 08:24:49 -07:00
Broque Thomas
2ef0c75a25
Fix sync completion not reaching UI after WebSocket reconnect
2026-03-07 22:53:15 -08:00
Broque Thomas
8b3b82702a
Add deep library scan automation for enrichment-safe sync
2026-03-07 18:39:45 -08:00
Broque Thomas
ddd7f2d9b5
Persist mirrored playlist discovery results & retry failed
2026-03-07 17:28:17 -08:00
Broque Thomas
e11ee8622e
Fix discovery modal persistence, artist dict handling, and rate limiter scope
2026-03-07 13:05:49 -08:00
Broque Thomas
d97b3d1846
Fix automation timezone bug
2026-03-07 11:42:44 -08:00
Broque Thomas
dbe9745794
Add new automations for refreshing beatport, cleaning download folder and cleaning search history.
2026-03-07 11:11:43 -08:00
Broque Thomas
93a83f0417
Guard against string album values in wishlist spotify_data to prevent AttributeError
2026-03-07 10:17:06 -08:00
Broque Thomas
b34e348937
keep a history of automation runs
2026-03-07 09:39:08 -08:00
Broque Thomas
ba6aea5435
Add rich progress tracking to all automation cards with stall detection and timeout handling
2026-03-07 00:57:03 -08:00
Broque Thomas
41e895d254
Batch watchlist status checks to eliminate rate limit errors
2026-03-06 23:41:01 -08:00
Broque Thomas
cdcaa245d1
Add post-scan phase progress to watchlist automation card
2026-03-06 23:15:30 -08:00
Broque Thomas
c2af4152ab
Add live status feed to database update automation card
2026-03-06 21:42:43 -08:00
Broque Thomas
4fa66b8981
Fix batch completion detection for post-processing race condition
2026-03-06 20:53:06 -08:00
Broque Thomas
156c37d907
Replace hardcoded post-download chain with system automations
2026-03-06 19:48:48 -08:00
Broque Thomas
8b6a2c0adc
allow multiple notification calls per automation as well as a new signal fire utility
2026-03-06 18:10:15 -08:00
Broque Thomas
7647ac22ed
Add Discovery Pool dashboard tool card and revamp modal with premium category-card design
2026-03-06 11:59:45 -08:00
Broque Thomas
c9d83d5d13
Fix Tidal OAuth PKCE verification on Flask callback route
2026-03-06 10:27:17 -08:00
Broque Thomas
d264ec70f3
Add sync match cache and fix discovery clear to purge cache
2026-03-06 09:41:44 -08:00
Broque Thomas
b775d290ae
Update web_server.py
2026-03-06 08:41:28 -08:00
Broque Thomas
7485ba8aa2
fix issue with tracking auto sync playlist node
2026-03-06 08:01:17 -08:00
Broque Thomas
69d16ec402
Fix sync playlist node
2026-03-05 22:18:58 -08:00
Broque Thomas
3af8c941b0
speed up discovery node
2026-03-05 22:10:28 -08:00
Broque Thomas
db03735183
Update web_server.py
2026-03-05 22:04:33 -08:00
Broque Thomas
17babb1fc8
fix spotify playlist discover automation
2026-03-05 21:17:58 -08:00
Broque Thomas
9f416475e2
Live automation progress tracking with real-time output panels
2026-03-05 20:39:26 -08:00
Broque Thomas
d57b48a62a
Playlist discovery pipeline with official metadata enforcement for automated sync
2026-03-05 18:32:18 -08:00
Broque Thomas
f99f873d60
Replace hardcoded wishlist/watchlist timers with system automations + add Pushbullet & Telegram notifications
2026-03-05 16:50:09 -08:00
Broque Thomas
da707dcf0a
Full automation engine expansion with scheduling, triggers, actions, and UI polish
2026-03-05 15:13:32 -08:00
Broque Thomas
75f9b7364a
User configurable youtube rate limiting and optional cookies for bot detection
2026-03-05 10:50:06 -08:00
Broque Thomas
aef056cfcb
DB-first metadata updater
2026-03-05 10:03:39 -08:00
Broque Thomas
5938f6fec7
Fix download retry fallback not cycling through available sources
2026-03-04 20:16:24 -08:00
Broque Thomas
60f93d5858
hydrabase changes
2026-03-04 19:48:12 -08:00
Broque Thomas
f051292e0d
update version modal
2026-03-04 18:32:03 -08:00
Broque Thomas
b30e1f60bd
Add Mirrored Playlists — persistent cross-service playlist archive
...
Automatically mirrors every parsed playlist (Spotify, Tidal, YouTube, Beatport) to a local database so they're always accessible — even if a service subscription lapses or the browser closes.
- New "Mirrored" tab on the Sync page with source-branded cards showing discovery/download status
- Auto-mirrors on successful parse (upsert — re-parsing updates the existing mirror, no duplicates)
- Click any mirrored playlist to browse its full track list, then run it through the discovery pipeline
- Cards dynamically reflect live state: Discovering → Discovered → Downloading → Downloaded
- Download modal rehydrates after page refresh — click a "Downloading..." card to resume viewing progress
- All phase transitions (start, complete, cancel, error, modal close) keep card and backend state in sync
- Profile-scoped via profile_id, consistent with other features
2026-03-04 18:27:18 -08:00
Broque Thomas
114af496c7
Track version
2026-03-04 11:32:40 -08:00
Broque Thomas
1bec9320b4
update version modal
2026-03-04 11:11:31 -08:00
Broque Thomas
2d6c55e294
Fix chromaprint crash on surround audio and Spotify worker status display
2026-03-04 11:00:34 -08:00
Broque Thomas
4fee005dee
Add multi-profile support with Netflix-style profile picker
...
Allow multiple users to share a single SoulSync instance with isolated personal data. Each profile gets its own watchlist, wishlist, discovery pool, similar artists, and bubble snapshots — while sharing the same music library, database, and service credentials.
- Netflix-style profile picker on startup when multiple profiles exist
- Optional PIN protection per profile; admin PIN required when >1 profiles
- Admin-only profile management (create, edit, rename, delete)
- Profile avatar images via URL with colored-initial fallback
- Zero-downtime SQLite migration — all existing data maps to auto-created
admin profile
- Single-user installs see no changes — profile system is invisible until
a second profile is created
- WebSocket count emitters scoped to profile rooms (watchlist/wishlist)
- Background scanners (watchlist, wishlist, discovery) iterate all profiles
2026-03-04 10:46:08 -08:00
Broque Thomas
84de4ad16b
Redesign watchlist modal with enriched artist detail view
2026-03-03 20:26:21 -08:00
Broque Thomas
0f428dc45c
Add WebSocket real-time updates with automatic HTTP polling fallback
...
Migrates 38 HTTP polling loops to WebSocket push events across 6 phases: service status, dashboard stats, enrichment workers, tool progress, sync/discovery progress, and scan status. All original HTTP polling is preserved as automatic fallback — if WebSocket is unavailable or disconnects, the app seamlessly reverts to its previous behavior. Includes 162 tests verifying event delivery, data shape, and HTTP parity. Also fixes a copy-paste bug in Beatport sync error cleanup.
2026-03-03 18:26:29 -08:00
Broque Thomas
7b854baba8
Detect and remove deleted content during incremental database updates
...
Incremental database updates now detect when artists or albums have been removed from your media server (Plex, Jellyfin, or Navidrome) and automatically clean them up from SoulSync's database. Previously, deleted content would persist as ghost entries until you ran a full refresh. Removal counts are reported in the scan results. Includes safety checks to prevent accidental mass deletion if the server is unreachable or returns incomplete data.
2026-03-03 13:13:38 -08:00
Broque Thomas
65bae58cfe
Reverse proxy fix
2026-03-03 12:04:53 -08:00
Broque Thomas
d9aa8303a7
Add SoulSync REST API (v1) with API key authentication
...
Adds a full public REST API at /api/v1/ with 32 endpoints covering library, search, downloads, wishlist, watchlist, playlists, system status, and settings. Includes API key authentication (Bearer token), per-endpoint rate limiting, and consistent JSON response format. API keys can be generated and managed from the Settings page. No changes to existing functionality — the API delegates to the same backend services the web UI uses.
2026-03-03 09:49:00 -08:00
Broque Thomas
7a4cbc066f
Fix infinite monitor loop on post-processing completed tasks
2026-03-02 12:50:20 -08:00
Broque Thomas
c4778bc269
wishlist should always 'force download all'
2026-03-02 12:46:39 -08:00
Broque Thomas
df33adf6a7
include 'add to watchlist' button to each artist in library.
2026-03-02 10:04:10 -08:00
Broque Thomas
1f73ba4f94
view recommended artists.
2026-03-02 09:12:35 -08:00
Broque Thomas
8f2dd66aee
add a 'watch all' button on hero slider to quickly add all artists in slider.
2026-03-02 08:40:22 -08:00
Broque Thomas
db2f7e999c
Fix ListenBrainz database path not respecting DATABASE_PATH env var
2026-03-02 07:46:42 -08:00
Broque Thomas
c279f2e4fa
Design retag layout
2026-03-01 22:52:27 -08:00
Broque Thomas
6df61d6ba1
use watchlist artist name
2026-03-01 19:24:12 -08:00
Broque Thomas
4fba18b25e
Feat: Custom accent colors.
2026-03-01 15:29:37 -08:00
Broque Thomas
1aa6cdc9b6
Rebuild the import feature and move it to its own page.
2026-03-01 14:18:55 -08:00
Broque Thomas
e38c0adc57
Fix: Various artist compilations caused failure on acoustID check.
2026-03-01 11:39:04 -08:00
Broque Thomas
dced926a6e
fixed issue where cancelled downloads wouldn't send album context to wishlist.
2026-03-01 09:22:50 -08:00
Broque Thomas
afa495756f
Version 1.7 update
2026-02-28 21:58:13 -08:00
Broque Thomas
acfc26a4bd
Add Tidal as a download source with full pipeline integration
...
Adds Tidal as a third download source alongside Soulseek and YouTube. Uses the tidalapi library with device-flow authentication to search and download tracks in configurable quality (Low/High/Lossless/HiRes) with automatic fallback. Integrates into the download orchestrator for all modes (Tidal Only, Hybrid with fallback chain), the transfer monitor, post-processing pipeline, and file finder. Frontend includes download settings with quality selector, device auth flow, and dynamic sidebar/dashboard labels that reflect the active download source. No breaking changes for existing users.
2026-02-28 21:47:19 -08:00
Broque Thomas
49c769ff5c
Fix Hydrabase endpoint gaps, M3U default, and soul_id mapping
...
Filled all missing Hydrabase fallthrough gates across 6 endpoints (artist album tracks, iTunes album, discover album, Spotify track, both similar artists), added track_number/disc_number to Track dataclass, fixed get_album_tracks to send soul_id instead of text query, mapped soul_id field from Hydrabase responses across all search methods, updated 7 frontend call sites to pass album name/artist params, and fixed M3U export defaulting to enabled when users never turned it on.
2026-02-28 18:25:55 -08:00
Broque Thomas
0193f53d28
Improve Spotify artist search for short names using field filter
2026-02-28 11:04:50 -08:00
Broque Thomas
97502ec600
Boost exact artist name matches to top of search results
...
Fix short artist names (e.g. "ano") getting buried by wildcard matches. Re-ranks Spotify and iTunes results so exact name matches appear first, without changing what's returned.
2026-02-28 08:41:19 -08:00
Broque Thomas
694f190b6d
Update web_server.py
2026-02-28 08:00:11 -08:00
Broque Thomas
1fbb1ec2c5
debug post processing flow
2026-02-27 11:34:27 -08:00
Broque Thomas
698b1fa4f3
clear current downloads
2026-02-27 11:18:13 -08:00
Broque Thomas
2dc72a39b7
Add music library selection for Navidrome
...
SoulSync was importing from all Navidrome libraries regardless of user access restrictions. Added a "Music Library" dropdown in Navidrome settings that lets users scope imports to a specific music folder. Uses the Subsonic musicFolderId parameter on artist, album, and search API calls. Selecting "All Libraries" reverts to the previous behavior.
2026-02-27 09:37:58 -08:00
Broque Thomas
7dfc10eb0b
Store sync status in database instead of JSON file
...
Sync status was being saved to storage/sync_status.json on disk, which fails in Docker with permission denied errors. Moved to the existing database preference system so it works in all environments.
2026-02-27 08:50:50 -08:00