From f816ce0398e22b3e2c6f30224843bef38c9b1002 Mon Sep 17 00:00:00 2001 From: bender Date: Thu, 5 Mar 2026 23:00:00 +0000 Subject: [PATCH 1/2] Update src/app/contact/page.tsx --- src/app/contact/page.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/contact/page.tsx b/src/app/contact/page.tsx index 045cbec..6bc6a14 100644 --- a/src/app/contact/page.tsx +++ b/src/app/contact/page.tsx @@ -24,10 +24,10 @@ export default function ContactPage() { -- 2.49.1 From 89bcb4aa005abd88b05160f81c0e5a3f0d866257 Mon Sep 17 00:00:00 2001 From: bender Date: Thu, 5 Mar 2026 23:00:01 +0000 Subject: [PATCH 2/2] Update src/app/page.tsx --- src/app/page.tsx | 170 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 119 insertions(+), 51 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index 44de95d..515b50f 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -9,7 +9,7 @@ import MetricCardThree from '@/components/sections/metrics/MetricCardThree'; import FaqSplitText from '@/components/sections/faq/FaqSplitText'; import ContactCTA from '@/components/sections/contact/ContactCTA'; import FooterMedia from '@/components/sections/footer/FooterMedia'; -import { Zap, Flame, Sparkles, Crown, Users, Star, Clock, TrendingUp, Mail, Calendar, X, CheckCircle } from 'lucide-react'; +import { Zap, Flame, Sparkles, Crown, Users, Star, Clock, TrendingUp, Mail, Calendar, X, CheckCircle, AlertCircle } from 'lucide-react'; import { useState } from 'react'; export default function LandingPage() { @@ -20,6 +20,9 @@ export default function LandingPage() { const [selectedDate, setSelectedDate] = useState(''); const [selectedTime, setSelectedTime] = useState(''); const [selectedAddOns, setSelectedAddOns] = useState([]); + const [name, setName] = useState(''); + const [email, setEmail] = useState(''); + const [phone, setPhone] = useState(''); const [bookedSlots, setBookedSlots] = useState([ '2025-01-16T17:00', '2025-01-16T19:00', @@ -52,6 +55,9 @@ export default function LandingPage() { setSelectedPackage(packageId); setGroupSize(1); setSelectedAddOns([]); + setName(''); + setEmail(''); + setPhone(''); setShowBookingModal(true); }; @@ -62,6 +68,9 @@ export default function LandingPage() { setSelectedDate(''); setSelectedTime(''); setSelectedAddOns([]); + setName(''); + setEmail(''); + setPhone(''); }; const handleAddOnChange = (addOnId: string) => { @@ -84,7 +93,7 @@ export default function LandingPage() { }; const handleBooking = async () => { - if (selectedPackage && selectedDate && selectedTime) { + if (selectedPackage && selectedDate && selectedTime && name && email) { if (groupSize > 4) { alert(`Group size exceeds maximum of 4 people. Please contact us for custom group bookings at bookings@rageroomvienna.local or call our team.`); return; @@ -105,6 +114,9 @@ export default function LandingPage() { const totalPrice = packageTotal + addOnsTotal; const bookingData = { + name, + email, + phone, package: selectedPackage, groupSize, date: selectedDate, @@ -118,7 +130,6 @@ export default function LandingPage() { }; try { - // Save booking data to database const response = await fetch('/api/bookings', { method: 'POST', headers: { 'Content-Type': 'application/json' }, @@ -126,7 +137,6 @@ export default function LandingPage() { }); if (response.ok) { - // Add to booked slots setBookedSlots([...bookedSlots, slotKey]); setLastBooking(bookingData); setShowSuccessPopup(true); @@ -136,7 +146,6 @@ export default function LandingPage() { } } catch (error) { console.error('Booking error:', error); - // Still show success for demo purposes setBookedSlots([...bookedSlots, slotKey]); setLastBooking(bookingData); setShowSuccessPopup(true); @@ -154,22 +163,18 @@ export default function LandingPage() { const dayOfWeek = dateObj.getDay(); const [hours] = time.split(':').map(Number); - // Monday (1) to Wednesday (3) - not bookable if (dayOfWeek >= 1 && dayOfWeek <= 3) { return false; } - // Thursday (4): 17:00-22:00 if (dayOfWeek === 4) { return hours >= 17 && hours < 22; } - // Friday (5): 14:00-24:00 if (dayOfWeek === 5) { return hours >= 14 && hours < 24; } - // Saturday (6) and Sunday (0): 12:00-24:00 if (dayOfWeek === 6 || dayOfWeek === 0) { return hours >= 12 && hours < 24; } @@ -205,7 +210,6 @@ export default function LandingPage() { }); } - // Filter out booked slots return availableTimes.filter(time => !bookedSlots.includes(`${date}T${time}`)); }; @@ -302,45 +306,62 @@ export default function LandingPage() {
- openBookingModal('basic') }, - ], - features: [ - "30 minutes of pure destruction", "All safety gear included", "Glass and ceramics", "Solo or duo session", "Perfect for first-timers", "Group price: €40/person (max 4 people)" - ], - }, - { - id: "destroyer", badge: "Most Popular", badgeIcon: Sparkles, - price: "€79", subtitle: "Best Value – 60 Minutes", buttons: [ - { text: "Book Now", onClick: () => openBookingModal('destroyer') }, - ], - features: [ - "60 minutes of maximum chaos", "Premium safety equipment", "Glass, ceramics & electronics", "Doubles or small group", "Most items to smash", "Best value experience", "Group price: €40/person (max 4 people)" - ], - }, - { - id: "elite", badge: "Ultimate", badgeIcon: Crown, - price: "€129", subtitle: "Total Annihilation – 90 Minutes", buttons: [ - { text: "Reserve Elite", onClick: () => openBookingModal('elite') }, - ], - features: [ - "90 minutes unlimited destruction", "VIP treatment & priorities", "All destruction categories", "Small group packages", "Premium room setup", "Professional photos included", "Group price: €40/person (max 4 people)" - ], - }, - ]} - animationType="slide-up" - textboxLayout="default" - useInvertedBackground={false} - /> +
+
+
+
+
+ +
+

💰 Group Discount Alert!

+

Book for 4+ people and get €40 per person – our best rate!

+

Save up to 49% on individual pricing. Perfect for team building, celebrations, and group events.

+
+
+
+ + openBookingModal('basic') }, + ], + features: [ + "30 minutes of pure destruction", "All safety gear included", "Glass and ceramics", "Solo or duo session", "Perfect for first-timers", "Group price: €40/person (max 4 people)" + ], + }, + { + id: "destroyer", badge: "Most Popular", badgeIcon: Sparkles, + price: "€79", subtitle: "Best Value – 60 Minutes", buttons: [ + { text: "Book Now", onClick: () => openBookingModal('destroyer') }, + ], + features: [ + "60 minutes of maximum chaos", "Premium safety equipment", "Glass, ceramics & electronics", "Doubles or small group", "Most items to smash", "Best value experience", "Group price: €40/person (max 4 people)" + ], + }, + { + id: "elite", badge: "Ultimate", badgeIcon: Crown, + price: "€129", subtitle: "Total Annihilation – 90 Minutes", buttons: [ + { text: "Reserve Elite", onClick: () => openBookingModal('elite') }, + ], + features: [ + "90 minutes unlimited destruction", "VIP treatment & priorities", "All destruction categories", "Small group packages", "Premium room setup", "Professional photos included", "Group price: €40/person (max 4 people)" + ], + }, + ]} + animationType="slide-up" + textboxLayout="default" + useInvertedBackground={false} + /> +
+
+
@@ -485,6 +506,39 @@ export default function LandingPage() {
+
+ + setName(e.target.value)} + placeholder="Your full name" + className="w-full border rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" + /> +
+ +
+ + setEmail(e.target.value)} + placeholder="your@email.com" + className="w-full border rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" + /> +
+ +
+ + setPhone(e.target.value)} + placeholder="+43 1 234 56789" + className="w-full border rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" + /> +
+