Inspiration

We wanted a better way to understand Docker Compose projects without constantly bouncing between YAML files, terminal commands, and Docker Desktop. Once a project has multiple services, volumes, and dependency conditions, it gets surprisingly hard to keep a clear mental model of what is actually running and how everything connects.

How we built it

We built VIMOKU as a desktop app using Electron, React, and TypeScript. The app discovers Docker Compose projects and standalone containers from the active Docker context, then turns them into an interactive graph using React Flow. We also built source linking so runtime-discovered projects can connect back to real Compose files and Dockerfiles, plus an in-app editor for modifying project files directly.

Under the hood, we combined filesystem-based project parsing with live Docker runtime inspection. That let us show both source-level structure and real container state in one place, including dependencies, ports, volumes, health, logs, and runtime actions like validate, build, start, and stop.

Challenges we ran into

One of the biggest challenges was identity and synchronization. A project can exist both as something discovered from Docker at runtime and as something opened directly from source, and keeping those views merged correctly without duplicates or stale state took a lot of iteration.

Another big challenge was making the graph feel stable and readable. We spent a lot of time improving layout, spacing, edge clarity, collision handling, and preserving manual node movement so the graph would feel dependable instead of jumpy. We also had to be careful about how we represented Docker health and dependency conditions, because “running,” “healthy,” and “dependency satisfied” are related but not identical concepts.

What we learned

We learned a lot about how much nuance there is in Docker Compose once you try to represent it visually and interactively. We also learned that developer tools live or die by trust: if the UI shows the wrong state, the wrong relationship, or the wrong runtime identity, it becomes confusing very quickly.

This project taught us how to design around real workflows instead of just exposing raw data. Our goal with VIMOKU was to make Docker projects easier to inspect, easier to debug, and easier to understand at a glance.

Share this project:

Updates

Submission history