> ## Documentation Index
> Fetch the complete documentation index at: https://docs.elanotes.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Web

> The Next.js Ela app. Three panes. Talks only through the HTTP API when pointed at one.

The web app is the canonical product UI. It talks **only** through
`ApiMethods`. With `NEXT_PUBLIC_API_URL` set, that adapter is HTTP against
`/v1`. Without it, the UI uses an in-memory mock (a different path).

## Using the app

* [Notes](/using-notes) — create, edit, delete, archive
* [Search](/using-search) — handles, provenance, coverage
* [Privacy](/privacy) — `private/` never leaves the device
* [Agents](/agents) — MCP and HTTP from the same vault

Hosted entry: [elanotes.com/home](https://elanotes.com/home).

## Run against a local API

```bash theme={null}
# apps/web/.env.local — this line only
NEXT_PUBLIC_API_URL=http://localhost:4000
pnpm --filter @elanotes/web dev
```

Or `pnpm dev` (web `:3000` + API `:4000`). Do not copy WorkOS
placeholders into `.env.local` unless you intend to turn AuthKit on.

`NEXT_PUBLIC_API_URL` is the API origin (no `/v1` suffix). `/v1` is on each
path. The hosted app uses `https://api.elanotes.com`. OpenAPI `servers`
lists that origin first, then `http://127.0.0.1:4000`. `API_PUBLIC_URL`
still sets error `help` links and OAuth resource metadata.

## What you get

* Three panes: rail (220), note list (300), editor.
* Today / Daily notes, folders (one nested level), tags as filters, Tasks
  as `/tasks` (the list stays mounted), and Review as `/review` for queued
  agent writes.
* Search returns handles + coverage. `private/` is excluded and named.
* Body `#word` is text. Tags are footer chips.

The client uses `GET /v1/tags`, AIP-160 `filter`, and canonical `:verb`
paths. See [API overview](/api/overview).
