Files
hey-search/README.md
T
junvandCopilot 5fbd30de6a feat: mountable data directory for persistent config
- DB path now uses DATA_DIR env var (defaults to backend/data/ for local dev)
- Dockerfile sets DATA_DIR=/app/data with VOLUME declaration
- Docker run examples show -v mount for persistence across restarts
- /app/data stores SQLite DB (engines, excluded domains, cache settings)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-23 18:18:25 +11:00

94 lines
2.7 KiB
Markdown

# Hey Search
A privacy-respecting [metasearch engine](https://en.wikipedia.org/wiki/Metasearch_engine) that aggregates results from multiple search engines.
Inspired by [SearXNG](https://github.com/searxng/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](https://docs.astral.sh/uv/) (Python package manager)
- [Node.js](https://nodejs.org/) >= 18
- Python >= 3.12
- [Redis](https://redis.io/) (optional — enables search result caching)
## Running Locally
### 1. Backend
```bash
cd backend
uv sync # install dependencies
uv run uvicorn app.main:app --reload --port 8000
```
To enable Redis caching:
```bash
REDIS_URL=redis://192.168.1.2:6399 uv run uvicorn app.main:app --reload --port 8000
```
The API will be available at `http://localhost:8000`. Interactive docs:
- Swagger UI: http://localhost:8000/docs
- Redoc: http://localhost:8000/redoc
### 2. Frontend
```bash
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. Quick start (both)
```bash
# Without Redis (caching disabled)
just dev
# With Redis
REDIS_URL=redis://192.168.1.2:6399 just dev
```
### 4. Docker (production)
```bash
docker build -t hey-search .
# Basic — data stored in anonymous volume
docker run -p 8000:8000 hey-search
# Recommended — mount data directory for persistence
docker run -p 8000:8000 -v ./hey-search-data:/app/data hey-search
# With Redis
docker run -p 8000:8000 -v ./hey-search-data:/app/data \
-e REDIS_URL=redis://your-redis:6379 hey-search
```
The `/app/data` volume stores the SQLite database (engine settings, excluded domains, cache config). Mount it to preserve your settings across container restarts.
## 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 |
| GET | `/api/settings` | Get app settings (cache TTL)|
| PUT | `/api/settings` | Update settings |
| DELETE | `/api/cache` | Flush search cache |
## Features
See [FEATURES.md](FEATURES.md) for the full feature list.