Scaffold a full
backend in seconds,
not hours.
create-meno-app generates a production-ready API with an AI-friendly architecture and an auto docs generator that never drifts — zero boilerplate, fully configurable, JavaScript or TypeScript.
Build your config, watch it compile
Toggle the same prompts the CLI asks and see exactly what gets generated — the project tree updates live as conditional files appear and disappear.
An architecture your AI pair already understands
create-meno-app doesn’t just scaffold code — it scaffolds the conventions and context that let coding agents extend your backend without guessing.
Context files, generated
Opt into CLAUDE.md, .cursor/rules and .kiro/steering files that teach any agent your project’s non-negotiable conventions on day one.
One pattern, everywhere
Every module is validation → service → controller → routes. Predictable structure means an AI edits the right file the first time.
A single source of config
All env reads flow through one validated config module — no magic process.env scattered for an agent to miss.
llms.txt-ready docs
The Markdown docs generator emits clean, link-rich pages an LLM can ingest as flat context.
# Project conventions (auto-generated)
## Non-negotiable rules
- All Mongoose models live in src/models/
- Routes auto-mount from src/modules/<name>/
- Controllers are plain async functions
- Read env only via @/config/config
## Scaffold a module
npm run generate product
## Regenerate docs
npm run docsDocs that are derived, never written twice
One introspection engine reads your routes, Joi schemas and Mongoose models — then powers both the Markdown docs and the Swagger UI. They can’t drift, because they share a brain.
// @doc Create example | 201
// @desc Creates and returns a new example.
router.post('/',
validateBody(createExampleSchema),
ctrl.create,
);Reads route annotations, infers request bodies from Joi, and traces responses through the controller → service → model chain.
### POST /example
Creates and returns a new example.
**Body** — derived from Joi
name string required✓ OpenAPI 3 spec served
✓ Same engine · always in sync
✓ npm run docs -- --check
# fails CI if docs are staleThe plumbing is already done
The conventions that usually take a day of wiring — routing, error handling, config, observability — ship working out of the box.
Auto route loader
Drop example.routes.ts in src/modules/ and it mounts at /example. No app.use(), no central registry.
Auto async wrapping
Controllers are plain async functions. Thrown errors are forwarded to the error handler automatically.
Validated config
Every env var is read once, in one place, and the server refuses to boot if something required is missing.
Request IDs
An X-Request-ID is attached to every request for clean correlation across logs and traces.
Graceful shutdown
SIGTERM/SIGINT drains in-flight requests and closes the database connection cleanly.
Health checks
GET /health returns status, uptime and DB state — ready for Docker and load balancers.
Pagination utility
paginate() + paginatedResponse() give consistent page / limit / totalPages everywhere.
Index sync at startup
ensureIndexes() runs on boot so a missing index never silently slips into production.
Real code, the way you'd write it
No framework lock-in or clever magic to fight — just clean Express modules, generated and ready to extend.
import express from 'express';
import * as ctrl from './product.controller.js';
const router = express.Router();
// no asyncHandler — wrapping is automatic
router.get('/', ctrl.list);
router.post('/', ctrl.create);
export default router; // auto-mounts at /productChoice, not constraints
Every capability is an opt-in toggle. Start minimal or generate the whole platform — the matrix is yours.
- Session auth
- Register / login / logout
- Password reset flow
- RBAC middleware
- create:admin script
- bcrypt hashing
- Mongoose 9 models
- Joi validation
- Pagination helper
- Index sync
- Email via Gmail API
- en + tr templates
- Rate limit · memory
- Rate limit · MongoDB
- Rate limit · Redis
- Upload · local disk
- Upload · GCS
- Winston logging
- Jest + supertest
- In-memory MongoDB
- ESLint flat config
- Prettier + Husky
- Dockerfile + compose
- GitHub Actions CI
Your next backend is one
command away.
No setup ceremony. No boilerplate to copy. Run it and start building features.
