-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.html
More file actions
230 lines (219 loc) · 8.69 KB
/
Copy pathindex.html
File metadata and controls
230 lines (219 loc) · 8.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- Primary Meta Tags -->
<title>Bayan Flow - Interactive Algorithm Visualizer</title>
<meta name="title" content="Bayan Flow - Interactive Algorithm Visualizer" />
<!-- Static fallback; DocumentTitle.jsx overwrites at runtime with computed count from CATEGORY_CONFIG -->
<meta
name="description"
content="Learn 45 algorithms with interactive step-by-step visualizations — sorting, pathfinding, searching, tree traversal, and graph. Free educational app."
/>
<meta
name="keywords"
content="bayan flow, algorithm visualizer, sorting algorithms, pathfinding, graph algorithms, tree traversal, searching algorithms, computer science, education, interactive learning, dijkstra, bfs, merge sort, clarity"
/>
<meta name="author" content="Ayoub Abidi" />
<meta name="robots" content="index, follow" />
<!-- Non-production hostnames: noindex at runtime (dev, Workers previews) -->
<script>
(function () {
var hostname = window.location.hostname;
var shouldNoIndex =
hostname === 'dev.bayanflow.com' ||
hostname === 'localhost' ||
hostname === '127.0.0.1' ||
hostname.slice(-12) === '.workers.dev';
if (shouldNoIndex) {
var robots = document.querySelector('meta[name="robots"]');
if (robots) {
robots.setAttribute('content', 'noindex, nofollow');
}
}
})();
</script>
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website" />
<meta property="og:url" content="https://bayanflow.com/" />
<meta
property="og:title"
content="Bayan Flow - Interactive Algorithm Visualizer"
/>
<meta
property="og:description"
content="Learn 45 algorithms with interactive step-by-step visualizations — sorting, pathfinding, searching, tree traversal, and graph. Free educational app."
/>
<meta property="og:image" content="https://bayanflow.com/og-image.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta
property="og:image:alt"
content="Bayan Flow — interactive algorithm visualizer for sorting, pathfinding, searching, trees, and graphs"
/>
<meta property="og:site_name" content="Bayan Flow" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@bayanflow" />
<meta name="twitter:url" content="https://bayanflow.com/" />
<meta
name="twitter:title"
content="Bayan Flow - Interactive Algorithm Visualizer"
/>
<meta
name="twitter:description"
content="Learn 45 algorithms with interactive step-by-step visualizations — sorting, pathfinding, searching, tree traversal, and graph. Free educational app."
/>
<meta
name="twitter:image"
content="https://bayanflow.com/og-image.png"
/>
<!-- Favicon -->
<link rel="icon" type="image/svg+xml" href="/logo.svg" />
<link rel="apple-touch-icon" href="/logo.png" />
<link rel="manifest" href="/manifest.json" />
<meta name="theme-color" content="#3b82f6" />
<!-- Preconnect for critical third-party origins -->
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin />
<!-- Structured Data -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebApplication",
"name": "Bayan Flow",
"description": "Bayan Flow: Interactive educational tool for learning sorting, pathfinding, searching, tree traversal, and graph algorithms through step-by-step visual animations with clarity. Bayan (بيان) means clarity in Arabic.",
"url": "https://bayanflow.com/",
"applicationCategory": "EducationalApplication",
"operatingSystem": "Web Browser",
"author": {
"@type": "Person",
"name": "Ayoub Abidi",
"url": "https://github.com/ayoub3bidi"
},
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"featureList": [
"45 interactive algorithm visualizations",
"Sorting, pathfinding, searching, tree traversal, and graph algorithms",
"Real-time complexity analysis",
"Step-by-step algorithm execution",
"Editable Python code examples in the browser",
"HD video export with optional sound"
]
}
</script>
<!-- Theme Script -->
<script>
(function () {
try {
const savedTheme = localStorage.getItem('theme');
const prefersDark = window.matchMedia(
'(prefers-color-scheme: dark)'
).matches;
const theme = savedTheme || (prefersDark ? 'dark' : 'light');
if (theme === 'dark') {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}
} catch (e) {
console.error('Failed to initialize theme:', e);
}
})();
</script>
<!-- WebMCP: register site tools for AI agent discovery -->
<script>
(function () {
if (
typeof navigator === 'undefined' ||
!('modelContext' in navigator) ||
!navigator.modelContext
) {
return;
}
try {
navigator.modelContext.registerTool({
name: 'bayan_flow_info',
description:
'Get information about Bayan Flow, an interactive algorithm visualizer with 45+ algorithms across sorting, pathfinding, searching, tree traversal, and graph categories.',
inputSchema: {
type: 'object',
properties: {
category: {
type: 'string',
description:
'Optional algorithm category name (sorting, pathfinding, searching, tree, graph)',
},
},
},
execute: async function (args) {
const categories = [
{
name: 'sorting',
description:
'Bubble Sort, Selection Sort, Insertion Sort, Merge Sort, Quick Sort, Heap Sort, Counting Sort, Radix Sort, Shell Sort, Cocktail Shaker Sort, Gnome Sort, Comb Sort, Tim Sort, Bitonic Sort, Pancake Sort, Bogo Sort, Stooge Sort',
count: 17,
},
{
name: 'pathfinding',
description:
'Dijkstra, A*, BFS, DFS, Greedy BFS, Bidirectional BFS, Jump Point Search, GBFS',
count: 8,
},
{
name: 'searching',
description:
'Linear Search, Binary Search, Jump Search, Exponential Search, Ternary Search, Fibonacci Search',
count: 6,
},
{
name: 'tree',
description:
'Pre-order, In-order, Post-order, Level-order, BFS on Tree, DFS on Tree, Morris In-order',
count: 7,
},
{
name: 'graph',
description:
'BFS, DFS, Topological Sort (Kahn), Bellman-Ford, Floyd-Warshall, Kruskal, Prim, Tarjan, Kosaraju, Ford-Fulkerson',
count: 10,
},
];
return {
name: 'Bayan Flow',
description:
'Interactive algorithm visualizer with 45+ algorithms across sorting, pathfinding, searching, tree traversal, and graph categories.',
url: 'https://bayanflow.com',
categories: args && args.category
? categories.filter(
(c) =>
c.name === args.category ||
(args.category === 'tree' && c.name === 'tree') ||
(args.category === 'graph' && c.name === 'graph'),
)
: categories,
};
},
annotations: { readOnlyHint: true },
});
} catch (_) {
/* WebMCP not available */
}
})();
</script>
<!-- Cloudflare Turnstile — invisible CAPTCHA for bot signup prevention -->
<script
src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit"
async
defer
></script>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>