create-aron-app
v0.1.7
Published
Scaffold a new Convex + Next.js + Clerk full-stack project
Maintainers
Readme
create-aron-app
CLI scaffolding tool that stamps out a production-ready Nx monorepo with Convex, Clerk, and either Next.js 15 or React Router v7.
Usage
npm create aron-app
# or
npx create-aron-app
# or
bunx create-aron-appThe CLI will ask a few questions and scaffold a new project:
- Project name — lowercase alphanumeric + hyphens
- Framework — Next.js 15 (App Router) or React Router v7 (SPA/Vite)
- Output directory — where to create the project (defaults to
~/Desktop/<name>) - Package manager — Bun (recommended), pnpm, npm, or Yarn
- Install dependencies — run install automatically
- Initialize git — create an initial commit
What gets scaffolded
The output is an Nx monorepo with two apps:
my-app/
├── apps/
│ ├── api/ # Convex backend (convex-ents + Zod validation)
│ └── web/ # Next.js 15 or React Router v7 frontend
├── shared/
│ ├── ui/ # ~20 shadcn/Radix UI components + hooks
│ ├── utils/ # Convex client helpers, date utils
│ └── assets/ # global.css (Tailwind 4)
├── emails/ # React Email templates
├── scripts/ # sync_convex_env.ts
├── .cursor/ # Pre-configured Cursor AI rules and skills
└── .github/
└── workflows/ci.ymlA working Todos feature is wired end-to-end as the canonical example of the data model pattern.
Stack
- Backend — Convex with
convex-entsfor relational modeling and Zod-validated function wrappers - Frontend — Next.js 15 (App Router) or React Router v7 (SPA/Vite)
- Auth — Clerk wired to both Convex and the frontend
- Data fetching — TanStack Query v5
- UI — Radix UI + Tailwind CSS 4 + shared component library
- Monorepo — Nx with Bun workspaces
- Linting — Biome
- AI — Pre-baked Cursor rules and skills for the entire stack
Development
Build
bun run buildBundles src/index.ts into dist/index.js (a single Node.js-compatible file with a shebang).
Test locally
# Run the CLI directly with Bun (no build needed):
bun run start
# Or build and run the output file:
node dist/index.js
# Or link globally for the full `npm create` experience:
npm link
npm create aron-app
# Unlink when done:
npm unlink -g create-aron-appPublish
# Patch release (bumps version + publishes):
npm run release
# Or manually:
npm publish --access publicPublishing is also automated via GitHub Actions — creating a GitHub Release triggers .github/workflows/publish.yml, which builds and publishes to npm.
Project structure
create-aron-app/
├── src/
│ ├── index.ts # CLI entrypoint (prompts + orchestration)
│ ├── types.ts # Shared TS types
│ └── utils/
│ ├── constant.ts # Framework/PM options + dependency lists
│ └── helpers.ts # File ops, template merging helpers
├── templates/
│ ├── _base/ # Shared monorepo skeleton (copied first)
│ ├── nextjs/ # Next.js 15 App Router variant
│ └── react-router/ # React Router v7 SPA variant
├── dist/ # Built CLI output
└── .github/
└── workflows/
└── publish.yml # Auto-publish on GitHub ReleaseHow scaffolding works
- Copy
templates/_base/into the output directory - Copy the framework-specific template into
apps/web/ - Rename
_gitignorefiles to.gitignore(npm strips dotfiles on publish) - Merge framework deps into the root
package.json - Inject the right Nx plugins into
nx.json - Replace the
project:placeholder with the actual project name in allproject.jsonfiles - Promote
apps/web/.env.exampleto the root as.env.example - Optionally:
git init+ initial commit - Optionally:
<pm> install
