@polymorphism-tech/morph-spec 3.0.0 → 3.1.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 (240) hide show
  1. package/CLAUDE.md +68 -400
  2. package/README.md +198 -76
  3. package/bin/detect-agents.js +227 -225
  4. package/bin/morph-spec.js +10 -0
  5. package/bin/render-template.js +303 -302
  6. package/bin/semantic-detect-agents.js +247 -246
  7. package/bin/{task-manager.js → task-manager.cjs} +12 -1
  8. package/bin/validate-agents-skills.js +257 -251
  9. package/bin/validate-agents.js +70 -69
  10. package/bin/validate-phase.js +263 -263
  11. package/docs/getting-started.md +3 -3
  12. package/package.json +3 -4
  13. package/scripts/reorganize-skills.cjs +175 -0
  14. package/scripts/validate-agents-structure.cjs +52 -0
  15. package/scripts/validate-skills.cjs +180 -0
  16. package/src/commands/create-story.js +354 -351
  17. package/src/commands/detect-agents.js +13 -2
  18. package/src/commands/detect.js +104 -104
  19. package/src/commands/state.js +334 -333
  20. package/src/commands/sync.js +167 -167
  21. package/src/commands/task.js +1 -1
  22. package/src/commands/update.js +13 -1
  23. package/src/lib/context-generator.js +7 -4
  24. package/{detectors → src/lib/detectors}/config-detector.js +223 -223
  25. package/{detectors → src/lib/detectors}/conversation-analyzer.js +163 -163
  26. package/{detectors → src/lib/detectors}/index.js +84 -84
  27. package/{detectors → src/lib/detectors}/standards-generator.js +275 -275
  28. package/src/lib/hook-executor.js +2 -1
  29. package/src/lib/stack-resolver.js +148 -0
  30. package/src/lib/standards-context-injector.js +4 -3
  31. package/src/lib/state-manager.js +21 -4
  32. package/src/lib/team-orchestrator.js +2 -1
  33. package/src/lib/troubleshoot-grep.js +13 -3
  34. package/src/lib/validation-runner.js +2 -1
  35. package/src/utils/file-copier.js +3 -1
  36. package/{content → stacks/blazor-azure}/.azure/README.md +293 -293
  37. package/{content → stacks/blazor-azure}/.azure/docs/azure-devops-setup.md +454 -454
  38. package/{content → stacks/blazor-azure}/.azure/docs/branch-strategy.md +398 -398
  39. package/{content → stacks/blazor-azure}/.azure/docs/local-development.md +515 -515
  40. package/{content → stacks/blazor-azure}/.azure/pipelines/pipeline-variables.yml +34 -34
  41. package/{content → stacks/blazor-azure}/.azure/pipelines/prod-pipeline.yml +319 -319
  42. package/{content → stacks/blazor-azure}/.azure/pipelines/staging-pipeline.yml +234 -234
  43. package/{content → stacks/blazor-azure}/.azure/pipelines/templates/build-dotnet.yml +75 -75
  44. package/{content → stacks/blazor-azure}/.azure/pipelines/templates/deploy-app-service.yml +94 -94
  45. package/{content → stacks/blazor-azure}/.azure/pipelines/templates/deploy-container-app.yml +120 -120
  46. package/{content → stacks/blazor-azure}/.azure/pipelines/templates/infra-deploy.yml +90 -90
  47. package/{content → stacks/blazor-azure}/.claude/commands/morph-archive.md +79 -79
  48. package/{content → stacks/blazor-azure}/.claude/commands/morph-deploy.md +529 -529
  49. package/{content → stacks/blazor-azure}/.claude/commands/morph-infra.md +209 -209
  50. package/{content → stacks/blazor-azure}/.claude/commands/morph-troubleshoot.md +1 -1
  51. package/{content → stacks/blazor-azure}/.claude/settings.local.json +15 -15
  52. package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-setup.md +1 -1
  53. package/{content/.claude/skills/specialists → stacks/blazor-azure/.claude/skills/level-2-domains/architecture}/prompt-engineer.md +189 -189
  54. package/{content/.claude/skills/specialists → stacks/blazor-azure/.claude/skills/level-2-domains/architecture}/seo-growth-hacker.md +320 -320
  55. package/{content/.claude/skills/infra → stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure}/azure-deploy-specialist.md +699 -699
  56. package/{content → stacks/blazor-azure}/.morph/.morphversion +5 -5
  57. package/{content → stacks/blazor-azure}/.morph/archive/.gitkeep +25 -25
  58. package/{content → stacks/blazor-azure}/.morph/config/agents.json +7 -5
  59. package/{content → stacks/blazor-azure}/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -392
  60. package/{content → stacks/blazor-azure}/.morph/docs/workflows/enforcement-pipeline.md +3 -3
  61. package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/README.md +241 -241
  62. package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/contracts.ts +307 -307
  63. package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/spec.md +399 -399
  64. package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/tasks.md +168 -168
  65. package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/README.md +125 -125
  66. package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/contracts.cs +358 -358
  67. package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/decisions.md +246 -246
  68. package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/spec.md +236 -236
  69. package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/tasks.md +150 -150
  70. package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/README.md +309 -309
  71. package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/contracts.cs +433 -433
  72. package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/spec.md +479 -479
  73. package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/tasks.md +185 -185
  74. package/{content → stacks/blazor-azure}/.morph/examples/state-v3.json +188 -188
  75. package/{content → stacks/blazor-azure}/.morph/features/.gitkeep +25 -25
  76. package/{content → stacks/blazor-azure}/.morph/hooks/README.md +12 -12
  77. package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-all.sh +48 -48
  78. package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-specs.sh +49 -49
  79. package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-tests.sh +60 -60
  80. package/{content → stacks/blazor-azure}/.morph/project.md +160 -160
  81. package/{content → stacks/blazor-azure}/.morph/schemas/agent.schema.json +296 -296
  82. package/{content → stacks/blazor-azure}/.morph/specs/.gitkeep +20 -20
  83. package/{content → stacks/blazor-azure}/.morph/standards/agent-teams-workflow.md +2 -2
  84. package/{content → stacks/blazor-azure}/.morph/standards/coding.md +377 -377
  85. package/{content → stacks/blazor-azure}/.morph/standards/fluent-ui-setup.md +590 -590
  86. package/{content → stacks/blazor-azure}/.morph/standards/migration-guide.md +514 -514
  87. package/{content → stacks/blazor-azure}/.morph/standards/passkeys-auth.md +423 -423
  88. package/{content → stacks/blazor-azure}/.morph/standards/vector-search-rag.md +536 -536
  89. package/{content → stacks/blazor-azure}/.morph/state.json +17 -17
  90. package/{content → stacks/blazor-azure}/.morph/templates/FluentDesignTheme.cs +149 -149
  91. package/{content → stacks/blazor-azure}/.morph/templates/MudTheme.cs +281 -281
  92. package/{content → stacks/blazor-azure}/.morph/templates/component.razor +239 -239
  93. package/{content → stacks/blazor-azure}/.morph/templates/contracts.cs +217 -217
  94. package/{content → stacks/blazor-azure}/.morph/templates/design-system.css +226 -226
  95. package/{content → stacks/blazor-azure}/.morph/templates/infra/.dockerignore.example +89 -89
  96. package/{content → stacks/blazor-azure}/.morph/templates/infra/Dockerfile.example +82 -82
  97. package/{content → stacks/blazor-azure}/.morph/templates/infra/README.md +286 -286
  98. package/{content → stacks/blazor-azure}/.morph/templates/infra/app-insights.bicep +63 -63
  99. package/{content → stacks/blazor-azure}/.morph/templates/infra/app-service.bicep +164 -164
  100. package/{content → stacks/blazor-azure}/.morph/templates/infra/azure-pipelines-deploy.yml +480 -480
  101. package/{content → stacks/blazor-azure}/.morph/templates/infra/container-app-env.bicep +49 -49
  102. package/{content → stacks/blazor-azure}/.morph/templates/infra/container-app.bicep +156 -156
  103. package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy.ps1 +229 -229
  104. package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy.sh +208 -208
  105. package/{content → stacks/blazor-azure}/.morph/templates/infra/key-vault.bicep +91 -91
  106. package/{content → stacks/blazor-azure}/.morph/templates/infra/main.bicep +189 -189
  107. package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.dev.json +29 -29
  108. package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.prod.json +29 -29
  109. package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.staging.json +29 -29
  110. package/{content → stacks/blazor-azure}/.morph/templates/infra/sql-database.bicep +103 -103
  111. package/{content → stacks/blazor-azure}/.morph/templates/infra/storage.bicep +106 -106
  112. package/{content → stacks/blazor-azure}/.morph/templates/integrations/asaas-client.cs +387 -387
  113. package/{content → stacks/blazor-azure}/.morph/templates/integrations/asaas-webhook.cs +351 -351
  114. package/{content → stacks/blazor-azure}/.morph/templates/integrations/azure-identity-config.cs +288 -288
  115. package/{content → stacks/blazor-azure}/.morph/templates/integrations/clerk-config.cs +258 -258
  116. package/{content → stacks/blazor-azure}/.morph/templates/job.cs +171 -171
  117. package/{content → stacks/blazor-azure}/.morph/templates/migration.cs +83 -83
  118. package/{content → stacks/blazor-azure}/.morph/templates/repository.cs +141 -141
  119. package/{content → stacks/blazor-azure}/.morph/templates/saas/subscription.cs +347 -347
  120. package/{content → stacks/blazor-azure}/.morph/templates/saas/tenant.cs +338 -338
  121. package/{content → stacks/blazor-azure}/.morph/templates/service.cs +139 -139
  122. package/{content → stacks/blazor-azure}/.morph/templates/sprint-status.yaml +68 -68
  123. package/{content → stacks/blazor-azure}/.morph/templates/story.md +143 -143
  124. package/{content → stacks/blazor-azure}/.morph/templates/test.cs +239 -239
  125. package/{content → stacks/blazor-azure}/.morph/templates/ui-design-system.md +286 -286
  126. package/{content → stacks/blazor-azure}/.morph/templates/ui-flows.md +336 -336
  127. package/{content → stacks/blazor-azure}/.morph/templates/ui-mockups.md +133 -133
  128. package/{content → stacks/blazor-azure}/.morph/test-infra/example.bicep +59 -59
  129. package/{content → stacks/blazor-azure}/README.md +79 -79
  130. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/backend/dotnet-supabase.md +244 -0
  131. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/frontend/nextjs-supabase.md +335 -0
  132. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/infrastructure/easypanel-deployer.md +189 -0
  133. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +170 -0
  134. package/stacks/nextjs-supabase/.morph/config/agents.json +345 -0
  135. package/stacks/nextjs-supabase/.morph/config/config.template.json +92 -0
  136. package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +169 -0
  137. package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +247 -0
  138. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +697 -0
  139. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +85 -0
  140. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +86 -0
  141. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +498 -0
  142. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +121 -0
  143. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +138 -0
  144. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +162 -0
  145. package/stacks/nextjs-supabase/.morph/project.md +168 -0
  146. package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +191 -0
  147. package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +193 -0
  148. package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +171 -0
  149. package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +164 -0
  150. package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +179 -0
  151. package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +148 -0
  152. package/stacks/nextjs-supabase/.morph/templates/contracts.cs +173 -0
  153. package/stacks/nextjs-supabase/.morph/templates/contracts.ts +168 -0
  154. package/stacks/nextjs-supabase/.morph/templates/decisions.md +115 -0
  155. package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +38 -0
  156. package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +48 -0
  157. package/stacks/nextjs-supabase/.morph/templates/proposal.md +145 -0
  158. package/stacks/nextjs-supabase/.morph/templates/recap.md +134 -0
  159. package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +57 -0
  160. package/stacks/nextjs-supabase/.morph/templates/spec.md +231 -0
  161. package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +100 -0
  162. package/stacks/nextjs-supabase/.morph/templates/tasks.md +257 -0
  163. package/stacks/nextjs-supabase/CLAUDE.md +149 -0
  164. package/stacks/nextjs-supabase/README.md +112 -0
  165. /package/{detectors → src/lib/detectors}/structure-detector.js +0 -0
  166. /package/{content → stacks/blazor-azure}/.claude/commands/morph-apply.md +0 -0
  167. /package/{content → stacks/blazor-azure}/.claude/commands/morph-preflight.md +0 -0
  168. /package/{content → stacks/blazor-azure}/.claude/commands/morph-proposal.md +0 -0
  169. /package/{content → stacks/blazor-azure}/.claude/commands/morph-status.md +0 -0
  170. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/README.md +0 -0
  171. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/code-review.md +0 -0
  172. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/morph-checklist.md +0 -0
  173. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/simulation-checklist.md +0 -0
  174. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/README.md +0 -0
  175. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/morph-replicate.md +0 -0
  176. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-clarify.md +0 -0
  177. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-design.md +0 -0
  178. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-tasks.md +0 -0
  179. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-uiux.md +0 -0
  180. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/README.md +0 -0
  181. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +0 -0
  182. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/po-pm-advisor.md +0 -0
  183. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/standards-architect.md +0 -0
  184. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/dotnet-senior.md +0 -0
  185. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/ef-modeler.md +0 -0
  186. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +0 -0
  187. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/ms-agent-expert.md +0 -0
  188. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/blazor-builder.md +0 -0
  189. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/nextjs-expert.md +0 -0
  190. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +0 -0
  191. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/azure-architect.md +0 -0
  192. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +0 -0
  193. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/container-specialist.md +0 -0
  194. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +0 -0
  195. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/asaas-financial.md +0 -0
  196. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/azure-identity.md +0 -0
  197. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/clerk-auth.md +0 -0
  198. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/resend-email.md +0 -0
  199. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/quality/code-analyzer.md +0 -0
  200. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/quality/testing-specialist.md +0 -0
  201. /package/{content → stacks/blazor-azure}/.claude/skills/level-3-technologies/README.md +0 -0
  202. /package/{content → stacks/blazor-azure}/.claude/skills/level-4-patterns/README.md +0 -0
  203. /package/{content → stacks/blazor-azure}/.morph/config/config.template.json +0 -0
  204. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/design-impl.md +0 -0
  205. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/fast-track.md +0 -0
  206. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/full-morph.md +0 -0
  207. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/standard.md +0 -0
  208. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/ui-refresh.md +0 -0
  209. /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/decisions.md +0 -0
  210. /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/proposal.md +0 -0
  211. /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/spec.md +0 -0
  212. /package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-agents.sh +0 -0
  213. /package/{content → stacks/blazor-azure}/.morph/hooks/task-completed.js +0 -0
  214. /package/{content → stacks/blazor-azure}/.morph/hooks/teammate-idle.js +0 -0
  215. /package/{content → stacks/blazor-azure}/.morph/schemas/tasks.schema.json +0 -0
  216. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-blazor-ui.md +0 -0
  217. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-production.md +0 -0
  218. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-setup.md +0 -0
  219. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-workflows.md +0 -0
  220. /package/{content → stacks/blazor-azure}/.morph/standards/architecture.md +0 -0
  221. /package/{content → stacks/blazor-azure}/.morph/standards/azure.md +0 -0
  222. /package/{content → stacks/blazor-azure}/.morph/standards/dotnet10-migration.md +0 -0
  223. /package/{content → stacks/blazor-azure}/.morph/templates/CONTEXT-FEATURE.md +0 -0
  224. /package/{content → stacks/blazor-azure}/.morph/templates/CONTEXT.md +0 -0
  225. /package/{content → stacks/blazor-azure}/.morph/templates/agent.cs +0 -0
  226. /package/{content → stacks/blazor-azure}/.morph/templates/clarify-questions.md +0 -0
  227. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Commands.cs +0 -0
  228. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Entities.cs +0 -0
  229. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Queries.cs +0 -0
  230. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/README.md +0 -0
  231. /package/{content → stacks/blazor-azure}/.morph/templates/decisions.md +0 -0
  232. /package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy-checklist.md +0 -0
  233. /package/{content → stacks/blazor-azure}/.morph/templates/proposal.md +0 -0
  234. /package/{content → stacks/blazor-azure}/.morph/templates/recap.md +0 -0
  235. /package/{content → stacks/blazor-azure}/.morph/templates/simulation.md +0 -0
  236. /package/{content → stacks/blazor-azure}/.morph/templates/spec.md +0 -0
  237. /package/{content → stacks/blazor-azure}/.morph/templates/state.template.json +0 -0
  238. /package/{content → stacks/blazor-azure}/.morph/templates/tasks.md +0 -0
  239. /package/{content → stacks/blazor-azure}/.morph/templates/ui-components.md +0 -0
  240. /package/{content → stacks/blazor-azure}/CLAUDE.md +0 -0
