@bluefly/openstandardagents 0.2.7 → 0.2.9
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/.devfile.yaml +1 -1
- package/.env.example +1 -1
- package/.github/AGENTS.md +245 -0
- package/.github/agents/github-issue-triage.ossa.yaml +99 -0
- package/.github/agents/github-pr-triage.ossa.yaml +137 -0
- package/.github/workflows/issue-sync-to-gitlab.yml +138 -0
- package/.github/workflows/pr-triage-to-gitlab.yml +164 -0
- package/.version.json +2 -2
- package/.wiki-config.json +24 -0
- package/CHANGELOG.md +44 -18
- package/CODEOWNERS +75 -0
- package/CONTRIBUTING.md +103 -4
- package/README.md +178 -243
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/repositories/schema.repository.d.ts +6 -1
- package/dist/repositories/schema.repository.d.ts.map +1 -1
- package/dist/repositories/schema.repository.js +49 -27
- package/dist/repositories/schema.repository.js.map +1 -1
- package/dist/services/migration.service.d.ts +4 -3
- package/dist/services/migration.service.d.ts.map +1 -1
- package/dist/services/migration.service.js +11 -10
- package/dist/services/migration.service.js.map +1 -1
- package/dist/services/release-automation/release.service.js +1 -1
- package/dist/services/release-automation/release.service.js.map +1 -1
- package/dist/services/release-automation/schemas/release.schema.js +1 -1
- package/dist/services/release-automation/webhook.service.js +3 -3
- package/dist/services/release-automation/webhook.service.js.map +1 -1
- package/dist/services/runtime/claude/claude-adapter.d.ts +1 -1
- package/dist/services/runtime/claude/claude-adapter.d.ts.map +1 -1
- package/dist/services/runtime/claude/claude-adapter.js +2 -2
- package/dist/services/runtime/claude/claude-adapter.js.map +1 -1
- package/dist/spec/v0.2.8/CHANGELOG.md +401 -0
- package/dist/spec/v0.2.8/README.md +72 -0
- package/dist/spec/v0.2.8/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/dist/spec/v0.2.8/migrations/v0.2.5-RC-to-v0.2.6.md +65 -0
- package/dist/spec/v0.2.8/migrations/v0.2.6-to-v0.2.8.md +81 -0
- package/{spec/v0.2.6-dev/ossa-0.2.5.schema.json → dist/spec/v0.2.8/ossa-0.2.8.schema.json} +1509 -52
- package/dist/spec/v0.2.8/ossa-0.2.8.yaml +581 -0
- package/dist/spec/v0.2.9/a2a-protocol.md +1337 -0
- package/dist/spec/v0.2.9/agent.md +1946 -0
- package/dist/spec/v0.2.9/capabilities/index.yaml +25 -0
- package/dist/spec/v0.2.9/capabilities/memory.yaml +251 -0
- package/dist/spec/v0.2.9/capability-schema.md +576 -0
- package/dist/spec/v0.2.9/compliance-profiles.md +533 -0
- package/dist/spec/v0.2.9/conformance-testing.md +1527 -0
- package/dist/spec/v0.2.9/gitlab-duo-integration.md +621 -0
- package/dist/spec/v0.2.9/ossa-0.2.9.schema.json +3699 -0
- package/dist/spec/v0.2.9/runtime-semantics.md +464 -0
- package/dist/spec/v0.2.9/security-model.md +1245 -0
- package/dist/spec/v0.2.9/semantic-conventions.md +347 -0
- package/dist/spec/v0.2.9/types.ts +522 -0
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/policy.d.ts +377 -0
- package/dist/types/policy.d.ts.map +1 -0
- package/dist/types/policy.js +84 -0
- package/dist/types/policy.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/version.d.ts +68 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +156 -0
- package/dist/utils/version.js.map +1 -0
- package/docs/specs/policy-dsl.md +925 -0
- package/eslint-report.json +1 -0
- package/examples/adk-integration/code-review-workflow.yml +1 -1
- package/examples/adk-integration/customer-support.yml +1 -1
- package/examples/adk-integration/data-pipeline.yml +1 -1
- package/examples/advanced/reasoning-agent.yaml +136 -0
- package/examples/advanced/workflows/hybrid-model-strategy.yaml +1 -1
- package/examples/agent-manifests/critics/critic-agent.yaml +1 -1
- package/examples/agent-manifests/governors/governor-agent.yaml +1 -1
- package/examples/agent-manifests/integrators/integrator-agent.yaml +1 -1
- package/examples/agent-manifests/judges/judge-agent.yaml +1 -1
- package/examples/agent-manifests/monitors/monitor-agent.yaml +1 -1
- package/examples/agent-manifests/orchestrators/orchestrator-agent.yaml +1 -1
- package/examples/agent-manifests/sample-compliant-agent.yaml +1 -1
- package/examples/agent-manifests/workers/worker-agent.yaml +1 -1
- package/examples/agents-md/code-agent.ossa.json +100 -0
- package/examples/agents-md/monorepo-agent.ossa.yaml +180 -0
- package/examples/anthropic/claude-assistant.ossa.json +1 -1
- package/examples/autogen/multi-agent.ossa.json +1 -1
- package/examples/claude-code/code-reviewer.ossa.yaml +78 -0
- package/examples/claude-code/ossa-validator.ossa.yaml +80 -0
- package/examples/common_npm/agent-router.ossa.yaml +1 -0
- package/examples/common_npm/agent-router.v0.2.2.ossa.yaml +1 -1
- package/examples/crewai/research-team.ossa.json +1 -1
- package/examples/cursor/code-review-agent.ossa.json +1 -1
- package/examples/drupal/gitlab-ml-recommender.ossa.yaml +1 -0
- package/examples/drupal/gitlab-ml-recommender.v0.2.2.ossa.yaml +1 -1
- package/examples/extensions/agents-md-v1.yml +175 -0
- package/examples/extensions/drupal-v1.yml +1 -1
- package/examples/extensions/kagent-v1.yml +1 -1
- package/examples/getting-started/hello-world-complete.ossa.yaml +1 -1
- package/examples/integration-patterns/agent-to-agent-orchestration.ossa.yaml +4 -4
- package/examples/kagent/compliance-validator.ossa.yaml +1 -1
- package/examples/kagent/cost-optimizer.ossa.yaml +1 -1
- package/examples/kagent/documentation-agent.ossa.yaml +1 -1
- package/examples/kagent/k8s-troubleshooter-v1.ossa.yaml +1 -0
- package/examples/kagent/k8s-troubleshooter-v1.v0.2.2.ossa.yaml +1 -1
- package/examples/kagent/k8s-troubleshooter.ossa.yaml +1 -1
- package/examples/kagent/security-scanner.ossa.yaml +1 -1
- package/examples/langchain/chain-agent.ossa.json +1 -1
- package/examples/langflow/workflow-agent.ossa.json +1 -1
- package/examples/langgraph/state-machine-agent.ossa.json +1 -1
- package/examples/llamaindex/rag-agent.ossa.json +1 -1
- package/examples/migration-guides/from-langchain-to-ossa.yaml +4 -4
- package/examples/multi-agent/README.md +74 -0
- package/examples/multi-agent/conditional-router.ossa.yaml +42 -0
- package/examples/multi-agent/parallel-execution.ossa.yaml +54 -0
- package/examples/multi-agent/sequential-pipeline.ossa.yaml +45 -0
- package/examples/openai/basic-agent.ossa.yaml +1 -1
- package/examples/openai/multi-tool-agent.ossa.json +1 -1
- package/examples/openai/swarm-agent.ossa.json +1 -1
- package/examples/production/document-analyzer-openai.yml +1 -1
- package/examples/quickstart/support-agent.ossa.yaml +1 -1
- package/examples/spec-examples/audit-agent.yml +1 -1
- package/examples/spec-examples/chat-agent.yml +1 -1
- package/examples/spec-examples/compliance-agent.yml +1 -1
- package/examples/spec-examples/monitoring-agent.yml +1 -1
- package/examples/spec-examples/workflow-agent.yml +1 -1
- package/examples/templates/ossa-compliance.yaml +1 -1
- package/examples/vercel/edge-agent.ossa.json +1 -1
- package/gl-code-quality-report.json +62 -0
- package/llms-ctx-full.txt +39 -0
- package/llms-ctx.txt +39 -0
- package/llms.txt +47 -0
- package/package.json +6 -3
- package/scripts/README.md +25 -0
- package/scripts/compliance-audit.ts +796 -0
- package/scripts/eslint-to-codequality.cjs +34 -0
- package/scripts/generate-agents-catalog.ts +2 -1
- package/scripts/generate-api-docs.ts +2 -1
- package/scripts/generate-examples-docs.ts +2 -1
- package/scripts/generate-llms-ctx.sh +17 -0
- package/scripts/generate-schema-docs.ts +31 -10
- package/scripts/sync-version.js +4 -12
- package/scripts/validate-schema.ts +2 -1
- package/spec/v0.2.8/CHANGELOG.md +401 -0
- package/spec/v0.2.8/README.md +72 -0
- package/spec/v0.2.8/migrations/v0.2.3-to-v0.2.4.md +599 -0
- package/spec/v0.2.8/migrations/v0.2.5-RC-to-v0.2.6.md +65 -0
- package/spec/v0.2.8/migrations/v0.2.6-to-v0.2.8.md +81 -0
- package/spec/{v0.2.6-dev/ossa-0.2.6-dev.schema.json → v0.2.8/ossa-0.2.8.schema.json} +1509 -52
- package/spec/v0.2.8/ossa-0.2.8.yaml +581 -0
- package/spec/v0.2.9/a2a-protocol.md +1337 -0
- package/spec/v0.2.9/agent.md +1946 -0
- package/spec/v0.2.9/capabilities/index.yaml +25 -0
- package/spec/v0.2.9/capabilities/memory.yaml +251 -0
- package/spec/v0.2.9/capability-schema.md +576 -0
- package/spec/v0.2.9/compliance-profiles.md +533 -0
- package/spec/v0.2.9/conformance-testing.md +1527 -0
- package/spec/v0.2.9/gitlab-duo-integration.md +621 -0
- package/spec/v0.2.9/ossa-0.2.9.schema.json +3699 -0
- package/spec/v0.2.9/runtime-semantics.md +464 -0
- package/spec/v0.2.9/security-model.md +1245 -0
- package/spec/v0.2.9/semantic-conventions.md +347 -0
- package/spec/v0.2.9/types.ts +522 -0
- package/test-results/junit.xml +337 -0
- package/.github/workflows/pr-comment.yml +0 -33
- package/bin/validate-ossa-0.2.5-RC.ts +0 -244
- package/dist/spec/v0.2.6-dev/ossa-0.2.5.schema.json +0 -1696
- package/dist/spec/v0.2.6-dev/ossa-0.2.6-dev.schema.json +0 -1696
- package/scripts/lib/exec.ts +0 -37
- package/scripts/lib/file-ops.ts +0 -58
- package/scripts/lib/version.ts +0 -83
- package/website/.lighthouserc.ts +0 -24
- package/website/.prettierrc +0 -10
- package/website/DESIGN_SYSTEM_IMPLEMENTATION.md +0 -445
- package/website/Dockerfile +0 -30
- package/website/app/about/page.tsx +0 -304
- package/website/app/blog/[slug]/page.tsx +0 -208
- package/website/app/blog/page.tsx +0 -249
- package/website/app/design-guide/page.tsx +0 -511
- package/website/app/docs/[[...slug]]/page.tsx +0 -847
- package/website/app/docs/core-concepts/project-structure/page.tsx +0 -349
- package/website/app/ecosystem/page.tsx +0 -410
- package/website/app/examples/page.tsx +0 -133
- package/website/app/globals.scss +0 -370
- package/website/app/layout.tsx +0 -106
- package/website/app/license/page.tsx +0 -183
- package/website/app/not-found.tsx +0 -18
- package/website/app/page.tsx +0 -686
- package/website/app/page.tsx.bak +0 -679
- package/website/app/page.tsx.bak2 +0 -649
- package/website/app/playground/page.tsx +0 -487
- package/website/app/robots.ts +0 -19
- package/website/app/rss.xml/route.ts +0 -74
- package/website/app/schema/page.tsx +0 -1001
- package/website/app/sitemap.ts +0 -56
- package/website/app/specification/page.tsx +0 -287
- package/website/components/InstallCommand.tsx +0 -96
- package/website/components/Logo.tsx +0 -97
- package/website/components/StructuredData.tsx +0 -65
- package/website/components/docs/DocsSearch.tsx +0 -104
- package/website/components/docs/DocsSidebar.tsx +0 -155
- package/website/components/docs/MarkdownContent.tsx +0 -401
- package/website/components/docs/VersionSelector.tsx +0 -105
- package/website/components/examples/ExamplesViewer.tsx +0 -293
- package/website/components/layout/Footer.tsx +0 -116
- package/website/components/layout/Header.tsx +0 -172
- package/website/components/schema/SchemaComponentsAccordion.tsx +0 -84
- package/website/components/schema/SchemaExplorer.tsx +0 -213
- package/website/components/ui/Badge.tsx +0 -82
- package/website/components/ui/Button.tsx +0 -116
- package/website/components/ui/Card.tsx +0 -167
- package/website/components/ui/Checkbox.tsx +0 -141
- package/website/components/ui/Input.tsx +0 -169
- package/website/components/ui/Radio.tsx +0 -141
- package/website/components/ui/Select.tsx +0 -182
- package/website/components/ui/Tag.tsx +0 -158
- package/website/components/ui/Textarea.tsx +0 -195
- package/website/components/ui/index.ts +0 -11
- package/website/content/blog/OpenAPI-AI-Agents-Standard.md +0 -285
- package/website/content/blog/Why-Formal-Standards-Matter-Now.md +0 -198
- package/website/content/blog/gitlab-kubernetes-agent-ecosystem.md +0 -286
- package/website/content/blog/introducing-ossa-framework.md +0 -328
- package/website/content/blog/ossa-production-results.md +0 -279
- package/website/content/blog/welcome-to-ossa.md +0 -43
- package/website/content/blog/why-ai-agents-need-open-standard.md +0 -98
- package/website/content/docs/00-home.md +0 -153
- package/website/content/docs/adapters/openai-adapter.md +0 -693
- package/website/content/docs/agents/catalog.md +0 -28
- package/website/content/docs/aiflow-framework-integration-with-ossa.md +0 -107
- package/website/content/docs/api-reference/index.md +0 -38
- package/website/content/docs/api-reference/ossa-core-api.md +0 -634
- package/website/content/docs/api-reference/ossa-registry-api.md +0 -515
- package/website/content/docs/api-reference/unified-agent-gateway.md +0 -599
- package/website/content/docs/architecture/execution-flow.md +0 -335
- package/website/content/docs/architecture/multi-agent-systems.md +0 -737
- package/website/content/docs/architecture/overview.md +0 -121
- package/website/content/docs/architecture/stack-integration.md +0 -461
- package/website/content/docs/changelog.md +0 -246
- package/website/content/docs/cli-reference/index.md +0 -111
- package/website/content/docs/cli-reference/ossa-agents.md +0 -70
- package/website/content/docs/cli-reference/ossa-export.md +0 -56
- package/website/content/docs/cli-reference/ossa-generate.md +0 -66
- package/website/content/docs/cli-reference/ossa-gitlab-agent.md +0 -57
- package/website/content/docs/cli-reference/ossa-import.md +0 -56
- package/website/content/docs/cli-reference/ossa-init.md +0 -57
- package/website/content/docs/cli-reference/ossa-migrate.md +0 -62
- package/website/content/docs/cli-reference/ossa-run.md +0 -66
- package/website/content/docs/cli-reference/ossa-schema.md +0 -57
- package/website/content/docs/cli-reference/ossa-setup.md +0 -57
- package/website/content/docs/cli-reference/ossa-validate.md +0 -66
- package/website/content/docs/configuration/index.md +0 -97
- package/website/content/docs/contributing.md +0 -599
- package/website/content/docs/deployment/github-mirroring.md +0 -924
- package/website/content/docs/documentation.md +0 -100
- package/website/content/docs/ecosystem/framework-support.md +0 -1361
- package/website/content/docs/ecosystem/overview.md +0 -366
- package/website/content/docs/errors/index.md +0 -10
- package/website/content/docs/examples/aiflow-framework-integration-with-ossa.md +0 -107
- package/website/content/docs/examples/catalog.md +0 -300
- package/website/content/docs/for-audiences/students-researchers.md +0 -122
- package/website/content/docs/getting-started/index.md +0 -92
- package/website/content/docs/getting-started/installation.md +0 -155
- package/website/content/docs/getting-started/running-agents.md +0 -309
- package/website/content/docs/getting-started.md +0 -91
- package/website/content/docs/integrations/aiflow.md +0 -104
- package/website/content/docs/integrations/drupal.md +0 -105
- package/website/content/docs/migration-guides/agent-schema-comparison.md +0 -232
- package/website/content/docs/migration-guides/anthropic-mcp-to-ossa.md +0 -1750
- package/website/content/docs/migration-guides/crewai-to-ossa.md +0 -274
- package/website/content/docs/migration-guides/drupal-eca-to-ossa.md +0 -2017
- package/website/content/docs/migration-guides/general-agent-schema.yml +0 -247
- package/website/content/docs/migration-guides/index.md +0 -133
- package/website/content/docs/migration-guides/langchain-to-ossa.md +0 -1714
- package/website/content/docs/migration-guides/langflow-to-ossa.md +0 -2075
- package/website/content/docs/migration-guides/migration-manifest.json +0 -64
- package/website/content/docs/migration-guides/openai-to-ossa.md +0 -1202
- package/website/content/docs/openapi-extensions/examples.md +0 -550
- package/website/content/docs/openapi-extensions/index.md +0 -551
- package/website/content/docs/openapi-extensions/operation-extensions.md +0 -457
- package/website/content/docs/openapi-extensions/root-extensions.md +0 -410
- package/website/content/docs/ossa-compliant-badge.md +0 -251
- package/website/content/docs/pre-release/index.md +0 -175
- package/website/content/docs/quick-reference.md +0 -17
- package/website/content/docs/readme.md +0 -35
- package/website/content/docs/releases/v0.2.6.md +0 -99
- package/website/content/docs/schema-reference/agent-capabilities.md +0 -50
- package/website/content/docs/schema-reference/agent-id.md +0 -52
- package/website/content/docs/schema-reference/agent-name.md +0 -50
- package/website/content/docs/schema-reference/agent-role.md +0 -54
- package/website/content/docs/schema-reference/agent-spec.md +0 -406
- package/website/content/docs/schema-reference/agent-version.md +0 -50
- package/website/content/docs/schema-reference/autonomy.md +0 -568
- package/website/content/docs/schema-reference/constraints.md +0 -543
- package/website/content/docs/schema-reference/index.md +0 -45
- package/website/content/docs/schema-reference/llm-config.md +0 -445
- package/website/content/docs/schema-reference/observability.md +0 -654
- package/website/content/docs/schema-reference/ossa-manifest.md +0 -309
- package/website/content/docs/schema-reference/taxonomy.md +0 -509
- package/website/content/docs/schema-reference/tools.md +0 -628
- package/website/content/docs/templates/blog-post.md +0 -43
- package/website/content/docs/types-reference/index.md +0 -105
- package/website/content/docs/use-cases/00-index.md +0 -395
- package/website/content/docs/use-cases/cicd-code-review.md +0 -1236
- package/website/content/docs/use-cases/customer-support.md +0 -1234
- package/website/content/docs/use-cases/enterprise-compliance.md +0 -1208
- package/website/content/docs/use-cases/research-multi-agent.md +0 -1161
- package/website/content/docs/versioning.md +0 -288
- package/website/dev.sh +0 -53
- package/website/docker-compose.dev.yml +0 -36
- package/website/lib/version.ts +0 -35
- package/website/lib/versions.json +0 -103
- package/website/next.config.ts +0 -18
- package/website/nginx.conf +0 -32
- package/website/package-lock.json +0 -9679
- package/website/package.json +0 -59
- package/website/postcss.config.mjs +0 -9
- package/website/scripts/fetch-versions.js +0 -166
- package/website/scripts/generate-examples-index.js +0 -163
- package/website/scripts/merge-docs-to-wiki.ts +0 -207
- package/website/scripts/sync-version.js +0 -72
- package/website/scripts/sync-wiki.ts +0 -322
- package/website/scripts/upload-wiki.ts +0 -199
- package/website/styles/_spacing.scss +0 -453
- package/website/styles/_tokens.scss +0 -245
- package/website/styles/_typography.scss +0 -361
- package/website/styles/_variables.scss +0 -287
- package/website/tailwind.config.ts +0 -170
package/scripts/lib/exec.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Execution Utilities
|
|
3
|
-
*
|
|
4
|
-
* DRY: Reusable command execution with proper error handling
|
|
5
|
-
* Type-safe: Validates commands and handles errors
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { execSync } from 'child_process';
|
|
9
|
-
import { z } from 'zod';
|
|
10
|
-
|
|
11
|
-
const CommandSchema = z.string().min(1);
|
|
12
|
-
|
|
13
|
-
interface ExecOptions {
|
|
14
|
-
encoding?: BufferEncoding;
|
|
15
|
-
stdio?: 'inherit' | 'pipe';
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Execute command with validation and error handling
|
|
20
|
-
*/
|
|
21
|
-
export function execCommand(
|
|
22
|
-
command: string,
|
|
23
|
-
options: ExecOptions = {}
|
|
24
|
-
): string {
|
|
25
|
-
const validatedCommand = CommandSchema.parse(command);
|
|
26
|
-
|
|
27
|
-
try {
|
|
28
|
-
const result = execSync(validatedCommand, {
|
|
29
|
-
encoding: options.encoding || 'utf8',
|
|
30
|
-
stdio: options.stdio || 'pipe',
|
|
31
|
-
});
|
|
32
|
-
return result as string;
|
|
33
|
-
} catch (error: any) {
|
|
34
|
-
const message = error?.message || 'Command execution failed';
|
|
35
|
-
throw new Error(`Command failed: ${validatedCommand}\n${message}`);
|
|
36
|
-
}
|
|
37
|
-
}
|
package/scripts/lib/file-ops.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* File Operations Utilities
|
|
3
|
-
*
|
|
4
|
-
* DRY: Reusable file operations with proper error handling
|
|
5
|
-
* Type-safe: Validates paths and operations
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
9
|
-
import { z } from 'zod';
|
|
10
|
-
|
|
11
|
-
const FilePathSchema = z.string().min(1);
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Read file with validation
|
|
15
|
-
*/
|
|
16
|
-
export function readFile(filePath: string): string {
|
|
17
|
-
const validatedPath = FilePathSchema.parse(filePath);
|
|
18
|
-
|
|
19
|
-
if (!existsSync(validatedPath)) {
|
|
20
|
-
throw new Error(`File not found: ${validatedPath}`);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
try {
|
|
24
|
-
return readFileSync(validatedPath, 'utf8');
|
|
25
|
-
} catch (error) {
|
|
26
|
-
throw new Error(`Failed to read file ${validatedPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Write file with validation
|
|
32
|
-
*/
|
|
33
|
-
export function writeFile(filePath: string, content: string): void {
|
|
34
|
-
const validatedPath = FilePathSchema.parse(filePath);
|
|
35
|
-
|
|
36
|
-
try {
|
|
37
|
-
writeFileSync(validatedPath, content, 'utf8');
|
|
38
|
-
} catch (error) {
|
|
39
|
-
throw new Error(`Failed to write file ${validatedPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Check if file exists
|
|
45
|
-
*/
|
|
46
|
-
export function fileExists(filePath: string): boolean {
|
|
47
|
-
const validatedPath = FilePathSchema.parse(filePath);
|
|
48
|
-
return existsSync(validatedPath);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Validate file exists or throw
|
|
53
|
-
*/
|
|
54
|
-
export function requireFile(filePath: string, errorMessage?: string): void {
|
|
55
|
-
if (!fileExists(filePath)) {
|
|
56
|
-
throw new Error(errorMessage || `Required file not found: ${filePath}`);
|
|
57
|
-
}
|
|
58
|
-
}
|
package/scripts/lib/version.ts
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Version Management Utilities
|
|
3
|
-
*
|
|
4
|
-
* DRY: Single source of truth for version operations
|
|
5
|
-
* Type-safe: Uses Zod for validation
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { readFileSync } from 'fs';
|
|
9
|
-
import { join, dirname } from 'path';
|
|
10
|
-
import { fileURLToPath } from 'url';
|
|
11
|
-
import { z } from 'zod';
|
|
12
|
-
import {
|
|
13
|
-
PackageJsonSchema,
|
|
14
|
-
VersionSchema,
|
|
15
|
-
type PackageJson,
|
|
16
|
-
type Version,
|
|
17
|
-
} from '../schemas/package.schema.js';
|
|
18
|
-
|
|
19
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
20
|
-
const __dirname = dirname(__filename);
|
|
21
|
-
const ROOT = join(__dirname, '..', '..');
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Get current version from package.json with Zod validation
|
|
25
|
-
*/
|
|
26
|
-
export function getCurrentVersion(): Version {
|
|
27
|
-
const packageJsonPath = join(ROOT, 'package.json');
|
|
28
|
-
const content = readFileSync(packageJsonPath, 'utf8');
|
|
29
|
-
|
|
30
|
-
try {
|
|
31
|
-
const json = JSON.parse(content);
|
|
32
|
-
const pkg = PackageJsonSchema.parse(json);
|
|
33
|
-
return VersionSchema.parse(pkg.version);
|
|
34
|
-
} catch (error) {
|
|
35
|
-
if (error instanceof z.ZodError) {
|
|
36
|
-
throw new Error(
|
|
37
|
-
`Invalid package.json version: ${error.errors.map((e) => e.message).join(', ')}`
|
|
38
|
-
);
|
|
39
|
-
}
|
|
40
|
-
throw error;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Get package.json with validation
|
|
46
|
-
*/
|
|
47
|
-
export function getPackageJson(): PackageJson {
|
|
48
|
-
const packageJsonPath = join(ROOT, 'package.json');
|
|
49
|
-
const content = readFileSync(packageJsonPath, 'utf8');
|
|
50
|
-
|
|
51
|
-
try {
|
|
52
|
-
const json = JSON.parse(content);
|
|
53
|
-
return PackageJsonSchema.parse(json);
|
|
54
|
-
} catch (error) {
|
|
55
|
-
if (error instanceof z.ZodError) {
|
|
56
|
-
throw new Error(
|
|
57
|
-
`Invalid package.json: ${error.errors.map((e) => e.message).join(', ')}`
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
|
-
throw error;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Build schema path from version
|
|
66
|
-
*/
|
|
67
|
-
export function getSchemaPath(version: Version): string {
|
|
68
|
-
return `spec/v${version}/ossa-${version}.schema.json`;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Build output path for generated types
|
|
73
|
-
*/
|
|
74
|
-
export function getTypesOutputPath(version: Version): string {
|
|
75
|
-
return `src/types/generated/ossa-${version}.types.ts`;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Build output path for generated Zod schemas
|
|
80
|
-
*/
|
|
81
|
-
export function getZodOutputPath(version: Version): string {
|
|
82
|
-
return `src/types/generated/ossa-${version}.zod.ts`;
|
|
83
|
-
}
|
package/website/.lighthouserc.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { Config } from '@lhci/cli';
|
|
2
|
-
|
|
3
|
-
const config: Config = {
|
|
4
|
-
ci: {
|
|
5
|
-
collect: {
|
|
6
|
-
staticDistDir: './out',
|
|
7
|
-
numberOfRuns: 3,
|
|
8
|
-
},
|
|
9
|
-
assert: {
|
|
10
|
-
assertions: {
|
|
11
|
-
'categories:performance': ['error', { minScore: 0.9 }],
|
|
12
|
-
'categories:accessibility': ['error', { minScore: 0.9 }],
|
|
13
|
-
'categories:best-practices': ['error', { minScore: 0.9 }],
|
|
14
|
-
'categories:seo': ['error', { minScore: 0.9 }],
|
|
15
|
-
},
|
|
16
|
-
},
|
|
17
|
-
upload: {
|
|
18
|
-
target: 'temporary-public-storage',
|
|
19
|
-
},
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export default config;
|
|
24
|
-
|
package/website/.prettierrc
DELETED
|
@@ -1,445 +0,0 @@
|
|
|
1
|
-
# OSSA Website Design System Implementation
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
This document summarizes the design system implementation for the OSSA website based on Issue #45. The implementation follows a phased approach to transform the website from developer-oriented to enterprise-ready with professional polish, accessibility compliance (WCAG 2.1 AA), and clear value articulation.
|
|
6
|
-
|
|
7
|
-
## Implementation Status
|
|
8
|
-
|
|
9
|
-
### ✅ Phase 1: Foundation & Design Tokens (COMPLETED)
|
|
10
|
-
|
|
11
|
-
#### 1.1 Design Token System (`website/styles/_tokens.scss`)
|
|
12
|
-
- **Color Scales**: Full 50-900 scales for all brand colors
|
|
13
|
-
- Primary (Blue-Purple #4A3ECD): 11 shades
|
|
14
|
-
- Secondary (Cyan-Blue #1CB9ED): 11 shades
|
|
15
|
-
- Accent (Purple #9060EA): 11 shades
|
|
16
|
-
- Success (Green #10b981): 11 shades
|
|
17
|
-
- Warning (Amber #f59e0b): 11 shades
|
|
18
|
-
- Error (Red #ef4444): 11 shades
|
|
19
|
-
- Info (Cyan #06b6d4): 11 shades
|
|
20
|
-
- Neutral/Gray: 11 shades
|
|
21
|
-
|
|
22
|
-
- **Gradient Tokens**: CSS custom properties for consistent gradients
|
|
23
|
-
- Primary, Secondary, Accent gradients
|
|
24
|
-
- Hero, Button gradients
|
|
25
|
-
- Success, Warning, Error, Info gradients
|
|
26
|
-
- Background gradients (light, primary, secondary)
|
|
27
|
-
|
|
28
|
-
- **Dark Mode Mappings**: Future-ready dark mode color system
|
|
29
|
-
- Background colors (primary, secondary, tertiary)
|
|
30
|
-
- Text colors (primary, secondary, tertiary)
|
|
31
|
-
|
|
32
|
-
- **Focus Ring Colors**: Accessibility-compliant focus indicators
|
|
33
|
-
- Primary, Secondary, Accent focus rings
|
|
34
|
-
- Alpha variants for layering
|
|
35
|
-
|
|
36
|
-
- **Additional Tokens**:
|
|
37
|
-
- Shadow system (sm, md, lg, xl, 2xl + colored shadows)
|
|
38
|
-
- Border radius (none to 3xl + full)
|
|
39
|
-
- Transitions (fast, base, slow, slower)
|
|
40
|
-
- Z-index layers (dropdown to tooltip)
|
|
41
|
-
- Opacity scale (0-100)
|
|
42
|
-
|
|
43
|
-
#### 1.2 Typography System (`website/styles/_typography.scss`)
|
|
44
|
-
- **Font Families**:
|
|
45
|
-
- Sans: Inter (body, headings, display)
|
|
46
|
-
- Mono: JetBrains Mono (code)
|
|
47
|
-
|
|
48
|
-
- **Font Weights**: 9 levels (100-900)
|
|
49
|
-
|
|
50
|
-
- **Typography Hierarchy**:
|
|
51
|
-
- Display: 72px / 48px mobile (extrabold, 1.1 line-height)
|
|
52
|
-
- H1: 56px / 40px mobile (bold, 1.2 line-height)
|
|
53
|
-
- H2: 40px / 32px mobile (bold, 1.3 line-height)
|
|
54
|
-
- H3: 32px / 28px mobile (semibold, 1.4 line-height)
|
|
55
|
-
- H4: 24px / 22px mobile (semibold, 1.5 line-height)
|
|
56
|
-
- H5: 20px / 18px mobile (semibold, 1.5 line-height)
|
|
57
|
-
- H6: 18px / 16px mobile (semibold, 1.5 line-height)
|
|
58
|
-
- Body: 16px (normal, 1.6 line-height)
|
|
59
|
-
- Small: 14px (normal, 1.5 line-height)
|
|
60
|
-
- Extra Small: 12px (normal, 1.4 line-height)
|
|
61
|
-
|
|
62
|
-
- **Responsive Typography**: Automatic mobile scaling (20-30% reduction)
|
|
63
|
-
|
|
64
|
-
- **Utility Classes**:
|
|
65
|
-
- Typography mixins for all levels
|
|
66
|
-
- Font weight utilities
|
|
67
|
-
- Letter spacing utilities
|
|
68
|
-
- Text transform utilities
|
|
69
|
-
- Text decoration utilities
|
|
70
|
-
- Text alignment utilities
|
|
71
|
-
- Truncate and line-clamp utilities
|
|
72
|
-
|
|
73
|
-
#### 1.3 Spacing & Layout System (`website/styles/_spacing.scss`)
|
|
74
|
-
- **Spacing Scale**: 4px base unit (0 to 96rem)
|
|
75
|
-
- Granular scale: 0, 1px, 2px, 4px, 6px, 8px, 10px, 12px, 14px, 16px...
|
|
76
|
-
- Extended scale up to 384px (96rem)
|
|
77
|
-
|
|
78
|
-
- **Vertical Rhythm System**:
|
|
79
|
-
- Section spacing: sm (48px), md (64px), lg (80px), xl (96px)
|
|
80
|
-
- Component spacing: xs (8px), sm (12px), md (16px), lg (24px), xl (32px)
|
|
81
|
-
- Element spacing: xs (4px), sm (8px), md (12px), lg (16px), xl (24px)
|
|
82
|
-
|
|
83
|
-
- **Container Max-Widths**:
|
|
84
|
-
- sm: 640px
|
|
85
|
-
- md: 768px
|
|
86
|
-
- lg: 1024px
|
|
87
|
-
- xl: 1280px
|
|
88
|
-
- 2xl: 1536px
|
|
89
|
-
|
|
90
|
-
- **Content Max-Widths** (for readable text):
|
|
91
|
-
- sm: 576px
|
|
92
|
-
- md: 672px
|
|
93
|
-
- lg: 768px
|
|
94
|
-
- xl: 896px
|
|
95
|
-
- 2xl: 1024px
|
|
96
|
-
- 3xl: 1152px
|
|
97
|
-
- 4xl: 1280px
|
|
98
|
-
|
|
99
|
-
- **Utility Classes**:
|
|
100
|
-
- Container classes with responsive padding
|
|
101
|
-
- Content container classes
|
|
102
|
-
- Section spacing classes
|
|
103
|
-
- Stack (vertical) and inline (horizontal) spacing
|
|
104
|
-
- Margin utilities (all directions)
|
|
105
|
-
- Padding utilities (all directions)
|
|
106
|
-
- Gap utilities for flexbox/grid
|
|
107
|
-
|
|
108
|
-
#### 1.4 Variables Integration (`website/styles/_variables.scss`)
|
|
109
|
-
- Imports all token files (@use syntax)
|
|
110
|
-
- Maintains backward compatibility with existing variable names
|
|
111
|
-
- Maps old variables to new token system
|
|
112
|
-
|
|
113
|
-
### ✅ Phase 2: Core Component Library (COMPLETED)
|
|
114
|
-
|
|
115
|
-
#### 2.1 Button Component (`website/components/ui/Button.tsx`)
|
|
116
|
-
- **Variants**: 4 types
|
|
117
|
-
- Primary: Gradient background (primary-500 to primary-600)
|
|
118
|
-
- Secondary: Gradient background (secondary-500 to secondary-600)
|
|
119
|
-
- Outline: Transparent with border
|
|
120
|
-
- Ghost: Transparent with hover background
|
|
121
|
-
|
|
122
|
-
- **Sizes**: 3 options
|
|
123
|
-
- sm: text-sm, px-3, py-1.5
|
|
124
|
-
- md: text-base, px-4, py-2
|
|
125
|
-
- lg: text-lg, px-6, py-3
|
|
126
|
-
|
|
127
|
-
- **States**: 6 states
|
|
128
|
-
- Default: Base styling
|
|
129
|
-
- Hover: Enhanced shadow, darker gradient
|
|
130
|
-
- Active: Darkest gradient
|
|
131
|
-
- Focus: 2px ring with offset
|
|
132
|
-
- Disabled: 50% opacity, no pointer events
|
|
133
|
-
- Loading: Animated spinner, disabled state
|
|
134
|
-
|
|
135
|
-
- **Features**:
|
|
136
|
-
- Left/right icon support
|
|
137
|
-
- Full width option
|
|
138
|
-
- Accessible (ARIA attributes)
|
|
139
|
-
- Keyboard navigation support
|
|
140
|
-
|
|
141
|
-
#### 2.2 Card Component (`website/components/ui/Card.tsx`)
|
|
142
|
-
- **Variants**: 4 types
|
|
143
|
-
- Default: White background, border, subtle shadow
|
|
144
|
-
- Bordered: White background, 2px border
|
|
145
|
-
- Elevated: White background, large shadow
|
|
146
|
-
- Flat: Gray background, no border
|
|
147
|
-
|
|
148
|
-
- **Padding**: 4 options (none, sm, md, lg)
|
|
149
|
-
|
|
150
|
-
- **Interactive**: Optional hover effects
|
|
151
|
-
- Enhanced shadow
|
|
152
|
-
- Border color change
|
|
153
|
-
- Subtle scale animation
|
|
154
|
-
|
|
155
|
-
- **Sub-components**:
|
|
156
|
-
- CardHeader: Top section with margin
|
|
157
|
-
- CardTitle: Heading (h1-h6 support)
|
|
158
|
-
- CardDescription: Subtitle text
|
|
159
|
-
- CardContent: Main content area
|
|
160
|
-
- CardFooter: Bottom section with border
|
|
161
|
-
|
|
162
|
-
- **Semantic HTML**: Supports div, article, section
|
|
163
|
-
|
|
164
|
-
#### 2.3 Form Components
|
|
165
|
-
|
|
166
|
-
**Input Component** (`website/components/ui/Input.tsx`):
|
|
167
|
-
- Label with required indicator
|
|
168
|
-
- Error states with red styling
|
|
169
|
-
- Helper text
|
|
170
|
-
- Left/right icon support
|
|
171
|
-
- Full width option
|
|
172
|
-
- Accessibility:
|
|
173
|
-
- Auto-generated IDs
|
|
174
|
-
- aria-invalid
|
|
175
|
-
- aria-describedby
|
|
176
|
-
- Proper label association
|
|
177
|
-
|
|
178
|
-
**Select Component** (`website/components/ui/Select.tsx`):
|
|
179
|
-
- Custom dropdown styling
|
|
180
|
-
- Label with required indicator
|
|
181
|
-
- Error states
|
|
182
|
-
- Helper text
|
|
183
|
-
- Options array or children support
|
|
184
|
-
- Custom dropdown icon
|
|
185
|
-
- Full accessibility support
|
|
186
|
-
|
|
187
|
-
**Checkbox Component** (`website/components/ui/Checkbox.tsx`):
|
|
188
|
-
- Label and helper text
|
|
189
|
-
- Error states
|
|
190
|
-
- Proper focus indicators (2px ring)
|
|
191
|
-
- Accessible (ARIA attributes)
|
|
192
|
-
- Disabled state support
|
|
193
|
-
|
|
194
|
-
**Radio Component** (`website/components/ui/Radio.tsx`):
|
|
195
|
-
- Label and helper text
|
|
196
|
-
- Error states
|
|
197
|
-
- Proper focus indicators (2px ring)
|
|
198
|
-
- Accessible (ARIA attributes)
|
|
199
|
-
- Disabled state support
|
|
200
|
-
|
|
201
|
-
**Textarea Component** (`website/components/ui/Textarea.tsx`):
|
|
202
|
-
- Label with required indicator
|
|
203
|
-
- Error states
|
|
204
|
-
- Helper text
|
|
205
|
-
- Character count (optional)
|
|
206
|
-
- Resize options (none, vertical, horizontal, both)
|
|
207
|
-
- Min-height: 100px
|
|
208
|
-
- Full accessibility support
|
|
209
|
-
|
|
210
|
-
#### 2.4 Badge & Tag Components
|
|
211
|
-
|
|
212
|
-
**Badge Component** (`website/components/ui/Badge.tsx`):
|
|
213
|
-
- **Variants**: 7 types
|
|
214
|
-
- default, success, warning, error, info, primary, secondary
|
|
215
|
-
- **Sizes**: sm, md, lg
|
|
216
|
-
- **Features**:
|
|
217
|
-
- Optional dot indicator
|
|
218
|
-
- Rounded full (pill shape)
|
|
219
|
-
- Border styling
|
|
220
|
-
- Color-coded backgrounds
|
|
221
|
-
|
|
222
|
-
**Tag Component** (`website/components/ui/Tag.tsx`):
|
|
223
|
-
- **Variants**: 7 types (same as Badge)
|
|
224
|
-
- **Sizes**: sm, md, lg
|
|
225
|
-
- **Features**:
|
|
226
|
-
- Removable option with X button
|
|
227
|
-
- onRemove callback
|
|
228
|
-
- Rounded corners (not full)
|
|
229
|
-
- Hover effects
|
|
230
|
-
- Accessible remove button
|
|
231
|
-
|
|
232
|
-
#### 2.5 Component Export (`website/components/ui/index.ts`)
|
|
233
|
-
- Barrel export file for easy importing
|
|
234
|
-
- Exports all components and their TypeScript types
|
|
235
|
-
- Usage: `import { Button, Card, Input } from '@/components/ui'`
|
|
236
|
-
|
|
237
|
-
## Accessibility Features Implemented
|
|
238
|
-
|
|
239
|
-
### WCAG 2.1 AA Compliance
|
|
240
|
-
- ✅ **Focus Indicators**: 2px ring with offset on all interactive elements
|
|
241
|
-
- ✅ **Color Contrast**: All text/background combinations meet 4.5:1 (normal) or 3:1 (large text)
|
|
242
|
-
- ✅ **Keyboard Navigation**: All components fully keyboard accessible
|
|
243
|
-
- ✅ **ARIA Attributes**: Proper labels, roles, and states
|
|
244
|
-
- ✅ **Form Labels**: All inputs properly associated with labels
|
|
245
|
-
- ✅ **Error States**: Clear error messages with role="alert"
|
|
246
|
-
- ✅ **Touch Targets**: Minimum 44x44px for mobile (buttons, checkboxes, radios)
|
|
247
|
-
- ✅ **Screen Reader Support**: Descriptive text, aria-describedby, aria-invalid
|
|
248
|
-
|
|
249
|
-
### Accessibility Utilities
|
|
250
|
-
- sr-only class for screen reader only content
|
|
251
|
-
- focus:not-sr-only for skip links
|
|
252
|
-
- aria-busy for loading states
|
|
253
|
-
- aria-hidden for decorative icons
|
|
254
|
-
|
|
255
|
-
## Design System Benefits
|
|
256
|
-
|
|
257
|
-
### For Developers
|
|
258
|
-
- **Consistent API**: All components follow same prop patterns
|
|
259
|
-
- **TypeScript Support**: Full type definitions for all components
|
|
260
|
-
- **Easy Imports**: Barrel exports for clean imports
|
|
261
|
-
- **Responsive**: Mobile-first with automatic scaling
|
|
262
|
-
- **Customizable**: className prop for extending styles
|
|
263
|
-
- **Well-Documented**: Inline comments and prop descriptions
|
|
264
|
-
|
|
265
|
-
### For Users
|
|
266
|
-
- **Accessible**: WCAG 2.1 AA compliant
|
|
267
|
-
- **Performant**: Optimized transitions and animations
|
|
268
|
-
- **Responsive**: Works on all screen sizes
|
|
269
|
-
- **Consistent**: Unified visual language
|
|
270
|
-
- **Professional**: Enterprise-grade polish
|
|
271
|
-
|
|
272
|
-
### For the Project
|
|
273
|
-
- **Maintainable**: Centralized design tokens
|
|
274
|
-
- **Scalable**: Easy to add new components
|
|
275
|
-
- **Flexible**: Supports theming and customization
|
|
276
|
-
- **Future-Ready**: Dark mode support prepared
|
|
277
|
-
- **Brand Consistent**: Follows OSSA brand guidelines
|
|
278
|
-
|
|
279
|
-
## Next Steps (Remaining Phases)
|
|
280
|
-
|
|
281
|
-
### Phase 3: Layout & Navigation (Weeks 5-6)
|
|
282
|
-
- [ ] Enhance Header component (active states, keyboard nav)
|
|
283
|
-
- [ ] Enhance Footer component (multi-column, social links)
|
|
284
|
-
- [ ] Create Breadcrumb component
|
|
285
|
-
- [ ] Create TableOfContents component
|
|
286
|
-
- [ ] Create Sidebar navigation component
|
|
287
|
-
- [ ] Improve mobile navigation
|
|
288
|
-
|
|
289
|
-
### Phase 4: Content & Messaging (Weeks 7-8)
|
|
290
|
-
- [ ] Homepage redesign with new components
|
|
291
|
-
- [ ] Create ValueProposition component
|
|
292
|
-
- [ ] Create ComparisonMatrix component
|
|
293
|
-
- [ ] Create FeatureGrid component
|
|
294
|
-
- [ ] Create SocialProof component
|
|
295
|
-
- [ ] Add architecture diagrams
|
|
296
|
-
- [ ] Create CodeBlock component with copy button
|
|
297
|
-
- [ ] Create CodeExample component
|
|
298
|
-
- [ ] Create enterprise landing page
|
|
299
|
-
|
|
300
|
-
### Phase 5: Interactive Elements (Weeks 9-10)
|
|
301
|
-
- [ ] Create LoadingSpinner component
|
|
302
|
-
- [ ] Create Skeleton component
|
|
303
|
-
- [ ] Create Toast notification component
|
|
304
|
-
- [ ] Add scroll animations
|
|
305
|
-
- [ ] Add micro-interactions
|
|
306
|
-
- [ ] Enhance playground
|
|
307
|
-
|
|
308
|
-
### Phase 6: Accessibility & Performance (Weeks 11-12)
|
|
309
|
-
- [ ] Complete accessibility audit
|
|
310
|
-
- [ ] Add SkipLink component
|
|
311
|
-
- [ ] Ensure all images have alt text
|
|
312
|
-
- [ ] Optimize performance (Lighthouse >90)
|
|
313
|
-
- [ ] Optimize Core Web Vitals
|
|
314
|
-
- [ ] Add lazy loading
|
|
315
|
-
|
|
316
|
-
### Phase 7: Testing & QA (Weeks 13-14)
|
|
317
|
-
- [ ] Set up visual regression testing
|
|
318
|
-
- [ ] Cross-browser testing
|
|
319
|
-
- [ ] Component testing
|
|
320
|
-
- [ ] Accessibility testing
|
|
321
|
-
- [ ] Performance testing
|
|
322
|
-
|
|
323
|
-
## Files Created
|
|
324
|
-
|
|
325
|
-
### Design Tokens
|
|
326
|
-
- `website/styles/_tokens.scss` - Color scales, gradients, shadows, etc.
|
|
327
|
-
- `website/styles/_typography.scss` - Typography system
|
|
328
|
-
- `website/styles/_spacing.scss` - Spacing and layout system
|
|
329
|
-
- `website/styles/_variables.scss` - Updated with imports
|
|
330
|
-
|
|
331
|
-
### UI Components
|
|
332
|
-
- `website/components/ui/Button.tsx` - Button component
|
|
333
|
-
- `website/components/ui/Card.tsx` - Card component with sub-components
|
|
334
|
-
- `website/components/ui/Input.tsx` - Input component
|
|
335
|
-
- `website/components/ui/Select.tsx` - Select component
|
|
336
|
-
- `website/components/ui/Checkbox.tsx` - Checkbox component
|
|
337
|
-
- `website/components/ui/Radio.tsx` - Radio component
|
|
338
|
-
- `website/components/ui/Textarea.tsx` - Textarea component
|
|
339
|
-
- `website/components/ui/Badge.tsx` - Badge component
|
|
340
|
-
- `website/components/ui/Tag.tsx` - Tag component
|
|
341
|
-
- `website/components/ui/index.ts` - Barrel export
|
|
342
|
-
|
|
343
|
-
## Usage Examples
|
|
344
|
-
|
|
345
|
-
### Button
|
|
346
|
-
```tsx
|
|
347
|
-
import { Button } from '@/components/ui';
|
|
348
|
-
|
|
349
|
-
<Button variant="primary" size="lg" loading={isLoading}>
|
|
350
|
-
Get Started
|
|
351
|
-
</Button>
|
|
352
|
-
|
|
353
|
-
<Button variant="outline" leftIcon={<Icon />}>
|
|
354
|
-
Learn More
|
|
355
|
-
</Button>
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
### Card
|
|
359
|
-
```tsx
|
|
360
|
-
import { Card, CardHeader, CardTitle, CardDescription, CardContent } from '@/components/ui';
|
|
361
|
-
|
|
362
|
-
<Card variant="elevated" interactive>
|
|
363
|
-
<CardHeader>
|
|
364
|
-
<CardTitle>Feature Title</CardTitle>
|
|
365
|
-
<CardDescription>Feature description</CardDescription>
|
|
366
|
-
</CardHeader>
|
|
367
|
-
<CardContent>
|
|
368
|
-
Content goes here
|
|
369
|
-
</CardContent>
|
|
370
|
-
</Card>
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
### Form
|
|
374
|
-
```tsx
|
|
375
|
-
import { Input, Select, Checkbox, Textarea } from '@/components/ui';
|
|
376
|
-
|
|
377
|
-
<Input
|
|
378
|
-
label="Email"
|
|
379
|
-
type="email"
|
|
380
|
-
required
|
|
381
|
-
error={errors.email}
|
|
382
|
-
helperText="We'll never share your email"
|
|
383
|
-
/>
|
|
384
|
-
|
|
385
|
-
<Select
|
|
386
|
-
label="Country"
|
|
387
|
-
options={countries}
|
|
388
|
-
error={errors.country}
|
|
389
|
-
/>
|
|
390
|
-
|
|
391
|
-
<Checkbox
|
|
392
|
-
label="I agree to the terms"
|
|
393
|
-
error={errors.terms}
|
|
394
|
-
/>
|
|
395
|
-
|
|
396
|
-
<Textarea
|
|
397
|
-
label="Message"
|
|
398
|
-
showCharCount
|
|
399
|
-
maxLength={500}
|
|
400
|
-
resize="vertical"
|
|
401
|
-
/>
|
|
402
|
-
```
|
|
403
|
-
|
|
404
|
-
### Badge & Tag
|
|
405
|
-
```tsx
|
|
406
|
-
import { Badge, Tag } from '@/components/ui';
|
|
407
|
-
|
|
408
|
-
<Badge variant="success" dot>Active</Badge>
|
|
409
|
-
<Badge variant="warning" size="sm">Beta</Badge>
|
|
410
|
-
|
|
411
|
-
<Tag variant="primary" removable onRemove={() => handleRemove()}>
|
|
412
|
-
React
|
|
413
|
-
</Tag>
|
|
414
|
-
```
|
|
415
|
-
|
|
416
|
-
## Technical Notes
|
|
417
|
-
|
|
418
|
-
### Dependencies
|
|
419
|
-
- No additional dependencies required
|
|
420
|
-
- Uses existing Tailwind CSS configuration
|
|
421
|
-
- Compatible with Next.js 15 and React 18
|
|
422
|
-
|
|
423
|
-
### Browser Support
|
|
424
|
-
- Modern browsers (Chrome, Firefox, Safari, Edge)
|
|
425
|
-
- Progressive enhancement for older browsers
|
|
426
|
-
- Graceful degradation for unsupported features
|
|
427
|
-
|
|
428
|
-
### Performance
|
|
429
|
-
- Minimal CSS footprint (SCSS compiled to CSS)
|
|
430
|
-
- No runtime CSS-in-JS overhead
|
|
431
|
-
- Optimized transitions (GPU-accelerated)
|
|
432
|
-
- Tree-shakeable exports
|
|
433
|
-
|
|
434
|
-
## Conclusion
|
|
435
|
-
|
|
436
|
-
Phase 1 (Foundation & Design Tokens) and Phase 2 (Core Component Library) are complete. The design system provides a solid foundation for building the remaining phases. All components are production-ready, accessible, and follow best practices.
|
|
437
|
-
|
|
438
|
-
The implementation prioritizes:
|
|
439
|
-
1. **Accessibility** - WCAG 2.1 AA compliance from the start
|
|
440
|
-
2. **Developer Experience** - Consistent API, TypeScript support
|
|
441
|
-
3. **Performance** - Optimized animations, minimal overhead
|
|
442
|
-
4. **Maintainability** - Centralized tokens, clear structure
|
|
443
|
-
5. **Scalability** - Easy to extend and customize
|
|
444
|
-
|
|
445
|
-
Next steps involve implementing the remaining phases (3-7) to complete the full design system transformation outlined in Issue #45.
|
package/website/Dockerfile
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# OSSA Website - Next.js Dev Server (for quick deployment)
|
|
2
|
-
# Build from project root to access examples directory
|
|
3
|
-
FROM node:20-alpine
|
|
4
|
-
|
|
5
|
-
WORKDIR /app
|
|
6
|
-
|
|
7
|
-
# Copy package files
|
|
8
|
-
COPY website/package*.json ./website/
|
|
9
|
-
RUN cd website && npm install --legacy-peer-deps
|
|
10
|
-
|
|
11
|
-
# Copy examples directory (needed for generate-examples script)
|
|
12
|
-
COPY examples ./examples
|
|
13
|
-
|
|
14
|
-
# Copy website source code
|
|
15
|
-
COPY website ./website
|
|
16
|
-
|
|
17
|
-
WORKDIR /app/website
|
|
18
|
-
|
|
19
|
-
# Generate examples.json - this MUST succeed
|
|
20
|
-
RUN npm run generate-examples
|
|
21
|
-
|
|
22
|
-
# Verify examples.json was created and has content
|
|
23
|
-
RUN test -f public/examples.json && echo "✅ examples.json created" || (echo "❌ examples.json NOT FOUND" && exit 1)
|
|
24
|
-
RUN test -s public/examples.json && echo "✅ examples.json has content" || (echo "❌ examples.json is empty" && exit 1)
|
|
25
|
-
|
|
26
|
-
# Expose port
|
|
27
|
-
EXPOSE 3000
|
|
28
|
-
|
|
29
|
-
# Start Next.js dev server
|
|
30
|
-
CMD ["npm", "run", "dev"]
|