|
Download README.md from Vvbbnnn/shell: direct link, hf CLI and curl.
- Browser
- Download file 4.64 kB
-
https://huggingface.co/spaces/Vvbbnnn/shell/resolve/main/README.md
- Command line
-
hf download hf://spaces/Vvbbnnn/shell/README.md
-
curl -L -o README.md https://huggingface.co/spaces/Vvbbnnn/shell/resolve/main/README.md
4.64 kB
| title: Shellular Web UI | |
| emoji: π₯οΈ | |
| colorFrom: blue | |
| colorTo: indigo | |
| sdk: docker | |
| pinned: false | |
| # Shellular Web UI | |
| A self-hosted web interface that runs **[Shellular](https://shellular.dev)** inside a Hugging Face Space and shows the pairing QR code in your browser β no terminal access needed. | |
| --- | |
| ## What it does | |
| - Password-protected login page hosted on your HF Space URL | |
| - Starts Shellular automatically after login and renders a scannable QR code | |
| - All traffic between your phone and the host is **end-to-end encrypted** (libsodium) | |
| - One-time setup panel guides you through saving permanent secrets so restarts are instant | |
| --- | |
| ## Architecture | |
| ``` | |
| Your Phone ββscan QRβββΆ Shellular App | |
| β | |
| wss://api.shellular.dev (relay, E2E encrypted) | |
| β | |
| HF Space | |
| (Node.js + Shellular CLI) | |
| ``` | |
| --- | |
| ## Quick Start | |
| ### Step 1 β Fork the Space | |
| Click **Duplicate this Space** on the top-right of this Space page. | |
| ### Step 2 β Add `SECRET_KEY` | |
| Go to your forked Space β **Settings β Variables and secrets β New secret** | |
| | Name | Value | | |
| |------|-------| | |
| | `SECRET_KEY` | Any strong password β this is the login password for the web UI | | |
| The Space will restart automatically. | |
| ### Step 3 β Login | |
| Open your Space URL (`https://your-username-vps.hf.space`), enter your `SECRET_KEY` and click **Login**. | |
| Shellular starts automatically. Within a few seconds the QR code appears. | |
| ### Step 4 β Scan the QR code | |
| Install the **Shellular app** on your phone β [shellular.dev](https://shellular.dev) | |
| Open the app and scan the QR code on the dashboard. Your phone is now connected. | |
| ### Step 5 β Save the permanent secrets (important!) | |
| After the QR code appears, a **β‘ One-time Setup** panel appears showing three values with **Copy** buttons. | |
| Add all three as secrets in your Space settings: | |
| **Space β Settings β Variables and secrets β New secret** | |
| | Secret name | Where to get it | | |
| |-------------|-----------------| | |
| | `SHELLULAR_HOST_ID` | Copy from the One-time Setup panel | | |
| | `SHELLULAR_MACHINE_ID` | Copy from the One-time Setup panel | | |
| | `SHELLULAR_KEY` | Copy from the One-time Setup panel | | |
| After adding all three, restart the Space. The setup panel disappears permanently. | |
| > **Why are these needed?** | |
| > Shellular calls `api.shellular.dev` to register on every cold start. | |
| > That API is rate-limited β if the Space restarts too often, registration fails | |
| > and the QR never appears. Saving these three values means Shellular reuses the | |
| > same registered identity on every restart with no API call at all. | |
| --- | |
| ## All Secrets Reference | |
| | Name | Required | Description | | |
| |------|----------|-------------| | |
| | `SECRET_KEY` | β Always | Login password for the web UI. Choose anything strong. | | |
| | `SHELLULAR_HOST_ID` | β Strongly recommended | The relay server's ID for this host. Shown in the One-time Setup panel. | | |
| | `SHELLULAR_MACHINE_ID` | β Strongly recommended | Hashed machine identifier tied to the registration. Shown in the One-time Setup panel. | | |
| | `SHELLULAR_KEY` | β Strongly recommended | 32-byte base64 E2E encryption key. Shown in the One-time Setup panel. | | |
| --- | |
| ## Troubleshooting | |
| ### QR code doesn't appear / "Shellular stopped" | |
| The Shellular registration API was rate-limited. | |
| **Fix:** Save the three `SHELLULAR_*` secrets from the One-time Setup panel (Step 5). Once saved, Shellular skips registration on every restart β no rate limit, instant QR. | |
| If you have not yet seen the One-time Setup panel (e.g. the first registration also failed), wait a few minutes and click **βΆ Restart** on the dashboard to try again. | |
| ### "Invalid key" on login | |
| `SECRET_KEY` is not set or was typed incorrectly. Check **Settings β Variables and secrets**. | |
| ### One-time Setup panel not appearing | |
| The panel only appears after the QR code is successfully rendered for the first time AND the `SHELLULAR_*` secrets are not yet saved. If the QR rendered but the panel did not appear, refresh the page and log in again. | |
| --- | |
| ## Project Structure | |
| ``` | |
| βββ app.js # Express server β auth, SSE, shellular lifecycle | |
| βββ package.json | |
| βββ Dockerfile # Node 20-slim, pinned machine-id for stable registration | |
| βββ public/ | |
| βββ index.html # Login page + dashboard (QR, One-time Setup, Output log) | |
| βββ style.css # Dark theme | |
| βββ app.js # Frontend JS | |
| βββ qrcode.min.js # Bundled QR renderer (no CDN dependency) | |
| ``` | |