diff --git a/src/assets/front.jpg b/src/assets/front.jpg new file mode 100644 index 0000000..12f06ef Binary files /dev/null and b/src/assets/front.jpg differ diff --git a/src/components/AboutUsPage.tsx b/src/components/AboutUsPage.tsx index 558ffdb..b68a755 100644 --- a/src/components/AboutUsPage.tsx +++ b/src/components/AboutUsPage.tsx @@ -168,7 +168,7 @@ export function AboutUsPage({ transition={{ duration: 3, repeat: Infinity }} > Meet the{' '} - + Dream Team {' '} ✈️ diff --git a/src/components/AttractionsPage.tsx b/src/components/AttractionsPage.tsx index 7df14cb..79ec7df 100644 --- a/src/components/AttractionsPage.tsx +++ b/src/components/AttractionsPage.tsx @@ -301,7 +301,7 @@ export function AttractionsPage({

Discover{' '} - Melbourne's{' '} + Melbourne's{' '} Best{' '} Attractions

diff --git a/src/components/CheckoutPage.tsx b/src/components/CheckoutPage.tsx index 790e565..82e5f68 100644 --- a/src/components/CheckoutPage.tsx +++ b/src/components/CheckoutPage.tsx @@ -211,7 +211,7 @@ export function CheckoutPage({ >

Secure{' '} - Checkout + Checkout

Complete your purchase and start exploring Paris diff --git a/src/components/CustomPostcards.tsx b/src/components/CustomPostcards.tsx index 6562bfe..3556edb 100644 --- a/src/components/CustomPostcards.tsx +++ b/src/components/CustomPostcards.tsx @@ -4,7 +4,7 @@ import { Button } from './ui/button'; import { ImageWithFallback } from './figma/ImageWithFallback'; import { motion, useMotionValue, useSpring, useTransform, useInView } from 'motion/react'; import { HandwrittenText, useHandwrittenText } from './HandwrittenText'; -import postcardImage from 'figma:asset/d3a880cf8b7f1bec6da9b3f2ce4a76e822e483cf.png'; +import front from '../assets/front.jpg' interface EditableCardProps { isEditing: boolean; @@ -190,485 +190,485 @@ export function CustomPostcards() { }; // Ultra-realistic vintage postcard with responsive scaling and animations - const PostcardFrame = () => { - return ( - - {/* Realistic paper texture with variations */} -

+ // const PostcardFrame = () => { + // return ( + // + // {/* Realistic paper texture with variations */} + //
- {/* Age spots and stains */} -
-
-
-
-
+ // {/* Age spots and stains */} + //
+ //
+ //
+ //
+ //
- {/* Corner wear and creases */} -
-
+ // {/* Corner wear and creases */} + //
+ //
- {/* Subtle crease lines */} -
+ // {/* Subtle crease lines */} + //
- {/* Animated Vintage Vector Logo - Top Right - Mobile Optimized */} - - - {/* Subtle aging overlay for the vector */} -
- + // {/* Animated Vintage Vector Logo - Top Right - Mobile Optimized */} + // + // + // {/* Subtle aging overlay for the vector */} + //
+ // - {/* For Correspondence Text */} -
-

- For correspondence -

-
+ // {/* For Correspondence Text */} + //
+ //

+ // For correspondence + //

+ //
- {/* Realistic vertical divider with ink bleeding - Responsive */} -
+ // {/* Realistic vertical divider with ink bleeding - Responsive */} + //
- {/* Ink bleed effect around divider - Responsive */} -
+ // {/* Ink bleed effect around divider - Responsive */} + //
- {/* Right side content area - Responsive */} -
- {/* Editable Address Label Card - Responsive */} - setEditingCard(editingCard === 'label' ? null : 'label')} - style={{ - position: 'absolute', - top: '4.1%', - left: '0%', - pointerEvents: 'auto', - transform: 'rotate(-0.3deg)' - }} - editIcon={} - > -
- {postcardData.addressLabel} -
-
+ // {/* Right side content area - Responsive */} + //
+ // {/* Editable Address Label Card - Responsive */} + // setEditingCard(editingCard === 'label' ? null : 'label')} + // style={{ + // position: 'absolute', + // top: '4.1%', + // left: '0%', + // pointerEvents: 'auto', + // transform: 'rotate(-0.3deg)' + // }} + // editIcon={} + // > + //
+ // {postcardData.addressLabel} + //
+ //
- {/* Realistic horizontal ruled lines with ink bleeding - Responsive */} -
- {[...Array(9)].map((_, i) => ( -
- {/* Main line */} -
- {/* Ink bleed effect */} -
-
- ))} -
+ // {/* Realistic horizontal ruled lines with ink bleeding - Responsive */} + //
+ // {[...Array(9)].map((_, i) => ( + //
+ // {/* Main line */} + //
+ // {/* Ink bleed effect */} + //
+ //
+ // ))} + //
- {/* Editable Message Card with Handwritten Animation - Responsive */} - setEditingCard(editingCard === 'message' ? null : 'message')} - style={{ - position: 'absolute', - top: '17.6%', - left: '4.4%', - width: '88.2%', - pointerEvents: 'auto', - transform: 'rotate(-0.7deg)' - }} - editIcon={} - > -
- {editingCard === 'message' ? ( - // Show static text when editing -
- {postcardData.message} -
- ) : ( - // Show animated handwritten text when not editing - - )} -
-
+ // {/* Editable Message Card with Handwritten Animation - Responsive */} + // setEditingCard(editingCard === 'message' ? null : 'message')} + // style={{ + // position: 'absolute', + // top: '17.6%', + // left: '4.4%', + // width: '88.2%', + // pointerEvents: 'auto', + // transform: 'rotate(-0.7deg)' + // }} + // editIcon={} + // > + //
+ // {editingCard === 'message' ? ( + // // Show static text when editing + //
+ // {postcardData.message} + //
+ // ) : ( + // // Show animated handwritten text when not editing + // + // )} + //
+ //
- {/* Editable Date Card - Responsive */} - setEditingCard(editingCard === 'date' ? null : 'date')} - style={{ - position: 'absolute', - bottom: '16.2%', - right: '7.4%', - pointerEvents: 'auto', - transform: 'rotate(-1.5deg)' - }} - editIcon={} - > -
- {postcardData.date} -
-
-
+ // {/* Editable Date Card - Responsive */} + // setEditingCard(editingCard === 'date' ? null : 'date')} + // style={{ + // position: 'absolute', + // bottom: '16.2%', + // right: '7.4%', + // pointerEvents: 'auto', + // transform: 'rotate(-1.5deg)' + // }} + // editIcon={} + // > + //
+ // {postcardData.date} + //
+ //
+ //
- {/* Ultra-realistic stamp - Responsive */} - setEditingCard(editingCard === 'stamp' ? null : 'stamp')} - style={{ - position: 'absolute', - width: '12.5%', - height: '19.1%', - right: '3.5%', - bottom: '5.3%', - transform: 'rotate(-12deg)' - }} - editIcon={} - > -
- {/* Stamp aging and wear */} -
+ // {/* Ultra-realistic stamp - Responsive */} + // setEditingCard(editingCard === 'stamp' ? null : 'stamp')} + // style={{ + // position: 'absolute', + // width: '12.5%', + // height: '19.1%', + // right: '3.5%', + // bottom: '5.3%', + // transform: 'rotate(-12deg)' + // }} + // editIcon={} + // > + //
+ // {/* Stamp aging and wear */} + //
- {/* Stamp inner details */} -
-
+ // {/* Stamp inner details */} + //
+ //
- {/* Stamp text */} -
-
- TRAVEL -
-
- MEMORIES -
-
- 2024 -
-
+ // {/* Stamp text */} + //
+ //
+ // TRAVEL + //
+ //
+ // MEMORIES + //
+ //
+ // 2024 + //
+ //
- {/* Stamp perforations with realistic variations */} - {[...Array(20)].map((_, i) => ( -
0.1 ? 1 : 0.3 // Random missing perforations - }} - /> - ))} + // {/* Stamp perforations with realistic variations */} + // {[...Array(20)].map((_, i) => ( + //
0.1 ? 1 : 0.3 // Random missing perforations + // }} + // /> + // ))} - {/* Stamp smudge mark */} -
-
- + // {/* Stamp smudge mark */} + //
+ //
+ // - {/* Additional realistic aging effects */} -
- - ); - }; + // {/* Additional realistic aging effects */} + //
+ // + // ); + // }; return (
@@ -700,7 +700,7 @@ export function CustomPostcards() {

The Only Card That Sends Your - + Holiday {' '} Home. @@ -783,7 +783,8 @@ export function CustomPostcards() { WebkitBackfaceVisibility: "hidden" }} > - + {/* */} + Postcard Image {/* Subtle glow effect */} Unlock Your - Adventure + Adventure

What our{' '} - + travelers {' '} say diff --git a/src/components/FAQPage.tsx b/src/components/FAQPage.tsx index 58e7197..ffe84d2 100644 --- a/src/components/FAQPage.tsx +++ b/src/components/FAQPage.tsx @@ -244,7 +244,7 @@ export function FAQPage({

Frequently Asked{' '} - + Questions

diff --git a/src/components/HowItWorks.tsx b/src/components/HowItWorks.tsx index 35c4691..a4e680a 100644 --- a/src/components/HowItWorks.tsx +++ b/src/components/HowItWorks.tsx @@ -2,6 +2,7 @@ import { CreditCard, MapPin, Calendar, Zap, ChevronLeft, ChevronRight, Smartphon import { useState } from 'react'; import { motion, AnimatePresence } from 'motion/react'; import { ImageWithFallback } from './figma/ImageWithFallback'; +import { useLocation } from 'react-router-dom'; const steps = [ { @@ -51,6 +52,8 @@ const steps = [ export function HowItWorks() { const [activeStep, setActiveStep] = useState(0); // Start with first step active + const location = useLocation() + const nextStep = () => { setActiveStep((prev) => (prev + 1) % steps.length); }; @@ -78,8 +81,10 @@ export function HowItWorks() {

How Your{' '} - Melbourne{' '} - City Card{' '} + {!location.pathname.includes("landing") && + Melbourne + } + City Card{' '} Works.

diff --git a/src/components/LandingMagicItinerary.tsx b/src/components/LandingMagicItinerary.tsx index cb5c0f5..a67a853 100644 --- a/src/components/LandingMagicItinerary.tsx +++ b/src/components/LandingMagicItinerary.tsx @@ -131,7 +131,7 @@ export function LandingMagicItinerary() { viewport={{ once: true }} > Plan Your{' '} - + Dream Journey
diff --git a/src/components/MagicItineraryPage.tsx b/src/components/MagicItineraryPage.tsx index 45db6da..b6501e9 100644 --- a/src/components/MagicItineraryPage.tsx +++ b/src/components/MagicItineraryPage.tsx @@ -5,364 +5,422 @@ import { Button } from './ui/button'; import { Card, CardContent } from './ui/card'; import { Badge } from './ui/badge'; import Navbar from './Navbar'; -// import SubNavbar from './SubNavbar'; import { Footer } from './Footer'; import { MobileAppSection } from './MobileAppSection'; import { EnhancedTestimonials } from './EnhancedTestimonials'; import { HowItWorks } from './HowItWorks'; import { ImageWithFallback } from './figma/ImageWithFallback'; +import { PersonalizedTourHero } from './PersonalizedTourHero'; import { Layout } from '../Layout'; interface User { - email: string; - name: string; + email: string; + name: string; } interface MagicItineraryPageProps { - onBackClick: () => void; - onHomeClick: () => void; - onMelbourneClick: () => void; - onPassesClick: () => void; - onCheckoutClick: () => void; - onSignInClick: () => void; - onSignOutClick?: () => void; - onAttractionsClick: () => void; - onBlogsClick: () => void; - onHowItWorksClick: () => void; - onFAQClick: () => void; - onPrivacyPolicyClick: () => void; - onAboutUsClick: () => void; - onProfileClick: () => void; - onCityCardsClick: () => void; - onMagicItineraryClick: () => void; - onPostCardsClick: () => void; - onOffersClick: () => void; - onContactUsClick?: () => void; - onEsimsClick?: () => void; - onHotelDiscountsClick?: () => void; - onCreateItineraryClick: () => void; - onViewItineraryClick: () => void; - currentPage: string; - user: User | null; + onBackClick: () => void; + onHomeClick: () => void; + onMelbourneClick: () => void; + onPassesClick: () => void; + onCheckoutClick: () => void; + onSignInClick: () => void; + onSignOutClick?: () => void; + onAttractionsClick: () => void; + onBlogsClick: () => void; + onHowItWorksClick: () => void; + onFAQClick: () => void; + onPrivacyPolicyClick: () => void; + onAboutUsClick: () => void; + onProfileClick: () => void; + onCityCardsClick: () => void; + onMagicItineraryClick: () => void; + onPostCardsClick: () => void; + onOffersClick: () => void; + onSuperSavingsClick?: () => void; + onContactUsClick?: () => void; + onEsimsClick?: () => void; + onHotelDiscountsClick?: () => void; + onCreateItineraryClick: () => void; + onViewItineraryClick: () => void; + currentPage: string; + user: User | null; } export function MagicItineraryPage({ - onBackClick, - onHomeClick, - onMelbourneClick, - onPassesClick, - onCheckoutClick, - onSignInClick, - onSignOutClick, - onAttractionsClick, - onBlogsClick, - onHowItWorksClick, - onFAQClick, - onPrivacyPolicyClick, - onAboutUsClick, - onProfileClick, - onCityCardsClick, - onMagicItineraryClick, - onPostCardsClick, - onOffersClick, - onContactUsClick, - onEsimsClick, - onHotelDiscountsClick, - onCreateItineraryClick, - onViewItineraryClick, - currentPage, - user + onBackClick, + onHomeClick, + onMelbourneClick, + onPassesClick, + onCheckoutClick, + onSignInClick, + onSignOutClick, + onAttractionsClick, + onBlogsClick, + onHowItWorksClick, + onFAQClick, + onPrivacyPolicyClick, + onAboutUsClick, + onProfileClick, + onCityCardsClick, + onMagicItineraryClick, + onPostCardsClick, + onOffersClick, + onSuperSavingsClick, + onContactUsClick, + onEsimsClick, + onHotelDiscountsClick, + onCreateItineraryClick, + onViewItineraryClick, + currentPage, + user }: MagicItineraryPageProps) { - return ( -

- {/* Navbar */} - + return ( - {/* Sub Navbar */} - {/* */} + - {/* Hero Section */} -
- {/* Background gradient */} -
+
-
- -

- Plan Your Perfect{' '} - - Melbourne Adventure - -

-

- Let our AI create a personalized itinerary just for you. Answer a few questions about your preferences, - and we'll craft the perfect Melbourne experience tailored to your interests. -

- -
-
+ {/* Hero Section */} + - {/* Decorative elements */} -
-
-
+ {/* How It Works Section */} + - {/* How It Works Section */} - + {/* Features Section */} +
+
+ {/* Section Header */} + +

+ Smart Features for{' '} + Smart Travelers +

+

+ Experience intelligent trip planning powered by AI technology +

+
- {/* Features Section */} -
-
-
- {/* Left side - Features */} - -

- Smart Features for
- Smart Travelers -

+
+ {/* Left side - Features */} + + {[ + { + icon: , + title: 'AI-Powered Recommendations', + description: 'Our advanced AI analyzes your preferences to suggest the perfect experiences' + }, + { + icon: , + title: 'Optimized Scheduling', + description: 'Smart timing that considers opening hours, travel time, and crowd patterns' + }, + { + icon: , + title: 'Location-Based Planning', + description: 'Efficiently planned routes that minimize travel time and maximize experiences' + }, + { + icon: , + title: 'Instagram-Worthy Spots', + description: 'Discover hidden gems and perfect photo opportunities along your journey' + } + ].map((feature, index) => ( + + {/* Subtle accent line */} +
-
- {[ - { - icon: , - title: 'AI-Powered Recommendations', - description: 'Our advanced AI analyzes your preferences to suggest the perfect experiences' - }, - { - icon: , - title: 'Optimized Scheduling', - description: 'Smart timing that considers opening hours, travel time, and crowd patterns' - }, - { - icon: , - title: 'Location-Based Planning', - description: 'Efficiently planned routes that minimize travel time and maximize experiences' - }, - { - icon: , - title: 'Instagram-Worthy Spots', - description: 'Discover hidden gems and perfect photo opportunities along your journey' - } - ].map((feature, index) => ( - -
- {feature.icon} -
-
-

{feature.title}

-

{feature.description}

-
-
- ))} -
- +
+
+ {feature.icon} +
+
+

+ {feature.title} +

+

+ {feature.description} +

+
+
+ + ))} + - {/* Right side - Visual */} - -
-

Sample Itinerary

-
- {[ - { time: '9:00 AM', activity: 'Coffee at Degraves Street', duration: '30 min' }, - { time: '10:00 AM', activity: 'Royal Botanic Gardens', duration: '2 hours' }, - { time: '1:00 PM', activity: 'Lunch at Queen Victoria Market', duration: '1 hour' }, - { time: '3:00 PM', activity: 'Street Art Tour in Hosier Lane', duration: '1.5 hours' }, - { time: '6:00 PM', activity: 'Sunset at Eureka Skydeck', duration: '1 hour' } - ].map((item, index) => ( -
-
- {item.time} + {/* Right side - Sample Itinerary */} + +
+ {/* Header */} +
+
+
+ +
+

+ Sample Day Itinerary +

+
+

+ A perfectly planned Melbourne adventure +

+
+ + {/* Timeline */} +
+ {/* Vertical line */} +
+ + {[ + { time: '9:00 AM', activity: 'Coffee at Degraves Street', duration: '30 min', emoji: '☕' }, + { time: '10:00 AM', activity: 'Royal Botanic Gardens', duration: '2 hours', emoji: '🌿' }, + { time: '1:00 PM', activity: 'Lunch at Queen Victoria Market', duration: '1 hour', emoji: '🍽️' }, + { time: '3:00 PM', activity: 'Street Art Tour in Hosier Lane', duration: '1.5 hours', emoji: '🎨' }, + { time: '6:00 PM', activity: 'Sunset at Eureka Skydeck', duration: '1 hour', emoji: '🌅' } + ].map((item, index) => ( + + {/* Timeline dot */} +
+ {index === 0 &&
} +
+ +
+
+
+ {item.emoji} + + {item.time} + +
+ + {item.duration} + +
+

+ {item.activity} +

+
+ + ))} +
+ + {/* Decorative gradient blur */} +
+
+
-
-
{item.activity}
-
{item.duration}
+
+
+ + {/* Benefits Section */} +
+
+ +

Why Use Magic Itinerary?

+

+ Save time, discover more, and create unforgettable memories with personalized planning +

+
+ +
+ {[ + { + icon: , + title: 'Save Planning Time', + description: 'Skip hours of research. Get a complete itinerary in under 5 minutes.', + stat: '90% faster than manual planning' + }, + { + icon: , + title: 'Discover Hidden Gems', + description: 'Find unique experiences and local favorites you might have missed.', + stat: '50+ curated hidden spots' + }, + { + icon: , + title: 'Personalized Experience', + description: 'Every itinerary is unique, tailored specifically to your preferences.', + stat: '1000+ possible combinations' + } + ].map((benefit, index) => ( + + + +
+
+ {benefit.icon} +
+
+

+ {benefit.title} +

+

+ {benefit.description} +

+ + {benefit.stat} + +
+
+
+ ))}
-
- ))} -
-
- +
+ + + {/* What's Included Section */} +
+
+ +

+ Everything You Need,{' '} + All Included +

+

+ Your Magic Itinerary comes with comprehensive features for an amazing Melbourne experience +

+
+ +
+ {[ + { + emoji: '⏰', + title: 'Detailed Timeline', + description: 'Hour-by-hour schedule with optimal timing' + }, + { + emoji: '🚇', + title: 'Transportation Tips', + description: 'Best routes and transport options between locations' + }, + { + emoji: '⭐', + title: 'Local Recommendations', + description: 'Insider tips on food, shopping, and experiences' + }, + { + emoji: '💰', + title: 'Budget Planning', + description: 'Estimated costs and money-saving suggestions' + }, + { + emoji: '☔', + title: 'Weather Backup Plans', + description: 'Alternative indoor activities for rainy days' + }, + { + emoji: '📸', + title: 'Photo Opportunities', + description: 'Best spots and times for Instagram-worthy shots' + }, + { + emoji: '🏛️', + title: 'Cultural Insights', + description: 'Local history and interesting facts about each location' + }, + { + emoji: '🔔', + title: 'Real-time Updates', + description: 'Live information on closures, events, and crowds' + } + ].map((item, index) => ( + +
+
+
+ {item.emoji} +
+

+ {item.title} +

+

+ {item.description} +

+
+
+
+ ))} +
+
+
+ + {/* CTA Section */} + + + {/* Mobile App Section */} + + + {/* Customer Reviews */} + +
-
- - - {/* Benefits Section */} -
-
- -

Why Use Magic Itinerary?

-

- Save time, discover more, and create unforgettable memories with personalized planning -

-
- -
- {[ - { - icon: , - title: 'Save Planning Time', - description: 'Skip hours of research. Get a complete itinerary in under 5 minutes.', - stat: '90% faster than manual planning' - }, - { - icon: , - title: 'Discover Hidden Gems', - description: 'Find unique experiences and local favorites you might have missed.', - stat: '50+ curated hidden spots' - }, - { - icon: , - title: 'Personalized Experience', - description: 'Every itinerary is unique, tailored specifically to your preferences.', - stat: '1000+ possible combinations' - } - ].map((benefit, index) => ( - - - -
- {benefit.icon} -
-

{benefit.title}

-

{benefit.description}

- - {benefit.stat} - -
-
-
- ))} -
-
-
- - {/* What's Included Section */} -
-
- -

What's Included

-

- Your Magic Itinerary comes with everything you need for an amazing Melbourne experience -

-
- -
- {[ - { - title: 'Detailed Timeline', - description: 'Hour-by-hour schedule with optimal timing' - }, - { - title: 'Transportation Tips', - description: 'Best routes and transport options between locations' - }, - { - title: 'Local Recommendations', - description: 'Insider tips on food, shopping, and experiences' - }, - { - title: 'Budget Planning', - description: 'Estimated costs and money-saving suggestions' - }, - { - title: 'Weather Backup Plans', - description: 'Alternative indoor activities for rainy days' - }, - { - title: 'Photo Opportunities', - description: 'Best spots and times for Instagram-worthy shots' - }, - { - title: 'Cultural Insights', - description: 'Local history and interesting facts about each location' - }, - { - title: 'Real-time Updates', - description: 'Live information on closures, events, and crowds' - } - ].map((item, index) => ( - - - -

{item.title}

-

{item.description}

-
-
-
- ))} -
-
-
- - {/* CTA Section */} - - - {/* Mobile App Section */} - - - {/* Customer Reviews */} - - - - -
- ); + + ); } \ No newline at end of file diff --git a/src/components/MelbourneAttractions.tsx b/src/components/MelbourneAttractions.tsx index 00bd3a2..c8e3f00 100644 --- a/src/components/MelbourneAttractions.tsx +++ b/src/components/MelbourneAttractions.tsx @@ -281,7 +281,7 @@ export function MelbourneAttractions() {

Discover{' '} - + Melbourne's {' '} Best{' '} diff --git a/src/components/MelbourneBlogs.tsx b/src/components/MelbourneBlogs.tsx index d65a7f9..da06e92 100644 --- a/src/components/MelbourneBlogs.tsx +++ b/src/components/MelbourneBlogs.tsx @@ -116,7 +116,7 @@ export function MelbourneBlogs() {

Melbourne{' '} - + Blogs

diff --git a/src/components/MelbourneCardComparison.tsx b/src/components/MelbourneCardComparison.tsx index 58aa1bb..d12ac03 100644 --- a/src/components/MelbourneCardComparison.tsx +++ b/src/components/MelbourneCardComparison.tsx @@ -124,7 +124,7 @@ export function MelbourneCardComparison({ onCheckoutClick }: MelbourneCardCompar

- + Buy {' '} Now diff --git a/src/components/MelbourneFAQ.tsx b/src/components/MelbourneFAQ.tsx index 30afd55..b9c4e83 100644 --- a/src/components/MelbourneFAQ.tsx +++ b/src/components/MelbourneFAQ.tsx @@ -101,7 +101,7 @@ export function MelbourneFAQ() {

Frequently Asked{' '} - + Questions

diff --git a/src/components/MelbournePage.tsx b/src/components/MelbournePage.tsx index 2471181..edd2bbd 100644 --- a/src/components/MelbournePage.tsx +++ b/src/components/MelbournePage.tsx @@ -395,7 +395,7 @@ export function MelbournePage({ viewport={{ once: true }} > Plan Your{' '} - + Dream Journey
diff --git a/src/components/MelbourneTourOverview.tsx b/src/components/MelbourneTourOverview.tsx index 4457593..55882a8 100644 --- a/src/components/MelbourneTourOverview.tsx +++ b/src/components/MelbourneTourOverview.tsx @@ -89,7 +89,7 @@ export function MelbourneTourOverview() { >

Melbourne{' '} - + Tour {' '} Overview diff --git a/src/components/MobileAppSection.tsx b/src/components/MobileAppSection.tsx index b4d3b91..677347d 100644 --- a/src/components/MobileAppSection.tsx +++ b/src/components/MobileAppSection.tsx @@ -68,7 +68,7 @@ export function MobileAppSection() { >

Access all your{' '} - + city cards
diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 900f3b1..0dcef92 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -142,6 +142,13 @@ export default function Navbar({ path: '/faq', isShared: false }, + { + label: 'Your PostCard', + path: '/postcards', + isShared: true, + landingLabel: 'Your PostCard', + melbourneLabel: 'Your PostCard' + } ], melbourne: [ // Position 1 @@ -177,6 +184,13 @@ export default function Navbar({ isShared: true, landingLabel: 'Your Card', melbourneLabel: 'Your Card' + }, + { + label: 'Your PostCard', + path: '/postcards', + isShared: true, + landingLabel: 'Your PostCard', + melbourneLabel: 'Your PostCard' } ] }; diff --git a/src/components/PassesPage.tsx b/src/components/PassesPage.tsx index 2c05c99..cb87517 100644 --- a/src/components/PassesPage.tsx +++ b/src/components/PassesPage.tsx @@ -189,7 +189,7 @@ export function PassesPage({

- Buy Passes + Buy Passes

Skip the lines, save money, and explore more with our flexible city cards designed for modern travelers @@ -329,7 +329,7 @@ export function PassesPage({

Good to{' '} - Know + Know

Simple tips to help you get the most out of your CityCard experience @@ -604,7 +604,7 @@ export function PassesPage({

Access all your{' '} - city cards{' '} + city cards{' '} on your{' '} phone

@@ -663,7 +663,7 @@ export function PassesPage({

Why Choose{' '} - CityCards? + CityCards?

We're committed to providing the best city exploration experience with unmatched value and service diff --git a/src/components/PersonalizedTourHero.tsx b/src/components/PersonalizedTourHero.tsx index e5026cf..d7ef775 100644 --- a/src/components/PersonalizedTourHero.tsx +++ b/src/components/PersonalizedTourHero.tsx @@ -121,7 +121,8 @@ export function PersonalizedTourHero({ onCreateItineraryClick }: PersonalizedTou {/* Main Heading */}

Create Your{' '} - + Magic Itinerary

diff --git a/src/components/PostCardsPage.tsx b/src/components/PostCardsPage.tsx index 29ff99d..3eb05f6 100644 --- a/src/components/PostCardsPage.tsx +++ b/src/components/PostCardsPage.tsx @@ -13,6 +13,8 @@ import { CustomPostcards } from './CustomPostcards'; import { HowItWorks } from './HowItWorks'; import { ImageWithFallback } from './figma/ImageWithFallback'; import { Layout } from '../Layout'; +import front from '../assets/front.jpg' + interface User { email: string; @@ -73,165 +75,155 @@ export function PostCardsPage({ return (
{/* Navbar */} - + - {/* Sub Navbar */} - {/* */} + {/* Hero Section */} +
+ {/* Background gradient */} +
- {/* Hero Section */} -
- {/* Background gradient */} -
- -
- -

- Create Beautiful{' '} - - Custom Postcards - -

-

- Transform your travel memories into stunning, personalized postcards with authentic handwritten messages. - Share your journey in a way that feels truly personal and meaningful. -

- -
-
- - {/* Decorative elements */} -
-
-
- - {/* Reuse CustomPostcards Component */} - - - {/* How It Works Section */} - - - {/* Features Section */} - - - {/* Gallery Section */} -
-
- -

Postcard Gallery

-

- Get inspired by beautiful postcards created by our community of travelers -

-
- -
- {[ - { - image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop', - title: 'Tropical Paradise', - message: 'Greetings from paradise! The beaches here are absolutely breathtaking...', - location: 'Maldives' - }, - { - image: 'https://images.unsplash.com/photo-1499856871958-5b9627545d1a?w=400&h=600&fit=crop', - title: 'City Adventures', - message: 'Having the most amazing time exploring this incredible city...', - location: 'Paris, France' - }, - { - image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop', - title: 'Mountain Views', - message: 'The views from up here are simply unbelievable. Wish you were here...', - location: 'Swiss Alps' - }, - { - image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop', - title: 'Cultural Journey', - message: 'Immersing myself in the rich culture and history of this amazing place...', - location: 'Kyoto, Japan' - }, - { - image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop', - title: 'Safari Adventure', - message: 'Just saw the most incredible wildlife! This experience is unforgettable...', - location: 'Kenya, Africa' - }, - { - image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop', - title: 'Island Escape', - message: 'Living the island life and loving every moment of this peaceful retreat...', - location: 'Santorini, Greece' - } - ].map((postcard, index) => ( - - - -
- - - {postcard.location} - -
-
-

{postcard.title}

-

"{postcard.message}"

-
-
-
-
- ))} + */} + + < img src={front} alt='Postcard image' />
-
-
- {/* Ready to Explore Melbourne Section */} + {/* Decorative elements */} +
+
+
+ + {/* How It Works Section */} + + + {/* Reuse CustomPostcards Component */} + + + {/* Features Section */} + {/* Gallery Section */} +
+
+ +

+ Postcard{' '} + + Gallery + {' '} +

+

+ Get inspired by beautiful postcards created by our community of travelers +

+
- {/* Mobile App Section */} - +
+ {[ + { + image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop', + title: 'Tropical Paradise', + message: 'Greetings from paradise! The beaches here are absolutely breathtaking...', + location: 'Maldives' + }, + { + image: 'https://images.unsplash.com/photo-1499856871958-5b9627545d1a?w=400&h=600&fit=crop', + title: 'City Adventures', + message: 'Having the most amazing time exploring this incredible city...', + location: 'Paris, France' + }, + { + image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop', + title: 'Mountain Views', + message: 'The views from up here are simply unbelievable. Wish you were here...', + location: 'Swiss Alps' + }, + { + image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop', + title: 'Cultural Journey', + message: 'Immersing myself in the rich culture and history of this amazing place...', + location: 'Kyoto, Japan' + }, + { + image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop', + title: 'Safari Adventure', + message: 'Just saw the most incredible wildlife! This experience is unforgettable...', + location: 'Kenya, Africa' + }, + { + image: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=400&h=600&fit=crop', + title: 'Island Escape', + message: 'Living the island life and loving every moment of this peaceful retreat...', + location: 'Santorini, Greece' + } + ].map((postcard, index) => ( + + {/* */} + {/* */} +
+ +
+
+ + {postcard.location} + +

{postcard.title}

+

"{postcard.message}"

+
+ {/*
+
*/} +
+ ))} +
+
+
- {/* Customer Reviews */} - + {/* Customer Reviews */} + + + {/* Mobile App Section */} + -
); diff --git a/src/components/SuperSavingsPage.tsx b/src/components/SuperSavingsPage.tsx index 4124ccc..6743d5d 100644 --- a/src/components/SuperSavingsPage.tsx +++ b/src/components/SuperSavingsPage.tsx @@ -305,7 +305,7 @@ export function SuperSavingsPage({ >

Unlock{' '} - + Super Savings

@@ -355,7 +355,7 @@ export function SuperSavingsPage({ >

Featured{' '} - + Super Savings

diff --git a/src/components/TrustSection.tsx b/src/components/TrustSection.tsx index 14fd60c..327f68d 100644 --- a/src/components/TrustSection.tsx +++ b/src/components/TrustSection.tsx @@ -151,7 +151,7 @@ export function TrustSection() {

What Our{' '} - + Travelers {' '} Say diff --git a/src/components/WhatsIncluded.tsx b/src/components/WhatsIncluded.tsx index afc1307..a31114f 100644 --- a/src/components/WhatsIncluded.tsx +++ b/src/components/WhatsIncluded.tsx @@ -41,7 +41,7 @@ interface WhatsIncludedProps { user: User | null; } -export function WhatsIncluded({ +export function WhatsIncluded({ onBackClick, onHomeClick, onMelbourneClick, diff --git a/src/components/WhatsIncludedHero.tsx b/src/components/WhatsIncludedHero.tsx index 6f8c230..aed0156 100644 --- a/src/components/WhatsIncludedHero.tsx +++ b/src/components/WhatsIncludedHero.tsx @@ -99,10 +99,13 @@ export function WhatsIncludedHero({ onCreateItineraryClick }: WhatsIncludedHeroP className="text-center max-w-4xl" > {/* Main Heading */} -

+

One pass.{' '} - - Everything you need + + Everything you + {' '} + + need {' '} to explore.

diff --git a/src/index.css b/src/index.css index 5c19f7d..9c6c605 100644 --- a/src/index.css +++ b/src/index.css @@ -3661,6 +3661,7 @@ .bg-gradient-to-r { --tw-gradient-position: to right in oklab; background-image: linear-gradient(var(--tw-gradient-stops)); + /* padding-right: 8px; */ } .bg-gradient-to-t { diff --git a/vite.config.ts b/vite.config.ts index 551b307..b60eb7e 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -84,7 +84,7 @@ import * as path from 'path'; outDir: 'build', }, server: { - port: 4008, + port: 4009, open: true, }, }); \ No newline at end of file