diff --git a/README.md b/README.md
new file mode 100644
index 0000000..18c9df7
--- /dev/null
+++ b/README.md
@@ -0,0 +1,96 @@
+
+
+
+ wgBill
+
+
+
+Photograph a shared grocery receipt, pick who's splitting what, and it uploads
+the photo to Nextcloud, shares it, and creates the matching bill(s) in
+Cospend automatically.
+
+## Quick Start
+
+```bash
+# Install dependencies
+./install.sh
+
+# Start both backend and frontend in tmux
+./run.sh
+```
+
+The app will be available at `http://localhost:5173` (frontend) and
+`http://localhost:5000` (backend).
+
+### Docker
+
+```bash
+cp backend/.env.example backend/.env # fill in, see below
+docker compose up -d --build
+```
+
+Available at `http://localhost:8080` (override with `FRONTEND_PORT`). Put
+your own TLS-terminating reverse proxy in front for anything beyond
+localhost, and set `SESSION_COOKIE_SECURE=true` once you do.
+
+## Tech Stack
+
+- **Frontend:** React, Vite, TypeScript, Tailwind CSS, installable PWA
+- **Backend:** Flask, SQLite
+- **Auth:** Nextcloud Login Flow v2 - each user logs in with their own NC
+ account, no shared credentials
+- **Receipt extraction:** any OpenAI-compatible vision model (OpenAI,
+ Gemini, ...), configurable, not hardcoded to one provider
+
+## How it works
+
+1. Take a photo of a receipt (or drop one in on desktop).
+2. A vision model extracts the store name, date, and line items - fix
+ anything it got wrong.
+3. Tap items to include them (splits with everyone by default), or expand
+ one to pick specific people instead.
+4. The app groups items by identical split and creates one bill per group -
+ a Cospend bill can only have one split, so a receipt with a "shared" item
+ and a "just me" item becomes two bills automatically.
+5. Each bill's photo is uploaded to the submitting user's own Nextcloud
+ files, shared as a public link, and the bill is created in Cospend with
+ that link in its title (Cospend's UI only picks up a link there, not in
+ the comment) and an itemized breakdown in the comment.
+
+## Configuration
+
+Copy `backend/.env.example` to `backend/.env` and fill in:
+- Your Nextcloud server address
+- A vision provider (base URL, API key, model) - OpenAI, Gemini's
+ OpenAI-compatible endpoint, or anything else speaking that API
+- `TOKEN_ENCRYPTION_KEY` (generate with the command in the file) - encrypts
+ stored Nextcloud app passwords at rest
+
+There's nothing to configure for auth beyond that - users log in themselves
+via Nextcloud, nothing is hardcoded per-account.
+
+## Project Structure
+
+```
+backend/
+ app/
+ auth.py, auth_routes.py # Nextcloud Login Flow v2, sessions
+ nc_client.py # WebDAV upload + public share (per user)
+ cospend_client.py # Cospend OCS API (per user)
+ llm_client.py # receipt -> {store, date, items} extraction
+ routes.py # /api/* - receipts, groups, bills
+ schema.sql # users, sessions, receipts, groups
+frontend/
+ src/
+ components/
+ LoginGate.tsx # login flow UI
+ CaptureStep.tsx # photo capture / drag-drop
+ GroupStep.tsx # item review + splitting + submission
+ SummaryStep.tsx
+ api.ts # backend client
+```
+
+## Documentation
+
+- **[PLAN.md](PLAN.md)** - original feasibility research and architecture
+ plan (Nextcloud/Cospend API details, verified against real source)