v1.4.0 — Onboarding, friendlier errors & an engineering baseline
v1.4.0 — Onboarding, friendlier errors & an engineering baseline
Highlights:
UX polish
- First-run onboarding: new users with an empty timeline get a two-step guide on the capture page — add an AI API key, then record their first memory. It checks off step one once a key is configured, can be skipped, and disappears for good after the first entry.
- Friendly errors: raw backend/network failures (missing key, invalid key, offline, rate limit, timeout, server error) are now translated into clear, actionable messages, with an "Open Settings" link for configuration problems.
- Retry on failure: transient errors offer a retry button instead of a dead end — search re-runs the last query, capture resubmits.
- Draft preservation: an in-progress note survives a tab switch or reload and is cleared once saved.
- Multi-image capture: image mode now accepts a batch (multiple picks or pastes), shown as a removable thumbnail grid; each image is saved as its own entry.
- Clearer progress: the processing tray now names the current stage ("Reading image…", "Transcribing…") alongside the animated steps.
Engineering baseline
- Test suite: pytest coverage for provider fallback, the full ingestion pipeline, and semantic-search ranking.
- Logging: structured stdlib logging to the console plus rotating app.log / error.log, with a configurable level.
- Tooling & CI: ruff linting, a pre-commit hook, and a GitHub Actions workflow that runs backend tests and the frontend build on every push and pull request.