diff --git a/README.md b/README.md
index eb337a8..eb42525 100644
--- a/README.md
+++ b/README.md
@@ -38,27 +38,9 @@ The app focuses on a calm interface for watching videos, managing subscriptions,
- Download jobs through a separate downloader service.
- A Docker Compose stack for self-hosting the frontend, backend, cache, database, token service, and artifact storage.
-## Stack
-
-| Role | Tool |
-|---|---|
-| Language | TypeScript |
-| Runtime | Bun |
-| Build | Vite |
-| UI | React |
-| Routing | TanStack Router |
-| Server state | TanStack Query |
-| Client state | Zustand |
-| Player | Vidstack |
-| Styling | Tailwind CSS |
-| Components | shadcn/ui + Radix UI |
-| Quality | Biome, Sherif, Knip |
-| Deployment | Docker Compose |
-| License | MIT |
-
## Self-hosting
-The fastest path is the installer:
+The installer is for running the stack, not just cloning the source repositories:
```sh
curl -fsSL https://raw.githubusercontent.com/Priveetee/TypeType/main/scripts/install-stack.sh | bash
@@ -66,6 +48,12 @@ curl -fsSL https://raw.githubusercontent.com/Priveetee/TypeType/main/scripts/ins
It installs to `~/typetype-stack`, generates local downloader credentials, chooses free ports when needed, starts the services, and bootstraps Garage.
+To download stack files without starting Docker:
+
+```sh
+curl -fsSL https://raw.githubusercontent.com/Priveetee/TypeType/main/scripts/install-stack.sh | bash -s -- --download-only
+```
+
For an interactive setup from a cloned repository:
```sh
@@ -84,6 +72,32 @@ docker compose ps
Default local endpoints are `http://localhost:8082` for the frontend, `http://localhost:8080` for the API, and `http://localhost:8081` for the token service. Host ports can be changed through `.env`.
+## Stack
+
+| Role | Tool |
+|---|---|
+| Language |
TypeScript |
+| Runtime |
Bun |
+| Build |
Vite |
+| UI |
React |
+| Routing and server state |
TanStack Router + Query |
+| Styling |
Tailwind CSS |
+| Components |
shadcn/ui +
Radix UI |
+| Quality |
Biome +
Knip |
+| Deployment |
Docker Compose |
+| License | MIT |
+
+## Source repositories
+
+If you only want the source code, clone the repositories directly:
+
+```sh
+git clone https://github.com/Priveetee/TypeType.git
+git clone https://github.com/Priveetee/TypeType-Server.git
+git clone https://github.com/Priveetee/TypeType-Downloader.git
+git clone https://github.com/Priveetee/TypeType-Token.git
+```
+
## Local development
Install dependencies:
@@ -121,10 +135,6 @@ bun run knip
bun run sherif
```
-## Docker images
-
-Images are published to GitHub Container Registry: `typetype`, `typetype-server`, `typetype-downloader`, and `typetype-token`. Published tags include `latest`, `main`, branch tags, release tags, and `sha-`.
-
## Updating
Update the whole stack:
@@ -142,13 +152,6 @@ docker compose pull typetype
docker compose up -d --force-recreate --no-deps typetype
```
-## Related projects
-
-- [TypeType-Server](https://github.com/Priveetee/TypeType-Server) is the Kotlin backend.
-- [TypeType-Downloader](https://github.com/Priveetee/TypeType-Downloader) handles downloadable artifacts.
-- [TypeType-Token](https://github.com/Priveetee/TypeType-Token) provides proof-of-origin tokens.
-- [TypeType-Android](https://github.com/Priveetee/TypeType-Android) is the native Android client.
-
## Acknowledgments
TypeType is a clean rewrite, but the product direction was shaped by existing open-source video clients and extractor projects.
diff --git a/scripts/install-stack.sh b/scripts/install-stack.sh
index 6bb183c..0bc8f0b 100755
--- a/scripts/install-stack.sh
+++ b/scripts/install-stack.sh
@@ -311,8 +311,10 @@ if [[ ${START_STACK} -eq 0 ]]; then
fi
if ! confirm_tty "Proceed with Docker pull + startup in ${INSTALL_DIR}?"; then
- echo "[install] Cancelled by user."
- exit 1
+ echo "[install] Stack files are ready in ${INSTALL_DIR}."
+ echo "[install] Docker startup skipped."
+ echo "[install] Next step: cd ${INSTALL_DIR} && ./scripts/setup-stack.sh"
+ exit 0
fi
echo "[install] Pulling Docker images..."