junvandCopilot b36d3e53b5 feat: accessibility overhaul, agent-friendly API, standardized errors
P0 fixes:
- Image result cards are now real <a> links (open-in-new-tab, Cmd-click, copy-link)
- aria-label on all icon-only buttons (settings, clear, close, nav, toggles, delete)
- Search input semantics: label, name=q, type=search, combobox ARIA pattern
- Visible focus-visible ring on all interactive elements, removed bare outline-none

P1 fixes:
- Skip to main content link for keyboard navigation
- Proper heading hierarchy (h1/h2) and landmark elements (nav, main, aside)
- aria-live regions for loading/results/error announcements
- Custom favicon SVG (eliminates 404 console errors)
- Dialog/modal semantics with role=dialog and aria-modal

P2 API improvements:
- result_id, rank, engine on every result; timestamp, total_results, has_next on response
- Standardized APIError model (code/message/details/retry_hint) on all error responses
- X-Response-Time-Ms and rate-limit headers on all responses
- curl examples and sample JSON in OpenAPI docs for every endpoint
- Global exception handler returns consistent error JSON
- engines parameter in URL for reproducible sessions

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-23 17:06:09 +11:00
2026-02-23 14:37:07 +11:00
2026-02-23 14:37:07 +11:00
2026-02-23 14:45:18 +11:00
2026-02-23 14:41:23 +11:00
2026-02-23 14:45:18 +11:00
2026-02-23 14:41:23 +11:00

Hey Search

A privacy-respecting metasearch engine that aggregates results from multiple search engines.

Inspired by SearXNG.

Architecture

  • Backend: Python / FastAPI — async metasearch orchestrator with retry logic
  • Frontend: React + Vite + TypeScript + Tailwind CSS (shadcn theming) — mobile-first UI
  • Docker: Multi-stage build (Node frontend build → Python runtime)

Prerequisites

  • uv (Python package manager)
  • Node.js >= 18
  • Python >= 3.12

Running Locally

1. Backend

cd backend
uv sync                # install dependencies
uv run uvicorn app.main:app --reload --port 8000

The API will be available at http://localhost:8000. Interactive docs:

2. Frontend

cd frontend
npm install            # install dependencies
npm run dev            # start dev server with hot reload

The frontend dev server runs at http://localhost:5173 and proxies /api requests to the backend.

3. Docker (production)

docker build -t hey-search .
docker run -p 8000:8000 hey-search

Then open http://localhost:8000.

API Endpoints

Method Path Description
GET /api/search?q=&category= Search web or images
GET /api/autocomplete?q= Autocomplete suggestions
GET /api/engines List all search engines
PUT /api/engines/{name} Enable/disable an engine

Features

See FEATURES.md for the full feature list.

S
Description
No description provided
Readme AGPL-3.0
4.8 MiB
Languages
TypeScript 54.3%
Python 43.5%
CSS 1%
Dockerfile 0.4%
Just 0.4%
Other 0.4%