create-meno-app
MongoDB · Express · Node.js

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.

$npx create-meno-app my-api
Express 5 Mongoose 9 Node 18+ MIT licensed
zsh — create-meno-app
~/projects
Express 5·Mongoose 9·Node 18+·TypeScript 6·Joi·Helmet·Winston·Jest·Swagger·Docker·bcrypt·Redis·Express 5·Mongoose 9·Node 18+·TypeScript 6·Joi·Helmet·Winston·Jest·Swagger·Docker·bcrypt·Redis·
// Interactive

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.

Language
Rate limit store
Upload provider
AI context files
$npx create-meno-app my-api
your answers
LanguageTypeScript
Auth moduleYes
RBACYes
Rate limitingMongoDB
Winston loggerYes
File uploadNo
Email serviceGmail · en + tr
Jest testsYes
ESLint + PrettierYes
Swagger / OpenAPIYes
Markdown docsYes
DockerYes
GitHub ActionsYes
AI contextClaude
my-api — 33 files
my-api/
·src/
·config/
·config.ts
·constants/
·error-codes.ts
·roles.ts
·middlewares/
·auth.middleware.ts
·error.middleware.ts
·ratelimit.middleware.ts
·request-id.middleware.ts
·validation.middleware.ts
·models/
·example.model.ts
·user.model.ts
·modules/
·auth/ → /auth
·example/ → /example
·health/ → /health
·services/email/
·email.service.ts
·templates/emails/
·welcome.hbs
·locales/email/
·en.ts
·tr.ts
·scripts/
·create-admin.ts
·generate-docs.ts
·utils/
·route-loader.ts
·paginate.ts
·graceful-shutdown.ts
·logger.ts
·doc-introspect.ts
·swagger.ts
·server.ts
·package.json
·.env.example
·tsconfig.json
·jest.config.js
·eslint.config.mjs
·Dockerfile
·docker-compose.yml
·.github/workflows/ci.yml
·CLAUDE.md
·README.md
// Built for agents

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.

01

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.

02

One pattern, everywhere

Every module is validation → service → controller → routes. Predictable structure means an AI edits the right file the first time.

03

A single source of config

All env reads flow through one validated config module — no magic process.env scattered for an agent to miss.

04

llms.txt-ready docs

The Markdown docs generator emits clean, link-rich pages an LLM can ingest as flat context.

CLAUDE.md
# 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 docs
// The flagship feature

Docs 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.

example.routes.ts
// @doc Create example | 201
// @desc Creates and returns a new example.
router.post('/', 
  validateBody(createExampleSchema),
  ctrl.create,
);
doc-introspect

Reads route annotations, infers request bodies from Joi, and traces responses through the controller → service → model chain.

@doc@desc@body@query@response
docs/modules/example.md
### POST /example
Creates and returns a new example.

**Body** — derived from Joi
name string required
$ GET /docs — Swagger
 OpenAPI 3 spec served
 Same engine · always in sync
 npm run docs -- --check
  # fails CI if docs are stale
// Zero boilerplate

The 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.

// What you ship

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.

src/modules/product/product.routes.ts
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 /product
// Pick what you need

Choice, not constraints

Every capability is an opt-in toggle. Start minimal or generate the whole platform — the matrix is yours.

Auth & access
  • Session auth
  • Register / login / logout
  • Password reset flow
  • RBAC middleware
  • create:admin script
  • bcrypt hashing
Data & delivery
  • Mongoose 9 models
  • Joi validation
  • Pagination helper
  • Index sync
  • Email via Gmail API
  • en + tr templates
Infrastructure
  • Rate limit · memory
  • Rate limit · MongoDB
  • Rate limit · Redis
  • Upload · local disk
  • Upload · GCS
  • Winston logging
Quality & ship
  • 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.

$npx create-meno-app my-api