II.
StackProfile JSON
Structured · livestack-profile:modular-monolith
Modular Monolith (TypeScript, NestJS, Prisma, PostgreSQL, BullMQ, Docker) json
Inspect the normalized record payload exactly as the atlas UI reads it.
{
"id": "stack-profile:modular-monolith",
"_kind": "StackProfile",
"_file": "domain/stack-profiles/deep-stacks-7.yaml",
"_cluster": "domain",
"attributes": {
"displayName": "Modular Monolith (TypeScript, NestJS, Prisma, PostgreSQL, BullMQ, Docker)",
"description": "A TypeScript monolith deliberately structured into independent modules with\nexplicit boundaries, combining the deployment simplicity of a monolith with\nthe organizational clarity of microservices. Each NestJS module owns its\nPrisma schema slice and communicates with others only through published\nevents or well-defined service interfaces. BullMQ handles async work\nwithin module boundaries, and Redis backs both the job queue and\ncross-module event bus. PostgreSQL schemas enforce data ownership per\nmodule. Docker Compose runs the complete system locally. The tradeoff\nis the constant vigilance needed to prevent module boundaries from\neroding, but when maintained, this pattern avoids distributed-system\ncomplexity while preserving the option to extract modules later.\n",
"composes": [
"language:typescript",
"framework:nestjs",
"library:prisma",
"library:bullmq",
"library:ioredis",
"library:express",
"tool:docker",
"tool:docker-compose",
"language:sql",
"tool:vitest"
]
},
"outgoingEdges": [
{
"from": "stack-profile:modular-monolith",
"to": "language:typescript",
"kind": "composed_of"
},
{
"from": "stack-profile:modular-monolith",
"to": "framework:nestjs",
"kind": "composed_of"
},
{
"from": "stack-profile:modular-monolith",
"to": "library:prisma",
"kind": "composed_of"
},
{
"from": "stack-profile:modular-monolith",
"to": "library:bullmq",
"kind": "composed_of"
},
{
"from": "stack-profile:modular-monolith",
"to": "library:ioredis",
"kind": "composed_of"
},
{
"from": "stack-profile:modular-monolith",
"to": "library:express",
"kind": "composed_of"
},
{
"from": "stack-profile:modular-monolith",
"to": "tool:docker",
"kind": "composed_of"
},
{
"from": "stack-profile:modular-monolith",
"to": "tool:docker-compose",
"kind": "composed_of"
},
{
"from": "stack-profile:modular-monolith",
"to": "language:sql",
"kind": "composed_of"
},
{
"from": "stack-profile:modular-monolith",
"to": "tool:vitest",
"kind": "composed_of"
},
{
"from": "stack-profile:modular-monolith",
"to": "role:backend-engineer",
"kind": "used_by_role"
},
{
"from": "stack-profile:modular-monolith",
"to": "role:architect",
"kind": "used_by_role"
},
{
"from": "stack-profile:modular-monolith",
"to": "role:tech-lead",
"kind": "used_by_role"
},
{
"from": "stack-profile:modular-monolith",
"to": "workflow:architecture-decision",
"kind": "follows_workflow"
},
{
"from": "stack-profile:modular-monolith",
"to": "workflow:monolith-extraction-planning",
"kind": "follows_workflow"
},
{
"from": "stack-profile:modular-monolith",
"to": "domain:software-engineering",
"kind": "applies_to"
},
{
"from": "stack-profile:modular-monolith",
"to": "domain:backend",
"kind": "applies_to"
},
{
"from": "stack-profile:modular-monolith",
"to": "skill-area:monolith-vs-microservices",
"kind": "requires_skill_area"
},
{
"from": "stack-profile:modular-monolith",
"to": "skill-area:domain-driven-design",
"kind": "requires_skill_area"
},
{
"from": "stack-profile:modular-monolith",
"to": "skill-area:messaging-queuing",
"kind": "requires_skill_area"
},
{
"from": "stack-profile:modular-monolith",
"to": "skill-area:backend-api-design",
"kind": "requires_skill_area"
},
{
"from": "stack-profile:modular-monolith",
"to": "skill-area:schema-evolution",
"kind": "requires_skill_area"
}
],
"incomingEdges": []
}