@polymorphism-tech/morph-spec 4.6.0 → 4.7.1
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 +414 -700
- package/docs/ARCHITECTURE.md +331 -0
- package/docs/CHEATSHEET.md +221 -0
- package/docs/COMMAND-FLOWS.md +368 -0
- package/docs/QUICKSTART.md +212 -0
- package/docs/examples/order-management/contracts.cs +84 -0
- package/docs/examples/order-management/proposal.md +24 -0
- package/docs/examples/order-management/spec.md +162 -0
- package/docs/plans/2026-02-23-ddd-architecture-refactor.md +1153 -0
- package/docs/plans/2026-02-23-ddd-nextsteps.md +682 -0
- package/docs/plans/2026-02-23-infra-architect-refactor.md +437 -0
- package/docs/plans/2026-02-23-nextjs-code-review-design.md +156 -0
- package/docs/plans/2026-02-23-nextjs-code-review-impl.md +1254 -0
- package/docs/plans/2026-02-23-nextjs-standards-design.md +149 -0
- package/docs/plans/2026-02-23-nextjs-standards-impl.md +1846 -0
- package/framework/agents/README.md +14 -14
- package/framework/agents/architecture/standards-architect.md +159 -159
- package/framework/agents/frontend/nextjs-expert.md +87 -127
- package/framework/agents/infrastructure/azure-architect.md +147 -147
- package/framework/agents/infrastructure/infra-architect.md +45 -0
- package/framework/agents.json +1145 -278
- package/framework/rules/frontend-standards.md +0 -3
- package/framework/rules/nextjs-standards.md +17 -0
- package/framework/skills/level-0-meta/code-review-nextjs/SKILL.md +147 -0
- package/framework/skills/level-0-meta/code-review-nextjs/references/review-example-nextjs.md +254 -0
- package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +3 -3
- package/framework/skills/level-1-workflows/phase-design/SKILL.md +45 -9
- package/framework/skills/level-1-workflows/phase-tasks/SKILL.md +38 -0
- package/framework/standards/STANDARDS.json +121 -0
- package/framework/standards/architecture/ddd/bounded-contexts.md +105 -0
- package/framework/standards/architecture/ddd/complexity-levels.md +108 -0
- package/framework/standards/architecture/ddd/ubiquitous-language.md +58 -0
- package/framework/standards/frontend/nextjs/app-router.md +123 -0
- package/framework/standards/frontend/nextjs/components.md +132 -0
- package/framework/standards/frontend/nextjs/data-fetching.md +126 -0
- package/framework/standards/frontend/nextjs/forms.md +128 -0
- package/framework/standards/frontend/nextjs/naming-conventions.md +67 -0
- package/framework/standards/frontend/nextjs/project-structure.md +102 -0
- package/framework/standards/frontend/nextjs/state-management.md +72 -0
- package/framework/standards/frontend/nextjs/testing.md +111 -0
- package/framework/templates/REGISTRY.json +538 -142
- package/framework/templates/code/dotnet/contracts/contracts-level1.cs +69 -0
- package/framework/templates/code/dotnet/contracts/contracts-level2.cs +86 -0
- package/framework/templates/code/dotnet/contracts/contracts-level3.cs +41 -0
- package/framework/templates/docs/spec.md +49 -0
- package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -0
- package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -0
- package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -0
- package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -0
- package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -0
- package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -0
- package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -0
- package/framework/templates/project-structure/dotnet-ddd.md +70 -0
- package/framework/workflows/docs/enforcement-pipeline.md +2 -1
- package/package.json +1 -1
- package/scripts/scan-nextjs.mjs +169 -0
- package/src/commands/project/doctor.js +52 -1
- package/src/commands/project/init.js +15 -1
- package/src/commands/project/update.js +6 -1
- package/src/lib/standards/standards-context-injector.js +5 -0
- package/src/lib/validators/nextjs/index.js +6 -0
- package/src/lib/validators/nextjs/next-component-validator.js +181 -0
- package/src/lib/validators/validation-runner.js +5 -0
- package/src/utils/agents-installer.js +14 -2
- package/.morph/.morphversion +0 -5
- package/.morph/analytics/threads-log.jsonl +0 -6
- package/.morph/config/config.json +0 -8
- package/.morph/framework/agents.json +0 -948
- package/.morph/framework/standards/STANDARDS.json +0 -812
- package/.morph/framework/standards/ai-agents/blazor-ui.md +0 -364
- package/.morph/framework/standards/ai-agents/production.md +0 -415
- package/.morph/framework/standards/ai-agents/setup.md +0 -418
- package/.morph/framework/standards/ai-agents/team-orchestration.md +0 -479
- package/.morph/framework/standards/ai-agents/workflows.md +0 -354
- package/.morph/framework/standards/architecture/ddd/aggregates.md +0 -120
- package/.morph/framework/standards/architecture/ddd/entities.md +0 -99
- package/.morph/framework/standards/architecture/ddd/value-objects.md +0 -124
- package/.morph/framework/standards/backend/api/minimal-api.md +0 -494
- package/.morph/framework/standards/backend/api/rest.md +0 -492
- package/.morph/framework/standards/backend/api/validation.md +0 -88
- package/.morph/framework/standards/backend/authentication/passkeys.md +0 -428
- package/.morph/framework/standards/backend/database/ef-core.md +0 -199
- package/.morph/framework/standards/backend/database/migrations.md +0 -393
- package/.morph/framework/standards/backend/database/postgresql/database.md +0 -352
- package/.morph/framework/standards/backend/database/repository-patterns.md +0 -528
- package/.morph/framework/standards/backend/database/vector-search-rag.md +0 -541
- package/.morph/framework/standards/backend/dotnet/async.md +0 -366
- package/.morph/framework/standards/backend/dotnet/core.md +0 -117
- package/.morph/framework/standards/backend/dotnet/di.md +0 -439
- package/.morph/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
- package/.morph/framework/standards/backend/integrations/asaas/asaas-api.md +0 -216
- package/.morph/framework/standards/backend/integrations/clerk/clerk-auth.md +0 -290
- package/.morph/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
- package/.morph/framework/standards/backend/integrations/resend/resend-email.md +0 -385
- package/.morph/framework/standards/context/analytics.md +0 -96
- package/.morph/framework/standards/context/bundles.md +0 -110
- package/.morph/framework/standards/context/priming.md +0 -78
- package/.morph/framework/standards/core/architecture.md +0 -185
- package/.morph/framework/standards/core/coding.md +0 -214
- package/.morph/framework/standards/core/git-branching-strategy.md +0 -403
- package/.morph/framework/standards/core/git.md +0 -185
- package/.morph/framework/standards/core/testing.md +0 -295
- package/.morph/framework/standards/data/nosql/blob-storage.md +0 -102
- package/.morph/framework/standards/data/nosql/cache/redis.md +0 -97
- package/.morph/framework/standards/data/nosql/cosmos-db.md +0 -118
- package/.morph/framework/standards/data/vector-search/azure-ai-search.md +0 -121
- package/.morph/framework/standards/data/vector-search/rag-chunking.md +0 -104
- package/.morph/framework/standards/frontend/blazor/design-checklist.md +0 -222
- package/.morph/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
- package/.morph/framework/standards/frontend/blazor/fluent-ui.md +0 -137
- package/.morph/framework/standards/frontend/blazor/html-conversion.md +0 -184
- package/.morph/framework/standards/frontend/blazor/lifecycle.md +0 -195
- package/.morph/framework/standards/frontend/blazor/pitfalls.md +0 -198
- package/.morph/framework/standards/frontend/blazor/state.md +0 -191
- package/.morph/framework/standards/frontend/design-system/animations.md +0 -151
- package/.morph/framework/standards/frontend/design-system/naming.md +0 -64
- package/.morph/framework/standards/frontend/nextjs/nextjs-patterns.md +0 -215
- package/.morph/framework/standards/infrastructure/azure/azure.md +0 -624
- package/.morph/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
- package/.morph/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
- package/.morph/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
- package/.morph/framework/standards/infrastructure/azure/services/functions.md +0 -486
- package/.morph/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
- package/.morph/framework/standards/infrastructure/azure/services/storage.md +0 -407
- package/.morph/framework/standards/infrastructure/docker/easypanel-deploy.md +0 -196
- package/.morph/framework/standards/infrastructure/supabase/mcp-setup.md +0 -252
- package/.morph/framework/standards/infrastructure/supabase/supabase-auth.md +0 -176
- package/.morph/framework/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
- package/.morph/framework/standards/infrastructure/supabase/supabase-rls.md +0 -184
- package/.morph/framework/standards/infrastructure/supabase/supabase-storage.md +0 -153
- package/.morph/framework/standards/integration/api/graphql.md +0 -91
- package/.morph/framework/standards/integration/api/grpc.md +0 -114
- package/.morph/framework/standards/integration/api/rest-design.md +0 -95
- package/.morph/framework/standards/integration/event-driven/cqrs.md +0 -101
- package/.morph/framework/standards/integration/event-driven/event-sourcing.md +0 -124
- package/.morph/framework/standards/integration/event-driven/service-bus.md +0 -95
- package/.morph/framework/standards/integration/mcp/mcp-tools.md +0 -384
- package/.morph/framework/standards/observability/logging.md +0 -131
- package/.morph/framework/standards/observability/metrics.md +0 -121
- package/.morph/framework/standards/observability/monitoring.md +0 -114
- package/.morph/framework/standards/observability/tracing.md +0 -132
- package/.morph/framework/standards/workflows/parallel-execution.md +0 -112
- package/.morph/framework/standards/workflows/thread-management.md +0 -113
- package/.morph/framework/templates/.idea/morph-templates.xml +0 -92
- package/.morph/framework/templates/.vscode/morph-templates.code-snippets +0 -186
- package/.morph/framework/templates/IDE-SNIPPETS.md +0 -266
- package/.morph/framework/templates/README.md +0 -814
- package/.morph/framework/templates/REGISTRY.json +0 -1492
- package/.morph/framework/templates/code/dotnet/backend/repository.cs +0 -141
- package/.morph/framework/templates/code/dotnet/backend/service.cs +0 -139
- package/.morph/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
- package/.morph/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/README.md +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
- package/.morph/framework/templates/code/dotnet/contracts/contracts.cs +0 -217
- package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +0 -172
- package/.morph/framework/templates/code/dotnet/database/migration.cs +0 -83
- package/.morph/framework/templates/code/dotnet/frontend/component.razor +0 -239
- package/.morph/framework/templates/code/dotnet/jobs/agent.cs +0 -163
- package/.morph/framework/templates/code/dotnet/jobs/job.cs +0 -171
- package/.morph/framework/templates/code/dotnet/test.cs +0 -239
- package/.morph/framework/templates/code/sql/rls-policy.sql +0 -57
- package/.morph/framework/templates/code/sql/supabase-migration.sql +0 -100
- package/.morph/framework/templates/code/sql/supabase-migration.template.sql +0 -113
- package/.morph/framework/templates/code/typescript/contracts.ts +0 -168
- package/.morph/framework/templates/context/CONTEXT-FEATURE.md +0 -276
- package/.morph/framework/templates/context/CONTEXT.md +0 -181
- package/.morph/framework/templates/docs/clarifications.md +0 -253
- package/.morph/framework/templates/docs/onboarding.md +0 -123
- package/.morph/framework/templates/docs/proposal.md +0 -182
- package/.morph/framework/templates/docs/schema-analysis.md +0 -119
- package/.morph/framework/templates/docs/spec.md +0 -149
- package/.morph/framework/templates/docs/ui-components.md +0 -124
- package/.morph/framework/templates/docs/ui-design-system.md +0 -76
- package/.morph/framework/templates/docs/ui-flows.md +0 -167
- package/.morph/framework/templates/docs/ui-mockups.md +0 -98
- package/.morph/framework/templates/docs/user-stories.md +0 -34
- package/.morph/framework/templates/examples/design-system-examples.md +0 -357
- package/.morph/framework/templates/examples/spec-examples.md +0 -90
- package/.morph/framework/templates/feature/decisions.md +0 -187
- package/.morph/framework/templates/feature/recap.md +0 -146
- package/.morph/framework/templates/feature/tasks.md +0 -199
- package/.morph/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
- package/.morph/framework/templates/infrastructure/azure/README.md +0 -286
- package/.morph/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
- package/.morph/framework/templates/infrastructure/azure/app-service.bicep +0 -164
- package/.morph/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
- package/.morph/framework/templates/infrastructure/azure/container-app.bicep +0 -156
- package/.morph/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
- package/.morph/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
- package/.morph/framework/templates/infrastructure/azure/deploy.sh +0 -208
- package/.morph/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
- package/.morph/framework/templates/infrastructure/azure/main.bicep +0 -189
- package/.morph/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
- package/.morph/framework/templates/infrastructure/azure/storage.bicep +0 -106
- package/.morph/framework/templates/infrastructure/docker/Dockerfile.template +0 -58
- package/.morph/framework/templates/infrastructure/docker/docker-compose.template.yml +0 -67
- package/.morph/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +0 -38
- package/.morph/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +0 -48
- package/.morph/framework/templates/infrastructure/docker/easypanel.template.json +0 -54
- package/.morph/framework/templates/infrastructure/github/README.md +0 -593
- package/.morph/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
- package/.morph/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -45
- package/.morph/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +0 -27
- package/.morph/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
- package/.morph/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -31
- package/.morph/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -59
- package/.morph/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -39
- package/.morph/framework/templates/integrations/asaas-client.cs +0 -387
- package/.morph/framework/templates/integrations/asaas-webhook.cs +0 -351
- package/.morph/framework/templates/integrations/azure-identity-config.cs +0 -288
- package/.morph/framework/templates/integrations/clerk-config.cs +0 -258
- package/.morph/framework/templates/meta-prompts/fusion/fusion-agent.md +0 -76
- package/.morph/framework/templates/meta-prompts/fusion/fusion-aggregator.md +0 -100
- package/.morph/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
- package/.morph/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
- package/.morph/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
- package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
- package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
- package/.morph/framework/templates/meta-prompts/squad-leaders/backend-squad.md +0 -90
- package/.morph/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +0 -126
- package/.morph/framework/templates/meta-prompts/squad-leaders/squad-leader.md +0 -43
- package/.morph/framework/templates/meta-prompts/validators/checkpoint-validator.md +0 -107
- package/.morph/framework/templates/meta-prompts/validators/pre-commit-validator.md +0 -95
- package/.morph/framework/templates/saas/subscription.cs +0 -347
- package/.morph/framework/templates/saas/tenant.cs +0 -338
- package/.morph/framework/templates/state.template.json +0 -17
- package/.morph/framework/templates/ui/FluentDesignTheme.cs +0 -149
- package/.morph/framework/templates/ui/MudTheme.cs +0 -281
- package/.morph/framework/templates/ui/design-system.css +0 -226
- package/.morph/logs/tool-failures.log +0 -7
- package/.morph/memory/pre-compact-2026-02-23T15-43-03-521Z.json +0 -16
- package/.morph/state.json +0 -48
- package/framework/templates/code/dotnet/contracts/contracts.cs +0 -217
- package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +0 -172
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
# Onboarding Guide — {{PROJECT_NAME}}
|
|
2
|
-
|
|
3
|
-
> Generated by MORPH-SPEC on {{DATE}}
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Project Overview
|
|
8
|
-
|
|
9
|
-
- **Project:** {{PROJECT_NAME}}
|
|
10
|
-
- **Stack:** {{STACK}}
|
|
11
|
-
- **Architecture:** {{ARCHITECTURE}}
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Active Agents
|
|
16
|
-
|
|
17
|
-
The following agents are configured for this project:
|
|
18
|
-
|
|
19
|
-
{{AGENTS_LIST}}
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Available MCPs & Plugins
|
|
24
|
-
|
|
25
|
-
{{AVAILABLE_MCPS}}
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## Standards
|
|
30
|
-
|
|
31
|
-
The following standards are enforced in this project:
|
|
32
|
-
|
|
33
|
-
{{STANDARDS_SUMMARY}}
|
|
34
|
-
|
|
35
|
-
Standards are located in:
|
|
36
|
-
- `.morph/framework/standards/` — Framework standards (universal)
|
|
37
|
-
- `.morph/context/` — Project-specific overrides
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## Configured Workflow
|
|
42
|
-
|
|
43
|
-
{{WORKFLOW_SUMMARY}}
|
|
44
|
-
|
|
45
|
-
### Available Workflows
|
|
46
|
-
|
|
47
|
-
| Workflow | Description | Phases |
|
|
48
|
-
|----------|-------------|--------|
|
|
49
|
-
| fast-track | Simple, well-defined features | 0→1→2→4→5 |
|
|
50
|
-
| standard | Most features | 0→1→(1.5)→2→3→4→5 |
|
|
51
|
-
| full-morph | Complex features with sync | 0→1→1.5→2→3→4→5→6 |
|
|
52
|
-
| design-impl | Pre-planned work | 2→4→5 |
|
|
53
|
-
| ui-refresh | Visual redesigns | 1.5→2→5 |
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## Key Commands
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
# Start a feature
|
|
61
|
-
# Just ask Claude Code to implement something
|
|
62
|
-
|
|
63
|
-
# Check feature progress
|
|
64
|
-
morph-spec status <feature>
|
|
65
|
-
|
|
66
|
-
# Validate feature outputs
|
|
67
|
-
morph-spec validate-feature <feature>
|
|
68
|
-
|
|
69
|
-
# Manage tasks
|
|
70
|
-
morph-spec task next <feature>
|
|
71
|
-
morph-spec task start <feature> <task-id>
|
|
72
|
-
morph-spec task done <feature> <task-id>
|
|
73
|
-
|
|
74
|
-
# Save/restore checkpoints
|
|
75
|
-
morph-spec checkpoint-save <feature>
|
|
76
|
-
morph-spec checkpoint-list <feature>
|
|
77
|
-
|
|
78
|
-
# View changes since last snapshot
|
|
79
|
-
morph-spec diff <feature>
|
|
80
|
-
|
|
81
|
-
# Health check
|
|
82
|
-
morph-spec doctor
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## Project Structure
|
|
88
|
-
|
|
89
|
-
```
|
|
90
|
-
{{PROJECT_NAME}}/
|
|
91
|
-
├── CLAUDE.md # Claude Code instructions
|
|
92
|
-
├── .morph/
|
|
93
|
-
│ ├── config/
|
|
94
|
-
│ │ └── config.json # Project configuration
|
|
95
|
-
│ ├── framework/
|
|
96
|
-
│ │ ├── agents.json # Agent definitions
|
|
97
|
-
│ │ ├── standards/ # Framework standards
|
|
98
|
-
│ │ └── templates/ # Output templates
|
|
99
|
-
│ ├── context/ # Project context & overrides
|
|
100
|
-
│ └── features/{feature}/ # Feature outputs
|
|
101
|
-
│ ├── 0-proposal/
|
|
102
|
-
│ ├── 1-design/
|
|
103
|
-
│ ├── 2-ui/
|
|
104
|
-
│ ├── 3-tasks/
|
|
105
|
-
│ └── 4-implement/
|
|
106
|
-
└── .claude/
|
|
107
|
-
├── commands/ # Slash commands
|
|
108
|
-
├── skills/ # Workflow skills
|
|
109
|
-
└── settings.local.json # Hooks & permissions
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## Getting Started
|
|
115
|
-
|
|
116
|
-
1. **Ask Claude Code** to implement a feature
|
|
117
|
-
2. **Follow the phases** — the framework guides you automatically
|
|
118
|
-
3. **Approve at pauses** — design and task breakdowns need your approval
|
|
119
|
-
4. **Check progress** with `morph-spec status <feature>`
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
*Generated by MORPH-SPEC v{{VERSION}} — Polymorphism Tech*
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
# Feature Proposal: {{titleCase FEATURE_NAME}}
|
|
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
|
-
{{#if STACK}}| **Stack** | {{STACK}} |{{/if}}
|
|
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/Cost impact: {X}
|
|
39
|
-
- User satisfaction: {X}
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
## Proposed Solution
|
|
44
|
-
|
|
45
|
-
### Overview
|
|
46
|
-
|
|
47
|
-
{Describe the proposed solution in 2-3 paragraphs}
|
|
48
|
-
|
|
49
|
-
### Key Features
|
|
50
|
-
|
|
51
|
-
1. **{Feature 1}** - {brief description}
|
|
52
|
-
2. **{Feature 2}** - {brief description}
|
|
53
|
-
3. **{Feature 3}** - {brief description}
|
|
54
|
-
|
|
55
|
-
{{#if (eq STACK "nextjs-supabase")}}
|
|
56
|
-
### Technical Approach
|
|
57
|
-
|
|
58
|
-
| Layer | Technology | Role |
|
|
59
|
-
|-------|-----------|------|
|
|
60
|
-
| **Database** | Supabase (PostgreSQL + RLS) | {tables, policies, storage} |
|
|
61
|
-
| **Backend API** | .NET 10 Minimal API | {endpoints, business logic} |
|
|
62
|
-
| **Frontend** | Next.js 15 (App Router) | {pages, components, auth} |
|
|
63
|
-
| **Infra** | EasyPanel + Docker | {deployment, SSL} |
|
|
64
|
-
{{/if}}
|
|
65
|
-
|
|
66
|
-
### User Journey
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
1. User {initial action}
|
|
70
|
-
2. System {response}
|
|
71
|
-
3. User {next action}
|
|
72
|
-
4. System {final result}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
---
|
|
76
|
-
|
|
77
|
-
{{#if (eq STACK "nextjs-supabase")}}
|
|
78
|
-
## Cost Estimate
|
|
79
|
-
|
|
80
|
-
| Resource | Provider | Monthly Cost | Notes |
|
|
81
|
-
|----------|----------|-------------|-------|
|
|
82
|
-
| Supabase | Free / Pro | $0 - $25 | {DB, Auth, Storage, Realtime} |
|
|
83
|
-
| VPS (EasyPanel) | {provider} | ${X} | {API + Web containers} |
|
|
84
|
-
| External APIs | {provider} | ${X} | {if applicable} |
|
|
85
|
-
| **Total** | | **${X}/month** | |
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
{{/if}}
|
|
90
|
-
## Success Metrics
|
|
91
|
-
|
|
92
|
-
How will we know this feature is successful?
|
|
93
|
-
|
|
94
|
-
| Metric | Current | Target |
|
|
95
|
-
|--------|---------|--------|
|
|
96
|
-
| {Metric 1} | {X} | {Y} |
|
|
97
|
-
| {Metric 2} | {X} | {Y} |
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
## Scope
|
|
102
|
-
|
|
103
|
-
### In Scope
|
|
104
|
-
|
|
105
|
-
- {Item 1 that is included}
|
|
106
|
-
- {Item 2 that is included}
|
|
107
|
-
- {Item 3 that is included}
|
|
108
|
-
|
|
109
|
-
### Out of Scope
|
|
110
|
-
|
|
111
|
-
- {Item 1 that is NOT included}
|
|
112
|
-
- {Item 2 that is NOT included}
|
|
113
|
-
|
|
114
|
-
### Future Considerations
|
|
115
|
-
|
|
116
|
-
- {Item that could be added later}
|
|
117
|
-
|
|
118
|
-
---
|
|
119
|
-
|
|
120
|
-
## Risks & Concerns
|
|
121
|
-
|
|
122
|
-
| Risk | Likelihood | Impact | Mitigation |
|
|
123
|
-
|------|------------|--------|------------|
|
|
124
|
-
| {Risk 1} | High/Med/Low | High/Med/Low | {mitigation strategy} |
|
|
125
|
-
| {Risk 2} | High/Med/Low | High/Med/Low | {mitigation strategy} |
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
## Dependencies
|
|
130
|
-
|
|
131
|
-
- [ ] {Dependency 1} - {status}
|
|
132
|
-
- [ ] {Dependency 2} - {status}
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## Estimated Effort
|
|
137
|
-
|
|
138
|
-
| Phase | Estimate |
|
|
139
|
-
|-------|----------|
|
|
140
|
-
| Design & Spec | {X}h |
|
|
141
|
-
{{#if (eq STACK "nextjs-supabase")}}| Database & Migrations | {X}h |
|
|
142
|
-
| Backend API | {X}h |
|
|
143
|
-
| Frontend | {X}h |
|
|
144
|
-
{{else}}| Implementation | {X}h |
|
|
145
|
-
{{/if}}| Testing | {X}h |
|
|
146
|
-
| **Total** | **{X}h** |
|
|
147
|
-
|
|
148
|
-
---
|
|
149
|
-
|
|
150
|
-
## Questions & Clarifications
|
|
151
|
-
|
|
152
|
-
1. {Question 1 that needs answering}
|
|
153
|
-
2. {Question 2 that needs answering}
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
{{#if (eq STACK "blazor-azure")}}
|
|
158
|
-
## Approval
|
|
159
|
-
|
|
160
|
-
| Role | Name | Decision | Date |
|
|
161
|
-
|------|------|----------|------|
|
|
162
|
-
| Product Owner | | Pending | |
|
|
163
|
-
| Tech Lead | | Pending | |
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
{{/if}}
|
|
168
|
-
## Next Steps
|
|
169
|
-
|
|
170
|
-
Once approved:
|
|
171
|
-
1. Create detailed `spec.md` with technical design
|
|
172
|
-
{{#if (eq STACK "nextjs-supabase")}}2. Define contracts (`contracts.cs` + `contracts.ts`)
|
|
173
|
-
3. Record decisions in `decisions.md`
|
|
174
|
-
4. Break down into `tasks.md`
|
|
175
|
-
5. Begin implementation
|
|
176
|
-
{{else}}2. Break down into `tasks.md`
|
|
177
|
-
3. Begin implementation
|
|
178
|
-
{{/if}}
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
*Created with MORPH Framework*
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
# Schema Analysis - {{FEATURE_NAME_TITLE}}
|
|
2
|
-
|
|
3
|
-
**Feature**: {{FEATURE_NAME}}
|
|
4
|
-
**Date**: {{DATE}}
|
|
5
|
-
**Method**: {{#if method}}{{method}}{{else}}Manual Code Analysis{{/if}}
|
|
6
|
-
**Analyzed By**: {{AUTHOR}}
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Summary
|
|
11
|
-
|
|
12
|
-
**Tables Analyzed**: {{#if tableCount}}{{tableCount}}{{else}}0{{/if}}
|
|
13
|
-
**Code Files Scanned**: {{#if fileCount}}{{fileCount}}{{else}}0{{/if}}
|
|
14
|
-
**MCP Tools Used**: {{#if mcpUsed}}{{mcpUsed}}{{else}}No (manual analysis){{/if}}
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## Tables Analyzed
|
|
19
|
-
|
|
20
|
-
{{#each tables}}
|
|
21
|
-
### Table: {{this.name}}
|
|
22
|
-
|
|
23
|
-
**Source:**
|
|
24
|
-
{{#if this.mcpSource}}- MCP: {{this.mcpSource}}{{/if}}
|
|
25
|
-
{{#if this.codeSource}}- Code: {{this.codeSource}}{{/if}}
|
|
26
|
-
|
|
27
|
-
**Columns:**
|
|
28
|
-
| Column Name | Type | Nullable | Default | Notes |
|
|
29
|
-
|------------|------|----------|---------|-------|
|
|
30
|
-
{{#each this.columns}}
|
|
31
|
-
| {{this.name}} | {{this.type}} | {{#if this.nullable}}YES{{else}}NO{{/if}} | {{#if this.default}}{{this.default}}{{else}}-{{/if}} | {{#if this.notes}}{{this.notes}}{{else}}-{{/if}} |
|
|
32
|
-
{{/each}}
|
|
33
|
-
|
|
34
|
-
**Relationships:**
|
|
35
|
-
{{#each this.relationships}}
|
|
36
|
-
- {{this.description}}
|
|
37
|
-
{{/each}}
|
|
38
|
-
|
|
39
|
-
**Indexes:**
|
|
40
|
-
{{#each this.indexes}}
|
|
41
|
-
- {{this.description}}
|
|
42
|
-
{{/each}}
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
{{/each}}
|
|
46
|
-
|
|
47
|
-
## ⚠️ CRITICAL FINDINGS
|
|
48
|
-
|
|
49
|
-
### Field Name Mismatches (MUST FIX)
|
|
50
|
-
|
|
51
|
-
{{#if fieldMismatches}}
|
|
52
|
-
{{#each fieldMismatches}}
|
|
53
|
-
- ❌ {{this.description}}
|
|
54
|
-
{{/each}}
|
|
55
|
-
{{else}}
|
|
56
|
-
✅ No field name mismatches found
|
|
57
|
-
{{/if}}
|
|
58
|
-
|
|
59
|
-
### Type Mismatches
|
|
60
|
-
|
|
61
|
-
{{#if typeMismatches}}
|
|
62
|
-
{{#each typeMismatches}}
|
|
63
|
-
- ⚠️ {{this.description}}
|
|
64
|
-
{{/each}}
|
|
65
|
-
{{else}}
|
|
66
|
-
✅ No type mismatches found
|
|
67
|
-
{{/if}}
|
|
68
|
-
|
|
69
|
-
### Relationship Corrections
|
|
70
|
-
|
|
71
|
-
{{#if relationshipIssues}}
|
|
72
|
-
{{#each relationshipIssues}}
|
|
73
|
-
- ⚠️ {{this.description}}
|
|
74
|
-
{{/each}}
|
|
75
|
-
{{else}}
|
|
76
|
-
✅ All relationships correctly identified
|
|
77
|
-
{{/if}}
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
## Recommendations for contracts.cs
|
|
82
|
-
|
|
83
|
-
Based on real schema analysis:
|
|
84
|
-
|
|
85
|
-
\`\`\`csharp
|
|
86
|
-
{{#each dtoRecommendations}}
|
|
87
|
-
// {{this.tableName}} → {{this.dtoName}}
|
|
88
|
-
public record {{this.dtoName}}(
|
|
89
|
-
{{#each this.fields}}
|
|
90
|
-
{{this.type}} {{this.name}}{{#if this.nullable}}?{{/if}}{{#unless @last}},{{/unless}} // {{#if this.comment}}{{this.comment}}{{/if}}
|
|
91
|
-
{{/each}}
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
{{/each}}
|
|
95
|
-
\`\`\`
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## Analysis Notes
|
|
100
|
-
|
|
101
|
-
{{#if notes}}
|
|
102
|
-
{{notes}}
|
|
103
|
-
{{else}}
|
|
104
|
-
_No additional notes._
|
|
105
|
-
{{/if}}
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
## Next Steps
|
|
110
|
-
|
|
111
|
-
- [ ] Verify schema analysis with stakeholders
|
|
112
|
-
- [ ] Generate `contracts.cs` using real field names
|
|
113
|
-
- [ ] Update `spec.md` data model section with findings
|
|
114
|
-
- [ ] Document any schema migrations needed in `decisions.md`
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
*Generated by MORPH-SPEC v{{FRAMEWORK_VERSION}}*
|
|
119
|
-
*Schema analysis helps prevent DTO field name mismatches and ensures contracts match real database schema*
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
# Feature Specification: {{titleCase FEATURE_NAME}}
|
|
2
|
-
|
|
3
|
-
| Field | Value |
|
|
4
|
-
|-------|-------|
|
|
5
|
-
| **ID** | {{FEATURE_NAME}} |
|
|
6
|
-
| **Status** | Draft / In Review / Approved / In Progress / Done |
|
|
7
|
-
| **Created** | {{DATE}} |
|
|
8
|
-
| **Stack** | {{STACK}} |
|
|
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:** FR1: {desc} | FR2: {desc} | FR3: {desc}
|
|
30
|
-
|
|
31
|
-
**Non-Functional:** NFR1: Performance - {target} | NFR2: Reliability - {target}
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## User Stories
|
|
36
|
-
|
|
37
|
-
### US001: {Title}
|
|
38
|
-
**As** {user type} **I want** {feature} **so that** {benefit}
|
|
39
|
-
|
|
40
|
-
**Acceptance Criteria:** 1. {criterion} 2. {criterion}
|
|
41
|
-
|
|
42
|
-
**Edge Cases:** {edge case}: {handling}
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
## Technical Design
|
|
47
|
-
|
|
48
|
-
### Stack
|
|
49
|
-
| Component | Technology |
|
|
50
|
-
|-----------|------------|
|
|
51
|
-
| Frontend | {Blazor Server / Next.js} |
|
|
52
|
-
| Backend | .NET 10 / C# 14 |
|
|
53
|
-
| Database | {Azure SQL / Cosmos DB} |
|
|
54
|
-
|
|
55
|
-
### Data Model
|
|
56
|
-
|
|
57
|
-
#### {EntityName}
|
|
58
|
-
| Column | Type | Constraints |
|
|
59
|
-
|--------|------|-------------|
|
|
60
|
-
| Id | Guid | PK |
|
|
61
|
-
| {Property} | {Type} | {Constraints} |
|
|
62
|
-
| CreatedAt | datetime2 | Default: GETUTCDATE() |
|
|
63
|
-
|
|
64
|
-
### Contracts
|
|
65
|
-
|
|
66
|
-
> **Ref:** `framework/standards/backend/database/ef-core.md` for background operations
|
|
67
|
-
|
|
68
|
-
```csharp
|
|
69
|
-
public interface I{{pascalCase FEATURE_NAME}}Service
|
|
70
|
-
{
|
|
71
|
-
Task<{{pascalCase FEATURE_NAME}}Dto> GetByIdAsync(int id);
|
|
72
|
-
Task<{{pascalCase FEATURE_NAME}}Dto> CreateAsync(Create{{pascalCase FEATURE_NAME}}Request request);
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
**Contracts Workflow:** Generate `contracts.cs` FIRST → validate names → reference in spec → approve with user.
|
|
77
|
-
|
|
78
|
-
**Validation Checklist:**
|
|
79
|
-
- [ ] Property names are descriptive (not generic "Data", "Value")
|
|
80
|
-
- [ ] Records use correct types (Stream vs byte[], Guid vs string)
|
|
81
|
-
- [ ] Response DTOs have all properties needed for UI
|
|
82
|
-
- [ ] Request DTOs have implicit validations (required, nullable)
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## UI/UX Design (if front-end)
|
|
87
|
-
|
|
88
|
-
### Wireframes
|
|
89
|
-
```
|
|
90
|
-
{ASCII wireframe per screen - include states: loading, error, empty}
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### User Flow
|
|
94
|
-
1. {Step} → {System response}
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
## Flows
|
|
99
|
-
|
|
100
|
-
### {Flow Name}
|
|
101
|
-
**Trigger:** {what starts this flow}
|
|
102
|
-
1. {Actor} {action} → {system response}
|
|
103
|
-
2. If {condition}: Path A / Else: Path B
|
|
104
|
-
**End State:** {final state}
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## Cost Estimate
|
|
109
|
-
|
|
110
|
-
| Resource | SKU | Monthly Cost | Justification |
|
|
111
|
-
|----------|-----|--------------|---------------|
|
|
112
|
-
| {Resource} | {SKU} | ${X} | {Why} |
|
|
113
|
-
| **Total** | | **${X}/month** | |
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
## ADRs (Architectural Decision Records)
|
|
118
|
-
|
|
119
|
-
### ADR-001: {Decision Title}
|
|
120
|
-
**Status:** Proposed / Accepted
|
|
121
|
-
**Context:** {Why decide now}
|
|
122
|
-
**Decision:** {What we chose}
|
|
123
|
-
**Alternatives:** 1. {Alt} (pros/cons) 2. {Alt} (pros/cons)
|
|
124
|
-
**Trade-offs:** {key trade-offs}
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## Security
|
|
129
|
-
|
|
130
|
-
| Action | Required Policy |
|
|
131
|
-
|--------|-----------------|
|
|
132
|
-
| View | CanView{Feature} |
|
|
133
|
-
| Create | CanManage{Feature} |
|
|
134
|
-
|
|
135
|
-
## Risks
|
|
136
|
-
|
|
137
|
-
| Risk | Impact | Mitigation |
|
|
138
|
-
|------|--------|------------|
|
|
139
|
-
| {Risk} | {H/M/L} | {Mitigation} |
|
|
140
|
-
|
|
141
|
-
## Out of Scope
|
|
142
|
-
- {Item}
|
|
143
|
-
|
|
144
|
-
## Definition of Done
|
|
145
|
-
- [ ] Code implemented
|
|
146
|
-
- [ ] Tests >80% coverage
|
|
147
|
-
- [ ] Code review approved
|
|
148
|
-
- [ ] Deploy to staging
|
|
149
|
-
- [ ] Recap.md generated
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
# UI Components: {{titleCase FEATURE_NAME}}
|
|
2
|
-
|
|
3
|
-
| Field | Value |
|
|
4
|
-
|-------|-------|
|
|
5
|
-
| **Feature** | {{FEATURE_NAME}} |
|
|
6
|
-
| **Created** | {{DATE}} |
|
|
7
|
-
| **Stack** | {{STACK}} |
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
{{#if (eq STACK "blazor-azure")}}
|
|
12
|
-
## Component Library: FluentUI Blazor / MudBlazor
|
|
13
|
-
|
|
14
|
-
**NuGet Package:**
|
|
15
|
-
```xml
|
|
16
|
-
<PackageReference Include="Microsoft.FluentUI.AspNetCore.Components" Version="4.x.x" />
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
### C001: Header Navigation
|
|
22
|
-
|
|
23
|
-
**Component:** `<FluentHeader>`
|
|
24
|
-
|
|
25
|
-
```razor
|
|
26
|
-
<FluentHeader>
|
|
27
|
-
<FluentLabel>{{FEATURE_NAME}}</FluentLabel>
|
|
28
|
-
<FluentSpacer />
|
|
29
|
-
<FluentPersona Name="@userName" OnClick="@ShowUserMenu" />
|
|
30
|
-
</FluentHeader>
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
### C002: Primary Button
|
|
36
|
-
|
|
37
|
-
**Component:** `<FluentButton>`
|
|
38
|
-
|
|
39
|
-
```razor
|
|
40
|
-
<FluentButton Appearance="Appearance.Accent"
|
|
41
|
-
OnClick="@HandleSave"
|
|
42
|
-
Disabled="@(!isValid)">
|
|
43
|
-
Save
|
|
44
|
-
</FluentButton>
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
### C003: Data Table
|
|
50
|
-
|
|
51
|
-
**Component:** `<FluentDataGrid>`
|
|
52
|
-
|
|
53
|
-
```razor
|
|
54
|
-
<FluentDataGrid Items="@items" Pagination="@pagination">
|
|
55
|
-
<PropertyColumn Property="@(i => i.Name)" Sortable="true" />
|
|
56
|
-
<PropertyColumn Property="@(i => i.Status)" Sortable="true" />
|
|
57
|
-
<TemplateColumn Title="Actions">
|
|
58
|
-
<FluentMenu>
|
|
59
|
-
<FluentMenuItem OnClick="@(() => EditItem(context))">Edit</FluentMenuItem>
|
|
60
|
-
<FluentMenuItem OnClick="@(() => DeleteItem(context))">Delete</FluentMenuItem>
|
|
61
|
-
</FluentMenu>
|
|
62
|
-
</TemplateColumn>
|
|
63
|
-
</FluentDataGrid>
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
### C004: Form Input
|
|
69
|
-
|
|
70
|
-
**Component:** `<FluentTextField>`
|
|
71
|
-
|
|
72
|
-
```razor
|
|
73
|
-
<FluentTextField @bind-Value="model.Name"
|
|
74
|
-
Label="Name"
|
|
75
|
-
Required="true"
|
|
76
|
-
MaxLength="100"
|
|
77
|
-
ErrorMessage="@GetValidationError(nameof(model.Name))">
|
|
78
|
-
</FluentTextField>
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
{{/if}}
|
|
82
|
-
|
|
83
|
-
{{#if (eq STACK "nextjs-supabase")}}
|
|
84
|
-
## Component Library: shadcn/ui
|
|
85
|
-
|
|
86
|
-
### C001: Button
|
|
87
|
-
|
|
88
|
-
```tsx
|
|
89
|
-
import { Button } from '@/components/ui/button';
|
|
90
|
-
|
|
91
|
-
<Button onClick={handleSave} disabled={!isValid}>
|
|
92
|
-
Save
|
|
93
|
-
</Button>
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
### C002: Data Table
|
|
97
|
-
|
|
98
|
-
```tsx
|
|
99
|
-
import { DataTable } from '@/components/ui/data-table';
|
|
100
|
-
|
|
101
|
-
<DataTable columns={columns} data={items} />
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
{{/if}}
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## Form Validation
|
|
109
|
-
|
|
110
|
-
| Field | Rule | Error Message |
|
|
111
|
-
|-------|------|---------------|
|
|
112
|
-
| **Name** | Required, max 100 | "Name is required" |
|
|
113
|
-
| **Email** | Valid email | "Invalid email" |
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
## Accessibility
|
|
118
|
-
- [ ] All inputs have labels
|
|
119
|
-
- [ ] Error messages announced
|
|
120
|
-
- [ ] Keyboard navigation works
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
*Generated with MORPH Framework*
|