Back to Home
I Built a Terminal and Code Editor

I Built a Terminal and Code Editor

Feb 16, 2026 · By Ege Uysal

Last week I built a web-based terminal, code editor, and assignment system.

I built it for an NGO called CyberMinds.

You can try it here:
https://cyber-minds.github.io/CyberMinds/

The project is fully open source:
https://github.com/Cyber-Minds/CyberMinds

Why I Built This

CyberMinds teaches cybersecurity and technical skills.

Most platforms either explain concepts without letting you try them, or they feel too heavy to actually use.

I wanted something simple.

Write code.
Run commands.
See real output.

All in the browser.

What It Does

The platform combines three things.

A code editor
A live terminal
An assignment system

Users can write code, run it, and get instant feedback.

Nothing is mocked.

The Terminal Is Real

Commands are executed on the backend and streamed back to the browser in real time.

// Create and attach to shell in container execResp, _ := cli.ContainerExecCreate(context.Background(), session.ContainerID, execConfig) attachResp, _ := cli.ContainerExecAttach(context.Background(), execResp.ID, types.ExecStartCheck{Tty: true}) defer attachResp.Close() // Stream container output to browser go func() { buf := make([]byte, readBufferSize) for { n, _ := attachResp.Reader.Read(buf) if n > 0 { chunk := strings.ToValidUTF8(string(buf[:n]), "") conn.WriteMessage(websocket.TextMessage, []byte(chunk)) } } }() // Stream browser input to container for { _, message, _ := conn.ReadMessage() attachResp.Conn.Write(message) }

This is what makes it feel responsive and real.

Assignments Make It Useful

Assignments control what users can edit, run, and submit.

They define the rules without locking users down.

const challengeCatalog = { "linux-basics": { objective: "List files, inspect permissions, and create a short report in report.txt.", steps: [ "Run pwd, whoami, and ls -la.", "Create challenge-notes and add a file named report.txt.", "Write one line summarizing current directory ownership.", ], firstCommand: "pwd", checkScript: 'set -e; test -f report.txt; test -s report.txt; grep -Eqi "(owner|permission|user|group)" report.txt', starterLang: "python", starterCode: `import os\nprint("Current directory:", os.getcwd())\n`, }, // ... other challenges };

This turns the platform from a sandbox into a learning tool.

Final Thought

This was not built as a demo.

It was built to be used.

And building it for an NGO was a good reminder that real software does not have to be about startups or revenue.

Sometimes it is just about making something that works.

I Built a Terminal and Code Editor | By Ege