@eventcatalog/core 2.65.0 → 3.0.0-beta.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 (130) hide show
  1. package/README.md +1 -26
  2. package/dist/analytics/analytics.cjs +1 -1
  3. package/dist/analytics/analytics.js +2 -2
  4. package/dist/analytics/log-build.cjs +1 -1
  5. package/dist/analytics/log-build.js +3 -3
  6. package/dist/{chunk-NK6OYMRD.js → chunk-JB4YT5JY.js} +1 -1
  7. package/dist/{chunk-BMDTX5IN.js → chunk-TQ4HZREX.js} +1 -1
  8. package/dist/{chunk-IJRFYF4B.js → chunk-X4W4YC3U.js} +1 -1
  9. package/dist/constants.cjs +1 -1
  10. package/dist/constants.js +1 -1
  11. package/dist/eventcatalog.cjs +1 -21
  12. package/dist/eventcatalog.config.d.cts +10 -0
  13. package/dist/eventcatalog.config.d.ts +10 -0
  14. package/dist/eventcatalog.js +3 -20
  15. package/eventcatalog/src/components/CopyAsMarkdown.tsx +19 -1
  16. package/eventcatalog/src/components/FavoriteButton.tsx +54 -0
  17. package/eventcatalog/src/components/Grids/DomainGrid.tsx +386 -362
  18. package/eventcatalog/src/components/Grids/MessageGrid.tsx +166 -518
  19. package/eventcatalog/src/components/Header.astro +48 -23
  20. package/eventcatalog/src/components/Lists/VersionList.astro +2 -2
  21. package/eventcatalog/src/components/MDX/Design/Design.astro +4 -1
  22. package/eventcatalog/src/components/MDX/Flow/Flow.astro +2 -1
  23. package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.astro +3 -3
  24. package/eventcatalog/src/components/SchemaExplorer/SchemaDetailsPanel.tsx +8 -2
  25. package/eventcatalog/src/components/SchemaExplorer/SchemaPageViewer.tsx +37 -0
  26. package/eventcatalog/src/components/Search/Search.astro +48 -28
  27. package/eventcatalog/src/components/Search/SearchModal.tsx +393 -702
  28. package/eventcatalog/src/components/SideNav/NestedSideBar/SearchBar.tsx +298 -0
  29. package/eventcatalog/src/components/SideNav/NestedSideBar/builders/container.ts +66 -0
  30. package/eventcatalog/src/components/SideNav/NestedSideBar/builders/domain.ts +101 -0
  31. package/eventcatalog/src/components/SideNav/NestedSideBar/builders/flow.ts +29 -0
  32. package/eventcatalog/src/components/SideNav/NestedSideBar/builders/message.ts +84 -0
  33. package/eventcatalog/src/components/SideNav/NestedSideBar/builders/service.ts +147 -0
  34. package/eventcatalog/src/components/SideNav/NestedSideBar/builders/shared.ts +146 -0
  35. package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +1073 -0
  36. package/eventcatalog/src/components/SideNav/NestedSideBar/sidebar-builder.ts +365 -0
  37. package/eventcatalog/src/components/SideNav/NestedSideBar/storage.ts +90 -0
  38. package/eventcatalog/src/components/SideNav/SideNav.astro +18 -28
  39. package/eventcatalog/src/content.config.ts +2 -0
  40. package/eventcatalog/src/enterprise/custom-documentation/pages/docs/custom/index.astro +10 -4
  41. package/eventcatalog/src/enterprise/eventcatalog-chat/pages/chat/index.astro +3 -3
  42. package/eventcatalog/src/layouts/DirectoryLayout.astro +2 -2
  43. package/eventcatalog/src/layouts/DiscoverLayout.astro +3 -3
  44. package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +85 -63
  45. package/eventcatalog/src/layouts/VisualiserLayout.astro +3 -3
  46. package/eventcatalog/src/pages/_index.astro +530 -110
  47. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.ts +64 -0
  48. package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +29 -0
  49. package/eventcatalog/src/pages/directory/[type]/_index.data.ts +4 -4
  50. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/_index.data.ts +1 -4
  51. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/_index.data.ts +3 -3
  52. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/index.astro +1 -5
  53. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +362 -190
  54. package/eventcatalog/src/pages/docs/[type]/[id]/[version].md.ts +1 -1
  55. package/eventcatalog/src/pages/docs/[type]/[id]/index.astro +4 -4
  56. package/eventcatalog/src/pages/docs/[type]/[id]/language/_index.data.ts +1 -4
  57. package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +3 -27
  58. package/eventcatalog/src/pages/docs/teams/[id]/_index.data.ts +2 -2
  59. package/eventcatalog/src/pages/docs/users/[id]/_index.data.ts +2 -2
  60. package/eventcatalog/src/pages/index.astro +14 -5
  61. package/eventcatalog/src/pages/nav-index.json.ts +30 -0
  62. package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/_index.data.ts +77 -0
  63. package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/index.astro +90 -0
  64. package/eventcatalog/src/pages/schemas/{index.astro → explorer/index.astro} +3 -3
  65. package/eventcatalog/src/pages/studio.astro +3 -3
  66. package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/_index.data.ts +4 -3
  67. package/eventcatalog/src/pages/visualiser/[type]/[id]/index.astro +2 -2
  68. package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/_index.data.ts +4 -3
  69. package/eventcatalog/src/stores/favorites-store.ts +83 -0
  70. package/eventcatalog/src/stores/sidebar-store.ts +8 -0
  71. package/eventcatalog/src/utils/collections/changelogs.ts +7 -4
  72. package/eventcatalog/src/utils/{channels.ts → collections/channels.ts} +81 -31
  73. package/eventcatalog/src/utils/collections/commands.ts +134 -0
  74. package/eventcatalog/src/utils/collections/containers.ts +44 -33
  75. package/eventcatalog/src/utils/collections/domains.ts +204 -62
  76. package/eventcatalog/src/utils/{entities.ts → collections/entities.ts} +44 -24
  77. package/eventcatalog/src/utils/collections/events.ts +136 -0
  78. package/eventcatalog/src/utils/collections/flows.ts +59 -25
  79. package/eventcatalog/src/utils/{messages.ts → collections/messages.ts} +13 -4
  80. package/eventcatalog/src/utils/{queries.ts → collections/queries.ts} +49 -28
  81. package/eventcatalog/src/utils/collections/services.ts +100 -68
  82. package/eventcatalog/src/utils/collections/teams.ts +94 -0
  83. package/eventcatalog/src/utils/collections/users.ts +122 -0
  84. package/eventcatalog/src/utils/collections/util.ts +57 -1
  85. package/eventcatalog/src/utils/feature.ts +3 -1
  86. package/eventcatalog/src/utils/{collections/file-diffs.ts → file-diffs.ts} +1 -1
  87. package/eventcatalog/src/utils/node-graphs/container-node-graph.ts +2 -0
  88. package/eventcatalog/src/utils/node-graphs/domain-entity-map.ts +16 -6
  89. package/eventcatalog/src/utils/node-graphs/domains-canvas.ts +14 -10
  90. package/eventcatalog/src/utils/node-graphs/domains-node-graph.ts +36 -64
  91. package/eventcatalog/src/utils/node-graphs/flows-node-graph.ts +23 -19
  92. package/eventcatalog/src/utils/node-graphs/message-node-graph.ts +36 -49
  93. package/eventcatalog/src/utils/node-graphs/services-node-graph.ts +22 -18
  94. package/eventcatalog/src/utils/page-loaders/page-data-loader.ts +4 -4
  95. package/eventcatalog/tailwind.config.mjs +14 -0
  96. package/eventcatalog/tsconfig.json +2 -1
  97. package/package.json +7 -4
  98. package/eventcatalog/public/logo_old.png +0 -0
  99. package/eventcatalog/src/components/DiscoverInsight.astro +0 -61
  100. package/eventcatalog/src/components/Grids/ServiceGrid.tsx +0 -534
  101. package/eventcatalog/src/components/Lists/CustomSideBarSectionList.astro +0 -55
  102. package/eventcatalog/src/components/Lists/ProtocolList.tsx +0 -74
  103. package/eventcatalog/src/components/Lists/RepositoryList.astro +0 -37
  104. package/eventcatalog/src/components/Lists/SpecificationsList.astro +0 -67
  105. package/eventcatalog/src/components/SideBars/ChannelSideBar.astro +0 -204
  106. package/eventcatalog/src/components/SideBars/ContainerSideBar.astro +0 -180
  107. package/eventcatalog/src/components/SideBars/DomainSideBar.astro +0 -273
  108. package/eventcatalog/src/components/SideBars/EntitySideBar.astro +0 -139
  109. package/eventcatalog/src/components/SideBars/FlowSideBar.astro +0 -128
  110. package/eventcatalog/src/components/SideBars/MessageSideBar.astro +0 -248
  111. package/eventcatalog/src/components/SideBars/ServiceSideBar.astro +0 -294
  112. package/eventcatalog/src/components/SideNav/ListViewSideBar/components/CollapsibleGroup.tsx +0 -46
  113. package/eventcatalog/src/components/SideNav/ListViewSideBar/components/MessageList.tsx +0 -78
  114. package/eventcatalog/src/components/SideNav/ListViewSideBar/components/SpecificationList.tsx +0 -83
  115. package/eventcatalog/src/components/SideNav/ListViewSideBar/index.tsx +0 -1250
  116. package/eventcatalog/src/components/SideNav/ListViewSideBar/types.ts +0 -91
  117. package/eventcatalog/src/components/SideNav/ListViewSideBar/utils.ts +0 -201
  118. package/eventcatalog/src/components/SideNav/TreeView/getTreeView.ts +0 -190
  119. package/eventcatalog/src/components/SideNav/TreeView/index.tsx +0 -94
  120. package/eventcatalog/src/components/TreeView/index.tsx +0 -328
  121. package/eventcatalog/src/components/TreeView/styles.module.css +0 -264
  122. package/eventcatalog/src/components/TreeView/useSlots.ts +0 -95
  123. package/eventcatalog/src/pages/architecture/[type]/index.astro +0 -14
  124. package/eventcatalog/src/pages/architecture/architecture.astro +0 -101
  125. package/eventcatalog/src/pages/architecture/docs/[type]/index.astro +0 -14
  126. package/eventcatalog/src/utils/commands.ts +0 -112
  127. package/eventcatalog/src/utils/events.ts +0 -108
  128. package/eventcatalog/src/utils/generators/index.ts +0 -10
  129. package/eventcatalog/src/utils/teams.ts +0 -72
  130. package/eventcatalog/src/utils/users.ts +0 -72
