@bluefly/openstandardagents 0.2.4 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (511) hide show
  1. package/.cursorrules +84 -0
  2. package/.devfile.yaml +87 -0
  3. package/.env.example +25 -3
  4. package/.github/ISSUE_TEMPLATE/bug_report.yml +63 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.yml +40 -0
  6. package/.github/workflows/dependabot-comment.yml +34 -0
  7. package/.github/workflows/pr-comment.yml +33 -0
  8. package/.github/workflows/release.yml +1 -1
  9. package/.husky/pre-commit +5 -0
  10. package/.kiro/config.json +21 -0
  11. package/.kiro/settings/mcp.json +61 -0
  12. package/.kiro/specs/scripts-migration-api-first/design.md +883 -0
  13. package/.kiro/specs/scripts-migration-api-first/requirements.md +165 -0
  14. package/.kiro/specs/scripts-migration-api-first/tasks.md +539 -0
  15. package/.kiro/specs/website-brand-identity/design.md +1060 -0
  16. package/.kiro/specs/website-brand-identity/requirements.md +287 -0
  17. package/.kiro/specs/website-brand-identity/tasks.md +981 -0
  18. package/.releaserc.json +5 -4
  19. package/.version.json +6 -0
  20. package/CHANGELOG.md +163 -96
  21. package/CONTRIBUTING.md +23 -5
  22. package/README.md +130 -43
  23. package/bin/ossa +24 -3
  24. package/bin/ossa-dev +42 -0
  25. package/bin/ossa-export +32 -0
  26. package/bin/ossa-generate +60 -0
  27. package/bin/ossa-health +40 -0
  28. package/bin/ossa-init +26 -0
  29. package/bin/ossa-validate-all +55 -0
  30. package/bin/ossa-version +23 -0
  31. package/bin/validate-ossa-0.2.4.ts +244 -0
  32. package/bin/validate-ossa-0.2.5-RC.ts +244 -0
  33. package/bin/validate-ossa.ts +273 -0
  34. package/dist/di-container.d.ts +1 -1
  35. package/dist/di-container.d.ts.map +1 -1
  36. package/dist/di-container.js.map +1 -1
  37. package/dist/repositories/schema.repository.d.ts +17 -2
  38. package/dist/repositories/schema.repository.d.ts.map +1 -1
  39. package/dist/repositories/schema.repository.js +102 -19
  40. package/dist/repositories/schema.repository.js.map +1 -1
  41. package/dist/services/generation.service.d.ts +7 -5
  42. package/dist/services/generation.service.d.ts.map +1 -1
  43. package/dist/services/generation.service.js +92 -44
  44. package/dist/services/generation.service.js.map +1 -1
  45. package/dist/services/github-sync/github-client.d.ts +14 -0
  46. package/dist/services/github-sync/github-client.d.ts.map +1 -0
  47. package/dist/services/github-sync/github-client.js +41 -0
  48. package/dist/services/github-sync/github-client.js.map +1 -0
  49. package/dist/services/github-sync/gitlab-client.d.ts +17 -0
  50. package/dist/services/github-sync/gitlab-client.d.ts.map +1 -0
  51. package/dist/services/github-sync/gitlab-client.js +42 -0
  52. package/dist/services/github-sync/gitlab-client.js.map +1 -0
  53. package/dist/services/github-sync/schemas.d.ts +46 -0
  54. package/dist/services/github-sync/schemas.d.ts.map +1 -0
  55. package/dist/services/github-sync/schemas.js +36 -0
  56. package/dist/services/github-sync/schemas.js.map +1 -0
  57. package/dist/services/github-sync/sync.service.d.ts +27 -0
  58. package/dist/services/github-sync/sync.service.d.ts.map +1 -0
  59. package/dist/services/github-sync/sync.service.js +99 -0
  60. package/dist/services/github-sync/sync.service.js.map +1 -0
  61. package/dist/services/gitlab-agent.service.d.ts +94 -0
  62. package/dist/services/gitlab-agent.service.d.ts.map +1 -0
  63. package/dist/services/gitlab-agent.service.js +162 -0
  64. package/dist/services/gitlab-agent.service.js.map +1 -0
  65. package/dist/services/migration.service.d.ts +3 -3
  66. package/dist/services/migration.service.d.ts.map +1 -1
  67. package/dist/services/migration.service.js +108 -61
  68. package/dist/services/migration.service.js.map +1 -1
  69. package/dist/services/release-automation/base-crud.service.d.ts +93 -0
  70. package/dist/services/release-automation/base-crud.service.d.ts.map +1 -0
  71. package/dist/services/release-automation/base-crud.service.js +68 -0
  72. package/dist/services/release-automation/base-crud.service.js.map +1 -0
  73. package/dist/services/release-automation/index.d.ts +12 -0
  74. package/dist/services/release-automation/index.d.ts.map +1 -0
  75. package/dist/services/release-automation/index.js +12 -0
  76. package/dist/services/release-automation/index.js.map +1 -0
  77. package/dist/services/release-automation/merge-request.service.d.ts +119 -0
  78. package/dist/services/release-automation/merge-request.service.d.ts.map +1 -0
  79. package/dist/services/release-automation/merge-request.service.js +212 -0
  80. package/dist/services/release-automation/merge-request.service.js.map +1 -0
  81. package/dist/services/release-automation/milestone.service.d.ts +104 -0
  82. package/dist/services/release-automation/milestone.service.d.ts.map +1 -0
  83. package/dist/services/release-automation/milestone.service.js +207 -0
  84. package/dist/services/release-automation/milestone.service.js.map +1 -0
  85. package/dist/services/release-automation/release.service.d.ts +118 -0
  86. package/dist/services/release-automation/release.service.d.ts.map +1 -0
  87. package/dist/services/release-automation/release.service.js +207 -0
  88. package/dist/services/release-automation/release.service.js.map +1 -0
  89. package/dist/services/release-automation/schemas/release.schema.d.ts +299 -0
  90. package/dist/services/release-automation/schemas/release.schema.d.ts.map +1 -0
  91. package/dist/services/release-automation/schemas/release.schema.js +269 -0
  92. package/dist/services/release-automation/schemas/release.schema.js.map +1 -0
  93. package/dist/services/release-automation/tag.service.d.ts +99 -0
  94. package/dist/services/release-automation/tag.service.d.ts.map +1 -0
  95. package/dist/services/release-automation/tag.service.js +180 -0
  96. package/dist/services/release-automation/tag.service.js.map +1 -0
  97. package/dist/services/release-automation/webhook.service.d.ts +37 -0
  98. package/dist/services/release-automation/webhook.service.d.ts.map +1 -0
  99. package/dist/services/release-automation/webhook.service.js +173 -0
  100. package/dist/services/release-automation/webhook.service.js.map +1 -0
  101. package/dist/services/runtime/claude/capability-mapper.d.ts +84 -0
  102. package/dist/services/runtime/claude/capability-mapper.d.ts.map +1 -0
  103. package/dist/services/runtime/claude/capability-mapper.js +245 -0
  104. package/dist/services/runtime/claude/capability-mapper.js.map +1 -0
  105. package/dist/services/runtime/claude/claude-adapter.d.ts +80 -0
  106. package/dist/services/runtime/claude/claude-adapter.d.ts.map +1 -0
  107. package/dist/services/runtime/claude/claude-adapter.js +287 -0
  108. package/dist/services/runtime/claude/claude-adapter.js.map +1 -0
  109. package/dist/services/runtime/claude/manifest-parser.d.ts +77 -0
  110. package/dist/services/runtime/claude/manifest-parser.d.ts.map +1 -0
  111. package/dist/services/runtime/claude/manifest-parser.js +169 -0
  112. package/dist/services/runtime/claude/manifest-parser.js.map +1 -0
  113. package/dist/services/runtime/claude/types.d.ts +115 -0
  114. package/dist/services/runtime/claude/types.d.ts.map +1 -0
  115. package/dist/services/runtime/claude/types.js +6 -0
  116. package/dist/services/runtime/claude/types.js.map +1 -0
  117. package/dist/services/runtime/openai.adapter.d.ts.map +1 -1
  118. package/dist/services/runtime/openai.adapter.js.map +1 -1
  119. package/dist/services/validation.service.d.ts.map +1 -1
  120. package/dist/services/validation.service.js +35 -11
  121. package/dist/services/validation.service.js.map +1 -1
  122. package/dist/services/validators/anthropic.validator.d.ts +2 -2
  123. package/dist/services/validators/anthropic.validator.d.ts.map +1 -1
  124. package/dist/services/validators/anthropic.validator.js +14 -9
  125. package/dist/services/validators/anthropic.validator.js.map +1 -1
  126. package/dist/services/validators/autogen.validator.d.ts +2 -2
  127. package/dist/services/validators/autogen.validator.d.ts.map +1 -1
  128. package/dist/services/validators/autogen.validator.js +18 -15
  129. package/dist/services/validators/autogen.validator.js.map +1 -1
  130. package/dist/services/validators/crewai.validator.d.ts +2 -2
  131. package/dist/services/validators/crewai.validator.d.ts.map +1 -1
  132. package/dist/services/validators/crewai.validator.js +18 -17
  133. package/dist/services/validators/crewai.validator.js.map +1 -1
  134. package/dist/services/validators/cursor.validator.d.ts +2 -2
  135. package/dist/services/validators/cursor.validator.d.ts.map +1 -1
  136. package/dist/services/validators/cursor.validator.js +15 -11
  137. package/dist/services/validators/cursor.validator.js.map +1 -1
  138. package/dist/services/validators/langchain.validator.d.ts +2 -2
  139. package/dist/services/validators/langchain.validator.d.ts.map +1 -1
  140. package/dist/services/validators/langchain.validator.js +14 -11
  141. package/dist/services/validators/langchain.validator.js.map +1 -1
  142. package/dist/services/validators/langflow.validator.d.ts +2 -2
  143. package/dist/services/validators/langflow.validator.d.ts.map +1 -1
  144. package/dist/services/validators/langflow.validator.js +14 -9
  145. package/dist/services/validators/langflow.validator.js.map +1 -1
  146. package/dist/services/validators/langgraph.validator.d.ts +2 -2
  147. package/dist/services/validators/langgraph.validator.d.ts.map +1 -1
  148. package/dist/services/validators/langgraph.validator.js +23 -18
  149. package/dist/services/validators/langgraph.validator.js.map +1 -1
  150. package/dist/services/validators/llamaindex.validator.d.ts +2 -2
  151. package/dist/services/validators/llamaindex.validator.d.ts.map +1 -1
  152. package/dist/services/validators/llamaindex.validator.js +19 -16
  153. package/dist/services/validators/llamaindex.validator.js.map +1 -1
  154. package/dist/services/validators/openai.validator.d.ts +2 -2
  155. package/dist/services/validators/openai.validator.d.ts.map +1 -1
  156. package/dist/services/validators/openai.validator.js +20 -16
  157. package/dist/services/validators/openai.validator.js.map +1 -1
  158. package/dist/services/validators/vercel-ai.validator.d.ts +2 -2
  159. package/dist/services/validators/vercel-ai.validator.d.ts.map +1 -1
  160. package/dist/services/validators/vercel-ai.validator.js +16 -15
  161. package/dist/services/validators/vercel-ai.validator.js.map +1 -1
  162. package/dist/spec/v0.2.0/ossa-0.2.0.schema.json +0 -0
  163. package/dist/spec/v0.2.1/ossa-0.2.1.schema.json +555 -0
  164. package/dist/spec/v0.2.3/CHANGELOG.md +7 -7
  165. package/dist/spec/v0.2.3/README.md +9 -9
  166. package/dist/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +18 -18
  167. package/{spec/v0.2.4-dev → dist/spec/v0.2.4}/CHANGELOG.md +8 -8
  168. package/dist/spec/{v0.2.4-dev → v0.2.4}/migrations/v0.2.3-to-v0.2.4.md +10 -10
  169. package/dist/spec/{v0.2.4-dev/ossa-0.2.4-dev.yaml → v0.2.4/ossa-0.2.4.yaml} +1 -1
  170. package/dist/spec/v0.2.5/CHANGELOG.md +401 -0
  171. package/dist/spec/v0.2.5/README.md +72 -0
  172. package/dist/spec/v0.2.5/migrations/v0.2.3-to-v0.2.4.md +599 -0
  173. package/dist/spec/v0.2.5/ossa-0.2.5.schema.json +1696 -0
  174. package/dist/spec/v0.2.5/ossa-0.2.5.yaml +581 -0
  175. package/dist/spec/v0.2.5-RC/CHANGELOG.md +401 -0
  176. package/dist/spec/v0.2.5-RC/README.md +72 -0
  177. package/{spec/v0.2.4-dev → dist/spec/v0.2.5-RC}/migrations/v0.2.3-to-v0.2.4.md +10 -10
  178. package/dist/spec/v0.2.5-RC/ossa-0.2.5-RC.schema.json +1696 -0
  179. package/dist/spec/v0.2.5-RC/ossa-0.2.5-RC.yaml +581 -0
  180. package/dist/spec/v0.2.6/CHANGELOG.md +401 -0
  181. package/dist/spec/v0.2.6/README.md +72 -0
  182. package/dist/spec/v0.2.6/migrations/v0.2.3-to-v0.2.4.md +599 -0
  183. package/dist/spec/v0.2.6/migrations/v0.2.5-RC-to-v0.2.6.md +65 -0
  184. package/dist/spec/v0.2.6/ossa-0.2.6.schema.json +1786 -0
  185. package/dist/spec/v0.2.6/ossa-0.2.6.yaml +581 -0
  186. package/dist/spec/v0.2.6-dev/CHANGELOG.md +164 -0
  187. package/dist/spec/v0.2.6-dev/README.md +75 -0
  188. package/dist/spec/v0.2.6-dev/migrations/v0.2.2-to-v0.2.3.md +343 -0
  189. package/dist/spec/v0.2.6-dev/migrations/v0.2.3-to-v0.2.4.md +599 -0
  190. package/dist/spec/v0.2.6-dev/ossa-0.2.5.schema.json +1696 -0
  191. package/dist/spec/v0.2.6-dev/ossa-0.2.5.yaml +581 -0
  192. package/dist/spec/{v0.2.5-dev/ossa-0.2.5-dev.schema.json → v0.2.6-dev/ossa-0.2.6-dev.schema.json} +323 -359
  193. package/dist/spec/v0.2.6-dev/ossa-0.2.6-dev.yaml +448 -0
  194. package/dist/spec/v0.2.7/core/agentgraph.md +324 -0
  195. package/dist/spec/v0.2.7/resources/agentgraph.yaml +135 -0
  196. package/dist/types/index.d.ts +6 -1
  197. package/dist/types/index.d.ts.map +1 -1
  198. package/docs/brand-guide/01-brand-overview.md +37 -0
  199. package/docs/brand-guide/02-logo-usage.md +43 -0
  200. package/docs/brand-guide/03-color-palette.md +70 -0
  201. package/docs/brand-guide/04-typography.md +82 -0
  202. package/docs/brand-guide/05-voice-and-tone.md +108 -0
  203. package/docs/brand-guide/06-visual-elements.md +137 -0
  204. package/docs/brand-guide/07-application-examples.md +153 -0
  205. package/docs/brand-guide/OssaLogo/OssA_Logo.svg +21 -0
  206. package/docs/brand-guide/OssaLogo/brand.af +0 -0
  207. package/docs/brand-guide/README.md +107 -0
  208. package/docs/comparison.md +315 -0
  209. package/docs/operations/automation-roadmap.md +245 -0
  210. package/docs/operations/github-sync-strategy.md +357 -0
  211. package/examples/anthropic/claude-assistant.ossa.json +5 -4
  212. package/examples/autogen/multi-agent.ossa.json +6 -4
  213. package/examples/bridges/Dockerfile.production +1 -1
  214. package/examples/crewai/research-team.ossa.json +14 -5
  215. package/examples/cursor/code-review-agent.ossa.json +21 -6
  216. package/examples/enterprise/agent.yml +1 -1
  217. package/examples/getting-started/hello-world-complete.ossa.yaml +2 -2
  218. package/examples/integration-patterns/agent-to-agent-orchestration.ossa.yaml +4 -4
  219. package/examples/langchain/chain-agent.ossa.json +21 -5
  220. package/examples/langflow/workflow-agent.ossa.json +2 -3
  221. package/examples/langgraph/state-machine-agent.ossa.json +2 -3
  222. package/examples/llamaindex/rag-agent.ossa.json +2 -3
  223. package/examples/openai/basic-agent.ossa.yaml +61 -0
  224. package/examples/openai/multi-tool-agent.ossa.json +188 -0
  225. package/examples/openai/swarm-agent.ossa.json +18 -5
  226. package/examples/openapi-extensions/README.md +1 -1
  227. package/examples/quickstart/support-agent.ossa.yaml +1 -1
  228. package/examples/vercel/edge-agent.ossa.json +5 -4
  229. package/infrastructure/gitlab-agent/rbac.yaml +126 -0
  230. package/infrastructure/gitlab-agent/values.yaml +150 -0
  231. package/infrastructure/k8s/monitoring/00-namespace.yaml +7 -0
  232. package/infrastructure/k8s/monitoring/01-prometheus.yaml +142 -0
  233. package/infrastructure/k8s/monitoring/02-grafana.yaml +63 -0
  234. package/infrastructure/k8s/monitoring/03-lightweight.yaml +121 -0
  235. package/infrastructure/k8s/monitoring/README.md +73 -0
  236. package/infrastructure/k8s/monitoring/deploy.sh +38 -0
  237. package/openapi/CHANGELOG.md +21 -0
  238. package/openapi/README.md +46 -0
  239. package/openapi/{ossa-core-api.openapi.yaml → core/ossa-core-api.openapi.yaml} +59 -4
  240. package/openapi/{ossa-registry.openapi.yaml → core/ossa-registry.openapi.yaml} +75 -2
  241. package/openapi/{unified-agent-gateway.openapi.yaml → core/unified-agent-gateway.openapi.yaml} +3 -3
  242. package/openapi/github-sync.yaml +115 -0
  243. package/openapi/reference-implementations/aiflow-bridge-api.openapi.yaml +136 -0
  244. package/openapi/reference-implementations/compliance-agent-api.openapi.yaml +192 -0
  245. package/openapi/reference-implementations/crewai-agent-api.openapi.yaml +149 -0
  246. package/openapi/reference-implementations/critic-agent-api.openapi.yaml +151 -0
  247. package/openapi/reference-implementations/document-analyzer-api.openapi.yaml +217 -0
  248. package/openapi/reference-implementations/getting-started-hello-world-api.openapi.yaml +149 -0
  249. package/openapi/reference-implementations/gitlab-ml-recommender-api.openapi.yaml +151 -0
  250. package/openapi/reference-implementations/governor-agent-api.openapi.yaml +193 -0
  251. package/openapi/reference-implementations/integrator-agent-api.openapi.yaml +165 -0
  252. package/openapi/reference-implementations/judge-agent-api.openapi.yaml +148 -0
  253. package/openapi/reference-implementations/k8s-troubleshooter-api.openapi.yaml +167 -0
  254. package/openapi/reference-implementations/langchain-agent-api.openapi.yaml +171 -0
  255. package/openapi/reference-implementations/monitor-agent-api.openapi.yaml +171 -0
  256. package/openapi/reference-implementations/orchestrator-agent-api.openapi.yaml +242 -0
  257. package/openapi/reference-implementations/quickstart-support-agent-api.openapi.yaml +187 -0
  258. package/openapi/{self-evolving-ecosystem.openapi.yaml → reference-implementations/self-evolving-ecosystem.openapi.yaml} +2 -2
  259. package/openapi/reference-implementations/worker-agent-api.openapi.yaml +208 -0
  260. package/openapi/reference-implementations/workflow-orchestrator-api.openapi.yaml +193 -0
  261. package/package.json +53 -22
  262. package/release.config.js +20 -5
  263. package/scripts/README.md +103 -0
  264. package/scripts/auto-rebase-mrs.ts +106 -0
  265. package/scripts/batch-dependabot.sh +57 -0
  266. package/scripts/bump-version.ts +57 -0
  267. package/scripts/configure-gitlab-branch-protection.ts +95 -0
  268. package/scripts/create-issue-helper.ts +238 -0
  269. package/scripts/create-milestone-issue.ts +73 -0
  270. package/scripts/enhanced-version-manager.ts +257 -0
  271. package/scripts/fix-schema-formats.js +82 -0
  272. package/scripts/gen-types.ts +51 -0
  273. package/scripts/gen-zod.ts +51 -0
  274. package/scripts/generate-agents-catalog.ts +77 -0
  275. package/scripts/generate-api-docs.ts +218 -0
  276. package/scripts/generate-cli-docs.ts +410 -0
  277. package/scripts/generate-config-docs.ts +109 -0
  278. package/scripts/generate-errors-docs.ts +76 -0
  279. package/scripts/generate-examples-docs.ts +99 -0
  280. package/scripts/generate-schema-docs.ts +296 -0
  281. package/scripts/generate-types-docs.ts +48 -0
  282. package/scripts/lib/exec.ts +37 -0
  283. package/scripts/lib/file-ops.ts +58 -0
  284. package/scripts/lib/version.ts +83 -0
  285. package/scripts/lowercase-docs.ts +43 -0
  286. package/scripts/manage-milestone-mrs.ts +279 -0
  287. package/scripts/process-doc-templates.ts +37 -0
  288. package/scripts/rebase-all-mrs.sh +75 -0
  289. package/scripts/schemas/package.schema.ts +75 -0
  290. package/scripts/setup-branch-protection.sh +33 -0
  291. package/scripts/sync-github-pr.sh +48 -0
  292. package/scripts/sync-version.js +40 -0
  293. package/scripts/sync-version.ts +39 -0
  294. package/scripts/sync-versions.ts +488 -0
  295. package/scripts/sync-wiki.sh +50 -0
  296. package/scripts/validate-all.js +127 -0
  297. package/scripts/validate-schema.ts +49 -0
  298. package/spec/v0.2.0/ossa-0.2.0.schema.json +0 -0
  299. package/spec/v0.2.1/ossa-0.2.1.schema.json +555 -0
  300. package/spec/v0.2.3/CHANGELOG.md +7 -7
  301. package/spec/v0.2.3/README.md +9 -9
  302. package/spec/v0.2.3/migrations/v0.2.2-to-v0.2.3.md +18 -18
  303. package/{dist/spec/v0.2.4-dev → spec/v0.2.4}/CHANGELOG.md +8 -8
  304. package/spec/v0.2.4/migrations/v0.2.3-to-v0.2.4.md +599 -0
  305. package/spec/{v0.2.4-dev/ossa-0.2.4-dev.yaml → v0.2.4/ossa-0.2.4.yaml} +1 -1
  306. package/spec/v0.2.5/CHANGELOG.md +401 -0
  307. package/spec/v0.2.5/README.md +72 -0
  308. package/spec/v0.2.5/migrations/v0.2.3-to-v0.2.4.md +599 -0
  309. package/spec/v0.2.5/ossa-0.2.5.schema.json +1696 -0
  310. package/spec/v0.2.5/ossa-0.2.5.yaml +581 -0
  311. package/spec/v0.2.5-RC/CHANGELOG.md +401 -0
  312. package/spec/v0.2.5-RC/README.md +72 -0
  313. package/spec/v0.2.5-RC/migrations/v0.2.3-to-v0.2.4.md +599 -0
  314. package/spec/v0.2.5-RC/ossa-0.2.5-RC.schema.json +1696 -0
  315. package/spec/v0.2.5-RC/ossa-0.2.5-RC.yaml +581 -0
  316. package/spec/v0.2.6/CHANGELOG.md +401 -0
  317. package/spec/v0.2.6/README.md +72 -0
  318. package/spec/v0.2.6/migrations/v0.2.3-to-v0.2.4.md +599 -0
  319. package/spec/v0.2.6/migrations/v0.2.5-RC-to-v0.2.6.md +65 -0
  320. package/spec/v0.2.6/ossa-0.2.6.schema.json +1786 -0
  321. package/spec/v0.2.6/ossa-0.2.6.yaml +581 -0
  322. package/spec/v0.2.6-dev/CHANGELOG.md +164 -0
  323. package/spec/v0.2.6-dev/README.md +75 -0
  324. package/spec/v0.2.6-dev/migrations/v0.2.2-to-v0.2.3.md +343 -0
  325. package/spec/v0.2.6-dev/migrations/v0.2.3-to-v0.2.4.md +599 -0
  326. package/spec/v0.2.6-dev/ossa-0.2.5.schema.json +1696 -0
  327. package/spec/v0.2.6-dev/ossa-0.2.5.yaml +581 -0
  328. package/spec/{v0.2.5-dev/ossa-0.2.5-dev.schema.json → v0.2.6-dev/ossa-0.2.6-dev.schema.json} +323 -359
  329. package/spec/v0.2.6-dev/ossa-0.2.6-dev.yaml +448 -0
  330. package/spec/v0.2.7/core/agentgraph.md +324 -0
  331. package/spec/v0.2.7/resources/agentgraph.yaml +135 -0
  332. package/website/{.lighthouserc.js → .lighthouserc.ts} +5 -1
  333. package/website/DESIGN_SYSTEM_IMPLEMENTATION.md +445 -0
  334. package/website/Dockerfile +18 -5
  335. package/website/app/about/page.tsx +60 -51
  336. package/website/app/blog/[slug]/page.tsx +61 -20
  337. package/website/app/blog/page.tsx +120 -33
  338. package/website/app/design-guide/page.tsx +511 -0
  339. package/website/app/docs/[[...slug]]/page.tsx +641 -143
  340. package/website/app/ecosystem/page.tsx +146 -111
  341. package/website/app/examples/page.tsx +51 -41
  342. package/website/app/globals.scss +370 -0
  343. package/website/app/layout.tsx +2 -2
  344. package/website/app/license/page.tsx +183 -0
  345. package/website/app/not-found.tsx +18 -0
  346. package/website/app/page.tsx +513 -236
  347. package/website/app/page.tsx.bak +679 -0
  348. package/website/app/page.tsx.bak2 +649 -0
  349. package/website/app/playground/page.tsx +25 -45
  350. package/website/app/schema/page.tsx +423 -392
  351. package/website/app/specification/page.tsx +245 -169
  352. package/website/components/Logo.tsx +75 -2
  353. package/website/components/docs/DocsSidebar.tsx +40 -3
  354. package/website/components/docs/MarkdownContent.tsx +265 -47
  355. package/website/components/docs/VersionSelector.tsx +64 -8
  356. package/website/components/examples/ExamplesViewer.tsx +2 -2
  357. package/website/components/layout/Footer.tsx +6 -1
  358. package/website/components/layout/Header.tsx +44 -42
  359. package/website/components/schema/SchemaComponentsAccordion.tsx +84 -0
  360. package/website/components/schema/SchemaExplorer.tsx +4 -4
  361. package/website/components/ui/Badge.tsx +82 -0
  362. package/website/components/ui/Button.tsx +116 -0
  363. package/website/components/ui/Card.tsx +167 -0
  364. package/website/components/ui/Checkbox.tsx +141 -0
  365. package/website/components/ui/Input.tsx +169 -0
  366. package/website/components/ui/Radio.tsx +141 -0
  367. package/website/components/ui/Select.tsx +182 -0
  368. package/website/components/ui/Tag.tsx +158 -0
  369. package/website/components/ui/Textarea.tsx +195 -0
  370. package/website/components/ui/index.ts +11 -0
  371. package/website/content/blog/OpenAPI-AI-Agents-Standard.md +276 -276
  372. package/website/content/blog/Why-Formal-Standards-Matter-Now.md +3 -14
  373. package/website/content/blog/gitlab-kubernetes-agent-ecosystem.md +286 -0
  374. package/website/content/blog/introducing-ossa-framework.md +1 -1
  375. package/website/content/blog/ossa-production-results.md +5 -5
  376. package/website/content/blog/welcome-to-ossa.md +2 -2
  377. package/website/content/blog/why-ai-agents-need-open-standard.md +5 -5
  378. package/website/content/docs/{00-HOME.md → 00-home.md} +18 -25
  379. package/website/content/docs/adapters/openai-adapter.md +693 -0
  380. package/website/content/docs/agents/catalog.md +28 -0
  381. package/website/content/docs/aiflow-framework-integration-with-ossa.md +107 -0
  382. package/website/content/docs/api-reference/index.md +38 -0
  383. package/website/content/docs/api-reference/ossa-core-api.md +634 -0
  384. package/website/content/docs/api-reference/ossa-registry-api.md +515 -0
  385. package/website/content/docs/api-reference/unified-agent-gateway.md +599 -0
  386. package/website/content/docs/architecture/execution-flow.md +3 -3
  387. package/website/content/docs/architecture/multi-agent-systems.md +4 -4
  388. package/website/content/docs/architecture/overview.md +4 -4
  389. package/website/content/docs/architecture/stack-integration.md +4 -4
  390. package/website/content/docs/changelog.md +4 -4
  391. package/website/content/docs/cli-reference/index.md +111 -0
  392. package/website/content/docs/cli-reference/ossa-agents.md +70 -0
  393. package/website/content/docs/cli-reference/ossa-export.md +56 -0
  394. package/website/content/docs/cli-reference/ossa-generate.md +66 -0
  395. package/website/content/docs/cli-reference/ossa-gitlab-agent.md +57 -0
  396. package/website/content/docs/cli-reference/ossa-import.md +56 -0
  397. package/website/content/docs/cli-reference/ossa-init.md +57 -0
  398. package/website/content/docs/cli-reference/ossa-migrate.md +62 -0
  399. package/website/content/docs/cli-reference/ossa-run.md +66 -0
  400. package/website/content/docs/cli-reference/ossa-schema.md +57 -0
  401. package/website/content/docs/cli-reference/ossa-setup.md +57 -0
  402. package/website/content/docs/cli-reference/ossa-validate.md +66 -0
  403. package/website/content/docs/configuration/index.md +97 -0
  404. package/website/content/docs/contributing.md +2 -2
  405. package/website/content/docs/deployment/github-mirroring.md +924 -0
  406. package/website/content/docs/documentation.md +100 -0
  407. package/website/content/docs/ecosystem/framework-support.md +551 -11
  408. package/website/content/docs/errors/index.md +10 -0
  409. package/website/content/docs/{AIFlow-Framework-Integration-with-OSSA.md → examples/aiflow-framework-integration-with-ossa.md} +2 -2
  410. package/website/content/docs/examples/catalog.md +300 -0
  411. package/website/content/docs/for-audiences/{Students-Researchers.md → students-researchers.md} +1 -1
  412. package/website/content/docs/getting-started/index.md +92 -0
  413. package/website/content/docs/getting-started/installation.md +7 -7
  414. package/website/content/docs/getting-started/running-agents.md +215 -13
  415. package/{docs → website/content/docs}/getting-started.md +10 -6
  416. package/website/content/docs/integrations/aiflow.md +2 -2
  417. package/website/content/docs/integrations/drupal.md +2 -2
  418. package/website/content/docs/migration-guides/agent-schema-comparison.md +232 -0
  419. package/website/content/docs/migration-guides/anthropic-mcp-to-ossa.md +5 -5
  420. package/website/content/docs/migration-guides/crewai-to-ossa.md +3 -3
  421. package/website/content/docs/migration-guides/drupal-eca-to-ossa.md +11 -11
  422. package/{docs/migration → website/content/docs/migration-guides}/general-agent-schema.yml +1 -9
  423. package/website/content/docs/migration-guides/index.md +1 -1
  424. package/website/content/docs/migration-guides/langchain-to-ossa.md +17 -17
  425. package/website/content/docs/migration-guides/langflow-to-ossa.md +3 -3
  426. package/website/content/docs/migration-guides/openai-to-ossa.md +10 -10
  427. package/website/content/docs/openapi-extensions/examples.md +9 -9
  428. package/website/content/docs/openapi-extensions/index.md +59 -3
  429. package/website/content/docs/openapi-extensions/operation-extensions.md +61 -2
  430. package/website/content/docs/openapi-extensions/root-extensions.md +49 -3
  431. package/{docs/OSSA-COMPLIANT-BADGE.md → website/content/docs/ossa-compliant-badge.md} +18 -15
  432. package/website/content/docs/pre-release/index.md +10 -10
  433. package/website/content/docs/readme.md +35 -0
  434. package/website/content/docs/releases/v0.2.6.md +99 -0
  435. package/website/content/docs/schema-reference/agent-capabilities.md +50 -0
  436. package/website/content/docs/schema-reference/agent-id.md +52 -0
  437. package/website/content/docs/schema-reference/agent-name.md +50 -0
  438. package/website/content/docs/schema-reference/agent-role.md +54 -0
  439. package/website/content/docs/schema-reference/agent-spec.md +2 -2
  440. package/website/content/docs/schema-reference/agent-version.md +50 -0
  441. package/website/content/docs/schema-reference/autonomy.md +5 -5
  442. package/website/content/docs/schema-reference/constraints.md +5 -5
  443. package/website/content/docs/schema-reference/index.md +26 -157
  444. package/website/content/docs/schema-reference/llm-config.md +1 -1
  445. package/website/content/docs/schema-reference/observability.md +5 -5
  446. package/website/content/docs/schema-reference/ossa-manifest.md +6 -6
  447. package/website/content/docs/schema-reference/taxonomy.md +3 -3
  448. package/website/content/docs/types-reference/index.md +105 -0
  449. package/website/content/docs/use-cases/00-index.md +1 -1
  450. package/{docs/VERSIONING.md → website/content/docs/versioning.md} +9 -5
  451. package/website/dev.sh +53 -0
  452. package/website/docker-compose.dev.yml +36 -0
  453. package/website/lib/version.ts +18 -1
  454. package/website/lib/versions.json +103 -0
  455. package/website/next.config.ts +3 -1
  456. package/website/package-lock.json +552 -18
  457. package/website/package.json +11 -5
  458. package/website/postcss.config.mjs +1 -1
  459. package/website/scripts/fetch-versions.js +166 -0
  460. package/website/scripts/generate-examples-index.js +163 -0
  461. package/website/scripts/merge-docs-to-wiki.ts +207 -0
  462. package/website/scripts/sync-version.js +28 -0
  463. package/website/scripts/sync-wiki.ts +64 -3
  464. package/website/scripts/upload-wiki.ts +199 -0
  465. package/website/styles/_spacing.scss +453 -0
  466. package/website/styles/_tokens.scss +245 -0
  467. package/website/styles/_typography.scss +361 -0
  468. package/website/styles/_variables.scss +287 -0
  469. package/website/tailwind.config.ts +127 -22
  470. package/.releaserc.json.disabled +0 -81
  471. package/dist/spec/v0.2.5-dev/CHANGELOG.md +0 -171
  472. package/dist/spec/v0.2.5-dev/examples/customer-support-graph.ossa.yaml +0 -362
  473. package/dist/spec/v0.2.5-dev/examples/parallel-processors.ossa.yaml +0 -464
  474. package/dist/spec/v0.2.5-dev/examples/research-team.ossa.yaml +0 -440
  475. package/dist/spec/v0.2.5-dev/migrations/v0.2.4-to-v0.2.5.md +0 -317
  476. package/dist/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +0 -409
  477. package/docs/README.md +0 -31
  478. package/docs/agent-openapi-spec.yml +0 -942
  479. package/docs/openapi-extensions.md +0 -930
  480. package/docs/schemas/openapi-extensions.schema.json +0 -486
  481. package/openapi/gitlab-orchestrator.openapi.yaml +0 -330
  482. package/ossa-website-swarm-tasks.json +0 -105
  483. package/spec/v0.2.5-dev/CHANGELOG.md +0 -171
  484. package/spec/v0.2.5-dev/examples/customer-support-graph.ossa.yaml +0 -362
  485. package/spec/v0.2.5-dev/examples/parallel-processors.ossa.yaml +0 -464
  486. package/spec/v0.2.5-dev/examples/research-team.ossa.yaml +0 -440
  487. package/spec/v0.2.5-dev/migrations/v0.2.4-to-v0.2.5.md +0 -317
  488. package/spec/v0.2.5-dev/ossa-0.2.5-dev.yaml +0 -409
  489. package/website/app/api/validate/route.ts +0 -88
  490. package/website/app/globals.css +0 -108
  491. package/website/content/docs/OpenAPI-Extensions.md +0 -498
  492. package/website/content/docs/core-concepts/project-structure.md +0 -348
  493. package/website/content/docs/examples/Migration-Guides.md +0 -214
  494. package/website/content/docs/examples.md +0 -71
  495. package/website/content/docs/for-audiences/Enterprises.md +0 -256
  496. package/website/content/docs/for-audiences/architects.md +0 -224
  497. package/website/content/docs/for-audiences/developers.md +0 -220
  498. package/website/content/docs/getting-started/5-minute-overview.md +0 -85
  499. package/website/content/docs/getting-started/Hello-World.md +0 -184
  500. package/website/content/docs/getting-started/first-agent.md +0 -196
  501. package/website/content/docs/migration-guides/00-index.md +0 -76
  502. package/website/content/docs/migration-guides/README.md +0 -133
  503. package/website/next.config.js +0 -17
  504. package/website/postcss.config.js +0 -7
  505. package/website/tailwind.config.js +0 -58
  506. /package/dist/spec/{v0.2.4-dev/ossa-0.2.4-dev.schema.json → v0.2.4/ossa-0.2.4.schema.json} +0 -0
  507. /package/openapi/{ossa-registry-api.openapi.yaml → core/ossa-registry-api.openapi.yaml} +0 -0
  508. /package/openapi/{drupal-agent-api.openapi.yaml → reference-implementations/drupal-agent-api.openapi.yaml} +0 -0
  509. /package/openapi/{helm-generator.openapi.yaml → reference-implementations/helm-generator.openapi.yaml} +0 -0
  510. /package/spec/{v0.2.4-dev/ossa-0.2.4-dev.schema.json → v0.2.4/ossa-0.2.4.schema.json} +0 -0
  511. /package/{docs/migration → website/content/docs/migration-guides}/migration-manifest.json +0 -0
