@contractspec/bundle.library 3.8.9 → 3.8.11
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/.turbo/turbo-build.log +606 -594
- package/CHANGELOG.md +68 -0
- package/dist/application/context-storage/index.js +1 -28
- package/dist/application/index.js +13 -2133
- package/dist/application/mcp/cliMcp.js +4 -452
- package/dist/application/mcp/common.js +1 -193
- package/dist/application/mcp/contractsMcp.js +2 -549
- package/dist/application/mcp/contractsMcpResources.js +2 -123
- package/dist/application/mcp/contractsMcpTools.js +1 -199
- package/dist/application/mcp/docsMcp.catalog.js +3 -381
- package/dist/application/mcp/docsMcp.data.js +1 -147
- package/dist/application/mcp/docsMcp.js +6 -1039
- package/dist/application/mcp/docsMcp.prompts.js +6 -521
- package/dist/application/mcp/docsMcp.reference.js +3 -235
- package/dist/application/mcp/docsMcp.resources.js +3 -519
- package/dist/application/mcp/docsMcp.tools.js +3 -518
- package/dist/application/mcp/index.js +13 -2106
- package/dist/application/mcp/internalMcp.js +2 -410
- package/dist/application/mcp/normalizeMcpRequest.js +1 -21
- package/dist/application/mcp/providerRankingMcp.js +1 -530
- package/dist/bundles/LibraryBundle.js +1 -138
- package/dist/bundles/index.js +1 -138
- package/dist/components/docs/DocsIndexPage.js +2 -912
- package/dist/components/docs/advanced/AdvancedMCPPage.js +4 -271
- package/dist/components/docs/advanced/AdvancedOverlayEditorPage.js +1 -107
- package/dist/components/docs/advanced/AdvancedRenderersPage.js +2 -118
- package/dist/components/docs/advanced/AdvancedSpecExperimentsPage.js +4 -92
- package/dist/components/docs/advanced/AdvancedTelemetryPage.js +2 -373
- package/dist/components/docs/advanced/AdvancedWorkflowMonitoringPage.js +2 -99
- package/dist/components/docs/advanced/index.js +10 -1055
- package/dist/components/docs/architecture/ArchitectureAppConfigPage.js +6 -243
- package/dist/components/docs/architecture/ArchitectureControlPlanePage.js +3 -160
- package/dist/components/docs/architecture/ArchitectureIntegrationBindingPage.js +7 -259
- package/dist/components/docs/architecture/ArchitectureKnowledgeBindingPage.js +6 -374
- package/dist/components/docs/architecture/ArchitectureMultiTenancyPage.js +2 -166
- package/dist/components/docs/architecture/ArchitectureOverviewPage.js +1 -143
- package/dist/components/docs/architecture/index.js +20 -1340
- package/dist/components/docs/comparison/ComparisonAutomationPlatformsPage.js +1 -245
- package/dist/components/docs/comparison/ComparisonEnterprisePlatformsPage.js +1 -230
- package/dist/components/docs/comparison/ComparisonInternalToolBuildersPage.js +1 -245
- package/dist/components/docs/comparison/ComparisonOverviewPage.js +1 -202
- package/dist/components/docs/comparison/ComparisonWindmillPage.js +1 -254
- package/dist/components/docs/comparison/ComparisonWorkflowEnginesPage.js +1 -339
- package/dist/components/docs/comparison/index.js +1 -1510
- package/dist/components/docs/docsManifest.js +1 -611
- package/dist/components/docs/docsManifest.test.d.ts +1 -0
- package/dist/components/docs/ecosystem/IntegrationsPage.js +2 -103
- package/dist/components/docs/ecosystem/PluginsPage.js +13 -179
- package/dist/components/docs/ecosystem/RegistryPage.js +7 -100
- package/dist/components/docs/ecosystem/TemplatesPage.js +3 -141
- package/dist/components/docs/ecosystem/ecosystem.docblocks.js +2 -48
- package/dist/components/docs/ecosystem/index.js +23 -569
- package/dist/components/docs/examples/DocsExamplesPage.js +4 -124
- package/dist/components/docs/examples/ExampleShowcasePage.js +4 -244
- package/dist/components/docs/examples/exampleShowcaseData.js +4 -39
- package/dist/components/docs/examples/index.js +4 -330
- package/dist/components/docs/generated/docs-index.generated.js +1 -5
- package/dist/components/docs/generated/index.js +1 -74
- package/dist/components/docs/generated/loader.js +1 -74
- package/dist/components/docs/getting-started/CLIPage.js +4 -271
- package/dist/components/docs/getting-started/CompatibilityPage.js +1 -173
- package/dist/components/docs/getting-started/DataViewTutorialPage.js +4 -134
- package/dist/components/docs/getting-started/DeveloperToolsPage.js +1 -194
- package/dist/components/docs/getting-started/HelloWorldPage.js +5 -183
- package/dist/components/docs/getting-started/InstallationPage.js +3 -154
- package/dist/components/docs/getting-started/StartHerePage.js +2 -129
- package/dist/components/docs/getting-started/TroubleshootingPage.js +2 -168
- package/dist/components/docs/getting-started/VSCodeExtensionPage.js +1 -432
- package/dist/components/docs/getting-started/getting-started.docblocks.js +4 -41
- package/dist/components/docs/getting-started/index.js +18 -1869
- package/dist/components/docs/guides/GuideCIDiffGatingPage.js +2 -196
- package/dist/components/docs/guides/GuideConnectInRepoPage.d.ts +1 -0
- package/dist/components/docs/guides/GuideConnectInRepoPage.js +44 -0
- package/dist/components/docs/guides/GuideContractTypesPage.js +6 -541
- package/dist/components/docs/guides/GuideDocsPipelinePage.js +3 -207
- package/dist/components/docs/guides/GuideFirstModuleBundlePage.d.ts +1 -0
- package/dist/components/docs/guides/GuideFirstModuleBundlePage.js +76 -0
- package/dist/components/docs/guides/GuideGenerateDocsClientsSchemasPage.js +2 -209
- package/dist/components/docs/guides/GuideHostBuilderWorkbenchPage.d.ts +1 -0
- package/dist/components/docs/guides/GuideHostBuilderWorkbenchPage.js +70 -0
- package/dist/components/docs/guides/GuideImportExistingCodebasesPage.js +8 -754
- package/dist/components/docs/guides/GuideNextjsOneEndpointPage.js +6 -268
- package/dist/components/docs/guides/GuideSpecValidationTypingPage.js +4 -196
- package/dist/components/docs/guides/GuidesIndexPage.js +2 -169
- package/dist/components/docs/guides/guides.docblocks.js +11 -75
- package/dist/components/docs/guides/index.d.ts +3 -0
- package/dist/components/docs/guides/index.js +213 -2428
- package/dist/components/docs/index.js +542 -24297
- package/dist/components/docs/integrations/IntegrationsCircuitBreakersPage.js +2 -42
- package/dist/components/docs/integrations/IntegrationsElevenLabsPage.js +3 -105
- package/dist/components/docs/integrations/IntegrationsGithubPage.js +3 -142
- package/dist/components/docs/integrations/IntegrationsGmailPage.js +3 -109
- package/dist/components/docs/integrations/IntegrationsGoogleCalendarPage.js +3 -79
- package/dist/components/docs/integrations/IntegrationsHealthRoutingPage.js +3 -146
- package/dist/components/docs/integrations/IntegrationsMistralPage.js +5 -150
- package/dist/components/docs/integrations/IntegrationsOpenAIPage.js +5 -140
- package/dist/components/docs/integrations/IntegrationsOverviewPage.js +1 -160
- package/dist/components/docs/integrations/IntegrationsPostmarkPage.js +4 -218
- package/dist/components/docs/integrations/IntegrationsPowensPage.js +4 -300
- package/dist/components/docs/integrations/IntegrationsQdrantPage.js +5 -111
- package/dist/components/docs/integrations/IntegrationsResendPage.js +3 -102
- package/dist/components/docs/integrations/IntegrationsS3Page.js +4 -124
- package/dist/components/docs/integrations/IntegrationsSlackPage.js +3 -144
- package/dist/components/docs/integrations/IntegrationsSpecModelPage.js +7 -290
- package/dist/components/docs/integrations/IntegrationsStripePage.js +6 -327
- package/dist/components/docs/integrations/IntegrationsTwilioPage.js +3 -128
- package/dist/components/docs/integrations/IntegrationsWhatsappMetaPage.js +2 -146
- package/dist/components/docs/integrations/IntegrationsWhatsappTwilioPage.js +2 -156
- package/dist/components/docs/integrations/index.js +52 -3100
- package/dist/components/docs/intent/ContractFirstApiPage.js +2 -126
- package/dist/components/docs/intent/DeterministicCodegenPage.js +2 -148
- package/dist/components/docs/intent/GenerateClientFromSchemaPage.js +7 -207
- package/dist/components/docs/intent/OpenapiAlternativePage.js +3 -201
- package/dist/components/docs/intent/SchemaValidationTypescriptPage.js +4 -144
- package/dist/components/docs/intent/SpecDrivenDevelopmentPage.js +2 -126
- package/dist/components/docs/intent/index.js +15 -1135
- package/dist/components/docs/intent/intent-pages.docblocks.js +1 -201
- package/dist/components/docs/knowledge/KnowledgeCategoriesPage.js +6 -750
- package/dist/components/docs/knowledge/KnowledgeExamplesPage.js +4 -175
- package/dist/components/docs/knowledge/KnowledgeOverviewPage.js +1 -116
- package/dist/components/docs/knowledge/KnowledgeSourcesPage.js +8 -391
- package/dist/components/docs/knowledge/KnowledgeSpacesPage.js +6 -302
- package/dist/components/docs/knowledge/index.js +21 -1730
- package/dist/components/docs/libraries/LibrariesAccessibilityPage.js +3 -198
- package/dist/components/docs/libraries/LibrariesAiAgentPage.js +3 -141
- package/dist/components/docs/libraries/LibrariesAnalyticsPage.js +4 -80
- package/dist/components/docs/libraries/LibrariesContentGenPage.js +2 -100
- package/dist/components/docs/libraries/LibrariesContractsPage.js +2 -284
- package/dist/components/docs/libraries/LibrariesCostTrackingPage.js +3 -112
- package/dist/components/docs/libraries/LibrariesDataBackendPage.js +2 -166
- package/dist/components/docs/libraries/LibrariesDataViewsPage.js +3 -186
- package/dist/components/docs/libraries/LibrariesDesignSystemPage.js +4 -279
- package/dist/components/docs/libraries/LibrariesEvolutionPage.js +4 -127
- package/dist/components/docs/libraries/LibrariesGraphQLPage.js +2 -173
- package/dist/components/docs/libraries/LibrariesGrowthPage.js +3 -88
- package/dist/components/docs/libraries/LibrariesMultiTenancyPage.js +3 -108
- package/dist/components/docs/libraries/LibrariesObservabilityPage.js +5 -130
- package/dist/components/docs/libraries/LibrariesOverlayEnginePage.js +4 -110
- package/dist/components/docs/libraries/LibrariesOverviewPage.js +1 -170
- package/dist/components/docs/libraries/LibrariesPersonalizationPage.js +4 -114
- package/dist/components/docs/libraries/LibrariesProgressiveDeliveryPage.js +3 -132
- package/dist/components/docs/libraries/LibrariesResiliencePage.js +4 -120
- package/dist/components/docs/libraries/LibrariesRuntimePage.js +2 -200
- package/dist/components/docs/libraries/LibrariesSLOPage.js +3 -116
- package/dist/components/docs/libraries/LibrariesSchemaPage.js +3 -273
- package/dist/components/docs/libraries/LibrariesSupportBotPage.js +3 -134
- package/dist/components/docs/libraries/LibrariesTestingPage.js +3 -133
- package/dist/components/docs/libraries/LibrariesUIKitPage.js +2 -230
- package/dist/components/docs/libraries/LibrariesWorkflowComposerPage.js +3 -88
- package/dist/components/docs/libraries/LibrariesWorkflowsPage.js +2 -181
- package/dist/components/docs/libraries/index.js +54 -4147
- package/dist/components/docs/manifesto/ManifestoPage.js +1 -86
- package/dist/components/docs/ops/AutoEvolutionOpsPage.js +2 -132
- package/dist/components/docs/ops/DistributedTracingOpsPage.js +2 -71
- package/dist/components/docs/ops/index.js +3 -202
- package/dist/components/docs/ops/ops-lifecycle.docblocks.js +3 -38
- package/dist/components/docs/ops/ops-runbooks-a.docblocks.js +3 -94
- package/dist/components/docs/ops/ops-runbooks-b.docblocks.js +3 -76
- package/dist/components/docs/ops/ops-slo-tenant.docblocks.js +3 -76
- package/dist/components/docs/ops/ops-top.docs.js +2 -17
- package/dist/components/docs/ops/ops.docs.js +10 -302
- package/dist/components/docs/product/product.docblocks.js +5 -72
- package/dist/components/docs/reference/DocsMarkdownContent.js +2 -196
- package/dist/components/docs/reference/DocsReferenceContent.js +3 -256
- package/dist/components/docs/reference/DocsReferenceIndexClient.js +2 -127
- package/dist/components/docs/reference/DocsReferenceIndexPage.js +2 -206
- package/dist/components/docs/reference/DocsReferencePage.js +3 -265
- package/dist/components/docs/reference/docsMarkdownParser.js +2 -92
- package/dist/components/docs/reference/index.js +4 -470
- package/dist/components/docs/safety/SafetyAuditingPage.js +2 -350
- package/dist/components/docs/safety/SafetyMigrationsPage.js +2 -359
- package/dist/components/docs/safety/SafetyOverviewPage.js +1 -101
- package/dist/components/docs/safety/SafetyPDPPage.js +2 -301
- package/dist/components/docs/safety/SafetySecurityTrustPage.js +1 -206
- package/dist/components/docs/safety/SafetySigningPage.js +3 -90
- package/dist/components/docs/safety/SafetyTenantIsolationPage.js +2 -79
- package/dist/components/docs/safety/index.js +7 -1480
- package/dist/components/docs/shared/StudioPrompt.js +1 -31
- package/dist/components/docs/specs/SpecsBuilderControlPlanePage.d.ts +1 -0
- package/dist/components/docs/specs/SpecsBuilderControlPlanePage.js +34 -0
- package/dist/components/docs/specs/SpecsCapabilitiesPage.js +2 -158
- package/dist/components/docs/specs/SpecsConnectPage.d.ts +1 -0
- package/dist/components/docs/specs/SpecsConnectPage.js +8 -0
- package/dist/components/docs/specs/SpecsDataViewsPage.js +2 -260
- package/dist/components/docs/specs/SpecsModuleBundlesPage.d.ts +1 -0
- package/dist/components/docs/specs/SpecsModuleBundlesPage.js +67 -0
- package/dist/components/docs/specs/SpecsOverlaysPage.js +2 -372
- package/dist/components/docs/specs/SpecsOverviewPage.js +1 -186
- package/dist/components/docs/specs/SpecsPolicyPage.js +3 -420
- package/dist/components/docs/specs/SpecsWorkflowsPage.js +2 -312
- package/dist/components/docs/specs/index.d.ts +3 -0
- package/dist/components/docs/specs/index.js +109 -1702
- package/dist/components/docs/studio/StudioBYOKPage.js +1 -26
- package/dist/components/docs/studio/StudioDeploymentsPage.js +1 -26
- package/dist/components/docs/studio/StudioGettingStartedPage.js +1 -26
- package/dist/components/docs/studio/StudioIntegrationsPage.js +1 -26
- package/dist/components/docs/studio/StudioOverviewPage.js +1 -157
- package/dist/components/docs/studio/StudioVisualBuilderPage.js +1 -26
- package/dist/components/docs/studio/index.js +1 -282
- package/dist/components/docs/tech/contracts/tech-docs.docblocks.js +2 -19
- package/dist/components/integrations/index.js +2 -600
- package/dist/components/integrations/molecules/IntegrationCard.js +1 -100
- package/dist/components/integrations/organisms/IntegrationMarketplace.js +1 -214
- package/dist/components/integrations/organisms/IntegrationSettings.js +2 -284
- package/dist/components/integrations/organisms/KnowledgeSourceList.js +1 -103
- package/dist/components/legal/PrivacyTemplate.js +1 -1025
- package/dist/components/legal/TermsTemplate.js +1 -941
- package/dist/components/legal/index.js +1 -1963
- package/dist/components/shared/FeatureGateNotice.js +1 -38
- package/dist/components/shared/index.js +1 -38
- package/dist/components/shell/WorkspaceHeader.js +1 -100
- package/dist/components/shell/WorkspaceProjectShellLayout.js +1 -222
- package/dist/components/shell/WorkspaceShellRenderer.js +1 -228
- package/dist/components/shell/WorkspaceSidebar.js +1 -68
- package/dist/components/shell/index.js +1 -287
- package/dist/components/templates/engine/index.js +1 -39
- package/dist/components/templates/index.js +11 -965
- package/dist/components/templates/messaging/ConversationList.js +2 -83
- package/dist/components/templates/messaging/MessageComposer.js +4 -150
- package/dist/components/templates/messaging/MessageThread.js +3 -83
- package/dist/components/templates/messaging/MessagingWorkspace.js +5 -265
- package/dist/components/templates/messaging/index.js +5 -269
- package/dist/components/templates/recipes/LanguageSwitcher.js +1 -16
- package/dist/components/templates/recipes/RecipeCard.js +1 -80
- package/dist/components/templates/recipes/RecipeDetail.js +1 -74
- package/dist/components/templates/recipes/RecipeList.js +3 -245
- package/dist/components/templates/recipes/index.js +3 -248
- package/dist/components/templates/todos/FilterBar.js +1 -107
- package/dist/components/templates/todos/TaskForm.js +2 -158
- package/dist/components/templates/todos/TaskItem.js +1 -77
- package/dist/components/templates/todos/TaskList.js +5 -449
- package/dist/components/templates/todos/index.js +5 -452
- package/dist/config/contractspec-blueprint.js +1 -123
- package/dist/config/contractspec-branding.js +1 -44
- package/dist/config/contractspec-routes.js +1 -24
- package/dist/config/index.js +1 -126
- package/dist/features/contracts-registry.js +1 -178
- package/dist/features/docs/docs.contracts.js +1 -17
- package/dist/features/docs/index.js +1 -17
- package/dist/features/docs.feature.js +1 -33
- package/dist/features/index.js +1 -315
- package/dist/features/mcp.feature.js +1 -30
- package/dist/features/presentations.feature.js +1 -33
- package/dist/features/registry.js +1 -116
- package/dist/index.js +556 -28580
- package/dist/infrastructure/elysia/index.js +1 -35
- package/dist/infrastructure/elysia/logger.js +1 -35
- package/dist/infrastructure/index.js +1 -35
- package/dist/libs/email/client.js +1 -114
- package/dist/libs/email/contact.js +12 -165
- package/dist/libs/email/newsletter.js +6 -167
- package/dist/libs/email/types.js +0 -2
- package/dist/libs/email/utils.js +2 -8
- package/dist/libs/email/waitlist-application.js +28 -209
- package/dist/libs/email/waitlist.js +6 -167
- package/dist/libs/email.js +46 -363
- package/dist/libs/posthog/client.js +1 -63
- package/dist/libs/posthog/native.js +1 -23
- package/dist/libs/posthog/server.js +1 -13
- package/dist/libs/pricing-examples.js +1 -18
- package/dist/node/application/context-storage/index.js +1 -28
- package/dist/node/application/index.js +13 -2133
- package/dist/node/application/mcp/cliMcp.js +4 -452
- package/dist/node/application/mcp/common.js +1 -193
- package/dist/node/application/mcp/contractsMcp.js +2 -549
- package/dist/node/application/mcp/contractsMcpResources.js +2 -123
- package/dist/node/application/mcp/contractsMcpTools.js +1 -199
- package/dist/node/application/mcp/docsMcp.catalog.js +3 -381
- package/dist/node/application/mcp/docsMcp.data.js +1 -147
- package/dist/node/application/mcp/docsMcp.js +6 -1039
- package/dist/node/application/mcp/docsMcp.prompts.js +6 -521
- package/dist/node/application/mcp/docsMcp.reference.js +3 -235
- package/dist/node/application/mcp/docsMcp.resources.js +3 -519
- package/dist/node/application/mcp/docsMcp.tools.js +3 -518
- package/dist/node/application/mcp/index.js +13 -2106
- package/dist/node/application/mcp/internalMcp.js +2 -410
- package/dist/node/application/mcp/normalizeMcpRequest.js +1 -21
- package/dist/node/application/mcp/providerRankingMcp.js +1 -530
- package/dist/node/bundles/LibraryBundle.js +1 -138
- package/dist/node/bundles/index.js +1 -138
- package/dist/node/components/docs/DocsIndexPage.js +2 -912
- package/dist/node/components/docs/advanced/AdvancedMCPPage.js +4 -271
- package/dist/node/components/docs/advanced/AdvancedOverlayEditorPage.js +1 -107
- package/dist/node/components/docs/advanced/AdvancedRenderersPage.js +2 -118
- package/dist/node/components/docs/advanced/AdvancedSpecExperimentsPage.js +4 -92
- package/dist/node/components/docs/advanced/AdvancedTelemetryPage.js +2 -373
- package/dist/node/components/docs/advanced/AdvancedWorkflowMonitoringPage.js +2 -99
- package/dist/node/components/docs/advanced/index.js +10 -1055
- package/dist/node/components/docs/architecture/ArchitectureAppConfigPage.js +6 -243
- package/dist/node/components/docs/architecture/ArchitectureControlPlanePage.js +3 -160
- package/dist/node/components/docs/architecture/ArchitectureIntegrationBindingPage.js +7 -259
- package/dist/node/components/docs/architecture/ArchitectureKnowledgeBindingPage.js +6 -374
- package/dist/node/components/docs/architecture/ArchitectureMultiTenancyPage.js +2 -166
- package/dist/node/components/docs/architecture/ArchitectureOverviewPage.js +1 -143
- package/dist/node/components/docs/architecture/index.js +20 -1340
- package/dist/node/components/docs/comparison/ComparisonAutomationPlatformsPage.js +1 -245
- package/dist/node/components/docs/comparison/ComparisonEnterprisePlatformsPage.js +1 -230
- package/dist/node/components/docs/comparison/ComparisonInternalToolBuildersPage.js +1 -245
- package/dist/node/components/docs/comparison/ComparisonOverviewPage.js +1 -202
- package/dist/node/components/docs/comparison/ComparisonWindmillPage.js +1 -254
- package/dist/node/components/docs/comparison/ComparisonWorkflowEnginesPage.js +1 -339
- package/dist/node/components/docs/comparison/index.js +1 -1510
- package/dist/node/components/docs/docsManifest.js +1 -611
- package/dist/node/components/docs/ecosystem/IntegrationsPage.js +2 -103
- package/dist/node/components/docs/ecosystem/PluginsPage.js +13 -179
- package/dist/node/components/docs/ecosystem/RegistryPage.js +7 -100
- package/dist/node/components/docs/ecosystem/TemplatesPage.js +3 -141
- package/dist/node/components/docs/ecosystem/ecosystem.docblocks.js +2 -48
- package/dist/node/components/docs/ecosystem/index.js +23 -569
- package/dist/node/components/docs/examples/DocsExamplesPage.js +4 -124
- package/dist/node/components/docs/examples/ExampleShowcasePage.js +4 -244
- package/dist/node/components/docs/examples/exampleShowcaseData.js +4 -39
- package/dist/node/components/docs/examples/index.js +4 -330
- package/dist/node/components/docs/generated/docs-index.generated.js +1 -5
- package/dist/node/components/docs/generated/index.js +1 -74
- package/dist/node/components/docs/generated/loader.js +1 -74
- package/dist/node/components/docs/getting-started/CLIPage.js +4 -271
- package/dist/node/components/docs/getting-started/CompatibilityPage.js +1 -173
- package/dist/node/components/docs/getting-started/DataViewTutorialPage.js +4 -134
- package/dist/node/components/docs/getting-started/DeveloperToolsPage.js +1 -194
- package/dist/node/components/docs/getting-started/HelloWorldPage.js +5 -183
- package/dist/node/components/docs/getting-started/InstallationPage.js +3 -154
- package/dist/node/components/docs/getting-started/StartHerePage.js +2 -129
- package/dist/node/components/docs/getting-started/TroubleshootingPage.js +2 -168
- package/dist/node/components/docs/getting-started/VSCodeExtensionPage.js +1 -432
- package/dist/node/components/docs/getting-started/getting-started.docblocks.js +4 -41
- package/dist/node/components/docs/getting-started/index.js +18 -1869
- package/dist/node/components/docs/guides/GuideCIDiffGatingPage.js +2 -196
- package/dist/node/components/docs/guides/GuideConnectInRepoPage.js +43 -0
- package/dist/node/components/docs/guides/GuideContractTypesPage.js +6 -541
- package/dist/node/components/docs/guides/GuideDocsPipelinePage.js +3 -207
- package/dist/node/components/docs/guides/GuideFirstModuleBundlePage.js +75 -0
- package/dist/node/components/docs/guides/GuideGenerateDocsClientsSchemasPage.js +2 -209
- package/dist/node/components/docs/guides/GuideHostBuilderWorkbenchPage.js +69 -0
- package/dist/node/components/docs/guides/GuideImportExistingCodebasesPage.js +8 -754
- package/dist/node/components/docs/guides/GuideNextjsOneEndpointPage.js +6 -268
- package/dist/node/components/docs/guides/GuideSpecValidationTypingPage.js +4 -196
- package/dist/node/components/docs/guides/GuidesIndexPage.js +2 -169
- package/dist/node/components/docs/guides/guides.docblocks.js +11 -75
- package/dist/node/components/docs/guides/index.js +213 -2428
- package/dist/node/components/docs/index.js +542 -24297
- package/dist/node/components/docs/integrations/IntegrationsCircuitBreakersPage.js +2 -42
- package/dist/node/components/docs/integrations/IntegrationsElevenLabsPage.js +3 -105
- package/dist/node/components/docs/integrations/IntegrationsGithubPage.js +3 -142
- package/dist/node/components/docs/integrations/IntegrationsGmailPage.js +3 -109
- package/dist/node/components/docs/integrations/IntegrationsGoogleCalendarPage.js +3 -79
- package/dist/node/components/docs/integrations/IntegrationsHealthRoutingPage.js +3 -146
- package/dist/node/components/docs/integrations/IntegrationsMistralPage.js +5 -150
- package/dist/node/components/docs/integrations/IntegrationsOpenAIPage.js +5 -140
- package/dist/node/components/docs/integrations/IntegrationsOverviewPage.js +1 -160
- package/dist/node/components/docs/integrations/IntegrationsPostmarkPage.js +4 -218
- package/dist/node/components/docs/integrations/IntegrationsPowensPage.js +4 -300
- package/dist/node/components/docs/integrations/IntegrationsQdrantPage.js +5 -111
- package/dist/node/components/docs/integrations/IntegrationsResendPage.js +3 -102
- package/dist/node/components/docs/integrations/IntegrationsS3Page.js +4 -124
- package/dist/node/components/docs/integrations/IntegrationsSlackPage.js +3 -144
- package/dist/node/components/docs/integrations/IntegrationsSpecModelPage.js +7 -290
- package/dist/node/components/docs/integrations/IntegrationsStripePage.js +6 -327
- package/dist/node/components/docs/integrations/IntegrationsTwilioPage.js +3 -128
- package/dist/node/components/docs/integrations/IntegrationsWhatsappMetaPage.js +2 -146
- package/dist/node/components/docs/integrations/IntegrationsWhatsappTwilioPage.js +2 -156
- package/dist/node/components/docs/integrations/index.js +52 -3100
- package/dist/node/components/docs/intent/ContractFirstApiPage.js +2 -126
- package/dist/node/components/docs/intent/DeterministicCodegenPage.js +2 -148
- package/dist/node/components/docs/intent/GenerateClientFromSchemaPage.js +7 -207
- package/dist/node/components/docs/intent/OpenapiAlternativePage.js +3 -201
- package/dist/node/components/docs/intent/SchemaValidationTypescriptPage.js +4 -144
- package/dist/node/components/docs/intent/SpecDrivenDevelopmentPage.js +2 -126
- package/dist/node/components/docs/intent/index.js +15 -1135
- package/dist/node/components/docs/intent/intent-pages.docblocks.js +1 -201
- package/dist/node/components/docs/knowledge/KnowledgeCategoriesPage.js +6 -750
- package/dist/node/components/docs/knowledge/KnowledgeExamplesPage.js +4 -175
- package/dist/node/components/docs/knowledge/KnowledgeOverviewPage.js +1 -116
- package/dist/node/components/docs/knowledge/KnowledgeSourcesPage.js +8 -391
- package/dist/node/components/docs/knowledge/KnowledgeSpacesPage.js +6 -302
- package/dist/node/components/docs/knowledge/index.js +21 -1730
- package/dist/node/components/docs/libraries/LibrariesAccessibilityPage.js +3 -198
- package/dist/node/components/docs/libraries/LibrariesAiAgentPage.js +3 -141
- package/dist/node/components/docs/libraries/LibrariesAnalyticsPage.js +4 -80
- package/dist/node/components/docs/libraries/LibrariesContentGenPage.js +2 -100
- package/dist/node/components/docs/libraries/LibrariesContractsPage.js +2 -284
- package/dist/node/components/docs/libraries/LibrariesCostTrackingPage.js +3 -112
- package/dist/node/components/docs/libraries/LibrariesDataBackendPage.js +2 -166
- package/dist/node/components/docs/libraries/LibrariesDataViewsPage.js +3 -186
- package/dist/node/components/docs/libraries/LibrariesDesignSystemPage.js +4 -279
- package/dist/node/components/docs/libraries/LibrariesEvolutionPage.js +4 -127
- package/dist/node/components/docs/libraries/LibrariesGraphQLPage.js +2 -173
- package/dist/node/components/docs/libraries/LibrariesGrowthPage.js +3 -88
- package/dist/node/components/docs/libraries/LibrariesMultiTenancyPage.js +3 -108
- package/dist/node/components/docs/libraries/LibrariesObservabilityPage.js +5 -130
- package/dist/node/components/docs/libraries/LibrariesOverlayEnginePage.js +4 -110
- package/dist/node/components/docs/libraries/LibrariesOverviewPage.js +1 -170
- package/dist/node/components/docs/libraries/LibrariesPersonalizationPage.js +4 -114
- package/dist/node/components/docs/libraries/LibrariesProgressiveDeliveryPage.js +3 -132
- package/dist/node/components/docs/libraries/LibrariesResiliencePage.js +4 -120
- package/dist/node/components/docs/libraries/LibrariesRuntimePage.js +2 -200
- package/dist/node/components/docs/libraries/LibrariesSLOPage.js +3 -116
- package/dist/node/components/docs/libraries/LibrariesSchemaPage.js +3 -273
- package/dist/node/components/docs/libraries/LibrariesSupportBotPage.js +3 -134
- package/dist/node/components/docs/libraries/LibrariesTestingPage.js +3 -133
- package/dist/node/components/docs/libraries/LibrariesUIKitPage.js +2 -230
- package/dist/node/components/docs/libraries/LibrariesWorkflowComposerPage.js +3 -88
- package/dist/node/components/docs/libraries/LibrariesWorkflowsPage.js +2 -181
- package/dist/node/components/docs/libraries/index.js +54 -4147
- package/dist/node/components/docs/manifesto/ManifestoPage.js +1 -86
- package/dist/node/components/docs/ops/AutoEvolutionOpsPage.js +2 -132
- package/dist/node/components/docs/ops/DistributedTracingOpsPage.js +2 -71
- package/dist/node/components/docs/ops/index.js +3 -202
- package/dist/node/components/docs/ops/ops-lifecycle.docblocks.js +3 -38
- package/dist/node/components/docs/ops/ops-runbooks-a.docblocks.js +3 -94
- package/dist/node/components/docs/ops/ops-runbooks-b.docblocks.js +3 -76
- package/dist/node/components/docs/ops/ops-slo-tenant.docblocks.js +3 -76
- package/dist/node/components/docs/ops/ops-top.docs.js +2 -17
- package/dist/node/components/docs/ops/ops.docs.js +10 -302
- package/dist/node/components/docs/product/product.docblocks.js +5 -72
- package/dist/node/components/docs/reference/DocsMarkdownContent.js +2 -196
- package/dist/node/components/docs/reference/DocsReferenceContent.js +3 -256
- package/dist/node/components/docs/reference/DocsReferenceIndexClient.js +2 -127
- package/dist/node/components/docs/reference/DocsReferenceIndexPage.js +2 -206
- package/dist/node/components/docs/reference/DocsReferencePage.js +3 -265
- package/dist/node/components/docs/reference/docsMarkdownParser.js +2 -92
- package/dist/node/components/docs/reference/index.js +4 -470
- package/dist/node/components/docs/safety/SafetyAuditingPage.js +2 -350
- package/dist/node/components/docs/safety/SafetyMigrationsPage.js +2 -359
- package/dist/node/components/docs/safety/SafetyOverviewPage.js +1 -101
- package/dist/node/components/docs/safety/SafetyPDPPage.js +2 -301
- package/dist/node/components/docs/safety/SafetySecurityTrustPage.js +1 -206
- package/dist/node/components/docs/safety/SafetySigningPage.js +3 -90
- package/dist/node/components/docs/safety/SafetyTenantIsolationPage.js +2 -79
- package/dist/node/components/docs/safety/index.js +7 -1480
- package/dist/node/components/docs/shared/StudioPrompt.js +1 -31
- package/dist/node/components/docs/specs/SpecsBuilderControlPlanePage.js +33 -0
- package/dist/node/components/docs/specs/SpecsCapabilitiesPage.js +2 -158
- package/dist/node/components/docs/specs/SpecsConnectPage.js +7 -0
- package/dist/node/components/docs/specs/SpecsDataViewsPage.js +2 -260
- package/dist/node/components/docs/specs/SpecsModuleBundlesPage.js +66 -0
- package/dist/node/components/docs/specs/SpecsOverlaysPage.js +2 -372
- package/dist/node/components/docs/specs/SpecsOverviewPage.js +1 -186
- package/dist/node/components/docs/specs/SpecsPolicyPage.js +3 -420
- package/dist/node/components/docs/specs/SpecsWorkflowsPage.js +2 -312
- package/dist/node/components/docs/specs/index.js +109 -1702
- package/dist/node/components/docs/studio/StudioBYOKPage.js +1 -26
- package/dist/node/components/docs/studio/StudioDeploymentsPage.js +1 -26
- package/dist/node/components/docs/studio/StudioGettingStartedPage.js +1 -26
- package/dist/node/components/docs/studio/StudioIntegrationsPage.js +1 -26
- package/dist/node/components/docs/studio/StudioOverviewPage.js +1 -157
- package/dist/node/components/docs/studio/StudioVisualBuilderPage.js +1 -26
- package/dist/node/components/docs/studio/index.js +1 -282
- package/dist/node/components/docs/tech/contracts/tech-docs.docblocks.js +2 -19
- package/dist/node/components/integrations/index.js +2 -600
- package/dist/node/components/integrations/molecules/IntegrationCard.js +1 -100
- package/dist/node/components/integrations/organisms/IntegrationMarketplace.js +1 -214
- package/dist/node/components/integrations/organisms/IntegrationSettings.js +2 -284
- package/dist/node/components/integrations/organisms/KnowledgeSourceList.js +1 -103
- package/dist/node/components/legal/PrivacyTemplate.js +1 -1025
- package/dist/node/components/legal/TermsTemplate.js +1 -941
- package/dist/node/components/legal/index.js +1 -1963
- package/dist/node/components/shared/FeatureGateNotice.js +1 -38
- package/dist/node/components/shared/index.js +1 -38
- package/dist/node/components/shell/WorkspaceHeader.js +1 -100
- package/dist/node/components/shell/WorkspaceProjectShellLayout.js +1 -222
- package/dist/node/components/shell/WorkspaceShellRenderer.js +1 -228
- package/dist/node/components/shell/WorkspaceSidebar.js +1 -68
- package/dist/node/components/shell/index.js +1 -287
- package/dist/node/components/templates/engine/index.js +1 -39
- package/dist/node/components/templates/index.js +11 -965
- package/dist/node/components/templates/messaging/ConversationList.js +2 -83
- package/dist/node/components/templates/messaging/MessageComposer.js +4 -150
- package/dist/node/components/templates/messaging/MessageThread.js +3 -83
- package/dist/node/components/templates/messaging/MessagingWorkspace.js +5 -265
- package/dist/node/components/templates/messaging/index.js +5 -269
- package/dist/node/components/templates/recipes/LanguageSwitcher.js +1 -16
- package/dist/node/components/templates/recipes/RecipeCard.js +1 -80
- package/dist/node/components/templates/recipes/RecipeDetail.js +1 -74
- package/dist/node/components/templates/recipes/RecipeList.js +3 -245
- package/dist/node/components/templates/recipes/index.js +3 -248
- package/dist/node/components/templates/todos/FilterBar.js +1 -107
- package/dist/node/components/templates/todos/TaskForm.js +2 -158
- package/dist/node/components/templates/todos/TaskItem.js +1 -77
- package/dist/node/components/templates/todos/TaskList.js +5 -449
- package/dist/node/components/templates/todos/index.js +5 -452
- package/dist/node/config/contractspec-blueprint.js +1 -123
- package/dist/node/config/contractspec-branding.js +1 -44
- package/dist/node/config/contractspec-routes.js +1 -24
- package/dist/node/config/index.js +1 -126
- package/dist/node/features/contracts-registry.js +1 -178
- package/dist/node/features/docs/docs.contracts.js +1 -17
- package/dist/node/features/docs/index.js +1 -17
- package/dist/node/features/docs.feature.js +1 -33
- package/dist/node/features/index.js +1 -315
- package/dist/node/features/mcp.feature.js +1 -30
- package/dist/node/features/presentations.feature.js +1 -33
- package/dist/node/features/registry.js +1 -116
- package/dist/node/index.js +556 -28580
- package/dist/node/infrastructure/elysia/index.js +1 -35
- package/dist/node/infrastructure/elysia/logger.js +1 -35
- package/dist/node/infrastructure/index.js +1 -35
- package/dist/node/libs/email/client.js +1 -114
- package/dist/node/libs/email/contact.js +12 -165
- package/dist/node/libs/email/newsletter.js +6 -167
- package/dist/node/libs/email/types.js +0 -2
- package/dist/node/libs/email/utils.js +2 -8
- package/dist/node/libs/email/waitlist-application.js +28 -209
- package/dist/node/libs/email/waitlist.js +6 -167
- package/dist/node/libs/email.js +46 -363
- package/dist/node/libs/posthog/client.js +1 -63
- package/dist/node/libs/posthog/native.js +1 -23
- package/dist/node/libs/posthog/server.js +1 -13
- package/dist/node/libs/pricing-examples.js +1 -18
- package/dist/node/presentation/features/atoms/FeatureIcon/FeatureIcon.js +1 -97
- package/dist/node/presentation/features/atoms/FeatureIcon/index.js +1 -97
- package/dist/node/presentation/features/atoms/index.js +1 -97
- package/dist/node/presentation/features/hooks/index.js +1 -397
- package/dist/node/presentation/features/hooks/useContractsRegistry.js +1 -289
- package/dist/node/presentation/features/hooks/useFeatureFilters.js +1 -75
- package/dist/node/presentation/features/hooks/useFeatureRegistry.js +1 -147
- package/dist/node/presentation/features/hooks/useRelatedDocs.js +1 -28
- package/dist/node/presentation/features/index.js +1 -3063
- package/dist/node/presentation/features/molecules/FeatureCard/FeatureCard.js +1 -366
- package/dist/node/presentation/features/molecules/FeatureCard/index.js +1 -366
- package/dist/node/presentation/features/molecules/FeatureCategoryHeader/FeatureCategoryHeader.js +1 -50
- package/dist/node/presentation/features/molecules/FeatureCategoryHeader/index.js +1 -50
- package/dist/node/presentation/features/molecules/FeatureFilters/FeatureFilters.js +1 -92
- package/dist/node/presentation/features/molecules/FeatureFilters/index.js +1 -92
- package/dist/node/presentation/features/molecules/FeatureHoverPreview/FeatureHoverPreview.js +1 -176
- package/dist/node/presentation/features/molecules/FeatureHoverPreview/index.js +1 -176
- package/dist/node/presentation/features/molecules/index.js +1 -505
- package/dist/node/presentation/features/organisms/FeatureDataViewsList.js +1 -304
- package/dist/node/presentation/features/organisms/FeatureDetail/FeatureDetail.js +1 -154
- package/dist/node/presentation/features/organisms/FeatureDetail/index.js +1 -154
- package/dist/node/presentation/features/organisms/FeatureDiscovery/FeatureDiscovery.js +1 -909
- package/dist/node/presentation/features/organisms/FeatureDiscovery/index.js +1 -909
- package/dist/node/presentation/features/organisms/FeatureEventsList.js +1 -302
- package/dist/node/presentation/features/organisms/FeatureFormsList.js +1 -302
- package/dist/node/presentation/features/organisms/FeatureOperationsList.js +1 -180
- package/dist/node/presentation/features/organisms/FeaturePresentationsList.js +1 -304
- package/dist/node/presentation/features/organisms/index.js +1 -1359
- package/dist/node/presentation/features/templates/FeatureDataViewDetailTemplate/FeatureDataViewDetailTemplate.js +1 -332
- package/dist/node/presentation/features/templates/FeatureDataViewDetailTemplate/index.js +1 -332
- package/dist/node/presentation/features/templates/FeatureDataViewsTemplate/FeatureDataViewsTemplate.js +1 -342
- package/dist/node/presentation/features/templates/FeatureDataViewsTemplate/index.js +1 -342
- package/dist/node/presentation/features/templates/FeatureEventDetailTemplate/FeatureEventDetailTemplate.js +1 -303
- package/dist/node/presentation/features/templates/FeatureEventDetailTemplate/index.js +1 -303
- package/dist/node/presentation/features/templates/FeatureEventsTemplate/FeatureEventsTemplate.js +1 -340
- package/dist/node/presentation/features/templates/FeatureEventsTemplate/index.js +1 -340
- package/dist/node/presentation/features/templates/FeatureFormDetailTemplate/FeatureFormDetailTemplate.js +1 -329
- package/dist/node/presentation/features/templates/FeatureFormDetailTemplate/index.js +1 -329
- package/dist/node/presentation/features/templates/FeatureFormsTemplate/FeatureFormsTemplate.js +1 -340
- package/dist/node/presentation/features/templates/FeatureFormsTemplate/index.js +1 -340
- package/dist/node/presentation/features/templates/FeatureOperationDetailTemplate/FeatureOperationDetailTemplate.js +1 -302
- package/dist/node/presentation/features/templates/FeatureOperationDetailTemplate/index.js +1 -302
- package/dist/node/presentation/features/templates/FeatureOperationsTemplate/FeatureOperationsTemplate.js +1 -218
- package/dist/node/presentation/features/templates/FeatureOperationsTemplate/index.js +1 -218
- package/dist/node/presentation/features/templates/FeatureOverviewTemplate/FeatureOverviewTemplate.js +1 -187
- package/dist/node/presentation/features/templates/FeatureOverviewTemplate/index.js +1 -187
- package/dist/node/presentation/features/templates/FeaturePresentationDetailTemplate/FeaturePresentationDetailTemplate.js +1 -306
- package/dist/node/presentation/features/templates/FeaturePresentationDetailTemplate/index.js +1 -306
- package/dist/node/presentation/features/templates/FeaturePresentationsTemplate/FeaturePresentationsTemplate.js +1 -342
- package/dist/node/presentation/features/templates/FeaturePresentationsTemplate/index.js +1 -342
- package/dist/presentation/features/atoms/FeatureIcon/FeatureIcon.js +1 -97
- package/dist/presentation/features/atoms/FeatureIcon/index.js +1 -97
- package/dist/presentation/features/atoms/index.js +1 -97
- package/dist/presentation/features/hooks/index.js +1 -397
- package/dist/presentation/features/hooks/useContractsRegistry.js +1 -289
- package/dist/presentation/features/hooks/useFeatureFilters.js +1 -75
- package/dist/presentation/features/hooks/useFeatureRegistry.js +1 -147
- package/dist/presentation/features/hooks/useRelatedDocs.js +1 -28
- package/dist/presentation/features/index.js +1 -3063
- package/dist/presentation/features/molecules/FeatureCard/FeatureCard.js +1 -366
- package/dist/presentation/features/molecules/FeatureCard/index.js +1 -366
- package/dist/presentation/features/molecules/FeatureCategoryHeader/FeatureCategoryHeader.js +1 -50
- package/dist/presentation/features/molecules/FeatureCategoryHeader/index.js +1 -50
- package/dist/presentation/features/molecules/FeatureFilters/FeatureFilters.js +1 -92
- package/dist/presentation/features/molecules/FeatureFilters/index.js +1 -92
- package/dist/presentation/features/molecules/FeatureHoverPreview/FeatureHoverPreview.js +1 -176
- package/dist/presentation/features/molecules/FeatureHoverPreview/index.js +1 -176
- package/dist/presentation/features/molecules/index.js +1 -505
- package/dist/presentation/features/organisms/FeatureDataViewsList.js +1 -304
- package/dist/presentation/features/organisms/FeatureDetail/FeatureDetail.js +1 -154
- package/dist/presentation/features/organisms/FeatureDetail/index.js +1 -154
- package/dist/presentation/features/organisms/FeatureDiscovery/FeatureDiscovery.js +1 -909
- package/dist/presentation/features/organisms/FeatureDiscovery/index.js +1 -909
- package/dist/presentation/features/organisms/FeatureEventsList.js +1 -302
- package/dist/presentation/features/organisms/FeatureFormsList.js +1 -302
- package/dist/presentation/features/organisms/FeatureOperationsList.js +1 -180
- package/dist/presentation/features/organisms/FeaturePresentationsList.js +1 -304
- package/dist/presentation/features/organisms/index.js +1 -1359
- package/dist/presentation/features/templates/FeatureDataViewDetailTemplate/FeatureDataViewDetailTemplate.js +1 -332
- package/dist/presentation/features/templates/FeatureDataViewDetailTemplate/index.js +1 -332
- package/dist/presentation/features/templates/FeatureDataViewsTemplate/FeatureDataViewsTemplate.js +1 -342
- package/dist/presentation/features/templates/FeatureDataViewsTemplate/index.js +1 -342
- package/dist/presentation/features/templates/FeatureEventDetailTemplate/FeatureEventDetailTemplate.js +1 -303
- package/dist/presentation/features/templates/FeatureEventDetailTemplate/index.js +1 -303
- package/dist/presentation/features/templates/FeatureEventsTemplate/FeatureEventsTemplate.js +1 -340
- package/dist/presentation/features/templates/FeatureEventsTemplate/index.js +1 -340
- package/dist/presentation/features/templates/FeatureFormDetailTemplate/FeatureFormDetailTemplate.js +1 -329
- package/dist/presentation/features/templates/FeatureFormDetailTemplate/index.js +1 -329
- package/dist/presentation/features/templates/FeatureFormsTemplate/FeatureFormsTemplate.js +1 -340
- package/dist/presentation/features/templates/FeatureFormsTemplate/index.js +1 -340
- package/dist/presentation/features/templates/FeatureOperationDetailTemplate/FeatureOperationDetailTemplate.js +1 -302
- package/dist/presentation/features/templates/FeatureOperationDetailTemplate/index.js +1 -302
- package/dist/presentation/features/templates/FeatureOperationsTemplate/FeatureOperationsTemplate.js +1 -218
- package/dist/presentation/features/templates/FeatureOperationsTemplate/index.js +1 -218
- package/dist/presentation/features/templates/FeatureOverviewTemplate/FeatureOverviewTemplate.js +1 -187
- package/dist/presentation/features/templates/FeatureOverviewTemplate/index.js +1 -187
- package/dist/presentation/features/templates/FeaturePresentationDetailTemplate/FeaturePresentationDetailTemplate.js +1 -306
- package/dist/presentation/features/templates/FeaturePresentationDetailTemplate/index.js +1 -306
- package/dist/presentation/features/templates/FeaturePresentationsTemplate/FeaturePresentationsTemplate.js +1 -342
- package/dist/presentation/features/templates/FeaturePresentationsTemplate/index.js +1 -342
- package/package.json +109 -37
- package/src/components/docs/DocsIndexPage.tsx +55 -0
- package/src/components/docs/architecture/ArchitectureControlPlanePage.tsx +19 -0
- package/src/components/docs/architecture/ArchitectureOverviewPage.tsx +34 -0
- package/src/components/docs/docsManifest.test.ts +70 -0
- package/src/components/docs/docsManifest.ts +71 -1
- package/src/components/docs/ecosystem/PluginsPage.tsx +24 -10
- package/src/components/docs/ecosystem/RegistryPage.tsx +11 -6
- package/src/components/docs/generated/docs-index._common.json +206 -273
- package/src/components/docs/generated/docs-index.control-plane.json +18 -0
- package/src/components/docs/generated/docs-index.defineExample.json +10 -0
- package/src/components/docs/generated/docs-index.manifest.json +22 -12
- package/src/components/docs/generated/docs-index.platform-acp.json +64 -0
- package/src/components/docs/generated/docs-index.platform-agent.json +89 -1
- package/src/components/docs/generated/docs-index.platform-context.json +48 -0
- package/src/components/docs/generated/docs-index.platform-control-plane.json +72 -0
- package/src/components/docs/generated/docs-index.platform-database.json +40 -0
- package/src/components/docs/generated/docs-index.platform-docs.json +64 -0
- package/src/components/docs/generated/docs-index.platform-provider-ranking.json +89 -1
- package/src/components/docs/generated/docs-index.pocket-family-office.json +8 -0
- package/src/components/docs/generated/docs-index.unknown.json +8 -0
- package/src/components/docs/guides/GuideConnectInRepoPage.tsx +184 -0
- package/src/components/docs/guides/GuideFirstModuleBundlePage.tsx +182 -0
- package/src/components/docs/guides/GuideHostBuilderWorkbenchPage.tsx +230 -0
- package/src/components/docs/guides/GuidesIndexPage.tsx +21 -0
- package/src/components/docs/guides/index.ts +3 -0
- package/src/components/docs/specs/SpecsBuilderControlPlanePage.tsx +210 -0
- package/src/components/docs/specs/SpecsConnectPage.tsx +162 -0
- package/src/components/docs/specs/SpecsModuleBundlesPage.tsx +223 -0
- package/src/components/docs/specs/SpecsOverlaysPage.tsx +20 -0
- package/src/components/docs/specs/SpecsOverviewPage.tsx +44 -0
- package/src/components/docs/specs/SpecsWorkflowsPage.tsx +9 -1
- package/src/components/docs/specs/index.ts +3 -0
- package/src/components/docs/studio/StudioOverviewPage.tsx +26 -0
- package/src/infrastructure/elysia/logger.ts +11 -3
|
@@ -1,1511 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
// src/components/docs/comparison/ComparisonAutomationPlatformsPage.tsx
|
|
3
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
-
function ComparisonAutomationPlatformsPage() {
|
|
5
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
6
|
-
className: "space-y-8",
|
|
7
|
-
children: [
|
|
8
|
-
/* @__PURE__ */ jsxs("div", {
|
|
9
|
-
className: "space-y-4",
|
|
10
|
-
children: [
|
|
11
|
-
/* @__PURE__ */ jsx("h1", {
|
|
12
|
-
className: "font-bold text-4xl",
|
|
13
|
-
children: "Automation platforms"
|
|
14
|
-
}),
|
|
15
|
-
/* @__PURE__ */ jsx("p", {
|
|
16
|
-
className: "text-muted-foreground",
|
|
17
|
-
children: "Automation platforms connect apps and automate tasks through triggers and actions. They serve operations and non-technical users well but stop short of generating full applications or enforcing fine-grained policies."
|
|
18
|
-
})
|
|
19
|
-
]
|
|
20
|
-
}),
|
|
21
|
-
/* @__PURE__ */ jsxs("div", {
|
|
22
|
-
className: "space-y-4",
|
|
23
|
-
children: [
|
|
24
|
-
/* @__PURE__ */ jsx("h2", {
|
|
25
|
-
className: "font-bold text-2xl",
|
|
26
|
-
children: "Feature comparison"
|
|
27
|
-
}),
|
|
28
|
-
/* @__PURE__ */ jsx("div", {
|
|
29
|
-
className: "overflow-x-auto rounded-lg border border-border/50",
|
|
30
|
-
children: /* @__PURE__ */ jsxs("table", {
|
|
31
|
-
className: "w-full text-left text-sm",
|
|
32
|
-
children: [
|
|
33
|
-
/* @__PURE__ */ jsx("thead", {
|
|
34
|
-
className: "bg-card/50",
|
|
35
|
-
children: /* @__PURE__ */ jsxs("tr", {
|
|
36
|
-
className: "border-border/50 border-b",
|
|
37
|
-
children: [
|
|
38
|
-
/* @__PURE__ */ jsx("th", {
|
|
39
|
-
className: "px-4 py-3 font-semibold",
|
|
40
|
-
children: "Feature"
|
|
41
|
-
}),
|
|
42
|
-
/* @__PURE__ */ jsx("th", {
|
|
43
|
-
className: "px-4 py-3 font-semibold",
|
|
44
|
-
children: "Zapier"
|
|
45
|
-
}),
|
|
46
|
-
/* @__PURE__ */ jsx("th", {
|
|
47
|
-
className: "px-4 py-3 font-semibold",
|
|
48
|
-
children: "Make (Integromat)"
|
|
49
|
-
}),
|
|
50
|
-
/* @__PURE__ */ jsx("th", {
|
|
51
|
-
className: "px-4 py-3 font-semibold",
|
|
52
|
-
children: "n8n"
|
|
53
|
-
}),
|
|
54
|
-
/* @__PURE__ */ jsx("th", {
|
|
55
|
-
className: "px-4 py-3 font-semibold",
|
|
56
|
-
children: "Pipedream"
|
|
57
|
-
})
|
|
58
|
-
]
|
|
59
|
-
})
|
|
60
|
-
}),
|
|
61
|
-
/* @__PURE__ */ jsxs("tbody", {
|
|
62
|
-
className: "divide-y divide-border/50",
|
|
63
|
-
children: [
|
|
64
|
-
/* @__PURE__ */ jsxs("tr", {
|
|
65
|
-
children: [
|
|
66
|
-
/* @__PURE__ */ jsx("td", {
|
|
67
|
-
className: "px-4 py-3 align-top font-semibold",
|
|
68
|
-
children: "Workflow model"
|
|
69
|
-
}),
|
|
70
|
-
/* @__PURE__ */ jsx("td", {
|
|
71
|
-
className: "px-4 py-3 align-top",
|
|
72
|
-
children: "Zaps: trigger + one or more actions"
|
|
73
|
-
}),
|
|
74
|
-
/* @__PURE__ */ jsx("td", {
|
|
75
|
-
className: "px-4 py-3 align-top",
|
|
76
|
-
children: "Real-time visual orchestration for AI agents and automations"
|
|
77
|
-
}),
|
|
78
|
-
/* @__PURE__ */ jsx("td", {
|
|
79
|
-
className: "px-4 py-3 align-top",
|
|
80
|
-
children: "Node-based workflow builder with drag-and-drop and code; build multi-step AI agents"
|
|
81
|
-
}),
|
|
82
|
-
/* @__PURE__ */ jsx("td", {
|
|
83
|
-
className: "px-4 py-3 align-top",
|
|
84
|
-
children: "Workflows connect any API; Pipedream Connect SDK adds integrations quickly"
|
|
85
|
-
})
|
|
86
|
-
]
|
|
87
|
-
}),
|
|
88
|
-
/* @__PURE__ */ jsxs("tr", {
|
|
89
|
-
children: [
|
|
90
|
-
/* @__PURE__ */ jsx("td", {
|
|
91
|
-
className: "px-4 py-3 align-top font-semibold",
|
|
92
|
-
children: "Visual builder?"
|
|
93
|
-
}),
|
|
94
|
-
/* @__PURE__ */ jsx("td", {
|
|
95
|
-
className: "px-4 py-3 align-top",
|
|
96
|
-
children: "Yes (simple; web-based)."
|
|
97
|
-
}),
|
|
98
|
-
/* @__PURE__ */ jsx("td", {
|
|
99
|
-
className: "px-4 py-3 align-top",
|
|
100
|
-
children: "Yes; AI-assisted editor"
|
|
101
|
-
}),
|
|
102
|
-
/* @__PURE__ */ jsx("td", {
|
|
103
|
-
className: "px-4 py-3 align-top",
|
|
104
|
-
children: "Yes; visual canvas."
|
|
105
|
-
}),
|
|
106
|
-
/* @__PURE__ */ jsx("td", {
|
|
107
|
-
className: "px-4 py-3 align-top",
|
|
108
|
-
children: "Code-centric editor; no visual UI builder"
|
|
109
|
-
})
|
|
110
|
-
]
|
|
111
|
-
}),
|
|
112
|
-
/* @__PURE__ */ jsxs("tr", {
|
|
113
|
-
children: [
|
|
114
|
-
/* @__PURE__ */ jsx("td", {
|
|
115
|
-
className: "px-4 py-3 align-top font-semibold",
|
|
116
|
-
children: "Self-host?"
|
|
117
|
-
}),
|
|
118
|
-
/* @__PURE__ */ jsx("td", {
|
|
119
|
-
className: "px-4 py-3 align-top",
|
|
120
|
-
children: "No (cloud only)."
|
|
121
|
-
}),
|
|
122
|
-
/* @__PURE__ */ jsx("td", {
|
|
123
|
-
className: "px-4 py-3 align-top",
|
|
124
|
-
children: "Cloud only."
|
|
125
|
-
}),
|
|
126
|
-
/* @__PURE__ */ jsx("td", {
|
|
127
|
-
className: "px-4 py-3 align-top",
|
|
128
|
-
children: "Yes (Docker, self-host)"
|
|
129
|
-
}),
|
|
130
|
-
/* @__PURE__ */ jsx("td", {
|
|
131
|
-
className: "px-4 py-3 align-top",
|
|
132
|
-
children: "Cloud only (hosted)."
|
|
133
|
-
})
|
|
134
|
-
]
|
|
135
|
-
}),
|
|
136
|
-
/* @__PURE__ */ jsxs("tr", {
|
|
137
|
-
children: [
|
|
138
|
-
/* @__PURE__ */ jsx("td", {
|
|
139
|
-
className: "px-4 py-3 align-top font-semibold",
|
|
140
|
-
children: "Integrations & AI"
|
|
141
|
-
}),
|
|
142
|
-
/* @__PURE__ */ jsx("td", {
|
|
143
|
-
className: "px-4 py-3 align-top",
|
|
144
|
-
children: "Connects almost 8 000 apps; limited AI features."
|
|
145
|
-
}),
|
|
146
|
-
/* @__PURE__ */ jsx("td", {
|
|
147
|
-
className: "px-4 py-3 align-top",
|
|
148
|
-
children: "3 000+ pre-built apps; supports GenAI tools; GDPR/SOC2 and SSO"
|
|
149
|
-
}),
|
|
150
|
-
/* @__PURE__ */ jsx("td", {
|
|
151
|
-
className: "px-4 py-3 align-top",
|
|
152
|
-
children: "Integrates LLMs; allows JS or Python code and library imports; chatbots with Slack/Teams"
|
|
153
|
-
}),
|
|
154
|
-
/* @__PURE__ */ jsx("td", {
|
|
155
|
-
className: "px-4 py-3 align-top",
|
|
156
|
-
children: "MCP servers add 3 000+ APIs and 10 000+ tools to agents; AI agent builder prompts and deploys agents; SOC 2/ HIPAA/GDPR compliant"
|
|
157
|
-
})
|
|
158
|
-
]
|
|
159
|
-
}),
|
|
160
|
-
/* @__PURE__ */ jsxs("tr", {
|
|
161
|
-
children: [
|
|
162
|
-
/* @__PURE__ */ jsx("td", {
|
|
163
|
-
className: "px-4 py-3 align-top font-semibold",
|
|
164
|
-
children: "Policy & UI generation"
|
|
165
|
-
}),
|
|
166
|
-
/* @__PURE__ */ jsx("td", {
|
|
167
|
-
className: "px-4 py-3 align-top",
|
|
168
|
-
children: "No policy engine; does not generate user interfaces."
|
|
169
|
-
}),
|
|
170
|
-
/* @__PURE__ */ jsx("td", {
|
|
171
|
-
className: "px-4 py-3 align-top",
|
|
172
|
-
children: "No policy engine; does not generate UIs beyond a workflow dashboard."
|
|
173
|
-
}),
|
|
174
|
-
/* @__PURE__ */ jsx("td", {
|
|
175
|
-
className: "px-4 py-3 align-top",
|
|
176
|
-
children: "No policy engine; no UI builder"
|
|
177
|
-
}),
|
|
178
|
-
/* @__PURE__ */ jsx("td", {
|
|
179
|
-
className: "px-4 py-3 align-top",
|
|
180
|
-
children: "No policy engine; does not generate UI."
|
|
181
|
-
})
|
|
182
|
-
]
|
|
183
|
-
})
|
|
184
|
-
]
|
|
185
|
-
})
|
|
186
|
-
]
|
|
187
|
-
})
|
|
188
|
-
})
|
|
189
|
-
]
|
|
190
|
-
}),
|
|
191
|
-
/* @__PURE__ */ jsxs("div", {
|
|
192
|
-
className: "space-y-3",
|
|
193
|
-
children: [
|
|
194
|
-
/* @__PURE__ */ jsx("h2", {
|
|
195
|
-
className: "font-bold text-2xl",
|
|
196
|
-
children: "Why ContractSpec differs"
|
|
197
|
-
}),
|
|
198
|
-
/* @__PURE__ */ jsxs("ul", {
|
|
199
|
-
className: "space-y-2 text-muted-foreground",
|
|
200
|
-
children: [
|
|
201
|
-
/* @__PURE__ */ jsxs("li", {
|
|
202
|
-
children: [
|
|
203
|
-
/* @__PURE__ */ jsx("strong", {
|
|
204
|
-
children: "Full application generation"
|
|
205
|
-
}),
|
|
206
|
-
" \u2013 ContractSpec compiles specs into back-end, events and user interfaces for both web and mobile."
|
|
207
|
-
]
|
|
208
|
-
}),
|
|
209
|
-
/* @__PURE__ */ jsxs("li", {
|
|
210
|
-
children: [
|
|
211
|
-
/* @__PURE__ */ jsx("strong", {
|
|
212
|
-
children: "Policy enforcement"
|
|
213
|
-
}),
|
|
214
|
-
" \u2013 A built-in policy engine governs PII access and mutations across the UI."
|
|
215
|
-
]
|
|
216
|
-
}),
|
|
217
|
-
/* @__PURE__ */ jsxs("li", {
|
|
218
|
-
children: [
|
|
219
|
-
/* @__PURE__ */ jsx("strong", {
|
|
220
|
-
children: "Customisation via overlays"
|
|
221
|
-
}),
|
|
222
|
-
" \u2013 Non-technical users can safely personalise layouts while respecting policies."
|
|
223
|
-
]
|
|
224
|
-
}),
|
|
225
|
-
/* @__PURE__ */ jsxs("li", {
|
|
226
|
-
children: [
|
|
227
|
-
/* @__PURE__ */ jsx("strong", {
|
|
228
|
-
children: "Extensible capabilities"
|
|
229
|
-
}),
|
|
230
|
-
" \u2013 Connect to external APIs and services via capability providers while maintaining type safety."
|
|
231
|
-
]
|
|
232
|
-
})
|
|
233
|
-
]
|
|
234
|
-
}),
|
|
235
|
-
/* @__PURE__ */ jsx("p", {
|
|
236
|
-
className: "text-muted-foreground",
|
|
237
|
-
children: "Automation tools simplify integrations and tasks; ContractSpec goes further by generating a complete, policy-safe application around your data and processes."
|
|
238
|
-
})
|
|
239
|
-
]
|
|
240
|
-
})
|
|
241
|
-
]
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// src/components/docs/comparison/ComparisonEnterprisePlatformsPage.tsx
|
|
246
|
-
import Link from "@contractspec/lib.ui-link";
|
|
247
|
-
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
248
|
-
function ComparisonEnterprisePlatformsPage() {
|
|
249
|
-
return /* @__PURE__ */ jsxs2("div", {
|
|
250
|
-
className: "space-y-8",
|
|
251
|
-
children: [
|
|
252
|
-
/* @__PURE__ */ jsxs2("div", {
|
|
253
|
-
className: "space-y-4",
|
|
254
|
-
children: [
|
|
255
|
-
/* @__PURE__ */ jsx2("h1", {
|
|
256
|
-
className: "font-bold text-4xl",
|
|
257
|
-
children: "Enterprise orchestration platforms"
|
|
258
|
-
}),
|
|
259
|
-
/* @__PURE__ */ jsx2("p", {
|
|
260
|
-
className: "text-muted-foreground",
|
|
261
|
-
children: "Enterprise orchestration platforms manage mission-critical workloads and integrate deeply with ERP systems. They prioritise governance, reliability and compliance, but they do not provide spec-driven app generation or per-user customisation."
|
|
262
|
-
})
|
|
263
|
-
]
|
|
264
|
-
}),
|
|
265
|
-
/* @__PURE__ */ jsxs2("div", {
|
|
266
|
-
className: "space-y-4",
|
|
267
|
-
children: [
|
|
268
|
-
/* @__PURE__ */ jsx2("h2", {
|
|
269
|
-
className: "font-bold text-2xl",
|
|
270
|
-
children: "Redwood RunMyJobs"
|
|
271
|
-
}),
|
|
272
|
-
/* @__PURE__ */ jsxs2("p", {
|
|
273
|
-
className: "text-muted-foreground",
|
|
274
|
-
children: [
|
|
275
|
-
/* @__PURE__ */ jsx2(Link, {
|
|
276
|
-
href: "https://www.redwood.com/workload-automation/",
|
|
277
|
-
className: "underline decoration-dotted underline-offset-4 hover:text-foreground",
|
|
278
|
-
target: "_blank",
|
|
279
|
-
rel: "noreferrer",
|
|
280
|
-
children: "RunMyJobs by Redwood"
|
|
281
|
-
}),
|
|
282
|
-
" ",
|
|
283
|
-
"is a cloud-native service orchestration and automation platform. Key attributes include:"
|
|
284
|
-
]
|
|
285
|
-
}),
|
|
286
|
-
/* @__PURE__ */ jsxs2("ul", {
|
|
287
|
-
className: "space-y-2 text-muted-foreground",
|
|
288
|
-
children: [
|
|
289
|
-
/* @__PURE__ */ jsxs2("li", {
|
|
290
|
-
children: [
|
|
291
|
-
/* @__PURE__ */ jsx2("strong", {
|
|
292
|
-
children: "Self-service portal."
|
|
293
|
-
}),
|
|
294
|
-
" Business users can run and customise workloads while IT ensures governance and compliance"
|
|
295
|
-
]
|
|
296
|
-
}),
|
|
297
|
-
/* @__PURE__ */ jsxs2("li", {
|
|
298
|
-
children: [
|
|
299
|
-
/* @__PURE__ */ jsx2("strong", {
|
|
300
|
-
children: "Full-stack orchestration."
|
|
301
|
-
}),
|
|
302
|
-
" Integrates with both SAP and non-SAP systems; Redwood is recognised as a Leader in Gartner\u2019s Magic Quadrant for service orchestration"
|
|
303
|
-
]
|
|
304
|
-
}),
|
|
305
|
-
/* @__PURE__ */ jsxs2("li", {
|
|
306
|
-
children: [
|
|
307
|
-
/* @__PURE__ */ jsx2("strong", {
|
|
308
|
-
children: "Observability and AI insights."
|
|
309
|
-
}),
|
|
310
|
-
" Dashboards and AI-enhanced analytics identify bottlenecks and forecast issues"
|
|
311
|
-
]
|
|
312
|
-
}),
|
|
313
|
-
/* @__PURE__ */ jsxs2("li", {
|
|
314
|
-
children: [
|
|
315
|
-
/* @__PURE__ */ jsx2("strong", {
|
|
316
|
-
children: "Deep SAP integration."
|
|
317
|
-
}),
|
|
318
|
-
" Supports SAP\u2019s latest technologies and orchestrates mission-critical business processes"
|
|
319
|
-
]
|
|
320
|
-
}),
|
|
321
|
-
/* @__PURE__ */ jsxs2("li", {
|
|
322
|
-
children: [
|
|
323
|
-
/* @__PURE__ */ jsx2("strong", {
|
|
324
|
-
children: "Connectors & wizard."
|
|
325
|
-
}),
|
|
326
|
-
" Provides pre-built connectors and a wizard to link on-prem and cloud systems"
|
|
327
|
-
]
|
|
328
|
-
})
|
|
329
|
-
]
|
|
330
|
-
})
|
|
331
|
-
]
|
|
332
|
-
}),
|
|
333
|
-
/* @__PURE__ */ jsxs2("div", {
|
|
334
|
-
className: "space-y-4",
|
|
335
|
-
children: [
|
|
336
|
-
/* @__PURE__ */ jsx2("h3", {
|
|
337
|
-
className: "font-semibold text-xl",
|
|
338
|
-
children: "Comparison with ContractSpec"
|
|
339
|
-
}),
|
|
340
|
-
/* @__PURE__ */ jsx2("div", {
|
|
341
|
-
className: "overflow-x-auto rounded-lg border border-border/50",
|
|
342
|
-
children: /* @__PURE__ */ jsxs2("table", {
|
|
343
|
-
className: "w-full text-left text-sm",
|
|
344
|
-
children: [
|
|
345
|
-
/* @__PURE__ */ jsx2("thead", {
|
|
346
|
-
className: "bg-card/50",
|
|
347
|
-
children: /* @__PURE__ */ jsxs2("tr", {
|
|
348
|
-
className: "border-border/50 border-b",
|
|
349
|
-
children: [
|
|
350
|
-
/* @__PURE__ */ jsx2("th", {
|
|
351
|
-
className: "px-4 py-3 font-semibold",
|
|
352
|
-
children: "Aspect"
|
|
353
|
-
}),
|
|
354
|
-
/* @__PURE__ */ jsx2("th", {
|
|
355
|
-
className: "px-4 py-3 font-semibold",
|
|
356
|
-
children: "RunMyJobs"
|
|
357
|
-
}),
|
|
358
|
-
/* @__PURE__ */ jsx2("th", {
|
|
359
|
-
className: "px-4 py-3 font-semibold",
|
|
360
|
-
children: "ContractSpec"
|
|
361
|
-
})
|
|
362
|
-
]
|
|
363
|
-
})
|
|
364
|
-
}),
|
|
365
|
-
/* @__PURE__ */ jsxs2("tbody", {
|
|
366
|
-
className: "divide-y divide-border/50",
|
|
367
|
-
children: [
|
|
368
|
-
/* @__PURE__ */ jsxs2("tr", {
|
|
369
|
-
children: [
|
|
370
|
-
/* @__PURE__ */ jsx2("td", {
|
|
371
|
-
className: "px-4 py-3 align-top",
|
|
372
|
-
children: /* @__PURE__ */ jsx2("strong", {
|
|
373
|
-
children: "Target user"
|
|
374
|
-
})
|
|
375
|
-
}),
|
|
376
|
-
/* @__PURE__ */ jsx2("td", {
|
|
377
|
-
className: "px-4 py-3 align-top",
|
|
378
|
-
children: "Enterprise IT and operations teams automating SAP and mission-critical workflows."
|
|
379
|
-
}),
|
|
380
|
-
/* @__PURE__ */ jsx2("td", {
|
|
381
|
-
className: "px-4 py-3 align-top",
|
|
382
|
-
children: "Developers, product teams and SMBs wanting to generate policy-safe apps with customisable UIs."
|
|
383
|
-
})
|
|
384
|
-
]
|
|
385
|
-
}),
|
|
386
|
-
/* @__PURE__ */ jsxs2("tr", {
|
|
387
|
-
children: [
|
|
388
|
-
/* @__PURE__ */ jsx2("td", {
|
|
389
|
-
className: "px-4 py-3 align-top",
|
|
390
|
-
children: /* @__PURE__ */ jsx2("strong", {
|
|
391
|
-
children: "Workload focus"
|
|
392
|
-
})
|
|
393
|
-
}),
|
|
394
|
-
/* @__PURE__ */ jsx2("td", {
|
|
395
|
-
className: "px-4 py-3 align-top",
|
|
396
|
-
children: "Service orchestration and job scheduling across ERP/legacy systems"
|
|
397
|
-
}),
|
|
398
|
-
/* @__PURE__ */ jsx2("td", {
|
|
399
|
-
className: "px-4 py-3 align-top",
|
|
400
|
-
children: "End-to-end application generation with back-end, UI and policies."
|
|
401
|
-
})
|
|
402
|
-
]
|
|
403
|
-
}),
|
|
404
|
-
/* @__PURE__ */ jsxs2("tr", {
|
|
405
|
-
children: [
|
|
406
|
-
/* @__PURE__ */ jsx2("td", {
|
|
407
|
-
className: "px-4 py-3 align-top",
|
|
408
|
-
children: /* @__PURE__ */ jsx2("strong", {
|
|
409
|
-
children: "User interface"
|
|
410
|
-
})
|
|
411
|
-
}),
|
|
412
|
-
/* @__PURE__ */ jsx2("td", {
|
|
413
|
-
className: "px-4 py-3 align-top",
|
|
414
|
-
children: "Self-service portal to run/monitor jobs; no custom UI generation for new apps."
|
|
415
|
-
}),
|
|
416
|
-
/* @__PURE__ */ jsx2("td", {
|
|
417
|
-
className: "px-4 py-3 align-top",
|
|
418
|
-
children: "Generates React/React-Native UIs from specs; users can personalise layout via overlays."
|
|
419
|
-
})
|
|
420
|
-
]
|
|
421
|
-
}),
|
|
422
|
-
/* @__PURE__ */ jsxs2("tr", {
|
|
423
|
-
children: [
|
|
424
|
-
/* @__PURE__ */ jsx2("td", {
|
|
425
|
-
className: "px-4 py-3 align-top",
|
|
426
|
-
children: /* @__PURE__ */ jsx2("strong", {
|
|
427
|
-
children: "Open source"
|
|
428
|
-
})
|
|
429
|
-
}),
|
|
430
|
-
/* @__PURE__ */ jsx2("td", {
|
|
431
|
-
className: "px-4 py-3 align-top",
|
|
432
|
-
children: "Proprietary SaaS; enterprise agreements."
|
|
433
|
-
}),
|
|
434
|
-
/* @__PURE__ */ jsx2("td", {
|
|
435
|
-
className: "px-4 py-3 align-top",
|
|
436
|
-
children: "Core compiler is proprietary; SDK and certain modules may be open-source; offers hosted and on-prem options."
|
|
437
|
-
})
|
|
438
|
-
]
|
|
439
|
-
}),
|
|
440
|
-
/* @__PURE__ */ jsxs2("tr", {
|
|
441
|
-
children: [
|
|
442
|
-
/* @__PURE__ */ jsx2("td", {
|
|
443
|
-
className: "px-4 py-3 align-top",
|
|
444
|
-
children: /* @__PURE__ */ jsx2("strong", {
|
|
445
|
-
children: "Policy & personalisation"
|
|
446
|
-
})
|
|
447
|
-
}),
|
|
448
|
-
/* @__PURE__ */ jsx2("td", {
|
|
449
|
-
className: "px-4 py-3 align-top",
|
|
450
|
-
children: "IT controls governance; no per-user overlay concept."
|
|
451
|
-
}),
|
|
452
|
-
/* @__PURE__ */ jsx2("td", {
|
|
453
|
-
className: "px-4 py-3 align-top",
|
|
454
|
-
children: "Built-in policy engine and per-user overlays for safe personalisation."
|
|
455
|
-
})
|
|
456
|
-
]
|
|
457
|
-
})
|
|
458
|
-
]
|
|
459
|
-
})
|
|
460
|
-
]
|
|
461
|
-
})
|
|
462
|
-
}),
|
|
463
|
-
/* @__PURE__ */ jsx2("p", {
|
|
464
|
-
className: "text-muted-foreground",
|
|
465
|
-
children: "Redwood RunMyJobs is designed for orchestrating enterprise workloads and SAP processes. ContractSpec targets a different problem: generating complete applications from typed specs and letting end users adapt them safely."
|
|
466
|
-
})
|
|
467
|
-
]
|
|
468
|
-
})
|
|
469
|
-
]
|
|
470
|
-
});
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
// src/components/docs/comparison/ComparisonInternalToolBuildersPage.tsx
|
|
474
|
-
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
475
|
-
function ComparisonInternalToolBuildersPage() {
|
|
476
|
-
return /* @__PURE__ */ jsxs3("div", {
|
|
477
|
-
className: "space-y-8",
|
|
478
|
-
children: [
|
|
479
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
480
|
-
className: "space-y-4",
|
|
481
|
-
children: [
|
|
482
|
-
/* @__PURE__ */ jsx3("h1", {
|
|
483
|
-
className: "font-bold text-4xl",
|
|
484
|
-
children: "Internal-tool builders"
|
|
485
|
-
}),
|
|
486
|
-
/* @__PURE__ */ jsx3("p", {
|
|
487
|
-
className: "text-muted-foreground",
|
|
488
|
-
children: "Internal-tool builders let teams quickly assemble dashboards and admin panels. These platforms often provide drag-and-drop UIs and connectors to databases and APIs, but they rely on developers to write custom code for business logic and seldom enforce policies across surfaces."
|
|
489
|
-
})
|
|
490
|
-
]
|
|
491
|
-
}),
|
|
492
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
493
|
-
className: "space-y-4",
|
|
494
|
-
children: [
|
|
495
|
-
/* @__PURE__ */ jsx3("h2", {
|
|
496
|
-
className: "font-bold text-2xl",
|
|
497
|
-
children: "Feature comparison"
|
|
498
|
-
}),
|
|
499
|
-
/* @__PURE__ */ jsx3("div", {
|
|
500
|
-
className: "overflow-x-auto rounded-lg border border-border/50",
|
|
501
|
-
children: /* @__PURE__ */ jsxs3("table", {
|
|
502
|
-
className: "w-full text-left text-sm",
|
|
503
|
-
children: [
|
|
504
|
-
/* @__PURE__ */ jsx3("thead", {
|
|
505
|
-
className: "bg-card/50",
|
|
506
|
-
children: /* @__PURE__ */ jsxs3("tr", {
|
|
507
|
-
className: "border-border/50 border-b",
|
|
508
|
-
children: [
|
|
509
|
-
/* @__PURE__ */ jsx3("th", {
|
|
510
|
-
className: "px-4 py-3 font-semibold",
|
|
511
|
-
children: "Feature"
|
|
512
|
-
}),
|
|
513
|
-
/* @__PURE__ */ jsx3("th", {
|
|
514
|
-
className: "px-4 py-3 font-semibold",
|
|
515
|
-
children: "Retool"
|
|
516
|
-
}),
|
|
517
|
-
/* @__PURE__ */ jsx3("th", {
|
|
518
|
-
className: "px-4 py-3 font-semibold",
|
|
519
|
-
children: "Appsmith"
|
|
520
|
-
}),
|
|
521
|
-
/* @__PURE__ */ jsx3("th", {
|
|
522
|
-
className: "px-4 py-3 font-semibold",
|
|
523
|
-
children: "ToolJet"
|
|
524
|
-
}),
|
|
525
|
-
/* @__PURE__ */ jsx3("th", {
|
|
526
|
-
className: "px-4 py-3 font-semibold",
|
|
527
|
-
children: "Budibase"
|
|
528
|
-
})
|
|
529
|
-
]
|
|
530
|
-
})
|
|
531
|
-
}),
|
|
532
|
-
/* @__PURE__ */ jsxs3("tbody", {
|
|
533
|
-
className: "divide-y divide-border/50",
|
|
534
|
-
children: [
|
|
535
|
-
/* @__PURE__ */ jsxs3("tr", {
|
|
536
|
-
children: [
|
|
537
|
-
/* @__PURE__ */ jsx3("td", {
|
|
538
|
-
className: "px-4 py-3 align-top font-semibold",
|
|
539
|
-
children: "UI builder"
|
|
540
|
-
}),
|
|
541
|
-
/* @__PURE__ */ jsx3("td", {
|
|
542
|
-
className: "px-4 py-3 align-top",
|
|
543
|
-
children: "Drag-and-drop canvas; shape UI components easily"
|
|
544
|
-
}),
|
|
545
|
-
/* @__PURE__ */ jsx3("td", {
|
|
546
|
-
className: "px-4 py-3 align-top",
|
|
547
|
-
children: "Visual builder with drag-and-drop widgets"
|
|
548
|
-
}),
|
|
549
|
-
/* @__PURE__ */ jsx3("td", {
|
|
550
|
-
className: "px-4 py-3 align-top",
|
|
551
|
-
children: "Drag-and-drop UI widgets (tables, charts, forms)"
|
|
552
|
-
}),
|
|
553
|
-
/* @__PURE__ */ jsx3("td", {
|
|
554
|
-
className: "px-4 py-3 align-top",
|
|
555
|
-
children: "Pre-built components and templates for mobile/desktop"
|
|
556
|
-
})
|
|
557
|
-
]
|
|
558
|
-
}),
|
|
559
|
-
/* @__PURE__ */ jsxs3("tr", {
|
|
560
|
-
children: [
|
|
561
|
-
/* @__PURE__ */ jsx3("td", {
|
|
562
|
-
className: "px-4 py-3 align-top font-semibold",
|
|
563
|
-
children: "Custom code & logic"
|
|
564
|
-
}),
|
|
565
|
-
/* @__PURE__ */ jsx3("td", {
|
|
566
|
-
className: "px-4 py-3 align-top",
|
|
567
|
-
children: "Full code insertion anywhere via IDE"
|
|
568
|
-
}),
|
|
569
|
-
/* @__PURE__ */ jsx3("td", {
|
|
570
|
-
className: "px-4 py-3 align-top",
|
|
571
|
-
children: "Logic via JavaScript or natural-language prompts in a central IDE"
|
|
572
|
-
}),
|
|
573
|
-
/* @__PURE__ */ jsx3("td", {
|
|
574
|
-
className: "px-4 py-3 align-top",
|
|
575
|
-
children: "Supports business logic in JavaScript or Python queries"
|
|
576
|
-
}),
|
|
577
|
-
/* @__PURE__ */ jsx3("td", {
|
|
578
|
-
className: "px-4 py-3 align-top",
|
|
579
|
-
children: "Custom logic via JavaScript; plugins and external embeds"
|
|
580
|
-
})
|
|
581
|
-
]
|
|
582
|
-
}),
|
|
583
|
-
/* @__PURE__ */ jsxs3("tr", {
|
|
584
|
-
children: [
|
|
585
|
-
/* @__PURE__ */ jsx3("td", {
|
|
586
|
-
className: "px-4 py-3 align-top font-semibold",
|
|
587
|
-
children: "Data connectors"
|
|
588
|
-
}),
|
|
589
|
-
/* @__PURE__ */ jsx3("td", {
|
|
590
|
-
className: "px-4 py-3 align-top",
|
|
591
|
-
children: "Wide support for databases and APIs (PostgreSQL, MongoDB, GraphQL, etc.)."
|
|
592
|
-
}),
|
|
593
|
-
/* @__PURE__ */ jsx3("td", {
|
|
594
|
-
className: "px-4 py-3 align-top",
|
|
595
|
-
children: "Connects to LLMs and databases"
|
|
596
|
-
}),
|
|
597
|
-
/* @__PURE__ */ jsx3("td", {
|
|
598
|
-
className: "px-4 py-3 align-top",
|
|
599
|
-
children: "Built-in database; connects to PostgreSQL, MongoDB, APIs, GraphQL, SaaS"
|
|
600
|
-
}),
|
|
601
|
-
/* @__PURE__ */ jsx3("td", {
|
|
602
|
-
className: "px-4 py-3 align-top",
|
|
603
|
-
children: "Connects to external databases, REST, CSV or built-in DB"
|
|
604
|
-
})
|
|
605
|
-
]
|
|
606
|
-
}),
|
|
607
|
-
/* @__PURE__ */ jsxs3("tr", {
|
|
608
|
-
children: [
|
|
609
|
-
/* @__PURE__ */ jsx3("td", {
|
|
610
|
-
className: "px-4 py-3 align-top font-semibold",
|
|
611
|
-
children: "Open source & self-host"
|
|
612
|
-
}),
|
|
613
|
-
/* @__PURE__ */ jsx3("td", {
|
|
614
|
-
className: "px-4 py-3 align-top",
|
|
615
|
-
children: "Proprietary; cloud or on-prem subscription."
|
|
616
|
-
}),
|
|
617
|
-
/* @__PURE__ */ jsx3("td", {
|
|
618
|
-
className: "px-4 py-3 align-top",
|
|
619
|
-
children: "Open source (Apache-2.0); self-host or cloud."
|
|
620
|
-
}),
|
|
621
|
-
/* @__PURE__ */ jsx3("td", {
|
|
622
|
-
className: "px-4 py-3 align-top",
|
|
623
|
-
children: "Open source; self-host via Docker or cloud."
|
|
624
|
-
}),
|
|
625
|
-
/* @__PURE__ */ jsx3("td", {
|
|
626
|
-
className: "px-4 py-3 align-top",
|
|
627
|
-
children: "Open source; self-host via Docker/Kubernetes"
|
|
628
|
-
})
|
|
629
|
-
]
|
|
630
|
-
}),
|
|
631
|
-
/* @__PURE__ */ jsxs3("tr", {
|
|
632
|
-
children: [
|
|
633
|
-
/* @__PURE__ */ jsx3("td", {
|
|
634
|
-
className: "px-4 py-3 align-top font-semibold",
|
|
635
|
-
children: "Policy & personalisation"
|
|
636
|
-
}),
|
|
637
|
-
/* @__PURE__ */ jsx3("td", {
|
|
638
|
-
className: "px-4 py-3 align-top",
|
|
639
|
-
children: "No built-in policy engine; personalisation limited to user roles."
|
|
640
|
-
}),
|
|
641
|
-
/* @__PURE__ */ jsx3("td", {
|
|
642
|
-
className: "px-4 py-3 align-top",
|
|
643
|
-
children: "No typed policy engine; customisation depends on user roles."
|
|
644
|
-
}),
|
|
645
|
-
/* @__PURE__ */ jsx3("td", {
|
|
646
|
-
className: "px-4 py-3 align-top",
|
|
647
|
-
children: "No policy engine; personalisation via user roles."
|
|
648
|
-
}),
|
|
649
|
-
/* @__PURE__ */ jsx3("td", {
|
|
650
|
-
className: "px-4 py-3 align-top",
|
|
651
|
-
children: "No policy engine; personalisation via RBAC & SSO"
|
|
652
|
-
})
|
|
653
|
-
]
|
|
654
|
-
})
|
|
655
|
-
]
|
|
656
|
-
})
|
|
657
|
-
]
|
|
658
|
-
})
|
|
659
|
-
})
|
|
660
|
-
]
|
|
661
|
-
}),
|
|
662
|
-
/* @__PURE__ */ jsxs3("div", {
|
|
663
|
-
className: "space-y-3",
|
|
664
|
-
children: [
|
|
665
|
-
/* @__PURE__ */ jsx3("h2", {
|
|
666
|
-
className: "font-bold text-2xl",
|
|
667
|
-
children: "ContractSpec\u2019s differences"
|
|
668
|
-
}),
|
|
669
|
-
/* @__PURE__ */ jsxs3("ul", {
|
|
670
|
-
className: "space-y-2 text-muted-foreground",
|
|
671
|
-
children: [
|
|
672
|
-
/* @__PURE__ */ jsxs3("li", {
|
|
673
|
-
children: [
|
|
674
|
-
/* @__PURE__ */ jsx3("strong", {
|
|
675
|
-
children: "Typed specifications"
|
|
676
|
-
}),
|
|
677
|
-
" produce both the API and UI. You define capabilities, data views and workflows, and the compiler generates code, forms and screens\u2014no manual widget wiring."
|
|
678
|
-
]
|
|
679
|
-
}),
|
|
680
|
-
/* @__PURE__ */ jsxs3("li", {
|
|
681
|
-
children: [
|
|
682
|
-
/* @__PURE__ */ jsx3("strong", {
|
|
683
|
-
children: "Policy enforcement"
|
|
684
|
-
}),
|
|
685
|
-
" at run time ensures PII and ABAC rules across the entire app."
|
|
686
|
-
]
|
|
687
|
-
}),
|
|
688
|
-
/* @__PURE__ */ jsxs3("li", {
|
|
689
|
-
children: [
|
|
690
|
-
/* @__PURE__ */ jsx3("strong", {
|
|
691
|
-
children: "Overlay personalisation"
|
|
692
|
-
}),
|
|
693
|
-
" allows tenants and users to change layouts safely without code."
|
|
694
|
-
]
|
|
695
|
-
}),
|
|
696
|
-
/* @__PURE__ */ jsxs3("li", {
|
|
697
|
-
children: [
|
|
698
|
-
/* @__PURE__ */ jsx3("strong", {
|
|
699
|
-
children: "Unified mobile/web runtime"
|
|
700
|
-
}),
|
|
701
|
-
" means you don\u2019t need separate builders for React Native vs web."
|
|
702
|
-
]
|
|
703
|
-
})
|
|
704
|
-
]
|
|
705
|
-
}),
|
|
706
|
-
/* @__PURE__ */ jsx3("p", {
|
|
707
|
-
className: "text-muted-foreground",
|
|
708
|
-
children: "Internal-tool builders are useful for quick dashboards. ContractSpec extends this by generating the whole stack from specs and enforcing policies throughout."
|
|
709
|
-
})
|
|
710
|
-
]
|
|
711
|
-
})
|
|
712
|
-
]
|
|
713
|
-
});
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
// src/components/docs/comparison/ComparisonOverviewPage.tsx
|
|
717
|
-
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
718
|
-
function ComparisonOverviewPage() {
|
|
719
|
-
return /* @__PURE__ */ jsxs4("div", {
|
|
720
|
-
className: "space-y-8",
|
|
721
|
-
children: [
|
|
722
|
-
/* @__PURE__ */ jsxs4("div", {
|
|
723
|
-
className: "space-y-4",
|
|
724
|
-
children: [
|
|
725
|
-
/* @__PURE__ */ jsx4("h1", {
|
|
726
|
-
className: "font-bold text-4xl",
|
|
727
|
-
children: "Comparison overview"
|
|
728
|
-
}),
|
|
729
|
-
/* @__PURE__ */ jsx4("p", {
|
|
730
|
-
className: "text-muted-foreground",
|
|
731
|
-
children: "ContractSpec sits at the intersection of several tool categories. To appreciate its unique offering\u2014typed specifications for back-end, front-end, workflows and policies with a unified web/mobile runtime\u2014this section compares it to related products."
|
|
732
|
-
}),
|
|
733
|
-
/* @__PURE__ */ jsxs4("p", {
|
|
734
|
-
className: "text-muted-foreground",
|
|
735
|
-
children: [
|
|
736
|
-
"ContractSpec uses ",
|
|
737
|
-
/* @__PURE__ */ jsx4("strong", {
|
|
738
|
-
children: "runtime adapters"
|
|
739
|
-
}),
|
|
740
|
-
" to serve typed",
|
|
741
|
-
" ",
|
|
742
|
-
/* @__PURE__ */ jsx4("strong", {
|
|
743
|
-
children: "Operations"
|
|
744
|
-
}),
|
|
745
|
-
" (Commands/Queries),",
|
|
746
|
-
" ",
|
|
747
|
-
/* @__PURE__ */ jsx4("strong", {
|
|
748
|
-
children: "DataViews"
|
|
749
|
-
}),
|
|
750
|
-
", ",
|
|
751
|
-
/* @__PURE__ */ jsx4("strong", {
|
|
752
|
-
children: "Workflows"
|
|
753
|
-
}),
|
|
754
|
-
", and",
|
|
755
|
-
" ",
|
|
756
|
-
/* @__PURE__ */ jsx4("strong", {
|
|
757
|
-
children: "Policies"
|
|
758
|
-
}),
|
|
759
|
-
" as REST/GraphQL/MCP endpoints. A",
|
|
760
|
-
" ",
|
|
761
|
-
/* @__PURE__ */ jsx4("strong", {
|
|
762
|
-
children: "policy decision point"
|
|
763
|
-
}),
|
|
764
|
-
" governs every operation, and",
|
|
765
|
-
" ",
|
|
766
|
-
/* @__PURE__ */ jsx4("strong", {
|
|
767
|
-
children: "OverlaySpecs"
|
|
768
|
-
}),
|
|
769
|
-
" allow non-technical users to personalise screens safely. Few competitors offer this combination of runtime type safety, policy enforcement, and end-user customisation."
|
|
770
|
-
]
|
|
771
|
-
})
|
|
772
|
-
]
|
|
773
|
-
}),
|
|
774
|
-
/* @__PURE__ */ jsxs4("div", {
|
|
775
|
-
className: "space-y-4",
|
|
776
|
-
children: [
|
|
777
|
-
/* @__PURE__ */ jsx4("h2", {
|
|
778
|
-
className: "font-bold text-2xl",
|
|
779
|
-
children: "Tool categories"
|
|
780
|
-
}),
|
|
781
|
-
/* @__PURE__ */ jsx4("div", {
|
|
782
|
-
className: "overflow-x-auto rounded-lg border border-border/50",
|
|
783
|
-
children: /* @__PURE__ */ jsxs4("table", {
|
|
784
|
-
className: "w-full text-left text-sm",
|
|
785
|
-
children: [
|
|
786
|
-
/* @__PURE__ */ jsx4("thead", {
|
|
787
|
-
className: "bg-card/50",
|
|
788
|
-
children: /* @__PURE__ */ jsxs4("tr", {
|
|
789
|
-
className: "border-border/50 border-b",
|
|
790
|
-
children: [
|
|
791
|
-
/* @__PURE__ */ jsx4("th", {
|
|
792
|
-
className: "px-4 py-3 font-semibold",
|
|
793
|
-
children: "Category"
|
|
794
|
-
}),
|
|
795
|
-
/* @__PURE__ */ jsx4("th", {
|
|
796
|
-
className: "px-4 py-3 font-semibold",
|
|
797
|
-
children: "Examples"
|
|
798
|
-
}),
|
|
799
|
-
/* @__PURE__ */ jsx4("th", {
|
|
800
|
-
className: "px-4 py-3 font-semibold",
|
|
801
|
-
children: "What they do"
|
|
802
|
-
}),
|
|
803
|
-
/* @__PURE__ */ jsx4("th", {
|
|
804
|
-
className: "px-4 py-3 font-semibold",
|
|
805
|
-
children: "Limitations"
|
|
806
|
-
})
|
|
807
|
-
]
|
|
808
|
-
})
|
|
809
|
-
}),
|
|
810
|
-
/* @__PURE__ */ jsxs4("tbody", {
|
|
811
|
-
className: "divide-y divide-border/50",
|
|
812
|
-
children: [
|
|
813
|
-
/* @__PURE__ */ jsxs4("tr", {
|
|
814
|
-
children: [
|
|
815
|
-
/* @__PURE__ */ jsx4("td", {
|
|
816
|
-
className: "px-4 py-3 align-top",
|
|
817
|
-
children: /* @__PURE__ */ jsx4("strong", {
|
|
818
|
-
children: "Workflow engines"
|
|
819
|
-
})
|
|
820
|
-
}),
|
|
821
|
-
/* @__PURE__ */ jsx4("td", {
|
|
822
|
-
className: "px-4 py-3 align-top",
|
|
823
|
-
children: "Prefect, Kestra, Temporal, Airflow, Dagster, Hatchet, Windmill"
|
|
824
|
-
}),
|
|
825
|
-
/* @__PURE__ */ jsx4("td", {
|
|
826
|
-
className: "px-4 py-3 align-top",
|
|
827
|
-
children: "Orchestrate code or data pipelines; handle retries, scheduling and observability"
|
|
828
|
-
}),
|
|
829
|
-
/* @__PURE__ */ jsx4("td", {
|
|
830
|
-
className: "px-4 py-3 align-top",
|
|
831
|
-
children: "Require writing code; no automatic UI generation or policy enforcement."
|
|
832
|
-
})
|
|
833
|
-
]
|
|
834
|
-
}),
|
|
835
|
-
/* @__PURE__ */ jsxs4("tr", {
|
|
836
|
-
children: [
|
|
837
|
-
/* @__PURE__ */ jsx4("td", {
|
|
838
|
-
className: "px-4 py-3 align-top",
|
|
839
|
-
children: /* @__PURE__ */ jsx4("strong", {
|
|
840
|
-
children: "Internal-tool builders"
|
|
841
|
-
})
|
|
842
|
-
}),
|
|
843
|
-
/* @__PURE__ */ jsx4("td", {
|
|
844
|
-
className: "px-4 py-3 align-top",
|
|
845
|
-
children: "Retool, Appsmith, ToolJet, Budibase"
|
|
846
|
-
}),
|
|
847
|
-
/* @__PURE__ */ jsx4("td", {
|
|
848
|
-
className: "px-4 py-3 align-top",
|
|
849
|
-
children: "Drag-and-drop dashboards and admin panels; connect to databases/APIs"
|
|
850
|
-
}),
|
|
851
|
-
/* @__PURE__ */ jsx4("td", {
|
|
852
|
-
className: "px-4 py-3 align-top",
|
|
853
|
-
children: "No typed back-end spec; limited enforcement of policies; custom code glues logic."
|
|
854
|
-
})
|
|
855
|
-
]
|
|
856
|
-
}),
|
|
857
|
-
/* @__PURE__ */ jsxs4("tr", {
|
|
858
|
-
children: [
|
|
859
|
-
/* @__PURE__ */ jsx4("td", {
|
|
860
|
-
className: "px-4 py-3 align-top",
|
|
861
|
-
children: /* @__PURE__ */ jsx4("strong", {
|
|
862
|
-
children: "Automation platforms"
|
|
863
|
-
})
|
|
864
|
-
}),
|
|
865
|
-
/* @__PURE__ */ jsx4("td", {
|
|
866
|
-
className: "px-4 py-3 align-top",
|
|
867
|
-
children: "Zapier, Make, n8n, Pipedream"
|
|
868
|
-
}),
|
|
869
|
-
/* @__PURE__ */ jsx4("td", {
|
|
870
|
-
className: "px-4 py-3 align-top",
|
|
871
|
-
children: "Connect apps via triggers and actions; visual or low-code interfaces"
|
|
872
|
-
}),
|
|
873
|
-
/* @__PURE__ */ jsx4("td", {
|
|
874
|
-
className: "px-4 py-3 align-top",
|
|
875
|
-
children: "Automate tasks but do not generate full apps or enforce per-field policies."
|
|
876
|
-
})
|
|
877
|
-
]
|
|
878
|
-
}),
|
|
879
|
-
/* @__PURE__ */ jsxs4("tr", {
|
|
880
|
-
children: [
|
|
881
|
-
/* @__PURE__ */ jsx4("td", {
|
|
882
|
-
className: "px-4 py-3 align-top",
|
|
883
|
-
children: /* @__PURE__ */ jsx4("strong", {
|
|
884
|
-
children: "Enterprise orchestrators"
|
|
885
|
-
})
|
|
886
|
-
}),
|
|
887
|
-
/* @__PURE__ */ jsx4("td", {
|
|
888
|
-
className: "px-4 py-3 align-top",
|
|
889
|
-
children: "Redwood RunMyJobs"
|
|
890
|
-
}),
|
|
891
|
-
/* @__PURE__ */ jsx4("td", {
|
|
892
|
-
className: "px-4 py-3 align-top",
|
|
893
|
-
children: "Automate mission-critical workloads with self-service portals and SAP integrations"
|
|
894
|
-
}),
|
|
895
|
-
/* @__PURE__ */ jsx4("td", {
|
|
896
|
-
className: "px-4 py-3 align-top",
|
|
897
|
-
children: "Focus on IT workloads; not built for custom app creation or per-user customisation."
|
|
898
|
-
})
|
|
899
|
-
]
|
|
900
|
-
})
|
|
901
|
-
]
|
|
902
|
-
})
|
|
903
|
-
]
|
|
904
|
-
})
|
|
905
|
-
}),
|
|
906
|
-
/* @__PURE__ */ jsx4("p", {
|
|
907
|
-
className: "text-muted-foreground",
|
|
908
|
-
children: "Use the pages below to explore each group in detail and see how ContractSpec compares."
|
|
909
|
-
})
|
|
910
|
-
]
|
|
911
|
-
})
|
|
912
|
-
]
|
|
913
|
-
});
|
|
914
|
-
}
|
|
915
|
-
|
|
916
|
-
// src/components/docs/comparison/ComparisonWindmillPage.tsx
|
|
917
|
-
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
918
|
-
function ComparisonWindmillPage() {
|
|
919
|
-
return /* @__PURE__ */ jsxs5("div", {
|
|
920
|
-
className: "space-y-8",
|
|
921
|
-
children: [
|
|
922
|
-
/* @__PURE__ */ jsxs5("div", {
|
|
923
|
-
className: "space-y-4",
|
|
924
|
-
children: [
|
|
925
|
-
/* @__PURE__ */ jsx5("h1", {
|
|
926
|
-
className: "font-bold text-4xl",
|
|
927
|
-
children: "Windmill"
|
|
928
|
-
}),
|
|
929
|
-
/* @__PURE__ */ jsxs5("p", {
|
|
930
|
-
className: "text-muted-foreground",
|
|
931
|
-
children: [
|
|
932
|
-
"Windmill is an open-source platform that turns",
|
|
933
|
-
" ",
|
|
934
|
-
/* @__PURE__ */ jsx5("strong", {
|
|
935
|
-
children: "scripts"
|
|
936
|
-
}),
|
|
937
|
-
" into endpoints, workflows and UIs. It seeks to remove boilerplate by generating interfaces and workflows around existing code"
|
|
938
|
-
]
|
|
939
|
-
})
|
|
940
|
-
]
|
|
941
|
-
}),
|
|
942
|
-
/* @__PURE__ */ jsxs5("div", {
|
|
943
|
-
className: "space-y-4",
|
|
944
|
-
children: [
|
|
945
|
-
/* @__PURE__ */ jsx5("h2", {
|
|
946
|
-
className: "font-bold text-2xl",
|
|
947
|
-
children: "Platform features"
|
|
948
|
-
}),
|
|
949
|
-
/* @__PURE__ */ jsxs5("ul", {
|
|
950
|
-
className: "space-y-3 text-muted-foreground",
|
|
951
|
-
children: [
|
|
952
|
-
/* @__PURE__ */ jsxs5("li", {
|
|
953
|
-
children: [
|
|
954
|
-
/* @__PURE__ */ jsx5("strong", {
|
|
955
|
-
children: "Script-driven model."
|
|
956
|
-
}),
|
|
957
|
-
" Write scripts in TypeScript, Python, Go, PHP, Bash, C#, SQL or Rust; Windmill infers dependencies, creates lockfiles and JSON schemas, then serves minimal UIs automatically"
|
|
958
|
-
]
|
|
959
|
-
}),
|
|
960
|
-
/* @__PURE__ */ jsxs5("li", {
|
|
961
|
-
children: [
|
|
962
|
-
/* @__PURE__ */ jsx5("strong", {
|
|
963
|
-
children: "Visual flow editor."
|
|
964
|
-
}),
|
|
965
|
-
" Compose scripts into workflows with retries, error handling, loops, branching, suspending flows and approval steps"
|
|
966
|
-
]
|
|
967
|
-
}),
|
|
968
|
-
/* @__PURE__ */ jsxs5("li", {
|
|
969
|
-
children: [
|
|
970
|
-
/* @__PURE__ */ jsx5("strong", {
|
|
971
|
-
children: "Low-code UI builder."
|
|
972
|
-
}),
|
|
973
|
-
" Build dashboards and admin panels using inline scripts and trigger flows from the UI"
|
|
974
|
-
]
|
|
975
|
-
}),
|
|
976
|
-
/* @__PURE__ */ jsxs5("li", {
|
|
977
|
-
children: [
|
|
978
|
-
/* @__PURE__ */ jsx5("strong", {
|
|
979
|
-
children: "Enterprise readiness."
|
|
980
|
-
}),
|
|
981
|
-
" Features include RBAC permissions, secret management, OAuth handling, CLI/git sync, scheduling and webhooks"
|
|
982
|
-
]
|
|
983
|
-
}),
|
|
984
|
-
/* @__PURE__ */ jsxs5("li", {
|
|
985
|
-
children: [
|
|
986
|
-
/* @__PURE__ */ jsx5("strong", {
|
|
987
|
-
children: "Use cases."
|
|
988
|
-
}),
|
|
989
|
-
" Deploy scripts as webhooks or cron jobs; create \u201Capplicative workflows\u201D combining external APIs; build ETLs and interactive dashboards"
|
|
990
|
-
]
|
|
991
|
-
}),
|
|
992
|
-
/* @__PURE__ */ jsxs5("li", {
|
|
993
|
-
children: [
|
|
994
|
-
/* @__PURE__ */ jsx5("strong", {
|
|
995
|
-
children: "Open source & self-hosting."
|
|
996
|
-
}),
|
|
997
|
-
" Windmill emphasises an open-source codebase and self-hosting options"
|
|
998
|
-
]
|
|
999
|
-
})
|
|
1000
|
-
]
|
|
1001
|
-
})
|
|
1002
|
-
]
|
|
1003
|
-
}),
|
|
1004
|
-
/* @__PURE__ */ jsxs5("div", {
|
|
1005
|
-
className: "space-y-4",
|
|
1006
|
-
children: [
|
|
1007
|
-
/* @__PURE__ */ jsx5("h2", {
|
|
1008
|
-
className: "font-bold text-2xl",
|
|
1009
|
-
children: "Comparison with ContractSpec"
|
|
1010
|
-
}),
|
|
1011
|
-
/* @__PURE__ */ jsx5("div", {
|
|
1012
|
-
className: "overflow-x-auto rounded-lg border border-border/50",
|
|
1013
|
-
children: /* @__PURE__ */ jsxs5("table", {
|
|
1014
|
-
className: "w-full text-left text-sm",
|
|
1015
|
-
children: [
|
|
1016
|
-
/* @__PURE__ */ jsx5("thead", {
|
|
1017
|
-
className: "bg-card/50",
|
|
1018
|
-
children: /* @__PURE__ */ jsxs5("tr", {
|
|
1019
|
-
className: "border-border/50 border-b",
|
|
1020
|
-
children: [
|
|
1021
|
-
/* @__PURE__ */ jsx5("th", {
|
|
1022
|
-
className: "px-4 py-3 font-semibold",
|
|
1023
|
-
children: "Feature"
|
|
1024
|
-
}),
|
|
1025
|
-
/* @__PURE__ */ jsx5("th", {
|
|
1026
|
-
className: "px-4 py-3 font-semibold",
|
|
1027
|
-
children: "Windmill"
|
|
1028
|
-
}),
|
|
1029
|
-
/* @__PURE__ */ jsx5("th", {
|
|
1030
|
-
className: "px-4 py-3 font-semibold",
|
|
1031
|
-
children: "ContractSpec"
|
|
1032
|
-
})
|
|
1033
|
-
]
|
|
1034
|
-
})
|
|
1035
|
-
}),
|
|
1036
|
-
/* @__PURE__ */ jsxs5("tbody", {
|
|
1037
|
-
className: "divide-y divide-border/50",
|
|
1038
|
-
children: [
|
|
1039
|
-
/* @__PURE__ */ jsxs5("tr", {
|
|
1040
|
-
children: [
|
|
1041
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1042
|
-
className: "px-4 py-3 align-top",
|
|
1043
|
-
children: /* @__PURE__ */ jsx5("strong", {
|
|
1044
|
-
children: "Entry model"
|
|
1045
|
-
})
|
|
1046
|
-
}),
|
|
1047
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1048
|
-
className: "px-4 py-3 align-top",
|
|
1049
|
-
children: "Write scripts; platform auto-generates UI and workflows"
|
|
1050
|
-
}),
|
|
1051
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1052
|
-
className: "px-4 py-3 align-top",
|
|
1053
|
-
children: "Define typed specs (Capabilities, DataViews, Workflows, Policies); compiler outputs back-end, front-end and forms."
|
|
1054
|
-
})
|
|
1055
|
-
]
|
|
1056
|
-
}),
|
|
1057
|
-
/* @__PURE__ */ jsxs5("tr", {
|
|
1058
|
-
children: [
|
|
1059
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1060
|
-
className: "px-4 py-3 align-top",
|
|
1061
|
-
children: /* @__PURE__ */ jsx5("strong", {
|
|
1062
|
-
children: "Language support"
|
|
1063
|
-
})
|
|
1064
|
-
}),
|
|
1065
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1066
|
-
className: "px-4 py-3 align-top",
|
|
1067
|
-
children: "20+ languages via embedded runtimes"
|
|
1068
|
-
}),
|
|
1069
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1070
|
-
className: "px-4 py-3 align-top",
|
|
1071
|
-
children: "Uses TypeScript/JavaScript for providers; supports other back-ends through capability providers."
|
|
1072
|
-
})
|
|
1073
|
-
]
|
|
1074
|
-
}),
|
|
1075
|
-
/* @__PURE__ */ jsxs5("tr", {
|
|
1076
|
-
children: [
|
|
1077
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1078
|
-
className: "px-4 py-3 align-top",
|
|
1079
|
-
children: /* @__PURE__ */ jsx5("strong", {
|
|
1080
|
-
children: "UI generation"
|
|
1081
|
-
})
|
|
1082
|
-
}),
|
|
1083
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1084
|
-
className: "px-4 py-3 align-top",
|
|
1085
|
-
children: "Minimal UI forms from script parameters; low-code app builder"
|
|
1086
|
-
}),
|
|
1087
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1088
|
-
className: "px-4 py-3 align-top",
|
|
1089
|
-
children: "Generates full web and mobile UIs from specs; user layouts can be customised via signed overlays."
|
|
1090
|
-
})
|
|
1091
|
-
]
|
|
1092
|
-
}),
|
|
1093
|
-
/* @__PURE__ */ jsxs5("tr", {
|
|
1094
|
-
children: [
|
|
1095
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1096
|
-
className: "px-4 py-3 align-top",
|
|
1097
|
-
children: /* @__PURE__ */ jsx5("strong", {
|
|
1098
|
-
children: "Policy & personalization"
|
|
1099
|
-
})
|
|
1100
|
-
}),
|
|
1101
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1102
|
-
className: "px-4 py-3 align-top",
|
|
1103
|
-
children: "RBAC and secret management; no per-user overlay concept"
|
|
1104
|
-
}),
|
|
1105
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1106
|
-
className: "px-4 py-3 align-top",
|
|
1107
|
-
children: "Built-in policy engine enforcing ABAC/PII on every render/mutate; overlays allow safe per-user customisation."
|
|
1108
|
-
})
|
|
1109
|
-
]
|
|
1110
|
-
}),
|
|
1111
|
-
/* @__PURE__ */ jsxs5("tr", {
|
|
1112
|
-
children: [
|
|
1113
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1114
|
-
className: "px-4 py-3 align-top",
|
|
1115
|
-
children: /* @__PURE__ */ jsx5("strong", {
|
|
1116
|
-
children: "Open source"
|
|
1117
|
-
})
|
|
1118
|
-
}),
|
|
1119
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1120
|
-
className: "px-4 py-3 align-top",
|
|
1121
|
-
children: "Fully open source and self-hostable"
|
|
1122
|
-
}),
|
|
1123
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1124
|
-
className: "px-4 py-3 align-top",
|
|
1125
|
-
children: "Closed-source core (SDK is open); offers hosted and on-prem modes."
|
|
1126
|
-
})
|
|
1127
|
-
]
|
|
1128
|
-
}),
|
|
1129
|
-
/* @__PURE__ */ jsxs5("tr", {
|
|
1130
|
-
children: [
|
|
1131
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1132
|
-
className: "px-4 py-3 align-top",
|
|
1133
|
-
children: /* @__PURE__ */ jsx5("strong", {
|
|
1134
|
-
children: "Ideal for"
|
|
1135
|
-
})
|
|
1136
|
-
}),
|
|
1137
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1138
|
-
className: "px-4 py-3 align-top",
|
|
1139
|
-
children: "Teams wanting to expose scripts as APIs, workflows or dashboards without heavy infrastructure."
|
|
1140
|
-
}),
|
|
1141
|
-
/* @__PURE__ */ jsx5("td", {
|
|
1142
|
-
className: "px-4 py-3 align-top",
|
|
1143
|
-
children: "Teams needing a spec-driven platform that generates code and UI, enforces policies and lets non-technical users tailor the experience."
|
|
1144
|
-
})
|
|
1145
|
-
]
|
|
1146
|
-
})
|
|
1147
|
-
]
|
|
1148
|
-
})
|
|
1149
|
-
]
|
|
1150
|
-
})
|
|
1151
|
-
}),
|
|
1152
|
-
/* @__PURE__ */ jsxs5("p", {
|
|
1153
|
-
className: "text-muted-foreground",
|
|
1154
|
-
children: [
|
|
1155
|
-
"Windmill excels at converting scripts into workflows and admin panels. ContractSpec takes a ",
|
|
1156
|
-
/* @__PURE__ */ jsx5("strong", {
|
|
1157
|
-
children: "spec-first"
|
|
1158
|
-
}),
|
|
1159
|
-
" approach, generating the entire stack and enforcing policies, making it suitable for long-lived applications that must evolve safely."
|
|
1160
|
-
]
|
|
1161
|
-
})
|
|
1162
|
-
]
|
|
1163
|
-
})
|
|
1164
|
-
]
|
|
1165
|
-
});
|
|
1166
|
-
}
|
|
1167
|
-
|
|
1168
|
-
// src/components/docs/comparison/ComparisonWorkflowEnginesPage.tsx
|
|
1169
|
-
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1170
|
-
function ComparisonWorkflowEnginesPage() {
|
|
1171
|
-
return /* @__PURE__ */ jsxs6("div", {
|
|
1172
|
-
className: "space-y-8",
|
|
1173
|
-
children: [
|
|
1174
|
-
/* @__PURE__ */ jsxs6("div", {
|
|
1175
|
-
className: "space-y-4",
|
|
1176
|
-
children: [
|
|
1177
|
-
/* @__PURE__ */ jsx6("h1", {
|
|
1178
|
-
className: "font-bold text-4xl",
|
|
1179
|
-
children: "Workflow engines"
|
|
1180
|
-
}),
|
|
1181
|
-
/* @__PURE__ */ jsx6("p", {
|
|
1182
|
-
className: "text-muted-foreground",
|
|
1183
|
-
children: "Workflow engines orchestrate long-running tasks and data pipelines. They provide retries, scheduling and visibility, but most expect developers to write code and do not generate user interfaces. Here\u2019s how the major engines compare to ContractSpec."
|
|
1184
|
-
})
|
|
1185
|
-
]
|
|
1186
|
-
}),
|
|
1187
|
-
/* @__PURE__ */ jsxs6("div", {
|
|
1188
|
-
className: "space-y-4",
|
|
1189
|
-
children: [
|
|
1190
|
-
/* @__PURE__ */ jsx6("h2", {
|
|
1191
|
-
className: "font-bold text-2xl",
|
|
1192
|
-
children: "Key differences summary"
|
|
1193
|
-
}),
|
|
1194
|
-
/* @__PURE__ */ jsx6("div", {
|
|
1195
|
-
className: "overflow-x-auto rounded-lg border border-border/50",
|
|
1196
|
-
children: /* @__PURE__ */ jsxs6("table", {
|
|
1197
|
-
className: "w-full text-left text-sm",
|
|
1198
|
-
children: [
|
|
1199
|
-
/* @__PURE__ */ jsx6("thead", {
|
|
1200
|
-
className: "bg-card/50",
|
|
1201
|
-
children: /* @__PURE__ */ jsxs6("tr", {
|
|
1202
|
-
className: "border-border/50 border-b",
|
|
1203
|
-
children: [
|
|
1204
|
-
/* @__PURE__ */ jsx6("th", {
|
|
1205
|
-
className: "px-4 py-3 font-semibold",
|
|
1206
|
-
children: "Engine"
|
|
1207
|
-
}),
|
|
1208
|
-
/* @__PURE__ */ jsx6("th", {
|
|
1209
|
-
className: "px-4 py-3 font-semibold",
|
|
1210
|
-
children: "Core strengths"
|
|
1211
|
-
}),
|
|
1212
|
-
/* @__PURE__ */ jsx6("th", {
|
|
1213
|
-
className: "px-4 py-3 font-semibold",
|
|
1214
|
-
children: "UI generation?"
|
|
1215
|
-
}),
|
|
1216
|
-
/* @__PURE__ */ jsx6("th", {
|
|
1217
|
-
className: "px-4 py-3 font-semibold",
|
|
1218
|
-
children: "Policy/PII enforcement?"
|
|
1219
|
-
}),
|
|
1220
|
-
/* @__PURE__ */ jsx6("th", {
|
|
1221
|
-
className: "px-4 py-3 font-semibold",
|
|
1222
|
-
children: "Self-host?"
|
|
1223
|
-
}),
|
|
1224
|
-
/* @__PURE__ */ jsx6("th", {
|
|
1225
|
-
className: "px-4 py-3 font-semibold",
|
|
1226
|
-
children: "Primary use"
|
|
1227
|
-
})
|
|
1228
|
-
]
|
|
1229
|
-
})
|
|
1230
|
-
}),
|
|
1231
|
-
/* @__PURE__ */ jsxs6("tbody", {
|
|
1232
|
-
className: "divide-y divide-border/50",
|
|
1233
|
-
children: [
|
|
1234
|
-
/* @__PURE__ */ jsxs6("tr", {
|
|
1235
|
-
children: [
|
|
1236
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1237
|
-
className: "px-4 py-3 align-top",
|
|
1238
|
-
children: /* @__PURE__ */ jsx6("strong", {
|
|
1239
|
-
children: "Prefect"
|
|
1240
|
-
})
|
|
1241
|
-
}),
|
|
1242
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1243
|
-
className: "px-4 py-3 align-top",
|
|
1244
|
-
children: "Python-native; dynamic DAGs adapt to change; annotate code without rewriting; strong observability and audit logs"
|
|
1245
|
-
}),
|
|
1246
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1247
|
-
className: "px-4 py-3 align-top",
|
|
1248
|
-
children: "No"
|
|
1249
|
-
}),
|
|
1250
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1251
|
-
className: "px-4 py-3 align-top",
|
|
1252
|
-
children: "No"
|
|
1253
|
-
}),
|
|
1254
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1255
|
-
className: "px-4 py-3 align-top",
|
|
1256
|
-
children: "Yes"
|
|
1257
|
-
}),
|
|
1258
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1259
|
-
className: "px-4 py-3 align-top",
|
|
1260
|
-
children: "Data pipelines and dynamic workflows."
|
|
1261
|
-
})
|
|
1262
|
-
]
|
|
1263
|
-
}),
|
|
1264
|
-
/* @__PURE__ */ jsxs6("tr", {
|
|
1265
|
-
children: [
|
|
1266
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1267
|
-
className: "px-4 py-3 align-top",
|
|
1268
|
-
children: /* @__PURE__ */ jsx6("strong", {
|
|
1269
|
-
children: "Kestra"
|
|
1270
|
-
})
|
|
1271
|
-
}),
|
|
1272
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1273
|
-
className: "px-4 py-3 align-top",
|
|
1274
|
-
children: "Declarative YAML; event-driven triggers; mix of code and no-code; write logic in Python/R/Java/Julia/Ruby; deploy anywhere"
|
|
1275
|
-
}),
|
|
1276
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1277
|
-
className: "px-4 py-3 align-top",
|
|
1278
|
-
children: "No"
|
|
1279
|
-
}),
|
|
1280
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1281
|
-
className: "px-4 py-3 align-top",
|
|
1282
|
-
children: "No"
|
|
1283
|
-
}),
|
|
1284
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1285
|
-
className: "px-4 py-3 align-top",
|
|
1286
|
-
children: "Yes"
|
|
1287
|
-
}),
|
|
1288
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1289
|
-
className: "px-4 py-3 align-top",
|
|
1290
|
-
children: "Data pipelines and hybrid orchestration."
|
|
1291
|
-
})
|
|
1292
|
-
]
|
|
1293
|
-
}),
|
|
1294
|
-
/* @__PURE__ */ jsxs6("tr", {
|
|
1295
|
-
children: [
|
|
1296
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1297
|
-
className: "px-4 py-3 align-top",
|
|
1298
|
-
children: /* @__PURE__ */ jsx6("strong", {
|
|
1299
|
-
children: "Temporal"
|
|
1300
|
-
})
|
|
1301
|
-
}),
|
|
1302
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1303
|
-
className: "px-4 py-3 align-top",
|
|
1304
|
-
children: "Durable execution; workflows never lose state; multi-language SDKs; automatic retries"
|
|
1305
|
-
}),
|
|
1306
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1307
|
-
className: "px-4 py-3 align-top",
|
|
1308
|
-
children: "No"
|
|
1309
|
-
}),
|
|
1310
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1311
|
-
className: "px-4 py-3 align-top",
|
|
1312
|
-
children: "No"
|
|
1313
|
-
}),
|
|
1314
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1315
|
-
className: "px-4 py-3 align-top",
|
|
1316
|
-
children: "Yes"
|
|
1317
|
-
}),
|
|
1318
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1319
|
-
className: "px-4 py-3 align-top",
|
|
1320
|
-
children: "Durable microservice and business workflows."
|
|
1321
|
-
})
|
|
1322
|
-
]
|
|
1323
|
-
}),
|
|
1324
|
-
/* @__PURE__ */ jsxs6("tr", {
|
|
1325
|
-
children: [
|
|
1326
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1327
|
-
className: "px-4 py-3 align-top",
|
|
1328
|
-
children: /* @__PURE__ */ jsx6("strong", {
|
|
1329
|
-
children: "Airflow"
|
|
1330
|
-
})
|
|
1331
|
-
}),
|
|
1332
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1333
|
-
className: "px-4 py-3 align-top",
|
|
1334
|
-
children: "Open-source; define workflows as Python code; schedule and monitor via UI; extensible via custom operators"
|
|
1335
|
-
}),
|
|
1336
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1337
|
-
className: "px-4 py-3 align-top",
|
|
1338
|
-
children: "No"
|
|
1339
|
-
}),
|
|
1340
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1341
|
-
className: "px-4 py-3 align-top",
|
|
1342
|
-
children: "No"
|
|
1343
|
-
}),
|
|
1344
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1345
|
-
className: "px-4 py-3 align-top",
|
|
1346
|
-
children: "Yes"
|
|
1347
|
-
}),
|
|
1348
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1349
|
-
className: "px-4 py-3 align-top",
|
|
1350
|
-
children: "Data ETL pipelines."
|
|
1351
|
-
})
|
|
1352
|
-
]
|
|
1353
|
-
}),
|
|
1354
|
-
/* @__PURE__ */ jsxs6("tr", {
|
|
1355
|
-
children: [
|
|
1356
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1357
|
-
className: "px-4 py-3 align-top",
|
|
1358
|
-
children: /* @__PURE__ */ jsx6("strong", {
|
|
1359
|
-
children: "Dagster"
|
|
1360
|
-
})
|
|
1361
|
-
}),
|
|
1362
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1363
|
-
className: "px-4 py-3 align-top",
|
|
1364
|
-
children: "Data-asset model; local testing and reusable components; built-in data quality and catalog; orchestrates AI/data pipelines across multiple tools"
|
|
1365
|
-
}),
|
|
1366
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1367
|
-
className: "px-4 py-3 align-top",
|
|
1368
|
-
children: "No"
|
|
1369
|
-
}),
|
|
1370
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1371
|
-
className: "px-4 py-3 align-top",
|
|
1372
|
-
children: "No"
|
|
1373
|
-
}),
|
|
1374
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1375
|
-
className: "px-4 py-3 align-top",
|
|
1376
|
-
children: "Yes"
|
|
1377
|
-
}),
|
|
1378
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1379
|
-
className: "px-4 py-3 align-top",
|
|
1380
|
-
children: "Data/AI pipelines with strong observability."
|
|
1381
|
-
})
|
|
1382
|
-
]
|
|
1383
|
-
}),
|
|
1384
|
-
/* @__PURE__ */ jsxs6("tr", {
|
|
1385
|
-
children: [
|
|
1386
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1387
|
-
className: "px-4 py-3 align-top",
|
|
1388
|
-
children: /* @__PURE__ */ jsx6("strong", {
|
|
1389
|
-
children: "Hatchet"
|
|
1390
|
-
})
|
|
1391
|
-
}),
|
|
1392
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1393
|
-
className: "px-4 py-3 align-top",
|
|
1394
|
-
children: "Modern engine focused on performance and durability; tasks and workflows as code; durable functions with guardrails and retries"
|
|
1395
|
-
}),
|
|
1396
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1397
|
-
className: "px-4 py-3 align-top",
|
|
1398
|
-
children: "No"
|
|
1399
|
-
}),
|
|
1400
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1401
|
-
className: "px-4 py-3 align-top",
|
|
1402
|
-
children: "No"
|
|
1403
|
-
}),
|
|
1404
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1405
|
-
className: "px-4 py-3 align-top",
|
|
1406
|
-
children: "Yes"
|
|
1407
|
-
}),
|
|
1408
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1409
|
-
className: "px-4 py-3 align-top",
|
|
1410
|
-
children: "High-throughput background jobs and microservices."
|
|
1411
|
-
})
|
|
1412
|
-
]
|
|
1413
|
-
}),
|
|
1414
|
-
/* @__PURE__ */ jsxs6("tr", {
|
|
1415
|
-
children: [
|
|
1416
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1417
|
-
className: "px-4 py-3 align-top",
|
|
1418
|
-
children: /* @__PURE__ */ jsx6("strong", {
|
|
1419
|
-
children: "Windmill"
|
|
1420
|
-
})
|
|
1421
|
-
}),
|
|
1422
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1423
|
-
className: "px-4 py-3 align-top",
|
|
1424
|
-
children: "Multi-language scripts; auto-generates UI; integrated flow editor"
|
|
1425
|
-
}),
|
|
1426
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1427
|
-
className: "px-4 py-3 align-top",
|
|
1428
|
-
children: "Yes (basic)"
|
|
1429
|
-
}),
|
|
1430
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1431
|
-
className: "px-4 py-3 align-top",
|
|
1432
|
-
children: "RBAC & secrets only"
|
|
1433
|
-
}),
|
|
1434
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1435
|
-
className: "px-4 py-3 align-top",
|
|
1436
|
-
children: "Yes"
|
|
1437
|
-
}),
|
|
1438
|
-
/* @__PURE__ */ jsx6("td", {
|
|
1439
|
-
className: "px-4 py-3 align-top",
|
|
1440
|
-
children: "Scripts into workflows and dashboards."
|
|
1441
|
-
})
|
|
1442
|
-
]
|
|
1443
|
-
})
|
|
1444
|
-
]
|
|
1445
|
-
})
|
|
1446
|
-
]
|
|
1447
|
-
})
|
|
1448
|
-
})
|
|
1449
|
-
]
|
|
1450
|
-
}),
|
|
1451
|
-
/* @__PURE__ */ jsxs6("div", {
|
|
1452
|
-
className: "space-y-3",
|
|
1453
|
-
children: [
|
|
1454
|
-
/* @__PURE__ */ jsx6("h2", {
|
|
1455
|
-
className: "font-bold text-2xl",
|
|
1456
|
-
children: "Why ContractSpec differs"
|
|
1457
|
-
}),
|
|
1458
|
-
/* @__PURE__ */ jsxs6("ul", {
|
|
1459
|
-
className: "space-y-2 text-muted-foreground",
|
|
1460
|
-
children: [
|
|
1461
|
-
/* @__PURE__ */ jsxs6("li", {
|
|
1462
|
-
children: [
|
|
1463
|
-
/* @__PURE__ */ jsx6("strong", {
|
|
1464
|
-
children: "Spec-first generation"
|
|
1465
|
-
}),
|
|
1466
|
-
" \u2013 Instead of writing code, you define typed specs for capabilities, data views and workflows; the compiler outputs both back-end and front-end."
|
|
1467
|
-
]
|
|
1468
|
-
}),
|
|
1469
|
-
/* @__PURE__ */ jsxs6("li", {
|
|
1470
|
-
children: [
|
|
1471
|
-
/* @__PURE__ */ jsx6("strong", {
|
|
1472
|
-
children: "Policy engine"
|
|
1473
|
-
}),
|
|
1474
|
-
" \u2013 Every render and mutate passes through an ABAC/PII policy decision point."
|
|
1475
|
-
]
|
|
1476
|
-
}),
|
|
1477
|
-
/* @__PURE__ */ jsxs6("li", {
|
|
1478
|
-
children: [
|
|
1479
|
-
/* @__PURE__ */ jsx6("strong", {
|
|
1480
|
-
children: "Personalisation"
|
|
1481
|
-
}),
|
|
1482
|
-
" \u2013 Signed OverlaySpecs allow tenant/user-specific UI changes without touching code."
|
|
1483
|
-
]
|
|
1484
|
-
}),
|
|
1485
|
-
/* @__PURE__ */ jsxs6("li", {
|
|
1486
|
-
children: [
|
|
1487
|
-
/* @__PURE__ */ jsx6("strong", {
|
|
1488
|
-
children: "Unified runtime"
|
|
1489
|
-
}),
|
|
1490
|
-
" \u2013 React/React-Native rendering ensures consistent experiences across web and mobile."
|
|
1491
|
-
]
|
|
1492
|
-
})
|
|
1493
|
-
]
|
|
1494
|
-
}),
|
|
1495
|
-
/* @__PURE__ */ jsx6("p", {
|
|
1496
|
-
className: "text-muted-foreground",
|
|
1497
|
-
children: "Workflow engines are excellent for orchestrating back-end tasks. ContractSpec builds on this by serving complete applications with runtime policy enforcement and user personalisation via TypeScript specs."
|
|
1498
|
-
})
|
|
1499
|
-
]
|
|
1500
|
-
})
|
|
1501
|
-
]
|
|
1502
|
-
});
|
|
1503
|
-
}
|
|
1504
|
-
export {
|
|
1505
|
-
ComparisonWorkflowEnginesPage,
|
|
1506
|
-
ComparisonWindmillPage,
|
|
1507
|
-
ComparisonOverviewPage,
|
|
1508
|
-
ComparisonInternalToolBuildersPage,
|
|
1509
|
-
ComparisonEnterprisePlatformsPage,
|
|
1510
|
-
ComparisonAutomationPlatformsPage
|
|
1511
|
-
};
|
|
2
|
+
import{jsx as e,jsxs as p}from"react/jsx-runtime";function m(){return p("div",{className:"space-y-8",children:[p("div",{className:"space-y-4",children:[e("h1",{className:"font-bold text-4xl",children:"Automation platforms"}),e("p",{className:"text-muted-foreground",children:"Automation platforms connect apps and automate tasks through triggers and actions. They serve operations and non-technical users well but stop short of generating full applications or enforcing fine-grained policies."})]}),p("div",{className:"space-y-4",children:[e("h2",{className:"font-bold text-2xl",children:"Feature comparison"}),e("div",{className:"overflow-x-auto rounded-lg border border-border/50",children:p("table",{className:"w-full text-left text-sm",children:[e("thead",{className:"bg-card/50",children:p("tr",{className:"border-border/50 border-b",children:[e("th",{className:"px-4 py-3 font-semibold",children:"Feature"}),e("th",{className:"px-4 py-3 font-semibold",children:"Zapier"}),e("th",{className:"px-4 py-3 font-semibold",children:"Make (Integromat)"}),e("th",{className:"px-4 py-3 font-semibold",children:"n8n"}),e("th",{className:"px-4 py-3 font-semibold",children:"Pipedream"})]})}),p("tbody",{className:"divide-y divide-border/50",children:[p("tr",{children:[e("td",{className:"px-4 py-3 align-top font-semibold",children:"Workflow model"}),e("td",{className:"px-4 py-3 align-top",children:"Zaps: trigger + one or more actions"}),e("td",{className:"px-4 py-3 align-top",children:"Real-time visual orchestration for AI agents and automations"}),e("td",{className:"px-4 py-3 align-top",children:"Node-based workflow builder with drag-and-drop and code; build multi-step AI agents"}),e("td",{className:"px-4 py-3 align-top",children:"Workflows connect any API; Pipedream Connect SDK adds integrations quickly"})]}),p("tr",{children:[e("td",{className:"px-4 py-3 align-top font-semibold",children:"Visual builder?"}),e("td",{className:"px-4 py-3 align-top",children:"Yes (simple; web-based)."}),e("td",{className:"px-4 py-3 align-top",children:"Yes; AI-assisted editor"}),e("td",{className:"px-4 py-3 align-top",children:"Yes; visual canvas."}),e("td",{className:"px-4 py-3 align-top",children:"Code-centric editor; no visual UI builder"})]}),p("tr",{children:[e("td",{className:"px-4 py-3 align-top font-semibold",children:"Self-host?"}),e("td",{className:"px-4 py-3 align-top",children:"No (cloud only)."}),e("td",{className:"px-4 py-3 align-top",children:"Cloud only."}),e("td",{className:"px-4 py-3 align-top",children:"Yes (Docker, self-host)"}),e("td",{className:"px-4 py-3 align-top",children:"Cloud only (hosted)."})]}),p("tr",{children:[e("td",{className:"px-4 py-3 align-top font-semibold",children:"Integrations & AI"}),e("td",{className:"px-4 py-3 align-top",children:"Connects almost 8 000 apps; limited AI features."}),e("td",{className:"px-4 py-3 align-top",children:"3 000+ pre-built apps; supports GenAI tools; GDPR/SOC2 and SSO"}),e("td",{className:"px-4 py-3 align-top",children:"Integrates LLMs; allows JS or Python code and library imports; chatbots with Slack/Teams"}),e("td",{className:"px-4 py-3 align-top",children:"MCP servers add 3 000+ APIs and 10 000+ tools to agents; AI agent builder prompts and deploys agents; SOC 2/ HIPAA/GDPR compliant"})]}),p("tr",{children:[e("td",{className:"px-4 py-3 align-top font-semibold",children:"Policy & UI generation"}),e("td",{className:"px-4 py-3 align-top",children:"No policy engine; does not generate user interfaces."}),e("td",{className:"px-4 py-3 align-top",children:"No policy engine; does not generate UIs beyond a workflow dashboard."}),e("td",{className:"px-4 py-3 align-top",children:"No policy engine; no UI builder"}),e("td",{className:"px-4 py-3 align-top",children:"No policy engine; does not generate UI."})]})]})]})})]}),p("div",{className:"space-y-3",children:[e("h2",{className:"font-bold text-2xl",children:"Why ContractSpec differs"}),p("ul",{className:"space-y-2 text-muted-foreground",children:[p("li",{children:[e("strong",{children:"Full application generation"})," \u2013 ContractSpec compiles specs into back-end, events and user interfaces for both web and mobile."]}),p("li",{children:[e("strong",{children:"Policy enforcement"})," \u2013 A built-in policy engine governs PII access and mutations across the UI."]}),p("li",{children:[e("strong",{children:"Customisation via overlays"})," \u2013 Non-technical users can safely personalise layouts while respecting policies."]}),p("li",{children:[e("strong",{children:"Extensible capabilities"})," \u2013 Connect to external APIs and services via capability providers while maintaining type safety."]})]}),e("p",{className:"text-muted-foreground",children:"Automation tools simplify integrations and tasks; ContractSpec goes further by generating a complete, policy-safe application around your data and processes."})]})]})}import g from"@contractspec/lib.ui-link";import{jsx as l,jsxs as r}from"react/jsx-runtime";function y(){return r("div",{className:"space-y-8",children:[r("div",{className:"space-y-4",children:[l("h1",{className:"font-bold text-4xl",children:"Enterprise orchestration platforms"}),l("p",{className:"text-muted-foreground",children:"Enterprise orchestration platforms manage mission-critical workloads and integrate deeply with ERP systems. They prioritise governance, reliability and compliance, but they do not provide spec-driven app generation or per-user customisation."})]}),r("div",{className:"space-y-4",children:[l("h2",{className:"font-bold text-2xl",children:"Redwood RunMyJobs"}),r("p",{className:"text-muted-foreground",children:[l(g,{href:"https://www.redwood.com/workload-automation/",className:"underline decoration-dotted underline-offset-4 hover:text-foreground",target:"_blank",rel:"noreferrer",children:"RunMyJobs by Redwood"})," ","is a cloud-native service orchestration and automation platform. Key attributes include:"]}),r("ul",{className:"space-y-2 text-muted-foreground",children:[r("li",{children:[l("strong",{children:"Self-service portal."})," Business users can run and customise workloads while IT ensures governance and compliance"]}),r("li",{children:[l("strong",{children:"Full-stack orchestration."})," Integrates with both SAP and non-SAP systems; Redwood is recognised as a Leader in Gartner\u2019s Magic Quadrant for service orchestration"]}),r("li",{children:[l("strong",{children:"Observability and AI insights."})," Dashboards and AI-enhanced analytics identify bottlenecks and forecast issues"]}),r("li",{children:[l("strong",{children:"Deep SAP integration."})," Supports SAP\u2019s latest technologies and orchestrates mission-critical business processes"]}),r("li",{children:[l("strong",{children:"Connectors & wizard."})," Provides pre-built connectors and a wizard to link on-prem and cloud systems"]})]})]}),r("div",{className:"space-y-4",children:[l("h3",{className:"font-semibold text-xl",children:"Comparison with ContractSpec"}),l("div",{className:"overflow-x-auto rounded-lg border border-border/50",children:r("table",{className:"w-full text-left text-sm",children:[l("thead",{className:"bg-card/50",children:r("tr",{className:"border-border/50 border-b",children:[l("th",{className:"px-4 py-3 font-semibold",children:"Aspect"}),l("th",{className:"px-4 py-3 font-semibold",children:"RunMyJobs"}),l("th",{className:"px-4 py-3 font-semibold",children:"ContractSpec"})]})}),r("tbody",{className:"divide-y divide-border/50",children:[r("tr",{children:[l("td",{className:"px-4 py-3 align-top",children:l("strong",{children:"Target user"})}),l("td",{className:"px-4 py-3 align-top",children:"Enterprise IT and operations teams automating SAP and mission-critical workflows."}),l("td",{className:"px-4 py-3 align-top",children:"Developers, product teams and SMBs wanting to generate policy-safe apps with customisable UIs."})]}),r("tr",{children:[l("td",{className:"px-4 py-3 align-top",children:l("strong",{children:"Workload focus"})}),l("td",{className:"px-4 py-3 align-top",children:"Service orchestration and job scheduling across ERP/legacy systems"}),l("td",{className:"px-4 py-3 align-top",children:"End-to-end application generation with back-end, UI and policies."})]}),r("tr",{children:[l("td",{className:"px-4 py-3 align-top",children:l("strong",{children:"User interface"})}),l("td",{className:"px-4 py-3 align-top",children:"Self-service portal to run/monitor jobs; no custom UI generation for new apps."}),l("td",{className:"px-4 py-3 align-top",children:"Generates React/React-Native UIs from specs; users can personalise layout via overlays."})]}),r("tr",{children:[l("td",{className:"px-4 py-3 align-top",children:l("strong",{children:"Open source"})}),l("td",{className:"px-4 py-3 align-top",children:"Proprietary SaaS; enterprise agreements."}),l("td",{className:"px-4 py-3 align-top",children:"Core compiler is proprietary; SDK and certain modules may be open-source; offers hosted and on-prem options."})]}),r("tr",{children:[l("td",{className:"px-4 py-3 align-top",children:l("strong",{children:"Policy & personalisation"})}),l("td",{className:"px-4 py-3 align-top",children:"IT controls governance; no per-user overlay concept."}),l("td",{className:"px-4 py-3 align-top",children:"Built-in policy engine and per-user overlays for safe personalisation."})]})]})]})}),l("p",{className:"text-muted-foreground",children:"Redwood RunMyJobs is designed for orchestrating enterprise workloads and SAP processes. ContractSpec targets a different problem: generating complete applications from typed specs and letting end users adapt them safely."})]})]})}import{jsx as a,jsxs as s}from"react/jsx-runtime";function u(){return s("div",{className:"space-y-8",children:[s("div",{className:"space-y-4",children:[a("h1",{className:"font-bold text-4xl",children:"Internal-tool builders"}),a("p",{className:"text-muted-foreground",children:"Internal-tool builders let teams quickly assemble dashboards and admin panels. These platforms often provide drag-and-drop UIs and connectors to databases and APIs, but they rely on developers to write custom code for business logic and seldom enforce policies across surfaces."})]}),s("div",{className:"space-y-4",children:[a("h2",{className:"font-bold text-2xl",children:"Feature comparison"}),a("div",{className:"overflow-x-auto rounded-lg border border-border/50",children:s("table",{className:"w-full text-left text-sm",children:[a("thead",{className:"bg-card/50",children:s("tr",{className:"border-border/50 border-b",children:[a("th",{className:"px-4 py-3 font-semibold",children:"Feature"}),a("th",{className:"px-4 py-3 font-semibold",children:"Retool"}),a("th",{className:"px-4 py-3 font-semibold",children:"Appsmith"}),a("th",{className:"px-4 py-3 font-semibold",children:"ToolJet"}),a("th",{className:"px-4 py-3 font-semibold",children:"Budibase"})]})}),s("tbody",{className:"divide-y divide-border/50",children:[s("tr",{children:[a("td",{className:"px-4 py-3 align-top font-semibold",children:"UI builder"}),a("td",{className:"px-4 py-3 align-top",children:"Drag-and-drop canvas; shape UI components easily"}),a("td",{className:"px-4 py-3 align-top",children:"Visual builder with drag-and-drop widgets"}),a("td",{className:"px-4 py-3 align-top",children:"Drag-and-drop UI widgets (tables, charts, forms)"}),a("td",{className:"px-4 py-3 align-top",children:"Pre-built components and templates for mobile/desktop"})]}),s("tr",{children:[a("td",{className:"px-4 py-3 align-top font-semibold",children:"Custom code & logic"}),a("td",{className:"px-4 py-3 align-top",children:"Full code insertion anywhere via IDE"}),a("td",{className:"px-4 py-3 align-top",children:"Logic via JavaScript or natural-language prompts in a central IDE"}),a("td",{className:"px-4 py-3 align-top",children:"Supports business logic in JavaScript or Python queries"}),a("td",{className:"px-4 py-3 align-top",children:"Custom logic via JavaScript; plugins and external embeds"})]}),s("tr",{children:[a("td",{className:"px-4 py-3 align-top font-semibold",children:"Data connectors"}),a("td",{className:"px-4 py-3 align-top",children:"Wide support for databases and APIs (PostgreSQL, MongoDB, GraphQL, etc.)."}),a("td",{className:"px-4 py-3 align-top",children:"Connects to LLMs and databases"}),a("td",{className:"px-4 py-3 align-top",children:"Built-in database; connects to PostgreSQL, MongoDB, APIs, GraphQL, SaaS"}),a("td",{className:"px-4 py-3 align-top",children:"Connects to external databases, REST, CSV or built-in DB"})]}),s("tr",{children:[a("td",{className:"px-4 py-3 align-top font-semibold",children:"Open source & self-host"}),a("td",{className:"px-4 py-3 align-top",children:"Proprietary; cloud or on-prem subscription."}),a("td",{className:"px-4 py-3 align-top",children:"Open source (Apache-2.0); self-host or cloud."}),a("td",{className:"px-4 py-3 align-top",children:"Open source; self-host via Docker or cloud."}),a("td",{className:"px-4 py-3 align-top",children:"Open source; self-host via Docker/Kubernetes"})]}),s("tr",{children:[a("td",{className:"px-4 py-3 align-top font-semibold",children:"Policy & personalisation"}),a("td",{className:"px-4 py-3 align-top",children:"No built-in policy engine; personalisation limited to user roles."}),a("td",{className:"px-4 py-3 align-top",children:"No typed policy engine; customisation depends on user roles."}),a("td",{className:"px-4 py-3 align-top",children:"No policy engine; personalisation via user roles."}),a("td",{className:"px-4 py-3 align-top",children:"No policy engine; personalisation via RBAC & SSO"})]})]})]})})]}),s("div",{className:"space-y-3",children:[a("h2",{className:"font-bold text-2xl",children:"ContractSpec\u2019s differences"}),s("ul",{className:"space-y-2 text-muted-foreground",children:[s("li",{children:[a("strong",{children:"Typed specifications"})," produce both the API and UI. You define capabilities, data views and workflows, and the compiler generates code, forms and screens\u2014no manual widget wiring."]}),s("li",{children:[a("strong",{children:"Policy enforcement"})," at run time ensures PII and ABAC rules across the entire app."]}),s("li",{children:[a("strong",{children:"Overlay personalisation"})," allows tenants and users to change layouts safely without code."]}),s("li",{children:[a("strong",{children:"Unified mobile/web runtime"})," means you don\u2019t need separate builders for React Native vs web."]})]}),a("p",{className:"text-muted-foreground",children:"Internal-tool builders are useful for quick dashboards. ContractSpec extends this by generating the whole stack from specs and enforcing policies throughout."})]})]})}import{jsx as n,jsxs as c}from"react/jsx-runtime";function N(){return c("div",{className:"space-y-8",children:[c("div",{className:"space-y-4",children:[n("h1",{className:"font-bold text-4xl",children:"Comparison overview"}),n("p",{className:"text-muted-foreground",children:"ContractSpec sits at the intersection of several tool categories. To appreciate its unique offering\u2014typed specifications for back-end, front-end, workflows and policies with a unified web/mobile runtime\u2014this section compares it to related products."}),c("p",{className:"text-muted-foreground",children:["ContractSpec uses ",n("strong",{children:"runtime adapters"})," to serve typed"," ",n("strong",{children:"Operations"})," (Commands/Queries),"," ",n("strong",{children:"DataViews"}),", ",n("strong",{children:"Workflows"}),", and"," ",n("strong",{children:"Policies"})," as REST/GraphQL/MCP endpoints. A"," ",n("strong",{children:"policy decision point"})," governs every operation, and"," ",n("strong",{children:"OverlaySpecs"})," allow non-technical users to personalise screens safely. Few competitors offer this combination of runtime type safety, policy enforcement, and end-user customisation."]})]}),c("div",{className:"space-y-4",children:[n("h2",{className:"font-bold text-2xl",children:"Tool categories"}),n("div",{className:"overflow-x-auto rounded-lg border border-border/50",children:c("table",{className:"w-full text-left text-sm",children:[n("thead",{className:"bg-card/50",children:c("tr",{className:"border-border/50 border-b",children:[n("th",{className:"px-4 py-3 font-semibold",children:"Category"}),n("th",{className:"px-4 py-3 font-semibold",children:"Examples"}),n("th",{className:"px-4 py-3 font-semibold",children:"What they do"}),n("th",{className:"px-4 py-3 font-semibold",children:"Limitations"})]})}),c("tbody",{className:"divide-y divide-border/50",children:[c("tr",{children:[n("td",{className:"px-4 py-3 align-top",children:n("strong",{children:"Workflow engines"})}),n("td",{className:"px-4 py-3 align-top",children:"Prefect, Kestra, Temporal, Airflow, Dagster, Hatchet, Windmill"}),n("td",{className:"px-4 py-3 align-top",children:"Orchestrate code or data pipelines; handle retries, scheduling and observability"}),n("td",{className:"px-4 py-3 align-top",children:"Require writing code; no automatic UI generation or policy enforcement."})]}),c("tr",{children:[n("td",{className:"px-4 py-3 align-top",children:n("strong",{children:"Internal-tool builders"})}),n("td",{className:"px-4 py-3 align-top",children:"Retool, Appsmith, ToolJet, Budibase"}),n("td",{className:"px-4 py-3 align-top",children:"Drag-and-drop dashboards and admin panels; connect to databases/APIs"}),n("td",{className:"px-4 py-3 align-top",children:"No typed back-end spec; limited enforcement of policies; custom code glues logic."})]}),c("tr",{children:[n("td",{className:"px-4 py-3 align-top",children:n("strong",{children:"Automation platforms"})}),n("td",{className:"px-4 py-3 align-top",children:"Zapier, Make, n8n, Pipedream"}),n("td",{className:"px-4 py-3 align-top",children:"Connect apps via triggers and actions; visual or low-code interfaces"}),n("td",{className:"px-4 py-3 align-top",children:"Automate tasks but do not generate full apps or enforce per-field policies."})]}),c("tr",{children:[n("td",{className:"px-4 py-3 align-top",children:n("strong",{children:"Enterprise orchestrators"})}),n("td",{className:"px-4 py-3 align-top",children:"Redwood RunMyJobs"}),n("td",{className:"px-4 py-3 align-top",children:"Automate mission-critical workloads with self-service portals and SAP integrations"}),n("td",{className:"px-4 py-3 align-top",children:"Focus on IT workloads; not built for custom app creation or per-user customisation."})]})]})]})}),n("p",{className:"text-muted-foreground",children:"Use the pages below to explore each group in detail and see how ContractSpec compares."})]})]})}import{jsx as o,jsxs as i}from"react/jsx-runtime";function f(){return i("div",{className:"space-y-8",children:[i("div",{className:"space-y-4",children:[o("h1",{className:"font-bold text-4xl",children:"Windmill"}),i("p",{className:"text-muted-foreground",children:["Windmill is an open-source platform that turns"," ",o("strong",{children:"scripts"})," into endpoints, workflows and UIs. It seeks to remove boilerplate by generating interfaces and workflows around existing code"]})]}),i("div",{className:"space-y-4",children:[o("h2",{className:"font-bold text-2xl",children:"Platform features"}),i("ul",{className:"space-y-3 text-muted-foreground",children:[i("li",{children:[o("strong",{children:"Script-driven model."})," Write scripts in TypeScript, Python, Go, PHP, Bash, C#, SQL or Rust; Windmill infers dependencies, creates lockfiles and JSON schemas, then serves minimal UIs automatically"]}),i("li",{children:[o("strong",{children:"Visual flow editor."})," Compose scripts into workflows with retries, error handling, loops, branching, suspending flows and approval steps"]}),i("li",{children:[o("strong",{children:"Low-code UI builder."})," Build dashboards and admin panels using inline scripts and trigger flows from the UI"]}),i("li",{children:[o("strong",{children:"Enterprise readiness."})," Features include RBAC permissions, secret management, OAuth handling, CLI/git sync, scheduling and webhooks"]}),i("li",{children:[o("strong",{children:"Use cases."})," Deploy scripts as webhooks or cron jobs; create \u201Capplicative workflows\u201D combining external APIs; build ETLs and interactive dashboards"]}),i("li",{children:[o("strong",{children:"Open source & self-hosting."})," Windmill emphasises an open-source codebase and self-hosting options"]})]})]}),i("div",{className:"space-y-4",children:[o("h2",{className:"font-bold text-2xl",children:"Comparison with ContractSpec"}),o("div",{className:"overflow-x-auto rounded-lg border border-border/50",children:i("table",{className:"w-full text-left text-sm",children:[o("thead",{className:"bg-card/50",children:i("tr",{className:"border-border/50 border-b",children:[o("th",{className:"px-4 py-3 font-semibold",children:"Feature"}),o("th",{className:"px-4 py-3 font-semibold",children:"Windmill"}),o("th",{className:"px-4 py-3 font-semibold",children:"ContractSpec"})]})}),i("tbody",{className:"divide-y divide-border/50",children:[i("tr",{children:[o("td",{className:"px-4 py-3 align-top",children:o("strong",{children:"Entry model"})}),o("td",{className:"px-4 py-3 align-top",children:"Write scripts; platform auto-generates UI and workflows"}),o("td",{className:"px-4 py-3 align-top",children:"Define typed specs (Capabilities, DataViews, Workflows, Policies); compiler outputs back-end, front-end and forms."})]}),i("tr",{children:[o("td",{className:"px-4 py-3 align-top",children:o("strong",{children:"Language support"})}),o("td",{className:"px-4 py-3 align-top",children:"20+ languages via embedded runtimes"}),o("td",{className:"px-4 py-3 align-top",children:"Uses TypeScript/JavaScript for providers; supports other back-ends through capability providers."})]}),i("tr",{children:[o("td",{className:"px-4 py-3 align-top",children:o("strong",{children:"UI generation"})}),o("td",{className:"px-4 py-3 align-top",children:"Minimal UI forms from script parameters; low-code app builder"}),o("td",{className:"px-4 py-3 align-top",children:"Generates full web and mobile UIs from specs; user layouts can be customised via signed overlays."})]}),i("tr",{children:[o("td",{className:"px-4 py-3 align-top",children:o("strong",{children:"Policy & personalization"})}),o("td",{className:"px-4 py-3 align-top",children:"RBAC and secret management; no per-user overlay concept"}),o("td",{className:"px-4 py-3 align-top",children:"Built-in policy engine enforcing ABAC/PII on every render/mutate; overlays allow safe per-user customisation."})]}),i("tr",{children:[o("td",{className:"px-4 py-3 align-top",children:o("strong",{children:"Open source"})}),o("td",{className:"px-4 py-3 align-top",children:"Fully open source and self-hostable"}),o("td",{className:"px-4 py-3 align-top",children:"Closed-source core (SDK is open); offers hosted and on-prem modes."})]}),i("tr",{children:[o("td",{className:"px-4 py-3 align-top",children:o("strong",{children:"Ideal for"})}),o("td",{className:"px-4 py-3 align-top",children:"Teams wanting to expose scripts as APIs, workflows or dashboards without heavy infrastructure."}),o("td",{className:"px-4 py-3 align-top",children:"Teams needing a spec-driven platform that generates code and UI, enforces policies and lets non-technical users tailor the experience."})]})]})]})}),i("p",{className:"text-muted-foreground",children:["Windmill excels at converting scripts into workflows and admin panels. ContractSpec takes a ",o("strong",{children:"spec-first"})," approach, generating the entire stack and enforcing policies, making it suitable for long-lived applications that must evolve safely."]})]})]})}import{jsx as t,jsxs as d}from"react/jsx-runtime";function b(){return d("div",{className:"space-y-8",children:[d("div",{className:"space-y-4",children:[t("h1",{className:"font-bold text-4xl",children:"Workflow engines"}),t("p",{className:"text-muted-foreground",children:"Workflow engines orchestrate long-running tasks and data pipelines. They provide retries, scheduling and visibility, but most expect developers to write code and do not generate user interfaces. Here\u2019s how the major engines compare to ContractSpec."})]}),d("div",{className:"space-y-4",children:[t("h2",{className:"font-bold text-2xl",children:"Key differences summary"}),t("div",{className:"overflow-x-auto rounded-lg border border-border/50",children:d("table",{className:"w-full text-left text-sm",children:[t("thead",{className:"bg-card/50",children:d("tr",{className:"border-border/50 border-b",children:[t("th",{className:"px-4 py-3 font-semibold",children:"Engine"}),t("th",{className:"px-4 py-3 font-semibold",children:"Core strengths"}),t("th",{className:"px-4 py-3 font-semibold",children:"UI generation?"}),t("th",{className:"px-4 py-3 font-semibold",children:"Policy/PII enforcement?"}),t("th",{className:"px-4 py-3 font-semibold",children:"Self-host?"}),t("th",{className:"px-4 py-3 font-semibold",children:"Primary use"})]})}),d("tbody",{className:"divide-y divide-border/50",children:[d("tr",{children:[t("td",{className:"px-4 py-3 align-top",children:t("strong",{children:"Prefect"})}),t("td",{className:"px-4 py-3 align-top",children:"Python-native; dynamic DAGs adapt to change; annotate code without rewriting; strong observability and audit logs"}),t("td",{className:"px-4 py-3 align-top",children:"No"}),t("td",{className:"px-4 py-3 align-top",children:"No"}),t("td",{className:"px-4 py-3 align-top",children:"Yes"}),t("td",{className:"px-4 py-3 align-top",children:"Data pipelines and dynamic workflows."})]}),d("tr",{children:[t("td",{className:"px-4 py-3 align-top",children:t("strong",{children:"Kestra"})}),t("td",{className:"px-4 py-3 align-top",children:"Declarative YAML; event-driven triggers; mix of code and no-code; write logic in Python/R/Java/Julia/Ruby; deploy anywhere"}),t("td",{className:"px-4 py-3 align-top",children:"No"}),t("td",{className:"px-4 py-3 align-top",children:"No"}),t("td",{className:"px-4 py-3 align-top",children:"Yes"}),t("td",{className:"px-4 py-3 align-top",children:"Data pipelines and hybrid orchestration."})]}),d("tr",{children:[t("td",{className:"px-4 py-3 align-top",children:t("strong",{children:"Temporal"})}),t("td",{className:"px-4 py-3 align-top",children:"Durable execution; workflows never lose state; multi-language SDKs; automatic retries"}),t("td",{className:"px-4 py-3 align-top",children:"No"}),t("td",{className:"px-4 py-3 align-top",children:"No"}),t("td",{className:"px-4 py-3 align-top",children:"Yes"}),t("td",{className:"px-4 py-3 align-top",children:"Durable microservice and business workflows."})]}),d("tr",{children:[t("td",{className:"px-4 py-3 align-top",children:t("strong",{children:"Airflow"})}),t("td",{className:"px-4 py-3 align-top",children:"Open-source; define workflows as Python code; schedule and monitor via UI; extensible via custom operators"}),t("td",{className:"px-4 py-3 align-top",children:"No"}),t("td",{className:"px-4 py-3 align-top",children:"No"}),t("td",{className:"px-4 py-3 align-top",children:"Yes"}),t("td",{className:"px-4 py-3 align-top",children:"Data ETL pipelines."})]}),d("tr",{children:[t("td",{className:"px-4 py-3 align-top",children:t("strong",{children:"Dagster"})}),t("td",{className:"px-4 py-3 align-top",children:"Data-asset model; local testing and reusable components; built-in data quality and catalog; orchestrates AI/data pipelines across multiple tools"}),t("td",{className:"px-4 py-3 align-top",children:"No"}),t("td",{className:"px-4 py-3 align-top",children:"No"}),t("td",{className:"px-4 py-3 align-top",children:"Yes"}),t("td",{className:"px-4 py-3 align-top",children:"Data/AI pipelines with strong observability."})]}),d("tr",{children:[t("td",{className:"px-4 py-3 align-top",children:t("strong",{children:"Hatchet"})}),t("td",{className:"px-4 py-3 align-top",children:"Modern engine focused on performance and durability; tasks and workflows as code; durable functions with guardrails and retries"}),t("td",{className:"px-4 py-3 align-top",children:"No"}),t("td",{className:"px-4 py-3 align-top",children:"No"}),t("td",{className:"px-4 py-3 align-top",children:"Yes"}),t("td",{className:"px-4 py-3 align-top",children:"High-throughput background jobs and microservices."})]}),d("tr",{children:[t("td",{className:"px-4 py-3 align-top",children:t("strong",{children:"Windmill"})}),t("td",{className:"px-4 py-3 align-top",children:"Multi-language scripts; auto-generates UI; integrated flow editor"}),t("td",{className:"px-4 py-3 align-top",children:"Yes (basic)"}),t("td",{className:"px-4 py-3 align-top",children:"RBAC & secrets only"}),t("td",{className:"px-4 py-3 align-top",children:"Yes"}),t("td",{className:"px-4 py-3 align-top",children:"Scripts into workflows and dashboards."})]})]})]})})]}),d("div",{className:"space-y-3",children:[t("h2",{className:"font-bold text-2xl",children:"Why ContractSpec differs"}),d("ul",{className:"space-y-2 text-muted-foreground",children:[d("li",{children:[t("strong",{children:"Spec-first generation"})," \u2013 Instead of writing code, you define typed specs for capabilities, data views and workflows; the compiler outputs both back-end and front-end."]}),d("li",{children:[t("strong",{children:"Policy engine"})," \u2013 Every render and mutate passes through an ABAC/PII policy decision point."]}),d("li",{children:[t("strong",{children:"Personalisation"})," \u2013 Signed OverlaySpecs allow tenant/user-specific UI changes without touching code."]}),d("li",{children:[t("strong",{children:"Unified runtime"})," \u2013 React/React-Native rendering ensures consistent experiences across web and mobile."]})]}),t("p",{className:"text-muted-foreground",children:"Workflow engines are excellent for orchestrating back-end tasks. ContractSpec builds on this by serving complete applications with runtime policy enforcement and user personalisation via TypeScript specs."})]})]})}export{b as ComparisonWorkflowEnginesPage,f as ComparisonWindmillPage,N as ComparisonOverviewPage,u as ComparisonInternalToolBuildersPage,y as ComparisonEnterprisePlatformsPage,m as ComparisonAutomationPlatformsPage};
|