@@ -1,14 +1,38 @@
1
1
  ---
2
2
  import { buildUrl } from '@utils/url-builder';
3
- import { ChatBubbleLeftIcon, RectangleGroupIcon, ServerIcon } from '@heroicons/react/24/outline';
3
+ import {
4
+ ChatBubbleLeftIcon,
5
+ RectangleGroupIcon,
6
+ ServerIcon,
7
+ CodeBracketIcon,
8
+ CubeTransparentIcon,
9
+ DocumentTextIcon,
10
+ SparklesIcon,
11
+ RocketLaunchIcon,
12
+ } from '@heroicons/react/24/outline';
4
13
  import config from '@config';
5
14
 
6
- import { getMessages } from '@utils/messages';
15
+ import { getMessages } from '@utils/collections/messages';
7
16
  import { getDomains } from '@utils/collections/domains';
8
17
  import { getServices } from '@utils/collections/services';
9
18
  import { getFlows } from '@utils/collections/flows';
10
19
  import VerticalSideBarLayout from '@layouts/VerticalSideBarLayout.astro';
11
- import { BookOpenText, Workflow, TableProperties, House, BookUser, MessageSquare, BotMessageSquare, Users } from 'lucide-react';
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';
12
36
 
13
37
  const { commands = [], events = [], queries = [] } = await getMessages({ getAllVersions: false });
