@polymorphism-tech/morph-spec 4.11.1 → 4.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/README.md +21 -29
  2. package/bin/morph-spec.js +41 -24
  3. package/bin/task-manager.js +962 -1341
  4. package/bin/validate.js +1 -1
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +10 -11
  7. package/docs/QUICKSTART.md +15 -15
  8. package/framework/CLAUDE.md +5 -2
  9. package/framework/agents/README.md +3 -4
  10. package/framework/agents/ai-agents/ai-system-architect.md +6 -10
  11. package/framework/agents/architecture/seo-growth-hacker.md +166 -326
  12. package/framework/agents/architecture/standards-architect.md +21 -31
  13. package/framework/agents/backend/dotnet-senior.md +160 -86
  14. package/framework/agents/backend/ef-modeler.md +2 -6
  15. package/framework/agents/backend/hangfire-orchestrator.md +8 -9
  16. package/framework/agents/backend/ms-agent-expert.md +1 -1
  17. package/framework/agents/frontend/nextjs-expert.md +198 -133
  18. package/framework/agents/frontend/ui-ux-designer.md +226 -267
  19. package/framework/agents/infrastructure/infra-architect.md +191 -27
  20. package/framework/agents/integrations/clerk-auth.md +19 -26
  21. package/framework/agents/integrations/hangfire-integration.md +1 -4
  22. package/framework/agents.json +226 -1454
  23. package/framework/commands/morph-apply.md +4 -4
  24. package/framework/commands/morph-preflight.md +4 -26
  25. package/framework/commands/morph-proposal.md +19 -19
  26. package/framework/commands/morph-status.md +2 -2
  27. package/framework/commands/morph-troubleshoot.md +6 -13
  28. package/framework/hooks/README.md +1 -6
  29. package/framework/hooks/claude-code/post-tool-use/agent-complete.js +122 -0
  30. package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +4 -6
  31. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +12 -7
  32. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +2 -2
  33. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +2 -2
  34. package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +5 -10
  35. package/framework/hooks/claude-code/session-start/inject-morph-context.js +63 -30
  36. package/framework/hooks/claude-code/session-start/resume-context.js +77 -0
  37. package/framework/hooks/claude-code/statusline.py +4 -5
  38. package/framework/hooks/claude-code/stop/validate-completion.js +4 -4
  39. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +8 -8
  40. package/framework/hooks/shared/compact-restore.js +28 -5
  41. package/framework/hooks/shared/dispatch-helpers.js +17 -0
  42. package/framework/hooks/shared/phase-utils.js +4 -8
  43. package/framework/hooks/shared/state-reader.js +34 -3
  44. package/framework/phases.json +7 -45
  45. package/framework/rules/ai-agents-standards.md +15 -0
  46. package/framework/rules/asaas-standards.md +13 -0
  47. package/framework/rules/clerk-standards.md +13 -0
  48. package/framework/rules/csharp-standards.md +8 -4
  49. package/framework/rules/data-standards.md +18 -0
  50. package/framework/rules/dotnet-templates.md +87 -0
  51. package/framework/rules/frontend-standards.md +13 -13
  52. package/framework/rules/hangfire-standards.md +13 -0
  53. package/framework/rules/infrastructure-standards.md +27 -16
  54. package/framework/rules/morph-workflow.md +73 -13
  55. package/framework/rules/nextjs-standards.md +1 -0
  56. package/framework/rules/nextjs-templates.md +40 -0
  57. package/framework/rules/resend-standards.md +12 -0
  58. package/framework/rules/supabase-standards.md +29 -0
  59. package/framework/skills/README.md +6 -8
  60. package/framework/skills/level-0-meta/mcp-registry.json +21 -99
  61. package/framework/{standards/ai-agents/team-orchestration.md → skills/level-0-meta/morph-agent-teams/SKILL.md} +472 -479
  62. package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +28 -1
  63. package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
  64. package/framework/skills/level-0-meta/morph-code-review/SKILL.md +1 -5
  65. package/framework/skills/level-0-meta/morph-code-review/scripts/scan-csharp.mjs +1 -1
  66. package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +23 -41
  67. package/framework/skills/level-0-meta/morph-init/SKILL.md +18 -14
  68. package/framework/skills/level-0-meta/morph-parallel-dispatch/SKILL.md +225 -0
  69. package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +20 -0
  70. package/framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md +4 -8
  71. package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +15 -59
  72. package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +7 -19
  73. package/framework/skills/level-0-meta/morph-verification-before-completion/scripts/check-phase-outputs.mjs +8 -8
  74. package/framework/skills/level-1-workflows/README.md +1 -1
  75. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +49 -50
  76. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +58 -124
  77. package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +5 -50
  78. package/framework/skills/level-1-workflows/morph-phase-design/references/spec-example.md +1 -1
  79. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +127 -159
  80. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +4 -3
  81. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +2 -2
  82. package/framework/skills/level-1-workflows/morph-phase-implement/references/recap-example.md +1 -1
  83. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +17 -13
  84. package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +22 -40
  85. package/framework/skills/level-1-workflows/morph-phase-tasks/references/task-planning-patterns.md +0 -2
  86. package/framework/skills/level-1-workflows/morph-phase-tasks/references/tasks-example.md +5 -5
  87. package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +275 -61
  88. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
  89. package/framework/squad-templates/backend-only.json +6 -6
  90. package/framework/squad-templates/frontend-only.json +17 -8
  91. package/framework/squad-templates/full-stack.json +29 -24
  92. package/framework/standards/STANDARDS.json +1021 -2338
  93. package/framework/standards/backend/dotnet/fluent-validation-vsa.md +200 -0
  94. package/framework/standards/backend/dotnet/result-pattern.md +213 -0
  95. package/framework/standards/backend/dotnet/scalar-ui.md +172 -0
  96. package/framework/standards/backend/dotnet/scrutor.md +158 -0
  97. package/framework/standards/backend/dotnet/vsa-handler-patterns.md +274 -0
  98. package/framework/standards/frontend/nextjs/motion-patterns.md +1 -1
  99. package/framework/standards/infrastructure/supabase/mcp-setup.md +83 -193
  100. package/framework/standards/integration/mcp/mcp-tools.md +91 -77
  101. package/framework/templates/IDE-SNIPPETS.md +2 -6
  102. package/framework/templates/README.md +709 -814
  103. package/framework/templates/REGISTRY.json +223 -762
  104. package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -0
  105. package/framework/templates/code/dotnet/abstractions/error.cs +60 -0
  106. package/framework/templates/code/dotnet/abstractions/handler.cs +12 -0
  107. package/framework/templates/code/dotnet/abstractions/result.cs +74 -0
  108. package/framework/templates/code/dotnet/backend/repository.cs +148 -141
  109. package/framework/templates/code/dotnet/constants/api-tags.cs +6 -0
  110. package/framework/templates/code/dotnet/exceptions/exception-handler.cs +32 -0
  111. package/framework/templates/code/dotnet/extensions/database-extensions.cs +20 -0
  112. package/framework/templates/code/dotnet/extensions/handler-registration.cs +38 -0
  113. package/framework/templates/code/dotnet/extensions/health-checks.cs +24 -0
  114. package/framework/templates/code/dotnet/extensions/map-endpoints.cs +35 -0
  115. package/framework/templates/code/dotnet/extensions/result-extensions.cs +29 -0
  116. package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -0
  117. package/framework/templates/code/dotnet/feature/entity.cs.hbs +8 -0
  118. package/framework/templates/code/dotnet/feature/errors.cs.hbs +8 -0
  119. package/framework/templates/code/dotnet/feature/handler.cs.hbs +24 -0
  120. package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -0
  121. package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -0
  122. package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -0
  123. package/framework/templates/code/dotnet/jobs/job.cs +21 -17
  124. package/framework/templates/code/dotnet/pipelines/logging-decorator.cs +31 -0
  125. package/framework/templates/code/dotnet/pipelines/validation-decorator.cs +97 -0
  126. package/framework/templates/code/dotnet/test.cs +192 -106
  127. package/framework/templates/context/ARCHITECTURE.md +89 -0
  128. package/framework/templates/context/CONTEXT-FEATURE.md +2 -2
  129. package/framework/templates/context/CONTEXT.md +180 -181
  130. package/framework/templates/context/design-system.md +342 -211
  131. package/framework/templates/docs/onboarding.md +2 -3
  132. package/framework/templates/docs/proposal.md +171 -182
  133. package/framework/templates/docs/spec.md +1 -3
  134. package/framework/templates/docs/ui-components.md +0 -72
  135. package/framework/templates/examples/design-system-examples.md +4 -4
  136. package/framework/templates/feature/decisions.md +0 -66
  137. package/framework/templates/feature/recap.md +1 -2
  138. package/framework/templates/infrastructure/github/README.md +56 -593
  139. package/framework/templates/integrations/clerk-config.cs +0 -41
  140. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  141. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -2
  142. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +83 -126
  143. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +2 -2
  144. package/framework/templates/project/validate.js +2 -4
  145. package/framework/templates/ui/design-system.css +1 -1
  146. package/framework/workflows/README.md +8 -8
  147. package/framework/workflows/configs/fast-track.json +51 -0
  148. package/framework/workflows/configs/full.json +68 -0
  149. package/framework/workflows/configs/standard.json +7 -3
  150. package/framework/workflows/docs/STORY-DRIVEN-DEVELOPMENT.md +1 -1
  151. package/framework/workflows/docs/enforcement-pipeline.md +18 -19
  152. package/framework/workflows/docs/full-morph.md +69 -76
  153. package/framework/workflows/docs/standard.md +49 -44
  154. package/framework/workflows/docs/ui-refresh.md +1 -1
  155. package/package.json +3 -3
  156. package/src/commands/agents/dispatch-agents.js +55 -116
  157. package/src/commands/context/context-refresh.js +79 -0
  158. package/src/commands/mcp/mcp-setup.js +28 -6
  159. package/src/commands/phase/phase-reset.js +1 -1
  160. package/src/commands/project/doctor.js +10 -32
  161. package/src/commands/project/init.js +32 -1
  162. package/src/commands/project/status.js +6 -12
  163. package/src/commands/scaffold/scaffold.js +131 -0
  164. package/src/commands/scope/escalate.js +1 -1
  165. package/src/commands/state/advance-phase.js +15 -29
  166. package/src/commands/state/state.js +20 -5
  167. package/src/commands/tasks/task.js +0 -30
  168. package/src/commands/validation/validate-feature.js +3 -10
  169. package/src/core/paths/output-schema.js +12 -13
  170. package/src/core/state/phase-state-machine.js +211 -217
  171. package/src/core/state/state-manager.js +9 -9
  172. package/src/lib/agents/agents-manager.js +2 -2
  173. package/src/lib/agents/output-collector.js +1 -2
  174. package/src/lib/detectors/design-system-detector.js +4 -4
  175. package/src/lib/detectors/index.js +1 -11
  176. package/src/lib/generators/architecture-scanner.js +640 -0
  177. package/src/lib/generators/context-generator.js +3 -3
  178. package/src/lib/generators/design-system-generator.js +508 -298
  179. package/src/lib/generators/index.js +12 -10
  180. package/src/lib/generators/metadata-extractor.js +386 -387
  181. package/src/lib/generators/recap-generator.js +4 -4
  182. package/src/lib/generators/scaffold-generator.js +317 -0
  183. package/src/lib/generators/settings-generator.js +0 -1
  184. package/src/lib/phase-chain/phase-validator.js +64 -42
  185. package/src/lib/stack/stack-profile.js +2 -2
  186. package/src/lib/standards/digest-builder.js +72 -285
  187. package/src/lib/tasks/task-parser.js +11 -5
  188. package/src/lib/validators/architecture/architecture-validator.js +259 -387
  189. package/src/lib/validators/content/content-validator.js +287 -287
  190. package/src/lib/validators/css/css-validator.js +340 -352
  191. package/src/lib/validators/design-system/design-system-validator.js +11 -5
  192. package/src/lib/validators/packages/package-validator.js +347 -360
  193. package/src/lib/validators/shared/issue-counter.js +14 -18
  194. package/src/lib/validators/validation-runner.js +3 -19
  195. package/src/scripts/setup-infra.js +1 -1
  196. package/src/utils/agents-installer.js +24 -3
  197. package/src/utils/file-copier.js +1 -0
  198. package/src/utils/hooks-installer.js +21 -19
  199. package/src/utils/skills-installer.js +178 -178
  200. package/framework/agents/architecture/prompt-engineer.md +0 -195
  201. package/framework/agents/backend/api-designer.md +0 -106
  202. package/framework/agents/frontend/blazor-builder.md +0 -229
  203. package/framework/agents/frontend/nextjs-ui-specialist.md +0 -218
  204. package/framework/agents/infrastructure/azure-architect.md +0 -150
  205. package/framework/agents/infrastructure/azure-deploy-specialist.md +0 -707
  206. package/framework/agents/infrastructure/bicep-architect.md +0 -132
  207. package/framework/agents/infrastructure/container-specialist.md +0 -137
  208. package/framework/agents/infrastructure/devops-engineer.md +0 -126
  209. package/framework/agents/integrations/azure-identity.md +0 -148
  210. package/framework/agents/quality/code-analyzer.md +0 -239
  211. package/framework/agents/quality/testing-specialist.md +0 -130
  212. package/framework/hooks/claude-code/notification/approval-reminder.js +0 -57
  213. package/framework/hooks/claude-code/post-tool-use/context-refresh.js +0 -109
  214. package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +0 -78
  215. package/framework/index/troubleshooting-index.json +0 -184
  216. package/framework/rules/testing-standards.md +0 -14
  217. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +0 -230
  218. package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +0 -70
  219. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +0 -256
  220. package/framework/skills/level-1-workflows/morph-phase-clarify/references/clarifications-example.md +0 -117
  221. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +0 -269
  222. package/framework/standards/ai-agents/blazor-ui.md +0 -364
  223. package/framework/standards/architecture/ddd/aggregates.md +0 -120
  224. package/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
  225. package/framework/standards/architecture/ddd/complexity-levels.md +0 -108
  226. package/framework/standards/architecture/ddd/entities.md +0 -99
  227. package/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
  228. package/framework/standards/architecture/ddd/value-objects.md +0 -124
  229. package/framework/standards/backend/api/minimal-api.md +0 -494
  230. package/framework/standards/backend/api/rest.md +0 -492
  231. package/framework/standards/backend/authentication/passkeys.md +0 -428
  232. package/framework/standards/backend/database/ef-core.md +0 -199
  233. package/framework/standards/backend/database/migrations.md +0 -393
  234. package/framework/standards/backend/database/repository-patterns.md +0 -528
  235. package/framework/standards/backend/dotnet/async.md +0 -366
  236. package/framework/standards/backend/dotnet/core.md +0 -117
  237. package/framework/standards/backend/dotnet/di.md +0 -439
  238. package/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  239. package/framework/standards/context/analytics.md +0 -96
  240. package/framework/standards/context/bundles.md +0 -110
  241. package/framework/standards/context/priming.md +0 -78
  242. package/framework/standards/core/architecture.md +0 -185
  243. package/framework/standards/core/coding.md +0 -214
  244. package/framework/standards/core/git-branching-strategy.md +0 -403
  245. package/framework/standards/core/git.md +0 -185
  246. package/framework/standards/core/testing.md +0 -295
  247. package/framework/standards/data/nosql/blob-storage.md +0 -102
  248. package/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  249. package/framework/standards/frontend/blazor/design-checklist.md +0 -222
  250. package/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  251. package/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  252. package/framework/standards/frontend/blazor/html-conversion.md +0 -184
  253. package/framework/standards/frontend/blazor/lifecycle.md +0 -195
  254. package/framework/standards/frontend/blazor/pitfalls.md +0 -198
  255. package/framework/standards/frontend/blazor/state.md +0 -191
  256. package/framework/standards/frontend/design-system/aesthetic-direction.md +0 -213
  257. package/framework/standards/infrastructure/azure/azure.md +0 -624
  258. package/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  259. package/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  260. package/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  261. package/framework/standards/infrastructure/azure/services/functions.md +0 -486
  262. package/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  263. package/framework/standards/infrastructure/azure/services/storage.md +0 -407
  264. package/framework/standards/infrastructure/vercel/vercel-database.md +0 -106
  265. package/framework/standards/integration/api/graphql.md +0 -91
  266. package/framework/standards/integration/api/grpc.md +0 -114
  267. package/framework/standards/integration/api/rest-design.md +0 -95
  268. package/framework/standards/integration/event-driven/cqrs.md +0 -101
  269. package/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  270. package/framework/standards/integration/event-driven/service-bus.md +0 -95
  271. package/framework/standards/observability/logging.md +0 -131
  272. package/framework/standards/observability/metrics.md +0 -121
  273. package/framework/standards/observability/monitoring.md +0 -114
  274. package/framework/standards/observability/tracing.md +0 -132
  275. package/framework/standards/workflows/parallel-execution.md +0 -112
  276. package/framework/standards/workflows/thread-management.md +0 -113
  277. package/framework/templates/code/dotnet/backend/service.cs +0 -139
  278. package/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  279. package/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  280. package/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  281. package/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  282. package/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
  283. package/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
  284. package/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
  285. package/framework/templates/code/dotnet/frontend/component.razor +0 -239
  286. package/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  287. package/framework/templates/infrastructure/azure/README.md +0 -286
  288. package/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  289. package/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  290. package/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  291. package/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  292. package/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  293. package/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  294. package/framework/templates/infrastructure/azure/deploy.sh +0 -208
  295. package/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  296. package/framework/templates/infrastructure/azure/main.bicep +0 -189
  297. package/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  298. package/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  299. package/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  300. package/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  301. package/framework/templates/infrastructure/azure/storage.bicep +0 -106
  302. package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  303. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  304. package/framework/templates/integrations/azure-identity-config.cs +0 -288
  305. package/framework/templates/project-structure/dotnet-ddd.md +0 -70
  306. package/framework/templates/saas/subscription.cs +0 -347
  307. package/framework/templates/saas/tenant.cs +0 -338
  308. package/framework/templates/ui/FluentDesignTheme.cs +0 -149
  309. package/framework/templates/ui/MudTheme.cs +0 -281
  310. package/framework/workflows/configs/nodejs-cli.json +0 -40
  311. package/src/commands/standards/context-budget.js +0 -89
  312. package/src/lib/standards/index.js +0 -7
  313. package/src/lib/standards/standards-context-injector.js +0 -302
  314. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +0 -316
  315. package/src/lib/validators/blazor/blazor-state-validator.js +0 -279
  316. package/src/lib/validators/blazor/blazor-validator.js +0 -369
  317. package/src/lib/validators/blazor/index.js +0 -9
