@@ -0,0 +1,205 @@
import { useState } from « react »
import { Calendar, MapPin, Users, Clock } from « lucide-react »
import { LuxuryButton } from « ./ui/luxury-button »
import { Input } from « ./ui/input »
import { Label } from « ./ui/label »
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from « ./ui/select »
import { Textarea } from « ./ui/textarea »
const BookingForm = () => {
const [formData, setFormData] = useState({
service: « »,
date: « »,
time: « »,
pickupLocation: « »,
destination: « »,
passengers: « »,
name: « »,
email: « »,
phone: « »,
message: « »
})
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault()
// Handle form submission here
console.log(« Form submitted: », formData)
}
const handleInputChange = (field: string, value: string) => {
setFormData(prev => ({ …prev, [field]: value }))
}
return (
Réservation
Instantanée
Planifiez votre transport de luxe en quelques clics.
Notre équipe vous contactera pour confirmer les détails.
)
}
export default BookingForm
@@ -0,0 +1,116 @@
import { Phone, Mail, MapPin, Clock, Facebook, Instagram, Linkedin } from « lucide-react »
const Footer = () => {
return (
)
}
export default Footer
@@ -0,0 +1,105 @@
import { useState } from « react »
import { Menu, X, Phone, Mail } from « lucide-react »
import { LuxuryButton } from « ./ui/luxury-button »
const Header = () => {
const [isMenuOpen, setIsMenuOpen] = useState(false)
const navigation = [
{ name: « Accueil », href: « #home » },
{ name: « Véhicules », href: « #vehicles » },
{ name: « Services », href: « #services » },
{ name: « Témoignages », href: « #testimonials » },
{ name: « Contact », href: « #contact » },
]
return (
)
}
export default Header
@@ -0,0 +1,82 @@
import { ArrowRight, Star } from « lucide-react »
import { LuxuryButton } from « ./ui/luxury-button »
import heroImage from « @/assets/hero-mercedes-s-class.jpg »
const Hero = () => {
return (
{/* Background Image */}
{/* Content */}
{/* Premium Badge */}
Service de Prestige depuis 2020
{/* Main Heading */}
L’Élégance
à Votre Service
{/* Subtitle */}
Découvrez l’art du transport de luxe avec notre flotte de véhicules Mercedes
haut de gamme et nos chauffeurs professionnels dédiés à votre confort.
{/* Key Features */}
{/* CTA Buttons */}
Réserver Maintenant
Découvrir Notre Flotte
{/* Scroll Indicator */}
)
}
export default Hero
@@ -0,0 +1,95 @@
import { Plane, Calendar, Heart, Building, MapPin, Clock } from « lucide-react »
const Services = () => {
const services = [
{
icon: Plane,
title: « Transferts Aéroport »,
description: « Service de navette premium vers tous les aéroports. Suivi de vol en temps réel et accueil personnalisé. »,
features: [« Suivi de vol », « Accueil nominatif », « Assistance bagages »]
},
{
icon: Building,
title: « Transport d’Affaires »,
description: « Solutions de transport dédiées aux professionnels. Discrétion et ponctualité garanties pour vos rendez-vous. »,
features: [« Facturation entreprise », « Chauffeurs bilingues », « WiFi embarqué »]
},
{
icon: Heart,
title: « Événements & Mariages »,
description: « Accompagnement sur mesure pour vos moments d’exception. Service blanc gants et attention aux détails. »,
features: [« Décoration véhicule », « Itinéraires personnalisés », « Service de luxe »]
},
{
icon: Calendar,
title: « Roadshow & Tournées »,
description: « Organisation complète de vos déplacements multi-destinations avec coordination logistique. »,
features: [« Planning détaillé », « Gestion multi-villes », « Support 24h/24 »]
},
{
icon: MapPin,
title: « Visites Touristiques »,
description: « Découvrez la Belgique avec style. Circuits personnalisés et guides expérimentés. »,
features: [« Circuits sur mesure », « Guides locaux », « Arrêts à la demande »]
},
{
icon: Clock,
title: « Mise à Disposition »,
description: « Véhicule et chauffeur dédiés pour vos besoins spécifiques. Flexibilité totale assurée. »,
features: [« Tarification horaire », « Disponibilité étendue », « Service personnalisé »]
}
]
return (
Nos Services
sur Mesure
Du transport d’affaires aux événements privés, nous adaptons nos services
à vos besoins spécifiques avec le même niveau d’excellence.
{services.map((service, index) => {
const IconComponent = service.icon
return (
{service.title}
{service.description}
{service.features.map((feature, featureIndex) => (
-
{feature}
))}
)
})}
)
}
export default Services
@@ -0,0 +1,96 @@
import { Star, Quote } from « lucide-react »
const Testimonials = () => {
const testimonials = [
{
name: « Sophie Dupont »,
role: « Directrice Générale, Luxury Hotels Group »,
content: « Un service exceptionnel qui reflète parfaitement les valeurs de notre établissement. Nos clients VIP sont toujours ravis de cette prestation de qualité. »,
rating: 5,
company: « Luxury Hotels Group »
},
{
name: « Marc Dubois »,
role: « Wedding Planner »,
content: « Driver4You.Be transforme chaque mariage en conte de fées. Leur attention aux détails et leur discrétion sont remarquables. Je les recommande sans hésitation. »,
rating: 5,
company: « Prestige Events »
},
{
name: « Catherine Lambert »,
role: « Assistante de Direction »,
content: « Fiabilité et élégance sont au rendez-vous à chaque réservation. Nos dirigeants apprécient particulièrement le professionnalisme des chauffeurs. »,
rating: 5,
company: « International Corp »
},
{
name: « Philippe Martin »,
role: « Organisateur d’Événements »,
content: « Pour nos événements corporate, Driver4You.Be est notre partenaire de confiance. Gestion impeccable et service irréprochable à chaque mission. »,
rating: 5,
company: « Elite Events »
}
]
return (
Témoignages
de Confiance
La satisfaction de nos clients est notre plus belle récompense.
Découvrez leurs expériences avec Driver4You.Be.
{testimonials.map((testimonial, index) => (
{/* Quote Icon */}
{/* Rating */}
{[…Array(testimonial.rating)].map((_, i) => (
))}
{/* Content */}
« {testimonial.content} »
{/* Author */}
{testimonial.name.split(‘ ‘).map(n => n[0]).join( »)}
{testimonial.name}
{testimonial.role}
{testimonial.company}
))}
)
}
export default Testimonials
@@ -0,0 +1,73 @@
import { Users, Luggage, Wifi, Car } from « lucide-react »
import { LuxuryButton } from « ./ui/luxury-button »
interface VehicleCardProps {
name: string
description: string
image: string
passengers: number
luggage: number
features: string[]
price: string
}
const VehicleCard = ({ name, description, image, passengers, luggage, features, price }: VehicleCardProps) => {
return (
{/* Image */}
{/* Price Badge */}
{price}
{/* Content */}
{name}
{description}
{/* Specs */}
{passengers} passagers
{luggage} bagages
{/* Features */}
{features.map((feature, index) => (
))}
{/* CTA */}
Réserver
Détails
)
}
export default VehicleCard
@@ -0,0 +1,85 @@
import VehicleCard from « ./VehicleCard »
import sClassImage from « @/assets/mercedes-s-class.jpg »
import vClassImage from « @/assets/mercedes-v-class.jpg »
import customVanImage from « @/assets/custom-van.jpg »
const Vehicles = () => {
const vehicles = [
{
name: « Mercedes Classe S »,
description: « L’élégance absolue pour vos déplacements d’affaires et événements de prestige. Confort optimal et technologie de pointe. »,
image: sClassImage,
passengers: 3,
luggage: 3,
features: [
« Cuir Nappa premium »,
« Système audio Burmester »,
« Climatisation 4 zones »,
« Massage des sièges »,
« WiFi embarqué »
],
price: « À partir de 120€/h »
},
{
name: « Mercedes Classe V »,
description: « Spacieux et raffiné, parfait pour les groupes et les familles exigeantes. Voyage en toute sérénité. »,
image: vClassImage,
passengers: 7,
luggage: 8,
features: [
« Configuration salon »,
« Sièges capitaine pivotants »,
« Table de travail »,
« Éclairage d’ambiance »,
« Prises USB individuelles »
],
price: « À partir de 90€/h »
},
{
name: « Van Aménagé »,
description: « Solution premium pour événements spéciaux et longs trajets. Aménagement sur mesure pour votre confort absolu. »,
image: customVanImage,
passengers: 8,
luggage: 12,
features: [
« Bar intégré »,
« Écrans individuels »,
« Réfrigérateur »,
« Éclairage LED personnalisé »,
« Système audio premium »
],
price: « Sur demande »
}
]
return (
Notre Flotte
d’Exception
Découvrez notre sélection de véhicules Mercedes haut de gamme,
chacun méticuleusement entretenu et équipé pour vous offrir une expérience de voyage incomparable.
{vehicles.map((vehicle, index) => (
))}
)
}
export default Vehicles
@@ -0,0 +1,52 @@
import * as React from « react »
import { Slot } from « @radix-ui/react-slot »
import { cva, type VariantProps } from « class-variance-authority »
import { cn } from « @/lib/utils »
const luxuryButtonVariants = cva(
« inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lg text-sm font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 »,
{
variants: {
variant: {
primary: « bg-gradient-gold text-accent-foreground shadow-gold hover:shadow-luxury font-semibold tracking-wide »,
secondary: « bg-card text-card-foreground border border-accent/20 hover:bg-accent/10 hover:border-accent/40 shadow-card »,
outline: « border border-accent/30 bg-transparent text-accent hover:bg-accent hover:text-accent-foreground shadow-sm »,
ghost: « text-foreground hover:bg-accent/10 hover:text-accent »,
luxury: « bg-gradient-luxury text-off-white border border-accent/20 hover:border-accent shadow-luxury hover:shadow-gold font-medium »,
},
size: {
default: « h-12 px-8 py-3 »,
sm: « h-10 px-6 py-2 »,
lg: « h-14 px-10 py-4 text-base »,
xl: « h-16 px-12 py-5 text-lg »,
icon: « h-12 w-12 »,
},
},
defaultVariants: {
variant: « primary »,
size: « default »,
},
}
)
export interface LuxuryButtonProps
extends React.ButtonHTMLAttributes
,
VariantProps {
asChild?: boolean
}
const LuxuryButton = React.forwardRef(
({ className, variant, size, asChild = false, …props }, ref) => {
const Comp = asChild ? Slot : « button »
return (
)
}
)
LuxuryButton.displayName = « LuxuryButton »
export { LuxuryButton, luxuryButtonVariants }
@@ -1,105 +1,205 @@
@import url(‘https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;500;600;700&family=Inter:wght@300;400;500;600;700&display=swap’);
@tailwind base;
@tailwind components;
@tailwind utilities;
/* Definition of the design system. All colors, gradients, fonts, etc should be defined here.
All colors MUST be HSL.
*/
/* Driver4You.Be Luxury Design System */
@layer base {
:root {
–background: 0 0% 100%;
–foreground: 222.2 84% 4.9%;
/* Luxury Color Palette */
–background: 20 14% 4%;
–foreground: 60 9% 98%;
–card: 20 14% 8%;
–card-foreground: 60 9% 98%;
–popover: 20 14% 8%;
–popover-foreground: 60 9% 98%;
/* Deep Luxury Black */
–primary: 20 14% 4%;
–primary-foreground: 60 9% 98%;
/* Anthracite Grey */
–secondary: 220 13% 18%;
–secondary-foreground: 60 9% 98%;
/* Muted Tones */
–muted: 220 13% 15%;
–muted-foreground: 220 9% 65%;
/* Refined Gold Accent */
–accent: 45 100% 70%;
–accent-foreground: 20 14% 4%;
/* Elegant Off-White */
–off-white: 60 9% 98%;
–off-white-foreground: 20 14% 4%;
–destructive: 0 84% 60%;
–destructive-foreground: 60 9% 98%;
–border: 220 13% 25%;
–input: 220 13% 15%;
–ring: 45 100% 70%;
–radius: 0.75rem;
/* Luxury Gradients */
–gradient-luxury: linear-gradient(135deg, hsl(20 14% 4%) 0%, hsl(220 13% 8%) 100%);
–gradient-gold: linear-gradient(135deg, hsl(45 100% 70%) 0%, hsl(43 100% 82%) 100%);
–gradient-card: linear-gradient(145deg, hsl(220 13% 8%) 0%, hsl(220 13% 12%) 100%);
/* Premium Shadows */
–shadow-luxury: 0 25px 50px -12px hsl(20 14% 4% / 0.8);
–shadow-gold: 0 10px 40px -10px hsl(45 100% 70% / 0.3);
–shadow-card: 0 20px 40px -15px hsl(20 14% 4% / 0.6);
/* Smooth Transitions */
–transition-luxury: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
–transition-smooth: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.light {
–background: 60 9% 98%;
–foreground: 20 14% 4%;
–card: 0 0% 100%;
–card-foreground: 222.2 84% 4.9%;
–card-foreground: 20 14% 4%;
–popover: 0 0% 100%;
–popover-foreground: 222.2 84% 4.9%;
–popover-foreground: 20 14% 4%;
–primary: 222.2 47.4% 11.2%;
–primary-foreground: 210 40% 98%;
–primary: 20 14% 4%;
–primary-foreground: 60 9% 98%;
–secondary: 210 40% 96.1%;
–secondary-foreground: 222.2 47.4% 11.2%;
–secondary: 220 14% 95%;
–secondary-foreground: 20 14% 4%;
–muted: 210 40% 96.1%;
–muted-foreground: 215.4 16.3% 46.9%;
–muted: 220 14% 95%;
–muted-foreground: 220 13% 45%;
–accent: 210 40% 96.1%;
–accent-foreground: 222.2 47.4% 11.2%;
–accent: 45 100% 50%;
–accent-foreground: 60 9% 98%;
–destructive: 0 84.2% 60.2%;
–destructive-foreground: 210 40% 98%;
–border: 220 13% 91%;
–input: 220 13% 91%;
–ring: 45 100% 50%;
}
–border: 214.3 31.8% 91.4%;
–input: 214.3 31.8% 91.4%;
–ring: 222.2 84% 4.9%;
}
–radius: 0.5rem;
@layer base {
* {
@apply border-border;
}
–sidebar-background: 0 0% 98%;
body {
@apply bg-background text-foreground font-inter antialiased;
font-feature-settings: « cv11 », « ss01 »;
font-variant-ligatures: common-ligatures;
}
–sidebar-foreground: 240 5.3% 26.1%;
/* Typography Scale */
.display-1 {
@apply font-playfair text-6xl md:text-7xl lg:text-8xl font-bold leading-tight tracking-tight;
}
–sidebar-primary: 240 5.9% 10%;
.display-2 {
@apply font-playfair text-4xl md:text-5xl lg:text-6xl font-semibold leading-tight;
}
–sidebar-primary-foreground: 0 0% 98%;
.heading-1 {
@apply font-playfair text-3xl md:text-4xl lg:text-5xl font-semibold leading-tight;
}
–sidebar-accent: 240 4.8% 95.9%;
.heading-2 {
@apply font-playfair text-2xl md:text-3xl lg:text-4xl font-medium leading-snug;
}
–sidebar-accent-foreground: 240 5.9% 10%;
.heading-3 {
@apply font-playfair text-xl md:text-2xl lg:text-3xl font-medium leading-snug;
}
–sidebar-border: 220 13% 91%;
.body-large {
@apply font-inter text-lg md:text-xl leading-relaxed;
}
–sidebar-ring: 217.2 91.2% 59.8%;
.body-base {
@apply font-inter text-base leading-relaxed;
}
.dark {
–background: 222.2 84% 4.9%;
–foreground: 210 40% 98%;
.body-small {
@apply font-inter text-sm leading-relaxed;
}
/* Luxury Animations */
.luxury-fade-in {
animation: luxuryFadeIn 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
–card: 222.2 84% 4.9%;
–card-foreground: 210 40% 98%;
.luxury-slide-up {
animation: luxurySlideUp 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
–popover: 222.2 84% 4.9%;
–popover-foreground: 210 40% 98%;
.luxury-scale-in {
animation: luxuryScaleIn 0.6s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
–primary: 210 40% 98%;
–primary-foreground: 222.2 47.4% 11.2%;
@keyframes luxuryFadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
–secondary: 217.2 32.6% 17.5%;
–secondary-foreground: 210 40% 98%;
@keyframes luxurySlideUp {
from {
opacity: 0;
transform: translateY(40px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
–muted: 217.2 32.6% 17.5%;
–muted-foreground: 215 20.2% 65.1%;
@keyframes luxuryScaleIn {
from {
opacity: 0;
transform: scale(0.95);
}
to {
opacity: 1;
transform: scale(1);
}
}
–accent: 217.2 32.6% 17.5%;
–accent-foreground: 210 40% 98%;
/* Smooth scroll */
html {
scroll-behavior: smooth;
}
–destructive: 0 62.8% 30.6%;
–destructive-foreground: 210 40% 98%;
/* Custom scrollbar */
::-webkit-scrollbar {
width: 8px;
}
–border: 217.2 32.6% 17.5%;
–input: 217.2 32.6% 17.5%;
–ring: 212.7 26.8% 83.9%;
–sidebar-background: 240 5.9% 10%;
–sidebar-foreground: 240 4.8% 95.9%;
–sidebar-primary: 224.3 76.3% 48%;
–sidebar-primary-foreground: 0 0% 100%;
–sidebar-accent: 240 3.7% 15.9%;
–sidebar-accent-foreground: 240 4.8% 95.9%;
–sidebar-border: 240 3.7% 15.9%;
–sidebar-ring: 217.2 91.2% 59.8%;
::-webkit-scrollbar-track {
@apply bg-secondary;
}
}
@layer base {
* {
@apply border-border;
::-webkit-scrollbar-thumb {
@apply bg-accent rounded-full;
}
body {
@apply bg-background text-foreground;
::-webkit-scrollbar-thumb:hover {
@apply bg-accent/80;
}
}
}
@@ -1,12 +1,23 @@
// Update this page (the content is just a fallback if you fail to update the page)import Header from « @/components/Header »import Hero from « @/components/Hero »import Vehicles from « @/components/Vehicles »import Services from « @/components/Services »import Testimonials from « @/components/Testimonials »import BookingForm from « @/components/BookingForm »import Footer from « @/components/Footer »const Index = () => { return ( Welcome to Your Blank App
Start building your amazing project here!
);};
@@ -18,6 +18,10 @@ export default {
}
},
extend: {
fontFamily: {
playfair: [‘Playfair Display’, ‘serif’],
inter: [‘Inter’, ‘sans-serif’],
},
colors: {
border: ‘hsl(var(–border))’,
input: ‘hsl(var(–input))’,
@@ -44,6 +48,10 @@ export default {
DEFAULT: ‘hsl(var(–accent))’,
foreground: ‘hsl(var(–accent-foreground))’
},
‘off-white’: {
DEFAULT: ‘hsl(var(–off-white))’,
foreground: ‘hsl(var(–off-white-foreground))’
},
popover: {
DEFAULT: ‘hsl(var(–popover))’,
foreground: ‘hsl(var(–popover-foreground))’
@@ -63,6 +71,20 @@ export default {
ring: ‘hsl(var(–sidebar-ring))’
}
},
backgroundImage: {
‘gradient-luxury’: ‘var(–gradient-luxury)’,
‘gradient-gold’: ‘var(–gradient-gold)’,
‘gradient-card’: ‘var(–gradient-card)’,
},
boxShadow: {
‘luxury’: ‘var(–shadow-luxury)’,
‘gold’: ‘var(–shadow-gold)’,
‘card’: ‘var(–shadow-card)’,
},
transitionDuration: {
‘luxury’: ‘var(–transition-luxury)’,
‘smooth’: ‘var(–transition-smooth)’,
},
borderRadius: {
lg: ‘var(–radius)’,
md: ‘calc(var(–radius) – 2px)’,
@@ -84,11 +106,54 @@ export default {
to: {
height: ‘0’
}
},
‘luxury-fade-in’: {
‘0%’: {
opacity: ‘0’,
transform: ‘translateY(20px)’
},
‘100%’: {
opacity: ‘1’,
transform: ‘translateY(0)’
}
},
‘luxury-slide-up’: {
‘0%’: {
opacity: ‘0’,
transform: ‘translateY(40px)’
},
‘100%’: {
opacity: ‘1’,
transform: ‘translateY(0)’
}
},
‘luxury-scale-in’: {
‘0%’: {
opacity: ‘0’,
transform: ‘scale(0.95)’
},
‘100%’: {
opacity: ‘1’,
transform: ‘scale(1)’
}
},
‘float’: {
‘0%, 100%’: { transform: ‘translateY(0px)’ },
‘50%’: { transform: ‘translateY(-10px)’ }
},
‘shimmer’: {
‘0%’: { transform: ‘translateX(-100%)’ },
‘100%’: { transform: ‘translateX(100%)’ }
}
},
animation: {
‘accordion-down’: ‘accordion-down 0.2s ease-out’,
‘accordion-up’: ‘accordion-up 0.2s ease-out’
‘accordion-up’: ‘accordion-up 0.2s ease-out’,
‘luxury-fade-in’: ‘luxury-fade-in 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards’,
‘luxury-slide-up’: ‘luxury-slide-up 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards’,
‘luxury-scale-in’: ‘luxury-scale-in 0.6s cubic-bezier(0.4, 0, 0.2, 1) forwards’,
‘float’: ‘float 6s ease-in-out infinite’,
‘shimmer’: ‘shimmer 2s infinite’
}
}
},