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
Social sign-inGoogle · Apple
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 — 35 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/social/
·google.service.ts
·apple.service.ts
·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
  • Google Sign-In
  • Apple Sign-In
  • 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