Winston

A browser-based IDE built mobile-first: Monaco editor, real terminal sessions, an AI chat agent, and git panel, served over LAN so any device on the network can code.

  • TypeScript
  • Fastify
  • React
  • node-pty
Winston IDE with the Monaco editor open, file tree, terminal panel, and chat panel
Open full-size screenshot or illustration

What it is

Winston is a browser-based IDE served over the local network. The premise: your development environment should be reachable from your phone, tablet, or any machine on the LAN, without the interface falling apart on a small screen.

The problem it solves

Most remote-development tools treat mobile as a demo case. Real work happens in odd moments - reviewing a diff from the couch, running a command from a phone, editing a config from a laptop that has nothing installed. Winston treats the small screen as a first-class target while scaling up to a full desktop IDE experience.

My contribution

I built the server and client: the Fastify server with node-pty terminal sessions, the React frontend with resizable panes, the mobile-first navigation, and the OpenAI-compatible chat agent with tool use for file editing, terminal commands, and code search.

Architecture

  • Server: Node.js with Fastify, WebSocket transport, and real terminal sessions through node-pty - not a web shell simulation.
  • Frontend: React with Monaco Editor, xterm.js, and Allotment split panes.
  • AI: any OpenAI-compatible provider (Ollama, OpenRouter, or others), streaming with tool use.
  • PWA: service worker with offline support, share target, and install-to-home-screen.

Engineering decisions

Real terminals via node-pty. Simulating a shell in the browser breaks the moment a tool reads a TTY; node-pty keeps every CLI tool behaving as if a human typed it.

Mobile layout as a distinct mode, not a squeezed desktop. Bottom tab navigation across Files, Editor, Terminal, and Chat, with touch-optimized passive event listeners, rather than shrinking the desktop grid.

Provider-agnostic AI. The chat agent speaks the OpenAI-compatible protocol, so local models and hosted models are configuration, not different integrations.

Stack

TypeScript, Node.js, Fastify, node-pty, React, Vite, Monaco, xterm.js, WebSocket.

The walkthrough above was recorded against a scratch repository containing fictional sample code. Cross-device state sync is a feature of the product; this site does not host a terminal server.