@eventcatalog/core 3.0.0-beta.8 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +41 -98
  2. package/dist/__mocks__/astro-content.cjs +32 -0
  3. package/dist/__mocks__/astro-content.d.cts +13 -0
  4. package/dist/__mocks__/astro-content.d.ts +13 -0
  5. package/dist/__mocks__/astro-content.js +7 -0
  6. package/dist/analytics/analytics.cjs +1 -1
  7. package/dist/analytics/analytics.js +2 -2
  8. package/dist/analytics/log-build.cjs +1 -1
  9. package/dist/analytics/log-build.js +3 -3
  10. package/dist/catalog-to-astro-content-directory.cjs +2 -19
  11. package/dist/catalog-to-astro-content-directory.d.cts +1 -2
  12. package/dist/catalog-to-astro-content-directory.d.ts +1 -2
  13. package/dist/catalog-to-astro-content-directory.js +3 -5
  14. package/dist/{chunk-R2BJ7MJG.js → chunk-6Z6ARMQS.js} +1 -17
  15. package/dist/{chunk-LQUXA3NB.js → chunk-BYP43AAT.js} +1 -1
  16. package/dist/{chunk-UTHNQFM7.js → chunk-E5Q7TZYT.js} +1 -1
  17. package/dist/{chunk-KEYJ3FB3.js → chunk-EKGR533N.js} +1 -1
  18. package/dist/{chunk-7MCE4J6I.js → chunk-KF5PARQK.js} +1 -1
  19. package/dist/{chunk-I3QUYHIK.js → chunk-VO5WYA44.js} +1 -1
  20. package/dist/constants.cjs +1 -1
  21. package/dist/constants.js +1 -1
  22. package/dist/eventcatalog.cjs +20 -64
  23. package/dist/eventcatalog.config.d.cts +4 -0
  24. package/dist/eventcatalog.config.d.ts +4 -0
  25. package/dist/eventcatalog.js +26 -52
  26. package/dist/generate.cjs +1 -1
  27. package/dist/generate.js +3 -3
  28. package/dist/utils/cli-logger.cjs +1 -1
  29. package/dist/utils/cli-logger.js +2 -2
  30. package/eventcatalog/astro.config.mjs +4 -1
  31. package/eventcatalog/integrations/eventcatalog-features.ts +69 -0
  32. package/eventcatalog/public/icons/asyncapi-black.svg +2 -0
  33. package/eventcatalog/public/icons/graphql-black.svg +1 -0
  34. package/eventcatalog/public/icons/openapi-black.svg +1 -0
  35. package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +994 -0
  36. package/eventcatalog/src/components/ChatPanel/ChatPanelButton.tsx +24 -0
  37. package/eventcatalog/src/components/Grids/DomainGrid.tsx +310 -173
  38. package/eventcatalog/src/components/Grids/MessageGrid.tsx +299 -180
  39. package/eventcatalog/src/components/Grids/specification-utils.ts +106 -0
  40. package/eventcatalog/src/components/Header.astro +25 -5
  41. package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.tsx +14 -3
  42. package/eventcatalog/src/components/SchemaExplorer/ApiAccessSection.tsx +95 -90
  43. package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +144 -0
  44. package/eventcatalog/src/components/SchemaExplorer/Pagination.tsx +34 -8
  45. package/eventcatalog/src/components/SchemaExplorer/SchemaContentViewer.tsx +2 -2
  46. package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsHeader.tsx +140 -109
  47. package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsPanel.tsx +5 -14
  48. package/eventcatalog/src/components/SchemaExplorer/SchemaExplorer.tsx +247 -59
  49. package/eventcatalog/src/components/SchemaExplorer/SchemaFilters.tsx +64 -126
  50. package/eventcatalog/src/components/SchemaExplorer/SchemaListItem.tsx +41 -43
  51. package/eventcatalog/src/components/Search/Search.astro +2 -2
  52. package/eventcatalog/src/components/Search/SearchDataLoader.astro +25 -0
  53. package/eventcatalog/src/components/SideNav/NestedSideBar/SearchBar.tsx +6 -3
  54. package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +44 -16
  55. package/eventcatalog/src/components/SideNav/SideNav.astro +0 -15
  56. package/eventcatalog/src/components/Tables/Table.tsx +96 -77
  57. package/eventcatalog/src/components/Tables/columns/ContainersTableColumns.tsx +108 -74
  58. package/eventcatalog/src/components/Tables/columns/DomainTableColumns.tsx +74 -55
  59. package/eventcatalog/src/components/Tables/columns/FlowTableColumns.tsx +36 -36
  60. package/eventcatalog/src/components/Tables/columns/MessageTableColumns.tsx +110 -77
  61. package/eventcatalog/src/components/Tables/columns/ServiceTableColumns.tsx +105 -94
  62. package/eventcatalog/src/components/Tables/columns/SharedColumns.tsx +31 -26
  63. package/eventcatalog/src/components/Tables/columns/TeamsTableColumns.tsx +115 -215
  64. package/eventcatalog/src/components/Tables/columns/UserTableColumns.tsx +145 -243
  65. package/eventcatalog/src/content.config.ts +1 -13
  66. package/eventcatalog/src/enterprise/ai/chat-api.ts +360 -0
  67. package/eventcatalog/src/enterprise/auth/[...auth].ts +3 -0
  68. package/eventcatalog/src/enterprise/auth/login.astro +420 -0
  69. package/eventcatalog/src/enterprise/collections/index.ts +0 -1
  70. package/eventcatalog/src/layouts/Footer.astro +8 -5
  71. package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +133 -117
  72. package/eventcatalog/src/pages/_index.astro +243 -559
  73. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.ts +8 -2
  74. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +9 -5
  75. package/eventcatalog/src/pages/directory/[type]/index.astro +6 -0
  76. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/[filename].astro +19 -3
  77. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/index.astro +7 -7
  78. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/[filename].astro +1 -1
  79. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +10 -7
  80. package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +194 -121
  81. package/eventcatalog/src/pages/docs/teams/[id]/index.astro +94 -70
  82. package/eventcatalog/src/pages/docs/teams/[id].mdx.ts +36 -0
  83. package/eventcatalog/src/pages/docs/users/[id]/index.astro +56 -45
  84. package/eventcatalog/src/pages/docs/users/[id].mdx.ts +36 -0
  85. package/eventcatalog/src/pages/schemas/explorer/_index.data.ts +178 -0
  86. package/eventcatalog/src/pages/schemas/explorer/index.astro +7 -157
  87. package/eventcatalog/src/pages/studio.astro +124 -72
  88. package/eventcatalog/src/remark-plugins/directives.ts +30 -9
  89. package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/container.ts +10 -1
  90. package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/domain.ts +17 -7
  91. package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/message.ts +10 -1
  92. package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/service.ts +11 -4
  93. package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/shared.ts +14 -0
  94. package/eventcatalog/src/stores/{sidebar-store.ts → sidebar-store/index.ts} +1 -1
  95. package/eventcatalog/src/utils/collections/channels.ts +0 -2
  96. package/eventcatalog/src/utils/collections/commands.ts +0 -2
  97. package/eventcatalog/src/utils/collections/containers.ts +0 -2
  98. package/eventcatalog/src/utils/collections/domains.ts +0 -2
  99. package/eventcatalog/src/utils/collections/entities.ts +0 -2
  100. package/eventcatalog/src/utils/collections/events.ts +0 -2
  101. package/eventcatalog/src/utils/collections/flows.ts +0 -2
  102. package/eventcatalog/src/utils/collections/queries.ts +0 -2
  103. package/eventcatalog/src/utils/collections/schemas.ts +45 -7
  104. package/eventcatalog/src/utils/collections/services.ts +0 -2
  105. package/eventcatalog/src/utils/feature.ts +9 -5
  106. package/eventcatalog/src/utils/node-graphs/services-node-graph.ts +1 -1
  107. package/eventcatalog/src/utils/resource-files.ts +86 -0
  108. package/package.json +12 -15
  109. package/default-files-for-collections/changelogs.md +0 -5
  110. package/default-files-for-collections/channels.md +0 -8
  111. package/default-files-for-collections/commands.md +0 -8
  112. package/default-files-for-collections/domains.md +0 -8
  113. package/default-files-for-collections/events.md +0 -8
  114. package/default-files-for-collections/flows.md +0 -11
  115. package/default-files-for-collections/queries.md +0 -8
  116. package/default-files-for-collections/services.md +0 -8
  117. package/default-files-for-collections/ubiquitousLanguages.md +0 -7
  118. package/eventcatalog/src/enterprise/collections/chat-prompts.ts +0 -32
  119. package/eventcatalog/src/enterprise/eventcatalog-chat/components/Chat.tsx +0 -60
  120. package/eventcatalog/src/enterprise/eventcatalog-chat/components/ChatMessage.tsx +0 -414
  121. package/eventcatalog/src/enterprise/eventcatalog-chat/components/ChatSidebar.tsx +0 -169
  122. package/eventcatalog/src/enterprise/eventcatalog-chat/components/InputModal.tsx +0 -244
  123. package/eventcatalog/src/enterprise/eventcatalog-chat/components/MentionInput.tsx +0 -211
  124. package/eventcatalog/src/enterprise/eventcatalog-chat/components/WelcomePromptArea.tsx +0 -176
  125. package/eventcatalog/src/enterprise/eventcatalog-chat/components/default-prompts.ts +0 -93
  126. package/eventcatalog/src/enterprise/eventcatalog-chat/components/hooks/ChatProvider.tsx +0 -143
  127. package/eventcatalog/src/enterprise/eventcatalog-chat/components/windows/ChatWindow.server.tsx +0 -387
  128. package/eventcatalog/src/enterprise/eventcatalog-chat/pages/api/chat.ts +0 -59
  129. package/eventcatalog/src/enterprise/eventcatalog-chat/pages/chat/index.astro +0 -104
  130. package/eventcatalog/src/enterprise/eventcatalog-chat/providers/ai-provider.ts +0 -140
  131. package/eventcatalog/src/enterprise/eventcatalog-chat/providers/anthropic.ts +0 -28
  132. package/eventcatalog/src/enterprise/eventcatalog-chat/providers/google.ts +0 -41
  133. package/eventcatalog/src/enterprise/eventcatalog-chat/providers/index.ts +0 -26
  134. package/eventcatalog/src/enterprise/eventcatalog-chat/providers/openai.ts +0 -61
  135. package/eventcatalog/src/enterprise/eventcatalog-chat/utils/chat-prompts.ts +0 -50
  136. package/eventcatalog/src/pages/auth/login.astro +0 -280
  137. package/eventcatalog/src/pages/chat/feature.astro +0 -179
  138. package/eventcatalog/src/pages/chat/index.astro +0 -10
  139. package/eventcatalog/src/pages/docs/_default-docs.mdx +0 -25
  140. package/eventcatalog/src/pages/docs/index.astro +0 -33
  141. package/eventcatalog/src/pages/nav-index.json.ts +0 -30
  142. /package/eventcatalog/src/{pages → enterprise}/auth/error.astro +0 -0
  143. /package/eventcatalog/src/{middleware-auth.ts → enterprise/auth/middleware/middleware-auth.ts} +0 -0
  144. /package/eventcatalog/src/{middleware.ts → enterprise/auth/middleware/middleware.ts} +0 -0
  145. /package/eventcatalog/src/{pages/unauthorized/index.astro → enterprise/auth/unauthorized.astro} +0 -0
  146. /package/eventcatalog/src/{pages → enterprise}/plans/index.astro +0 -0
  147. /package/eventcatalog/src/{components/SideNav/NestedSideBar → stores/sidebar-store}/builders/flow.ts +0 -0
  148. /package/eventcatalog/src/{components/SideNav/NestedSideBar/sidebar-builder.ts → stores/sidebar-store/state.ts} +0 -0
