Full-Stack Platform

EasyShell

Project type: Open source

A multi-service platform where learners solve shell challenges in a real browser-based terminal. The front-end, a Go WebSocket session manager, a Node submission processor, and Docker-based testcase containers all coordinate so every keystroke and every assertion runs against a real shell — not a sandbox simulation.

The Challenge

Teaching shell commands with fake sandboxes fails the moment learners need to understand real session state. Real shells are stateful, concurrent, and dangerous — isolating each user's session, capturing terminal output reliably, and validating arbitrary commands against expected state at scale are genuinely hard problems that no off-the-shelf learning tool solves.

Our Approach

  • pnpm monorepo with four apps — Next.js website, Go session manager, Node submission manager, and a Docker entrypoint — sharing a typed env contract
  • Go WebSocket session manager that brokers real terminal I/O for each user, with per-session isolation so one learner can never affect another
  • Submission manager spins up Docker containers from problem-defined testcase images, runs the candidate's commands, captures output, and scores it
  • Problems authored as TOML configs with markdown instructions and reproducible testcase images — adding a new problem is a file write, not a platform change
  • Drizzle + Postgres for users, problems, and attempts; NextAuth covering Discord, GitHub, Google, and email magic-links
  • Deployable as a single Docker Compose stack locally and to Cloudflare Workers + OpenNext for the web tier

What It Achieved

  • Every learner gets a real, isolated shell — not a transpiled sandbox
  • Authors add a new problem by writing a TOML file and a testcase image — no platform changes required
  • Submission scoring runs in real, disposable containers, so trick answers can't poison shared state
  • One stack handles auth across four providers without per-environment glue

Tech Stack

Next.js 16React 19TypeScriptGoNode.jsPythonWebSocketsDockerPostgreSQLDrizzle ORMNextAuthTailwind CSS v4

Want a custom learning or training platform?

If you've got a domain where hands-on practice matters more than slideware, we can build the platform.

Book a discovery call