Case study · Developer platform

A one-day setup, in one command.

A zero-dependency Node CLI plus a Claude skill that turns a fresh machine and a project name into a running Mindtickle micro-frontend in minutes — via one command or one sentence. It collapses a full-day onboarding gauntlet the whole Frontend Chapter used to pay, per project.

Role: Built 0→1 Zero runtime deps Node CLI + Claude skill 50+ repos · 150+ MFEs
~/code — zsh
$ npx @mindtickle/mt-setup setup email-logs-ui Resolved email-logs-ui governance-ui (project in monorepo) Cloned governance-ui ~/Desktop/code/governance-ui Registered in ~/.mt-setup/config.json Env files integration · staging · prod · prod-us devSetup.sh yarn install yarn relay Opened in Cursor — dev server on :4200 Ready in 4m 08s. One command, zero questions.
One project name in — a running, editor-open micro-frontend out.
~1 day → min
Onboarding per micro-frontend
50+ repos
150+ micro-frontends it can provision
0 deps
Zero runtime dependencies, no build step
5–8 teams
Frontend Chapter platform work
01
The problem

Standing up one micro-frontend cost about a day.

Mindtickle's frontend is a universe of 150+ micro-frontends across 50+ repos. Picking up a new one locally was a manual, error-prone gauntlet — and you paid it again on every switch:

Find the repo — which of 50+? Dig through Confluence and Slack.
Configure the proxy — CORS errors and port clashes with whatever else is running.
Match the Node version — a global switch risks breaking your other checkouts.
Hunt env vars — ping Slack, wait hours, copy-paste secrets.
Run it → it fails → back to step 2. Repeat until it comes up.
02
What one command does

From a project name to a running app.

Every step of that gauntlet is solved deterministically, from a single project name — and each step is skip-if-already-done and safe to re-run.

1 · Resolve
Name → repo
devops-helm-charts
2 · Clone
Or adopt
verified remote
3 · Register
Single registry
config.json
4 · Init
env · install · relay
per-env files
5 · Open
Editor + dev server
auto-start

No global anything

Deterministic, collision-free ports derived from the app's name (so apps never fight), the project's own toolchain provisioned through your login shell (no global Node switch), and env files auto-generated for all four environments from the source of truth — with track inheritance.

Idempotent & safe by default

Every step is skip-if-already-done and warn-and-continue, so a single failure never leaves you half-set-up. It never clones over a different remote, writes config atomically with .bak recovery, and an editor failure never fails the setup.

03
Two ways to drive it

One command, or one sentence.

The CLI is fully deterministic. The Claude skill sits on top: it maps natural language to flags, runs the CLI in the background, streams clean per-step progress into chat, and branches on the result. Deterministic core, conversational shell.

Claude Code
You
set up email-logs-ui for staging
Claude · running mt-setup
Resolved email-logs-ui → governance-ui
Cloned & registered
Env files generated — default .env = staging
yarn install · yarn relay · opened in Cursor
Done — governance-ui is up on the staging environment.
Same deterministic CLI underneath — "open governance-ui but don't run it" works too.
04
The engineering

The taste is in the architecture.

Zero-dependency kernel + tools

Ships src/ + bin/ as-is — no build step, no runtime deps. A dependency-free node-guard checks the Node version before anything else parses. A reusable kernel plus tools (tools/setup, tools/lifecycle) means the next tool is a new folder, not a rewrite.

Three enforced invariants

Commands never print or exit — they return {exitCode, result}; only cli.js touches the process, so every command is unit-testable. The JSON payload is the API--json everywhere, self-described by capabilities, with an anti-drift test. The CLI surface is declared once — specs generate parsing, help, and capabilities.

AI-native by design

The capabilities contract + --json + an AGENTS.md let an agent drive it deterministically. The skill launches it in the background, long-polls an NDJSON --progress-file, renders per-step lines, and branches on status — the same machine contract a human reads as clean output.

A real error taxonomy

Distinct exit codes for every failure class — 7 prereq, 3 helm-unavailable, 4 remote-mismatch, 5 config, 6 locked, 9 env-gen — each with an actionable fix message, so it fails fast and legibly instead of dying cryptically mid-run.

05
Receipts

Platform work, at the highest altitude.

The classic staff/principal move — build the platform other engineers build on:

~1 day → min
Onboarding time per project
150+ MFEs
Across 50+ repos, provisionable by name
0 deps
Zero runtime dependencies, no build
5–8 teams
Build on it across the Frontend Chapter
Idempotent
Skip-if-done, safe to re-run every session
CLI + skill
Deterministic core, conversational shell

Published as @mindtickle/mt-setup; a second tool (lifecycle) ships centrally-managed hooks controlled by a runtime policy repo — behaviour changes without republishing.

Keep reading

Making AI safe at the same scale.

Next case study
Cursor Rules · Safe AI at scale →