14
38
  const messages = [...events, ...queries, ...commands];
@@ -79,6 +103,63 @@ const gettingStartedItems = [
79
103
  },
80
104
  ];
81
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
+ ];
162
+
82
163
  const getDefaultUrl = (route: string, defaultValue: string) => {
83
164
  if (domains.length > 0) return buildUrl(`/${route}/domains/${domains[0].data.id}/${domains[0].data.latestVersion}`);
84
165
  if (services.length > 0) return buildUrl(`/${route}/services/${services[0].data.id}/${services[0].data.latestVersion}`);
@@ -91,7 +172,7 @@ const topTiles = [
91
172
  title: 'Domains',
92
173
  count: domains.length,
93
174
  description: 'Business domains defined',
94
- href: buildUrl('/architecture/domains'),
175
+ href: buildUrl('/discover/domains'),
95
176
  icon: RectangleGroupIcon,
96
177
  bgColor: 'bg-yellow-100',
97
178
  textColor: 'text-yellow-600',
@@ -101,7 +182,7 @@ const topTiles = [
101
182
  title: 'Services',
102
183
  count: services.length,
103
184
  description: 'Services documented in the catalog',
104
- href: buildUrl('/architecture/services'),
185
+ href: buildUrl('/discover/services'),
105
186
  icon: ServerIcon,
106
187
  bgColor: 'bg-pink-100',
107
188
  textColor: 'text-pink-600',
@@ -111,160 +192,416 @@ const topTiles = [
111
192
  title: 'Messages',
112
193
  count: messages.length,
113
194
  description: 'Messages documented in the catalog',
114
- href: buildUrl('/architecture/messages'),
195
+ href: buildUrl('/discover/events'),
115
196
  icon: ChatBubbleLeftIcon,
116
197
  bgColor: 'bg-blue-100',
117
198
  textColor: 'text-blue-600',
118
199
  arrowColor: 'text-blue-600',
119
200
  },
201
+ {
202
+ title: 'Flows',
203
+ count: flows.length,
204
+ description: 'Business flows documented',
205
+ href: buildUrl('/discover/flows'),
206
+ icon: Workflow,
207
+ bgColor: 'bg-purple-100',
208
+ textColor: 'text-purple-600',
209
+ arrowColor: 'text-purple-600',
210
+ },
211
+ ];
212
+
213
+ const quickActions = [
214
+ {
215
+ title: 'Documentation',
216
+ description: 'Read detailed documentation for all your messages, services, and domains',
217
+ icon: BookOpenText,
218
+ href: getDefaultUrl('docs', 'domains'),
219
+ gradient: 'from-blue-500 to-indigo-600',
220
+ iconBg: 'bg-blue-100',
221
+ iconColor: 'text-blue-600',
222
+ },
223
+ {
224
+ title: 'Visualizer',
225
+ description: 'Explore interactive diagrams and visualizations of your architecture',
226
+ icon: Workflow,
227
+ href: getDefaultUrl('visualiser', 'domains'),
228
+ gradient: 'from-purple-500 to-pink-600',
229
+ iconBg: 'bg-purple-100',
230
+ iconColor: 'text-purple-600',
231
+ },
232
+ {
233
+ title: 'Discover',
234
+ description: 'Search and browse through all your events, commands, and queries',
235
+ icon: TableProperties,
236
+ href: buildUrl('/discover/events'),
237
+ gradient: 'from-teal-500 to-cyan-600',
238
+ iconBg: 'bg-teal-100',
239
+ iconColor: 'text-teal-600',
240
+ },
241
+ {
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',
249
+ },
120
250
  ];
121
251
  ---
122
252
 
123
253
  <VerticalSideBarLayout title="EventCatalog">
124
- <body class="min-h-screen bg-gray-50 font-inter">
125
- <main class="container px-8 lg:px-8 mx-auto py-8 max-w-[80em]">
126
- <div class="mb-12">
127
- <h1 class="text-4xl font-semibold mb-4 text-gray-900 font-inter">
128
- {config?.organizationName || 'EventCatalog'}
129
- </h1>
130
- <p class="text-base mb-0 text-gray-600 max-w-3xl">
131
- {config.tagline || 'Comprehensive event-driven architecture documentation covering events, services, domains.'}
132
- </p>
133
- </div>
254
+ <body class="min-h-screen bg-white font-inter">
255
+ <!-- Hero Section - Clean White Theme -->
256
+ <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>
134
301
 
135
- <h2 class="text-2xl font-semibold mb-8 text-gray-900">Architecture overview</h2>
136
- <div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-12">
137
- {
138
- topTiles.map((tile) => (
139
- <a
140
- href={tile.href}
141
- class="bg-white p-5 rounded-lg shadow-sm border border-gray-200 hover:shadow-md transition-all duration-200"
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"
142
307
  >
143
- <div class="flex items-center justify-between mb-2">
144
- <div class="flex items-center gap-3">
145
- <div class={`p-1.5 ${tile.bgColor} rounded-lg`}>
146
- <tile.icon className={`w-4 h-4 ${tile.textColor}`} />
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>
328
+ </div>
329
+ </div>
330
+ </main>
331
+ </div>
332
+
333
+ <!-- Main Content -->
334
+ <main class="container px-8 lg:px-8 mx-auto py-10 max-w-[85em]">
335
+ <!-- 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">
339
+ {
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>
147
377
  </div>
148
- <h3 class="text-lg font-semibold text-gray-900">
149
- {tile.count} {tile.title}
150
- </h3>
151
378
  </div>
152
- <span class={`text-sm font-medium ${tile.arrowColor}`}>View all →</span>
153
- </div>
154
- <p class="text-sm text-gray-600">{tile.description}</p>
155
- </a>
156
- ))
157
- }
379
+ </a>
380
+ ))
381
+ }
382
+ </div>
158
383
  </div>
