first commit

This commit is contained in:
vargha1
2026-09-21 16:18:49 +03:30
commit 5198432136
61 changed files with 9629 additions and 0 deletions

View File

@@ -0,0 +1,161 @@
import Image from "next/image";
import type { ReactNode } from "react";
import { ButtonLink } from "@/components/button";
import { Reveal } from "@/components/reveal";
type Feature = { title: string; description: string; icon: ReactNode };
const features: Feature[] = [
{
title: "Fleet Management",
description: "Manage vehicles, availability, assignments, utilization and operational status.",
icon: (
<>
<path d="M4 10C4 6.229 4 4.343 5.172 3.172 6.343 2 8.229 2 12 2s5.657 0 6.828 1.172C20 4.343 20 6.229 20 10v2c0 3.771 0 5.657-1.172 6.828C17.657 20 15.771 20 12 20s-5.657 0-6.828-1.172C4 17.657 4 15.771 4 12z" />
<path d="M4 13h16M15.5 16H17M7 16h1.5" />
<path d="M6 19.5V21a1 1 0 0 0 1 1h1.5a1 1 0 0 0 1-1v-1M18 19.5V21a1 1 0 0 1-1 1h-1.5a1 1 0 0 1-1-1v-1" />
<path d="M20 9h1a1 1 0 0 1 1 1v1a1 1 0 0 1-.4.8L20 13M4 9H3a1 1 0 0 0-1 1v1a1 1 0 0 0 .4.8L4 13M19.5 5h-15" />
</>
),
},
{
title: "Scheduling",
description: "Coordinate departures, routes, vehicles, drivers and staff.",
icon: (
<>
<path d="M2 12c0-3.77 0-5.66 1.17-6.83C4.34 4 6.23 4 10 4h4c3.77 0 5.66 0 6.83 1.17C22 6.34 22 8.23 22 12v2c0 3.77 0 5.66-1.17 6.83C19.66 22 17.77 22 14 22h-4c-3.77 0-5.66 0-6.83-1.17C2 19.66 2 17.77 2 14z" />
<path d="M7 4V2.5M17 4V2.5M2.5 9h19" />
</>
),
},
{
title: "Driver Management",
description: "Assign drivers and keep operational information connected.",
icon: (
<>
<path d="M8 9v6M12 9v6" />
<path d="M8 12h5c.93 0 1.4 0 1.77-.15.49-.2.88-.6 1.08-1.09.15-.37.15-.83.15-1.76" />
<rect x="2" y="2" width="20" height="20" rx="5" />
</>
),
},
{
title: "Staff Assignment",
description: "Coordinate teams across tours, transportation services and daily operations.",
icon: (
<>
<circle cx="9" cy="6" r="4" />
<path d="M15 9c1.66 0 3-1.34 3-3s-1.34-3-3-3" />
<ellipse cx="9" cy="17" rx="7" ry="4" />
<path d="M18 14c1.75.38 3 1.36 3 2.5 0 1.03-1.01 1.92-2.5 2.37" />
</>
),
},
{
title: "Pickup Management",
description: "Manage pickup locations, times, passenger information and communications.",
icon: (
<>
<circle cx="12" cy="12" r="3" />
<path d="M13.77 2.15C13.4 2 12.93 2 12 2s-1.4 0-1.77.15a2.4 2.4 0 0 0-1.08 1.08c-.09.22-.13.48-.14.86a1.8 1.8 0 0 1-.91 1.5c-.48.28-1.07.27-1.56 0-.34-.18-.58-.27-.82-.3-.53-.07-1.06.07-1.48.4-.31.24-.55.65-1.01 1.45-.47.81-.7 1.21-.75 1.61-.07.53.07 1.06.4 1.48.14.19.35.35.67.55.47.3.77.8.77 1.36 0 .56-.3 1.06-.77 1.36-.32.2-.53.36-.67.55-.32.42-.46.95-.4 1.48.05.4.28.8.75 1.6.46.8.69 1.21 1 1.45.42.32.95.46 1.48.4.24-.03.48-.13.82-.3.49-.27 1.08-.27 1.56 0 .48.28.77.8.79 1.36.01.38.05.64.14.86.2.5.6.88 1.08 1.08.37.15.83.15 1.77.15.93 0 1.4 0 1.77-.15a2.4 2.4 0 0 0 1.08-1.08c.09-.22.13-.48.14-.86a1.8 1.8 0 0 1 .91-1.5c.48-.28 1.07-.27 1.56 0 .34.18.58.27.82.3.53.07 1.06-.07 1.48-.4.31-.24.55-.65 1-1.45.47-.8.7-1.21.75-1.6a1.9 1.9 0 0 0-.4-1.48c-.14-.19-.35-.35-.67-.55A1.6 1.6 0 0 1 19.56 12c0-.56.3-1.06.77-1.36.32-.2.53-.36.67-.55.32-.42.46-.95.4-1.48-.05-.4-.28-.8-.75-1.6-.46-.8-.69-1.21-1-1.45a1.9 1.9 0 0 0-1.48-.4c-.24.03-.48.12-.82.3-.49.27-1.08.28-1.56 0a1.8 1.8 0 0 1-.91-1.5c-.01-.38-.05-.64-.14-.86a2.4 2.4 0 0 0-1.08-1.08z" />
</>
),
},
{
title: "Operational Alerts",
description: "Identify issues and exceptions before they become problems.",
icon: (
<>
<path d="M5.31 10.76C8.23 5.59 9.69 3 12 3s3.77 2.59 6.69 7.76l.36.65c2.43 4.3 3.64 6.45 2.54 8.02C20.5 21 17.79 21 12.36 21h-.73c-5.43 0-8.14 0-9.23-1.57-1.1-1.57.11-3.72 2.54-8.02z" />
<path d="M12 8v5" />
<circle cx="12" cy="16" r="1" fill="currentColor" stroke="none" />
</>
),
},
{
title: "Utilization",
description: "Understand how your vehicles, staff and capacity are being used.",
icon: (
<>
<path d="M17.41 10.41C18 9.83 18 8.89 18 7s0-2.83-.59-3.41M17.41 10.41C16.83 11 15.89 11 14 11h-4c-1.89 0-2.83 0-3.41-.59M17.41 3.59C16.83 3 15.89 3 14 3h-4C8.11 3 7.17 3 6.59 3.59M6.59 3.59C6 4.17 6 5.11 6 7s0 2.83.59 3.41" />
<path d="M13 7a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z" />
<path d="M18 6c-1.66 0-3-1.34-3-3M18 8c-1.66 0-3 1.34-3 3M6 6c1.66 0 3-1.34 3-3M6 8c1.66 0 3 1.34 3 3" />
<path d="M5 20.39h2.26c1.01 0 2.03.1 3.02.31 1.74.35 3.57.4 5.33.11.87-.14 1.72-.36 2.49-.73.7-.34 1.55-.81 2.12-1.34.57-.53 1.17-1.4 1.59-2.08.36-.58.19-1.29-.39-1.73-.64-.48-1.58-.48-2.22 0l-1.8 1.36c-.7.53-1.47 1.02-2.38 1.16a4 4 0 0 1-.34.03m-1.92.01c.68.07 1.29.05 1.81 0l.11-.01m0 0c.15-.03.29-.12.43-.24.64-.56.68-1.5.12-2.13a2.7 2.7 0 0 0-.45-.4c-2.8-1.67-7.15-.4-9.78 1.46" />
<rect x="2" y="14" width="3" height="8" rx="1.5" />
</>
),
},
];
function FeatureIcon({ children }: { children: ReactNode }) {
return (
<svg viewBox="0 0 24 24" fill="none" stroke="#0160d4" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden className="size-6 shrink-0">
{children}
</svg>
);
}
function FeatureCard({ f }: { f: Feature }) {
return (
<div className="group flex h-full flex-col justify-center gap-2 rounded-3xl border border-[#0160d4]/12 bg-white px-6 py-4 transition-all duration-300 hover:-translate-y-1 hover:border-transparent hover:shadow-lg">
<FeatureIcon>{f.icon}</FeatureIcon>
<h3 className="text-xl font-medium text-foreground">{f.title}</h3>
<p className="text-sm leading-relaxed text-foreground/70">{f.description}</p>
</div>
);
}
export function TourOperations() {
return (
<section className="relative overflow-hidden py-20 lg:py-28">
<div className="mx-auto grid max-w-6xl gap-12 px-4 sm:px-6 lg:grid-cols-[7fr_5fr] lg:gap-16">
<Reveal className="order-2 flex flex-col gap-8 lg:order-1">
<div className="flex flex-col gap-6">
<h2 className="text-4xl font-medium tracking-tight text-foreground sm:text-5xl">
Tour Operations &amp; Fleet Management Software
</h2>
<span className="w-fit items-center rounded-2xl bg-[#0160D4]/10 px-4 py-3 font-bold text-[#0160D4] text-xl">
From Booking to Operation. Automatically{" "}
<em className="font-normal italic">Connected</em>.
</span>
<p className="max-w-xl text-sm text-muted sm:text-base">
Know exactly what&apos;s happening across your business with
connected scheduling, fleet, driver, staff and pickup management.
</p>
</div>
<div className="grid gap-4 sm:grid-cols-2">
{features.map((f, i) => (
<Reveal key={f.title} delay={i * 80}>
<FeatureCard f={f} />
</Reveal>
))}
<Reveal
delay={features.length * 80}
className="flex flex-col items-center justify-center gap-4 rounded-3xl border border-[#0160d4]/12 bg-white px-6 py-4 text-center"
>
<p className="text-xl font-medium text-foreground">
Lets see the
</p>
<ButtonLink href="#operations">Operations</ButtonLink>
</Reveal>
</div>
</Reveal>
<Reveal
delay={120}
className="order-1 mx-auto w-full max-w-sm lg:order-2 lg:mx-0"
>
<Image
src="/tourOperationPhone.png"
alt="VOYAGER mobile app showing today's revenue, bookings, departures, vehicles operating and staff assigned"
width={400}
height={520}
sizes="(min-width: 1024px) 380px, 70vw"
className="h-auto w-full object-contain transition-transform duration-500 hover:-translate-y-1"
/>
</Reveal>
</div>
</section>
);
}