II.
StackProfile JSON
Structured · livestack-profile:strangler-fig-migration
Strangler Fig Migration (TypeScript, NestJS, Express, PostgreSQL, Redis, Docker) json
Inspect the normalized record payload exactly as the atlas UI reads it.
{
"id": "stack-profile:strangler-fig-migration",
"_kind": "StackProfile",
"_file": "domain/stack-profiles/deep-stacks-7.yaml",
"_cluster": "domain",
"attributes": {
"displayName": "Strangler Fig Migration (TypeScript, NestJS, Express, PostgreSQL, Redis, Docker)",
"description": "A migration architecture implementing the Strangler Fig pattern to\nincrementally replace a legacy monolith with modern TypeScript services.\nAn Express reverse proxy intercepts all traffic, routing requests to\neither the legacy system or new NestJS microservices based on feature\nflags and path matching. Redis caches routing decisions and shared\nsession state between old and new systems. PostgreSQL serves both\nthe legacy schema and new service schemas, with CDC (change data\ncapture) keeping them synchronized during the transition. Docker\nCompose orchestrates the complete hybrid environment locally. The\ntradeoff is maintaining two systems simultaneously with careful\ndata consistency management, but the pattern eliminates big-bang\nmigration risk.\n",
"composes": [
"language:typescript",
"framework:nestjs",
"library:express",
"library:ioredis",
"library:prisma",
"library:bullmq",
"tool:docker",
"tool:docker-compose",
"language:sql"
]
},
"outgoingEdges": [
{
"from": "stack-profile:strangler-fig-migration",
"to": "language:typescript",
"kind": "composed_of"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "framework:nestjs",
"kind": "composed_of"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "library:express",
"kind": "composed_of"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "library:ioredis",
"kind": "composed_of"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "library:prisma",
"kind": "composed_of"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "library:bullmq",
"kind": "composed_of"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "tool:docker",
"kind": "composed_of"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "tool:docker-compose",
"kind": "composed_of"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "language:sql",
"kind": "composed_of"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "role:architect",
"kind": "used_by_role"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "role:backend-engineer",
"kind": "used_by_role"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "role:tech-lead",
"kind": "used_by_role"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "workflow:strangler-fig-migration",
"kind": "follows_workflow"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "workflow:legacy-migration-sprint",
"kind": "follows_workflow"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "domain:software-engineering",
"kind": "applies_to"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "domain:backend",
"kind": "applies_to"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "skill-area:strangler-fig-pattern",
"kind": "requires_skill_area"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "skill-area:parallel-run-migration",
"kind": "requires_skill_area"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "skill-area:schema-evolution",
"kind": "requires_skill_area"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "skill-area:middleware-design",
"kind": "requires_skill_area"
},
{
"from": "stack-profile:strangler-fig-migration",
"to": "skill-area:database-migrations-zero-downtime",
"kind": "requires_skill_area"
}
],
"incomingEdges": []
}