159
384
 
160
- <div class="mb-12">
161
- <h2 class="text-2xl font-semibold mb-8 text-gray-900">Explore EventCatalog</h2>
162
- <div class="grid grid-cols-12 gap-4">
163
- <a
164
- href={getDefaultUrl('docs', 'domains')}
165
- class="col-span-6 row-span-2 group bg-white rounded-lg shadow-sm hover:shadow-md transition-all duration-300 border border-gray-200 overflow-hidden"
166
- >
167
- <div class="h-24 bg-gradient-to-br from-blue-50 to-blue-100 border-b border-gray-200"></div>
168
- <div class="p-4">
169
- <div class="flex items-center gap-3 mb-3">
170
- <div class="p-2 bg-blue-100 rounded-lg group-hover:scale-105 transition-transform">
171
- <BookOpenText className="w-5 h-5 text-blue-600" />
172
- </div>
173
- <h3 class="text-lg font-semibold text-gray-900 group-hover:text-blue-600">Documentation</h3>
174
- </div>
175
- <p class="text-sm text-gray-600">
176
- Read documentation for {config.organizationName || 'EventCatalog'} messages, services and domains.
177
- </p>
178
- </div>
179
- </a>
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">
395
+ {
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
+ />
180
406
 
181
- <a
182
- href={getDefaultUrl('visualiser', 'domains')}
183
- class="col-span-6 row-span-2 group bg-white rounded-lg shadow-sm hover:shadow-md transition-all duration-300 border border-gray-200 overflow-hidden"
184
- >
185
- <div class="h-24 bg-gradient-to-br from-purple-50 to-purple-100 border-b border-gray-200"></div>
186
- <div class="p-4">
187
- <div class="flex items-center gap-3 mb-3">
188
- <div class="p-2 bg-purple-100 rounded-lg group-hover:scale-105 transition-transform">
189
- <Workflow className="w-5 h-5 text-purple-600" />
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}`} />
415
+ </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>
432
+ </div>
190
433
  </div>
191
- <h3 class="text-base font-semibold text-gray-900 group-hover:text-purple-600">Visualizer</h3>
192
- </div>
193
- <p class="text-sm text-gray-600">Explore interactive visualizations of your architecture.</p>
194
- </div>
195
- </a>
434
+ </a>
435
+ ))
436
+ }
437
+ </div>
438
+ </div>
196
439
 
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">
197
444
  <a
198
- href={buildUrl('/discover/events')}
199
- class="col-span-4 row-span-2 group bg-white rounded-lg shadow-sm hover:shadow-md transition-all duration-300 border border-gray-200 overflow-hidden"
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"
200
447
  >
201
- <div class="h-24 bg-gradient-to-br from-teal-50 to-teal-100 border-b border-gray-200"></div>
202
- <div class="p-4">
203
- <div class="flex items-center gap-3 mb-3">
204
- <div class="p-2 bg-teal-100 rounded-lg group-hover:scale-105 transition-transform">
205
- <TableProperties className="w-5 h-5 text-teal-600" />
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>
206
462
  </div>
207
- <h3 class="text-base font-semibold text-gray-900 group-hover:text-teal-600">Explore</h3>
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"
473
+ >
474
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path>
475
+ </svg>
476
+ </span>
208
477
  </div>
209
- <p class="text-sm text-gray-600">Navigate through your events and services</p>
210
478
  </div>
211
479
  </a>
212
480
 
213
481
  <a
214
- href={buildUrl('/chat')}
215
- class="col-span-4 row-span-2 group bg-white rounded-lg shadow-sm hover:shadow-md transition-all duration-300 border border-gray-200 overflow-hidden"
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"
216
485
  >
217
- <div class="h-24 bg-gradient-to-br from-green-50 to-green-100 border-b border-gray-200"></div>
218
- <div class="p-4">
219
- <div class="flex items-center gap-3 mb-3">
220
- <div class="p-2 bg-green-100 rounded-lg group-hover:scale-105 transition-transform">
221
- <BotMessageSquare className="w-5 h-5 text-green-600" />
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"
488
+ >
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" />
493
+ </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>
222
498
  </div>
223
- <h3 class="text-base font-semibold text-gray-900 group-hover:text-green-600">Chat</h3>
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>
224
517
  </div>
225
- <p class="text-sm text-gray-600">Ask questions about your architecture</p>
226
518
  </div>
227
519
  </a>
520
+ </div>
521
+ </div>
228
522
 
229
- <a
230
- href={buildUrl('/directory/users')}
231
- class="col-span-4 row-span-2 group bg-white rounded-lg shadow-sm hover:shadow-md transition-all duration-300 border border-gray-200 overflow-hidden"
232
- >
233
- <div class="h-24 bg-gradient-to-br from-orange-50 to-orange-100 border-b border-gray-200"></div>
234
- <div class="p-4">
235
- <div class="flex items-center gap-3 mb-3">
236
- <div class="p-2 bg-orange-100 rounded-lg group-hover:scale-105 transition-transform">
237
- <BookUser className="w-5 h-5 text-orange-600" />
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
+ ))}
238
563
  </div>
239
- <h3 class="text-base font-semibold text-gray-900 group-hover:text-orange-600">Users & Teams</h3>
240
564
  </div>
241
- <p class="text-sm text-gray-600">Discover service and message ownership</p>
242
- </div>
243
- </a>
565
+ ))
566
+ }
244
567
  </div>
245
568
  </div>
246
569
 
247
- <section class="mb-12">
248
- <h2 class="text-2xl font-semibold mb-8 text-gray-900">Getting Started</h2>
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>
249
578
  <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
250
579
  {
251
580
  gettingStartedItems.map((item) => (
252
- <div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6">
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">
253
582
  <div class="flex items-center gap-3 mb-4">
254
- <div class={`p-2 bg-${item.iconBg}-100 rounded-lg`}>
255
- <item.icon className={`w-6 h-6 text-${item.iconBg}-600`} />
583
+ <div class="p-2 bg-gray-100 rounded-lg shadow-sm">
584
+ <item.icon className="w-5 h-5 text-gray-600" />
256
585
  </div>
257
- <h3 class="text-lg font-semibold text-gray-900">{item.title}</h3>
586
+ <h3 class="text-base font-semibold text-gray-900">{item.title}</h3>
258
587
  </div>
259
- <p class="text-gray-600 text-sm mb-4">{item.description}</p>
588
+ <p class="text-gray-600 text-sm mb-5 leading-relaxed">{item.description}</p>
260
589
  <div class="space-y-2">
261
590
  {item.links.map((link) => (
262
591
  <a
263
592
  href={link.href}
264
593
  target="_blank"
265
- class={`block text-sm text-${item.iconBg}-600 hover:text-${item.iconBg}-700`}
594
+ class="group flex items-center gap-2 text-sm text-gray-600 hover:text-gray-900 font-medium transition-colors"
266
595
  >
267
- → {link.text}
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}
268
605
  </a>
269
606
  ))}
270
607
  </div>
@@ -273,6 +610,89 @@ const topTiles = [
273
610
  }
274
611
  </div>
275
612
  </section>
613
+
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>
623
+
624
+ <div class="flex flex-wrap gap-3">
625
+ <a
626
+ href="https://discord.gg/3rjaZMmrAm"
627
+ 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"
629
+ >
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>
636
+ </a>
637
+ <a
638
+ href="https://github.com/event-catalog/eventcatalog"
639
+ 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"
641
+ >
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>
649
+ </a>
650
+ <a
651
+ href="https://www.eventcatalog.dev/docs"
652
+ 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"
654
+ >
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>
664
+ </a>
665
+ </div>
666
+ </div>
667
+ </div>
668
+ </section>
276
669
  </main>
277
670
  </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>
278
698
  </VerticalSideBarLayout>