Contruck
A visual drag-and-drop canvas where developers assemble Python infrastructure packages into a wired application stack and export a ready-to-run project ZIP with generated code and bundled wheels
Overview
Contruck is a web app that replaces Python project boilerplate with a visual assembly experience. Developers drag infrastructure packages — logger, database accessor, cache manager, job scheduler, agent scaffold, and eleven others — onto a canvas, wire them together with connection rules enforced by the UI, and optionally describe their app in plain English to have an AI pre-populate the canvas. The result is a one-click export: a ZIP containing a generated main.py, requirements.txt, an offline install script, per-tool documentation, and all 15 wheel files bundled for air-gapped install.
Key Features
- Visual canvas with port validation — nodes expose
provides[]andconsumes[]ports; the canvas only permits architecturally compatible connections, preventing invalid wiring at the UI level - Multi-provider AI suggestions — describe the app in plain English; Anthropic, OpenAI, Gemini, Groq, or local Ollama suggests the right stack and pre-wires the canvas (all SDK imports are lazy — server starts with zero API keys)
- 15 pre-built Python packages across four categories: Infrastructure, Connectivity, Orchestration, and Foundation — composable through shared abstractions (
BaseAppException,AbstractDatabase,AbstractCache) - Tier-gated export — minimal tools export free; medium stacks are pay-what-you-want $2–10; advanced stacks $12 one-time via Paddle (webhook HMAC-SHA256 + IP allowlisting + replay prevention + idempotency)
- Template gallery and undo/redo — 6 app-type × 3 complexity presets pre-populate the canvas; 50-step undo history and localStorage auto-save survive browser refresh
- Bundled offline export — the generated ZIP contains every selected
.whlfile; the exported project installs withpip install Dependencies/*.whland needs no internet connection
Technical Decisions
The frontend is a React + Vite SPA using @xyflow/react for the canvas — SSR would add complexity with zero benefit since the entire value is in client-side drag-and-drop and real-time edge animation. The FastAPI backend runs as a single persistent uvicorn process (deployed on Railway via Docker), which is a hard requirement: the in-memory download token store — CSPRNG tokens with 15-minute TTL consumed on first use — would break on stateless serverless runtimes where a webhook call and the subsequent generate request might hit different instances. Paddle was chosen over Stripe as the payment provider because it acts as Merchant of Record, handling global VAT and sales-tax compliance automatically with no additional integration work.