# Changelog ## 1.8.1 ### Added - **POST support on `/api/search`** — the search endpoint now accepts both GET and POST requests, enabling compatibility with clients that send search queries via POST - **Compatibility query parameters** on `/api/search`: - `pageNumber` — alias for `page` (takes precedence when both are provided) - `numResults` — requested result count hint (accepted and ignored; backend controls pagination) - `format` — response format hint (e.g. `json`) - `imageProxy` — client image-proxy preference flag (informational) - `safesearch` — safe search level (`0` off, `1` moderate, `2` strict; accepted for compatibility) ### Added - **Bookmarks** — save any web or image result for later reading - Bookmark icon on every search result card (web and image) - Bookmark toggle in image lightbox viewer - Dedicated `/bookmarks` page with filter tabs (All / Web / Images) - Web bookmarks shown as cards with favicons, engine badges, and content snippets - Image bookmarks displayed in masonry grid with hover overlays - Remove individual bookmarks with trash button - Paginated with "Load more" for large collections - Bookmarks link in homepage footer and results page footer - Stored in SQLite (same database as other app settings) - Full CRUD API: `GET/POST /api/bookmarks`, `DELETE /api/bookmarks/{id}`, `DELETE /api/bookmarks/by-url/{url}`, `GET /api/bookmarks/urls` ## 1.5.0 ### Added - **Redis search cache** — identical searches within a configurable time window are served from Redis cache instead of re-querying upstream engines - Cache TTL configurable via UI (Settings → Cache tab) from 0 hours (disabled) to 1 week - Default TTL: 6 hours - TTL setting persisted in SQLite - Cache key is deterministic hash of query + category + page + image_size + engines - Only successful results (with at least 1 result) are cached - **Cache management UI** — new "Cache" tab in Settings modal - Redis connection status indicator (green dot = connected) - Preset buttons: Disabled, 1h, 6h, 12h, 24h, 3 days, 1 week - Continuous slider for fine-grained TTL control - "Clear all cached results" flush button - **Settings API** — `GET/PUT /api/settings` for cache_ttl_hours, `DELETE /api/cache` for flushing - Redis is optional — when `REDIS_URL` is not set or Redis is unreachable, caching is silently disabled ## 1.4.0 ### Added - **Accessibility overhaul (P0)** - Image result cards are now real `` links — supports open-in-new-tab, Cmd/Ctrl-click, and copy-link - `aria-label` on all icon-only buttons (settings, clear, close, lightbox nav, engine toggles, domain remove, pagination arrows, error dismiss) - Search input has proper semantics: `