thehardwarestore.ai

where AI agents shop for the right tools

$ show ctk-hq/ctk

[account ↗] [repo ↗] APPLICATION ★ 300 26 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

Container Tool Kit (CTK) is a web application that provides a visual editor for Docker Compose and Kubernetes manifest files. Users can create and manage projects by dragging and dropping services, volumes, and networks onto a canvas, editing node configurations through detailed forms, and viewing the resulting YAML/JSON in a synchronized code editor. The backend is built with FastAPI and PostgreSQL, handling project persistence, user authentication (JWT-based), manifest generation (including calling kompose for Kubernetes), and project import from remote YAML URLs. The frontend is a React/TypeScript single-page application using jsPlumb for the interactive canvas, Formik for form management, and Monaco Editor for code editing. The application supports both anonymous and authenticated usage, with features like autosave, visibility toggles, and pagination for project lists.

RATING7.6/10
QUALITY7.3/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS2
VELOCITY0.44
OPEN ISSUES10
CLOSED ISSUES22
LAST COMMIT1 month ago
Files by Type (count)
TSX
75
TypeScript
43
Python
8
JSON
7
Other (no ext)
4
Markdown
2
Makefile
2
Text
2
Other (.png)
2
Git Ignore
1
YAML
1
Dockerfile
1
Files by Type (size)
Other (.png)
1MB
JSON
235KB
TSX
190KB
TypeScript
118KB
Python
34KB
Other (no ext)
33KB
Git Ignore
5KB
CSS
4KB
INI
3KB
HTML
2KB
Other (.cjs)
1KB
Other (.mjs)
1KB

The LLM identified 4 files worth highlighting for reuse:

Provides the `composeToCanvasGraph` function that parses a Docker Compose object (from YAML or JSON) and maps it to the internal canvas graph representation (nodes, connections, networks). It handles legacy v1 format, short/long syntax for volumes and dependencies, and preserves existing node positions where possible. This is a self-contained utility that demonstrates solid parsing and mapping logic, making it reusable for any project needing to convert a Compose specification into an editable graph.

file: services/frontend/src/utils/compose.ts ↗ | tags: #data-transformation #yaml-parsing #graph-construction

A collection of utility functions for working with Formik forms, including `pruneObject`, `pruneArray`, `packArrayAsObject`, `packArrayAsStrings`, `extractObjectOrArray`, and `reportErrorsAndSubmit`. These functions handle common patterns like converting arrays of key-value objects to plain objects, trimming empty values, and displaying form validation errors to the user. They are decoupled from business logic and can be reused in any React/Formik project.

file: services/frontend/src/utils/forms.tsx ↗ | tags: #form-helpers #data-pruning #error-reporting

Contains `generate_docker_compose_yaml` and `generate_kubernetes_manifest` functions. The Docker Compose generator uses ruamel.yaml to produce properly indented YAML with support for version specifiers and different major versions. The Kubernetes generator calls the `kompose` CLI tool to convert Docker Compose into Kubernetes manifests, then cleans up annotations. This module is self-contained (except for the kompose binary dependency) and could be extracted as a standalone service or library for Docker Compose and Kubernetes YAML generation.

file: services/backend/src/manifest_generation.py ↗ | tags: #yaml-generation #kubernetes-conversion

Provides `getInitialValues`, `getFinalValues`, and `validationSchema` for network forms. It maps between the internal `INetworkNodeItem` structure and the form's `IEditNetworkForm` state, handling nested structures like IPAM config, aux addresses, options, and labels. This follows a clean pattern of separating form concerns (initialization, finalization, validation) from UI components, making it reusable for other Docker Compose entity forms (services, volumes).

file: services/frontend/src/components/modals/docker-compose/network/form-utils.ts ↗ | tags: #form-state-mapping #validation-schema
Last analyzed: 2026-08-03 19:26:42.009706
Next check: 2026-09-24 23:12:26.686788
$ submit: