Build and Push Docker Image / build-and-push (push) Successful in 4m34s
Reading plan sync was truly fire-and-forget: a failed PUT to /api/reading-plans left the change stuck on that device with no indication anything was wrong, which is exactly what "doesn't sync across devices" looks like from the outside. Moved the sync call out of the setState updater and into a proper effect keyed on state, so success/failure can be tracked. Both Home and Reading Plans now show a red banner with the actual error (HTTP status or network error) and a Retry button when a sync fails, mirroring how study project sync already reports errors. Verified the full cycle locally: normal sync, a killed-server failure showing the banner, and Retry recovering once the server's back. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>