@@ -0,0 +1,1060 @@
1
+ # Design Document: OSSA Website Design System Audit & Enhancement
2
+
3
+ ## Overview
4
+
5
+ This design document presents a comprehensive audit of the Open Standard Agents website from the perspective of a Principal Creative Director. The audit evaluates brand integrity, visual systems, component architecture, accessibility, and user experience quality across all pages and touchpoints.
6
+
7
+ **Current State:** The website demonstrates solid technical implementation with Next.js, Tailwind CSS, and SCSS variables. However, significant opportunities exist to elevate the design to match the premium positioning of an industry standard specification.
8
+
9
+ **Target State:** A cohesive, accessible, performant design system that projects authority, clarity, and professionalism while maintaining the technical excellence of the underlying codebase.
10
+
11
+ ## Architecture
12
+
13
+ ### Design System Structure
14
+
15
+ ```
16
+ Design System
17
+ ├── Tokens (SCSS Variables)
18
+ │ ├── Colors (Brand, Semantic, Neutral)
19
+ │ ├── Typography (Families, Sizes, Weights)
20
+ │ ├── Spacing (Scale, Rhythm)
21
+ │ └── Effects (Shadows, Gradients, Transitions)
22
+ ├── Atoms
23
+ │ ├── Button (Primary, Secondary, Outline, Ghost)
24
+ │ ├── Badge (Status, Category, Version)
25
+ │ ├── Icon (System, Brand, Social)
26
+ │ └── Input (Text, Select, Checkbox, Radio)
27
+ ├── Molecules
28
+ │ ├── Card (Default, Hover, Featured)
29
+ │ ├── Navigation Item (Link, Dropdown, Active)
30
+ │ ├── Logo Grid Item
31
+ │ └── Code Block (Inline, Block, Syntax)
32
+ ├── Organisms
33
+ │ ├── Header (Desktop, Mobile)
34
+ │ ├── Footer (Multi-column)
35
+ │ ├── Hero Section (Gradient, CTA)
36
+ │ └── Documentation Sidebar
37
+ └── Templates
38
+ ├── Homepage
39
+ ├── Documentation Page
40
+ ├── Playground
41
+ └── About/Static Pages
42
+ ```
43
+
44
+ ### Technology Stack
45
+
46
+ - **Framework:** Next.js 14 (App Router)
47
+ - **Styling:** Tailwind CSS + SCSS Modules
48
+ - **Typography:** Inter (UI), JetBrains Mono (Code)
49
+ - **Icons:** Inline SVG (Heroicons style)
50
+ - **State Management:** React Hooks
51
+ - **Code Editor:** Monaco Editor (Playground)
52
+
53
+ ## Components and Interfaces
54
+
55
+ ### 1. Design Tokens (SCSS Variables)
56
+
57
+ **Current Implementation:**
58
+ ```scss
59
+ // Brand Colors
60
+ $ossa-primary: #4A3ECD;
61
+ $ossa-secondary: #1CB9ED;
62
+ $ossa-accent: #9060EA;
63
+
64
+ // Semantic Colors
65
+ $ossa-success: #10b981;
66
+ $ossa-warning: #f59e0b;
67
+ $ossa-error: #ef4444;
68
+ $ossa-info: #06b6d4;
69
+ ```
70
+
71
+ **Issues Identified:**
72
+ - ✅ **GOOD:** Centralized color system in SCSS
73
+ - ⚠️ **CONCERN:** Gradients are hardcoded in multiple places instead of using variables
74
+ - ⚠️ **CONCERN:** No dark mode tokens defined
75
+ - ⚠️ **CONCERN:** Semantic colors lack sufficient tint/shade variations
76
+
77
+ **Recommendations:**
78
+ 1. Extend color palette with tints (50-900 scale) for each brand color
79
+ 2. Create gradient tokens as CSS custom properties for runtime flexibility
80
+ 3. Define dark mode color mappings
81
+ 4. Add focus ring colors for accessibility
82
+
83
+ ### 2. Typography System
84
+
85
+ **Current Implementation:**
86
+ - **Font Family:** Inter (sans-serif), JetBrains Mono (monospace)
87
+ - **Sizes:** Tailwind default scale (text-sm, text-base, text-lg, etc.)
88
+ - **Line Heights:** Inconsistent across components
89
+
90
+ **Issues Identified:**
91
+ - ❌ **CRITICAL:** No defined type scale for headings (H1-H6)
92
+ - ❌ **CRITICAL:** Inconsistent line-height values (some 1.2, some 1.5, some default)
93
+ - ⚠️ **CONCERN:** Font sizes in hero are too large on mobile (text-6xl/7xl)
94
+ - ⚠️ **CONCERN:** No defined font-weight scale beyond default Tailwind
95
+
96
+ **Recommendations:**
97
+
98
+ ```typescript
99
+ // Proposed Typography Scale
100
+ const typography = {
101
+ display: {
102
+ fontSize: '4.5rem', // 72px
103
+ lineHeight: 1.1,
104
+ fontWeight: 800,
105
+ letterSpacing: '-0.02em'
106
+ },
107
+ h1: {
108
+ fontSize: '3.5rem', // 56px
109
+ lineHeight: 1.2,
110
+ fontWeight: 700,
111
+ letterSpacing: '-0.01em'
112
+ },
113
+ h2: {
114
+ fontSize: '2.5rem', // 40px
115
+ lineHeight: 1.3,
116
+ fontWeight: 700
117
+ },
118
+ h3: {
119
+ fontSize: '2rem', // 32px
120
+ lineHeight: 1.4,
121
+ fontWeight: 600
122
+ },
123
+ h4: {
124
+ fontSize: '1.5rem', // 24px
125
+ lineHeight: 1.5,
126
+ fontWeight: 600
127
+ },
128
+ h5: {
129
+ fontSize: '1.25rem', // 20px
130
+ lineHeight: 1.5,
131
+ fontWeight: 600
132
+ },
133
+ h6: {
134
+ fontSize: '1.125rem', // 18px
135
+ lineHeight: 1.5,
136
+ fontWeight: 600
137
+ },
138
+ body: {
139
+ fontSize: '1rem', // 16px
140
+ lineHeight: 1.6,
141
+ fontWeight: 400
142
+ },
143
+ small: {
144
+ fontSize: '0.875rem', // 14px
145
+ lineHeight: 1.5,
146
+ fontWeight: 400
147
+ }
148
+ };
149
+ ```
150
+
151
+ ### 3. Button Component System
152
+
153
+ **Current Implementation:**
154
+ ```scss
155
+ .btn-primary {
156
+ @apply bg-primary text-white px-6 py-3 rounded-lg font-medium
157
+ hover:opacity-90 transition-opacity;
158
+ }
159
+ ```
160
+
161
+ **Issues Identified:**
162
+ - ⚠️ **CONCERN:** Only opacity change on hover (lacks depth/elevation)
163
+ - ⚠️ **CONCERN:** No disabled state styling
164
+ - ⚠️ **CONCERN:** No loading state
165
+ - ⚠️ **CONCERN:** Focus states rely on browser defaults
166
+
167
+ **Recommended Button System:**
168
+
169
+ ```typescript
170
+ interface ButtonProps {
171
+ variant: 'primary' | 'secondary' | 'outline' | 'ghost';
172
+ size: 'sm' | 'md' | 'lg';
173
+ disabled?: boolean;
174
+ loading?: boolean;
175
+ icon?: ReactNode;
176
+ iconPosition?: 'left' | 'right';
177
+ }
178
+
179
+ // Variants
180
+ const buttonVariants = {
181
+ primary: {
182
+ base: 'bg-gradient-to-r from-secondary via-primary to-accent text-white',
183
+ hover: 'hover:shadow-lg hover:scale-105',
184
+ focus: 'focus:ring-4 focus:ring-primary/30',
185
+ disabled: 'disabled:opacity-50 disabled:cursor-not-allowed'
186
+ },
187
+ secondary: {
188
+ base: 'bg-secondary text-white',
189
+ hover: 'hover:bg-secondary/90 hover:shadow-md',
190
+ focus: 'focus:ring-4 focus:ring-secondary/30'
191
+ },
192
+ outline: {
193
+ base: 'border-2 border-primary text-primary bg-transparent',
194
+ hover: 'hover:bg-primary hover:text-white',
195
+ focus: 'focus:ring-4 focus:ring-primary/30'
196
+ },
197
+ ghost: {
198
+ base: 'text-primary bg-transparent',
199
+ hover: 'hover:bg-primary/10',
200
+ focus: 'focus:ring-4 focus:ring-primary/20'
201
+ }
202
+ };
203
+
204
+ // Sizes
205
+ const buttonSizes = {
206
+ sm: 'px-4 py-2 text-sm',
207
+ md: 'px-6 py-3 text-base',
208
+ lg: 'px-8 py-4 text-lg'
209
+ };
210
+ ```
211
+
212
+ ### 4. Card Component System
213
+
214
+ **Current Implementation:**
215
+ ```scss
216
+ .card {
217
+ @apply bg-white rounded-lg shadow-md p-6 border border-gray-300;
218
+ }
219
+
220
+ .card-hover {
221
+ @apply card hover:shadow-lg transition-shadow;
222
+ }
223
+ ```
224
+
225
+ **Issues Identified:**
226
+ - ✅ **GOOD:** Basic card structure exists
227
+ - ⚠️ **CONCERN:** Border color (gray-300) is too prominent
228
+ - ⚠️ **CONCERN:** No elevation system (only shadow-md and shadow-lg)
229
+ - ⚠️ **CONCERN:** No card variants (default, featured, interactive)
230
+
231
+ **Recommended Card System:**
232
+
233
+ ```typescript
234
+ interface CardProps {
235
+ variant: 'default' | 'featured' | 'interactive' | 'ghost';
236
+ padding: 'sm' | 'md' | 'lg';
237
+ elevation: 0 | 1 | 2 | 3;
238
+ hover?: boolean;
239
+ }
240
+
241
+ const cardVariants = {
242
+ default: {
243
+ base: 'bg-white border border-gray-200 rounded-xl',
244
+ hover: 'hover:shadow-lg hover:-translate-y-1'
245
+ },
246
+ featured: {
247
+ base: 'bg-gradient-to-br from-blue-50 to-indigo-50 border-2 border-primary/20 rounded-xl',
248
+ hover: 'hover:border-primary/40 hover:shadow-xl'
249
+ },
250
+ interactive: {
251
+ base: 'bg-white border-2 border-gray-200 rounded-xl cursor-pointer',
252
+ hover: 'hover:border-primary hover:shadow-xl hover:-translate-y-1'
253
+ },
254
+ ghost: {
255
+ base: 'bg-transparent border-none',
256
+ hover: 'hover:bg-gray-50'
257
+ }
258
+ };
259
+
260
+ const elevations = {
261
+ 0: 'shadow-none',
262
+ 1: 'shadow-sm',
263
+ 2: 'shadow-md',
264
+ 3: 'shadow-lg'
265
+ };
266
+ ```
267
+
268
+ ### 5. Navigation System
269
+
270
+ **Current Implementation:**
271
+ - Desktop: Horizontal nav with text links
272
+ - Mobile: Hamburger menu with slide-down
273
+ - Active states: Not clearly defined
274
+
275
+ **Issues Identified:**
276
+ - ❌ **CRITICAL:** No visual indicator for current page
277
+ - ⚠️ **CONCERN:** Mobile menu lacks smooth animation
278
+ - ⚠️ **CONCERN:** Hover states are subtle (only color change)
279
+ - ⚠️ **CONCERN:** No keyboard navigation indicators
280
+
281
+ **Recommended Navigation System:**
282
+
283
+ ```typescript
284
+ interface NavItemProps {
285
+ label: string;
286
+ href: string;
287
+ active?: boolean;
288
+ icon?: ReactNode;
289
+ badge?: string;
290
+ }
291
+
292
+ const navItemStyles = {
293
+ base: 'relative px-4 py-2 text-gray-700 font-medium transition-all duration-200',
294
+ hover: 'hover:text-primary hover:bg-primary/5 rounded-lg',
295
+ active: 'text-primary bg-primary/10 rounded-lg',
296
+ focus: 'focus:outline-none focus:ring-2 focus:ring-primary/50 focus:ring-offset-2',
297
+ // Active indicator (underline or dot)
298
+ indicator: 'after:absolute after:bottom-0 after:left-0 after:right-0 after:h-0.5 after:bg-primary after:rounded-full'
299
+ };
300
+ ```
301
+
302
+ ## Data Models
303
+
304
+ ### Design Token Schema
305
+
306
+ ```typescript
307
+ interface DesignTokens {
308
+ colors: {
309
+ brand: {
310
+ primary: ColorScale;
311
+ secondary: ColorScale;
312
+ accent: ColorScale;
313
+ };
314
+ semantic: {
315
+ success: ColorScale;
316
+ warning: ColorScale;
317
+ error: ColorScale;
318
+ info: ColorScale;
319
+ };
320
+ neutral: {
321
+ white: string;
322
+ gray: ColorScale;
323
+ black: string;
324
+ };
325
+ };
326
+ typography: {
327
+ fontFamilies: {
328
+ sans: string;
329
+ mono: string;
330
+ };
331
+ fontSizes: Record<string, string>;
332
+ fontWeights: Record<string, number>;
333
+ lineHeights: Record<string, number>;
334
+ letterSpacing: Record<string, string>;
335
+ };
336
+ spacing: {
337
+ scale: Record<number, string>;
338
+ containerMaxWidths: Record<string, string>;
339
+ };
340
+ effects: {
341
+ shadows: Record<string, string>;
342
+ gradients: Record<string, string>;
343
+ transitions: Record<string, string>;
344
+ borderRadius: Record<string, string>;
345
+ };
346
+ }
347
+
348
+ interface ColorScale {
349
+ 50: string;
350
+ 100: string;
351
+ 200: string;
352
+ 300: string;
353
+ 400: string;
354
+ 500: string; // Base color
355
+ 600: string;
356
+ 700: string;
357
+ 800: string;
358
+ 900: string;
359
+ }
360
+ ```
361
+
362
+ ## Critical Issues Audit
363
+
364
+ ### 🔴 CRITICAL ISSUES (Must Fix Immediately)
365
+
366
+ #### 1. **Inconsistent Gradient Usage**
367
+ - **Location:** Homepage hero, section backgrounds, buttons
368
+ - **Issue:** Gradients are hardcoded with different color stops across components
369
+ - **Impact:** Brand inconsistency, maintenance nightmare
370
+ - **Fix:** Centralize gradients in CSS custom properties
371
+
372
+ ```scss
373
+ // _variables.scss - ADD THESE
374
+ :root {
375
+ --gradient-brand: linear-gradient(135deg, #{$ossa-secondary} 0%, #{$ossa-primary} 70%, #{$ossa-accent} 100%);
376
+ --gradient-hero: linear-gradient(135deg, #{$ossa-secondary} 0%, #{$ossa-primary} 65%, #{$ossa-accent} 100%);
377
+ --gradient-button: linear-gradient(to right, #{$ossa-secondary}, #{$ossa-primary}, #{$ossa-accent});
378
+ }
379
+ ```
380
+
381
+ #### 2. **Typography Hierarchy Breakdown**
382
+ - **Location:** All pages
383
+ - **Issue:** No consistent heading scale, line-heights vary wildly
384
+ - **Impact:** Poor scannability, unprofessional appearance
385
+ - **Fix:** Implement type scale system (see Typography System above)
386
+
387
+ #### 3. **Accessibility Violations**
388
+ - **Location:** Interactive elements, forms, images
389
+ - **Issues:**
390
+ - Focus indicators barely visible
391
+ - Some images lack alt text
392
+ - Color contrast issues on gradient backgrounds
393
+ - Touch targets below 44x44px on mobile
394
+ - **Impact:** WCAG 2.1 AA non-compliance, legal risk, poor UX
395
+ - **Fix:** Implement comprehensive accessibility audit and fixes
396
+
397
+ #### 4. **Mobile Navigation UX**
398
+ - **Location:** Header component
399
+ - **Issue:** Hamburger menu lacks smooth transitions, no close button inside menu
400
+ - **Impact:** Poor mobile experience
401
+ - **Fix:** Add Framer Motion animations, improve mobile menu UX
402
+
403
+ #### 5. **Logo Integration Inconsistency**
404
+ - **Location:** Partner logos section (homepage)
405
+ - **Issue:** Using external favicon services with inconsistent sizing and quality
406
+ - **Impact:** Unprofessional appearance, slow loading
407
+ - **Fix:** Use local SVG assets with consistent sizing
408
+
409
+ ### ⚠️ HIGH PRIORITY ISSUES
410
+
411
+ #### 6. **Card Component Variations**
412
+ - **Issue:** Only two card styles (card, card-hover) insufficient for diverse content
413
+ - **Fix:** Implement full card system with variants
414
+
415
+ #### 7. **Button States Incomplete**
416
+ - **Issue:** No disabled, loading, or icon button variants
417
+ - **Fix:** Extend button component with all states
418
+
419
+ #### 8. **Spacing Inconsistency**
420
+ - **Issue:** Section padding varies (py-12, py-16, py-20, py-24) without clear pattern
421
+ - **Fix:** Define spacing rhythm system
422
+
423
+ #### 9. **Code Block Styling**
424
+ - **Issue:** Code blocks lack copy buttons, line numbers, and proper syntax highlighting
425
+ - **Fix:** Enhance code block component
426
+
427
+ #### 10. **Form Components Missing**
428
+ - **Issue:** No standardized form inputs, labels, error states
429
+ - **Fix:** Build form component library
430
+
431
+ ### 💡 MEDIUM PRIORITY IMPROVEMENTS
432
+
433
+ #### 11. **Micro-interactions**
434
+ - Add subtle animations on scroll (fade-in, slide-up)
435
+ - Improve hover states with scale transforms
436
+ - Add loading skeletons for async content
437
+
438
+ #### 12. **Dark Mode Support**
439
+ - Define dark mode color tokens
440
+ - Implement theme toggle
441
+ - Test all components in dark mode
442
+
443
+ #### 13. **Performance Optimization**
444
+ - Lazy load images below fold
445
+ - Code-split large components
446
+ - Optimize font loading
447
+
448
+ #### 14. **Content Density**
449
+ - Some sections feel cramped (tight spacing)
450
+ - Others feel sparse (excessive whitespace)
451
+ - Establish consistent density patterns
452
+
453
+ #### 15. **Visual Anchors**
454
+ - Add more icons to guide scanning
455
+ - Use color-coded sections for different content types
456
+ - Implement breadcrumbs for deep pages
457
+
458
+ ## Page-by-Page Audit
459
+
460
+ ### Homepage (/)
461
+
462
+ **Strengths:**
463
+ - ✅ Clear value proposition above fold
464
+ - ✅ Gradient hero is visually striking
465
+ - ✅ Good use of social proof (GitHub stars, framework logos)
466
+ - ✅ Logical content flow
467
+
468
+ **Issues:**
469
+ - ❌ Hero text too large on mobile (text-6xl/7xl)
470
+ - ❌ "Why Does This Matter?" section has poor contrast (amber background)
471
+ - ⚠️ Logo grid uses external services (slow, inconsistent)
472
+ - ⚠️ Feature cards lack visual hierarchy
473
+ - ⚠️ CTA buttons need more prominence
474
+
475
+ **Recommendations:**
476
+ 1. Reduce hero font size on mobile (text-4xl max)
477
+ 2. Improve "Why" section with better background (white or light blue)
478
+ 3. Replace logo grid with local SVG assets
479
+ 4. Add icons to feature cards
480
+ 5. Make primary CTA more prominent (larger, animated)
481
+
482
+ ### Documentation Pages (/docs)
483
+
484
+ **Strengths:**
485
+ - ✅ Clean layout with sidebar navigation
486
+ - ✅ Good use of code blocks
487
+ - ✅ Breadcrumbs for navigation
488
+
489
+ **Issues:**
490
+ - ❌ Sidebar lacks visual hierarchy (all items same weight)
491
+ - ❌ Code blocks lack copy buttons
492
+ - ⚠️ No table of contents for long pages
493
+ - ⚠️ Links not clearly distinguished from body text
494
+ - ⚠️ No "Edit on GitHub" link
495
+
496
+ **Recommendations:**
497
+ 1. Add visual hierarchy to sidebar (icons, indentation, active states)
498
+ 2. Implement copy buttons for code blocks
499
+ 3. Add floating table of contents for long pages
500
+ 4. Style links with underline or color
501
+ 5. Add "Edit on GitHub" footer to each page
502
+
503
+ ### Playground (/playground)
504
+
505
+ **Strengths:**
506
+ - ✅ Monaco editor integration
507
+ - ✅ Template switcher
508
+ - ✅ Validation feedback
509
+
510
+ **Issues:**
511
+ - ❌ Validation results lack visual polish
512
+ - ⚠️ Template buttons need active state indicator
513
+ - ⚠️ No keyboard shortcuts displayed
514
+ - ⚠️ Error messages could be more actionable
515
+
516
+ **Recommendations:**
517
+ 1. Redesign validation results with better success/error states
518
+ 2. Add clear active state to template buttons
519
+ 3. Display keyboard shortcuts (Cmd+S to validate, etc.)
520
+ 4. Improve error messages with suggestions
521
+
522
+ ### About Page (/about)
523
+
524
+ **Strengths:**
525
+ - ✅ Clear mission statement
526
+ - ✅ Good use of icons
527
+ - ✅ Logical content structure
528
+
529
+ **Issues:**
530
+ - ⚠️ Cards feel repetitive (same style throughout)
531
+ - ⚠️ Could use more visual variety
532
+ - ⚠️ "Get Involved" section could be more prominent
533
+
534
+ **Recommendations:**
535
+ 1. Vary card styles (featured, default, ghost)
536
+ 2. Add illustrations or diagrams
537
+ 3. Make "Get Involved" a prominent CTA section
538
+
539
+ ## Error Handling
540
+
541
+ ### Current State
542
+ - Basic 404 page exists
543
+ - No error boundaries for runtime errors
544
+ - No loading states for async operations
545
+
546
+ ### Recommended Error Handling Strategy
547
+
548
+ ```typescript
549
+ // Error Boundary Component
550
+ interface ErrorBoundaryProps {
551
+ fallback: ReactNode;
552
+ onError?: (error: Error, errorInfo: ErrorInfo) => void;
553
+ }
554
+
555
+ // Loading States
556
+ interface LoadingState {
557
+ type: 'skeleton' | 'spinner' | 'progress';
558
+ message?: string;
559
+ }
560
+
561
+ // Error Messages
562
+ interface ErrorMessage {
563
+ title: string;
564
+ description: string;
565
+ action?: {
566
+ label: string;
567
+ onClick: () => void;
568
+ };
569
+ }
570
+ ```
571
+
572
+ ## Testing Strategy
573
+
574
+ ### Visual Regression Testing
575
+ - **Tool:** Percy or Chromatic
576
+ - **Coverage:** All component variants, all pages
577
+ - **Frequency:** On every PR
578
+
579
+ ### Accessibility Testing
580
+ - **Tool:** axe-core, WAVE
581
+ - **Coverage:** All interactive components, all pages
582
+ - **Frequency:** On every PR
583
+ - **Manual:** Keyboard navigation, screen reader testing
584
+
585
+ ### Performance Testing
586
+ - **Tool:** Lighthouse CI
587
+ - **Metrics:** Performance > 90, Accessibility > 95, Best Practices > 90, SEO > 95
588
+ - **Frequency:** On every deploy
589
+
590
+ ### Cross-browser Testing
591
+ - **Browsers:** Chrome, Firefox, Safari, Edge
592
+ - **Devices:** Desktop (1920x1080, 1366x768), Tablet (768x1024), Mobile (375x667, 414x896)
593
+ - **Frequency:** Before major releases
594
+
595
+ ### Component Testing
596
+ - **Tool:** Storybook + Chromatic
597
+ - **Coverage:** All atoms, molecules, organisms
598
+ - **Frequency:** Continuous
599
+
600
+ ## Implementation Roadmap
601
+
602
+ ### Phase 1: Foundation (Week 1-2)
603
+ 1. ✅ Audit complete (this document)
604
+ 2. Extend SCSS variables with full color scales
605
+ 3. Define typography system
606
+ 4. Create design token documentation
607
+ 5. Set up Storybook for component development
608
+
609
+ ### Phase 2: Core Components (Week 3-4)
610
+ 1. Build Button component system
611
+ 2. Build Card component system
612
+ 3. Build Form components (Input, Select, Checkbox, Radio)
613
+ 4. Build Badge and Tag components
614
+ 5. Build Icon system
615
+
616
+ ### Phase 3: Layout & Navigation (Week 5-6)
617
+ 1. Refactor Header with active states
618
+ 2. Improve mobile navigation
619
+ 3. Refactor Footer
620
+ 4. Build Breadcrumb component
621
+ 5. Build Table of Contents component
622
+
623
+ ### Phase 4: Page Enhancements (Week 7-8)
624
+ 1. Homepage improvements
625
+ 2. Documentation page improvements
626
+ 3. Playground enhancements
627
+ 4. About page improvements
628
+ 5. Add loading states and error boundaries
629
+
630
+ ### Phase 5: Polish & Optimization (Week 9-10)
631
+ 1. Micro-interactions and animations
632
+ 2. Accessibility audit and fixes
633
+ 3. Performance optimization
634
+ 4. Cross-browser testing
635
+ 5. Visual regression testing setup
636
+
637
+ ### Phase 6: Documentation & Handoff (Week 11-12)
638
+ 1. Design system documentation
639
+ 2. Component usage guidelines
640
+ 3. Accessibility guidelines
641
+ 4. Performance guidelines
642
+ 5. Maintenance playbook
643
+
644
+ ## Success Metrics
645
+
646
+ ### Quantitative Metrics
647
+ - **Lighthouse Performance:** > 90
648
+ - **Lighthouse Accessibility:** > 95
649
+ - **Lighthouse Best Practices:** > 90
650
+ - **Lighthouse SEO:** > 95
651
+ - **Core Web Vitals:**
652
+ - LCP (Largest Contentful Paint): < 2.5s
653
+ - FID (First Input Delay): < 100ms
654
+ - CLS (Cumulative Layout Shift): < 0.1
655
+ - **WCAG 2.1 AA Compliance:** 100%
656
+
657
+ ### Qualitative Metrics
658
+ - **Brand Consistency:** All pages use centralized design tokens
659
+ - **Component Reusability:** 80%+ of UI built from shared components
660
+ - **Developer Experience:** New pages can be built in < 1 day
661
+ - **User Feedback:** Positive sentiment on design and usability
662
+
663
+ ## Conclusion
664
+
665
+ The OSSA website has a solid technical foundation but requires significant design system work to match the premium positioning of an industry standard. The primary issues are:
666
+
667
+ 1. **Inconsistent visual language** (gradients, typography, spacing)
668
+ 2. **Incomplete component library** (missing states, variants)
669
+ 3. **Accessibility gaps** (focus states, contrast, touch targets)
670
+ 4. **Mobile experience** (navigation, typography, spacing)
671
+
672
+ By implementing the recommendations in this document, the website will achieve:
673
+ - **Professional polish** befitting an industry standard
674
+ - **Accessibility compliance** (WCAG 2.1 AA)
675
+ - **Maintainability** through a robust design system
676
+ - **Performance** (Lighthouse scores > 90)
677
+ - **Scalability** for future growth
678
+
679
+ The proposed 12-week implementation roadmap provides a clear path forward, with measurable success metrics at each phase.
680
+ # Design Document: Brand Identity MVP for v0.2.6 Release
681
+
682
+ ## Overview
683
+
684
+ This design document outlines the technical approach for completing the Brand Identity MVP (Issue #44) for the OSSA v0.2.6 release. The implementation focuses on six critical areas: Button component completion, navigation active states, CodeBlock interactivity, homepage enterprise messaging, mobile navigation UX, and accessibility compliance.
685
+
686
+ The design leverages the existing Next.js 14 (App Router) architecture, React 18, TypeScript, and Tailwind CSS infrastructure already in place.
687
+
688
+ ## Architecture
689
+
690
+ ### Technology Stack
691
+
692
+ - **Framework**: Next.js 14 with App Router
693
+ - **UI Library**: React 18 with TypeScript
694
+ - **Styling**: Tailwind CSS + SCSS modules
695
+ - **Icons**: Lucide React
696
+ - **State Management**: React hooks (useState, useEffect)
697
+ - **Clipboard API**: Native browser Clipboard API
698
+
699
+ ### Component Architecture
700
+
701
+ ```
702
+ website/
703
+ ├── components/
704
+ │ ├── ui/
705
+ │ │ ├── Button.tsx (existing - enhance)
706
+ │ │ ├── Card.tsx (existing)
707
+ │ │ ├── Badge.tsx (existing)
708
+ │ │ └── CodeBlock.tsx (new)
709
+ │ ├── layout/
710
+ │ │ ├── Header.tsx (existing - enhance)
711
+ │ │ ├── MobileNav.tsx (existing - enhance)
712
+ │ │ └── Sidebar.tsx (existing - enhance)
713
+ │ └── home/
714
+ │ ├── HeroSection.tsx (existing - enhance)
715
+ │ ├── ComparisonMatrix.tsx (new)
716
+ │ └── WhyItMatters.tsx (existing - enhance)
717
+ ├── app/
718
+ │ ├── page.tsx (homepage - enhance)
719
+ │ └── docs/
720
+ │ └── [...slug]/page.tsx (docs pages)
721
+ └── styles/
722
+ └── _variables.scss (existing design tokens)
723
+ ```
724
+
725
+ ## Components and Interfaces
726
+
727
+ ### 1. Button Component Enhancement
728
+
729
+ **File**: `website/components/ui/Button.tsx`
730
+
731
+ **Current State**: Basic Button component exists with variants
732
+
733
+ **Enhancements Needed**:
734
+
735
+ - Ensure all 6 variants are properly styled (primary, secondary, outline, ghost, danger, success)
736
+ - Add loading state with spinner
737
+ - Improve focus ring visibility for WCAG compliance
738
+ - Add icon positioning support (left/right)
739
+
740
+ **Interface**:
741
+
742
+ ```typescript
743
+ interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
744
+ variant?:
745
+ | 'primary'
746
+ | 'secondary'
747
+ | 'outline'
748
+ | 'ghost'
749
+ | 'danger'
750
+ | 'success';
751
+ size?: 'sm' | 'md' | 'lg';
752
+ loading?: boolean;
753
+ icon?: React.ReactNode;
754
+ iconPosition?: 'left' | 'right';
755
+ fullWidth?: boolean;
756
+ }
757
+ ```
758
+
759
+ ### 2. CodeBlock Component (New)
760
+
761
+ **File**: `website/components/ui/CodeBlock.tsx`
762
+
763
+ **Purpose**: Display code examples with syntax highlighting and copy functionality
764
+
765
+ **Interface**:
766
+
767
+ ```typescript
768
+ interface CodeBlockProps {
769
+ code: string;
770
+ language?: string;
771
+ filename?: string;
772
+ showLineNumbers?: boolean;
773
+ highlightLines?: number[];
774
+ }
775
+ ```
776
+
777
+ **Features**:
778
+
779
+ - Syntax highlighting using existing highlighting library
780
+ - Copy button in top-right corner
781
+ - Tooltip on hover ("Copy code")
782
+ - Success feedback (checkmark icon for 2 seconds)
783
+ - Proper scrolling for long code blocks
784
+
785
+ ### 3. Header Component Enhancement
786
+
787
+ **File**: `website/components/layout/Header.tsx`
788
+
789
+ **Current State**: Basic header with navigation links
790
+
791
+ **Enhancements Needed**:
792
+
793
+ - Add active state detection using Next.js `usePathname()` hook
794
+ - Apply distinct styling to active navigation items
795
+ - Maintain hover states distinct from active states
796
+ - Ensure keyboard focus visibility
797
+
798
+ **Active State Logic**:
799
+
800
+ ```typescript
801
+ const pathname = usePathname();
802
+ const isActive = (path: string) => {
803
+ if (path === '/') return pathname === '/';
804
+ return pathname.startsWith(path);
805
+ };
806
+ ```
807
+
808
+ ### 4. Mobile Navigation Enhancement
809
+
810
+ **File**: `website/components/layout/MobileNav.tsx`
811
+
812
+ **Current State**: Basic mobile menu
813
+
814
+ **Enhancements Needed**:
815
+
816
+ - Smooth open/close animations using Tailwind transitions
817
+ - Body scroll lock when menu is open
818
+ - Close on navigation
819
+ - Overlay click to dismiss
820
+ - Active state indicators in mobile menu
821
+
822
+ **State Management**:
823
+
824
+ ```typescript
825
+ const [isOpen, setIsOpen] = useState(false);
826
+
827
+ useEffect(() => {
828
+ if (isOpen) {
829
+ document.body.style.overflow = 'hidden';
830
+ } else {
831
+ document.body.style.overflow = 'unset';
832
+ }
833
+ return () => {
834
+ document.body.style.overflow = 'unset';
835
+ };
836
+ }, [isOpen]);
837
+ ```
838
+
839
+ ### 5. Sidebar Navigation Enhancement
840
+
841
+ **File**: `website/components/layout/Sidebar.tsx`
842
+
843
+ **Current State**: Documentation sidebar exists
844
+
845
+ **Enhancements Needed**:
846
+
847
+ - Add active state detection for current doc page
848
+ - Highlight active section
849
+ - Smooth scroll to active item on page load
850
+
851
+ ### 6. Homepage Components
852
+
853
+ #### HeroSection Enhancement
854
+
855
+ **File**: `website/components/home/HeroSection.tsx`
856
+
857
+ **Enhancements**:
858
+
859
+ - Update messaging to emphasize: vendor-neutrality, compliance-ready, enterprise-grade
860
+ - Highlight key benefits: portability, compliance, governance, multi-runtime
861
+ - Ensure mobile responsiveness
862
+
863
+ #### ComparisonMatrix (New)
864
+
865
+ **File**: `website/components/home/ComparisonMatrix.tsx`
866
+
867
+ **Purpose**: Display comparison table of OSSA vs alternatives
868
+
869
+ **Interface**:
870
+
871
+ ```typescript
872
+ interface ComparisonData {
873
+ feature: string;
874
+ ossa: string | boolean;
875
+ langchain: string | boolean;
876
+ autogen: string | boolean;
877
+ mcp: string | boolean;
878
+ semanticKernel: string | boolean;
879
+ }
880
+ ```
881
+
882
+ **Features**:
883
+
884
+ - Desktop: Full table with all columns
885
+ - Mobile: Accordion or card-based layout
886
+ - Visual indicators (checkmarks, X marks)
887
+ - Responsive design
888
+
889
+ #### WhyItMatters Enhancement
890
+
891
+ **File**: `website/components/home/WhyItMatters.tsx`
892
+
893
+ **Enhancements**:
894
+
895
+ - Use Card components for each benefit
896
+ - Improve visual hierarchy
897
+ - Add icons for each benefit
898
+ - Ensure proper spacing and contrast
899
+
900
+ ## Data Models
901
+
902
+ ### Navigation Item
903
+
904
+ ```typescript
905
+ interface NavItem {
906
+ label: string;
907
+ href: string;
908
+ icon?: React.ReactNode;
909
+ children?: NavItem[];
910
+ }
911
+ ```
912
+
913
+ ### Comparison Feature
914
+
915
+ ```typescript
916
+ interface ComparisonFeature {
917
+ feature: string;
918
+ description?: string;
919
+ ossa: ComparisonValue;
920
+ competitors: {
921
+ [key: string]: ComparisonValue;
922
+ };
923
+ }
924
+
925
+ type ComparisonValue =
926
+ | boolean
927
+ | string
928
+ | {
929
+ value: string;
930
+ note?: string;
931
+ };
932
+ ```
933
+
934
+ ## Correctness Properties
935
+
936
+ _A property is a characteristic or behavior that should hold true across all valid executions of a system-essentially, a formal statement about what the system should do. Properties serve as the bridge between human-readable specifications and machine-verifiable correctness guarantees._
937
+
938
+ ### Property 1: Button accessibility
939
+
940
+ _For any_ Button component rendered, it should have a visible focus ring that meets WCAG 2.1 AA contrast requirements when focused via keyboard navigation
941
+ **Validates: Requirements 1.3**
942
+
943
+ ### Property 2: Copy button feedback
944
+
945
+ _For any_ CodeBlock component, clicking the copy button should copy the code to clipboard and display success feedback (checkmark) for exactly 2 seconds before reverting
946
+ **Validates: Requirements 3.2, 3.4**
947
+
948
+ ### Property 3: Navigation active state uniqueness
949
+
950
+ _For any_ page in the website, exactly one navigation item in the header should have the active state styling applied
951
+ **Validates: Requirements 2.1**
952
+
953
+ ### Property 4: Mobile menu body scroll lock
954
+
955
+ _For any_ state where the mobile menu is open, the body element should have `overflow: hidden` applied, and when closed, it should be removed
956
+ **Validates: Requirements 5.2**
957
+
958
+ ### Property 5: Active state persistence
959
+
960
+ _For any_ navigation component (header, sidebar, mobile menu), the active state should persist across re-renders and match the current URL path
961
+ **Validates: Requirements 2.1, 2.2**
962
+
963
+ ### Property 6: Contrast ratio compliance
964
+
965
+ _For any_ text displayed on colored backgrounds, the contrast ratio should meet or exceed WCAG AA standards (4.5:1 for normal text, 3:1 for large text)
966
+ **Validates: Requirements 6.3**
967
+
968
+ ### Property 7: ARIA label presence
969
+
970
+ _For any_ interactive component (Button, CodeBlock copy button, navigation items), proper ARIA labels should be present for screen reader accessibility
971
+ **Validates: Requirements 6.2**
972
+
973
+ ## Error Handling
974
+
975
+ ### Clipboard API Errors
976
+
977
+ - **Scenario**: Clipboard API not supported or permission denied
978
+ - **Handling**: Display fallback message "Please copy manually" and log error
979
+ - **User Feedback**: Toast notification with error message
980
+
981
+ ### Navigation State Errors
982
+
983
+ - **Scenario**: Invalid pathname or route not found
984
+ - **Handling**: Default to no active state, log warning
985
+ - **User Feedback**: No visual error (graceful degradation)
986
+
987
+ ### Component Render Errors
988
+
989
+ - **Scenario**: Component fails to render due to missing props or data
990
+ - **Handling**: Error boundary catches and displays fallback UI
991
+ - **User Feedback**: Generic error message with retry option
992
+
993
+ ## Testing Strategy
994
+
995
+ ### Unit Tests
996
+
997
+ - Button component variants and states
998
+ - CodeBlock copy functionality (mocked Clipboard API)
999
+ - Active state detection logic
1000
+ - Mobile menu state management
1001
+ - Contrast ratio calculations
1002
+
1003
+ ### Property-Based Tests
1004
+
1005
+ - **Library**: fast-check (TypeScript property-based testing)
1006
+ - **Configuration**: Minimum 100 iterations per property
1007
+ - **Coverage**: All 7 correctness properties listed above
1008
+
1009
+ ### Integration Tests
1010
+
1011
+ - Navigation flow (click navigation → page loads → active state updates)
1012
+ - Mobile menu interaction (open → navigate → close)
1013
+ - CodeBlock copy flow (click → copy → feedback → reset)
1014
+
1015
+ ### Accessibility Tests
1016
+
1017
+ - Keyboard navigation through all interactive elements
1018
+ - Screen reader compatibility (ARIA labels)
1019
+ - Focus indicator visibility
1020
+ - Contrast ratio verification using automated tools
1021
+
1022
+ ### Manual Testing Checklist
1023
+
1024
+ - Test on mobile devices (iOS Safari, Android Chrome)
1025
+ - Test with keyboard only (no mouse)
1026
+ - Test with screen reader (VoiceOver, NVDA)
1027
+ - Test in different viewport sizes
1028
+ - Test with reduced motion preferences
1029
+
1030
+ ## Implementation Notes
1031
+
1032
+ ### Design Tokens Usage
1033
+
1034
+ All components must use existing SCSS variables from `website/styles/_variables.scss`:
1035
+
1036
+ - Colors: `$primary-*`, `$secondary-*`, `$accent-*`
1037
+ - Typography: `$font-display`, `$font-heading`, `$font-body`, `$font-mono`
1038
+ - Spacing: Tailwind spacing scale (4, 8, 12, 16, 24, 32, 48, 64, 96)
1039
+ - Transitions: `transition-all duration-300 ease-in-out`
1040
+
1041
+ ### Accessibility Requirements
1042
+
1043
+ - All interactive elements must have minimum 44x44px touch target
1044
+ - Focus indicators must be visible with 3:1 contrast against background
1045
+ - All images must have descriptive alt text
1046
+ - All buttons must have accessible names (text or aria-label)
1047
+ - Color must not be the only means of conveying information
1048
+
1049
+ ### Performance Considerations
1050
+
1051
+ - Code syntax highlighting should be lazy-loaded
1052
+ - Mobile menu animations should use CSS transforms (GPU-accelerated)
1053
+ - Comparison matrix should use CSS Grid for optimal layout performance
1054
+ - Images should use Next.js Image component with proper sizing
1055
+
1056
+ ### Browser Support
1057
+
1058
+ - Modern browsers (Chrome, Firefox, Safari, Edge) - last 2 versions
1059
+ - Mobile browsers (iOS Safari 14+, Chrome Android)
1060
+ - Graceful degradation for older browsers