diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..9c3217c
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+ko_fi: WonderAliceUwU
diff --git a/README.md b/README.md
index be60c25..da9c84c 100644
--- a/README.md
+++ b/README.md
@@ -1,144 +1,147 @@
-# OmniArr
+# OmniArr - Every Arr unified
-React + TypeScript frontend with a built-in Node backend for:
+Self-hosted media discovery and download management for Jellyfin users.
-- Jellyfin-profile login with an `HttpOnly` session cookie
-- master-password protected administration and server-side service settings
-- Jellyfin, Sonarr, Radarr, qBittorrent and TMDb integration
-- a single production process for Docker/TrueNAS
+
-## Persistence
+OmniArr brings your favourite services together in one clean dashboard: browse
+your Jellyfin library, discover movies and series, follow upcoming releases,
+request downloads and monitor storage from a single place.
-All critical state is persisted under `OMNIARR_DATA_DIR`.
+[](https://hub.docker.com/r/wonderalice/omniarr)
+[](https://hub.docker.com/r/wonderalice/omniarr)
+[](https://github.com/WonderAliceUwU/OmniArr)
-By default inside the container that is:
+If OmniArr is useful to you, you can support its development on [Ko-fi](https://ko-fi.com/WonderAliceUwU).
-```text
-/app/data
+## What you get
+
+- It connects with all your Jellyfin users, the login stays consistent.
+- Integration with Sonarr and Radarr to manage your library.
+
+
+
+- A calendar tracking your new episodes and events.
+
+
+
+- Every discovery and search you may need.
+
+
+
+- A download manager to see what's cooking.
+
+And many things more!
+
+## Install with Docker Compose
+
+Create a directory for OmniArr and add this `docker-compose.yml`:
+
+```yaml
+services:
+ omniarr:
+ image: wonderalice/omniarr:1.1
+ container_name: omniarr
+ restart: unless-stopped
+ ports:
+ - "8787:8787"
+ environment:
+ PORT: "8787"
+ OMNIARR_DATA_DIR: /app/data
+ volumes:
+ - ${OMNIARR_DATA_DIR:-./data}:/app/data
```
-The encrypted state file is:
-
-```text
-/app/data/omniarr.secure.json
-```
-
-That file contains:
-
-- master-password verifier
-- encryption salt
-- server-managed encryption key and encrypted application settings
-
-If you do not persist `/app/data`, you will lose:
-
-- the master password
-- all integration settings
-- all saved configuration after restart, redeploy or image update
-
-## Local Development
-
-Single command:
+Then start the container:
```bash
+docker compose pull
+docker compose up -d
+```
+
+Open `http://localhost:8787` and create the master password during the first
+boot. Configure the Jellyfin, Sonarr, Radarr and qBittorrent connections from
+the Administration area.
+
+The Compose file in this repository is ready to use as-is:
+
+```bash
+curl -O https://raw.githubusercontent.com/WonderAliceUwU/OmniArr/main/docker-compose.yml
+docker compose up -d
+```
+
+Set `OMNIARR_DATA_DIR` to a host dataset when you want the data outside the
+current directory. For example, on TrueNAS:
+
+```bash
+export OMNIARR_DATA_DIR=/path/to/omniarr-data
+docker compose up -d
+```
+
+The `/app/data` mount is required. It contains the encrypted application state,
+including the master-password verifier and saved integration settings. Removing
+the mount loses that state when the container is replaced.
+
+## Docker image tags
+
+The current release is available as:
+
+```text
+wonderalice/omniarr:1.1
+wonderalice/omniarr:latest
+```
+
+Pin `1.1` in production for repeatable updates. Use `latest` only when you want
+Compose to follow the newest published image.
+
+## Build and publish
+
+To publish a multi-architecture image to Docker Hub:
+
+```bash
+docker login
+docker buildx build \
+ --platform linux/amd64,linux/arm64 \
+ -t wonderalice/omniarr:1.1 \
+ -t wonderalice/omniarr:latest \
+ --push \
+ .
+```
+
+To build locally without publishing:
+
+```bash
+docker build -t omniarr:local .
+docker run --rm -p 8787:8787 -v "$PWD/data:/app/data" omniarr:local
+```
+
+## Local development
+
+Requirements: Node.js 22 or newer and npm.
+
+```bash
+npm ci
npm run dev:all
```
-That starts:
-
-- Vite frontend
-- Node API server
-
-If you want them separately:
-
-```bash
-npm run dev:server
-npm run dev
-```
-
-## Production
-
-Build and serve:
-
-```bash
-npm run serve
-```
-
-Or separately:
+The production build can be checked with:
```bash
+npm run lint
npm run build
-npm run start
```
-The production server serves both the static frontend and the API on the same port.
+## Data and security
-## Docker
+OmniArr keeps critical state under `OMNIARR_DATA_DIR` (by default
+`/app/data` inside the container). The encrypted store is written to
+`/app/data/omniarr.secure.json`.
-Build:
+Keep the data directory private, use a strong master password and provide the
+TMDb token through the Administration area. It is stored encrypted with the
+rest of the application configuration.
-```bash
-docker build -t omniarr .
-```
+## License
-Run with persistence:
-
-```bash
-docker run -d \
- --name omniarr \
- --restart unless-stopped \
- -p 8787:8787 \
- -e PORT=8787 \
- -e OMNIARR_DATA_DIR=/app/data \
- -e TMDB_BEARER_TOKEN=your_tmdb_bearer_token \
- -v /path/on/host/omniarr-data:/app/data \
- omniarr
-```
-
-## Docker Compose
-
-There is a ready [docker-compose.yml](./docker-compose.yml).
-
-Start it with:
-
-```bash
-docker compose up -d --build
-```
-
-The default compose file uses:
-
-```text
-./data:/app/data
-```
-
-For TrueNAS, replace `./data` with a persistent dataset path if you prefer bind mounts managed outside the app directory.
-
-## TrueNAS Notes
-
-Recommended app/container settings:
-
-- Container port: `8787`
-- Host port: your choice, commonly `8787`
-- Storage mount: persistent dataset -> `/app/data`
-- Restart policy: `unless-stopped`
-
-Recommended environment variables:
-
-- `PORT=8787`
-- `OMNIARR_DATA_DIR=/app/data`
-- `TMDB_BEARER_TOKEN=...` if you want TMDb configured at deploy time
-
-Example host dataset mount:
-
-```text
-/path/to/omniarr-data -> /app/data
-```
-
-That dataset is the piece that must survive updates and image replacements.
-
-## First Boot
-
-On first boot there is no default password.
-
-You create the master password in the UI. It protects the Administration area; viewers sign in from the profile screen using their own Jellyfin password.
-
-After that, OmniArr stores only the verifier and encrypted settings in `/app/data/omniarr.secure.json`.
+OmniArr is currently distributed as a private project. See the repository for
+the licensing status of your copy.