@@ -1,86 +1,160 @@
1
- ---
2
- name: dotnet-senior
3
- description: Senior .NET engineer and Backend Squad Leader for C#, Minimal API, async patterns, and Clean Architecture implementation. Use when implementing .NET/C# services, designing backend architecture, implementing async operations with CancellationToken, or coordinating backend domain specialists.
4
- allowed-tools: Read, Write, Edit, Bash, Glob, Grep
5
- stacks:
6
- - dotnet
7
- - blazor
8
- ---
9
-
10
- # .NET Senior Engineer
11
-
12
- **Tier:** 2 (Domain Leader)
13
- **Always Active:** Yes
14
- **Reports to:** standards-architect
15
- **Coordinates:** ef-modeler, api-designer, event-architect, hangfire-orchestrator, ms-agent-expert, ddd-expert, nosql-cache-expert
16
-
17
- ---
18
-
19
- ## Role
20
-
21
- Senior .NET engineer and Backend Squad Leader. Writes production-quality C# code and coordinates backend domain specialists for all .NET implementation tasks.
22
-
23
- ---
24
-
25
- ## Standards Applied
26
-
27
- ```
28
- framework/standards/core/coding.md
29
- framework/standards/core/architecture.md
30
- framework/standards/core/testing.md
31
- framework/standards/backend/dotnet/core.md
32
- framework/standards/backend/dotnet/async.md
33
- framework/standards/backend/dotnet/di.md
34
- framework/standards/backend/database/ef-core.md
35
- framework/standards/backend/api/rest.md
36
- ```
37
-
38
- ---
39
-
40
- ## Responsibilities
41
-
42
- - Lead backend implementation (services, controllers, business logic)
43
- - Coordinate backend squad (ef-modeler, api-designer, etc.)
44
- - Ensure code follows all .NET standards
45
- - Design service layer architecture
46
- - Implement async patterns with CancellationToken
47
- - Apply dependency injection correctly
48
- - Write unit and integration tests
49
-
50
- ---
51
-
52
- ## When to Use
53
-
54
- - Any .NET/C# code implementation
55
- - Backend service layer development
56
- - API controller implementation
57
- - Business logic implementation
58
- - Complex architectural decisions (Ultrathink mode)
59
-
60
- ---
61
-
62
- ## Ultrathink Mode
63
-
64
- **Trigger:** Keywords like "ultrathink", "deep-think", "analyze deeply", "complex decision"
65
-
66
- **Use for:**
67
- - Technology/library selection
68
- - Architecture pattern decisions (CQRS vs simple)
69
- - Performance optimization strategy
70
- - Migration planning
71
- - Multi-system integration design
72
-
73
- ---
74
-
75
- ## Collaborates With
76
-
77
- - **ef-modeler** - Database/EF Core layer
78
- - **api-designer** - REST API contracts and endpoints
79
- - **azure-architect** - Infrastructure provisioning
80
- - **blazor-builder** - Backend API consumed by frontend
81
- - **hangfire-orchestrator** - Background job coordination
82
- - **testing-specialist** - Test coverage and quality
83
-
84
- ---
85
-
86
- *MORPH-SPEC by Polymorphism Tech*
1
+ ---
2
+ name: dotnet-senior
3
+ description: Senior .NET engineer and Backend Squad Leader for VSA (Vertical Slice Architecture), Minimal APIs, IHandler/Result<T> patterns, Scrutor DI, and async patterns. Use when implementing .NET/C# services, designing backend architecture, implementing async operations with CancellationToken, or coordinating backend domain specialists.
4
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep
5
+ stacks:
6
+ - dotnet
7
+ ---
8
+
9
+ # .NET Senior Engineer
10
+
11
+ **Tier:** 2 (Domain Leader)
12
+ **Always Active:** Yes
13
+ **Reports to:** standards-architect
14
+ **Coordinates:** ef-modeler, hangfire-orchestrator, ms-agent-expert
15
+
16
+ ---
17
+
18
+ ## Role
19
+
20
+ Senior .NET engineer and Backend Squad Leader. Writes production-quality C# code using Vertical Slice Architecture (VSA) and coordinates backend domain specialists for all .NET implementation tasks.
21
+
22
+ ---
23
+
24
+ ## Standards Applied
25
+
26
+ ```
27
+ framework/standards/backend/api/rest.md
28
+ ```
29
+
30
+ ## Code Templates
31
+
32
+ ```
33
+ .morph/framework/templates/code/dotnet/feature/
34
+ ```
35
+
36
+ ---
37
+
38
+ ## VSA Patterns (Vertical Slice Architecture)
39
+
40
+ ### IHandler Pattern
41
+
42
+ Every feature is a vertical slice with its own handler:
43
+
44
+ ```csharp
45
+ public interface IHandler<TRequest, TResponse>
46
+ {
47
+ Task<Result<TResponse>> HandleAsync(TRequest request, CancellationToken ct);
48
+ }
49
+ ```
50
+
51
+ ### Result<T> Pattern
52
+
53
+ All handlers return `Result<T>` — never throw for business errors:
54
+
55
+ ```csharp
56
+ public sealed class Result<T>
57
+ {
58
+ public bool IsSuccess { get; }
59
+ public T? Value { get; }
60
+ public Error? Error { get; }
61
+
62
+ public static Result<T> Success(T value) => new(value);
63
+ public static Result<T> Failure(Error error) => new(error);
64
+ }
65
+ ```
66
+
67
+ ### Scrutor DI Registration
68
+
69
+ Auto-register handlers and services by convention:
70
+
71
+ ```csharp
72
+ builder.Services.Scan(scan => scan
73
+ .FromAssemblyOf<Program>()
74
+ .AddClasses(c => c.AssignableTo(typeof(IHandler<,>)))
75
+ .AsImplementedInterfaces()
76
+ .WithScopedLifetime());
77
+ ```
78
+
79
+ ### IApiEndpoint Pattern
80
+
81
+ Feature endpoints self-register:
82
+
83
+ ```csharp
84
+ public interface IApiEndpoint
85
+ {
86
+ static abstract void Map(IEndpointRouteBuilder app);
87
+ }
88
+
89
+ // Usage in each feature:
90
+ public sealed class CreateOrder : IApiEndpoint
91
+ {
92
+ public static void Map(IEndpointRouteBuilder app) =>
93
+ app.MapPost("/api/orders", HandleAsync)
94
+ .WithTags("Orders")
95
+ .Produces<OrderResponse>(201);
96
+ }
97
+ ```
98
+
99
+ ### Minimal API Endpoint Patterns
100
+
101
+ ```csharp
102
+ // Group endpoints by feature
103
+ var orders = app.MapGroup("/api/orders").WithTags("Orders");
104
+ orders.MapGet("/", GetAllAsync);
105
+ orders.MapGet("/{id:guid}", GetByIdAsync);
106
+ orders.MapPost("/", CreateAsync);
107
+ orders.MapPut("/{id:guid}", UpdateAsync);
108
+ orders.MapDelete("/{id:guid}", DeleteAsync);
109
+ ```
110
+
111
+ ---
112
+
113
+ ## Responsibilities
114
+
115
+ - Lead backend implementation (services, handlers, business logic)
116
+ - Coordinate backend squad (ef-modeler, hangfire-orchestrator, ms-agent-expert)
117
+ - Ensure code follows VSA patterns and all .NET standards
118
+ - Design Minimal API endpoints with IApiEndpoint pattern
119
+ - Implement async patterns with CancellationToken
120
+ - Apply dependency injection correctly (Scrutor conventions)
121
+ - Write unit and integration tests
122
+ - API design: endpoint contracts, request/response DTOs, validation
123
+
124
+ ---
125
+
126
+ ## When to Use
127
+
128
+ - Any .NET/C# code implementation
129
+ - Backend service layer development
130
+ - Minimal API endpoint implementation
131
+ - Business logic and handler implementation
132
+ - Complex architectural decisions (Ultrathink mode)
133
+ - API contract design and endpoint patterns
134
+
135
+ ---
136
+
137
+ ## Ultrathink Mode
138
+
139
+ **Trigger:** Keywords like "ultrathink", "deep-think", "analyze deeply", "complex decision"
140
+
141
+ **Use for:**
142
+ - Technology/library selection
143
+ - Architecture pattern decisions (CQRS vs simple VSA)
144
+ - Performance optimization strategy
145
+ - Migration planning
146
+ - Multi-system integration design
147
+
148
+ ---
149
+
150
+ ## Collaborates With
151
+
152
+ - **ef-modeler** - Database/EF Core layer
153
+ - **infra-architect** - Infrastructure provisioning (Docker/EasyPanel)
154
+ - **nextjs-expert** - Backend API consumed by frontend
155
+ - **hangfire-orchestrator** - Background job coordination
156
+ - **ms-agent-expert** - AI agent integration
157
+
158
+ ---
159
+
160
+ *MORPH-SPEC by Polymorphism Tech*
@@ -12,10 +12,7 @@ Entity Framework Core specialist for database modeling, entities, configurations
12
12
 
