# mkproject: bash scaffold that ships .env-safe git init + RUNAFTER

Source: https://www.michaelchurley.com/blog/mkproject-bash-scaffold-template-git-init-runafter  
Published: 2026-06-22  
Author: Michael C. Hurley  
Tags: mkproject, bash, cli, scaffold, git-init, template, dotenv, dev-tooling, project-bootstrap, michaelmonetized

![Scaffold flow](/blog/mkproject-bash-scaffold-template-git-init-runafter/screenshots/scaffold-flow.png)

## Who

I kept hand-rolling new folders and occasionally pushing a dotenv. The fix is a small bash scaffolder with .env in the template ignore list.

## What

**mkproject** — public michaelmonetized/mkproject. HEAD `321012c`. 9 commits. 76-line `mkproject.sh`. User template under ~/.config/mkproject. Dotenv knobs: PROJECT_DIR, BRANCH, COMMIT_MESSAGE, RUNAFTER, DISABLE_GIT. Default RUNAFTER is `code .`.

![Config env](/blog/mkproject-bash-scaffold-template-git-init-runafter/screenshots/config-env.png)

![Template tree](/blog/mkproject-bash-scaffold-template-git-init-runafter/screenshots/template-tree.png)

Template now ships package.json + index.js; README file list still says six hygiene files. Root MIT vs template GPL-3. No releases despite README v0.1.0 zip.

![License mismatch](/blog/mkproject-bash-scaffold-template-git-init-runafter/screenshots/license-mismatch.png)

Empty scaffolds mkproject-1 / 49 are SKIP — outputs of this tool, not products.

## Where

https://github.com/michaelmonetized/mkproject — public CLI. No site.

## When

Aug 2024 birth. Jan 2026 sync. Mar 2026 Node stub in template. Jun 2026 PLAN/uncap + empty HEAD tip.

![Commit arc](/blog/mkproject-bash-scaffold-template-git-init-runafter/screenshots/commit-arc.png)

## Why

The factory story belongs on the scaffolder, not the empty children. Dotenv-safe init is the boring win.

**Engagement Q:** Align template LICENSE with MIT, or document the GPL default as intentional?