@@ -1,236 +1,236 @@
1
- # Micro-SaaS - Especificação
2
-
3
- ## 1. Visão Geral
4
-
5
- Sistema Micro-SaaS multi-tenant com gestão de assinaturas e billing integrado via Asaas.
6
-
7
- ### 1.1 Objetivos
8
-
9
- - Permitir criação de tenants isolados
10
- - Gerenciar assinaturas e pagamentos
11
- - Fornecer dashboard administrativo por tenant
12
- - Escalar de forma econômica (scale-to-zero)
13
-
14
- ### 1.2 Personas
15
-
16
- | Persona | Descrição |
17
- |---------|-----------|
18
- | **Tenant Owner** | Cria e administra o tenant |
19
- | **Tenant Admin** | Gerencia usuários e configurações |
20
- | **Tenant Member** | Usuário regular do sistema |
21
- | **Platform Admin** | Administrador da plataforma (super admin) |
22
-
23
- ## 2. Requisitos Funcionais
24
-
25
- ### 2.1 Autenticação & Autorização
26
-
27
- | ID | Requisito |
28
- |----|-----------|
29
- | AUTH-001 | Login via Clerk (email, Google, Microsoft) |
30
- | AUTH-002 | Criação automática de tenant no primeiro login |
31
- | AUTH-003 | Convite de usuários para tenant existente |
32
- | AUTH-004 | Roles: Owner, Admin, Member, Viewer |
33
- | AUTH-005 | Permissões granulares por role |
34
-
35
- ### 2.2 Multi-Tenancy
36
-
37
- | ID | Requisito |
38
- |----|-----------|
39
- | MT-001 | Isolamento completo de dados por tenant |
40
- | MT-002 | Subdomínio customizado (acme.app.com) |
41
- | MT-003 | Domínio customizado opcional |
42
- | MT-004 | Configurações independentes por tenant |
43
- | MT-005 | Branding básico (logo, cores) |
44
-
45
- ### 2.3 Subscription & Billing
46
-
47
- | ID | Requisito |
48
- |----|-----------|
49
- | SUB-001 | Planos: Free, Starter, Pro, Enterprise |
50
- | SUB-002 | Ciclos: Mensal e Anual |
51
- | SUB-003 | Métodos: PIX, Boleto, Cartão de Crédito |
52
- | SUB-004 | Trial period de 14 dias |
53
- | SUB-005 | Upgrade/Downgrade de plano |
54
- | SUB-006 | Cancelamento com período de carência |
55
- | SUB-007 | Webhooks Asaas para status de pagamento |
56
-
57
- ### 2.4 Dashboard
58
-
59
- | ID | Requisito |
60
- |----|-----------|
61
- | DASH-001 | Overview com métricas principais |
62
- | DASH-002 | Gestão de usuários do tenant |
63
- | DASH-003 | Histórico de pagamentos |
64
- | DASH-004 | Configurações do tenant |
65
- | DASH-005 | Upgrade de plano |
66
-
67
- ## 3. Requisitos Não-Funcionais
68
-
69
- ### 3.1 Performance
70
-
71
- | ID | Requisito |
72
- |----|-----------|
73
- | PERF-001 | Tempo de resposta < 200ms (P95) |
74
- | PERF-002 | Scale-to-zero quando inativo |
75
- | PERF-003 | Auto-scaling até 10 instâncias |
76
-
77
- ### 3.2 Segurança
78
-
79
- | ID | Requisito |
80
- |----|-----------|
81
- | SEC-001 | HTTPS obrigatório |
82
- | SEC-002 | Validação de webhook signature |
83
- | SEC-003 | Rate limiting por tenant |
84
- | SEC-004 | Audit log de ações críticas |
85
-
86
- ### 3.3 Disponibilidade
87
-
88
- | ID | Requisito |
89
- |----|-----------|
90
- | AVAIL-001 | SLA 99.5% |
91
- | AVAIL-002 | Health checks ativos |
92
- | AVAIL-003 | Retry automático em falhas |
93
-
94
- ## 4. Planos e Limites
95
-
96
- | Feature | Free | Starter | Pro | Enterprise |
97
- |---------|------|---------|-----|------------|
98
- | Usuários | 2 | 5 | 20 | Ilimitado |
99
- | Storage | 100MB | 1GB | 10GB | 100GB |
100
- | API Requests/mês | 1K | 10K | 100K | Ilimitado |
101
- | Suporte | Community | Email | Priority | Dedicated |
102
- | Preço/mês | R$0 | R$49 | R$149 | R$499 |
103
-
104
- ## 5. Integrações
105
-
106
- ### 5.1 Asaas
107
-
108
- - Customer management
109
- - Subscription lifecycle
110
- - Payment processing
111
- - Webhook handling
112
-
113
- ### 5.2 Clerk
114
-
115
- - User authentication
116
- - Session management
117
- - Organization (tenant) mapping
118
-
119
- ## 6. Arquitetura
120
-
121
- ### 6.1 Componentes
122
-
123
- ```
124
- ┌─────────────────────────────────────────────────────────────┐
125
- │ Blazor Server │
126
- │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
127
- │ │ Pages │ │ Components │ │ Services │ │
128
- │ │ /dashboard │ │ NavMenu │ │ TenantContext │ │
129
- │ │ /settings │ │ DataGrid │ │ SubscriptionService │ │
130
- │ │ /billing │ │ Charts │ │ UserService │ │
131
- │ └─────────────┘ └─────────────┘ └─────────────────────┘ │
132
- └─────────────────────────────────────────────────────────────┘
133
-
134
-
135
- ┌─────────────────────────────────────────────────────────────┐
136
- │ Application Layer │
137
- │ ┌─────────────────────────────────────────────────────┐ │
138
- │ │ Commands: CreateTenant, InviteUser, ChangePlan │ │
139
- │ │ Queries: GetDashboard, GetUsers, GetPayments │ │
140
- │ └─────────────────────────────────────────────────────┘ │
141
- └─────────────────────────────────────────────────────────────┘
142
-
143
-
144
- ┌─────────────────────────────────────────────────────────────┐
145
- │ Infrastructure │
146
- │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
147
- │ │ EF Core │ │ Asaas │ │ Clerk │ │
148
- │ │ Repository │ │ Client │ │ Integration │ │
149
- │ └──────────────┘ └──────────────┘ └──────────────────┘ │
150
- └─────────────────────────────────────────────────────────────┘
151
-
152
-
153
- ┌─────────────────────────────────────────────────────────────┐
154
- │ SQL Database │ Azure Storage │ Key Vault (secrets) │
155
- └─────────────────────────────────────────────────────────────┘
156
- ```
157
-
158
- ### 6.2 Tenant Resolution
159
-
160
- 1. Subdomínio: `{tenant}.app.com`
161
- 2. Header: `X-Tenant-ID`
162
- 3. Route: `/tenant/{slug}/...`
163
- 4. Claim: JWT tenant_id
164
-
165
- ## 7. Modelo de Dados
166
-
167
- ### 7.1 Entidades Principais
168
-
169
- ```
170
- Tenant
171
- ├── Id (int)
172
- ├── Name (string)
173
- ├── Slug (string) [unique]
174
- ├── Status (Active, Suspended, Deleted)
175
- ├── AsaasCustomerId (string)
176
- ├── CurrentSubscription → Subscription
177
- └── Users → TenantUser[]
178
-
179
- TenantUser
180
- ├── Id (int)
181
- ├── TenantId → Tenant
182
- ├── ExternalUserId (string) [Clerk ID]
183
- ├── Email (string)
184
- ├── Role (Owner, Admin, Member, Viewer)
185
- └── Status (Pending, Active, Inactive)
186
-
187
- Plan
188
- ├── Id (int)
189
- ├── Name (string)
190
- ├── PriceMonthly (decimal)
191
- ├── PriceYearly (decimal)
192
- ├── Features (JSON)
193
- └── Limits (JSON)
194
-
195
- Subscription
196
- ├── Id (int)
197
- ├── TenantId → Tenant
198
- ├── PlanId → Plan
199
- ├── AsaasSubscriptionId (string)
200
- ├── Status (Trial, Active, PastDue, Canceled)
201
- ├── BillingCycle (Monthly, Yearly)
202
- ├── CurrentPeriodStart (DateTime)
203
- └── CurrentPeriodEnd (DateTime)
204
- ```
205
-
206
- ## 8. APIs
207
-
208
- ### 8.1 Tenant Management
209
-
210
- | Endpoint | Method | Descrição |
211
- |----------|--------|-----------|
212
- | `/api/tenants` | POST | Criar tenant |
213
- | `/api/tenants/{id}` | GET | Obter tenant |
214
- | `/api/tenants/{id}` | PUT | Atualizar tenant |
215
- | `/api/tenants/{id}/users` | GET | Listar usuários |
216
- | `/api/tenants/{id}/users` | POST | Convidar usuário |
217
-
218
- ### 8.2 Subscription
219
-
220
- | Endpoint | Method | Descrição |
221
- |----------|--------|-----------|
222
- | `/api/subscriptions` | POST | Criar subscription |
223
- | `/api/subscriptions/{id}` | GET | Obter subscription |
224
- | `/api/subscriptions/{id}/upgrade` | POST | Upgrade de plano |
225
- | `/api/subscriptions/{id}/cancel` | POST | Cancelar |
226
-
227
- ### 8.3 Webhooks
228
-
229
- | Endpoint | Method | Descrição |
230
- |----------|--------|-----------|
231
- | `/webhooks/asaas` | POST | Eventos Asaas |
232
- | `/webhooks/clerk` | POST | Eventos Clerk |
233
-
234
- ---
235
-
236
- *MORPH-SPEC by Polymorphism Tech*
1
+ # Micro-SaaS - Especificação
2
+
3
+ ## 1. Visão Geral
4
+
5
+ Sistema Micro-SaaS multi-tenant com gestão de assinaturas e billing integrado via Asaas.
6
+
7
+ ### 1.1 Objetivos
8
+
9
+ - Permitir criação de tenants isolados
10
+ - Gerenciar assinaturas e pagamentos
11
+ - Fornecer dashboard administrativo por tenant
12
+ - Escalar de forma econômica (scale-to-zero)
13
+
14
+ ### 1.2 Personas
15
+
16
+ | Persona | Descrição |
17
+ |---------|-----------|
18
+ | **Tenant Owner** | Cria e administra o tenant |
19
+ | **Tenant Admin** | Gerencia usuários e configurações |
20
+ | **Tenant Member** | Usuário regular do sistema |
21
+ | **Platform Admin** | Administrador da plataforma (super admin) |
22
+
23
+ ## 2. Requisitos Funcionais
24
+
25
+ ### 2.1 Autenticação & Autorização
26
+
27
+ | ID | Requisito |
28
+ |----|-----------|
29
+ | AUTH-001 | Login via Clerk (email, Google, Microsoft) |
30
+ | AUTH-002 | Criação automática de tenant no primeiro login |
31
+ | AUTH-003 | Convite de usuários para tenant existente |
32
+ | AUTH-004 | Roles: Owner, Admin, Member, Viewer |
33
+ | AUTH-005 | Permissões granulares por role |
34
+
35
+ ### 2.2 Multi-Tenancy
36
+
37
+ | ID | Requisito |
38
+ |----|-----------|
39
+ | MT-001 | Isolamento completo de dados por tenant |
40
+ | MT-002 | Subdomínio customizado (acme.app.com) |
41
+ | MT-003 | Domínio customizado opcional |
42
+ | MT-004 | Configurações independentes por tenant |
43
+ | MT-005 | Branding básico (logo, cores) |
44
+
45
+ ### 2.3 Subscription & Billing
46
+
47
+ | ID | Requisito |
48
+ |----|-----------|
49
+ | SUB-001 | Planos: Free, Starter, Pro, Enterprise |
50
+ | SUB-002 | Ciclos: Mensal e Anual |
51
+ | SUB-003 | Métodos: PIX, Boleto, Cartão de Crédito |
52
+ | SUB-004 | Trial period de 14 dias |
53
+ | SUB-005 | Upgrade/Downgrade de plano |
54
+ | SUB-006 | Cancelamento com período de carência |
55
+ | SUB-007 | Webhooks Asaas para status de pagamento |
56
+
57
+ ### 2.4 Dashboard
58
+
59
+ | ID | Requisito |
60
+ |----|-----------|
61
+ | DASH-001 | Overview com métricas principais |
62
+ | DASH-002 | Gestão de usuários do tenant |
63
+ | DASH-003 | Histórico de pagamentos |
64
+ | DASH-004 | Configurações do tenant |
65
+ | DASH-005 | Upgrade de plano |
66
+
67
+ ## 3. Requisitos Não-Funcionais
68
+
69
+ ### 3.1 Performance
70
+
71
+ | ID | Requisito |
72
+ |----|-----------|
73
+ | PERF-001 | Tempo de resposta < 200ms (P95) |
74
+ | PERF-002 | Scale-to-zero quando inativo |
75
+ | PERF-003 | Auto-scaling até 10 instâncias |
76
+
77
+ ### 3.2 Segurança
78
+
79
+ | ID | Requisito |
80
+ |----|-----------|
81
+ | SEC-001 | HTTPS obrigatório |
82
+ | SEC-002 | Validação de webhook signature |
83
+ | SEC-003 | Rate limiting por tenant |
84
+ | SEC-004 | Audit log de ações críticas |
85
+
86
+ ### 3.3 Disponibilidade
87
+
88
+ | ID | Requisito |
89
+ |----|-----------|
90
+ | AVAIL-001 | SLA 99.5% |
91
+ | AVAIL-002 | Health checks ativos |
92
+ | AVAIL-003 | Retry automático em falhas |
93
+
94
+ ## 4. Planos e Limites
95
+
96
+ | Feature | Free | Starter | Pro | Enterprise |
97
+ |---------|------|---------|-----|------------|
98
+ | Usuários | 2 | 5 | 20 | Ilimitado |
99
+ | Storage | 100MB | 1GB | 10GB | 100GB |
100
+ | API Requests/mês | 1K | 10K | 100K | Ilimitado |
101
+ | Suporte | Community | Email | Priority | Dedicated |
102
+ | Preço/mês | R$0 | R$49 | R$149 | R$499 |
103
+
104
+ ## 5. Integrações
105
+
106
+ ### 5.1 Asaas
107
+
108
+ - Customer management
109
+ - Subscription lifecycle
110
+ - Payment processing
111
+ - Webhook handling
112
+
113
+ ### 5.2 Clerk
114
+
115
+ - User authentication
116
+ - Session management
117
+ - Organization (tenant) mapping
118
+
119
+ ## 6. Arquitetura
120
+
121
+ ### 6.1 Componentes
122
+
123
+ ```
124
+ ┌─────────────────────────────────────────────────────────────┐
125
+ │ Blazor Server │
126
+ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
127
+ │ │ Pages │ │ Components │ │ Services │ │
128
+ │ │ /dashboard │ │ NavMenu │ │ TenantContext │ │
129
+ │ │ /settings │ │ DataGrid │ │ SubscriptionService │ │
130
+ │ │ /billing │ │ Charts │ │ UserService │ │
131
+ │ └─────────────┘ └─────────────┘ └─────────────────────┘ │
132
+ └─────────────────────────────────────────────────────────────┘
133
+
134
+
135
+ ┌─────────────────────────────────────────────────────────────┐
136
+ │ Application Layer │
137
+ │ ┌─────────────────────────────────────────────────────┐ │
138
+ │ │ Commands: CreateTenant, InviteUser, ChangePlan │ │
139
+ │ │ Queries: GetDashboard, GetUsers, GetPayments │ │
140
+ │ └─────────────────────────────────────────────────────┘ │
141
+ └─────────────────────────────────────────────────────────────┘
142
+
143
+
144
+ ┌─────────────────────────────────────────────────────────────┐
145
+ │ Infrastructure │
146
+ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
147
+ │ │ EF Core │ │ Asaas │ │ Clerk │ │
148
+ │ │ Repository │ │ Client │ │ Integration │ │
149
+ │ └──────────────┘ └──────────────┘ └──────────────────┘ │
150
+ └─────────────────────────────────────────────────────────────┘
151
+
152
+
153
+ ┌─────────────────────────────────────────────────────────────┐
154
+ │ SQL Database │ Azure Storage │ Key Vault (secrets) │
155
+ └─────────────────────────────────────────────────────────────┘
156
+ ```
157
+
158
+ ### 6.2 Tenant Resolution
159
+
160
+ 1. Subdomínio: `{tenant}.app.com`
161
+ 2. Header: `X-Tenant-ID`
162
+ 3. Route: `/tenant/{slug}/...`
163
+ 4. Claim: JWT tenant_id
164
+
165
+ ## 7. Modelo de Dados
166
+
167
+ ### 7.1 Entidades Principais
168
+
169
+ ```
170
+ Tenant
171
+ ├── Id (int)
172
+ ├── Name (string)
173
+ ├── Slug (string) [unique]
174
+ ├── Status (Active, Suspended, Deleted)
175
+ ├── AsaasCustomerId (string)
176
+ ├── CurrentSubscription → Subscription
177
+ └── Users → TenantUser[]
178
+
179
+ TenantUser
180
+ ├── Id (int)
181
+ ├── TenantId → Tenant
182
+ ├── ExternalUserId (string) [Clerk ID]
183
+ ├── Email (string)
184
+ ├── Role (Owner, Admin, Member, Viewer)
185
+ └── Status (Pending, Active, Inactive)
186
+
187
+ Plan
188
+ ├── Id (int)
189
+ ├── Name (string)
190
+ ├── PriceMonthly (decimal)
191
+ ├── PriceYearly (decimal)
192
+ ├── Features (JSON)
193
+ └── Limits (JSON)
194
+
195
+ Subscription
196
+ ├── Id (int)
197
+ ├── TenantId → Tenant
198
+ ├── PlanId → Plan
199
+ ├── AsaasSubscriptionId (string)
200
+ ├── Status (Trial, Active, PastDue, Canceled)
201
+ ├── BillingCycle (Monthly, Yearly)
202
+ ├── CurrentPeriodStart (DateTime)
203
+ └── CurrentPeriodEnd (DateTime)
204
+ ```
205
+
206
+ ## 8. APIs
207
+
208
+ ### 8.1 Tenant Management
209
+
210
+ | Endpoint | Method | Descrição |
211
+ |----------|--------|-----------|
212
+ | `/api/tenants` | POST | Criar tenant |
213
+ | `/api/tenants/{id}` | GET | Obter tenant |
214
+ | `/api/tenants/{id}` | PUT | Atualizar tenant |
215
+ | `/api/tenants/{id}/users` | GET | Listar usuários |
216
+ | `/api/tenants/{id}/users` | POST | Convidar usuário |
217
+
218
+ ### 8.2 Subscription
219
+
220
+ | Endpoint | Method | Descrição |
221
+ |----------|--------|-----------|
222
+ | `/api/subscriptions` | POST | Criar subscription |
223
+ | `/api/subscriptions/{id}` | GET | Obter subscription |
224
+ | `/api/subscriptions/{id}/upgrade` | POST | Upgrade de plano |
225
+ | `/api/subscriptions/{id}/cancel` | POST | Cancelar |
226
+
227
+ ### 8.3 Webhooks
228
+
229
+ | Endpoint | Method | Descrição |
230
+ |----------|--------|-----------|
231
+ | `/webhooks/asaas` | POST | Eventos Asaas |
232
+ | `/webhooks/clerk` | POST | Eventos Clerk |
233
+
234
+ ---
235
+
236
+ *MORPH-SPEC by Polymorphism Tech*