@polymorphism-tech/morph-spec 3.2.0 → 4.3.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.
- package/README.md +1 -14
- package/bin/detect-agents.js +1 -1
- package/bin/morph-spec.js +403 -40
- package/bin/validate.js +5 -5
- package/docs/getting-started.md +0 -5
- package/docs/next-generation/AGENTS.md +521 -0
- package/docs/next-generation/ANALYSIS.md +555 -0
- package/docs/next-generation/ARCHITECTURE.md +436 -0
- package/docs/next-generation/CONTEXT-OPTIMIZATION.md +267 -0
- package/docs/next-generation/EXECUTION-FLOW.md +274 -0
- package/docs/next-generation/FEATURES.md +688 -0
- package/docs/next-generation/META-PROMPTS.md +235 -0
- package/docs/next-generation/MIGRATION-GUIDE.md +253 -0
- package/docs/next-generation/README.md +231 -0
- package/docs/next-generation/ROADMAP.md +801 -0
- package/docs/next-generation/THREAD-MANAGEMENT.md +240 -0
- package/docs/validation-checklist.md +0 -1
- package/package.json +5 -5
- package/src/commands/agents/agents-fuse.js +96 -0
- package/src/commands/agents/index.js +4 -0
- package/src/commands/agents/micro-agent.js +112 -0
- package/src/commands/{spawn-team.js → agents/spawn-team.js} +237 -172
- package/src/commands/agents/squad-template.js +146 -0
- package/src/commands/analytics/analytics.js +176 -0
- package/src/commands/context/context-prime.js +63 -0
- package/src/commands/context/core-four.js +54 -0
- package/src/commands/{create-story.js → feature/create-story.js} +357 -354
- package/src/commands/feature/index.js +6 -0
- package/src/commands/{shard-spec.js → feature/shard-spec.js} +2 -2
- package/src/commands/{sprint-status.js → feature/sprint-status.js} +1 -1
- package/src/commands/{generate-context.js → generation/generate-context.js} +40 -40
- package/src/commands/{generate.js → generation/generate.js} +4 -4
- package/src/commands/generation/index.js +5 -0
- package/src/commands/index.js +16 -0
- package/src/commands/{capture-pattern.js → learning/capture-pattern.js} +121 -121
- package/src/commands/learning/index.js +5 -0
- package/src/commands/mcp/mcp.js +102 -0
- package/src/commands/{detect-agents.js → project/detect-agents.js} +178 -178
- package/src/commands/project/detect-workflow.js +174 -0
- package/src/commands/{detect.js → project/detect.js} +104 -104
- package/src/commands/{doctor.js → project/doctor.js} +221 -4
- package/src/commands/project/index.js +10 -0
- package/src/commands/{init.js → project/init.js} +305 -295
- package/src/commands/{sync.js → project/sync.js} +167 -167
- package/src/commands/{update.js → project/update.js} +240 -240
- package/src/commands/{advance-phase.js → state/advance-phase.js} +101 -25
- package/src/commands/{approve.js → state/approve.js} +221 -221
- package/src/commands/state/index.js +8 -0
- package/src/commands/{rollback-phase.js → state/rollback-phase.js} +185 -185
- package/src/commands/{state.js → state/state.js} +334 -334
- package/src/commands/{validate-phase.js → state/validate-phase.js} +221 -221
- package/src/commands/tasks/index.js +4 -0
- package/src/commands/{task.js → tasks/task.js} +78 -78
- package/src/commands/templates/index.js +8 -0
- package/src/commands/templates/template-customize.js +101 -0
- package/src/commands/templates/template-list.js +128 -0
- package/src/commands/templates/template-render.js +174 -0
- package/src/commands/templates/template-show.js +131 -0
- package/src/commands/templates/template-validate.js +91 -0
- package/src/commands/threads/thread-template.js +103 -0
- package/src/commands/threads/threads.js +261 -0
- package/src/commands/trust/trust.js +205 -0
- package/src/commands/utils/index.js +7 -0
- package/src/commands/{session-summary.js → utils/session-summary.js} +291 -291
- package/src/commands/{troubleshoot.js → utils/troubleshoot.js} +222 -222
- package/src/commands/{analyze-blazor-concurrency.js → validation/analyze-blazor-concurrency.js} +193 -193
- package/src/commands/validation/index.js +8 -0
- package/src/commands/{lint-fluent.js → validation/lint-fluent.js} +352 -352
- package/src/commands/{validate-blazor-state.js → validation/validate-blazor-state.js} +210 -210
- package/src/commands/{validate-blazor.js → validation/validate-blazor.js} +156 -156
- package/src/commands/{validate-css.js → validation/validate-css.js} +84 -84
- package/src/core/index.js +10 -0
- package/src/{orchestrator.js → core/orchestrator.js} +8 -8
- package/src/core/registry/command-registry.js +302 -0
- package/src/core/registry/index.js +8 -0
- package/src/core/registry/validator-registry.js +204 -0
- package/src/core/state/index.js +8 -0
- package/src/{lib → core/state}/phase-state-machine.js +214 -214
- package/src/{lib → core/state}/state-manager.js +588 -534
- package/src/core/templates/index.js +9 -0
- package/src/core/templates/template-registry.js +335 -0
- package/src/core/templates/template-renderer.js +477 -0
- package/src/core/templates/template-validator.js +296 -0
- package/src/core/workflows/index.js +7 -0
- package/src/core/workflows/workflow-detector.js +452 -0
- package/src/lib/agents/micro-agent-factory.js +161 -0
- package/src/lib/{complexity-analyzer.js → analysis/complexity-analyzer.js} +441 -441
- package/src/lib/analysis/index.js +7 -0
- package/src/lib/analytics/analytics-engine.js +345 -0
- package/src/lib/{checkpoint-hooks.js → checkpoints/checkpoint-hooks.js} +35 -0
- package/src/lib/checkpoints/index.js +7 -0
- package/src/lib/context/context-bundler.js +240 -0
- package/src/lib/context/context-optimizer.js +212 -0
- package/src/lib/context/context-tracker.js +273 -0
- package/src/lib/context/core-four-tracker.js +201 -0
- package/src/lib/context/mcp-optimizer.js +200 -0
- package/src/lib/detectors/config-detector.js +223 -223
- package/src/lib/detectors/conversation-analyzer.js +163 -163
- package/src/lib/{design-system-detector.js → detectors/design-system-detector.js} +187 -187
- package/src/lib/detectors/index.js +87 -84
- package/src/lib/detectors/standards-generator.js +275 -275
- package/src/lib/detectors/structure-detector.js +245 -245
- package/src/lib/execution/fusion-executor.js +304 -0
- package/src/lib/execution/parallel-executor.js +270 -0
- package/src/lib/{context-generator.js → generators/context-generator.js} +526 -516
- package/src/lib/generators/index.js +10 -0
- package/src/lib/{metadata-extractor.js → generators/metadata-extractor.js} +387 -380
- package/src/lib/{recap-generator.js → generators/recap-generator.js} +205 -205
- package/src/lib/hooks/hook-executor.js +169 -0
- package/src/lib/hooks/stop-hook-executor.js +286 -0
- package/src/lib/hops/hop-composer.js +221 -0
- package/src/lib/learning/index.js +7 -0
- package/src/lib/orchestration/index.js +7 -0
- package/src/lib/{team-orchestrator.js → orchestration/team-orchestrator.js} +323 -323
- package/src/lib/stacks/index.js +7 -0
- package/src/lib/{stack-resolver.js → stacks/stack-resolver.js} +180 -148
- package/src/lib/standards/index.js +7 -0
- package/src/lib/{standards-context-injector.js → standards/standards-context-injector.js} +298 -288
- package/src/lib/threads/thread-coordinator.js +238 -0
- package/src/lib/threads/thread-manager.js +317 -0
- package/src/lib/tracking/artifact-trail.js +202 -0
- package/src/lib/troubleshooting/index.js +8 -0
- package/src/lib/{troubleshoot-grep.js → troubleshooting/troubleshoot-grep.js} +204 -204
- package/src/lib/{troubleshoot-index.js → troubleshooting/troubleshoot-index.js} +144 -144
- package/src/lib/trust/trust-manager.js +269 -0
- package/src/lib/validators/{architecture-validator.js → architecture/architecture-validator.js} +8 -8
- package/src/lib/validators/architecture/index.js +7 -0
- package/src/lib/{blazor-concurrency-analyzer.js → validators/blazor/blazor-concurrency-analyzer.js} +277 -288
- package/src/lib/{blazor-state-validator.js → validators/blazor/blazor-state-validator.js} +279 -291
- package/src/lib/{blazor-validator.js → validators/blazor/blazor-validator.js} +369 -374
- package/src/lib/validators/blazor/index.js +9 -0
- package/src/lib/validators/{content-validator.js → content/content-validator.js} +351 -351
- package/src/lib/validators/content/index.js +7 -0
- package/src/lib/validators/{contract-compliance-validator.js → contracts/contract-compliance-validator.js} +273 -273
- package/src/lib/validators/contracts/index.js +7 -0
- package/src/lib/{css-validator.js → validators/css/css-validator.js} +352 -352
- package/src/lib/validators/css/index.js +7 -0
- package/src/lib/validators/{design-system-validator.js → design-system/design-system-validator.js} +231 -231
- package/src/lib/validators/design-system/index.js +7 -0
- package/src/lib/validators/packages/index.js +7 -0
- package/src/lib/validators/shared/index.js +12 -0
- package/src/lib/validators/shared/issue-counter.js +18 -0
- package/src/lib/validators/shared/result-formatter.js +124 -0
- package/src/lib/{spec-validator.js → validators/spec-validator.js} +258 -258
- package/src/lib/validators/ui/index.js +7 -0
- package/src/lib/{validation-runner.js → validators/validation-runner.js} +286 -284
- package/src/ui/wizard-questions.js +0 -2
- package/src/utils/color-utils.js +70 -0
- package/src/utils/file-copier.js +188 -189
- package/src/utils/process-handler.js +97 -0
- package/stacks/blazor-azure/.morph/config/agents.json +948 -764
- package/stacks/blazor-azure/.morph/hooks/{pre-commit-tests.sh → pre-commit/tests-csharp.sh} +3 -2
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +41 -0
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +24 -0
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +23 -0
- package/stacks/nextjs-supabase/.morph/config/agents.json +345 -345
- package/stacks/nextjs-supabase/.morph/hooks/pre-commit/tests-typescript.sh +61 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +22 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +22 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +35 -0
- package/stacks/nextjs-supabase/README.md +6 -15
- package/CLAUDE.md +0 -648
- package/bin/render-template.js +0 -349
- package/bin/semantic-detect-agents.js +0 -247
- package/bin/validate-agents-skills.js +0 -257
- package/bin/validate-agents.js +0 -70
- package/bin/validate-phase.js +0 -263
- package/docs/examples.md +0 -328
- package/docs/llm-interaction-config.md +0 -735
- package/scripts/reorganize-skills.cjs +0 -175
- package/scripts/validate-agents-structure.cjs +0 -52
- package/scripts/validate-skills.cjs +0 -180
- package/src/commands/deploy.js +0 -780
- package/src/commands/migrate-state.js +0 -158
- package/src/commands/upgrade.js +0 -346
- package/src/lib/continuous-validator.js +0 -421
- package/src/lib/decision-constraint-loader.js +0 -109
- package/src/lib/design-system-scaffolder.js +0 -299
- package/src/lib/hook-executor.js +0 -257
- package/src/lib/mockup-generator.js +0 -366
- package/src/lib/ui-detector.js +0 -350
- package/src/llm/schema-validator.js +0 -121
- package/src/sanitizer/.gitkeep +0 -0
- package/src/scanner/.gitkeep +0 -0
- package/src/types/index.js +0 -477
- package/src/ui/.gitkeep +0 -0
- package/src/writer/.gitkeep +0 -0
- package/stacks/blazor-azure/.azure/README.md +0 -293
- package/stacks/blazor-azure/.azure/docs/azure-devops-setup.md +0 -454
- package/stacks/blazor-azure/.azure/docs/branch-strategy.md +0 -398
- package/stacks/blazor-azure/.azure/docs/local-development.md +0 -515
- package/stacks/blazor-azure/.azure/pipelines/pipeline-variables.yml +0 -34
- package/stacks/blazor-azure/.azure/pipelines/prod-pipeline.yml +0 -319
- package/stacks/blazor-azure/.azure/pipelines/staging-pipeline.yml +0 -234
- package/stacks/blazor-azure/.azure/pipelines/templates/build-dotnet.yml +0 -75
- package/stacks/blazor-azure/.azure/pipelines/templates/deploy-app-service.yml +0 -94
- package/stacks/blazor-azure/.azure/pipelines/templates/deploy-container-app.yml +0 -120
- package/stacks/blazor-azure/.azure/pipelines/templates/infra-deploy.yml +0 -90
- package/stacks/blazor-azure/.claude/commands/morph-apply.md +0 -221
- package/stacks/blazor-azure/.claude/commands/morph-archive.md +0 -79
- package/stacks/blazor-azure/.claude/commands/morph-deploy.md +0 -529
- package/stacks/blazor-azure/.claude/commands/morph-infra.md +0 -209
- package/stacks/blazor-azure/.claude/commands/morph-preflight.md +0 -227
- package/stacks/blazor-azure/.claude/commands/morph-proposal.md +0 -122
- package/stacks/blazor-azure/.claude/commands/morph-status.md +0 -86
- package/stacks/blazor-azure/.claude/commands/morph-troubleshoot.md +0 -122
- package/stacks/blazor-azure/.claude/settings.local.json +0 -15
- package/stacks/blazor-azure/.claude/skills/level-0-meta/README.md +0 -7
- package/stacks/blazor-azure/.claude/skills/level-0-meta/code-review.md +0 -226
- package/stacks/blazor-azure/.claude/skills/level-0-meta/morph-checklist.md +0 -117
- package/stacks/blazor-azure/.claude/skills/level-0-meta/simulation-checklist.md +0 -77
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/README.md +0 -7
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/morph-replicate.md +0 -213
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-clarify.md +0 -131
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-design.md +0 -213
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-setup.md +0 -106
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-tasks.md +0 -164
- package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-uiux.md +0 -169
- package/stacks/blazor-azure/.claude/skills/level-2-domains/README.md +0 -14
- package/stacks/blazor-azure/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +0 -192
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/po-pm-advisor.md +0 -197
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/prompt-engineer.md +0 -189
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/seo-growth-hacker.md +0 -320
- package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/standards-architect.md +0 -156
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/dotnet-senior.md +0 -287
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ef-modeler.md +0 -113
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +0 -126
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ms-agent-expert.md +0 -109
- package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/blazor-builder.md +0 -210
- package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/nextjs-expert.md +0 -154
- package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +0 -191
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/azure-architect.md +0 -142
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +0 -699
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +0 -126
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/container-specialist.md +0 -131
- package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +0 -119
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/asaas-financial.md +0 -130
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/azure-identity.md +0 -142
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/clerk-auth.md +0 -108
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/resend-email.md +0 -119
- package/stacks/blazor-azure/.claude/skills/level-2-domains/quality/code-analyzer.md +0 -235
- package/stacks/blazor-azure/.claude/skills/level-2-domains/quality/testing-specialist.md +0 -126
- package/stacks/blazor-azure/.claude/skills/level-3-technologies/README.md +0 -7
- package/stacks/blazor-azure/.claude/skills/level-4-patterns/README.md +0 -7
- package/stacks/blazor-azure/.morph/archive/.gitkeep +0 -25
- package/stacks/blazor-azure/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -392
- package/stacks/blazor-azure/.morph/docs/workflows/design-impl.md +0 -37
- package/stacks/blazor-azure/.morph/docs/workflows/enforcement-pipeline.md +0 -668
- package/stacks/blazor-azure/.morph/docs/workflows/fast-track.md +0 -29
- package/stacks/blazor-azure/.morph/docs/workflows/full-morph.md +0 -76
- package/stacks/blazor-azure/.morph/docs/workflows/standard.md +0 -44
- package/stacks/blazor-azure/.morph/docs/workflows/ui-refresh.md +0 -39
- package/stacks/blazor-azure/.morph/examples/api-nextjs/README.md +0 -241
- package/stacks/blazor-azure/.morph/examples/api-nextjs/contracts.ts +0 -307
- package/stacks/blazor-azure/.morph/examples/api-nextjs/spec.md +0 -399
- package/stacks/blazor-azure/.morph/examples/api-nextjs/tasks.md +0 -168
- package/stacks/blazor-azure/.morph/examples/micro-saas/README.md +0 -125
- package/stacks/blazor-azure/.morph/examples/micro-saas/contracts.cs +0 -358
- package/stacks/blazor-azure/.morph/examples/micro-saas/decisions.md +0 -246
- package/stacks/blazor-azure/.morph/examples/micro-saas/spec.md +0 -236
- package/stacks/blazor-azure/.morph/examples/micro-saas/tasks.md +0 -150
- package/stacks/blazor-azure/.morph/examples/multi-agent/README.md +0 -309
- package/stacks/blazor-azure/.morph/examples/multi-agent/contracts.cs +0 -433
- package/stacks/blazor-azure/.morph/examples/multi-agent/spec.md +0 -479
- package/stacks/blazor-azure/.morph/examples/multi-agent/tasks.md +0 -185
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/decisions.md +0 -158
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/proposal.md +0 -95
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/spec.md +0 -267
- package/stacks/blazor-azure/.morph/examples/state-v3.json +0 -188
- package/stacks/blazor-azure/.morph/features/.gitkeep +0 -25
- package/stacks/blazor-azure/.morph/hooks/README.md +0 -348
- package/stacks/blazor-azure/.morph/hooks/pre-commit-agents.sh +0 -24
- package/stacks/blazor-azure/.morph/hooks/pre-commit-all.sh +0 -48
- package/stacks/blazor-azure/.morph/hooks/pre-commit-specs.sh +0 -49
- package/stacks/blazor-azure/.morph/hooks/task-completed.js +0 -73
- package/stacks/blazor-azure/.morph/hooks/teammate-idle.js +0 -68
- package/stacks/blazor-azure/.morph/schemas/agent.schema.json +0 -296
- package/stacks/blazor-azure/.morph/schemas/tasks.schema.json +0 -220
- package/stacks/blazor-azure/.morph/specs/.gitkeep +0 -20
- package/stacks/blazor-azure/.morph/standards/agent-framework-blazor-ui.md +0 -359
- package/stacks/blazor-azure/.morph/standards/agent-framework-production.md +0 -410
- package/stacks/blazor-azure/.morph/standards/agent-framework-setup.md +0 -413
- package/stacks/blazor-azure/.morph/standards/agent-framework-workflows.md +0 -349
- package/stacks/blazor-azure/.morph/standards/agent-teams-workflow.md +0 -474
- package/stacks/blazor-azure/.morph/standards/architecture.md +0 -325
- package/stacks/blazor-azure/.morph/standards/azure.md +0 -605
- package/stacks/blazor-azure/.morph/standards/coding.md +0 -377
- package/stacks/blazor-azure/.morph/standards/dotnet10-migration.md +0 -520
- package/stacks/blazor-azure/.morph/standards/fluent-ui-setup.md +0 -590
- package/stacks/blazor-azure/.morph/standards/migration-guide.md +0 -514
- package/stacks/blazor-azure/.morph/standards/passkeys-auth.md +0 -423
- package/stacks/blazor-azure/.morph/standards/vector-search-rag.md +0 -536
- package/stacks/blazor-azure/.morph/templates/CONTEXT-FEATURE.md +0 -276
- package/stacks/blazor-azure/.morph/templates/CONTEXT.md +0 -170
- package/stacks/blazor-azure/.morph/templates/FluentDesignTheme.cs +0 -149
- package/stacks/blazor-azure/.morph/templates/MudTheme.cs +0 -281
- package/stacks/blazor-azure/.morph/templates/agent.cs +0 -163
- package/stacks/blazor-azure/.morph/templates/clarify-questions.md +0 -159
- package/stacks/blazor-azure/.morph/templates/component.razor +0 -239
- package/stacks/blazor-azure/.morph/templates/contracts/Commands.cs +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts/Entities.cs +0 -25
- package/stacks/blazor-azure/.morph/templates/contracts/Queries.cs +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts/README.md +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts.cs +0 -217
- package/stacks/blazor-azure/.morph/templates/decisions.md +0 -123
- package/stacks/blazor-azure/.morph/templates/design-system.css +0 -226
- package/stacks/blazor-azure/.morph/templates/infra/.dockerignore.example +0 -89
- package/stacks/blazor-azure/.morph/templates/infra/Dockerfile.example +0 -82
- package/stacks/blazor-azure/.morph/templates/infra/README.md +0 -286
- package/stacks/blazor-azure/.morph/templates/infra/app-insights.bicep +0 -63
- package/stacks/blazor-azure/.morph/templates/infra/app-service.bicep +0 -164
- package/stacks/blazor-azure/.morph/templates/infra/azure-pipelines-deploy.yml +0 -480
- package/stacks/blazor-azure/.morph/templates/infra/container-app-env.bicep +0 -49
- package/stacks/blazor-azure/.morph/templates/infra/container-app.bicep +0 -156
- package/stacks/blazor-azure/.morph/templates/infra/deploy-checklist.md +0 -426
- package/stacks/blazor-azure/.morph/templates/infra/deploy.ps1 +0 -229
- package/stacks/blazor-azure/.morph/templates/infra/deploy.sh +0 -208
- package/stacks/blazor-azure/.morph/templates/infra/key-vault.bicep +0 -91
- package/stacks/blazor-azure/.morph/templates/infra/main.bicep +0 -189
- package/stacks/blazor-azure/.morph/templates/infra/parameters.dev.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/parameters.prod.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/parameters.staging.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/sql-database.bicep +0 -103
- package/stacks/blazor-azure/.morph/templates/infra/storage.bicep +0 -106
- package/stacks/blazor-azure/.morph/templates/integrations/asaas-client.cs +0 -387
- package/stacks/blazor-azure/.morph/templates/integrations/asaas-webhook.cs +0 -351
- package/stacks/blazor-azure/.morph/templates/integrations/azure-identity-config.cs +0 -288
- package/stacks/blazor-azure/.morph/templates/integrations/clerk-config.cs +0 -258
- package/stacks/blazor-azure/.morph/templates/job.cs +0 -171
- package/stacks/blazor-azure/.morph/templates/migration.cs +0 -83
- package/stacks/blazor-azure/.morph/templates/proposal.md +0 -141
- package/stacks/blazor-azure/.morph/templates/recap.md +0 -94
- package/stacks/blazor-azure/.morph/templates/repository.cs +0 -141
- package/stacks/blazor-azure/.morph/templates/saas/subscription.cs +0 -347
- package/stacks/blazor-azure/.morph/templates/saas/tenant.cs +0 -338
- package/stacks/blazor-azure/.morph/templates/service.cs +0 -139
- package/stacks/blazor-azure/.morph/templates/simulation.md +0 -353
- package/stacks/blazor-azure/.morph/templates/spec.md +0 -149
- package/stacks/blazor-azure/.morph/templates/sprint-status.yaml +0 -68
- package/stacks/blazor-azure/.morph/templates/state.template.json +0 -222
- package/stacks/blazor-azure/.morph/templates/story.md +0 -143
- package/stacks/blazor-azure/.morph/templates/tasks.md +0 -257
- package/stacks/blazor-azure/.morph/templates/test.cs +0 -239
- package/stacks/blazor-azure/.morph/templates/ui-components.md +0 -362
- package/stacks/blazor-azure/.morph/templates/ui-design-system.md +0 -286
- package/stacks/blazor-azure/.morph/templates/ui-flows.md +0 -336
- package/stacks/blazor-azure/.morph/templates/ui-mockups.md +0 -133
- package/stacks/blazor-azure/.morph/test-infra/example.bicep +0 -59
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/backend/dotnet-supabase.md +0 -244
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/frontend/nextjs-supabase.md +0 -335
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/infrastructure/easypanel-deployer.md +0 -189
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +0 -170
- package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +0 -169
- package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +0 -247
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +0 -697
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +0 -85
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +0 -86
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +0 -498
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +0 -121
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +0 -138
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +0 -162
- package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +0 -191
- package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +0 -193
- package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +0 -171
- package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +0 -164
- package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +0 -179
- package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +0 -148
- package/stacks/nextjs-supabase/.morph/templates/contracts.cs +0 -173
- package/stacks/nextjs-supabase/.morph/templates/contracts.ts +0 -168
- package/stacks/nextjs-supabase/.morph/templates/decisions.md +0 -115
- package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +0 -38
- package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +0 -48
- package/stacks/nextjs-supabase/.morph/templates/proposal.md +0 -145
- package/stacks/nextjs-supabase/.morph/templates/recap.md +0 -134
- package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +0 -57
- package/stacks/nextjs-supabase/.morph/templates/spec.md +0 -231
- package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +0 -100
- package/stacks/nextjs-supabase/.morph/templates/tasks.md +0 -257
- /package/src/commands/{search-patterns.js → learning/search-patterns.js} +0 -0
- /package/src/{lib → core/templates}/template-data-sources.js +0 -0
- /package/src/lib/{design-system-generator.js → generators/design-system-generator.js} +0 -0
- /package/src/lib/{learning-system.js → learning/learning-system.js} +0 -0
- /package/src/lib/validators/{package-validator.js → packages/package-validator.js} +0 -0
- /package/src/lib/validators/{ui-contrast-validator.js → ui/ui-contrast-validator.js} +0 -0
- /package/{src/generator → stacks/blazor-azure/.morph/templates}/.gitkeep +0 -0
- /package/{src/llm → stacks/nextjs-supabase/.morph/templates}/.gitkeep +0 -0
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
# Feature Proposal: {{FEATURE_NAME_TITLE}}
|
|
2
|
-
|
|
3
|
-
> Proposal for a new feature. This document describes WHAT and WHY.
|
|
4
|
-
> For technical details, see `spec.md`.
|
|
5
|
-
|
|
6
|
-
## Metadata
|
|
7
|
-
|
|
8
|
-
| Field | Value |
|
|
9
|
-
|-------|-------|
|
|
10
|
-
| **Proposed** | {{DATE}} |
|
|
11
|
-
| **Author** | {{AUTHOR}} |
|
|
12
|
-
| **Status** | Draft / Under Review / Approved / Rejected |
|
|
13
|
-
| **Priority** | High / Medium / Low |
|
|
14
|
-
| **Stack** | Next.js + Supabase + .NET API |
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## Overview
|
|
19
|
-
|
|
20
|
-
{Brief 2-3 sentence summary of the feature}
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Problem Statement
|
|
25
|
-
|
|
26
|
-
### What is the problem?
|
|
27
|
-
|
|
28
|
-
{Describe the problem this feature solves. Be specific.}
|
|
29
|
-
|
|
30
|
-
### Who is affected?
|
|
31
|
-
|
|
32
|
-
{Who suffers from this problem? End users? Developers? Operations?}
|
|
33
|
-
|
|
34
|
-
### What is the impact?
|
|
35
|
-
|
|
36
|
-
{What is the impact of NOT solving this problem?}
|
|
37
|
-
- User productivity loss: {X}
|
|
38
|
-
- Revenue impact: {X}
|
|
39
|
-
- User satisfaction: {X}
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
## Proposed Solution
|
|
44
|
-
|
|
45
|
-
### Key Features
|
|
46
|
-
|
|
47
|
-
1. **{Feature 1}** - {brief description}
|
|
48
|
-
2. **{Feature 2}** - {brief description}
|
|
49
|
-
3. **{Feature 3}** - {brief description}
|
|
50
|
-
|
|
51
|
-
### Technical Approach
|
|
52
|
-
|
|
53
|
-
| Layer | Technology | Role |
|
|
54
|
-
|-------|-----------|------|
|
|
55
|
-
| **Database** | Supabase (PostgreSQL + RLS) | {tables, policies, storage} |
|
|
56
|
-
| **Backend API** | .NET 10 Minimal API | {endpoints, business logic} |
|
|
57
|
-
| **Frontend** | Next.js 15 (App Router) | {pages, components, auth} |
|
|
58
|
-
| **Infra** | EasyPanel + Docker | {deployment, SSL} |
|
|
59
|
-
|
|
60
|
-
### User Journey
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
1. User {initial action}
|
|
64
|
-
2. System {response}
|
|
65
|
-
3. User {next action}
|
|
66
|
-
4. System {final result}
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## Cost Estimate
|
|
72
|
-
|
|
73
|
-
| Resource | Provider | Monthly Cost | Notes |
|
|
74
|
-
|----------|----------|-------------|-------|
|
|
75
|
-
| Supabase | Free / Pro | $0 - $25 | {DB, Auth, Storage, Realtime} |
|
|
76
|
-
| VPS (EasyPanel) | {provider} | ${X} | {API + Web containers} |
|
|
77
|
-
| External APIs | {provider} | ${X} | {if applicable} |
|
|
78
|
-
| **Total** | | **${X}/month** | |
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
## Risk Assessment
|
|
83
|
-
|
|
84
|
-
| Risk | Likelihood | Impact | Mitigation |
|
|
85
|
-
|------|------------|--------|------------|
|
|
86
|
-
| {Risk 1} | High/Med/Low | High/Med/Low | {mitigation strategy} |
|
|
87
|
-
| {Risk 2} | High/Med/Low | High/Med/Low | {mitigation strategy} |
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
## Scope
|
|
92
|
-
|
|
93
|
-
### In Scope
|
|
94
|
-
|
|
95
|
-
- {Item 1}
|
|
96
|
-
- {Item 2}
|
|
97
|
-
|
|
98
|
-
### Out of Scope
|
|
99
|
-
|
|
100
|
-
- {Item 1}
|
|
101
|
-
- {Item 2}
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## Success Metrics
|
|
106
|
-
|
|
107
|
-
| Metric | Current | Target |
|
|
108
|
-
|--------|---------|--------|
|
|
109
|
-
| {Metric 1} | {X} | {Y} |
|
|
110
|
-
| {Metric 2} | {X} | {Y} |
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## Dependencies
|
|
115
|
-
|
|
116
|
-
- [ ] {Dependency 1} - {status}
|
|
117
|
-
- [ ] {Dependency 2} - {status}
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## Estimated Effort
|
|
122
|
-
|
|
123
|
-
| Phase | Estimate |
|
|
124
|
-
|-------|----------|
|
|
125
|
-
| Design & Spec | {X}h |
|
|
126
|
-
| Database & Migrations | {X}h |
|
|
127
|
-
| Backend API | {X}h |
|
|
128
|
-
| Frontend | {X}h |
|
|
129
|
-
| Testing | {X}h |
|
|
130
|
-
| **Total** | **{X}h** |
|
|
131
|
-
|
|
132
|
-
---
|
|
133
|
-
|
|
134
|
-
## Next Steps
|
|
135
|
-
|
|
136
|
-
Once approved:
|
|
137
|
-
1. Create detailed `spec.md` with technical design
|
|
138
|
-
2. Define contracts (`contracts.cs` + `contracts.ts`)
|
|
139
|
-
3. Record decisions in `decisions.md`
|
|
140
|
-
4. Break down into `tasks.md`
|
|
141
|
-
5. Begin implementation
|
|
142
|
-
|
|
143
|
-
---
|
|
144
|
-
|
|
145
|
-
*Created with MORPH Framework*
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
# Feature Recap: {{FEATURE_NAME_TITLE}}
|
|
2
|
-
|
|
3
|
-
## Summary
|
|
4
|
-
|
|
5
|
-
| Field | Value |
|
|
6
|
-
|-------|-------|
|
|
7
|
-
| **Feature ID** | {{FEATURE_NAME}} |
|
|
8
|
-
| **Completed** | {{DATE}} |
|
|
9
|
-
| **Total Tasks** | {X} |
|
|
10
|
-
| **Time Spent** | {X}h |
|
|
11
|
-
| **Agents Used** | {list} |
|
|
12
|
-
| **Stack** | Next.js + Supabase + .NET API |
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## Tasks Completed
|
|
17
|
-
|
|
18
|
-
| ID | Title | Category | Duration |
|
|
19
|
-
|----|-------|----------|----------|
|
|
20
|
-
| T001 | {title} | Database | {X}min |
|
|
21
|
-
| T002 | {title} | Backend | {X}min |
|
|
22
|
-
| T003 | {title} | Frontend | {X}min |
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## Validation Results
|
|
27
|
-
|
|
28
|
-
| Validator | Status | Details |
|
|
29
|
-
|-----------|--------|---------|
|
|
30
|
-
| contract-compliance | Pass/Fail | {details} |
|
|
31
|
-
| architecture | Pass/Fail | {details} |
|
|
32
|
-
| design-system | Pass/Fail | {details} |
|
|
33
|
-
| coding-standards | Pass/Fail | {details} |
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## What Was Delivered
|
|
38
|
-
|
|
39
|
-
### Functionality
|
|
40
|
-
- {Functionality 1 delivered}
|
|
41
|
-
- {Functionality 2 delivered}
|
|
42
|
-
- {Functionality 3 delivered}
|
|
43
|
-
|
|
44
|
-
### Database (Supabase)
|
|
45
|
-
- Tables: {list}
|
|
46
|
-
- RLS Policies: {count} policies
|
|
47
|
-
- Migrations: {count} files
|
|
48
|
-
|
|
49
|
-
### Backend API (.NET)
|
|
50
|
-
- Endpoints: {count} endpoints
|
|
51
|
-
- Services: {list}
|
|
52
|
-
|
|
53
|
-
### Frontend (Next.js)
|
|
54
|
-
- Pages: {list}
|
|
55
|
-
- Components: {list}
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## Files Created
|
|
60
|
-
|
|
61
|
-
```
|
|
62
|
-
supabase/migrations/{files}
|
|
63
|
-
backend/src/{files}
|
|
64
|
-
frontend/src/{files}
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Files Modified
|
|
68
|
-
|
|
69
|
-
```
|
|
70
|
-
{list of modified files}
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## Architecture Decisions
|
|
76
|
-
|
|
77
|
-
| Decision | Rationale |
|
|
78
|
-
|----------|-----------|
|
|
79
|
-
| {Decision 1} | {Reason} |
|
|
80
|
-
| {Decision 2} | {Reason} |
|
|
81
|
-
|
|
82
|
-
See full ADRs in `decisions.md`
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## Test Coverage
|
|
87
|
-
|
|
88
|
-
| Type | Files | Coverage |
|
|
89
|
-
|------|-------|----------|
|
|
90
|
-
| Backend Unit | {X} | {X}% |
|
|
91
|
-
| Frontend Component | {X} | {X}% |
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
|
|
95
|
-
## Lessons Learned
|
|
96
|
-
|
|
97
|
-
### What Went Well
|
|
98
|
-
- {Positive point 1}
|
|
99
|
-
- {Positive point 2}
|
|
100
|
-
|
|
101
|
-
### What Could Be Improved
|
|
102
|
-
- {Improvement point 1}
|
|
103
|
-
- {Improvement point 2}
|
|
104
|
-
|
|
105
|
-
### Recommendations for Future
|
|
106
|
-
- {Recommendation 1}
|
|
107
|
-
- {Recommendation 2}
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## Metrics
|
|
112
|
-
|
|
113
|
-
| Metric | Value |
|
|
114
|
-
|--------|-------|
|
|
115
|
-
| Tasks Completed | {X}/{X} |
|
|
116
|
-
| Checkpoints Passed | {X} |
|
|
117
|
-
| Validation Passes | {X}/{X} |
|
|
118
|
-
| Bugs Found | {X} |
|
|
119
|
-
| Bugs Fixed | {X} |
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## Related Resources
|
|
124
|
-
|
|
125
|
-
- **Proposal:** `proposal.md`
|
|
126
|
-
- **Spec:** `spec.md`
|
|
127
|
-
- **Contracts (.NET):** `contracts.cs`
|
|
128
|
-
- **Contracts (TS):** `contracts.ts`
|
|
129
|
-
- **Tasks:** `tasks.md`
|
|
130
|
-
- **Decisions:** `decisions.md`
|
|
131
|
-
|
|
132
|
-
---
|
|
133
|
-
|
|
134
|
-
*Generated by MORPH Framework on {{DATE}}*
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
-- ============================================================
|
|
2
|
-
-- RLS Policy: {{FEATURE_NAME_TITLE}}
|
|
3
|
-
-- Stack: Next.js + Supabase
|
|
4
|
-
-- Generated by MORPH Framework
|
|
5
|
-
-- Date: {{DATE}}
|
|
6
|
-
-- ============================================================
|
|
7
|
-
|
|
8
|
-
-- Enable RLS on table
|
|
9
|
-
alter table public.{{TABLE_NAME}} enable row level security;
|
|
10
|
-
|
|
11
|
-
-- Force RLS for table owner (prevents bypassing)
|
|
12
|
-
alter table public.{{TABLE_NAME}} force row level security;
|
|
13
|
-
|
|
14
|
-
-- Policy: {{POLICY_NAME}}
|
|
15
|
-
-- Operation: {{OPERATION}} (SELECT | INSERT | UPDATE | DELETE | ALL)
|
|
16
|
-
|
|
17
|
-
-- SELECT policy: users can read their own rows
|
|
18
|
-
create policy "{{POLICY_NAME}}_select"
|
|
19
|
-
on public.{{TABLE_NAME}}
|
|
20
|
-
for select
|
|
21
|
-
using ({{USING_EXPRESSION}});
|
|
22
|
-
|
|
23
|
-
-- INSERT policy: users can insert rows for themselves
|
|
24
|
-
create policy "{{POLICY_NAME}}_insert"
|
|
25
|
-
on public.{{TABLE_NAME}}
|
|
26
|
-
for insert
|
|
27
|
-
with check ({{WITH_CHECK_EXPRESSION}});
|
|
28
|
-
|
|
29
|
-
-- UPDATE policy: users can update their own rows
|
|
30
|
-
create policy "{{POLICY_NAME}}_update"
|
|
31
|
-
on public.{{TABLE_NAME}}
|
|
32
|
-
for update
|
|
33
|
-
using ({{USING_EXPRESSION}})
|
|
34
|
-
with check ({{WITH_CHECK_EXPRESSION}});
|
|
35
|
-
|
|
36
|
-
-- DELETE policy: users can delete their own rows
|
|
37
|
-
create policy "{{POLICY_NAME}}_delete"
|
|
38
|
-
on public.{{TABLE_NAME}}
|
|
39
|
-
for delete
|
|
40
|
-
using ({{USING_EXPRESSION}});
|
|
41
|
-
|
|
42
|
-
-- ============================================================
|
|
43
|
-
-- Common USING / WITH CHECK expressions:
|
|
44
|
-
--
|
|
45
|
-
-- Owner-based:
|
|
46
|
-
-- auth.uid() = user_id
|
|
47
|
-
--
|
|
48
|
-
-- Role-based:
|
|
49
|
-
-- auth.jwt() ->> 'role' = 'admin'
|
|
50
|
-
--
|
|
51
|
-
-- Organization-based:
|
|
52
|
-
-- org_id in (select org_id from public.org_members where user_id = auth.uid())
|
|
53
|
-
--
|
|
54
|
-
-- Public read, owner write:
|
|
55
|
-
-- SELECT using (true)
|
|
56
|
-
-- INSERT/UPDATE/DELETE using (auth.uid() = user_id)
|
|
57
|
-
-- ============================================================
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
# Feature Specification: {{FEATURE_NAME_TITLE}}
|
|
2
|
-
|
|
3
|
-
| Field | Value |
|
|
4
|
-
|-------|-------|
|
|
5
|
-
| **ID** | {{FEATURE_NAME}} |
|
|
6
|
-
| **Status** | Draft / In Review / Approved / In Progress / Done |
|
|
7
|
-
| **Created** | {{DATE}} |
|
|
8
|
-
| **Stack** | Next.js + Supabase + .NET API |
|
|
9
|
-
| **Complexity** | Low / Medium / High |
|
|
10
|
-
| **Estimated Cost** | $X/month |
|
|
11
|
-
| **Agents** | Core: All / Specialists: {list} |
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Overview
|
|
16
|
-
|
|
17
|
-
**Problem:** {What problem this feature solves}
|
|
18
|
-
|
|
19
|
-
**Solution:** {High-level solution}
|
|
20
|
-
|
|
21
|
-
**Success Criteria:**
|
|
22
|
-
- [ ] {Criterion 1}
|
|
23
|
-
- [ ] {Criterion 2}
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## Requirements
|
|
28
|
-
|
|
29
|
-
### Functional Requirements
|
|
30
|
-
|
|
31
|
-
| ID | Description | Priority |
|
|
32
|
-
|----|-------------|----------|
|
|
33
|
-
| FR1 | {requirement} | Must |
|
|
34
|
-
| FR2 | {requirement} | Must |
|
|
35
|
-
| FR3 | {requirement} | Should |
|
|
36
|
-
|
|
37
|
-
### Non-Functional Requirements
|
|
38
|
-
|
|
39
|
-
| ID | Category | Target |
|
|
40
|
-
|----|----------|--------|
|
|
41
|
-
| NFR1 | Performance | {e.g., API response < 200ms p95} |
|
|
42
|
-
| NFR2 | Reliability | {e.g., 99.9% uptime} |
|
|
43
|
-
| NFR3 | Security | {e.g., All data access via RLS} |
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## Technical Architecture
|
|
48
|
-
|
|
49
|
-
### Stack
|
|
50
|
-
|
|
51
|
-
| Component | Technology | Purpose |
|
|
52
|
-
|-----------|-----------|---------|
|
|
53
|
-
| Database | Supabase PostgreSQL | Data storage, RLS, Auth |
|
|
54
|
-
| Storage | Supabase Storage | File uploads |
|
|
55
|
-
| Realtime | Supabase Realtime | Live updates |
|
|
56
|
-
| Backend API | .NET 10 Minimal API | Business logic, integrations |
|
|
57
|
-
| Frontend | Next.js 15 (App Router) | SSR, UI, client interactions |
|
|
58
|
-
| Auth | Supabase Auth (@supabase/ssr) | Authentication, JWT |
|
|
59
|
-
| UI | shadcn/ui + Tailwind CSS | Components, styling |
|
|
60
|
-
| Deployment | EasyPanel + Docker | Hosting, SSL |
|
|
61
|
-
|
|
62
|
-
### Architecture Diagram
|
|
63
|
-
|
|
64
|
-
```
|
|
65
|
-
[Browser] --HTTPS--> [Next.js (SSR)]
|
|
66
|
-
|
|
|
67
|
-
[Supabase Client] --RLS--> [Supabase PostgreSQL]
|
|
68
|
-
| |
|
|
69
|
-
[.NET API] ---service_role----> [Supabase]
|
|
70
|
-
|
|
|
71
|
-
[External Services]
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## Data Model (Supabase)
|
|
77
|
-
|
|
78
|
-
### {TableName}
|
|
79
|
-
|
|
80
|
-
| Column | Type | Constraints | Default |
|
|
81
|
-
|--------|------|-------------|---------|
|
|
82
|
-
| id | uuid | PK | gen_random_uuid() |
|
|
83
|
-
| user_id | uuid | FK -> auth.users(id), NOT NULL | |
|
|
84
|
-
| {column} | {type} | {constraints} | {default} |
|
|
85
|
-
| created_at | timestamptz | NOT NULL | now() |
|
|
86
|
-
| updated_at | timestamptz | | |
|
|
87
|
-
|
|
88
|
-
### RLS Policies
|
|
89
|
-
|
|
90
|
-
| Table | Policy | Operation | Rule |
|
|
91
|
-
|-------|--------|-----------|------|
|
|
92
|
-
| {table} | Users read own | SELECT | auth.uid() = user_id |
|
|
93
|
-
| {table} | Users insert own | INSERT | auth.uid() = user_id |
|
|
94
|
-
| {table} | Users update own | UPDATE | auth.uid() = user_id |
|
|
95
|
-
|
|
96
|
-
### Indexes
|
|
97
|
-
|
|
98
|
-
| Table | Columns | Type | Purpose |
|
|
99
|
-
|-------|---------|------|---------|
|
|
100
|
-
| {table} | user_id | btree | Filter by owner |
|
|
101
|
-
| {table} | created_at | btree | Sort by date |
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## API Design (.NET Minimal API)
|
|
106
|
-
|
|
107
|
-
### Endpoints
|
|
108
|
-
|
|
109
|
-
| Method | Path | Description | Auth |
|
|
110
|
-
|--------|------|-------------|------|
|
|
111
|
-
| GET | /api/{{FEATURE_NAME}}/{id} | Get by ID | Required |
|
|
112
|
-
| GET | /api/{{FEATURE_NAME}} | List (paginated) | Required |
|
|
113
|
-
| POST | /api/{{FEATURE_NAME}} | Create | Required |
|
|
114
|
-
| PUT | /api/{{FEATURE_NAME}}/{id} | Update | Required |
|
|
115
|
-
| DELETE | /api/{{FEATURE_NAME}}/{id} | Delete | Required |
|
|
116
|
-
|
|
117
|
-
### Request/Response Examples
|
|
118
|
-
|
|
119
|
-
```json
|
|
120
|
-
// POST /api/{{FEATURE_NAME}}
|
|
121
|
-
// Request
|
|
122
|
-
{
|
|
123
|
-
"name": "Example",
|
|
124
|
-
"description": "Example description"
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Response 201
|
|
128
|
-
{
|
|
129
|
-
"id": "uuid",
|
|
130
|
-
"name": "Example",
|
|
131
|
-
"description": "Example description",
|
|
132
|
-
"createdAt": "2026-01-01T00:00:00Z"
|
|
133
|
-
}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
## Frontend Design (Next.js)
|
|
139
|
-
|
|
140
|
-
### Pages
|
|
141
|
-
|
|
142
|
-
| Route | Type | Description |
|
|
143
|
-
|-------|------|-------------|
|
|
144
|
-
| /{{FEATURE_NAME}} | Server | List page with SSR |
|
|
145
|
-
| /{{FEATURE_NAME}}/[id] | Server | Detail page |
|
|
146
|
-
| /{{FEATURE_NAME}}/new | Client | Create form |
|
|
147
|
-
|
|
148
|
-
### Components
|
|
149
|
-
|
|
150
|
-
| Component | Type | Props |
|
|
151
|
-
|-----------|------|-------|
|
|
152
|
-
| {{FEATURE_NAME_PASCAL}}List | Client | initialData, pagination |
|
|
153
|
-
| {{FEATURE_NAME_PASCAL}}Form | Client | onSuccess, defaultValues? |
|
|
154
|
-
| {{FEATURE_NAME_PASCAL}}Card | Server | item |
|
|
155
|
-
|
|
156
|
-
### State Management
|
|
157
|
-
|
|
158
|
-
| State | Location | Strategy |
|
|
159
|
-
|-------|----------|----------|
|
|
160
|
-
| Server data | React Query | Cache + invalidation |
|
|
161
|
-
| Form state | react-hook-form | Local |
|
|
162
|
-
| Auth state | Supabase client | Cookie-based session |
|
|
163
|
-
| Realtime | Supabase channel | Invalidate query on change |
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## Infrastructure (EasyPanel)
|
|
168
|
-
|
|
169
|
-
### Services
|
|
170
|
-
|
|
171
|
-
| Service | Image | Port | Resources |
|
|
172
|
-
|---------|-------|------|-----------|
|
|
173
|
-
| api | Custom (.NET) | 8080 | 256MB / 0.25 CPU |
|
|
174
|
-
| web | Custom (Next.js) | 3000 | 256MB / 0.25 CPU |
|
|
175
|
-
|
|
176
|
-
### Environment Variables
|
|
177
|
-
|
|
178
|
-
| Variable | Service | Source |
|
|
179
|
-
|----------|---------|--------|
|
|
180
|
-
| SUPABASE_URL | api, web | EasyPanel secrets |
|
|
181
|
-
| SUPABASE_ANON_KEY | web | EasyPanel secrets |
|
|
182
|
-
| SUPABASE_SERVICE_KEY | api | EasyPanel secrets |
|
|
183
|
-
| SUPABASE_JWT_SECRET | api | EasyPanel secrets |
|
|
184
|
-
|
|
185
|
-
---
|
|
186
|
-
|
|
187
|
-
## Packages
|
|
188
|
-
|
|
189
|
-
### Backend (.NET)
|
|
190
|
-
|
|
191
|
-
| Package | Version | Purpose |
|
|
192
|
-
|---------|---------|---------|
|
|
193
|
-
| Npgsql | latest | PostgreSQL driver |
|
|
194
|
-
| Dapper | latest | Micro-ORM |
|
|
195
|
-
| Microsoft.AspNetCore.Authentication.JwtBearer | 10.0.x | JWT auth |
|
|
196
|
-
|
|
197
|
-
### Frontend (npm)
|
|
198
|
-
|
|
199
|
-
| Package | Version | Purpose |
|
|
200
|
-
|---------|---------|---------|
|
|
201
|
-
| @supabase/ssr | latest | Supabase SSR client |
|
|
202
|
-
| @tanstack/react-query | ^5 | Data fetching |
|
|
203
|
-
| react-hook-form | ^7 | Form management |
|
|
204
|
-
| zod | ^3 | Validation |
|
|
205
|
-
| @hookform/resolvers | latest | Zod integration |
|
|
206
|
-
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
## Security
|
|
210
|
-
|
|
211
|
-
| Action | Required Policy |
|
|
212
|
-
|--------|-----------------|
|
|
213
|
-
| View | RLS: auth.uid() = user_id |
|
|
214
|
-
| Create | RLS: auth.uid() = user_id |
|
|
215
|
-
| Update | RLS: auth.uid() = user_id |
|
|
216
|
-
| Delete | RLS: auth.uid() = user_id |
|
|
217
|
-
| Admin | .NET API with service_role key |
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
## Definition of Done
|
|
222
|
-
|
|
223
|
-
- [ ] Database migrations applied
|
|
224
|
-
- [ ] RLS policies tested
|
|
225
|
-
- [ ] API endpoints implemented and tested
|
|
226
|
-
- [ ] Frontend pages and components built
|
|
227
|
-
- [ ] Auth flow working (login, signup, protected routes)
|
|
228
|
-
- [ ] Tests > 80% coverage
|
|
229
|
-
- [ ] Docker images building successfully
|
|
230
|
-
- [ ] Deploy to EasyPanel verified
|
|
231
|
-
- [ ] Recap.md generated
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
-- ============================================================
|
|
2
|
-
-- Migration: {{FEATURE_NAME_TITLE}}
|
|
3
|
-
-- Stack: Next.js + Supabase
|
|
4
|
-
-- Generated by MORPH Framework
|
|
5
|
-
-- Date: {{DATE}}
|
|
6
|
-
-- Run: supabase db push
|
|
7
|
-
-- ============================================================
|
|
8
|
-
|
|
9
|
-
-- ============================================================
|
|
10
|
-
-- 1. TABLE CREATION
|
|
11
|
-
-- ============================================================
|
|
12
|
-
|
|
13
|
-
create table if not exists public.{{TABLE_NAME}} (
|
|
14
|
-
id uuid primary key default gen_random_uuid(),
|
|
15
|
-
user_id uuid not null references auth.users(id) on delete cascade,
|
|
16
|
-
name text not null,
|
|
17
|
-
status text not null default 'draft'
|
|
18
|
-
check (status in ('draft', 'active', 'completed', 'archived', 'failed', 'cancelled')),
|
|
19
|
-
-- Add feature-specific columns here
|
|
20
|
-
metadata jsonb default '{}'::jsonb,
|
|
21
|
-
created_at timestamptz not null default now(),
|
|
22
|
-
updated_at timestamptz
|
|
23
|
-
);
|
|
24
|
-
|
|
25
|
-
-- Comment on table
|
|
26
|
-
comment on table public.{{TABLE_NAME}} is '{{FEATURE_NAME_TITLE}} - managed by MORPH Framework';
|
|
27
|
-
|
|
28
|
-
-- ============================================================
|
|
29
|
-
-- 2. INDEXES
|
|
30
|
-
-- ============================================================
|
|
31
|
-
|
|
32
|
-
-- Index for filtering by owner
|
|
33
|
-
create index if not exists idx_{{TABLE_NAME}}_user_id
|
|
34
|
-
on public.{{TABLE_NAME}} (user_id);
|
|
35
|
-
|
|
36
|
-
-- Index for filtering by status
|
|
37
|
-
create index if not exists idx_{{TABLE_NAME}}_status
|
|
38
|
-
on public.{{TABLE_NAME}} (status);
|
|
39
|
-
|
|
40
|
-
-- Index for sorting by creation date
|
|
41
|
-
create index if not exists idx_{{TABLE_NAME}}_created_at
|
|
42
|
-
on public.{{TABLE_NAME}} (created_at desc);
|
|
43
|
-
|
|
44
|
-
-- ============================================================
|
|
45
|
-
-- 3. UPDATED_AT TRIGGER
|
|
46
|
-
-- ============================================================
|
|
47
|
-
|
|
48
|
-
-- Function to auto-update updated_at
|
|
49
|
-
create or replace function public.update_updated_at_column()
|
|
50
|
-
returns trigger as $$
|
|
51
|
-
begin
|
|
52
|
-
new.updated_at = now();
|
|
53
|
-
return new;
|
|
54
|
-
end;
|
|
55
|
-
$$ language plpgsql;
|
|
56
|
-
|
|
57
|
-
-- Trigger for auto-updating updated_at
|
|
58
|
-
create trigger set_{{TABLE_NAME}}_updated_at
|
|
59
|
-
before update on public.{{TABLE_NAME}}
|
|
60
|
-
for each row execute function public.update_updated_at_column();
|
|
61
|
-
|
|
62
|
-
-- ============================================================
|
|
63
|
-
-- 4. ROW LEVEL SECURITY
|
|
64
|
-
-- ============================================================
|
|
65
|
-
|
|
66
|
-
-- Enable RLS
|
|
67
|
-
alter table public.{{TABLE_NAME}} enable row level security;
|
|
68
|
-
|
|
69
|
-
-- Users can read their own rows
|
|
70
|
-
create policy "Users can read own {{TABLE_NAME}}"
|
|
71
|
-
on public.{{TABLE_NAME}}
|
|
72
|
-
for select
|
|
73
|
-
using (auth.uid() = user_id);
|
|
74
|
-
|
|
75
|
-
-- Users can insert rows for themselves
|
|
76
|
-
create policy "Users can insert own {{TABLE_NAME}}"
|
|
77
|
-
on public.{{TABLE_NAME}}
|
|
78
|
-
for insert
|
|
79
|
-
with check (auth.uid() = user_id);
|
|
80
|
-
|
|
81
|
-
-- Users can update their own rows
|
|
82
|
-
create policy "Users can update own {{TABLE_NAME}}"
|
|
83
|
-
on public.{{TABLE_NAME}}
|
|
84
|
-
for update
|
|
85
|
-
using (auth.uid() = user_id)
|
|
86
|
-
with check (auth.uid() = user_id);
|
|
87
|
-
|
|
88
|
-
-- Users can delete their own rows
|
|
89
|
-
create policy "Users can delete own {{TABLE_NAME}}"
|
|
90
|
-
on public.{{TABLE_NAME}}
|
|
91
|
-
for delete
|
|
92
|
-
using (auth.uid() = user_id);
|
|
93
|
-
|
|
94
|
-
-- ============================================================
|
|
95
|
-
-- 5. GRANTS
|
|
96
|
-
-- ============================================================
|
|
97
|
-
|
|
98
|
-
-- Grant access to authenticated users (via Supabase API)
|
|
99
|
-
grant select, insert, update, delete on public.{{TABLE_NAME}} to authenticated;
|
|
100
|
-
grant usage on schema public to authenticated;
|