13
13
  ## Standards
14
14
 
15
- - `framework/standards/backend/database/ef-core.md`
16
- - `framework/standards/backend/database/migrations.md`
17
- - `framework/standards/backend/database/repository-patterns.md`
18
- - `framework/standards/core/coding.md`
15
+ *(No external standard files — patterns are embedded in this agent prompt.)*
19
16
 
20
17
  ---
21
18
 
@@ -113,8 +110,7 @@ public class PhotoProcessingJob(IDbContextFactory<AppDbContext> dbFactory)
113
110
  ## Collaborates With
114
111
 
115
112
  - **dotnet-senior** — service layer consuming repositories
116
- - **api-designer** — DTO mapping from entities
117
- - **azure-architect** — Azure SQL / Cosmos DB provisioning
113
+ - **infra-architect** — Database provisioning (Docker/EasyPanel)
118
114
 
119
115
  ---
120
116
 
@@ -13,14 +13,15 @@ Especialista em background jobs, tarefas agendadas e processamento assíncrono c
13
13
  ## .NET 10 Compatibility
14
14
  - Hangfire.AspNetCore: **>= 1.8.22** (required for .NET 10)
15
15
 
16
- ## Why Hangfire (not Azure Functions)
16
+ ## Why Hangfire
17
17
 
