Nicolas Varrot b56c80a454 feat: add scroll-to-bottom button when scrolled up in chat
Floating button appears when user scrolls away from the bottom of the
conversation, making it easy to jump back to the latest messages.
Includes i18n labels (EN/FR) and smooth scroll animation.
2026-02-11 17:56:09 +00:00
2026-02-11 00:48:43 +00:00
2026-02-11 00:48:43 +00:00

PinchChat

PinchChat

CI License: MIT Node.js Docker Website

A sleek, dark-themed webchat UI for OpenClaw — monitor sessions, stream responses, and inspect tool calls in real-time.

🖼️ Screenshot coming soon — contributions welcome!

Features

  • 🌑 Dark neon theme — easy on the eyes, built with Tailwind CSS v4
  • 📊 Token progress bars — track token usage per session in real-time
  • 🔧 Tool call badges — expandable panels with syntax-highlighted JSON
  • 📋 Session sidebar — browse active sessions with live activity indicators
  • 📝 Markdown rendering — full GFM support with code highlighting
  • 📎 File upload — attach files to your messages
  • Streaming responses — watch the AI think in real-time
  • 🔐 Runtime login — enter gateway credentials at runtime, no secrets in the build
  • 🌐 i18n support — English and French, configurable via VITE_LOCALE

🚀 Quick Start

docker run -p 3000:80 ghcr.io/marlburrow/pinchchat:latest

Open http://localhost:3000 and enter your OpenClaw gateway URL + token on the login screen.

Or use Docker Compose:

curl -O https://raw.githubusercontent.com/MarlBurroW/pinchchat/main/docker-compose.yml
docker compose up -d

From source

Prerequisites: Node.js 18+, an OpenClaw gateway running and accessible.

git clone https://github.com/MarlBurroW/pinchchat.git
cd pinchchat
npm install
cp .env.example .env
npm run dev

Optionally edit .env to pre-fill the gateway URL:

VITE_GATEWAY_WS_URL=ws://localhost:18789
VITE_LOCALE=en          # or "fr" for French UI

Production build

npm run build
npx vite preview

Or serve the dist/ folder with nginx, Caddy, or any static file server.

⚙️ Configuration

All configuration is optional — credentials are entered at runtime via the login screen.

Variable Description Default
VITE_GATEWAY_WS_URL Pre-fill the gateway URL on the login screen ws://<hostname>:18789
VITE_LOCALE UI language (en or fr) en

Note: The gateway token is entered at runtime and stored in localStorage — it is never baked into the build.

🏗 Architecture

graph TD
    subgraph Browser["🌐 PinchChat (Browser)"]
        Login["LoginScreen<br/><i>credentials</i>"]
        App["App.tsx<br/><i>router</i>"]
        UI["Chat + Sidebar<br/><i>main UI</i>"]
        Hook["useGateway<br/><i>WebSocket state machine</i><br/>auth · sessions · messages"]

        Login --> App --> UI
        App & UI --> Hook
    end

    Hook <-->|"WebSocket (JSON frames)"| Gateway["🔌 OpenClaw Gateway<br/><code>ws://host:18789</code>"]
    Gateway <-->|API| LLM["🤖 LLM Provider<br/><i>Anthropic, OpenAI, etc.</i>"]

Key Components

File Role
src/hooks/useGateway.ts WebSocket connection, auth, message streaming, session management
src/components/LoginScreen.tsx Runtime credential entry (stored in localStorage)
src/components/Chat.tsx Message list with auto-scroll and streaming display
src/components/ChatInput.tsx Input with file upload, paste, drag & drop, image compression
src/components/ChatMessage.tsx Markdown rendering, tool calls, thinking blocks
src/components/Sidebar.tsx Session list with token usage bars and activity indicators
src/components/Header.tsx Connection status, token progress bar, logout
src/lib/i18n.ts Lightweight i18n (English + French)
src/lib/gateway.ts WebSocket protocol helpers and message types

Data Flow

  1. Login — User enters gateway URL + token → stored in localStorage
  2. ConnectuseGateway opens a WebSocket and authenticates with the token
  3. Sessions — Gateway pushes session list; user selects one in the sidebar
  4. Messages — Messages stream in via WebSocket frames; the hook assembles partial chunks into complete messages
  5. Send — User input (+ optional file attachments) is sent as a JSON frame over the WebSocket

🛠 Tech Stack

📄 License

MIT © Nicolas Varrot

🤝 Contributing

Contributions are welcome! See CONTRIBUTING.md for guidelines.

  • OpenClaw — the AI agent platform PinchChat connects to
Description
No description provided
Readme MIT 9.2 MiB
Languages
TypeScript 96.9%
CSS 1.9%
JavaScript 0.6%
HTML 0.5%