@@ -5,10 +5,9 @@ import {
5
5
  RectangleGroupIcon,
6
6
  ServerIcon,
7
7
  CodeBracketIcon,
8
- CubeTransparentIcon,
9
8
  DocumentTextIcon,
10
- SparklesIcon,
11
- RocketLaunchIcon,
9
+ ArrowRightIcon,
10
+ PlusIcon,
12
11
  } from '@heroicons/react/24/outline';
13
12
  import config from '@config';
14
13
 
@@ -17,22 +16,7 @@ import { getDomains } from '@utils/collections/domains';
17
16
  import { getServices } from '@utils/collections/services';
18
17
  import { getFlows } from '@utils/collections/flows';
19
18
  import VerticalSideBarLayout from '@layouts/VerticalSideBarLayout.astro';
20
- import {
21
- BookOpenText,
22
- Workflow,
23
- TableProperties,
24
- BookUser,
25
- BotMessageSquare,
26
- Zap,
27
- Package,
28
- GitBranch,
29
- FileCode,
30
- Puzzle,
31
- Terminal,
32
- BarChart3,
33
- GitCompare,
34
- Layers,
35
- } from 'lucide-react';
19
+ import { BookOpenText, Workflow, TableProperties, BookUser, Zap, Terminal, Code2, FileJson } from 'lucide-react';
36
20
 
37
21
  const { commands = [], events = [], queries = [] } = await getMessages({ getAllVersions: false });
38
22
  const messages = [...events, ...queries, ...commands];
