@polymorphism-tech/morph-spec 4.12.0 → 4.14.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 (316) hide show
  1. package/CLAUDE.md +7 -7
  2. package/README.md +28 -34
  3. package/bin/morph-spec.js +41 -24
  4. package/bin/task-manager.js +962 -1341
  5. package/bin/validate.js +1 -1
  6. package/claude-plugin.json +1 -1
  7. package/docs/CHEATSHEET.md +14 -16
  8. package/docs/QUICKSTART.md +15 -15
  9. package/framework/CLAUDE.md +5 -2
  10. package/framework/agents/README.md +3 -4
  11. package/framework/agents/ai-agents/ai-system-architect.md +6 -10
  12. package/framework/agents/architecture/seo-growth-hacker.md +166 -326
  13. package/framework/agents/architecture/standards-architect.md +21 -31
  14. package/framework/agents/backend/dotnet-senior.md +160 -86
  15. package/framework/agents/backend/ef-modeler.md +2 -6
  16. package/framework/agents/backend/hangfire-orchestrator.md +8 -9
  17. package/framework/agents/backend/ms-agent-expert.md +1 -1
  18. package/framework/agents/frontend/nextjs-expert.md +198 -133
  19. package/framework/agents/frontend/ui-ux-designer.md +226 -267
  20. package/framework/agents/infrastructure/infra-architect.md +191 -27
  21. package/framework/agents/integrations/clerk-auth.md +19 -26
  22. package/framework/agents/integrations/hangfire-integration.md +1 -4
  23. package/framework/agents.json +1084 -2278
  24. package/framework/commands/morph-apply.md +4 -6
  25. package/framework/commands/morph-preflight.md +192 -269
  26. package/framework/commands/morph-proposal.md +210 -238
  27. package/framework/commands/morph-status.md +72 -92
  28. package/framework/commands/morph-troubleshoot.md +6 -13
  29. package/framework/hooks/README.md +1 -6
  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/phase-utils.js +4 -8
  42. package/framework/hooks/shared/state-reader.js +34 -3
  43. package/framework/phases.json +162 -200
  44. package/framework/rules/ai-agents-standards.md +15 -0
  45. package/framework/rules/asaas-standards.md +13 -0
  46. package/framework/rules/clerk-standards.md +13 -0
  47. package/framework/rules/csharp-standards.md +8 -4
  48. package/framework/rules/data-standards.md +18 -0
  49. package/framework/rules/dotnet-templates.md +87 -0
  50. package/framework/rules/frontend-standards.md +13 -13
  51. package/framework/rules/hangfire-standards.md +13 -0
  52. package/framework/rules/infrastructure-standards.md +27 -16
  53. package/framework/rules/morph-workflow.md +73 -13
  54. package/framework/rules/nextjs-standards.md +1 -0
  55. package/framework/rules/nextjs-templates.md +40 -0
  56. package/framework/rules/resend-standards.md +12 -0
  57. package/framework/rules/supabase-standards.md +29 -0
  58. package/framework/skills/README.md +6 -8
  59. package/framework/skills/level-0-meta/mcp-registry.json +21 -99
  60. package/framework/{standards/ai-agents/team-orchestration.md → skills/level-0-meta/morph-agent-teams/SKILL.md} +472 -479
  61. package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +28 -1
  62. package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
  63. package/framework/skills/level-0-meta/morph-code-review/SKILL.md +1 -5
  64. package/framework/skills/level-0-meta/morph-code-review/scripts/scan-csharp.mjs +1 -1
  65. package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +23 -41
  66. package/framework/skills/level-0-meta/morph-init/SKILL.md +18 -14
  67. package/framework/skills/level-0-meta/morph-parallel-dispatch/SKILL.md +225 -0
  68. package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +20 -0
  69. package/framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md +4 -8
  70. package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +15 -59
  71. package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +7 -19
  72. package/framework/skills/level-0-meta/morph-verification-before-completion/scripts/check-phase-outputs.mjs +8 -8
  73. package/framework/skills/level-1-workflows/README.md +1 -1
  74. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +49 -50
  75. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +57 -123
  76. package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +5 -50
  77. package/framework/skills/level-1-workflows/morph-phase-design/references/spec-example.md +1 -1
  78. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +127 -159
  79. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/code-quality-reviewer-prompt.md +1 -1
  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 +143 -172
  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 +57 -77
  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 -2369
  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 +1 -5
  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/phase/phase-reset.js +1 -1
  159. package/src/commands/project/doctor.js +10 -32
  160. package/src/commands/project/init.js +12 -0
  161. package/src/commands/project/status.js +6 -12
  162. package/src/commands/scaffold/scaffold.js +131 -0
  163. package/src/commands/scope/escalate.js +1 -1
  164. package/src/commands/state/advance-phase.js +15 -29
  165. package/src/commands/state/state.js +20 -5
  166. package/src/commands/tasks/task.js +0 -30
  167. package/src/commands/validation/validate-feature.js +3 -10
  168. package/src/core/paths/output-schema.js +12 -13
  169. package/src/core/state/phase-state-machine.js +211 -217
  170. package/src/core/state/state-manager.js +9 -9
  171. package/src/lib/agents/agents-manager.js +2 -2
  172. package/src/lib/agents/output-collector.js +1 -2
  173. package/src/lib/detectors/design-system-detector.js +4 -4
  174. package/src/lib/detectors/index.js +1 -11
  175. package/src/lib/generators/architecture-scanner.js +640 -0
  176. package/src/lib/generators/context-generator.js +3 -3
  177. package/src/lib/generators/design-system-generator.js +508 -587
  178. package/src/lib/generators/index.js +12 -10
  179. package/src/lib/generators/metadata-extractor.js +386 -387
  180. package/src/lib/generators/recap-generator.js +4 -4
  181. package/src/lib/generators/scaffold-generator.js +317 -0
  182. package/src/lib/generators/settings-generator.js +0 -1
  183. package/src/lib/phase-chain/phase-validator.js +64 -42
  184. package/src/lib/stack/stack-profile.js +2 -2
  185. package/src/lib/standards/digest-builder.js +72 -285
  186. package/src/lib/tasks/task-parser.js +11 -5
  187. package/src/lib/validators/architecture/architecture-validator.js +259 -387
  188. package/src/lib/validators/content/content-validator.js +287 -287
  189. package/src/lib/validators/css/css-validator.js +340 -352
  190. package/src/lib/validators/packages/package-validator.js +347 -360
  191. package/src/lib/validators/shared/issue-counter.js +14 -18
  192. package/src/lib/validators/validation-runner.js +3 -19
  193. package/src/scripts/setup-infra.js +1 -1
  194. package/src/utils/agents-installer.js +61 -10
  195. package/src/utils/file-copier.js +1 -0
  196. package/src/utils/hooks-installer.js +11 -19
  197. package/src/utils/skills-installer.js +178 -178
  198. package/framework/agents/architecture/prompt-engineer.md +0 -195
  199. package/framework/agents/backend/api-designer.md +0 -106
  200. package/framework/agents/frontend/blazor-builder.md +0 -229
  201. package/framework/agents/frontend/nextjs-ui-specialist.md +0 -218
  202. package/framework/agents/infrastructure/azure-architect.md +0 -150
  203. package/framework/agents/infrastructure/azure-deploy-specialist.md +0 -707
  204. package/framework/agents/infrastructure/bicep-architect.md +0 -132
  205. package/framework/agents/infrastructure/container-specialist.md +0 -137
  206. package/framework/agents/infrastructure/devops-engineer.md +0 -126
  207. package/framework/agents/integrations/azure-identity.md +0 -148
  208. package/framework/agents/quality/code-analyzer.md +0 -239
  209. package/framework/agents/quality/testing-specialist.md +0 -130
  210. package/framework/hooks/claude-code/notification/approval-reminder.js +0 -57
  211. package/framework/hooks/claude-code/post-tool-use/context-refresh.js +0 -109
  212. package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +0 -78
  213. package/framework/index/troubleshooting-index.json +0 -184
  214. package/framework/rules/testing-standards.md +0 -14
  215. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +0 -230
  216. package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +0 -70
  217. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +0 -256
  218. package/framework/skills/level-1-workflows/morph-phase-clarify/references/clarifications-example.md +0 -117
  219. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +0 -269
  220. package/framework/standards/ai-agents/blazor-ui.md +0 -364
  221. package/framework/standards/architecture/ddd/aggregates.md +0 -120
  222. package/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
  223. package/framework/standards/architecture/ddd/complexity-levels.md +0 -108
  224. package/framework/standards/architecture/ddd/entities.md +0 -99
  225. package/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
  226. package/framework/standards/architecture/ddd/value-objects.md +0 -124
  227. package/framework/standards/backend/api/minimal-api.md +0 -494
  228. package/framework/standards/backend/api/rest.md +0 -492
  229. package/framework/standards/backend/authentication/passkeys.md +0 -428
  230. package/framework/standards/backend/database/ef-core.md +0 -199
  231. package/framework/standards/backend/database/migrations.md +0 -393
  232. package/framework/standards/backend/database/repository-patterns.md +0 -528
  233. package/framework/standards/backend/dotnet/async.md +0 -366
  234. package/framework/standards/backend/dotnet/core.md +0 -117
  235. package/framework/standards/backend/dotnet/di.md +0 -439
  236. package/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  237. package/framework/standards/context/analytics.md +0 -96
  238. package/framework/standards/context/bundles.md +0 -110
  239. package/framework/standards/context/priming.md +0 -78
  240. package/framework/standards/core/architecture.md +0 -185
  241. package/framework/standards/core/coding.md +0 -214
  242. package/framework/standards/core/git-branching-strategy.md +0 -403
  243. package/framework/standards/core/git.md +0 -185
  244. package/framework/standards/core/testing.md +0 -295
  245. package/framework/standards/data/nosql/blob-storage.md +0 -102
  246. package/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  247. package/framework/standards/frontend/blazor/design-checklist.md +0 -222
  248. package/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  249. package/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  250. package/framework/standards/frontend/blazor/html-conversion.md +0 -184
  251. package/framework/standards/frontend/blazor/lifecycle.md +0 -195
  252. package/framework/standards/frontend/blazor/pitfalls.md +0 -198
  253. package/framework/standards/frontend/blazor/state.md +0 -191
  254. package/framework/standards/frontend/design-system/aesthetic-direction.md +0 -266
  255. package/framework/standards/frontend/design-system/design-trends.md +0 -171
  256. package/framework/standards/infrastructure/azure/azure.md +0 -624
  257. package/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  258. package/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  259. package/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  260. package/framework/standards/infrastructure/azure/services/functions.md +0 -486
  261. package/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  262. package/framework/standards/infrastructure/azure/services/storage.md +0 -407
  263. package/framework/standards/infrastructure/vercel/vercel-database.md +0 -106
  264. package/framework/standards/integration/api/graphql.md +0 -91
  265. package/framework/standards/integration/api/grpc.md +0 -114
  266. package/framework/standards/integration/api/rest-design.md +0 -95
  267. package/framework/standards/integration/event-driven/cqrs.md +0 -101
  268. package/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  269. package/framework/standards/integration/event-driven/service-bus.md +0 -95
  270. package/framework/standards/observability/logging.md +0 -131
  271. package/framework/standards/observability/metrics.md +0 -121
  272. package/framework/standards/observability/monitoring.md +0 -114
  273. package/framework/standards/observability/tracing.md +0 -132
  274. package/framework/standards/workflows/parallel-execution.md +0 -112
  275. package/framework/standards/workflows/thread-management.md +0 -113
  276. package/framework/templates/code/dotnet/backend/service.cs +0 -139
  277. package/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  278. package/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  279. package/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  280. package/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  281. package/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
  282. package/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
  283. package/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
  284. package/framework/templates/code/dotnet/frontend/component.razor +0 -239
  285. package/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  286. package/framework/templates/infrastructure/azure/README.md +0 -286
  287. package/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  288. package/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  289. package/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  290. package/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  291. package/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  292. package/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  293. package/framework/templates/infrastructure/azure/deploy.sh +0 -208
  294. package/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  295. package/framework/templates/infrastructure/azure/main.bicep +0 -189
  296. package/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  297. package/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  298. package/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  299. package/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  300. package/framework/templates/infrastructure/azure/storage.bicep +0 -106
  301. package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  302. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  303. package/framework/templates/integrations/azure-identity-config.cs +0 -288
  304. package/framework/templates/project-structure/dotnet-ddd.md +0 -70
  305. package/framework/templates/saas/subscription.cs +0 -347
  306. package/framework/templates/saas/tenant.cs +0 -338
  307. package/framework/templates/ui/FluentDesignTheme.cs +0 -149
  308. package/framework/templates/ui/MudTheme.cs +0 -281
  309. package/framework/workflows/configs/nodejs-cli.json +0 -40
  310. package/src/commands/standards/context-budget.js +0 -89
  311. package/src/lib/standards/index.js +0 -7
  312. package/src/lib/standards/standards-context-injector.js +0 -302
  313. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +0 -316
  314. package/src/lib/validators/blazor/blazor-state-validator.js +0 -279
  315. package/src/lib/validators/blazor/blazor-validator.js +0 -369
  316. 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*