diff --git a/README.md b/README.md
index 7a534e9..679ed68 100644
--- a/README.md
+++ b/README.md
@@ -6,86 +6,29 @@
# LimitlessX
-### No VPN. No proxy setup. No DPI hacks.
+**No VPN. No proxy setup. No DPI hacks.**
-Read region-restricted public X content directly on X.
+Read region-restricted public X (Twitter) content directly on X.
-[](https://github.com/OnurByte/LimitlessX/actions/workflows/check.yml)
-[](LICENSE)
-[](https://github.com/OnurByte/LimitlessX)
-
-[](#install)
-[](#install)
-[](docs/compatibility.md)
+[Open source](LICENSE) ⁜ MIT ⁜ Rust + TypeScript
-LimitlessX detects supported country-withholding notices and displays available public profiles, posts and replies inside X. It uses FxTwitter as an alternative public source, with no X login or separate LimitlessX account.
-
-**Open source, MIT licensed.** Rust owns fetching, validation, sessions and storage. TypeScript connects those components to the browser. All executable code ships in the extension. There is no LimitlessX backend, analytics or remote executable code.
-
-## What it does
-
-- Automatically replaces a supported regional-withholding notice with available public content.
-- Shows five posts first, then loads more as you scroll. Existing videos keep playing during feed expansion.
-- Displays profile details, media, quoted posts and available conversation replies in X's visual style.
-- Resolves exact public account identities when a username lookup fails, without confusing similarly named accounts.
-- Keeps unique local counts of successfully viewed restricted accounts and posts. Disable or clear them in the popup.
-- Uses one popup for manual URLs, current-page actions and settings. No extension reader page or iframe.
-
-## Install
-
-**Development builds. Not published in browser stores yet.** These badges describe build targets and test evidence, not store availability.
-
-Build the project below, then load the generated package:
-
-| Browser | Local installation | Verification |
-|---|---|---|
-| Chromium | Open the Extensions page, enable Developer mode, choose **Load unpacked**, select `dist/chromium` | Packaged extension integration tests |
-| Helium | Use `chrome://extensions`, enable Developer mode and load `dist/chromium` | Actual X session tested locally |
-| Firefox | Open `about:debugging`, choose **This Firefox**, **Load Temporary Add-on**, select `dist/firefox/manifest.json` | Packaged extension integration tests |
-
-Firefox temporary add-ons disappear when the browser closes. Permanent Firefox distribution requires signing. Other Chromium/Firefox variants are intended targets; see [individual browser evidence](docs/compatibility.md) before assuming compatibility.
-
-On a supported blocked X profile or post, reading starts automatically. The popup also accepts an `@handle` or an X profile/post URL.
-
-## Privacy and limits
-
-The public provider receives requested identifiers and network information, including your IP address. Media loads from X media hosts. Requests omit credentials; the extension does not read X passwords, authentication cookies or private messages. This is not an anonymity tool.
-
-The Record stores unique salted identifier hashes in local IndexedDB. It does not store post bodies or plaintext browsing history. Failed requests and ordinary manual lookups do not increase restricted-content totals.
-
-Availability depends on the provider and public source. Private content is unavailable. Timelines, replies and metadata can be incomplete; this is a focused reader, not a complete authenticated X client. Identity recovery fixes a known username-lookup failure, not every possible provider outage. Read the [privacy details](docs/privacy.md) and [release audit](docs/verification/release-audit.md).
-
-## Build
-
-Requirements: Node.js 22+, npm, rustup, Python for browser tests, `wasm-bindgen` 0.2.129 and Binaryen `version_133`. Rust 1.99.1 and the WASM target are pinned in `rust-toolchain.toml`.
+## Download
-```sh
-npm ci --ignore-scripts
-cargo install wasm-bindgen-cli --version 0.2.129 --locked
-# Install Binaryen version_133 and place wasm-opt on PATH.
-cargo xtask build chromium
-cargo xtask build firefox
-cargo xtask test
-cargo xtask package
-```
+| Chrome, Helium, Brave, Edge, Opera, Vivaldi | Firefox |
+| :---: | :---: |
+| | |
+| [**Download ZIP**](https://github.com/OnurByte/LimitlessX/releases/latest/download/limitlessx-chromium.zip) | [**Download ZIP**](https://github.com/OnurByte/LimitlessX/releases/latest/download/limitlessx-firefox.zip) |
-If needed, set `WASM_BINDGEN` and `WASM_OPT` to their executable paths. `cargo xtask` typechecks and compiles the handwritten TypeScript adapters; application logic remains in Rust. Packages and a reviewable source archive are written to `dist/releases`.
+**Chrome and related browsers:** extract the ZIP, open the Extensions page, enable **Developer mode**, then **Load unpacked** and select the extracted folder.
-## Verify and contribute
+**Firefox:** extract the ZIP, open `about:debugging` → **This Firefox** → **Load Temporary Add-on**, then select `manifest.json`. This unsigned add-on must be loaded again after restarting Firefox.
-```sh
-npm run typecheck
-cargo fmt --all -- --check
-cargo clippy --workspace --all-targets --locked -- -D warnings
-cargo clippy --target wasm32-unknown-unknown -p limitless-runtime -p limitless-ui --locked -- -D warnings
-python3 -m pip install -r tests/browser/requirements.txt
-python3 -m playwright install chromium firefox
-```
+## Use
-The [CI workflow](.github/workflows/check.yml) runs native checks, builds both packages and exercises the installed extensions. Browser fixtures cover malformed responses, identity recovery, navigation, pagination, counters and retry behavior. Firefox's inline test also uses a live public provider response; that dependency is disclosed in its output.
+Open a region-restricted profile or post on X. Available public content appears automatically. Five posts load first; scroll for more. The popup accepts an `@handle` or X URL and keeps your viewing counts locally.
-Issues and pull requests are welcome. Keep permissions narrow, executable code local, provider text escaped and public/private boundaries explicit. Include a regression test for behavioral fixes. See [architecture](docs/architecture.md), [design](docs/brand.md) and [browser tests](tests/browser).
+Public data comes from [FxTwitter](https://github.com/FxEmbed/FxEmbed). Availability varies; private accounts are unavailable. No X credentials or analytics. [Privacy](docs/privacy.md) ⁜ [Browser compatibility](docs/compatibility.md)
-Built with Rust, WebAssembly, Leptos and TypeScript. Public data via [FxTwitter / FxEmbed](https://github.com/FxEmbed/FxEmbed).
+[Build from source](docs/build.md) ⁜ [Architecture](docs/architecture.md) ⁜ [Tests](.github/workflows/check.yml)
diff --git a/docs/browsers/SOURCES.md b/docs/browsers/SOURCES.md
new file mode 100644
index 0000000..804704f
--- /dev/null
+++ b/docs/browsers/SOURCES.md
@@ -0,0 +1,7 @@
+# Browser icons
+
+Chrome, Firefox, Brave, Edge, Opera and Vivaldi: [Browser Logos](https://github.com/alrra/browser-logos/tree/58881b84c4d73adc03c06fa2c275a7abee02d935/src).
+
+Helium: [official branding](https://github.com/imputnet/helium/blob/58261a24341935be831fa3b97d31c46232c81b59/resources/branding/product_logo.svg).
+
+Browser names, logos and trademarks belong to their respective owners. They identify package targets and do not imply endorsement or browser-store publication.
diff --git a/docs/browsers/brave.svg b/docs/browsers/brave.svg
new file mode 100644
index 0000000..fb5ed8b
--- /dev/null
+++ b/docs/browsers/brave.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/browsers/chrome.svg b/docs/browsers/chrome.svg
new file mode 100644
index 0000000..dcc3b11
--- /dev/null
+++ b/docs/browsers/chrome.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/browsers/edge.svg b/docs/browsers/edge.svg
new file mode 100644
index 0000000..b2afc8e
--- /dev/null
+++ b/docs/browsers/edge.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/browsers/firefox.svg b/docs/browsers/firefox.svg
new file mode 100644
index 0000000..f153ced
--- /dev/null
+++ b/docs/browsers/firefox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/browsers/helium.svg b/docs/browsers/helium.svg
new file mode 100644
index 0000000..ef2fcef
--- /dev/null
+++ b/docs/browsers/helium.svg
@@ -0,0 +1 @@
+
diff --git a/docs/browsers/opera.svg b/docs/browsers/opera.svg
new file mode 100644
index 0000000..6e79822
--- /dev/null
+++ b/docs/browsers/opera.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/browsers/vivaldi.svg b/docs/browsers/vivaldi.svg
new file mode 100644
index 0000000..2084b97
--- /dev/null
+++ b/docs/browsers/vivaldi.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/build.md b/docs/build.md
new file mode 100644
index 0000000..4f81750
--- /dev/null
+++ b/docs/build.md
@@ -0,0 +1,23 @@
+# Build from source
+
+Use Node.js 22+, npm and rustup. The repository pins Rust 1.99.1 and the WASM target. Install wasm-bindgen 0.2.129 and Binaryen version_133.
+
+```sh
+npm ci --ignore-scripts
+cargo install wasm-bindgen-cli --version 0.2.129 --locked
+# Install Binaryen version_133 and put wasm-opt on PATH.
+cargo xtask package
+```
+
+Set `WASM_BINDGEN` and `WASM_OPT` if those executables are not on PATH. See [tool paths](../scripts/tools.env.example).
+
+Packages are written to `dist/releases`. The handwritten browser adapters are checked and compiled from strict TypeScript; application logic stays in Rust. No npm runtime dependency ships.
+
+```sh
+cargo xtask test
+cargo fmt --all -- --check
+cargo clippy --workspace --all-targets --locked -- -D warnings
+cargo clippy --target wasm32-unknown-unknown -p limitless-runtime -p limitless-ui --locked -- -D warnings
+```
+
+Browser dependencies and commands are documented in the [CI workflow](../.github/workflows/check.yml). Install the harness with `python3 -m pip install -r tests/browser/requirements.txt` and `python3 -m playwright install chromium firefox`.