@@ -40,125 +24,8 @@ const domains = await getDomains({ getAllVersions: false });
40
24
  const services = await getServices({ getAllVersions: false });
41
25
  const flows = await getFlows({ getAllVersions: false });
42
26
 
43
- const gettingStartedItems = [
44
- {
45
- title: 'Add a New Message',
46
- icon: ChatBubbleLeftIcon,
47
- iconBg: 'blue',
48
- description: 'Document a new message in your system with schemas, examples, and relationships.',
49
- links: [
50
- {
51
- text: 'How to add a message',
52
- href: 'https://www.eventcatalog.dev/docs/messages',
53
- },
54
- {
55
- text: 'Versioning guide',
56
- href: 'https://www.eventcatalog.dev/docs/development/guides/messages/events/versioning',
57
- },
58
- {
59
- text: 'Adding schemas',
60
- href: 'https://www.eventcatalog.dev/docs/development/guides/messages/events/adding-schemas',
61
- },
62
- ],
63
- },
64
- {
65
- title: 'Document a Service',
66
- icon: ServerIcon,
67
- iconBg: 'green',
68
- description: 'Add details about a service, including its events, APIs, and dependencies.',
69
- links: [
70
- {
71
- text: 'How to add a service',
72
- href: 'https://www.eventcatalog.dev/docs/services',
73
- },
74
- {
75
- text: 'Service ownership',
76
- href: 'https://www.eventcatalog.dev/docs/development/guides/services/owners',
77
- },
78
- {
79
- text: 'Assign specifications to services',
80
- href: 'https://www.eventcatalog.dev/docs/development/guides/services/adding-spec-files-to-services',
81
- },
82
- ],
83
- },
84
- {
85
- title: 'Create a Domain',
86
- icon: RectangleGroupIcon,
87
- iconBg: 'purple',
88
- description: 'Organize your services and events into logical business domains.',
89
- links: [
90
- {
91
- text: 'How to add a domain',
92
- href: 'https://www.eventcatalog.dev/docs/domains',
93
- },
94
- {
95
- text: 'Adding services to domains',
96
- href: 'https://www.eventcatalog.dev/docs/development/guides/domains/adding-services-to-domains',
97
- },
98
- {
99
- text: 'Creating a ubiquitous language',
100
- href: 'https://www.eventcatalog.dev/docs/development/guides/domains/adding-ubiquitous-language',
101
- },
102
- ],
103
- },
104
- ];
105
-
106
- const resourceCategories = [
107
- {
108
- title: 'Development Tools',
109
- description: 'Powerful tools to enhance your workflow',
110
- items: [
111
- {
112
- title: 'Generators & Plugins',
113
- icon: Zap,
114
- description: 'Automate documentation with generators for AsyncAPI, OpenAPI, and more',
115
- href: 'https://www.eventcatalog.dev/integrations',
116
- external: true,
117
- },
118
- {
119
- title: 'CLI Tools',
120
- icon: Terminal,
121
- description: 'Command-line tools to build, preview, and manage your catalog',
122
- href: 'https://www.eventcatalog.dev/docs/development/starting-a-new-project/installation',
123
- external: true,
124
- },
125
- {
126
- title: 'SDK & API',
127
- icon: CodeBracketIcon,
128
- description: 'Programmatic access to read and write catalog data',
129
- href: 'https://www.eventcatalog.dev/api/sdk',
130
- external: true,
131
- },
132
- ],
133
- },
134
- {
135
- title: 'Architecture Resources',
136
- description: 'Best practices and patterns',
137
- items: [
138
- {
139
- title: 'Versioning Strategies',
140
- icon: GitBranch,
141
- description: 'Learn how to version your messages and services effectively',
142
- href: 'https://www.eventcatalog.dev/docs/development/guides/messages/events/versioning',
143
- external: true,
144
- },
145
- {
146
- title: 'Schema Management',
147
- icon: FileCode,
148
- description: 'Best practices for managing schemas and specifications',
149
- href: 'https://www.eventcatalog.dev/docs/development/guides/messages/events/adding-schemas',
150
- external: true,
151
- },
152
- {
153
- title: 'Domain Design',
154
- icon: Layers,
155
- description: 'Organize your architecture using domain-driven design principles',
156
- href: 'https://www.eventcatalog.dev/docs/development/guides/domains/adding-services-to-domains',
157
- external: true,
158
- },
159
- ],
160
- },
161
- ];
27
+ // Check if catalog has content
28
+ const hasContent = domains.length > 0 || services.length > 0 || messages.length > 0 || flows.length > 0;
162
29
 
