[READ-ONLY] Mirror of https://github.com/aaronateataco/ermine. A stoat web client erminechat.vercel.app
0

Configure Feed

Select the types of activity you want to include in your feed.

Add files via upload

authored by

Fascinating Pistachio and committed by
GitHub
(Feb 16, 2026, 8:52 AM UTC) 912ec0f0 32b8a51f

+88 -42
+88 -42
README.md
··· 1 1 # Ermine 2 2 3 - Ermine is a Discord-inspired web client for **stoat.chat** with custom branding and a cleaner layout. It is currently **experimental**, known to be **buggy**, and still missing many expected features. 3 + ```{=html} 4 + <p align="center"> 5 + ``` 6 + `<img src="https://github.com/FascinatingPistachio/ermine/blob/main/assets/android-chrome-192x192.png?raw=true" width="96" />`{=html} 7 + ```{=html} 8 + </p> 9 + ``` 10 + Ermine is a refined, Discord-inspired web client for **stoat.chat**. 11 + 12 + It prioritizes clarity, hierarchy, and composure while preserving core 13 + Stoat/Revolt functionality. 14 + 15 + This project is **experimental** and under active development. 16 + 17 + ------------------------------------------------------------------------ 18 + 19 + ## Interface 20 + 21 + - Structured three-column layout 22 + - Space rail\ 23 + - Channel sidebar\ 24 + - Timeline + composer\ 25 + - Member panel 26 + - Focused interaction model 27 + - Reduced visual noise\ 28 + - Sharper spacing and hierarchy\ 29 + - Controlled color system 30 + - Composed system copy 31 + - "Preferences" instead of "User Settings"\ 32 + - "Direct" instead of "Friends"\ 33 + - "Live" instead of "Active Now" 34 + 35 + Familiar structure. Cleaner execution. 4 36 5 - ## Highlights 37 + ------------------------------------------------------------------------ 6 38 7 - - **Discord-like shell layout** 8 - - Server rail on the left 9 - - Channel list sidebar 10 - - Main chat timeline + composer 11 - - Member list on the right 12 - - **Ermine branding** 13 - - Updated login screen branding and copy 14 - - Ermine references in app chrome 15 - - **Better UX defaults** 16 - - Improved spacing, hierarchy, and color consistency 17 - - Friend list landing experience for `@me` 18 - - Profile popout modal for users/members 19 - - **Core Stoat/Revolt functionality preserved** 20 - - Session login (credentials or token) 21 - - Config discovery from API root 22 - - Realtime events over websocket 23 - - Message sending and timeline updates 39 + ## Functionality 40 + 41 + Core Stoat/Revolt capabilities are preserved: 42 + 43 + - Session login (credentials or token) 44 + - API root configuration discovery 45 + - Realtime events over WebSocket 46 + - Message sending and timeline updates 47 + - Profile popout modal 48 + - `@me` landing experience 49 + 50 + ------------------------------------------------------------------------ 24 51 25 52 ## Configuration 26 53 27 - The client defaults to: 54 + Default endpoints: 55 + 56 + - API: `https://api.stoat.chat` 57 + - WebSocket: `wss://stoat.chat/events` 58 + - CDN: `https://autumn.revolt.chat` 59 + 60 + Connection overrides are available under: 61 + 62 + **Advanced connection configuration** 28 63 29 - - API: `https://api.stoat.chat` 30 - - WebSocket: `wss://stoat.chat/events` 31 - - CDN: `https://autumn.revolt.chat` 64 + No restart required. 65 + 66 + ------------------------------------------------------------------------ 67 + 68 + ## Local Development 69 + 70 + Main application entry: 32 71 33 - You can override these in **Advanced connection settings** on the login screen. 72 + - `src/App.jsx` 34 73 35 - ## Local development 74 + Run using your existing React + Tailwind setup. 36 75 37 - This repository currently contains the main app component at: 76 + ------------------------------------------------------------------------ 38 77 39 - - `src/App.jsx` 78 + ## Deployment (Vercel) 40 79 41 - Use your existing React/Tailwind host setup to run it locally. 80 + Includes `vercel.json` SPA rewrite support so deep links resolve to `/`. 42 81 43 - ## Brand direction 82 + Optional environment variables: 44 83 45 - This app is intentionally branded as **Ermine**, designed for the **stoat.chat** ecosystem while keeping a familiar Discord-like interaction model. 84 + - `VITE_STOAT_API_URL` 85 + - `VITE_STOAT_WS_URL` 86 + - `VITE_STOAT_CDN_URL` 46 87 88 + Values are injected at build time. Manual overrides remain available 89 + from the login screen. 47 90 48 - ## Deploying on Vercel 91 + ------------------------------------------------------------------------ 49 92 50 - This project includes a `vercel.json` SPA rewrite so deep links resolve correctly to `/` (framework entrypoint) on Vercel, which avoids hard-coding an `index.html` file. 93 + ## Privacy 51 94 52 - For environment-specific endpoints, set these Vercel environment variables: 95 + - Session continuity is maintained using browser cookies: 96 + - `ermine_session_token` 97 + - `ermine_user_id` 98 + - `ermine_api_url` 99 + - Ermine does not store user content outside configured stoat.chat 100 + endpoints. 101 + - Network communication is limited to selected API, WebSocket, and CDN 102 + endpoints. 103 + - See `privacy-policy.html` for the user-facing notice. 53 104 54 - - `VITE_STOAT_API_URL` 55 - - `VITE_STOAT_WS_URL` 56 - - `VITE_STOAT_CDN_URL` 105 + ------------------------------------------------------------------------ 57 106 58 - The app will use those values at build time, while still allowing manual overrides from **Advanced connection settings** on the login screen. 107 + ## Direction 59 108 60 - ## Privacy and GDPR direction 109 + Ermine is the composed interface layer for the stoat.chat ecosystem. 61 110 62 - - Ermine stores session details in browser cookies (`ermine_session_token`, `ermine_user_id`, `ermine_api_url`) for authentication continuity. 63 - - Ermine does not persist personal user data on Ermine repositories or Ermine-hosted servers. 64 - - Network communication is limited to configured official stoat.chat endpoints. 65 - - See `privacy-policy.html` for the user-facing privacy notice. 111 + Minimal shell. Full control.