Skip to content

Commit 46b5774

Browse files
committed
**refactor: replace MarqueeSection and UseCaseCard with MarqueeLine, restructure homepage and ProPage for modularity**
1 parent 33b36c5 commit 46b5774

File tree

10 files changed

+455
-662
lines changed

10 files changed

+455
-662
lines changed

website/.vitepress/theme/HomePage.vue

Lines changed: 108 additions & 426 deletions
Large diffs are not rendered by default.

website/.vitepress/theme/ProPage.vue

Lines changed: 75 additions & 170 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
<script setup lang="ts">
2-
import { Icon } from '@iconify/vue';
3-
import SiteFooter from './components/SiteFooter.vue';
42
import Badge from './components/Badge.vue';
5-
import CtaButton from './components/CtaButton.vue';
63
import CtaSection from './components/CtaSection.vue';
74
import FeatureCard from './components/FeatureCard.vue';
85
import FeatureSection from './components/FeatureSection.vue';
96
import FlutterBrand from './components/FlutterBrand.vue';
107
import GridBackground from './components/GridBackground.vue';
11-
import MarqueeSection from './components/MarqueeSection.vue';
8+
import HeroSection from './components/HeroSection.vue';
9+
import MarqueeGroup from './components/MarqueeGroup.vue';
10+
import Section from './components/Section.vue';
1211
import SectionHeader from './components/SectionHeader.vue';
12+
import SelectProgramCard from './components/SelectProgramCard.vue';
13+
import SiteFooter from './components/SiteFooter.vue';
1314
import TitleBadge from './components/TitleBadge.vue';
1415
1516
// Blinking grid cells generator
@@ -160,53 +161,56 @@ const workflowFeatures = [
160161
];
161162
162163
// Marquee content for Pro features
163-
const marqueePurple = [
164-
'Unlimited Undo/Redo',
165-
'Step-through Debugging',
166-
'Workflow Versioning',
167-
'Custom Tasks',
168-
'Task Libraries',
169-
'Auto-Save',
170-
'Collaboration',
171-
];
172-
173-
const marqueeTeal = [
174-
'BPMN Activities',
175-
'Saga Patterns',
176-
'Retry Policies',
177-
'Error Handling',
178-
'Async Execution',
179-
'Event Streams',
180-
'Audit Trails',
181-
'Worker Pools',
182-
];
183-
184-
const marqueeAmber = [
185-
'Priority Support',
186-
'Custom Integrations',
187-
'SSO Authentication',
188-
'Role-Based Access',
189-
'API Access',
190-
'Webhooks',
191-
'Custom Branding',
192-
'SLA Guarantee',
164+
const marqueeLines = [
165+
{
166+
items: [
167+
'Unlimited Undo/Redo',
168+
'Step-through Debugging',
169+
'Workflow Versioning',
170+
'Custom Tasks',
171+
'Task Libraries',
172+
'Auto-Save',
173+
'Collaboration',
174+
],
175+
color: 'purple' as const,
176+
},
177+
{
178+
items: [
179+
'BPMN Activities',
180+
'Saga Patterns',
181+
'Retry Policies',
182+
'Error Handling',
183+
'Async Execution',
184+
'Event Streams',
185+
'Audit Trails',
186+
'Worker Pools',
187+
],
188+
color: 'teal' as const,
189+
reverse: true,
190+
},
191+
{
192+
items: [
193+
'Priority Support',
194+
'Custom Integrations',
195+
'SSO Authentication',
196+
'Role-Based Access',
197+
'API Access',
198+
'Webhooks',
199+
'Custom Branding',
200+
'SLA Guarantee',
201+
],
202+
color: 'purple' as const,
203+
},
193204
];
194205
</script>
195206

196207
<template>
197-
<div class="pro-page">
198-
<!-- Grid Background (reused component) -->
208+
<div class="min-h-screen relative overflow-x-hidden">
209+
<!-- Grid Background -->
199210
<GridBackground color="purple" :blinkCells="proBlinkCells" />
200211

201-
<!-- Blur Effects -->
202-
<div class="pro-background">
203-
<div class="pro-blur pro-blur-purple" />
204-
<div class="pro-blur pro-blur-blue" />
205-
<div class="pro-blur pro-blur-teal" />
206-
</div>
207-
208-
<!-- Hero Section -->
209-
<section class="pro-hero">
212+
<!-- Hero Section with centered variant -->
213+
<HeroSection variant="centered">
210214
<Badge icon="ph:crown-fill" color="purple">Pro Edition</Badge>
211215
<h1 class="pro-title">
212216
<span class="pro-title-gradient">Vyuh Node Flow</span>
@@ -216,26 +220,13 @@ const marqueeAmber = [
216220
Enterprise-grade features for building sophisticated visual editors,
217221
workflow engines, and BPMN-style automation.
218222
</p>
219-
<div class="pro-select-card">
220-
<Badge icon="ph:users-three-fill" color="amber">Select Program</Badge>
221-
<p class="pro-select-text">
222-
We're working closely with select customers to refine the Vyuh Node
223-
Flow package, editor, and workflow engine. Want to shape the future of
224-
visual flow editing in Flutter?
225-
</p>
226-
<CtaButton
227-
href="https://vyuh.tech"
228-
icon="ph:envelope-fill"
229-
variant="primary"
230-
external
231-
>
232-
Join the Waitlist
233-
</CtaButton>
223+
<div class="mt-12">
224+
<SelectProgramCard />
234225
</div>
235-
</section>
226+
</HeroSection>
236227

237-
<!-- Features Grid -->
238-
<section class="pro-features-section">
228+
<!-- Pro Features Grid -->
229+
<Section first background>
239230
<SectionHeader
240231
badge="Pro Features"
241232
badge-icon="ph:star-fill"
@@ -244,7 +235,7 @@ const marqueeAmber = [
244235
subtitle="Powerful capabilities designed for professional development teams and enterprise applications."
245236
centered
246237
/>
247-
<div class="pro-features-grid">
238+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
248239
<FeatureCard
249240
v-for="(feature, index) in proFeatures"
250241
:key="index"
@@ -254,17 +245,13 @@ const marqueeAmber = [
254245
:color="feature.color"
255246
/>
256247
</div>
257-
</section>
248+
</Section>
258249

259250
<!-- Marquee -->
260-
<section class="pro-marquee-section">
261-
<MarqueeSection :items="marqueePurple" color="purple" />
262-
<MarqueeSection :items="marqueeTeal" color="teal" reverse />
263-
<MarqueeSection :items="marqueeAmber" color="purple" />
264-
</section>
251+
<MarqueeGroup :lines="marqueeLines" />
265252

266253
<!-- Workflow Engine Section -->
267-
<section class="workflow-engine-section">
254+
<Section background>
268255
<SectionHeader
269256
badge="Workflow Engine"
270257
badge-icon="ph:git-branch-fill"
@@ -275,7 +262,7 @@ const marqueeAmber = [
275262
large-title
276263
/>
277264

278-
<div class="workflow-details">
265+
<div class="mt-16">
279266
<FeatureSection
280267
v-for="(feature, index) in workflowFeatures"
281268
:key="index"
@@ -289,7 +276,7 @@ const marqueeAmber = [
289276
:reverse="index % 2 === 1"
290277
/>
291278
</div>
292-
</section>
279+
</Section>
293280

294281
<!-- CTA Section -->
295282
<CtaSection
@@ -301,14 +288,20 @@ const marqueeAmber = [
301288
href: 'https://vyuh.tech',
302289
icon: 'ph:rocket-launch-fill',
303290
label: 'Apply for Select Access',
304-
external: true
291+
external: true,
305292
}"
306293
:secondary-actions="[
307-
{ href: '/docs/getting-started/installation', icon: 'ph:github-logo-fill', label: 'Try Free Version' }
294+
{
295+
href: '/docs/getting-started/installation',
296+
icon: 'ph:github-logo-fill',
297+
label: 'Try Free Version',
298+
},
308299
]"
309300
>
310301
<template #subtitle>
311-
<p class="cta-subtitle">
302+
<p
303+
class="text-lg text-slate-600 dark:text-zinc-400 leading-relaxed mb-10"
304+
>
312305
We're collaborating with a select group of customers to build the
313306
future of visual flow editing in
314307
<FlutterBrand />. Get early access, direct support, and help shape the
@@ -325,52 +318,17 @@ const marqueeAmber = [
325318
<style>
326319
@reference "./style.css";
327320
328-
/* ═══════════════════════════════════════════════════════════════════
329-
PRO PAGE BASE
330-
═══════════════════════════════════════════════════════════════════ */
331-
332-
.pro-page {
333-
@apply min-h-screen relative overflow-x-hidden;
334-
/* No solid background - let the grid show through */
335-
}
336-
337-
/* ═══════════════════════════════════════════════════════════════════
338-
BACKGROUND EFFECTS
339-
═══════════════════════════════════════════════════════════════════ */
340-
341-
.pro-background {
342-
@apply fixed inset-0 z-[1] pointer-events-none overflow-hidden;
343-
}
344-
345-
.pro-blur {
346-
@apply absolute w-96 h-96 rounded-full blur-3xl;
347-
}
348-
349-
.pro-blur-purple {
350-
@apply bg-violet-500/20 dark:bg-violet-400/15 top-1/4 left-1/4;
351-
}
352-
353-
.pro-blur-blue {
354-
@apply bg-blue-500/15 dark:bg-blue-400/10 top-1/2 right-1/4;
355-
}
356-
357-
.pro-blur-teal {
358-
@apply bg-teal-500/15 dark:bg-teal-400/10 bottom-1/4 left-1/3;
359-
}
360-
361-
/* ═══════════════════════════════════════════════════════════════════
362-
HERO SECTION
363-
═══════════════════════════════════════════════════════════════════ */
364-
365-
.pro-hero {
366-
@apply relative z-10 py-32 px-6 text-center max-w-4xl mx-auto;
367-
}
368-
321+
/* Pro page title - unique gradient styling */
369322
.pro-title {
370323
@apply text-5xl sm:text-6xl lg:text-7xl font-black leading-none mb-6;
371324
font-family: var(--vn-font-display);
372325
}
373326
327+
.pro-subtitle {
328+
@apply text-xl text-slate-600 dark:text-zinc-400 leading-relaxed;
329+
@apply text-center max-w-2xl mx-auto;
330+
}
331+
374332
.pro-title-gradient {
375333
@apply block;
376334
background: linear-gradient(
@@ -393,57 +351,4 @@ const marqueeAmber = [
393351
-webkit-text-fill-color: transparent;
394352
background-clip: text;
395353
}
396-
397-
.pro-subtitle {
398-
@apply text-xl text-slate-600 dark:text-zinc-400 leading-relaxed mb-10 max-w-2xl mx-auto;
399-
}
400-
401-
.pro-select-card {
402-
@apply flex flex-col items-center gap-4 p-8 rounded-2xl max-w-xl mx-auto;
403-
@apply bg-white/80 dark:bg-zinc-800/60 backdrop-blur-sm;
404-
@apply border border-slate-200/60 dark:border-zinc-600/40;
405-
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);
406-
}
407-
408-
.dark .pro-select-card {
409-
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
410-
}
411-
412-
.pro-select-text {
413-
@apply text-base text-slate-500 dark:text-zinc-400 text-center;
414-
}
415-
416-
/* ═══════════════════════════════════════════════════════════════════
417-
FEATURES SECTION
418-
═══════════════════════════════════════════════════════════════════ */
419-
420-
.pro-features-section {
421-
@apply relative z-10 py-24 px-6 max-w-6xl mx-auto;
422-
}
423-
424-
.pro-features-grid {
425-
@apply grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6;
426-
}
427-
428-
/* ═══════════════════════════════════════════════════════════════════
429-
MARQUEE SECTION
430-
═══════════════════════════════════════════════════════════════════ */
431-
432-
.pro-marquee-section {
433-
@apply relative z-10 py-10 overflow-hidden;
434-
@apply bg-white/70 dark:bg-zinc-800/50;
435-
@apply backdrop-blur-md;
436-
}
437-
438-
/* ═══════════════════════════════════════════════════════════════════
439-
WORKFLOW ENGINE SECTION
440-
═══════════════════════════════════════════════════════════════════ */
441-
442-
.workflow-engine-section {
443-
@apply relative z-10 py-24 px-6 max-w-6xl mx-auto;
444-
}
445-
446-
.workflow-details {
447-
@apply mt-16;
448-
}
449354
</style>
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<script setup lang="ts">
2+
/**
3+
* BentoGrid - A responsive grid with varied column spans for visual interest.
4+
* Uses CSS nth-child selectors for the bento layout pattern.
5+
*/
6+
</script>
7+
8+
<template>
9+
<div class="bento-grid">
10+
<slot />
11+
</div>
12+
</template>
13+
14+
<style>
15+
@reference "../style.css";
16+
17+
.bento-grid {
18+
@apply grid gap-6 max-w-7xl mx-auto;
19+
grid-template-columns: repeat(5, 1fr);
20+
}
21+
22+
/* Bento layout pattern - varied column spans */
23+
.bento-grid > :nth-child(1) { grid-column: span 2; }
24+
.bento-grid > :nth-child(2) { grid-column: span 2; }
25+
.bento-grid > :nth-child(3) { grid-column: span 1; }
26+
.bento-grid > :nth-child(4) { grid-column: span 1; }
27+
.bento-grid > :nth-child(5) { grid-column: span 2; }
28+
.bento-grid > :nth-child(6) { grid-column: span 2; }
29+
.bento-grid > :nth-child(7) { grid-column: span 2; }
30+
.bento-grid > :nth-child(8) { grid-column: span 1; }
31+
.bento-grid > :nth-child(9) { grid-column: span 2; }
32+
.bento-grid > :nth-child(10) { grid-column: span 2; }
33+
.bento-grid > :nth-child(11) { grid-column: span 1; }
34+
.bento-grid > :nth-child(12) { grid-column: span 2; }
35+
36+
/* Tablet: 3-column layout */
37+
@media (max-width: 1100px) and (min-width: 768px) {
38+
.bento-grid {
39+
grid-template-columns: repeat(3, 1fr);
40+
}
41+
.bento-grid > :nth-child(4n + 1) { grid-column: span 2; }
42+
.bento-grid > :nth-child(4n + 2) { grid-column: span 1; }
43+
.bento-grid > :nth-child(4n + 3) { grid-column: span 1; }
44+
.bento-grid > :nth-child(4n) { grid-column: span 2; }
45+
}
46+
47+
/* Mobile: single column */
48+
@media (max-width: 767px) {
49+
.bento-grid {
50+
@apply grid-cols-1;
51+
}
52+
.bento-grid > :nth-child(n) {
53+
grid-column: span 1;
54+
}
55+
}
56+
</style>

0 commit comments

Comments
 (0)