163
30
  const getDefaultUrl = (route: string, defaultValue: string) => {
164
31
  if (domains.length > 0) return buildUrl(`/${route}/domains/${domains[0].data.id}/${domains[0].data.latestVersion}`);
@@ -171,528 +38,345 @@ const topTiles = [
171
38
  {
172
39
  title: 'Domains',
173
40
  count: domains.length,
174
- description: 'Business domains defined',
41
+ description: 'Business domains',
175
42
  href: buildUrl('/discover/domains'),
176
43
  icon: RectangleGroupIcon,
177
- bgColor: 'bg-yellow-100',
44
+ bgColor: 'bg-yellow-500',
45
+ borderColor: 'border-yellow-200',
178
46
  textColor: 'text-yellow-600',
179
- arrowColor: 'text-yellow-600',
47
+ emptyText: 'No domains yet',
48
+ addHref: 'https://www.eventcatalog.dev/docs/domains',
180
49
  },
181
50
  {
182
51
  title: 'Services',
183
52
  count: services.length,
184
- description: 'Services documented in the catalog',
53
+ description: 'Documented services',
185
54
  href: buildUrl('/discover/services'),
186
55
  icon: ServerIcon,
187
- bgColor: 'bg-pink-100',
56
+ bgColor: 'bg-pink-500',
57
+ borderColor: 'border-pink-200',
188
58
  textColor: 'text-pink-600',
189
- arrowColor: 'text-pink-600',
59
+ emptyText: 'No services yet',
60
+ addHref: 'https://www.eventcatalog.dev/docs/services',
190
61
  },
191
62
  {
192
63
  title: 'Messages',
193
64
  count: messages.length,
194
- description: 'Messages documented in the catalog',
65
+ description: 'Events, commands & queries',
195
66
  href: buildUrl('/discover/events'),
196
67
  icon: ChatBubbleLeftIcon,
197
- bgColor: 'bg-blue-100',
68
+ bgColor: 'bg-blue-500',
69
+ borderColor: 'border-blue-200',
198
70
  textColor: 'text-blue-600',
199
- arrowColor: 'text-blue-600',
71
+ emptyText: 'No messages yet',
72
+ addHref: 'https://www.eventcatalog.dev/docs/messages',
200
73
  },
201
74
  {
202
75
  title: 'Flows',
203
76
  count: flows.length,
204
- description: 'Business flows documented',
77
+ description: 'Business flows',
205
78
  href: buildUrl('/discover/flows'),
206
79
  icon: Workflow,
207
- bgColor: 'bg-purple-100',
80
+ bgColor: 'bg-purple-500',
81
+ borderColor: 'border-purple-200',
208
82
  textColor: 'text-purple-600',
209
- arrowColor: 'text-purple-600',
83
+ emptyText: 'No flows yet',
84
+ addHref: 'https://www.eventcatalog.dev/docs/flows',
210
85
  },
211
86
  ];
212
87
 
213
88
  const quickActions = [
214
89
  {
215
90
  title: 'Documentation',
216
- description: 'Read detailed documentation for all your messages, services, and domains',
91
+ description: 'Browse all documented resources',
217
92
  icon: BookOpenText,
218
93
  href: getDefaultUrl('docs', 'domains'),
219
- gradient: 'from-blue-500 to-indigo-600',
220
- iconBg: 'bg-blue-100',
94
+ iconBg: 'bg-blue-50',
221
95
  iconColor: 'text-blue-600',
96
+ hoverBorder: 'hover:border-blue-300',
222
97
  },
223
98
  {
224
99
  title: 'Visualizer',
225
- description: 'Explore interactive diagrams and visualizations of your architecture',
100
+ description: 'Interactive architecture diagrams',
226
101
  icon: Workflow,
227
102
  href: getDefaultUrl('visualiser', 'domains'),
228
- gradient: 'from-purple-500 to-pink-600',
229
- iconBg: 'bg-purple-100',
103
+ iconBg: 'bg-purple-50',
230
104
  iconColor: 'text-purple-600',
105
+ hoverBorder: 'hover:border-purple-300',
231
106
  },
232
107
  {
233
108
  title: 'Discover',
234
- description: 'Search and browse through all your events, commands, and queries',
109
+ description: 'Search and filter all resources',
235
110
  icon: TableProperties,
236
111
  href: buildUrl('/discover/events'),
237
- gradient: 'from-teal-500 to-cyan-600',
238
- iconBg: 'bg-teal-100',
112
+ iconBg: 'bg-teal-50',
239
113
  iconColor: 'text-teal-600',
114
+ hoverBorder: 'hover:border-teal-300',
115
+ },
116
+ {
117
+ title: 'Schema Explorer',
118
+ description: 'Browse and compare schemas',
119
+ icon: FileJson,
120
+ href: buildUrl('/schemas/explorer'),
121
+ iconBg: 'bg-amber-50',
122
+ iconColor: 'text-amber-600',
123
+ hoverBorder: 'hover:border-amber-300',
124
+ },
125
+ ];
126
+
127
+ const learnLinks = [
128
+ {
129
+ title: 'Getting Started',
130
+ description: 'Set up your first catalog',
131
+ href: 'https://www.eventcatalog.dev/docs/development/getting-started/introduction',
132
+ icon: BookOpenText,
240
133
  },
241
134
  {
242
- title: 'AI Chat',
243
- description: 'Ask questions about your architecture and get instant answers',
244
- icon: BotMessageSquare,
245
- href: buildUrl('/chat'),
246
- gradient: 'from-green-500 to-emerald-600',
247
- iconBg: 'bg-green-100',
248
- iconColor: 'text-green-600',
135
+ title: 'Generators & Plugins',
136
+ description: 'AsyncAPI, OpenAPI integrations',
137
+ href: 'https://www.eventcatalog.dev/integrations',
138
+ icon: Zap,
139
+ },
140
+ {
141
+ title: 'SDK & CLI',
142
+ description: 'Programmatic catalog access',
143
+ href: 'https://www.eventcatalog.dev/docs/sdk',
144
+ icon: Terminal,
249
145
  },
250
146
  ];
251
147
  ---
252
148
 
253
149
  <VerticalSideBarLayout title="EventCatalog">
254
- <body class="min-h-screen bg-white font-inter">
255
- <!-- Hero Section - Clean White Theme -->
150
+ <body class="min-h-screen bg-gray-50/50 font-inter">
151
+ <!-- Hero Section -->
256
152
  <div class="relative bg-white border-b border-gray-200">
257
- <main class="container px-8 lg:px-8 mx-auto py-12 max-w-[85em]">
258
- <div class="flex flex-col lg:flex-row lg:items-start lg:justify-between gap-8 mb-6">
259
- <div class="flex-1 max-w-2xl">
260
- <h1 class="text-4xl md:text-5xl font-bold mb-4 text-gray-900 tracking-tight">
261
- {config?.organizationName || 'EventCatalog'}
262
- </h1>
263
- <p class="text-base md:text-lg text-gray-600 leading-relaxed mb-6">
264
- {
265
- config.tagline ||
266
- 'Comprehensive event-driven architecture documentation covering events, services, and domains. Explore, visualize, and understand your distributed systems.'
267
- }
268
- </p>
269
-
270
- <!-- Quick Actions Buttons -->
271
- <div class="flex flex-wrap gap-2.5">
272
- <a
273
- href={getDefaultUrl('docs', 'domains')}
274
- class="inline-flex items-center gap-2 px-5 py-2.5 bg-gray-900 text-white rounded-lg font-medium hover:bg-gray-800 hover:scale-105 transition-all shadow-md shadow-gray-900/20"
275
- >
276
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
277
- <path
278
- stroke-linecap="round"
279
- stroke-linejoin="round"
280
- stroke-width="2"
281
- d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
282
- </svg>
283
- Explore Catalog
284
- </a>
285
- <a
286
- href={getDefaultUrl('visualiser', 'domains')}
287
- class="inline-flex items-center gap-2 px-5 py-2.5 bg-white text-gray-900 border border-gray-300 rounded-lg font-medium hover:border-gray-400 hover:scale-105 transition-all"
288
- >
289
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
290
- <path
291
- stroke-linecap="round"
292
- stroke-linejoin="round"
293
- stroke-width="2"
294
- d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"
295
- ></path>
296
- </svg>
297
- View Architecture
298
- </a>
299
- </div>
300
- </div>
153
+ <main class="container px-6 lg:px-8 mx-auto py-10 max-w-[85em]">
154
+ <div class="max-w-3xl">
155
+ <h1 class="text-3xl md:text-4xl font-bold mb-3 text-gray-900 tracking-tight">
156
+ {config?.organizationName || 'EventCatalog'}
157
+ </h1>
158
+ <p class="text-base text-gray-600 leading-relaxed mb-6">
159
+ {
160
+ config.tagline ||
161
+ 'Explore and understand your event-driven architecture. Browse documentation, visualize dependencies, and discover how your systems communicate.'
162
+ }
163
+ </p>
301
164
 
302
- <!-- Quick Search -->
303
- <div class="lg:w-96">
304
- <button
305
- data-search-trigger
306
- class="group flex items-center gap-3 w-full px-4 py-3 bg-white border-2 border-gray-200 rounded-lg hover:border-blue-400 hover:shadow-md transition-all cursor-pointer"
165
+ <!-- Primary CTAs -->
166
+ <div class="flex flex-wrap items-center gap-3">
167
+ <a
168
+ href={getDefaultUrl('docs', 'domains')}
169
+ class="inline-flex items-center gap-2 px-5 py-2.5 bg-gray-900 text-white rounded-lg font-medium hover:bg-gray-800 transition-colors"
307
170
  >
308
- <svg
309
- class="w-5 h-5 text-gray-400 group-hover:text-blue-500 transition-colors"
310
- fill="none"
311
- stroke="currentColor"
312
- viewBox="0 0 24 24"
313
- >
314
- <path
315
- stroke-linecap="round"
316
- stroke-linejoin="round"
317
- stroke-width="2"
318
- d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
319
- </svg>
320
- <span class="text-sm text-gray-500 group-hover:text-gray-700 transition-colors flex-1 text-left"
321
- >Search events, services, domains...</span
322
- >
323
- <div class="flex items-center gap-1">
324
- <kbd class="px-2 py-1 text-xs font-semibold text-gray-600 bg-gray-50 border border-gray-300 rounded">⌘</kbd>
325
- <kbd class="px-2 py-1 text-xs font-semibold text-gray-600 bg-gray-50 border border-gray-300 rounded">K</kbd>
326
- </div>
327
- </button>
171
+ <BookOpenText className="w-4 h-4" />
172
+ Explore Docs
173
+ </a>
174
+ <a
175
+ href={getDefaultUrl('visualiser', 'domains')}
176
+ class="inline-flex items-center gap-2 px-5 py-2.5 bg-white text-gray-700 border border-gray-300 rounded-lg font-medium hover:bg-gray-50 hover:border-gray-400 transition-colors"
177
+ >
178
+ <Workflow className="w-4 h-4" />
179
+ View Architecture
180
+ </a>
328
181
  </div>
329
182
  </div>
330
183
  </main>
331
184
  </div>
332
185
 
333
186
  <!-- Main Content -->
334
- <main class="container px-8 lg:px-8 mx-auto py-10 max-w-[85em]">
187
+ <main class="container px-6 lg:px-8 mx-auto py-8 max-w-[85em]">
335
188
  <!-- Architecture Stats -->
336
- <div class="mb-16">
337
- <h2 class="text-sm font-semibold uppercase tracking-wider text-gray-500 mb-6">Architecture Overview</h2>
338
- <div class="grid grid-cols-2 md:grid-cols-4 gap-4">
189
+ <section class="mb-10">
190
+ <div class="flex items-center justify-between mb-4">
191
+ <h2 class="text-sm font-semibold uppercase tracking-wider text-gray-500">Your Catalog</h2>
339
192
  {
340
- topTiles.map((tile, index) => (
341
- <a
342
- href={tile.href}
343
- class="group relative bg-white p-6 rounded-xl border-2 border-gray-200 hover:border-gray-400 shadow-sm hover:shadow-md transition-all duration-300 overflow-hidden"
344
- style={`animation-delay: ${index * 50}ms`}
345
- >
346
- {/* Subtle gradient on hover */}
347
- <div class="absolute inset-0 bg-gradient-to-br from-gray-50 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300" />
348
-
349
- {/* Colored left border accent */}
350
- <div
351
- class={`absolute left-0 top-0 bottom-0 w-1 ${tile.bgColor} opacity-0 group-hover:opacity-100 transition-opacity duration-300`}
352
- />
353
-
354
- <div class="relative">
355
- <div class="flex items-center justify-between mb-4">
356
- <div class="p-2.5 bg-gray-100 rounded-lg group-hover:bg-gray-200 transition-colors shadow-sm">
357
- <tile.icon className={`w-5 h-5 text-gray-600 group-hover:${tile.textColor} transition-colors`} />
358
- </div>
359
- </div>
360
-
361
- <div class="mb-1">
362
- <div class="text-3xl font-bold text-gray-900 mb-1">{tile.count}</div>
363
- </div>
364
-
365
- <div class="text-sm font-medium text-gray-600 mb-2">{tile.title}</div>
366
-
367
- <div class="flex items-center gap-1.5 text-xs font-medium text-gray-500 opacity-0 group-hover:opacity-100 transition-all duration-300">
368
- <span class="group-hover:translate-x-0.5 transition-transform">View all</span>
369
- <svg
370
- class="w-3 h-3 group-hover:translate-x-0.5 transition-transform"
371
- fill="none"
372
- stroke="currentColor"
373
- viewBox="0 0 24 24"
374
- >
375
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
376
- </svg>
377
- </div>
378
- </div>
193
+ hasContent && (
194
+ <a href={buildUrl('/discover/events')} class="text-sm text-gray-500 hover:text-gray-700 flex items-center gap-1">
195
+ View all
196
+ <ArrowRightIcon className="w-3 h-3" />
379
197
  </a>
380
- ))
198
+ )
381
199
  }
382
200
  </div>
383
- </div>
384
-
385
- <!-- Quick Actions -->
386
- <div class="mb-16">
387
- <div class="flex items-center justify-between mb-6">
388
- <div>
389
- <h2 class="text-2xl font-bold text-gray-900">Quick Actions</h2>
390
- <p class="text-sm text-gray-500 mt-1">Jump right into exploring your architecture</p>
391
- </div>
392
- <RocketLaunchIcon className="w-6 h-6 text-gray-400" />
393
- </div>
394
- <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
201
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-4">
395
202
  {
396
- quickActions.map((action, index) => (
397
- <a
398
- href={action.href}
399
- class="group relative bg-white rounded-2xl shadow-sm border border-gray-200 hover:shadow-2xl hover:scale-105 transition-all duration-300 overflow-hidden"
400
- style={`animation-delay: ${index * 50}ms`}
401
- >
402
- {/* Animated gradient background */}
403
- <div
404
- class={`absolute inset-0 bg-gradient-to-br ${action.gradient} opacity-0 group-hover:opacity-5 transition-opacity duration-500`}
405
- />
406
-
407
- {/* Shimmer effect on hover */}
408
- <div class="absolute inset-0 -translate-x-full group-hover:translate-x-full transition-transform duration-1000 bg-gradient-to-r from-transparent via-white/20 to-transparent" />
409
-
410
- <div class="relative p-6">
411
- <div
412
- class={`${action.iconBg} w-12 h-12 rounded-xl flex items-center justify-center mb-4 group-hover:scale-110 group-hover:rotate-3 transition-all duration-300`}
413
- >
414
- <action.icon className={`w-6 h-6 ${action.iconColor}`} />
203
+ topTiles.map((tile: any) =>
204
+ tile.count > 0 ? (
205
+ <a
206
+ href={tile.href}
207
+ class={`group relative bg-white p-5 rounded-xl border border-gray-200 hover:border-gray-300 hover:shadow-sm transition-all`}
208
+ >
209
+ <div class={`absolute left-0 top-0 bottom-0 w-1 ${tile.bgColor} rounded-l-xl`} />
210
+ <div class="flex items-start justify-between mb-3">
211
+ <div class={`p-2 rounded-lg ${tile.iconBg || 'bg-gray-100'}`}>
212
+ <tile.icon className={`w-4 h-4 ${tile.textColor}`} />
213
+ </div>
214
+ <ArrowRightIcon className="w-4 h-4 text-gray-300 group-hover:text-gray-500 transition-colors" />
415
215
  </div>
416
- <h3 class="text-lg font-semibold text-gray-900 mb-2 group-hover:text-transparent group-hover:bg-clip-text group-hover:bg-gradient-to-r group-hover:from-blue-600 group-hover:to-purple-600 transition-all">
417
- {action.title}
418
- </h3>
419
- <p class="text-sm text-gray-600 leading-relaxed mb-4">{action.description}</p>
420
- <div
421
- class={`text-sm font-medium ${action.iconColor} flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-all`}
422
- >
423
- <span class="group-hover:translate-x-1 transition-transform">Open</span>
424
- <svg
425
- class="w-4 h-4 group-hover:translate-x-1 transition-transform"
426
- fill="none"
427
- stroke="currentColor"
428
- viewBox="0 0 24 24"
429
- >
430
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7l5 5m0 0l-5 5m5-5H6" />
431
- </svg>
216
+ <div class="text-2xl font-bold text-gray-900 mb-0.5">{tile.count}</div>
217
+ <div class="text-sm text-gray-500">{tile.description}</div>
218
+ </a>
219
+ ) : (
220
+ <div class="relative bg-gray-50 p-5 rounded-xl border border-dashed border-gray-300">
221
+ <div class={`absolute left-0 top-0 bottom-0 w-1 bg-gray-300 rounded-l-xl`} />
222
+ <div class="flex items-start justify-between mb-3">
223
+ <div class="p-2 rounded-lg bg-gray-100">
224
+ <tile.icon className="w-4 h-4 text-gray-400" />
225
+ </div>
432
226
  </div>
227
+ <div class="text-sm font-medium text-gray-500 mb-2">{tile.emptyText}</div>
228
+ <a
229
+ href={tile.addHref}
230
+ target="_blank"
231
+ class="inline-flex items-center gap-1 text-xs font-medium text-gray-600 hover:text-gray-900"
232
+ >
233
+ <PlusIcon className="w-3 h-3" />
234
+ Add {tile.title.toLowerCase()}
235
+ </a>
433
236
  </div>
434
- </a>
435
- ))
237
+ )
238
+ )
436
239
  }
437
240
  </div>
438
- </div>
241
+ </section>
439
242
 
440
- <!-- Additional Features -->
441
- <div class="mb-16">
442
- <h2 class="text-2xl font-bold text-gray-900 mb-6">More Features</h2>
443
- <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
444
- <a
445
- href={buildUrl('/directory/users')}
446
- class="group relative bg-white rounded-2xl shadow-sm border border-gray-200 p-6 hover:shadow-xl hover:border-orange-200 transition-all duration-300 overflow-hidden"
447
- >
448
- <div
449
- class="absolute top-0 right-0 w-32 h-32 bg-orange-50 rounded-full -translate-y-16 translate-x-16 group-hover:scale-150 transition-transform duration-500"
450
- >
451
- </div>
452
- <div class="relative flex items-start gap-4">
453
- <div class="bg-orange-100 p-3 rounded-xl group-hover:scale-110 group-hover:rotate-3 transition-all">
454
- <BookUser className="w-6 h-6 text-orange-600" />
455
- </div>
456
- <div class="flex-1">
457
- <div class="flex items-center gap-2 mb-2">
458
- <h3 class="text-lg font-semibold text-gray-900 group-hover:text-orange-600 transition-colors">
459
- Users & Teams Directory
460
- </h3>
461
- <span class="px-2 py-0.5 text-xs font-medium text-orange-600 bg-orange-50 rounded-full">Owners</span>
462
- </div>
463
- <p class="text-sm text-gray-600 mb-3">
464
- Discover who owns what. Find service and message ownership, contact information, and team structures.
465
- </p>
466
- <span class="text-sm font-medium text-orange-600 inline-flex items-center gap-1 group-hover:gap-2 transition-all">
467
- Browse directory
468
- <svg
469
- class="w-4 h-4 group-hover:translate-x-1 transition-transform"
470
- fill="none"
471
- stroke="currentColor"
472
- viewBox="0 0 24 24"
243
+ <!-- Two Column Layout -->
244
+ <div class="grid grid-cols-1 lg:grid-cols-3 gap-8 mb-10">
245
+ <!-- Main Column -->
246
+ <div class="lg:col-span-2 space-y-8">
247
+ <!-- Quick Actions -->
248
+ <section>
249
+ <h2 class="text-lg font-semibold text-gray-900 mb-4">Explore</h2>
250
+ <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
251
+ {
252
+ quickActions.map((action) => (
253
+ <a
254
+ href={action.href}
255
+ class={`group flex items-start gap-4 bg-white p-5 rounded-xl border border-gray-200 ${action.hoverBorder} hover:shadow-sm transition-all`}
473
256
  >
474
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path>
475
- </svg>
476
- </span>
477
- </div>
257
+ <div class={`${action.iconBg} p-3 rounded-xl`}>
258
+ <action.icon className={`w-6 h-6 ${action.iconColor}`} />
259
+ </div>
260
+ <div class="flex-1 min-w-0 pt-0.5">
261
+ <div class="font-semibold text-gray-900 group-hover:text-gray-700 mb-1">{action.title}</div>
262
+ <div class="text-sm text-gray-500 leading-relaxed">{action.description}</div>
263
+ </div>
264
+ </a>
265
+ ))
266
+ }
478
267
  </div>
479
- </a>
268
+ </section>
480
269
 
481
- <a
482
- href="https://www.eventcatalog.dev/docs/sdk"
483
- target="_blank"
484
- class="group relative bg-white rounded-2xl shadow-sm border border-gray-200 p-6 hover:shadow-xl hover:border-indigo-200 transition-all duration-300 overflow-hidden"
485
- >
486
- <div
487
- class="absolute top-0 right-0 w-32 h-32 bg-indigo-50 rounded-full -translate-y-16 translate-x-16 group-hover:scale-150 transition-transform duration-500"
270
+ <!-- Additional Links -->
271
+ <section class="grid grid-cols-1 sm:grid-cols-2 gap-3">
272
+ <a
273
+ href={buildUrl('/directory/users')}
274
+ class="group flex items-center gap-4 bg-white p-4 rounded-xl border border-gray-200 hover:border-orange-200 hover:shadow-sm transition-all"
488
275
  >
489
- </div>
490
- <div class="relative flex items-start gap-4">
491
- <div class="bg-indigo-100 p-3 rounded-xl group-hover:scale-110 group-hover:rotate-3 transition-all">
492
- <CodeBracketIcon className="w-6 h-6 text-indigo-600" />
276
+ <div class="bg-orange-50 p-2.5 rounded-lg">
277
+ <BookUser className="w-5 h-5 text-orange-600" />
493
278
  </div>
494
- <div class="flex-1">
495
- <div class="flex items-center gap-2 mb-2">
496
- <h3 class="text-lg font-semibold text-gray-900 group-hover:text-indigo-600 transition-colors">API & SDK</h3>
497
- <span class="px-2 py-0.5 text-xs font-medium text-indigo-600 bg-indigo-50 rounded-full">Developer</span>
498
- </div>
499
- <p class="text-sm text-gray-600 mb-3">
500
- Programmatic access to read and write catalog data. Perfect for automation and integrations.
501
- </p>
502
- <span class="text-sm font-medium text-indigo-600 inline-flex items-center gap-1 group-hover:gap-2 transition-all">
503
- View API docs
504
- <svg
505
- class="w-4 h-4 group-hover:translate-x-1 transition-transform"
506
- fill="none"
507
- stroke="currentColor"
508
- viewBox="0 0 24 24"
509
- >
510
- <path
511
- stroke-linecap="round"
512
- stroke-linejoin="round"
513
- stroke-width="2"
514
- d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path>
515
- </svg>
516
- </span>
279
+ <div class="flex-1 min-w-0">
280
+ <div class="font-medium text-gray-900 group-hover:text-orange-600 transition-colors">Team Directory</div>
281
+ <div class="text-sm text-gray-500 truncate">Ownership & contacts</div>
517
282
  </div>
518
- </div>
519
- </a>
520
- </div>
521
- </div>
522
-
523
- <!-- Resources Section -->
524
- <div class="mb-16">
525
- <div class="flex items-center gap-3 mb-8">
526
- <h2 class="text-2xl font-bold text-gray-900">Resources & Tools</h2>
527
- <div class="flex-1 h-px bg-gradient-to-r from-gray-300 to-transparent"></div>
528
- </div>
529
- <div class="grid grid-cols-1 lg:grid-cols-2 gap-8">
530
- {
531
- resourceCategories.map((category) => (
532
- <div class="bg-white rounded-2xl shadow-sm border border-gray-200 p-8">
533
- <h3 class="text-xl font-bold text-gray-900 mb-2">{category.title}</h3>
534
- <p class="text-sm text-gray-600 mb-6">{category.description}</p>
535
- <div class="space-y-4">
536
- {category.items.map((item) => (
537
- <a
538
- href={item.href}
539
- target={item.external ? '_blank' : undefined}
540
- class="group flex items-start gap-4 p-4 rounded-xl hover:bg-gray-50 transition-colors"
541
- >
542
- <div class="bg-gray-100 p-2.5 rounded-lg group-hover:bg-blue-100 transition-colors">
543
- <item.icon className="w-5 h-5 text-gray-600 group-hover:text-blue-600 transition-colors" />
544
- </div>
545
- <div class="flex-1">
546
- <div class="flex items-center gap-2 mb-1">
547
- <h4 class="font-semibold text-gray-900 group-hover:text-blue-600 transition-colors">{item.title}</h4>
548
- {item.external && (
549
- <svg class="w-4 h-4 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
550
- <path
551
- stroke-linecap="round"
552
- stroke-linejoin="round"
553
- stroke-width="2"
554
- d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"
555
- />
556
- </svg>
557
- )}
558
- </div>
559
- <p class="text-sm text-gray-600">{item.description}</p>
560
- </div>
561
- </a>
562
- ))}
563
- </div>
283
+ </a>
284
+ <a
285
+ href="https://www.eventcatalog.dev/docs/sdk"
286
+ target="_blank"
287
+ class="group flex items-center gap-4 bg-white p-4 rounded-xl border border-gray-200 hover:border-indigo-200 hover:shadow-sm transition-all"
288
+ >
289
+ <div class="bg-indigo-50 p-2.5 rounded-lg">
290
+ <Code2 className="w-5 h-5 text-indigo-600" />
564
291
  </div>
565
- ))
566
- }
567
- </div>
568
- </div>
569
-
570
- <!-- Getting Started Section -->
571
- <section class="mb-16">
572
- <div class="mb-8">
573
- <h2 class="text-2xl font-bold text-gray-900 mb-2">Getting Started</h2>
574
- <p class="text-gray-600">
575
- New to EventCatalog? Follow these guides to start documenting your event-driven architecture.
576
- </p>
577
- </div>
578
- <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
579
- {
580
- gettingStartedItems.map((item) => (
581
- <div class="bg-white rounded-xl shadow-sm border-2 border-gray-200 p-6 hover:border-gray-400 hover:shadow-md transition-all">
582
- <div class="flex items-center gap-3 mb-4">
583
- <div class="p-2 bg-gray-100 rounded-lg shadow-sm">
584
- <item.icon className="w-5 h-5 text-gray-600" />
585
- </div>
586
- <h3 class="text-base font-semibold text-gray-900">{item.title}</h3>
587
- </div>
588
- <p class="text-gray-600 text-sm mb-5 leading-relaxed">{item.description}</p>
589
- <div class="space-y-2">
590
- {item.links.map((link) => (
591
- <a
592
- href={link.href}
593
- target="_blank"
594
- class="group flex items-center gap-2 text-sm text-gray-600 hover:text-gray-900 font-medium transition-colors"
595
- >
596
- <svg
597
- class="w-3.5 h-3.5 group-hover:translate-x-0.5 transition-transform"
598
- fill="none"
599
- stroke="currentColor"
600
- viewBox="0 0 24 24"
601
- >
602
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
603
- </svg>
604
- {link.text}
605
- </a>
606
- ))}
607
- </div>
292
+ <div class="flex-1 min-w-0">
293
+ <div class="font-medium text-gray-900 group-hover:text-indigo-600 transition-colors">API & SDK</div>
294
+ <div class="text-sm text-gray-500 truncate">Programmatic access</div>
608
295
  </div>
609
- ))
610
- }
296
+ </a>
297
+ </section>
611
298
  </div>
612
- </section>
613
299
 
614
- <!-- Community Section -->
615
- <section class="mb-8">
616
- <div class="bg-white rounded-xl border-2 border-gray-200 shadow-sm p-8 md:p-10">
617
- <div class="max-w-3xl">
618
- <h2 class="text-2xl font-bold text-gray-900 mb-2">Join the Community</h2>
619
- <p class="text-gray-600 mb-8">
620
- Get help, share ideas, and connect with other EventCatalog users. We're here to help you succeed with event-driven
621
- architecture.
622
- </p>
300
+ <!-- Sidebar -->
301
+ <div class="space-y-6">
302
+ <!-- Learn More -->
303
+ <section class="bg-white rounded-xl border border-gray-200 p-5">
304
+ <h3 class="font-semibold text-gray-900 mb-4">Learn More</h3>
305
+ <div class="space-y-3">
306
+ {
307
+ learnLinks.map((link) => (
308
+ <a
309
+ href={link.href}
310
+ target="_blank"
311
+ class="group flex items-start gap-3 text-sm hover:bg-gray-50 -mx-2 px-2 py-2 rounded-lg transition-colors"
312
+ >
313
+ <link.icon className="w-4 h-4 text-gray-400 mt-0.5 flex-shrink-0" />
314
+ <div>
315
+ <div class="font-medium text-gray-700 group-hover:text-gray-900">{link.title}</div>
316
+ <div class="text-gray-500">{link.description}</div>
317
+ </div>
318
+ </a>
319
+ ))
320
+ }
321
+ </div>
322
+ </section>
623
323
 
624
- <div class="flex flex-wrap gap-3">
324
+ <!-- Community -->
325
+ <section class="bg-white rounded-xl border border-gray-200 p-5">
326
+ <h3 class="font-semibold text-gray-900 mb-4">Community</h3>
327
+ <div class="space-y-3">
625
328
  <a
626
329
  href="https://discord.gg/3rjaZMmrAm"
627
330
  target="_blank"
628
- class="group inline-flex items-center gap-2 px-5 py-2.5 bg-gray-900 text-white rounded-lg font-medium hover:bg-gray-800 transition-all shadow-sm"
331
+ class="group flex items-center gap-3 p-3 -mx-1 rounded-lg hover:bg-gray-50 transition-colors"
629
332
  >
630
- <svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24">
631
- <path
632
- d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z"
633
- ></path>
634
- </svg>
635
- <span>Join Discord</span>
333
+ <div class="bg-indigo-100 p-2 rounded-lg">
334
+ <svg class="w-4 h-4 text-indigo-600" fill="currentColor" viewBox="0 0 24 24">
335
+ <path
336
+ d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z"
337
+ ></path>
338
+ </svg>
339
+ </div>
340
+ <div>
341
+ <div class="text-sm font-medium text-gray-900 group-hover:text-indigo-600">Join Discord</div>
342
+ <div class="text-xs text-gray-500">Chat with the community</div>
343
+ </div>
636
344
  </a>
637
345
  <a
638
346
  href="https://github.com/event-catalog/eventcatalog"
639
347
  target="_blank"
640
- class="group inline-flex items-center gap-2 px-5 py-2.5 bg-white text-gray-900 border border-gray-300 rounded-lg font-medium hover:border-gray-400 hover:bg-gray-50 transition-all"
348
+ class="group flex items-center gap-3 p-3 -mx-1 rounded-lg hover:bg-gray-50 transition-colors"
641
349
  >
642
- <svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24">
643
- <path
644
- fill-rule="evenodd"
645
- d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
646
- clip-rule="evenodd"></path>
647
- </svg>
648
- <span>Star on GitHub</span>
350
+ <div class="bg-gray-100 p-2 rounded-lg">
351
+ <svg class="w-4 h-4 text-gray-700" fill="currentColor" viewBox="0 0 24 24">
352
+ <path
353
+ fill-rule="evenodd"
354
+ d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
355
+ clip-rule="evenodd"></path>
356
+ </svg>
357
+ </div>
358
+ <div>
359
+ <div class="text-sm font-medium text-gray-900 group-hover:text-gray-700">GitHub</div>
360
+ <div class="text-xs text-gray-500">Star & contribute</div>
361
+ </div>
649
362
  </a>
650
363
  <a
651
364
  href="https://www.eventcatalog.dev/docs"
652
365
  target="_blank"
653
- class="group inline-flex items-center gap-2 px-5 py-2.5 bg-white text-gray-900 border border-gray-300 rounded-lg font-medium hover:border-gray-400 hover:bg-gray-50 transition-all"
366
+ class="group flex items-center gap-3 p-3 -mx-1 rounded-lg hover:bg-gray-50 transition-colors"
654
367
  >
655
- <DocumentTextIcon className="w-4 h-4" />
656
- <span>Documentation</span>
657
- <svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
658
- <path
659
- stroke-linecap="round"
660
- stroke-linejoin="round"
661
- stroke-width="2"
662
- d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path>
663
- </svg>
368
+ <div class="bg-blue-100 p-2 rounded-lg">
369
+ <DocumentTextIcon className="w-4 h-4 text-blue-600" />
370
+ </div>
371
+ <div>
372
+ <div class="text-sm font-medium text-gray-900 group-hover:text-blue-600">Documentation</div>
373
+ <div class="text-xs text-gray-500">Guides & references</div>
374
+ </div>
664
375
  </a>
665
376
  </div>
666
- </div>
377
+ </section>
667
378
  </div>
668
- </section>
379
+ </div>
669
380
  </main>
670
381
  </body>
671
-
672
- <script>
673
- // Trigger header search when clicking the homepage search button
674
- document.addEventListener('DOMContentLoaded', () => {
675
- const searchTrigger = document.querySelector('[data-search-trigger]');
676
- if (searchTrigger) {
677
- searchTrigger.addEventListener('click', () => {
678
- // Look for the header search button and click it
679
- const headerSearchButton =
680
- document.querySelector('[data-search-open]') ||
681
- document.querySelector('button[aria-label*="search" i]') ||
682
- document.querySelector('button[title*="search" i]');
683
- if (headerSearchButton && headerSearchButton instanceof HTMLElement) {
684
- headerSearchButton.click();
685
- } else {
686
- // Fallback: trigger keyboard shortcut
687
- const event = new KeyboardEvent('keydown', {
688
- key: 'k',
689
- metaKey: true,
690
- bubbles: true,
691
- });
692
- document.dispatchEvent(event);
693
- }
694
- });
695
- }
696
- });
697
- </script>
698
382
  </VerticalSideBarLayout>