# Changelog

<!-- A copy of this file is served at public/CHANGELOG.md and rendered at
     /changelog.html. Keep them in sync when you cut a release. -->

## Unreleased

- Added Bluesky (AT Protocol) as an optional third target behind ENABLE_BLUESKY: connect with an app password (encrypted at rest), post to it from Compose, and mirror X posts to it automatically.
- Added a reusable toast system, inline field validation, stat skeletons, empty states with a next action, and optimistic compose.
- Added keyboard shortcuts (c / g / ? / Ctrl-Cmd+Enter) and a single consistent focus ring.
- Added a canonical design-token system (spacing, type, elevation, radii, motion) and a calmer motion pass.
- Added a per-user write mutex to prevent lost state updates under concurrency.
- Added opt-in Sentry crash reporting (SENTRY_DSN), a richer /api/health with storage + queue status, and GitHub Actions CI.
- Added guides (/guides/x-to-nostr.html, /guides/x-to-bluesky.html) and this changelog page.
- Fixed the phone navigation bar layout and removed placeholder footer links.

- Removed the Nostr local-password and unlock workflow.
- Added automatic signer encryption using Railway `ENCRYPTION_SECRET` or a local generated device key.
- Kept backup exports password-protected and portable across devices.

- Added local publish queue with pending, publishing, published, and failed states.
- Added failed-post retry flow with exponential backoff and duplicate queue prevention.
- Added primary, backup, and disabled relay strategy with relay health scoring.
- Added local dashboard stats for mirrored posts, successful syncs, failed syncs, duplicate skips, relay success rate, and last sync timestamps.
- Added default profile state and migration from older `state.json` layouts.
- Added content template settings for mirrored Nostr notes.
- Added encrypted export/import for local app state.
- Added queue, relay health, stats, profile, backup, and advanced details UI panels.
- Added tests for queue behavior, backoff, relay scoring, content templates, encrypted payloads, migration, and stats safety.
