A full-text search UI for an indexed email corpus, backed by ZincSearch. Companion to indexer, which populates the ZincSearch index from a maildir-style tree.
Originally built around the Enron email corpus (~500k messages) — once indexer has ingested the dataset, this app lets you query it with paginated results and per-email detail views.
indexer ─────► ZincSearch ◄───── back-end ◄───── front-end
(Go CLI) (search DB) (Go API) (Vue 3 / TS / Tailwind)
back-end/— A small Go HTTP service (chi router) that proxies search queries to ZincSearch's/api/<index>/_searchendpoint, normalizes the response, and returns hits + pagination metadata to the UI.front-end/— A Vue 3 + TypeScript + Tailwind SPA with a search box, paginated results table, and an email detail panel. Built with Vue CLI Service.
The split keeps ZincSearch credentials out of the browser — the front-end never talks to the search DB directly.
- Go 1.26+
- Node.js 18+
- A running ZincSearch instance with an index populated by indexer
1. Back-end
cd back-end
cp .env.example .env # fill in ZincSearch credentials
go run .The server listens on PORT (default 3000).
| Variable | Default | Purpose |
|---|---|---|
PORT |
3000 |
HTTP port for the API |
ZINCSEARCH_URL |
http://localhost:4080 |
Base URL of the ZincSearch instance |
ZINCSEARCH_INDEX |
emails |
Target index name (must match the indexer's target) |
ZINCSEARCH_USERNAME |
"" |
ZincSearch admin user |
ZINCSEARCH_PASSWORD |
"" |
ZincSearch admin password |
2. Front-end
cd front-end
cp .env.example .env # set VUE_APP_SERVER_URL to the back-end's URL
npm install
npm run serve| Variable | Purpose |
|---|---|
VUE_APP_SERVER_URL |
Base URL of the back-end, e.g. http://localhost:3000 |
Then open http://localhost:8080.
# Back-end
cd back-end && go test ./...
# Front-end
cd front-end && npm testMIT — see LICENSE.