Skip to content

Commit fb61f19

Browse files
committed
feat: integrate Google Analytics 4 and improve VitePress config styling for readability
1 parent 1ed9ff5 commit fb61f19

1 file changed

Lines changed: 125 additions & 25 deletions

File tree

website/.vitepress/config.ts

Lines changed: 125 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,32 +33,99 @@ export default defineConfig({
3333
cleanUrls: true,
3434

3535
head: [
36+
// Google Analytics 4
37+
[
38+
'script',
39+
{
40+
async: '',
41+
src: 'https://www.googletagmanager.com/gtag/js?id=G-5JHR3XB6XK',
42+
},
43+
],
44+
[
45+
'script',
46+
{},
47+
`
48+
window.dataLayer = window.dataLayer || [];
49+
function gtag(){dataLayer.push(arguments);}
50+
gtag('js', new Date());
51+
gtag('config', 'G-5JHR3XB6XK');
52+
`,
53+
],
54+
3655
// Preconnect for faster resource loading
3756
['link', { rel: 'preconnect', href: 'https://fonts.googleapis.com' }],
38-
['link', { rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' }],
57+
[
58+
'link',
59+
{ rel: 'preconnect', href: 'https://fonts.gstatic.com', crossorigin: '' },
60+
],
3961
['link', { rel: 'preconnect', href: 'https://api.iconify.design' }],
4062
['link', { rel: 'preconnect', href: 'https://flow.demo.vyuh.tech' }],
4163
// Non-blocking font loading - reduced weights for faster load
4264
// Montserrat: 600 (semibold), 700 (bold), 900 (black for headers)
4365
// JetBrains Mono: 400 only (code doesn't need variants)
44-
['link', {
45-
rel: 'stylesheet',
46-
href: 'https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400&family=Montserrat:wght@600;700;900&display=swap',
47-
media: 'print',
48-
onload: "this.media='all'"
49-
}],
66+
[
67+
'link',
68+
{
69+
rel: 'stylesheet',
70+
href: 'https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400&family=Montserrat:wght@600;700;900&display=swap',
71+
media: 'print',
72+
onload: "this.media='all'",
73+
},
74+
],
5075
// Fallback for browsers with JS disabled
51-
['noscript', {}, '<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400&family=Montserrat:wght@600;700;900&display=swap">'],
76+
[
77+
'noscript',
78+
{},
79+
'<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400&family=Montserrat:wght@600;700;900&display=swap">',
80+
],
5281
['link', { rel: 'icon', href: '/icon.svg', type: 'image/svg+xml' }],
5382
['meta', { property: 'og:type', content: 'website' }],
54-
['meta', { property: 'og:title', content: 'Vyuh Node Flow - Visual Flow Editor for Flutter' }],
55-
['meta', { property: 'og:description', content: 'A flexible, high-performance node-based flow editor for building workflow editors, visual programming interfaces, and interactive diagrams in Flutter.' }],
56-
['meta', { property: 'og:image', content: 'https://flow.vyuh.tech/node-flow-banner.png' }],
83+
[
84+
'meta',
85+
{
86+
property: 'og:title',
87+
content: 'Vyuh Node Flow - Visual Flow Editor for Flutter',
88+
},
89+
],
90+
[
91+
'meta',
92+
{
93+
property: 'og:description',
94+
content:
95+
'A flexible, high-performance node-based flow editor for building workflow editors, visual programming interfaces, and interactive diagrams in Flutter.',
96+
},
97+
],
98+
[
99+
'meta',
100+
{
101+
property: 'og:image',
102+
content: 'https://flow.vyuh.tech/node-flow-banner.png',
103+
},
104+
],
57105
['meta', { property: 'og:url', content: 'https://flow.vyuh.tech' }],
58106
['meta', { name: 'twitter:card', content: 'summary_large_image' }],
59-
['meta', { name: 'twitter:title', content: 'Vyuh Node Flow - Visual Flow Editor for Flutter' }],
60-
['meta', { name: 'twitter:description', content: 'A flexible, high-performance node-based flow editor for building workflow editors, visual programming interfaces, and interactive diagrams in Flutter.' }],
61-
['meta', { name: 'twitter:image', content: 'https://flow.vyuh.tech/node-flow-banner.png' }],
107+
[
108+
'meta',
109+
{
110+
name: 'twitter:title',
111+
content: 'Vyuh Node Flow - Visual Flow Editor for Flutter',
112+
},
113+
],
114+
[
115+
'meta',
116+
{
117+
name: 'twitter:description',
118+
content:
119+
'A flexible, high-performance node-based flow editor for building workflow editors, visual programming interfaces, and interactive diagrams in Flutter.',
120+
},
121+
],
122+
[
123+
'meta',
124+
{
125+
name: 'twitter:image',
126+
content: 'https://flow.vyuh.tech/node-flow-banner.png',
127+
},
128+
],
62129
],
63130

64131
// Ignore dead links to planned pages that don't exist yet
@@ -101,7 +168,10 @@ export default defineConfig({
101168
{
102169
text: 'Getting Started',
103170
items: [
104-
{ text: 'Installation', link: '/docs/getting-started/installation' },
171+
{
172+
text: 'Installation',
173+
link: '/docs/getting-started/installation',
174+
},
105175
{ text: 'Quick Start', link: '/docs/getting-started/quick-start' },
106176
],
107177
},
@@ -110,7 +180,10 @@ export default defineConfig({
110180
items: [
111181
{ text: 'Architecture', link: '/docs/core-concepts/architecture' },
112182
{ text: 'Controller', link: '/docs/core-concepts/controller' },
113-
{ text: 'Configuration', link: '/docs/core-concepts/configuration' },
183+
{
184+
text: 'Configuration',
185+
link: '/docs/core-concepts/configuration',
186+
},
114187
{ text: 'Nodes', link: '/docs/core-concepts/nodes' },
115188
{ text: 'Ports', link: '/docs/core-concepts/ports' },
116189
{ text: 'Connections', link: '/docs/core-concepts/connections' },
@@ -119,12 +192,24 @@ export default defineConfig({
119192
{
120193
text: 'Components',
121194
items: [
122-
{ text: 'NodeFlowEditor', link: '/docs/components/node-flow-editor' },
123-
{ text: 'NodeFlowViewer', link: '/docs/components/node-flow-viewer' },
195+
{
196+
text: 'NodeFlowEditor',
197+
link: '/docs/components/node-flow-editor',
198+
},
199+
{
200+
text: 'NodeFlowViewer',
201+
link: '/docs/components/node-flow-viewer',
202+
},
124203
{ text: 'NodeWidget', link: '/docs/components/node-widget' },
125204
{ text: 'PortWidget', link: '/docs/components/port-widget' },
126-
{ text: 'ConnectionsLayer', link: '/docs/components/connections-layer' },
127-
{ text: 'Special Node Types', link: '/docs/components/special-node-types' },
205+
{
206+
text: 'ConnectionsLayer',
207+
link: '/docs/components/connections-layer',
208+
},
209+
{
210+
text: 'Special Node Types',
211+
link: '/docs/components/special-node-types',
212+
},
128213
{ text: 'Minimap', link: '/docs/components/minimap' },
129214
],
130215
},
@@ -136,8 +221,14 @@ export default defineConfig({
136221
text: 'Theming',
137222
items: [
138223
{ text: 'Overview', link: '/docs/theming/overview' },
139-
{ text: 'Connection Styles', link: '/docs/theming/connection-styles' },
140-
{ text: 'Connection Effects', link: '/docs/theming/connection-effects' },
224+
{
225+
text: 'Connection Styles',
226+
link: '/docs/theming/connection-styles',
227+
},
228+
{
229+
text: 'Connection Effects',
230+
link: '/docs/theming/connection-effects',
231+
},
141232
{ text: 'Port Shapes', link: '/docs/theming/port-shapes' },
142233
{ text: 'Port Labels', link: '/docs/theming/port-labels' },
143234
{ text: 'Grid Styles', link: '/docs/theming/grid-styles' },
@@ -147,12 +238,21 @@ export default defineConfig({
147238
{
148239
text: 'Advanced',
149240
items: [
150-
{ text: 'Special Node Types', link: '/docs/advanced/special-node-types' },
241+
{
242+
text: 'Special Node Types',
243+
link: '/docs/advanced/special-node-types',
244+
},
151245
{ text: 'Level of Detail (LOD)', link: '/docs/advanced/lod' },
152246
{ text: 'Events', link: '/docs/advanced/events' },
153247
{ text: 'Serialization', link: '/docs/advanced/serialization' },
154-
{ text: 'Keyboard Shortcuts', link: '/docs/advanced/keyboard-shortcuts' },
155-
{ text: 'Shortcuts & Actions', link: '/docs/advanced/shortcuts-actions' },
248+
{
249+
text: 'Keyboard Shortcuts',
250+
link: '/docs/advanced/keyboard-shortcuts',
251+
},
252+
{
253+
text: 'Shortcuts & Actions',
254+
link: '/docs/advanced/shortcuts-actions',
255+
},
156256
],
157257
},
158258
{

0 commit comments

Comments
 (0)