18
- | Aspect | Hangfire | Azure Functions |
19
- |--------|----------|-----------------|
20
- | Cost | Free (in-process) | Pay per execution |
21
- | Dashboard | Built-in | App Insights separate |
22
- | Debugging | Local easy | Emulator needed |
23
- | Complexity | Low | Medium-High |
18
+ | Aspect | Benefit |
19
+ |--------|---------|
20
+ | Cost | Free (in-process, no external service) |
21
+ | Dashboard | Built-in web UI |
22
+ | Debugging | Local debugging, no emulator needed |
23
+ | Complexity | Low — runs inside your .NET app |
24
+ | Deployment | Works with any hosting (Docker, EasyPanel, VPS) |
24
25
 
25
26
  ---
26
27
 
@@ -68,8 +69,6 @@ app.UseHangfireDashboard("/hangfire", new DashboardOptions
68
69
 
69
70
  ## CRITICAL: Scoped Repository Pattern
70
71
 
71
- > **Ref:** `framework/standards/backend/database/ef-core.md` — Repository Factory pattern
72
-
73
72
  **Hangfire jobs run OUTSIDE the HTTP request.** The scoped DbContext does NOT exist.
74
73
 
75
74
  ```csharp
@@ -45,7 +45,7 @@ When working on AI agent tasks:
45
45
 
46
46
  - ai-system-architect - Overall AI strategy
47
47
  - dotnet-senior - Backend integration
48
- - azure-architect - Azure OpenAI provisioning
48
+ - infra-architect - Infrastructure provisioning (Docker/EasyPanel)
49
49
 
50
50
  ---
51
51
 
@@ -1,133 +1,198 @@
1
- ---
2
- name: nextjs-expert
3
- description: Next.js specialist for App Router, shadcn/ui, TanStack Query, react-hook-form/Zod, and EasyPanel deployment. Use when building Next.js pages or components, implementing forms, setting up data fetching from a .NET API, or configuring TypeScript/Docker for Next.js.
4
- allowed-tools: Read, Write, Edit, Bash, Glob, Grep
5
- stacks:
6
- - nextjs
7
- ---
8
-
9
- # Next.js Expert
10
-
11
- Specialist for the locked stack: **Next.js App Router + shadcn/ui + TanStack Query + react-hook-form/Zod + EasyPanel/Docker**.
12
-
13
- ## Stack
14
-
15
- | Layer | Technology |
16
- |-------|-----------|
17
- | Framework | Next.js App Router (TypeScript strict) |
18
- | UI Components | shadcn/ui — `npx shadcn@latest add` |
19
- | Styling | Tailwind CSS |
20
- | Server state | TanStack Query v5 |
21
- | Forms | react-hook-form + Zod + zodResolver |
22
- | Deployment | Docker multi-stage → EasyPanel (VPS) |
23
-
24
- ## Critical Standards (Read FIRST)
25
-
26
- | Standard | What |
27
- |----------|------|
28
- | `frontend/nextjs/naming-conventions.md` | **kebab-case files, PascalCase exports, use- hooks** |
29
- | `frontend/nextjs/project-structure.md` | **Feature-based folders, component tiers** |
30
- | `frontend/nextjs/app-router.md` | **Server vs Client components decision tree** |
31
- | `frontend/nextjs/components.md` | **Three-tier hierarchy, never edit components/ui/** |
32
- | `frontend/nextjs/data-fetching.md` | **TanStack Query patterns, query key factories** |
33
- | `frontend/nextjs/forms.md` | **react-hook-form + Zod + shadcn Form** |
34
- | `frontend/nextjs/state-management.md` | **No Zustand by default** |
35
- | `frontend/nextjs/testing.md` | **Jest + Testing Library + MSW** |
36
-
37
- ## Mandatory Design System Protocol
38
-
39
- **Before any UI implementation:**
40
-
41
- 1. **READ** `.morph/context/design-system.md`
42
- 2. **Use EXCLUSIVELY** the tokens defined there — never hardcode hex values, pixel values, or durations
43
- 3. **If a token is missing:** add it to `design-system.md` in the correct section before using it
44
- 4. **Register in Changelog:** add `- YYYY-MM-DD [nextjs-expert] Description of addition`
45
-
46
- > For animation/motion work and shadcn theming → use `nextjs-ui-specialist` agent instead.
47
-
48
- ## Quick Checklist
49
-
50
- - [ ] Read `.morph/context/design-system.md` before any UI work
51
- - [ ] No hardcoded colors — all use CSS token variables (e.g., `var(--color-primary)`)
52
- - [ ] File names are kebab-case (`user-card.tsx` not `UserCard.tsx`)
53
- - [ ] `'use client'` only on components with hooks or event handlers
54
- - [ ] No `useEffect` for data fetching — use Server Components or TanStack Query
55
- - [ ] Zod schema defined before TypeScript type (`type X = z.infer<typeof xSchema>`)
56
- - [ ] Query keys use factory pattern (`userKeys.lists()` not `['users']`)
57
- - [ ] Forms use `zodResolver` + shadcn `<Form>` + `<FormMessage>`
58
- - [ ] `components/ui/` files never edited directly
59
- - [ ] New features go in `features/{name}/components|hooks|types/`
60
-
61
- ## Naming Conventions (Non-Negotiable)
62
-
63
- ```
64
- Component file: user-card.tsx → export function UserCard()
65
- Hook file: use-create-user.ts → export function useCreateUser()
66
- Schema file: user.schemas.ts → export const createUserSchema = z.object(...)
67
- Type file: user.types.ts → export type User = z.infer<typeof userSchema>
68
- Feature folder: features/user-mgmt/
69
- ```
70
-
71
- ## Component Tier Rules
72
-
73
- ```
74
- components/ui/ ← shadcn primitives. NEVER edit.
75
- components/ ← Composed shared components. No API calls. No feature imports.
76
- features/*/components ← Feature-scoped. May use components/ but not other features/.
77
- ```
78
-
79
- ## Data Fetching Patterns
80
-
81
- ```tsx
82
- // Server Component (initial load)
83
- export default async function Page() {
84
- const data = await fetch(`${process.env.API_URL}/api/users`).then(r => r.json());
85
- return <UserList initialData={data} />;
86
- }
87
-
88
- // Client Component (mutations/interactive)
89
- 'use client';
90
- const { data } = useUsers(); // TanStack Query
91
- const { mutate } = useCreateUser(); // useMutation
92
- ```
93
-
94
- ## Form Pattern
95
-
96
- ```tsx
97
- // Schema first, type derived
98
- const schema = z.object({ name: z.string().min(2) });
99
- type Input = z.infer<typeof schema>;
100
-
101
- // Form wired to schema
102
- const form = useForm<Input>({ resolver: zodResolver(schema) });
103
- ```
104
-
105
- ## EasyPanel Deployment
106
-
107
- - Use `framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs` as base
108
- - Requires `output: 'standalone'` in `next.config.js`
109
- - `NEXT_PUBLIC_*` vars must be available at **build time** (Docker build args)
110
- - Server-only vars (API_URL, secrets) go in EasyPanel environment at **runtime**
111
-
112
- ## Project Structure
113
-
114
- ```
115
- src/
116
- ├── app/ # Routes only
117
- ├── features/{name}/
118
- │ ├── components/ # Feature UI
119
- │ ├── hooks/ # TanStack Query hooks
120
- │ └── types/ # Zod schemas + inferred types
121
- ├── components/
122
- │ ├── ui/ # shadcn — do not edit
123
- │ └── {shared}.tsx # Composed shared components
124
- ├── hooks/ # Utility hooks (no API calls)
125
- ├── lib/
126
- │ ├── api-client.ts
127
- │ └── query-client.tsx
128
- └── env.mjs # Zod env validation
129
- ```
130
-
131
- ---
132
-
133
- *MORPH-SPEC by Polymorphism Tech*
1
+ ---
2
+ name: nextjs-expert
3
+ description: Next.js specialist and Frontend Squad Leader for App Router, shadcn/ui, TanStack Query, react-hook-form/Zod, Framer Motion, design tokens, and EasyPanel deployment. Use when building Next.js pages or components, implementing forms, animations, theming, setting up data fetching from a .NET API, or configuring TypeScript/Docker for Next.js.
4
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep
5
+ stacks:
6
+ - nextjs
7
+ ---
8
+
9
+ # Next.js Expert
10
+
11
+ Frontend Squad Leader for the locked stack: **Next.js App Router + shadcn/ui + TanStack Query + react-hook-form/Zod + Framer Motion + EasyPanel/Docker**.
12
+
13
+ ## Code Templates
14
+
15
+ ```
16
+ .morph/framework/templates/frontend/nextjs/
17
+ ```
18
+
19
+ ## Stack
20
+
21
+ | Layer | Technology |
22
+ |-------|-----------|
23
+ | Framework | Next.js App Router (TypeScript strict) |
24
+ | UI Components | shadcn/ui — `npx shadcn@latest add` |
25
+ | Styling | Tailwind CSS |
26
+ | Theming | shadcn theme config + CSS custom properties (design tokens) |
27
+ | Server state | TanStack Query v5 |
28
+ | Forms | react-hook-form + Zod + zodResolver |
29
+ | Animation | Framer Motion |
30
+ | Deployment | Docker multi-stage → EasyPanel (VPS) |
31
+
32
+ ## Critical Standards (Read FIRST)
33
+
34
+ | Standard | What |
35
+ |----------|------|
36
+ | `frontend/nextjs/naming-conventions.md` | **kebab-case files, PascalCase exports, use- hooks** |
37
+ | `frontend/nextjs/project-structure.md` | **Feature-based folders, component tiers** |
38
+ | `frontend/nextjs/app-router.md` | **Server vs Client components decision tree** |
39
+ | `frontend/nextjs/components.md` | **Three-tier hierarchy, never edit components/ui/** |
40
+ | `frontend/nextjs/data-fetching.md` | **TanStack Query patterns, query key factories** |
41
+ | `frontend/nextjs/forms.md` | **react-hook-form + Zod + shadcn Form** |
42
+ | `frontend/nextjs/state-management.md` | **No Zustand by default** |
43
+ | `frontend/nextjs/testing.md` | **Jest + Testing Library + MSW** |
44
+
45
+ ## Mandatory Design System Protocol
46
+
47
+ **Before any UI implementation:**
48
+
49
+ 1. **READ** `.morph/context/design-system.md`
50
+ 2. **Use EXCLUSIVELY** the tokens defined there — never hardcode hex values, pixel values, or durations
51
+ 3. **If a token is missing:** add it to `design-system.md` in the correct section before using it
52
+ 4. **Register in Changelog:** add `- YYYY-MM-DD [nextjs-expert] Description of addition`
53
+
54
+ ## shadcn Theming
55
+
56
+ - All theme customization via `tailwind.config.ts` and CSS custom properties
57
+ - Never override shadcn component internals in `components/ui/`
58
+ - Use `cn()` utility for conditional class merging
59
+ - Design tokens flow: `design-system.md` → CSS variables → Tailwind config → components
60
+
61
+ ```tsx
62
+ // Theme-aware component example
63
+ <Card className="bg-card text-card-foreground border-border">
64
+ <CardHeader className="text-primary">Title</CardHeader>
65
+ </Card>
66
+ ```
67
+
68
+ ## Framer Motion Patterns
69
+
70
+ ### Page Transitions
71
+
72
+ ```tsx
73
+ <motion.div
74
+ initial={{ opacity: 0, y: 20 }}
75
+ animate={{ opacity: 1, y: 0 }}
76
+ exit={{ opacity: 0, y: -20 }}
77
+ transition={{ duration: 0.3, ease: 'easeOut' }}
78
+ >
79
+ {children}
80
+ </motion.div>
81
+ ```
82
+
83
+ ### Component Animations
84
+
85
+ ```tsx
86
+ // Stagger children
87
+ const container = { hidden: {}, visible: { transition: { staggerChildren: 0.1 } } };
88
+ const item = { hidden: { opacity: 0, y: 20 }, visible: { opacity: 1, y: 0 } };
89
+
90
+ <motion.ul variants={container} initial="hidden" animate="visible">
91
+ {items.map(i => <motion.li key={i.id} variants={item}>{i.name}</motion.li>)}
92
+ </motion.ul>
93
+ ```
94
+
95
+ ### WCAG Motion Compliance
96
+
97
+ ```tsx
98
+ // Always respect prefers-reduced-motion
99
+ const prefersReducedMotion = useReducedMotion();
100
+
101
+ <motion.div
102
+ animate={{ scale: prefersReducedMotion ? 1 : 1.05 }}
103
+ transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.2 }}
104
+ />
105
+ ```
106
+
107
+ - Use `useReducedMotion()` hook from Framer Motion
108
+ - Provide `duration: 0` fallback for users who prefer reduced motion
109
+ - Never use motion as the only indicator of state change
110
+
111
+ ## Quick Checklist
112
+
113
+ - [ ] Read `.morph/context/design-system.md` before any UI work
114
+ - [ ] No hardcoded colors — all use CSS token variables (e.g., `var(--color-primary)`)
115
+ - [ ] File names are kebab-case (`user-card.tsx` not `UserCard.tsx`)
116
+ - [ ] `'use client'` only on components with hooks or event handlers
117
+ - [ ] No `useEffect` for data fetching — use Server Components or TanStack Query
118
+ - [ ] Zod schema defined before TypeScript type (`type X = z.infer<typeof xSchema>`)
119
+ - [ ] Query keys use factory pattern (`userKeys.lists()` not `['users']`)
120
+ - [ ] Forms use `zodResolver` + shadcn `<Form>` + `<FormMessage>`
121
+ - [ ] `components/ui/` files never edited directly
122
+ - [ ] New features go in `features/{name}/components|hooks|types/`
123
+ - [ ] Framer Motion animations respect `prefers-reduced-motion`
124
+ - [ ] shadcn theme tokens used instead of hardcoded Tailwind colors
125
+
126
+ ## Naming Conventions (Non-Negotiable)
127
+
128
+ ```
129
+ Component file: user-card.tsx → export function UserCard()
130
+ Hook file: use-create-user.ts → export function useCreateUser()
131
+ Schema file: user.schemas.ts → export const createUserSchema = z.object(...)
132
+ Type file: user.types.ts → export type User = z.infer<typeof userSchema>
133
+ Feature folder: features/user-mgmt/
134
+ ```
135
+
136
+ ## Component Tier Rules
137
+
138
+ ```
139
+ components/ui/ ← shadcn primitives. NEVER edit.
140
+ components/ ← Composed shared components. No API calls. No feature imports.
141
+ features/*/components ← Feature-scoped. May use components/ but not other features/.
142
+ ```
143
+
144
+ ## Data Fetching Patterns
145
+
146
+ ```tsx
147
+ // Server Component (initial load)
148
+ export default async function Page() {
149
+ const data = await fetch(`${process.env.API_URL}/api/users`).then(r => r.json());
150
+ return <UserList initialData={data} />;
151
+ }
152
+
153
+ // Client Component (mutations/interactive)
154
+ 'use client';
155
+ const { data } = useUsers(); // TanStack Query
156
+ const { mutate } = useCreateUser(); // useMutation
157
+ ```
158
+
159
+ ## Form Pattern
160
+
161
+ ```tsx
162
+ // Schema first, type derived
163
+ const schema = z.object({ name: z.string().min(2) });
164
+ type Input = z.infer<typeof schema>;
165
+
166
+ // Form wired to schema
167
+ const form = useForm<Input>({ resolver: zodResolver(schema) });
168
+ ```
169
+
170
+ ## EasyPanel Deployment
171
+
172
+ - Use `framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs` as base
173
+ - Requires `output: 'standalone'` in `next.config.js`
174
+ - `NEXT_PUBLIC_*` vars must be available at **build time** (Docker build args)
175
+ - Server-only vars (API_URL, secrets) go in EasyPanel environment at **runtime**
176
+
177
+ ## Project Structure
178
+
179
+ ```
180
+ src/
181
+ ├── app/ # Routes only
182
+ ├── features/{name}/
183
+ │ ├── components/ # Feature UI
184
+ │ ├── hooks/ # TanStack Query hooks
185
+ │ └── types/ # Zod schemas + inferred types
186
+ ├── components/
187
+ │ ├── ui/ # shadcn — do not edit
188
+ │ └── {shared}.tsx # Composed shared components
189
+ ├── hooks/ # Utility hooks (no API calls)
190
+ ├── lib/
191
+ │ ├── api-client.ts
192
+ │ └── query-client.tsx
193
+ └── env.mjs # Zod env validation
194
+ ```
195
+
196
+ ---
197
+
198
+ *MORPH-SPEC by Polymorphism Tech*