# curelo-health/node-express-graphql-boilerplate architecture

> Architecture diagram of the GitHub repository curelo-health/node-express-graphql-boilerplate, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/curelo-health/node-express-graphql-boilerplate
- Repository: https://github.com/curelo-health/node-express-graphql-boilerplate

## Overview

This repository scaffolds a Node.js, Express, GraphQL, and Prisma project. The primary workflow is a developer invoking the CLI or setup script, which produces a project from `template/`; the generated app then serves REST and GraphQL APIs backed by Prisma. The graph also preserves the template’s distinct user and product domains. Scaffold-copy relationships follow the root README; runtime links cite sampled source or SOURCE INDEX references, so unsampled internals are not expanded beyond supported relationships.

Main entry points: [`template/src/graphql/index.js`](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/index.js) (GraphQL mount), [`template/src/server.js`](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/server.js) (Server startup), [`template/src/config/prisma.js`](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/config/prisma.js) (Prisma client), [`template/src/app.js`](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/app.js) (Express app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_scaffold["Project scaffolding"]
  node_cli["Scaffold CLI<br/>[create.js]"]
  node_setup["Setup script<br/>[create-project.sh]"]
  node_template["Project template"]
end

subgraph group_runtime["Application runtime"]
  node_server["Server startup<br/>[server.js]"]
  node_app["Express app<br/>[app.js]"]
  node_config["Runtime config<br/>[index.js]"]
  node_errors["Error middleware<br/>[errorHandler.js]"]
  node_logger["Logger<br/>[logger.js]"]
end

subgraph group_rest["REST user domain"]
  node_routes["REST routes<br/>[index.js]"]
  node_user_routes["User routes<br/>[user.routes.js]"]
  node_controller["User controller<br/>[user.controller.js]"]
  node_user_service["User service<br/>[user.service.js]"]
end

subgraph group_graphql["GraphQL domains"]
  node_graphql_mount["GraphQL mount<br/>[index.js]"]
  node_user_schema["User schema<br/>[user.schema.js]"]
  node_user_resolvers["User resolvers<br/>[user.graphql.js]"]
  node_user_gql_service["User GraphQL service<br/>[user.service.js]"]
  node_product_schema["Product schema<br/>[product.schema.js]"]
  node_product_resolvers["Product resolvers<br/>[product.graphql.js]"]
  node_product_service["Product service<br/>[product.service.js]"]
end

subgraph group_persistence["Persistence and shared services"]
  node_user_model["User model<br/>[user.model.js]"]
  node_product_model["Product model<br/>[product.model.js]"]
  node_prisma["Prisma client<br/>[prisma.js]"]
  node_database[("Database<br/>[schema.prisma]")]
end

node_developer(("Developer"))

node_developer -->|"invokes"| node_cli
node_developer -->|"runs"| node_setup
node_cli -.->|"scaffolds from"| node_template
node_setup -->|"copies contents"| node_template
node_server -->|"starts"| node_app
node_server -->|"reads settings"| node_config
node_server -->|"connects"| node_prisma
node_server -->|"mounts"| node_graphql_mount
node_app -->|"mounts"| node_routes
node_app -->|"registers"| node_errors
node_routes -->|"registers"| node_user_routes
node_user_routes -->|"routes to"| node_controller
node_controller -->|"calls"| node_user_service
node_user_service -->|"queries"| node_user_model
node_user_model -->|"uses"| node_prisma
node_prisma -.->|"accesses"| node_database
node_graphql_mount -->|"merges"| node_user_schema
node_graphql_mount -->|"merges"| node_user_resolvers
node_graphql_mount -->|"merges"| node_product_schema
node_graphql_mount -->|"merges"| node_product_resolvers
node_user_resolvers -->|"delegates"| node_user_gql_service
node_user_gql_service -->|"reuses"| node_user_service
node_product_resolvers -->|"delegates"| node_product_service
node_product_service -->|"queries"| node_product_model
node_product_model -->|"uses"| node_prisma
node_graphql_mount -->|"reads settings"| node_config
node_errors -->|"checks environment"| node_config
node_errors -->|"logs errors"| node_logger
node_server -->|"logs lifecycle"| node_logger

click node_cli "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/bin/create.js"
click node_setup "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/create-project.sh"
click node_template "https://github.com/curelo-health/node-express-graphql-boilerplate/tree/main/template"
click node_server "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/server.js"
click node_app "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/app.js"
click node_routes "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/routes/index.js"
click node_user_routes "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/routes/user.routes.js"
click node_controller "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/controllers/user.controller.js"
click node_user_service "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/services/user.service.js"
click node_user_model "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/models/user.model.js"
click node_graphql_mount "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/index.js"
click node_user_schema "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/user/user.schema.js"
click node_user_resolvers "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/user/user.graphql.js"
click node_user_gql_service "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/user/user.service.js"
click node_product_schema "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/product/product.schema.js"
click node_product_resolvers "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/product/product.graphql.js"
click node_product_service "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/product/product.service.js"
click node_product_model "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/models/product.model.js"
click node_prisma "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/config/prisma.js"
click node_database "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/prisma/schema.prisma"
click node_config "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/config/index.js"
click node_errors "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/middlewares/errorHandler.js"
click node_logger "https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/utils/logger.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_setup,node_template toneBlue
class node_server,node_app,node_config,node_errors,node_logger toneAmber
class node_routes,node_user_routes,node_controller,node_user_service toneMint
class node_graphql_mount,node_user_schema,node_user_resolvers,node_user_gql_service,node_product_schema,node_product_resolvers,node_product_service toneRose
class node_user_model,node_product_model,node_prisma,node_database,node_developer toneIndigo
```

## Components

### Project scaffolding

- [Scaffold CLI](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/bin/create.js): `bin/create.js`
- [Setup script](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/create-project.sh): `create-project.sh`
- [Project template](https://github.com/curelo-health/node-express-graphql-boilerplate/tree/main/template): `template`

### Application runtime

- [Server startup](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/server.js): `template/src/server.js`
- [Express app](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/app.js): `template/src/app.js`
- [Runtime config](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/config/index.js): `template/src/config/index.js`
- [Error middleware](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/middlewares/errorHandler.js): `template/src/middlewares/errorHandler.js`
- [Logger](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/utils/logger.js): `template/src/utils/logger.js`

### REST user domain

- [REST routes](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/routes/index.js): `template/src/routes/index.js`
- [User routes](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/routes/user.routes.js): `template/src/routes/user.routes.js`
- [User controller](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/controllers/user.controller.js): `template/src/controllers/user.controller.js`
- [User service](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/services/user.service.js): `template/src/services/user.service.js`

### GraphQL domains

- [GraphQL mount](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/index.js): `template/src/graphql/index.js`
- [User schema](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/user/user.schema.js): `template/src/graphql/user/user.schema.js`
- [User resolvers](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/user/user.graphql.js): `template/src/graphql/user/user.graphql.js`
- [User GraphQL service](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/user/user.service.js): `template/src/graphql/user/user.service.js`
- [Product schema](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/product/product.schema.js): `template/src/graphql/product/product.schema.js`
- [Product resolvers](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/product/product.graphql.js): `template/src/graphql/product/product.graphql.js`
- [Product service](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/graphql/product/product.service.js): `template/src/graphql/product/product.service.js`

### Persistence and shared services

- [User model](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/models/user.model.js): `template/src/models/user.model.js`
- [Product model](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/models/product.model.js): `template/src/models/product.model.js`
- [Prisma client](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/src/config/prisma.js): `template/src/config/prisma.js`
- [Database](https://github.com/curelo-health/node-express-graphql-boilerplate/blob/main/template/prisma/schema.prisma): `template/prisma/schema.prisma`

### Other components

- **Developer**

## Connections

- Developer → Scaffold CLI: invokes (evidence: `README.md`)
- Developer → Setup script: runs (evidence: `README.md`)
- Scaffold CLI → Project template: scaffolds from
- Setup script → Project template: copies contents (evidence: `README.md`)
- Server startup → Express app: starts (evidence: `template/src/server.js`)
- Server startup → Runtime config: reads settings (evidence: `template/src/server.js`)
- Server startup → Prisma client: connects (evidence: `template/src/server.js`)
- Server startup → GraphQL mount: mounts (evidence: `template/src/server.js`)
- Express app → REST routes: mounts (evidence: `template/src/app.js`)
- Express app → Error middleware: registers (evidence: `template/src/app.js`)
- REST routes → User routes: registers (evidence: `template/src/routes/index.js`)
- User routes → User controller: routes to (evidence: `template/src/routes/user.routes.js`)
- User controller → User service: calls (evidence: `template/src/controllers/user.controller.js`)
- User service → User model: queries (evidence: `template/src/services/user.service.js`)
- User model → Prisma client: uses (evidence: `template/src/models/user.model.js`)
- Prisma client → Database: accesses
- GraphQL mount → User schema: merges (evidence: `template/src/graphql/index.js`)
- GraphQL mount → User resolvers: merges (evidence: `template/src/graphql/index.js`)
- GraphQL mount → Product schema: merges (evidence: `template/src/graphql/index.js`)
- GraphQL mount → Product resolvers: merges (evidence: `template/src/graphql/index.js`)
- User resolvers → User GraphQL service: delegates (evidence: `template/src/graphql/user/user.graphql.js`)
- User GraphQL service → User service: reuses (evidence: `template/src/graphql/user/user.service.js`)
- Product resolvers → Product service: delegates (evidence: `template/src/graphql/product/product.graphql.js`)
- Product service → Product model: queries (evidence: `template/src/graphql/product/product.service.js`)
- Product model → Prisma client: uses (evidence: `template/src/models/product.model.js`)
- GraphQL mount → Runtime config: reads settings (evidence: `template/src/graphql/index.js`)
- Error middleware → Runtime config: checks environment (evidence: `template/src/middlewares/errorHandler.js`)
- Error middleware → Logger: logs errors (evidence: `template/src/middlewares/errorHandler.js`)
- Server startup → Logger: logs lifecycle (evidence: `template/src/server.js`)
