# Syringa Park Generated llms-full extracted from Blade views. # about Source: resources/views/about/about.blade.php | Learn All About Our Story') !-- Open Graph --> !-- Page Header --> Our Story Our Story How We Got Started Syringa Park was born out of quiet moments during one of the loudest times in recent history. During the pandemic, Darin and Lisa Doliveira spent their daily permitted walks exploring the vast riverfront paths of Avianto Estate with their children and rescue dogs . Those walks—slow, reflective, and surrounded by untouched natural beauty —planted the very first seed of what would become Syringa Park . The Vision Perfect Family-Friendly Venue What began as a simple appreciation for the estate's tranquil, natural spaces soon grew into a vision: a place where families , food lovers , adventure seekers , and weekend wanderers could all find something meaningful. Not just a market. Not just a venue. But a lifestyle space shaped by nature , creativity , and community . Today, Syringa Park stands as a celebration of that vision—an ever-evolving, multi-experience destination where outdoor leisure , local culture , and family connection come together in one unforgettable setting. There is no entrance fee to Syringa Park. However, MiFitness Kids Play Park and Epic Karting operate independently and have their own pricing and schedules. See Activities Pets Welcome Dog Friendly At Syringa Park , we believe that a day out in nature is better when the whole family is included—and that includes your four-legged friends ! We are proud to be a dog-friendly lifestyle precinct , offering wide-open spaces and a relaxed atmosphere for you and your pets to enjoy. To ensure a safe and pleasant experience for all our guests (both human and canine), we kindly ask that you follow our Paws Policy . Bring your pups along for a leisurely stroll , soak up the country sunshine , and enjoy the best of the Muldersdrift countryside together! Park Rules Prohibitions To ensure a safe and enjoyable experience for all guests, the following are strictly prohibited on the premises. No weapons of any kind No pepper spray or mace No illegal substances No glass containers of any kind No pocket knives or multi-tools No fireworks No outside food or drinks We're Here to Help Have Questions? Get in touch with us and one of our friendly staff will assist you. Get In Touch [ '[ '#organization', 'description' => 'Syringa Park was born from a vision to create a lifestyle space shaped by nature, creativity, and community at Avianto Estate. It is a multi-experience destination for outdoor leisure and family connection.', 'image' => 'https://syringapark.co.za/assets/images/home/herobanner1.webp', 'publicAccess' => true, 'isAccessibleForFree' => true, 'amenityFeature' => [ [ '], [ '], ], 'founder' => [ ['], ['], ], 'address' => [ '], ], 'breadcrumb' => [ '[ ['], [ '], ], ], ]; +json">{!! json_encode($aboutSchema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) !!} # 4x4 Source: resources/views/activities/4x4.blade.php | Book Your Slot Now') !"> !-- Page Header --> 4×4 Paradise About the Activity 4×4 Paradise at Syringa Park Purpose-built off-road trails for every skill level — including training parks, scenic perimeter routes, and advanced technical challenges . The ultimate destination for off-road enthusiasts. Syringa Park, Avianto Estate Get In Touch dawie— Terence terence— Terence 083 601 7511 Phone — Dawie 079 504 7120 The Experience What To Expect 01 Featured Purpose-Built Off-Road Trails Tackle purpose-built trails designed for every skill level — from beginner-friendly training parks and scenic perimeter routes to serious advanced technical challenges that will push both driver and vehicle to the limit. 02 All Skill Levels Welcome Whether you're a first-time off-roader or a seasoned trail veteran, our training parks and graded routes ensure everyone gets the most out of their 4×4 experience . 03 Training & Events Beyond weekend trail access, we offer training sessions and events available any day of the week by prior arrangement — perfect for clubs, corporates, and serious enthusiasts. 04 Adventure & Lifestyle Combine your off-road adventure with everything Syringa Park has to offer. After conquering the trails, unwind at the Syringa Pavilion — home to 13 gourmet food vendors and fully licensed bars. When We're Open Operating Times Weekends, public holidays & by arrangement! Trail Access 08:00 – 17:00 Weekends & Public Holidays Training & Events By Arrangement Any day of the week Terence: 083 601 7511  •  Dawie: 079 504 7120 There's Always More More to Explore at Syringa Park There's always something to do at Syringa Park. From the Syringa Park Run/Walk every Sunday morning, to the MiFitness Kids Play Park , Syringa Trout Farm , and a relaxed coffee at Africa Black Coffee — there's something for everyone. Wrap up your day at the Syringa Pavilion — 13 gourmet food vendors, fully licensed bars, and good vibes all around. 🏃 Park Run/Walk 🧒 Kids Play Park 🎣 Trout Farm ☕ Africa Black Coffee 🍽️ 13 Food Vendors View All Activities Syringa Park Avianto Estate, Muldersdrift [ '[ [ '#facility', 'name' => '4×4 Paradise at Syringa Park', 'url' => 'https://syringapark.co.za/syringa-4x4', 'telephone' => '+27836017511', 'email' => 'terence— including training parks, scenic perimeter routes, and advanced technical challenges at Syringa Park, Avianto Estate.', 'address' => [ '], 'geo' => [ '], 'openingHoursSpecification' => [ [ '['Saturday', 'Sunday'], 'opens' => '08:00', 'closes' => '17:00', ], ], 'amenityFeature' => [ ['], [ '], [ '], [ '], [ '& Club Events', 'value' => true, ], ], ], [ '×4 Trail Access & Training', 'provider' => ['#facility'], 'serviceType' => 'Off-Road 4x4 Trail Experience', 'description' => 'Weekend trail access and weekday training sessions by prior arrangement for clubs, corporates, and enthusiasts.', 'offers' => [ '], ], [ '[ [ '], [ '], [ '×4 Trails', 'item' => 'https://syringapark.co.za/syringa-4x4', ], ], ], ], ]; +json">{!! json_encode($fourByFourSchema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) !!} # birdie-bay Source: resources/views/activities/birdie-bay.blade.php | Book Your Session') — book today!"> !-- Page Header --> Birdie Bay Golf About the Activity Birdie Bay at Syringa Park Now open at Syringa Park — experience one of the most realistic indoor golf simulators available. Powered by advanced Rapsodo launch monitor technology for accurate shot tracking and detailed performance data. Syringa Park, Avianto Estate Get In Touch Website www.birdiebay.co.za Phone 067 465 2070 Book Now The Experience What To Expect 01 Featured Powered by Rapsodo Technology Advanced Rapsodo launch monitor technology delivers accurate shot tracking and detailed performance data — including club distances , ball speed , launch angle , shot shape , and carry distance , and much more. 02 For Every Golfer An immersive experience for everyone — whether you're a beginner , a social player , or a serious golfer looking to sharpen your game. 03 World-Famous Courses Play some of the world's most famous golf courses from the comfort of an indoor bay — improve your game or enjoy a social round with friends. 04 Tee Off Anytime Rain or shine, day or night — tee off anywhere, anytime. After your round, unwind at the Syringa Pavilion with 13 gourmet food vendors and fully licensed bars. Simple Pricing Rates Book your session today! 30 Minutes R50 Per session 1 Hour R100 Most popular 2 Hours R150 Best value Bookings: 067 465 2070 • www.birdiebay.co.za There's Always More More to Explore at Syringa Park There's always something to do at Syringa Park. From the Syringa Park Run/Walk every Sunday morning, to the MiFitness Kids Play Park , Syringa Trout Farm , and a relaxed coffee at Africa Black Coffee — there's something for everyone. Wrap up your day at the Syringa Pavilion — 13 gourmet food vendors, fully licensed bars, and good vibes all around. 🏃 Park Run/Walk 🧒 Kids Play Park 🎣 Trout Farm ☕ Africa Black Coffee 🍽️ 13 Food Vendors View All Activities Syringa Park Avianto Estate, Muldersdrift [ '[ [ '#facility', 'name' => 'Birdie Bay Indoor Golf at Syringa Park', 'url' => 'https://syringapark.co.za/syringa-birdie-bay', 'telephone' => '+27674652070', 'image' => 'https://syringapark.co.za/assets/images/activities/Birdie Bay - Inside look at the simulator.jpeg', 'description' => 'One of the most realistic indoor golf simulators available, powered by Rapsodo launch monitor technology with accurate shot tracking and detailed performance data at Syringa Park, Avianto Estate.', 'address' => [ '], 'geo' => [ '], 'amenityFeature' => [ [ '], ['], ['], [ '], ], ], [ '['#facility'], 'serviceType' => 'Indoor Golf Simulator Experience', 'description' => 'Book a simulator session at Birdie Bay — 30 minutes, 1 hour, or 2 hour slots available.', 'offers' => [ [ '], [ '], [ '], ], ], [ '[ [ '], [ '], [ '], ], ], ], ]; +json">{!! json_encode($birdieBaySchema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) !!} # coffee Source: resources/views/activities/coffee.blade.php | Africa Black at Avianto Estate') ! Africa Black Coffee is pet-friendly and family-friendly. Join us after the Syringa Parkrun for a relaxing morning brew."> !-- Page Header --> Africa Black Coffee About the Activity Africa Black Coffee at Syringa Park A peaceful, pet-friendly coffee spot surrounded by greenery — perfect for families , relaxed meetups, and all-day outdoor enjoyment . It's the perfect time to grab a coffee when you join us for the Syringa Park Run Walk every Sunday at 7:15am at Syringa Park. Located in Syringa Park Walk-Ins Welcome No booking required. Just show up, order your favourite brew, and enjoy the outdoors. Open 7 days a week — we'll have a cup ready for you. Location Syringa Park, Avianto Estate The Experience What To Expect 01 Featured Outdoor Coffee Experience Settle in and savour your coffee surrounded by lush greenery in a laid-back, open-air setting. Whether you're catching up with friends or enjoying a quiet moment to yourself, Africa Black Coffee offers the perfect all-day escape . 02 Pet-Friendly Fun Bring along your furry companions for a relaxing outing. Syringa Park welcomes your pets to join the fun — no one gets left behind! 03 Family-Friendly Vibes With plenty of space for kids to explore and play, it's the perfect destination for family bonding and creating lasting memories together. 04 Social & Relaxed More than just a coffee stop — it's a lifestyle. After your cup, explore the Syringa Pavilion — home to 13 gourmet food vendors and fully licensed bars, all just steps away. When We're Open Trading Hours Open 7 days a week! Monday – Sunday 07:00 – 22:00 Walk-ins welcome • No booking required There's Always More More to Explore at Syringa Park There's always something to do at Syringa Park. From the Syringa Park Run/Walk every Sunday morning, to the MiFitness Kids Play Park , Syringa Trout Farm , and a relaxed coffee at Africa Black Coffee — there's something for everyone. Wrap up your day at the Syringa Pavilion — 13 gourmet food vendors, fully licensed bars, and good vibes all around. 🏃 Park Run/Walk 🧒 Kids Play Park 🎣 Trout Farm ☕ Africa Black Coffee 🍽️ 13 Food Vendors View All Activities Syringa Park Avianto Estate, Muldersdrift [ '[ [ '#facility', 'name' => 'Africa Black Coffee at Syringa Park', 'url' => 'https://syringapark.co.za/syringa-coffee', 'image' => 'https://syringapark.co.za/assets/images/activities/6.webp', 'description' => 'A peaceful, pet-friendly coffee spot surrounded by greenery at Syringa Park. Perfect for families, relaxed meetups, and all-day outdoor enjoyment.', 'address' => [ '], 'geo' => [ '], 'openingHoursSpecification' => [ [ '[ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', ], 'opens' => '07:00', 'closes' => '22:00', ], ], 'amenityFeature' => [ ['], ['], ['], ['], ], 'servesCuisine' => 'Coffee & Beverages', ], [ '[ [ '], [ '], [ '], ], ], ], ]; +json">{!! json_encode($coffeeSchema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) !!} # epickart Source: resources/views/activities/epickart.blade.php | Outdoor Go-Karting in Muldersdrift') ! Our world-class outdoor track in Muldersdrift offers high-speed go-karting for all ages. Book your ride today!"> !-- Page Header --> Epic Karting About the Activity Epic Karting at Syringa Park Experience high-speed thrills on a 580m outdoor tar track featuring pro-karts, technical turns, long straights, and night-race lighting — an adrenaline rush for all ages. Epic Karting Syringa !-- ── WHAT TO EXPECT ── --> The Experience What To Expect 01 Featured 580m Outdoor Tar Track Push your limits on a 580m professional outdoor tar track designed with thrilling technical turns and long straights that will test your speed and skill at every corner. 02 Pro-Karts Race in high-performance pro-karts built for speed and precision. Whether you're a first-timer or a seasoned racer, our karts deliver an unforgettable experience every time. 03 Night Race Lighting The excitement doesn't stop when the sun goes down. Our professional night-race lighting keeps the track alive after dark for a truly electrifying racing experience . 04 Thrills & Social Fun Perfect for birthday parties , corporate events, or a spontaneous day out. After your races, head over to the Syringa Pavilion — home to 13 gourmet food vendors and fully licensed bars just steps away. When We're Open Trading Hours Open most days of the week! Monday Closed Tuesday – Thursday 11:00 – 18:00 Saturday 09:00 – 20:00 Bookings recommended • bookings!-- ── MORE TO EXPLORE ── --> There's Always More More to Explore at Syringa Park There's always something to do at Syringa Park. From the Syringa Park Run/Walk every Sunday morning, to the MiFitness Kids Play Park , Syringa Trout Farm , and a relaxed coffee at Africa Black Coffee — there's something for everyone. Wrap up your day at the Syringa Pavilion — 13 gourmet food vendors, fully licensed bars, and good vibes all around. 🏃 Park Run/Walk 🧒 Kids Play Park 🎣 Trout Farm ☕ Africa Black Coffee 🍽️ 13 Food Vendors View All Activities Syringa Park Avianto Estate, Muldersdrift [ '[ [ '#facility', 'name' => 'Epic Karting at Syringa Park', 'url' => 'https://syringapark.co.za/syringa-epickart', 'telephone' => '+27674652070', 'email' => 'bookings[ '], 'geo' => [ '], 'openingHoursSpecification' => [ [ '['Tuesday', 'Wednesday', 'Thursday'], 'opens' => '11:00', 'closes' => '18:00', ], [ '], ], 'amenityFeature' => [ [ '], ['], ['], ['], ['], ], ], [ '['#facility'], 'serviceType' => 'Go-Karting', 'description' => 'Book a session on the 580m outdoor tar track with high-performance pro-karts for individuals, groups, and corporate events.', 'offers' => [ '], ], [ '[ [ '], [ '], [ '], ], ], ], ]; +json">{!! json_encode($kartingSchema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) !!} # fishing Source: resources/views/activities/fishing.blade.php | Fly Fishing & Bass in Muldersdrift') –Sun in Muldersdrift. Rod hire available!"> !-- Page Header --> Syringa Trout Farm About the Activity Fly Fishing & Conventional Fishing at Syringa Park Trout Farm Fly fishing and conventional fishing are available on both our dams, offering a peaceful outdoor experience surrounded by nature. Ideal for a relaxed day out, whether you're casting a line or simply enjoying the scenery with family and friends . Find us via Clinic Road Get In Touch Directions Find us via Clinic Road Phone 082 856 2448 The Experience What To Expect 01 Featured Stocked Dams & Fly Fishing Fly fishing and conventional fishing are available on both dams, fully stocked with trout, bass, bream, and yellows . Whether you're an experienced angler or casting your first line, enjoy a peaceful outdoor experience surrounded by nature — perfect for a relaxed day out with family and friends . 02 Rates & Rod Hire Adults R120 • Kids under 12 R70 Rod hire R50 for the day Non-fishermen half price entrance fee All trout caught must be kept and paid for at R150/kg . 03 Your Catch, Ready to Go All trout caught must be kept — but don't worry, we'll clean, pack, and chill your catch so it's fresh and ready to take home. On arrival, visit the fishing office to pay and collect your wristband. 04 On-Site Refreshments The fishing office stocks drinks, snacks, and tackle to keep you going. Enjoy gourmet dining on-site every Friday to Sunday , or explore the Syringa Pavilion with 14 food vendors just steps away. When We're Open Trading Hours Open Wednesday to Sunday! Monday – Tuesday Closed Wednesday – Friday 08:00 – 18:00 Saturday – Sunday 06:00 – 18:00 Gourmet Dining On-Site Friday – Sunday On arrival, visit the fishing office to pay & collect your wristband There's Always More More to Explore at Syringa Park There's always something to do at Syringa Park. From the Syringa Park Run/Walk every Sunday morning, to the MiFitness Kids Play Park , Syringa Trout Farm , and a relaxed coffee at Africa Black Coffee — there's something for everyone. Wrap up your day at the Syringa Pavilion — 13 gourmet food vendors, fully licensed bars, and good vibes all around. 🏃 Park Run/Walk 🧒 Kids Play Park 🎣 Trout Farm ☕ Africa Black Coffee 🍽️ 13 Food Vendors View All Activities Syringa Park Avianto Estate, Muldersdrift [ '[ [ '#facility', 'name' => 'Syringa Trout Farm', 'url' => 'https://syringapark.co.za/syringa-fishing', 'telephone' => '+27828562448', 'image' => 'https://syringapark.co.za/assets/images/activities/7.webp', 'description' => 'Fly fishing and conventional fishing on two stocked dams with trout, bass, bream, and yellows at Syringa Park, Avianto Estate. Rod hire available.', 'address' => [ '], 'geo' => [ '], 'openingHoursSpecification' => [ [ '['Wednesday', 'Thursday', 'Friday'], 'opens' => '08:00', 'closes' => '18:00', ], [ '['Saturday', 'Sunday'], 'opens' => '06:00', 'closes' => '18:00', ], ], 'amenityFeature' => [ ['], ['], ['], ['], [ '& Packing', 'value' => true, ], ['], ['], ], ], [ '[ [ '], [ '], [ '], ], ], ], ]; +json">{!! json_encode($fishingSchema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) !!} # index Source: resources/views/activities/index.blade.php | Kids Play Parks, Go-Karting & More') ! From epic go-karting and kids' play areas to Padel and Hiking Trails. The perfect place for a family day out!"> !-- Page Header --> Activities What We Offer Syringa Park Activities Grab a gourmet bite , book a padel session , let the kids play , or set off on a hiking trail — Syringa Park offers an experience built around choice and freedom . Padel Premium padel courts designed for everyone, from beginners to seasoned players. View Now Epic Karting High-speed thrills on a 580m outdoor tar track — an adrenaline-pumping experience for all ages. View Now MiFitness Kids South Africa's grandest kids play park with 7000m² of adventure zones and epic jungle gyms. View Now 4×4 Trails Purpose-built off-road trails for every skill level, from scenic routes to advanced technical challenges. View Now Running & Walking Weekly 2.5km and 5km routes every Sunday at 7am — open to all fitness levels. View Now Closed for refurbishments & upgrades Swoossh Scooters Explore Syringa Park the fun way with electric scooters for all ages — simple, affordable rentals. View Now Fishing Relax at our stocked dams with trout, bream, and yellows — perfect for fly fishing and family days. View Now Birdie Bay Golf Realistic indoor golf simulators powered by Rapsodo launch tech — play world-famous courses any time. View Now AfricaBlack Coffee A peaceful, pet-friendly coffee spot surrounded by greenery — perfect for families and relaxed meetups. View Now Every 1st Sunday of the Month 09:00 – 16:00 Community & Culture Local Market Discover a vibrant community experience at The Local Market at Syringa Park , open every first Sunday of the month . From 9:00 AM to 4:00 PM , join us for a day filled with delicious food , unique shopping , and a chance to support local vendors . Meet our incredible local vendors and enjoy a day out with friends and family in the beautiful setting of Syringa Park . Delicious Food Unique Shopping Local Vendors We're Here to Help Have Questions? Get in touch with us and one of our friendly staff will assist you. Get In Touch ; const prevBtn = document.getElementById('actPagePrev'); const nextBtn = document.getElementById('actPageNext'); const dotsContainer = document.getElementById('actPageDots'); if (!carousel) return; const cards = carousel.querySelectorAll('.activity-card'); let currentIndex = 0; let cardsPerView = getCardsPerView(); function getCardsPerView() { const width = window.innerWidth; if (width goToSlide(i)); dotsContainer.appendChild(dot); } } function updateDots() { const dots = dotsContainer.querySelectorAll('.carousel-dot'); dots.forEach((dot, i) => dot.classList.toggle('active', i === currentIndex)); } function updateButtons() { prevBtn.disabled = currentIndex === 0; nextBtn.disabled = currentIndex >= getTotalPages() - 1; } function goToSlide(index) { currentIndex = Math.max(0, Math.min(index, getTotalPages() - 1)); const card = cards[currentIndex]; if (card) { carousel.scrollTo({ left: card.offsetLeft - carousel.offsetLeft, behavior: 'smooth' }); } updateDots(); updateButtons(); } prevBtn.addEventListener('click', () => goToSlide(currentIndex - 1)); nextBtn.addEventListener('click', () => goToSlide(currentIndex + 1)); let scrollTimeout; carousel.addEventListener('scroll', () => { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(() => { const cardWidth = cards[0].offsetWidth + 24; const newIndex = Math.round(carousel.scrollLeft / cardWidth); if (newIndex !== currentIndex) { currentIndex = Math.max(0, Math.min(newIndex, getTotalPages() - 1)); updateDots(); up # mifitness Source: resources/views/activities/mifitness.blade.php | Syringa Park') !-- Open Graph --> !-- Page Header --> MiFitness Kids Play Park About the Activity MiFitness Kids Play Park at Syringa Park South Africa's grandest kids play park with 7000m² of adventure zones , epic jungle gyms, and secure family-friendly facilities — the ultimate destination for little ones to explore and play. MiFitness Kids Syringa Park Get In Touch Website www.mifitness-kids.co.za The Experience What To Expect 01 Featured 7000m² of Adventure South Africa's grandest kids play park spans an incredible 7000m² of non-stop adventure. From epic jungle gyms to dedicated activity zones, there's something to excite every child at every age. 02 Epic Jungle Gyms Let the kids burn off energy on our world-class jungle gyms and adventure structures, designed to challenge, inspire, and keep children entertained for hours . 03 Safe & Secure A secure, family-friendly environment for children to play and explore. Children must remain under parental supervision at all times. No pets permitted inside the play park. 04 Snacks On-Site Keep the whole family fuelled up with the snack shack on-site within the play park — so you never have to miss a moment of the fun. When We're Open Trading Hours Open Friday to Sunday only. Friday – Sunday Summer 09:00 – 18:00 Winter 09:00 – 17:00 Monday – Thursday Closed No pets allowed inside the MiFitness Kids Play Park • 072 015 2926 There's Always More More to Explore at Syringa Park There's always something to do at Syringa Park. From the Syringa Park Run/Walk every Sunday morning, to the MiFitness Kids Play Park , Syringa Trout Farm , and a relaxed coffee at Africa Black Coffee — there's something for everyone. Wrap up your day at the Syringa Pavilion — 13 gourmet food vendors, fully licensed bars, and good vibes all around. 🏃 Park Run/Walk 🧒 Kids Play Park 🎣 Trout Farm ☕ Africa Black Coffee 🍽️ 13 Food Vendors View All Activities Syringa Park Avianto Estate, Muldersdrift [ '[ [ '#facility', 'name' => 'MiFitness Kids Play Park at Syringa Park', 'url' => 'https://syringapark.co.za/syringa-mifitness', 'telephone' => '+27720152926', 'email' => 'syringa[ '], 'geo' => [ '], 'openingHoursSpecification' => [ [ '['Friday', 'Saturday', 'Sunday'], 'opens' => '09:00', 'closes' => '18:00', ], ], 'amenityFeature' => [ [ '], ['], ['], ['], ['], ], ], [ '[ [ '], [ '], [ '], ], ], ], ]; +json">{!! json_encode($mifitnessSchema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) !!} # padel Source: resources/views/activities/padel.blade.php | All-Weather Padel Courts in Muldersdrift') ! Featuring 4 top-tier padel courts, a licensed bar and a pro-shop in Muldersdrift. Book your session today."> !-- Page Header --> Padel About the Activity Syringa Padel Park Come explore everything Syringa Park Padel at Syringa Park has to offer. Whether you're a seasoned athlete or just looking for a new way to stay active , our facilities are designed for everyone to enjoy. Located in Syringa Park Get In Touch Website www.syringapadel.co.za The Experience What To Expect 01 Featured Premium All-Weather Courts Play on 4 world-class Panoramic courts . We offer 2 roofed (covered) courts for all-weather play and 2 classic outdoor courts, all featuring professional blue turf. 02 Full Gear Support Don't have your own equipment? No problem. We provide high-quality rental rackets and have a pro-shop on-site for balls and gear . 03 Modern Amenities Our facility includes clean changing rooms , secure parking, and full disabled access . Stay connected with complimentary Wi-Fi at the courts. 04 Social & Fitness More than just a game — it's a lifestyle. Enjoy our dedicated bar (open 10:00 AM – 10:00 PM) or explore the 13 gourmet eateries within the Syringa Park Pavilion just steps away. When We're Open Trading Hours Open 7 days a week! Monday – Tuesday 14:00 – 22:00 Wednesday – Sunday 06:00 – 22:00 Walk-ins welcome • Booking recommended There's Always More More to Explore at Syringa Park There's always something to do at Syringa Park. From the Syringa Park Run/Walk every Sunday morning, to the MiFitness Kids Play Park , Syringa Trout Farm , and a relaxed coffee at Africa Black Coffee — there's something for everyone. Wrap up your day at the Syringa Pavilion — 13 gourmet food vendors, fully licensed bars, and good vibes all around. 🏃 Park Run/Walk 🧒 Kids Play Park 🎣 Trout Farm ☕ Africa Black Coffee 🍽️ 13 Food Vendors View All Activities Syringa Park Avianto Estate, Muldersdrift [ '[ [ '#facility', 'name' => 'Syringa Park Padel', 'url' => 'https://syringapark.co.za/syringa-padel', 'telephone' => '+27824755672', 'email' => 'padel[ '], 'geo' => [ '], 'openingHoursSpecification' => [ [ '['Monday', 'Tuesday'], 'opens' => '14:00', 'closes' => '22:00', ], [ '['Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'], 'opens' => '06:00', 'closes' => '22:00', ], ], 'amenityFeature' => [ ['], ['], ['], ['], ['], ['], ['& Lounge', 'value' => true], ['], ], ], [ '['#facility'], 'serviceType' => 'Sports Court Rental', 'description' => 'Book a panoramic padel court for social or competitive matches. Bookings managed via the Playtomic app.', 'offers' => [ '], ], [ '[ [ '], [ '], [ '], ], ], ], ]; +json">{!! json_encode($padelSchema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) !!} # parkrun Source: resources/views/activities/parkrun.blade.php & Walk | 5km Weekly Run in Muldersdrift') ! Register directly online to secure your spot in the weekly 2.5km and 5km routes every Sunday at 7:00am."> !-- Page Header --> Park Run / Walk About the Activity Syringa Park Run/Walk Join our weekly 2.5km and 5km routes every Sunday at 7am — open to all fitness levels , timed with a once-off band purchase. Everyone is welcome, regardless of your level of fitness. Located in Syringa Park Get In Touch marlon— Marlon 078 871 3943 Run Walk Registration Timing Disc Registration The Experience What To Expect 01 Featured Weekly Routes for Everyone Choose between our 2.5km or 5km routes every Sunday morning . Both routes are timed, so whether you're walking or running, you can track your progress week after week. 02 Timing Band Purchase your once-off timing band for just R100.00 when you register. Band collection starts at 7:15am , with runs beginning between 7:15am – 7:45am . 03 Easy Registration Register directly online to secure your spot. For any queries, contact Marlon Dunn directly via phone or email. 04 Social & Fitness More than just a run — it's a community. After your session, explore the Syringa Pavilion — home to 13 gourmet food vendors and fully licensed bars, just steps away. Schedule Event Schedule Every Sunday morning! Band Collection 07:15 Run / Walk Start Window 07:15 – 07:45 Walk-ins welcome • Registration recommended There's Always More More to Explore at Syringa Park There's always something to do at Syringa Park. From the Syringa Park Run/Walk every Sunday morning, to the MiFitness Kids Play Park , Syringa Trout Farm , and a relaxed coffee at Africa Black Coffee — there's something for everyone. Wrap up your day at the Syringa Pavilion — 13 gourmet food vendors, fully licensed bars, and good vibes all around. 🏃 Park Run/Walk 🧒 Kids Play Park 🎣 Trout Farm ☕ Africa Black Coffee 🍽️ 13 Food Vendors View All Activities Syringa Park Avianto Estate, Muldersdrift [ '[ [ '#facility', 'name' => 'Syringa Park Run/Walk', 'url' => 'https://syringapark.co.za/syringa-parkrun', 'telephone' => '+27788713943', 'email' => 'marlon[ '], 'geo' => [ '], 'amenityFeature' => [ ['], ['], ['], [ '], ['], ], ], [ '[ '], 'location' => [ '[ '], ], 'eventSchedule' => [ '], 'isAccessibleForFree' => false, 'offers' => [ '], ], [ '[ [ '], [ '], [ '], ], ], ], ]; +json">{!! json_encode($parkrunSchema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) !!} # scooters Source: resources/views/activities/scooters.blade.php | Fun Outdoor Scooter Hire') ! Our Swoossh Scooter hire in Syringa Park is the perfect way for kids and families to get around."> !-- Page Header --> Swoossh Scooters About the Activity Swoossh Scooters at Syringa Park Explore Syringa Park the fun way with electric scooters for all ages — simple, affordable rentals with no booking required . Located in Syringa Park Get In Touch Location Located in Syringa Park Phone — Terryne 081 792 5313 The Experience What To Expect 01 Featured Electric Scooter Rentals Zip around Syringa Park on our electric scooters — available for all ages and skill levels. Just rock up, hop on, and enjoy the ride. No booking required, no hassle. 02 Affordable Rates Rent a scooter for just R250 for 1 hour or R200 for 30 minutes — great value for a memorable experience the whole family will love. 03 No Booking Required Simply walk in and get going — no advance booking needed. For more information, contact Terryne directly on 081 792 5313 . 04 Fun for All Ages Whether you're 8 or 80 , Swoossh Scooters is designed for everyone. Combine your scooter adventure with a visit to the Syringa Pavilion — home to 13 gourmet food vendors and fully licensed bars nearby. Pricing Rental Rates No booking required — just show up and ride! 30 Min R200 Quick Ride Best Value 1 Hour R250 Full Experience Contact Terryne on 081 792 5313 for more info There's Always More More to Explore at Syringa Park There's always something to do at Syringa Park. From the Syringa Park Run/Walk every Sunday morning, to the MiFitness Kids Play Park , Syringa Trout Farm , and a relaxed coffee at Africa Black Coffee — there's something for everyone. Wrap up your day at the Syringa Pavilion — 13 gourmet food vendors, fully licensed bars, and good vibes all around. 🏃 Park Run/Walk 🧒 Kids Play Park 🎣 Trout Farm ☕ Africa Black Coffee 🍽️ 13 Food Vendors View All Activities Syringa Park Avianto Estate, Muldersdrift [ '[ [ '#facility', 'name' => 'Swoossh Scooters at Syringa Park', 'url' => 'https://syringapark.co.za/syringa-scooters', 'telephone' => '+27817925313', 'image' => 'https://syringapark.co.za/assets/images/activities/scooter2.webp', 'description' => 'Electric scooter hire for all ages at Syringa Park, Avianto Estate. No booking required — just show up and ride.', 'address' => [ '], 'geo' => [ '], 'amenityFeature' => [ ['], ['], ['], ['], ], ], [ '['#facility'], 'serviceType' => 'Electric Scooter Rental', 'description' => 'Electric scooter hire available in 30-minute and 1-hour sessions at Syringa Park.', 'offers' => [ [ '], [ '], ], ], [ '[ [ '], [ '], [ '], ], ], ], ]; +json">{!! json_encode($scootersSchema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) !!} ; inset: 0; z-index: 9999; display: flex; align-items: center; justify-content: center; padding: 1.25rem; opacity: 0; pointer-events: none; transition: opacity 0.25s ease; } .cs-modal.is-open { opacity: 1; pointer-events: all; } .cs-modal__backdrop { position: absolute; inset: 0; background: rgba(0, 0, 0, 0.72); cursor: pointer; } .cs-modal__box { position: relative; z-index: 1; border-radius: 14px; overflow: hidden; max-width: 480px; width: 100%; box-shadow: 0 24px 64px rgba(0, 0, 0, 0.5); transform: translate # index Source: resources/views/admin/authors/index.blade.php #888;"> id }}, '', '', '', '')" title="Edit"> id }})" title="Delete"> ── Add Author Modal ──────────────────────────────────────── --}} Add Author × ;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px;"> First Name * Last Name * Bio (optional) Photo (optional) Add Author Edit Author × ;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px;"> First Name * Last Name * Bio (optional) Photo (optional) Leave blank to keep existing photo Save Changes # create Source: resources/views/admin/blogs/create.blade.php ── Content ──────────────────────────────────────────── --}} Post Content Title * * B I U H2 H3 {!! old('content') !!} ── Images ───────────────────────────────────────────── --}} Images Thumbnail Shown in blog listing cards Main Image Click or drag main image Shown at top of the blog post Details & SEO Author — No author — ? 'selected' : '' }}> * ? 'selected' : '' }}> …"> Keywords Publish immediately (visible to public) Publish Post Cancel Insert Link URL Display Text (optional) Cancel Insert ; const hidden = document.getElementById('contentHidden'); function sync() { hidden.value = editor.innerHTML; } editor.addEventListener('paste', function(e) { e.preventDefault(); const html = e.clipboardData.getData('text/html') || e.clipboardData.getData('text/plain'); const clean = html .replace(/ /gi, '') .replace(/ /gi, ''); document.execCommand('insertHTML', false, clean || e.clipboardData.getData('text/plain')); sync(); }); // ── Toolbar commands ────────────────────────────────────── document.querySelectorAll('.rf-toolbar-btn[data-cmd]').forEach(btn => { btn.addEventListener('mousedown', function(e) { e.preventDefault(); const val = this.dataset.value || null; document.execCommand(this.dataset.cmd, false, val); editor.focus(); sync(); }); }); // ── Link modal ──────────────────────────────────────────── let savedRange = null; const modal = document.getElementById('linkModal'); function saveSelection() { const sel = window.getSelection(); if (sel.rangeCount) savedRange = sel.getRangeAt(0).cloneRange(); } function restoreSelection() { if (!savedRange) return; const sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(savedRange); } editor.addEventListener('mouseup', saveSelection); editor.addEventListener('keyup', saveSelection); document.getElementById('linkBtn').addEventListener('click', () => { saveSelection(); document.getElementById('linkUrl').value = ''; document.getElementById('linkText').value = ''; modal.classList.add('open'); document.getElementById('linkUrl').focus(); }); window.closeLinkModal = () => { modal.classList.remove('open'); editor.focus(); }; window.insertLink = () => { const url = document.getElementById('linkUrl').value.trim(); const text = document.getElementById('linkText').value.trim(); if (!url) { alert('Please enter a URL'); return; } const finalUrl = url.match(/^https?:\/\//i) ? url : 'https://' + url; editor.focus(); restoreSelection(); document.execCommand('insertHTML', false, ` ${text || finalUrl} `); closeLinkModal(); sync(); }; document.addEventListener('keydown', e => { if (e.key === 'Escape') closeLinkModal(); }); modal.addEventListener('click', e => { if (e.target === modal) closeLinkModal(); }); // ── Embed image in content ──────────────────────────────── document.getElementById('contentImageInput').addEventListener('change', function() { const file = this.files[0]; if (!file) return; const fd = new FormData(); fd.append('image', file); fd.append('_token', ''); // Save cursor position saveSelection(); fetch('', { method: 'POST', body: fd }) .then(r => r.json()) .then(data => { if (data.url) { editor.focus(); restoreSelection(); document.execCommand('insertHTML', false, ` ` ); sync(); } else { alert('Image upload failed.' # edit Source: resources/views/admin/blogs/edit.blade.php ── Content ──────────────────────────────────────────── --}} Post Content Title * title) }}" required> Content * B I U H2 H3 {!! old('content', $blog->content) !!} content) }}"> Images Thumbnail ;"> ;"> Leave blank to keep existing Main Image ;"> main_image) }}" alt="" style="display:block;"> *" onchange="previewMain(this)"> Leave blank to keep existing Details & SEO Author — No author — ? 'selected' : '' }}> * publish_date->format('Y-m-d')) }}" required> Category — No category — ? 'selected' : '' }}> ? 'checked' : '' }}> Published (visible to public) Save Changes Cancel Insert Link URL Display Text (optional) Cancel Insert ; const hidden = document.getElementById('contentHidden'); function sync() { hidden.value = editor.innerHTML; } document.querySelectorAll('.rf-toolbar-btn[data-cmd]').forEach(btn => { btn.addEventListener('mousedown', function(e) { e.preventDefault(); document.execCommand(this.dataset.cmd, false, this.dataset.value || null); editor.focus(); sync(); }); }); editor.addEventListener('paste', function(e) { e.preventDefault(); const html = e.clipboardData.getData('text/html') || e.clipboardData.getData('text/plain'); const clean = html .replace(/ /gi, '') .replace(/ /gi, ''); document.execCommand('insertHTML', false, clean || e.clipboardData.getData('text/plain')); sync(); }); let savedRange = null; const modal = document.getElementById('linkModal'); function saveSelection() { const sel = window.getSelection(); if (sel.rangeCount) savedRange = sel.getRangeAt(0).cloneRange(); } function restoreSelection() { if (!savedRange) return; const sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(savedRange); } editor.addEventListener('mouseup', saveSelection); editor.addEventListener('keyup', saveSelection); document.getElementById('linkBtn').addEventListener('click', () => { saveSelection(); document.getElementById('linkUrl').value = ''; document.getElementById('linkText').value = ''; modal.classList.add('open'); document.getElementById('linkUrl').focus(); }); window.closeLinkModal = () => { modal.classList.remove('open'); editor.focus(); }; window.insertLink = () => { const url = document.getElementById('linkUrl').value.trim(); const text = document.getElementById('linkText').value.trim(); if (!url) { alert('Please enter a URL'); return; } const finalUrl = url.match(/^https?:\/\//i) ? url : 'https://' + url; editor.focus(); restoreSelection(); document.execCommand('insertHTML', false, ` ${text || finalUrl} `); closeLinkModal(); sync(); }; document.addEventListener('keydown', e => { if (e.key === 'Escape') closeLinkModal(); }); modal.addEventListener('click', e => { if (e.target === modal) closeLinkModal(); }); // ── Embed image in content ──────────────────────────────── document.getElementById('contentImageInput').addEventListener('change', function() { const file = this.files[0]; if (!file) return; const fd = new FormData(); fd.append('image', file); fd.append('_token', ''); saveSelection(); fetch('', { method: 'POST', body: fd }) .then(r => r.json()) .then(data => { if (data.url) { editor.focus(); restoreSelection(); document.execCommand('insertHTML', false, ` ` ); sync(); } else { # index Source: resources/views/admin/blogs/index.blade.php ? $blog->author->first_name . ' ' . $blog->author->last_name : '—' }} is_published ? 'active-toggle--on' : 'active-toggle--off' }}" data-id="" data-active="" title=""> ; var active = this.dataset.active === '1'; var newVal = active ? 0 : 1; var el = this; el.classList.add('loading'); el.disabled = true; fetch('/' + id + '/toggle-published', { method: 'PATCH', headers: { 'X-CSRF-TOKEN': '', 'Accept': 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ is_published: newVal }), }) .then(r => r.json()) .then(function(data) { if (data.success) { el.dataset.active = newVal ? '1' : '0'; el.classList.toggle('active-toggle--on', !!newVal); el.classList.toggle('active-toggle--off', !newVal); el.querySelector('.active-toggle__label').textContent = newVal ? 'Published' : 'Draft'; el.title = newVal ? 'Click to unpublish' : 'Click to publish'; } }) .finally(function() { el.classList.remove('loading'); el.disabled = false; }); }); }); # index Source: resources/views/admin/dashboard/index.blade.php ? ($activeRestaurants / $restaurantCount * 100) : 0 }}%"> active · inactive Active Restaurants Currently live Events 0 ? ($activeEvents / $eventCount * 100) : 0 }}%"> active · inactive Total Content All items combined Recent Restaurants Last 5 added View all && $restaurant->images->count() > 0) images->first()->url) }}" alt=""> ?? 'No location' }} · is_active ? 'live' : 'draft' }}"> → && $event->images->count() > 0) images->first()->url) }}" alt=""> · is_active ? 'live' : 'draft' }}"> → # booking-logs Source: resources/views/admin/enquiries/booking-logs.blade.php ?->name ?? '—' }} # — ?? '—' }} # bookings-show Source: resources/views/admin/enquiries/bookings-show.blade.php #' . $enquiry->id) ;">Booking Enquiry # Submitted ;"> Mail Sent ;"> Mail Failed + special requests --}} Event Details Event Category Event Type — — — !! nl2br(e(trim($enquiry->not_sure_notes))) !!} & Requirements !! nl2br(e(trim($enquiry->special_requests))) !!} ;">No special requests provided. + submission info --}} Contact Details Name Email email }}" class="enq-link"> Phone phone }}" class="enq-link"> Submission Info reCAPTCHA !== null) ? 'enq-score--high' : ($enquiry->recaptcha_score >= 0.4 ? 'enq-score--mid' : 'enq-score--low'); — ; font-size: 12px;"> Submitted Notified ; flex-direction: column; gap: 2px;"> ;"> — && $enquiry->convertedByUser) Converted by && $enquiry->feedback_sent_at) Feedback Requested At ?subject=Re: Your Booking Enquiry at Syringa Park" class="enq-reply-btn"> Reply via Email Internal Notes ;"> !! nl2br(e(trim($comment->body))) !!} ?')" style="display:inline;"> ;"> ; padding: 5px 14px;">Save + id); const form = document.getElementById('edit-form-' + id); const opening = form.style.display === 'none'; body.style.display = opening ? 'none' : ''; form.style.display = opening ? 'block' : 'none'; } # bookings Source: resources/views/admin/enquiries/bookings.blade.php !== 1 ? 'ies' : 'y' }} received All event types # Name Email Contacted Converted Guests Event Type Preferred Date Special Requests Submitted #"> contacted ? 'active-toggle--on' : 'active-toggle--off' }} booking-contacted-toggle" data-id="" title=""> converted ? 'active-toggle--on' : 'active-toggle--off' }} booking-converted-toggle" data-id="" title=""> ;"> — ?? '—' }} ; var el = this; el.classList.add('loading'); el.disabled = true; fetch('/' + id + '/toggle-contacted', { method: 'PATCH', headers: { 'X-CSRF-TOKEN': '', 'Accept': 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({}), }) .then(function(r) { return r.json(); }) .then(function(data) { if (data.success) { var now = data.contacted; el.classList.toggle('active-toggle--on', now); el.classList.toggle('active-toggle--off', !now); el.querySelector('.active-toggle__label').textContent = now ? 'Yes' : 'No'; el.title = now ? 'Mark as not contacted' : 'Mark as contacted'; } }) .catch(function() { alert('Could not update contacted status.'); }) .finally(function() { el.classList.remove('loading'); el.disabled = false; }); }); }); document.querySelectorAll('.booking-converted-toggle').forEach(function(btn) { btn.addEventListener('click', function() { var id = this.dataset.id; var el = this; el.classList.add('loading'); el.disabled = true; fetch('/' + id + '/toggle-converted', { method: 'PATCH', headers: { 'X-CSRF-TOKEN': '', 'Accept': 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({}), }) .then(r => r.json()) .then(function(data) { if (data.success) { var now = data.converted; el.classList.toggle('active-toggle--on', now); el.classList.toggle('active-toggle--off', !now); el.querySelector('.active-toggle__label').textContent = now ? 'Yes' : 'No'; el.title = now ? 'Mark as not converted' : 'Mark as converted'; } }) .catch(function() { alert('Could not update converted status.'); }) .finally(function() { el.classList.remove('loading'); el.disabled = false; }); }); }); # contact-logs Source: resources/views/admin/enquiries/contact-logs.blade.php ?->name ?? '—' }} # — ?? '—' }} # contact-show Source: resources/views/admin/enquiries/contact-show.blade.php #' . $submission->id) ;">Enquiry # Submitted ;"> Mail Sent ;"> Mail Failed !! nl2br(e(trim($submission->message))) !!} Sender Details Name Email email }}" class="enq-link"> Phone Submission Info reCAPTCHA !== null) ? 'enq-score--high' : ($submission->recaptcha_score >= 0.4 ? 'enq-score--mid' : 'enq-score--low'); — ; font-size: 12px;"> Submitted Notified ; flex-direction: column; gap: 2px;"> ;"> — && $submission->convertedByUser) Converted by ?subject=Re: " class="enq-reply-btn"> Reply via Email Internal Notes ;"> !! nl2br(e(trim($comment->body))) !!} ?')" style="display:inline;"> ;"> ; padding: 5px 14px;">Save + id); const form = document.getElementById('edit-form-' + id); const opening = form.style.display === 'none'; body.style.display = opening ? 'none' : ''; form.style.display = opening ? 'block' : 'none'; } # contact Source: resources/views/admin/enquiries/contact.blade.php !== 1 ? 's' : '' }} received View Logs # Name Email Contacted Converted Phone Subject Message Date #"> contacted ? 'active-toggle--on' : 'active-toggle--off' }} contacted-toggle" data-id="" data-contacted="" title=""> converted ? 'active-toggle--on' : 'active-toggle--off' }} converted-toggle" data-id="" data-converted="" title=""> ; var el = this; el.classList.add('loading'); el.disabled = true; fetch('/' + id + '/toggle-contacted', { method: 'PATCH', headers: { 'X-CSRF-TOKEN': '', 'Accept': 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({}), }) .then(function(r) { return r.json(); }) .then(function(data) { if (data.success) { var now = data.contacted; el.dataset.contacted = now ? '1' : '0'; el.classList.toggle('active-toggle--on', now); el.classList.toggle('active-toggle--off', !now); el.querySelector('.active-toggle__label').textContent = now ? 'Yes' : 'No'; el.title = now ? 'Mark as not contacted' : 'Mark as contacted'; } }) .catch(function() { alert('Could not update contacted status.'); }) .finally(function() { el.classList.remove('loading'); el.disabled = false; }); }); }); document.querySelectorAll('.converted-toggle').forEach(function(btn) { btn.addEventListener('click', function() { var id = this.dataset.id; var el = this; el.classList.add('loading'); el.disabled = true; fetch('/' + id + '/toggle-converted', { method: 'PATCH', headers: { 'X-CSRF-TOKEN': '', 'Accept': 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({}), }) .then(r => r.json()) .then(function(data) { if (data.success) { var now = data.converted; el.dataset.converted = now ? '1' : '0'; el.classList.toggle('active-toggle--on', now); el.classList.toggle('active-toggle--off', !now); el.querySelector('.active-toggle__label').textContent = now ? 'Yes' : 'No'; el.title = now ? 'Mark as not converted' : 'Mark as converted'; } }) .catch(function() { alert('Could not update converted status.'); }) .finally(function() { el.classList.remove('loading'); el.disabled = false; }); }); }); # feedback-show Source: resources/views/admin/enquiries/feedback-show.blade.php #' . $feedback->id) ;">Feedback Response # \a\t H:i') }} ;"> Anonymous ;"> Identified & Service Experience Contacted after enquiry contacted ? 'enq-badge--sent' : 'enq-badge--failed' }}"> ?: '—' }} ; ?? '—') }} Site Visit Had a site visit had_site_visit ? 'enq-badge--sent' : 'enq-badge--failed' }}"> ; $i site_visit_rating ? 'fb-star--on' : 'fb-star--off' }}"> — !! nl2br(e(trim($feedback->improvement_suggestions))) !!} !! nl2br(e(trim($feedback->other_comments))) !!} + meta --}} Respondent Anonymity — #· — ? 'enq-badge--sent' : 'enq-badge--failed' }}"> ?: '—' }} Why they chose them !! nl2br(e(trim($feedback->reason_chose_them))) !!} — ? ucfirst(str_replace('_', ' ', $feedback->booking_category)) : '—' }} Event Type — ?? '—' }} Submitted # feedback Source: resources/views/admin/enquiries/feedback.blade.php !== 1 ? 's' : '' }} received Were Contacted / Booked With Us / Had a Site Visit / Avg. Site Visit Rating / 5 Received all info they needed: Yes · Partially · No · Submitted Event Type Contacted Got Info Site Visit Rating Booked User ;"> — ;"> ? 'enq-badge--sent' : 'enq-badge--failed' }}"> && $f->days_to_response) ; ?? '—') }} had_site_visit ? 'enq-badge--sent' : 'enq-badge--failed' }}"> — ? 'enq-badge--sent' : 'enq-badge--failed' }}"> ?? '—' }} ; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 20px; } .fb-stat-card { background: #fff; border: 1px solid #eee; border-radius: 12px; padding: 18px 20px; } .fb-stat-label { font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; color: #888; font-weight: 600; margin-bottom: 8px; } .fb-stat-value { font-size: 28px; font-weight: 700; color: #206252; line-height: 1; } .fb-stat-total { font-size: 14px; font-weight: 500; color: #aaa; margin-left: 4px; } .fb-stat-bar { margin-top: 12px; height: 6px; background: #f0f0f0; border-radius: 100px; overflow: hidden; } .fb-stat-bar span { display: block; height: 100%; background: #206252; border-radius: 100px; } .fb-info-row { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin-bottom: 24px; font-size: 13px; } .fb-info-label { font-weight: 600; color: #555; } .fb-info-pill { padding: 4px 12px; border-radius: 100px; font-weight: 600; font-size: 12px; } .fb-info-pill--yes { background: #e3f5ec; color: #1a7a52; } .fb-info-pill--mid { background: #fdf3e0; color: #b07d1a; } .fb-info-pill--no { background: #fbe9e7; color: #a5342c; } .fb-rating-pill { display: inline-block; background: #206252; color: #fff; font-weight: 600; font-size: 12px; padding: 3px 10px; border-radius: 100px; } .fb-user-anon { display: inline-flex; align-items: center; gap: 5px; color: #888; font-style: italic; font-size: 13px; } ; } } ; } } # newsletter Source: resources/views/admin/enquiries/newsletter.blade.php !== 1 ? 's' : '' }} signed up # Email IP Address Confirmation Admin Notified Subscribed ; color: var(--gray-500); font-family: monospace;"> # create Source: resources/views/admin/events/create.blade.php ── Event Info ──────────────────────────────────────── --}} Event Info Event Title * {!! old('description') !!} Location / Venue Google Maps Link Google Maps Embed Address address ?? '') }}" placeholder="e.g., 1 Avianto Drive, Muldersdrift"> Start Date * Tags Press Enter or comma to add · Click × to remove Active (visible to public) Event Images Click or drag images here JPG, PNG, WEBP — multiple files supported Create Event Cancel Insert Link URL Display Text (optional) Cancel Insert ; const descHidden = document.getElementById('descHidden'); function syncContent() { descHidden.value = editor.innerHTML; } // ── Toolbar ─────────────────────────────────────────────── document.querySelectorAll('.rf-toolbar-btn[data-cmd]').forEach(btn => { btn.addEventListener('mousedown', function(e) { e.preventDefault(); document.execCommand(this.dataset.cmd, false, null); editor.focus(); syncContent(); }); }); // ── Link modal ──────────────────────────────────────────── let savedRange = null; const modal = document.getElementById('linkModal'); function saveSelection() { const sel = window.getSelection(); if (sel.rangeCount) savedRange = sel.getRangeAt(0).cloneRange(); } function restoreSelection() { if (!savedRange) return; const sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(savedRange); } editor.addEventListener('mouseup', saveSelection); editor.addEventListener('keyup', saveSelection); document.getElementById('linkBtn').addEventListener('click', function() { saveSelection(); document.getElementById('linkUrl').value = ''; document.getElementById('linkText').value = ''; modal.classList.add('open'); document.getElementById('linkUrl').focus(); }); window.closeLinkModal = function() { modal.classList.remove('open'); editor.focus(); }; window.insertLink = function() { const url = document.getElementById('linkUrl').value.trim(); const text = document.getElementById('linkText').value.trim(); if (!url) { alert('Please enter a URL'); return; } const finalUrl = url.match(/^https?:\/\//i) ? url : 'https://' + url; editor.focus(); restoreSelection(); document.execCommand('insertHTML', false, ` ${text || finalUrl} `); closeLinkModal(); syncContent(); }; document.addEventListener('keydown', e => { if (e.key === 'Escape') closeLinkModal(); }); modal.addEventListener('click', function(e) { if (e.target === this) closeLinkModal(); }); // Sync on form submit document.getElementById('eventForm').addEventListener('submit', syncContent); // ── Image preview ───────────────────────────────────────── window.previewImages = function(input, gridId) { const grid = document.getElementById(gridId); grid.innerHTML = ''; Array.from(input.files).forEach(file => { const reader = new FileReader(); reader.onload = e => { const item = document.createElement('div'); item.className = 'rf-preview-item'; item.innerHTML = ` `; grid.appendChild(item); }; reader.readAsDataURL(file); }); }; // ── Tag input ───────────────────────────────────────────── const tagWrapper = document.getElementById('tagWrapper'); const tagTyping = document.getElementById('tagTypingInput'); const tagsHidden = document.getElementById('tagsHidden'); let tags = []; const existingVal = tagsHidden.value.trim(); if (existingVal) existingVal.split(',').map(t => t.trim()).filter(Boolean).forEach(addTag); function escHtml(s) { return s.replace(/&/g, '&').replace(/ /g, '>'); } function renderTags() { tagWrapper.querySelectorAll('.rf-tag-pill').forEach(el => el.remove()); tags.forEach((tag, i) => { const pill = document.createElement('span'); # edit Source: resources/views/admin/events/edit.blade.php ── Event Info ──────────────────────────────────────── --}} Event Info Event Title * title) }}" required> Description B I U {!! old('description', $event->description) !!} description) }}"> Location / Venue location) }}" placeholder="e.g., Syringa Park, Avianto Estate"> Google Maps Link google_maps_link) }}" placeholder="https://maps.app.goo.gl/..."> Google Maps Embed google_maps_embed) }}" placeholder="Paste full <iframe> code from Google Maps → Share → Embed a map"> Address address ?? '') }}" placeholder="e.g., 1 Avianto Drive, Muldersdrift"> Start Date * start_date->format('Y-m-d')) }}" required> End Date end_date?->format('Y-m-d')) }}"> Leave blank for single-day events Start Time start_time ? \Carbon\Carbon::parse($event->start_time)->format('H:i') : '') }}"> Leave blank for all-day events End Time end_time ? \Carbon\Carbon::parse($event->end_time)->format('H:i') : '') }}"> Ticket Link ticket_link) }}" placeholder="https://www.quicket.co.za/…"> Tags tags ? implode(',', $event->tags) : '') }}"> Press Enter or comma to add · Click × to remove is_active) ? 'checked' : '' }}> Active (visible to public) Event Images ;">Current images []" accept="image/*" multiple onchange="previewImages(this, 'imgPreviewGrid')"> Click or drag to add more images JPG, PNG, WEBP — multiple files supported Save Changes Cancel Insert Link URL Display Text (optional) Cancel Insert ; const descHidden = document.getElementById('descHidden'); function syncContent() { descHidden.value = editor.innerHTML; } document.querySelectorAll('.rf-toolbar-btn[data-cmd]').forEach(btn => { btn.addEventListener('mousedown', function(e) { e.preventDefault(); document.execCommand(this.dataset.cmd, false, null); editor.focus(); syncContent(); }); }); let savedRange = null; const modal = document.getElementById('linkModal'); function saveSelection() { const sel = window.getSelection(); if (sel.rangeCount) savedRange = sel.getRangeAt(0).cloneRange(); } function restoreSelection() { if (!savedRange) return; const sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(savedRange); } editor.addEventListener('mouseup', saveSelection); editor.addEventListener('keyup', saveSelection); document.getElementById('linkBtn').addEventListener('click', function() { saveSelection(); document.getElementById('linkUrl').value = ''; document.getElementById('linkText').value = ''; modal.classList.add('open'); document.getElementById('linkUrl').focus(); }); window.closeLinkModal = function() { modal.classList.remove('open'); editor.focus(); }; window.insertLink = function() { const url = document.getElementById('linkUrl').value.trim(); const text = document.getElementById('linkText').value.trim(); if (!url) { alert('Please enter a URL'); return; } const finalUrl = url.match(/^https?:\/\//i) ? url : 'https://' + url; editor.focus(); restoreSelection(); document.execCommand('insertHTML', false, ` ${text || finalUrl} `); closeLinkModal(); syncContent(); }; document.addEventListener('keydown', e => { if (e.key === 'Escape') closeLinkModal(); }); modal.addEventListener('click', function(e) { if (e.target === this) closeLinkModal(); }); document.getElementById('eventForm').addEventListener('submit', syncContent); // ── Image preview ───────────────────────────────────────── window.previewImages = function(input, gridId) { const grid = document.getElementById(gridId); grid.innerHTML = ''; Array.from(input.files).forEach(file => { const reader = new FileReader(); reader.onload = e => { const item = document.createElement('div'); item.className = 'rf-preview-item'; item.innerHTML = ` `; grid.appendChild(item); # index Source: resources/views/admin/events/index.blade.php ; align-items:center; justify-content:space-between;"> All Events () Sort by fullUrlWithQuery(['sort' => 'upcoming']) }}" > Upcoming date fullUrlWithQuery(['sort' => 'recent']) }}" > Recent fullUrlWithQuery(['sort' => 'alphabetical']) }}" > Alphabetical && $event->images->count() > 0) images->first()->url) }}" alt=""> && !$event->start_date->isSameDay($event->end_date)) to ?? '-' }} is_active ? 'active-toggle--on' : 'active-toggle--off' }}" data-id="" data-active="" title=""> #aaa;"> #aaa;">— ? This cannot be undone.');"> ; var active = this.dataset.active === '1'; var newVal = active ? 0 : 1; var el = this; el.classList.add('loading'); el.disabled = true; fetch('/' + id + '/toggle-active', { method: 'PATCH', headers: { 'X-CSRF-TOKEN': '', 'Accept': 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ is_active: newVal }), }) .then(function(r) { return r.json(); }) .then(function(data) { if (data.success) { el.dataset.active = newVal ? '1' : '0'; el.classList.toggle('active-toggle--on', !!newVal); el.classList.toggle('active-toggle--off', !newVal); el.querySelector('.active-toggle__label').textContent = newVal ? 'Active' : 'Inactive'; el.title = newVal ? 'Click to deactivate' : 'Click to activate'; } }) .catch(function() { alert('Could not update status.'); }) .finally(function() { el.classList.remove('loading'); el.disabled = false; }); }); }); # logs Source: resources/views/admin/events/logs.blade.php ?->name ?? '—' }} action) { 'created' => 'success', 'updated' => 'info', 'deleted' => 'danger', 'toggled_active' => 'warning', default => 'secondary', } }}"> # create Source: resources/views/admin/gallery/create.blade.php * Click or drag images here JPG, PNG, WEBP — multiple files supported Create Category Cancel ; grid.innerHTML = ''; Array.from(input.files).forEach(file => { const reader = new FileReader(); reader.onload = e => { const item = document.createElement('div'); item.className = 'rf-preview-item'; item.innerHTML = ` `; grid.appendChild(item); }; reader.readAsDataURL(file); }); }; # edit Source: resources/views/admin/gallery/edit.blade.php * Active (visible to public) Images ;">Current images ;"> Click or drag to add more images JPG, PNG, WEBP — multiple files supported Save Changes Cancel ; grid.innerHTML = ''; Array.from(input.files).forEach(file => { const reader = new FileReader(); reader.onload = e => { const item = document.createElement('div'); item.className = 'rf-preview-item'; item.innerHTML = ` `; grid.appendChild(item); }; reader.readAsDataURL(file); }); }; window.deleteImage = function(id) { if (!confirm('Delete this image?')) return; const item = document.getElementById('img-' + id); fetch('/admin/gallery-images/' + id, { method: 'DELETE', headers: { 'X-CSRF-TOKEN': '', 'Accept': 'application/json' } }).then(r => { if (r.ok) { item.style.opacity = '0'; item.style.transform = 'scale(0.8)'; item.style.transition = '0.2s'; setTimeout(() => item.remove(), 200); } else { alert('Could not delete image.'); } }); }; # index Source: resources/views/admin/gallery/index.blade.php #aaa;"> image is_active ? 'active-toggle--on' : 'active-toggle--off' }}" data-id="" data-active="" title=""> ── Drag to reorder ─────────────────────────────────────────── const tbody = document.getElementById('sortableBody'); if (tbody) { Sortable.create(tbody, { handle: '.drag-handle', animation: 150, ghostClass: 'drag-ghost', onEnd: function() { const ids = Array.from(tbody.querySelectorAll('tr[data-id]')) .map(tr => tr.dataset.id); fetch('', { method: 'POST', headers: { 'X-CSRF-TOKEN': '', 'Content-Type': 'application/json', 'Accept': 'application/json', }, body: JSON.stringify({ ids }), }).catch(() => alert('Could not save order.')); } }); } // ── Active toggle ───────────────────────────────────────────── document.querySelectorAll('.active-toggle').forEach(function(btn) { btn.addEventListener('click', function() { var id = this.dataset.id; var active = this.dataset.active === '1'; var newVal = active ? 0 : 1; var el = this; el.classList.add('loading'); el.disabled = true; fetch('/' + id + '/toggle-active', { method: 'PATCH', headers: { 'X-CSRF-TOKEN': '', 'Accept': 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ is_active: newVal }), }) .then(r => r.json()) .then(function(data) { if (data.success) { el.dataset.active = newVal ? '1' : '0'; el.classList.toggle('active-toggle--on', !!newVal); el.classList.toggle('active-toggle--off', !newVal); el.querySelector('.active-toggle__label').textContent = newVal ? 'Active' : 'Inactive'; el.title = newVal ? 'Click to deactivate' : 'Click to activate'; } }) .catch(() => alert('Could not update status.')) .finally(function() { el.classList.remove('loading'); el.disabled = false; }); }); }); # create Source: resources/views/admin/restaurants/create.blade.php ── Basic Info ──────────────────────────────────────── --}} Basic Info Logo Recommended: square image, at least 500×500px Restaurant Name * ── Menu Images ─────────────────────────────────────── --}} Menu Images Click or drag menu images here JPG, PNG, WEBP — multiple files supported Contact Information Add Contact Opening Hours Add Time Slot Create Restaurant Cancel ; let hoursIdx = 0; // ── Logo preview ───────────────────────────────────────────── function previewLogo(input) { if (!input.files || !input.files[0]) return; const reader = new FileReader(); reader.onload = function (e) { const img = document.getElementById('logoPreviewImg'); const icon = document.getElementById('logoPlaceholderIcon'); img.src = e.target.result; img.style.display = 'block'; icon.style.display = 'none'; }; reader.readAsDataURL(input.files[0]); } // ── Image preview grid ─────────────────────────────────────── function previewImages(input, gridId) { const grid = document.getElementById(gridId); grid.innerHTML = ''; Array.from(input.files).forEach(function (file) { const reader = new FileReader(); reader.onload = function (e) { const item = document.createElement('div'); item.className = 'rf-preview-item'; item.innerHTML = ' '; grid.appendChild(item); }; reader.readAsDataURL(file); }); } // ── Add contact row ─────────────────────────────────────────── function addContact() { const i = contactIdx++; const row = document.createElement('div'); row.className = 'rf-dynamic-row'; row.id = 'contact-' + i; row.innerHTML = ` Type Phone Email Label Value `; document.getElementById('contacts-list').appendChild(row); } // ── Add hours row ───────────────────────────────────────────── function addHours() { const i = hoursIdx++; const row = document.createElement('div'); row.className = 'rf-dynamic-row'; row.id = 'hours-' + i; row.innerHTML = ` Day Monday Tuesday Wednesday Thursday Friday Saturday Sunday Opens Closes Closed `; document.getElementById('hours-list').appendChild(row); } function removeRow(id) { const el = document.getElementById(id); if (el) el.remove(); } # edit Source: resources/views/admin/restaurants/edit.blade.php ── Basic Info ──────────────────────────────────────── --}} Basic Info Logo ;"> *" onchange="previewLogo(this)" style="padding:6px;"> Upload a new image to replace the current logo Restaurant Name * Menu Images ; ;">Current images []" accept="image/*" multiple onchange="previewImages(this, 'menuPreviewGrid')"> Click or drag to add more menu images JPG, PNG, WEBP — multiple files supported Contact Information [][type]" class="rf-select"> type === 'phone' ? 'selected' : '' }}>Phone type === 'email' ? 'selected' : '' }}>Email Label id }}][label]" class="rf-input" value="" placeholder="e.g., Main"> Value id }}][value]" class="rf-input" value=""> Saved id }}, 'contact-existing-')" title="Delete"> ── Opening Hours ────────────────────────────────────── --}} Opening Hours [][day_of_week]" class="rf-select"> ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'] as $day) day_of_week === $day ? 'selected' : '' }}> [][open_time]" class="rf-input" value=""> Closes id }}][close_time]" class="rf-input" value=""> id }}][is_closed]" value="1" > Closed Saved id }}, 'hours-existing-')" title="Delete"> ; // start high to avoid collisions with existing IDs let hoursIdx = 100; function previewLogo(input) { if (!input.files || !input.files[0]) return; const reader = new FileReader(); reader.onload = function (e) { const img = document.getElementById('logoPreviewImg'); const icon = document.getElementById('logoPlaceholderIcon'); img.src = e.target.result; img.style.display = 'block'; if (icon) icon.style.display = 'none'; }; reader.readAsDataURL(input.files[0]); } function previewImages(input, gridId) { const grid = document.getElementById(gridId); grid.innerHTML = ''; Array.from(input.files).forEach(function (file) { const reader = new FileReader(); reader.onload = function (e) { const item = document.createElement('div'); item.className = 'rf-preview-item'; item.innerHTML = ' '; grid.appendChild(item); }; reader.readAsDataURL(file); }); } // ── Delete existing image via AJAX ──────────────────────────── function deleteImage(imageId, btn) { if (!confirm('Delete this image?')) return; const item = btn.closest('.rf-existing-item'); fetch('/' + imageId, { method: 'DELETE', headers: { 'X-CSRF-TOKEN': '', 'Accept': 'application/json', } }).then(function (r) { if (r.ok) { item.style.opacity = '0'; item.style.transform = 'scale(0.8)'; item.style.transition = '0.2s'; setTimeout(function () { item.remove(); }, 200); } else { alert('Could not delete image.'); } }); } // ── Delete existing contact via AJAX ───────────────────────── function deleteContact(contactId, rowId) { if (!confirm('Delete this contact?')) return; const row = document.getElementById(rowId); fetch('/' + contactId, { method: 'DELETE', headers: { 'X-CSRF-TOKEN': '', 'Accept': 'application/json' } }).then(function (r) { if (r.ok) { row.remove(); } else { alert('Could not delete contact.'); } }); } // ── Delete existing hours via AJAX ──────────────────────────── function deleteHours(hoursId, rowId) { if (!confirm('Delete this time slot?')) return; const row = document.getElementById(rowId); fetch('/' + hoursId, { method: 'DELETE', headers: { 'X-CSRF-TOKEN': '', 'Accept': 'application/json' } }).then(function (r) { if (r.ok) { row.remove(); } else { alert('Could not delete time slot.'); } }); } // ── Add new contact row ─────────────────────────────────────── function addContact() { const i = contactIdx++; const row = document.createElement('div'); row.className = 'rf-dynamic-row'; row.id = 'contact-' + i; row.innerHTML = ` Type Phone Email Label Value `; document.getElementById('contacts-list').appendChild(row); } // ── Add new hours row ───────────────────────────────────────── function addHours() { const i = hoursIdx++; const row = document.createElement('div'); row.className = 'rf-dynamic-row'; row.id = 'hours-' + i; row.innerHTML = ` Day Monday Tuesday Wednesday Thursday Friday Saturday Su # index Source: resources/views/admin/restaurants/index.blade.php && $restaurant->images->count() > 0) images->first()->url) }}" alt=""> ? 'active-toggle--on' : 'active-toggle--off' }}" data-id="" data-active="" title=""> isClosedToday() ? 'closed-today-toggle--on' : 'closed-today-toggle--off' }}" data-id="" data-closed="" title=""> #aaa;"> #aaa;">— ? This cannot be undone.');"> ── Active toggle ──────────────────────────────────────────────────────────── document.querySelectorAll('.active-toggle:not(.closed-today-toggle)').forEach(function(btn) { btn.addEventListener('click', function() { var id = this.dataset.id; var active = this.dataset.active === '1'; var newVal = active ? 0 : 1; var el = this; el.classList.add('loading'); el.disabled = true; fetch('/' + id + '/toggle-active', { method: 'PATCH', headers: { 'X-CSRF-TOKEN': '', 'Accept': 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ is_active: newVal }), }) .then(function(r) { return r.json(); }) .then(function(data) { if (data.success) { el.dataset.active = newVal ? '1' : '0'; el.classList.toggle('active-toggle--on', !!newVal); el.classList.toggle('active-toggle--off', !newVal); el.querySelector('.active-toggle__label').textContent = newVal ? 'Active' : 'Inactive'; el.title = newVal ? 'Click to deactivate' : 'Click to activate'; } }) .catch(function() { alert('Could not update status.'); }) .finally(function() { el.classList.remove('loading'); el.disabled = false; }); }); }); // ── Closed Today toggle ────────────────────────────────────────────────────── document.querySelectorAll('.closed-today-toggle').forEach(function(btn) { btn.addEventListener('click', function() { var id = this.dataset.id; var el = this; el.classList.add('loading'); el.disabled = true; fetch('/' + id + '/toggle-closed-today', { method: 'PATCH', headers: { 'X-CSRF-TOKEN': '', 'Accept': 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({}), }) .then(function(r) { return r.json(); }) .then(function(data) { if (data.success) { var nowClosed = data.closed_today; el.dataset.closed = nowClosed ? '1' : '0'; el.classList.toggle('closed-today-toggle--on', nowClosed); el.classList.toggle('closed-today-toggle--off', !nowClosed); el.querySelector('.active-toggle__label').textContent = nowClosed ? 'Closed Today' : 'Open'; el.title = nowClosed ? 'Click to re-open today' : 'Click to close for today'; } }) .catch(function() { alert('Could not update closed-today status.'); }) .finally(function() { el.classList.remove('loading'); el.disabled = false; }); }); }); # logs Source: resources/views/admin/restaurants/logs.blade.php ?->name ?? '—' }} action) { 'created' => 'success', 'updated' => 'info', 'deleted' => 'danger', 'toggled_active' => 'warning', 'toggled_closed_today' => 'warning', default => 'secondary', } }}"> # create Source: resources/views/admin/tickets/create.blade.php * Choose a category… !== \App\Models\Ticket::SPECIAL_CATEGORY) \App\Models\Ticket::SPECIAL_CATEGORY }}" > — no work starts before then. Title * Triage & attachment Priority * ? 'selected' : '' }}> — open for anyone ? 'selected' : '' }}> ;color:#aaa;">(optional) Click or drag a file here Image, PDF, or document — max 10MB × ; var note = document.getElementById('approvalNote'); var special = \App\Models\Ticket::SPECIAL_CATEGORY); function sync() { note.classList.toggle('show', select.value === special); } select.addEventListener('change', sync); sync(); })(); function ticketFilePicked(input) { var chip = document.getElementById('fileChip'); var name = document.getElementById('fileChipName'); if (input.files && input.files.length) { name.textContent = input.files[0].name; chip.classList.add('show'); } else { ticketFileClear(); } } function ticketFileClear() { var input = document.getElementById('attachment'); input.value = ''; document.getElementById('fileChip').classList.remove('show'); } # index Source: resources/views/admin/tickets/index.blade.php !== 1 ? 's' : '' }} total New Ticket Logs ['status']) ? 'active' : '' }}"> All ['status' => $key]) }}" class="tkt-tab "> !empty($filters['status'])) ['category'] ?? '') === $category ? 'selected' : '' }}> ['priority'] ?? '') === $priority ? 'selected' : '' }}> !empty($filters['category']) || !empty($filters['priority'])) $filters['status'] ?? null])) }}" class="tkt-filter-clear"> Clear filters # Submitter Title Category Priority Status Date #"> ? 'Try clearing the filters above.' : 'Tickets submitted by staff will appear here.' }} # logs Source: resources/views/admin/tickets/logs.blade.php ?->name ?? '—' }} # — ?? '—' }} ;"> No activity yet Ticket activity will be recorded here. # show Source: resources/views/admin/tickets/show.blade.php #' . $ticket->id) ; padding: 4px 12px; border-radius: 999px; font-size: 12px; font-weight: 600; } .tkt-status-new { background: #e7f0fd; color: #1d5fbf; } .tkt-status-pending_approval { background: #fdf2dd; color: #b07908; } .tkt-status-in_progress { background: #e6f4f1; color: #0F6E56; } .tkt-status-completed { background: #e7f6ea; color: #1f8a44; } .tkt-status-declined { background: #fbe9e7; color: #c0392b; } .tkt-special-banner { background: #f6f0fb; border: 1px solid #e4d4f3; color: #6b3fa0; border-radius: 11px; padding: 14px 16px; margin-bottom: 18px; display: flex; align-items: center; gap: 10px; font-size: 13.5px; } .tkt-status-control { display: flex; align-items: center; gap: 10px; } .tkt-status-control select { border: 1px solid #d4dad7; border-radius: 8px; padding: 8px 11px; font-size: 13px; font-family: inherit; background: #fff; } .tkt-status-control.loading { opacity: .6; pointer-events: none; } .tkt-prio-high { color: #c0392b; font-weight: 600; } .tkt-prio-medium { color: #b07908; font-weight: 600; } .tkt-prio-low { color: #7a857f; font-weight: 600; } .tkt-approve-bar { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 14px; } .tkt-btn-approve { background: #0F6E56; color: #fff; border: none; border-radius: 9px; padding: 10px 20px; font-weight: 600; font-size: 13.5px; cursor: pointer; } .tkt-btn-approve:hover { background: #0c5945; } .tkt-btn-decline { background: #fff; color: #c0392b; border: 1px solid #e6b8b2; border-radius: 9px; padding: 10px 20px; font-weight: 600; font-size: 13.5px; cursor: pointer; } .tkt-btn-decline:hover { background: #fbe9e7; } .tkt-decline-form { margin-top: 12px; display: none; } .tkt-decline-form textarea { width: 100%; border: 1px solid #d4dad7; border-radius: 8px; padding: 10px; font-family: inherit; font-size: 13px; resize: vertical; min-height: 70px; } .tkt-attachment { display: inline-flex; align-items: center; gap: 8px; margin-top: 4px; padding: 9px 14px; border: 1px solid #d4dad7; border-radius: 9px; text-decoration: none; color: #1f2a26; font-size: 13px; background: #fafbfa; } .tkt-attachment:hover { border-color: #0F6E56; color: #0F6E56; } ;"> Ticket # #f0e3fa;color:#6b3fa0;font-size:11px;vertical-align:middle;">Special Request \a\t H:i') }} status }}" id="tkt-status-badge"> !! nl2br(e(trim($ticket->description))) !!} ;"> Attachment attachment_url }}" target="_blank" class="tkt-attachment"> ;"> Approval & queue Decline — reason for declining (included in the email to the submitter)"> Confirm decline Cancel ;margin:0;"> Approve or decline this request (left) before its status can be changed. ;margin:0;"> This request was declined and is closed. ? 'selected' : '' }}> ;color:#1f8a44;"> Marking Completed emails the submitter automatically. ;padding:0 0 12px;"> Assigned to !== auth()->id()) ;font-size:13px;color:var(--gray-500);"> Open Unassigned — anyone can pick this up. %;justify-content:center;"> Assign to me ;gap:8px;"> Assign to… # login Source: resources/views/auth/login.blade.php Login - Syringa Welcome Back Sign in to your account ••••••••" required class="login-input"> Remember me Sign In or Back to website © Syringa Park. All rights reserved. # index Source: resources/views/bookings/index.blade.php | Syringa Park Avianto Estate Bookings') ! Our outdoor venue hire in Muldersdrift is perfect for kids' parties, corporate functions, and family events."> !-- Page Header --> Bookings Spaces & Venues Events Venue Hire Every event at Syringa Park is unique. We offer flexible packages that can be customised to your guest numbers and budget. From a small private gathering to a full-scale festival, we bring your vision to life. The Shed An enclosed venue ideal for corporate events and private functions . The space includes its own kitchen , allowing the chef to operate directly from the venue. El Jimador Decks Well suited to smaller corporate bookings and private events , offering stunning views over the park. VIP Area An enclosed venue ideal for corporate events and private functions . The space includes its own kitchen , allowing the chef to operate directly from the venue. Make a Booking Ideal Event Venue & Party Venue for Hire If you would like to hire out our venue or make a booking for a special event in one of our dedicated party venue spaces, please get in touch with us. * Contact Number * Your Email * Type of Event * Select a category Corporate & Business Private Celebrations Weddings & Special Occasions Outdoor & Large-Scale Events Activity-Based Events Venue Hire Options Not Sure Yet? Specific Event Type * Select a category first Tell Us What You Have in Mind Preferred Date and Time * Where did you hear from us? Google Social Media From a friend Any Special Requests or Requirements * * Required fields Send Enquiry ; inset: 0; z-index: 9999; display: flex; align-items: center; justify-content: center; padding: 1.25rem; opacity: 0; pointer-events: none; transition: opacity 0.25s ease; } .cs-modal.is-open { opacity: 1; pointer-events: all; } .cs-modal__backdrop { position: absolute; inset: 0; background: rgba(0, 0, 0, 0.72); cursor: pointer; } .cs-modal__box { position: relative; z-index: 1; border-radius: 14px; overflow: hidden; max-width: 680px; width: 100%; box-shadow: 0 24px 64px rgba(0, 0, 0, 0.5); transform: translateY(12px); transition: transform 0.25s ease; } .cs-modal.is-open .cs-modal__box { transform: translateY(0); } .cs-modal__img { display: block; width: 100%; height: auto; } .cs-modal__close { position: absolute; top: 10px; right: 10px; z-index: 2; width: 34px; height: 34px; border-radius: 50%; background: rgba(0, 0, 0, 0.55); border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; color: #fff; transition: background 0.15s; } .cs-modal__close:hover { background: rgba(0, 0, 0, 0.8); } [{ value: 'conferences_workshops', label: 'Conferences & Workshops' }, { value: 'strategy_planning', label: 'Strategy & Planning Days' }, { value: 'client_functions', label: 'Client Functions' }, { value: 'year_end_functions', label: 'Year-End Functions' }, { value: 'team_building', label: 'Team Building Events' }, { value: 'product_launches', label: 'Product Launches & Activations' }, ], private: [{ value: 'birthday_adults', label: 'Birthday Parties (Adults)' }, { value: 'birthday_kids', label: 'Birthday Parties (Kids)' }, { value: 'engagement_parties', label: 'Engagement Parties' }, { value: 'anniversaries', label: 'Anniversaries' }, { value: 'baby_showers', label: 'Baby # contact Source: resources/views/contact/contact.blade.php | Syringa Park Contact Details') ? Contact the Syringa Park team today to get details on events, our activities and more."> !-- Page Header --> Contact us Get In Touch Keen to Get in Touch? Syringa Park offers a variety of activities , operators , and event spaces . Send us an enquiry or reach out directly — we're here to help. ; $emailIcon = ' '; $webIcon = ' '; !-- Grid --> Padel {!! $phoneIcon !!} 082 475 5672 {!! $webIcon !!} www.syringapadel.co.za Epic Karting {!! $phoneIcon !!} 087 495 2070 {!! $emailIcon !!} www.epickarting.co.za MiFitness Kids {!! $phoneIcon !!} 072 015 2928 {!! $emailIcon !!} www.mifitness-kids.co.za Trails {!! $phoneIcon !!} 078 871 3943 {!! $emailIcon !!} 082 856 2448 4×4 Trails {!! $phoneIcon !!} 083 801 7511 or 079 504 7120 {!! $emailIcon !!} Contact Us Syringa Park General Call Us 010 025 8956 Follow Us Fill in the form below and we'll get back to you as soon as possible. ?" required> Message Send Message This site is protected by reCAPTCHA. Google's Privacy Policy and Terms of Service apply. When To Visit Operating Hours Monday Trails 07:00 – 16:00 Padel & Padel Bar 14:00 – 22:00 Epic Karting 11:00 – 17:00 Rest of the park is closed Tuesday Trails 07:00 – 16:00 Padel & Padel Bar 14:00 – 22:00 Epic Karting 11:00 – 17:00 Rest of the park is closed Wednesday Trails 07:00 – 16:00 Padel & Padel Bar 06:00 – 22:00 Epic Karting 11:00 – 18:00 The Trout Farm 08:00 – 18:00 Pizza di Materina 12:00 – 19:00 Rest of the park is closed Thursday Trails 07:00 – 16:00 Padel & Padel Bar 06:00 – 22:00 Epic Karting 11:00 – 18:00 The Trout Farm 08:00 – 18:00 Rest of the park is closed Weekends & Public Holidays Whole Park Open – Saturday 09:00 – Sunday 09:00 – Public Holidays 09:00 – Common Questions Frequently Asked Questions Can I book a birthday party at Syringa Park? Yes! Syringa Park offers birthday party packages for children and adults alike. Our venues can accommodate groups of various sizes and we provide catering options. Contact us at info? Well-behaved dogs on a leash are welcome in outdoor areas of Syringa Park. Dogs are not permitted inside restaurants, the Pavilion, or near the pool area. Please ensure you clean up after your pet and keep them under control at all times. Is Syringa Park located in Avianto Estate? Yes, Syringa Park is situated within the beautiful Avianto Estate in Muldersdrift. The estate is located at Portion 61, Driefontein Farm, Driefontein Rd, Muldersdrift, 1747 — easily accessible from both Johannesburg and Pretoria. Is there parking available at Syringa Park? Syringa Park offers ample free parking for visitors. The parking area is safe and monitored. During peak periods such as weekends and public holidays, we recommend arriving early to secure a parking spot. Do I need to make a reservation to visit? Walk-ins are welcome during regular trading hours. However, for special events, private functions, or dining at our restaurants during peak times, we strongly recommend making a reservation in advance to avoid disappointment. Where To Find Us Find Us Portion 61, Driefontein Farm, Driefontein Rd, Muldersdrift, 1747 Get Directions [data-faq]'); document.querySelectorAll('[data-faq].is-open').forEach(function(open) { if (open !== item) open.classList.remove('is-open'); }); item.classList.toggle('is-open'); } // reCAPTCHA v3 document.getElementById('contactForm').addEventListener('submit', function(e) { e.preventDefault(); const btn = this.querySelector('.contact-form__submit'); if (btn.disabled) return; const message = document.getElementById('contact_message # feedback-request Source: resources/views/emails/feedback-request.blade.php Your feedback — Syringa Park Two minutes of your time would mean a lot to us — share your experience with Syringa Park. NATURE  ·  LIFESTYLE  ·  ADVENTURE How did we do? We’d love your feedback Syringa Park  ·  Avianto Estate Hi , A little while ago you enquired about hosting an event at Syringa Park . We’re always trying to improve, and your honest feedback helps us do exactly that. It takes about two minutes , and your responses are completely anonymous . 🍃 feedback_token) }}" style="display:inline-block;background-color:#206252;color:#ffffff;text-decoration:none;padding:16px 44px;border-radius:100px;font-family:Arial,sans-serif;font-size:15px;font-weight:bold;letter-spacing:0.5px;"> Share Your Feedback → Or paste this link into your browser: Syringa Park at Avianto Estate Portion 61, Driefontein Rd, Muldersdrift, 1747 # 404 Source: resources/views/errors/404.blade.php 404 - Page Not Found 404 Page Not Found The page you're looking for doesn't exist or has been moved. Let's get you back on track. Redirecting to homepage in 4 seconds... Go Home Now # index Source: resources/views/events/index.blade.php | Markets, Live Music & More') !-- Open Graph --> !-- Page Header --> Events What's On Events at Syringa Park Syringa Park offers a range of exclusive event spaces perfect for corporate gatherings , private celebrations , or community events . With versatile indoor and outdoor venues, professional support, and a stunning natural backdrop, every event is designed to be memorable and seamless . Let us help you create an experience your guests will cherish. url() }}"> Find Events ['list' => 'List', 'month' => 'Month', 'day' => 'Day'] as $key => $label) && !$search) There are no events. && $search) No events found for " ". !== 'list' ? 'hidden' : '' }}"> ; ? asset('storage/' . $firstImage->url) : asset('assets/images/home/event1.jpeg') }}" alt="" loading="lazy"> !empty($event->tags)) \Carbon\Carbon::parse($event->start_time)->format('H:i') }} ;">No events for this month. ; return [ 'id' => $e->id, 'url' => route('events.show', $e), 'title' => $e->title, 'location' => $e->location ?? '', 'start_date' => $e->start_date->format('Y-m-d'), 'end_date' => $e->end_date ? $e->end_date->format('Y-m-d') : $e->start_date->format('Y-m-d'), 'start_time' => $e->start_time ? \Carbon\Carbon::parse($e->start_time)->format('H:i') : null, 'image' => $img ? asset('storage/' . $img->url) : asset('assets/images/home/event1.jpeg'), 'tags' => $e->tags ?? [], ]; }) ->toJson(); $defaultDateEvent = $upcomingEvents->first() ?? $events->sortByDesc('start_date')->first(); $defaultDate = $defaultDateEvent ? $defaultDateEvent->start_date->format('Y-m-d') : now()->format('Y-m-d'); * ── Data ─────────────────────────────────────────────────── */ var eventsData = {!! $eventsJson !!}; var MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ]; var currentView = ''; function toYMD(d) { return d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()) .padStart(2, '0'); } var dp = ''.split('-'); var selectedDay = new Date(+dp[0], +dp[1] - 1, +dp[2]); selectedDay.setHours(0, 0, 0, 0); /* ── Month view ───────────────────────────────────────────── */ var monthBody = document.getElementById('monthViewBody'); var DAY_NAMES = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; function renderMonthView() { var year = selectedDay.getFullYear(), month = selectedDay.getMonth(); var first = new Date(year, month, 1); var start = new Date(first); start.setDate(1 - first.getDay()); var last = new Date(year, month + 1, 0); var end = new Date(last); end.setDate(last.getDate() + (6 - last.getDay())); var today = new Date(); today.setHours(0, 0, 0, 0); var html = ' '; DAY_NAMES.forEach(function(d) { html += ' ' + d + ' '; }); for (var cur = new Date(start); cur = e.start_date && ymd '; html += ' ' + cur.getDate() + ' '; evts.slice(0, 2).forEach(function(e) { var t = e.title.length > 16 ? e.title.slice(0, 16) + '…' : e.title; html += ' ' + t + ' '; }); if (evts.length > 2) html += ' +' + (evts.length - 2) + ' more '; html += ' '; } html += ' '; monthBody.innerHTML = html; } window.goToDay = function(ymd) { var p = ymd.split('-'); selectedDay = new Date(+p[0], +p[1] - 1, +p[2]); selectedDay.setHours(0, 0, 0, 0); switchView('day'); }; /* ── Day view ─────────────────────────────────────────────── */ var dayBody = document.getElementById('dayViewBody'); function renderDayView() { var ymd = toYMD(selectedDay); var evts = eventsData.filter(function(e) { return ymd >= e.start_date && ym # show Source: resources/views/events/show.blade.php | Syringa Park Events') ?? 'Join us at ' . $event->title . ' at Syringa Park, Avianto Estate, Muldersdrift.' }}"> title }}, Syringa Park events, Avianto Estate, Muldersdrift events, "> title }} | Syringa Park Events"> description), 155) ?? 'Join us at ' . $event->title . ' at Syringa Park, Avianto Estate, Muldersdrift.' }}"> images->first() ? asset('storage/' . $event->images->first()->url) : asset('assets/images/home/herobanner1.webp') }}"> url() }}"> title }} | Syringa Park Events"> description), 155) ?? 'Join us at ' . $event->title . ' at Syringa Park, Avianto Estate, Muldersdrift.' }}"> images->first() ? asset('storage/' . $event->images->first()->url) : asset('assets/images/home/herobanner1.webp') }}"> ; ── Hero Image ── --}} ── Title Bar ── --}} All Events status }}"> ── Content Grid ── --}} !! $event->description !!} || $event->google_maps_link) %; height: 300px; border-radius: 10px; overflow: hidden; margin-bottom: 0.75rem;"> {!! $event->google_maps_embed !!} ;"> ticket_link }}" target="_blank" rel="noopener noreferrer" class="ev-pg-cta-btn ev-pg-cta-btn--ticket"> Get Tickets ?u=" target="_blank" class="ev-pg-share-icon" title="Share on Facebook"> title) }}&url=" target="_blank" class="ev-pg-share-icon" title="Share on X"> ── Lightbox ── --}} # form Source: resources/views/feedback/form.blade.php Your Feedback | Syringa Park Your Experience Tell us how we did Your answers are completely anonymous and take about two minutes. Thank you for helping us improve. !-- honeypot --> Website Did our team contact you after your enquiry (phone or email)? Yes No Roughly how many days after your enquiry did you hear back from us? Did you receive all the information you needed? Yes Partially No Did you have a site visit with us? Yes No How would you rate your site visit experience? ; $i  ·  5 = Excellent Did you go ahead and book your event with us? Yes No Which venue or company did you book with instead? What made you choose them over us? What could we do to improve our enquiry or service process? Any other comments? Keep my feedback anonymous Uncheck if you're happy for us to link this feedback to your enquiry and follow up with you. This feedback will be linked to . Change Submit Feedback Syringa Park at Avianto Estate · Muldersdrift Add your email Leave your email if you're happy for us to link this feedback to your enquiry and follow up with you directly. You can stay anonymous instead. # thanks Source: resources/views/feedback/thanks.blade.php Thank You | Syringa Park Thank you! We really appreciate you taking the time to share your feedback. It helps us make every event at Syringa Park even better. Visit Our Website Syringa Park at Avianto Estate · Muldersdrift # home Source: resources/views/home/home.blade.php | Family Fun & Adventure in Muldersdrift') !"> !-- Hero Section --> Nature · Lifestyle · Adventure Syringa Park at Avianto Estate Upcoming Events Book a Venue Scroll Cashless Environment Dog Friendly Food & Beverage Various Activities Live Music Venue Hire About the Park "It's a Lifestyle" Syringa Park at Avianto Estate is a lifestyle destination in Muldersdrift that brings together event venues, food, activities, and outdoor space in one location. The park caters for corporate events, private functions, public events, and relaxed family outings, offering a variety of spaces and experiences across the venue. Syringa Park is made up of independently operated venues and activities, each managing their own bookings and enquiries. Guests are required to contact the selected venue or activity directly using the contact details provided on the website. Terms and conditions apply to all bookings. Our Story What to Do Syringa Park Activities Syringa Park features a variety of venues and activities that operate independently, all conveniently located within the same park. Padel Premium padel courts designed for everyone, from beginners to seasoned players View Now Epic Karting High-speed thrills on the track — an adrenaline-pumping experience for all ages View Now MiFitness Kids South Africa's grandest kids play park with 7000m² of adventure zones, epic jungle gyms, and more. View Now 4X4 Trails Rugged off-road trails through natural terrain — perfect for adventure seekers View Now AfricaBlack Coffee A peaceful, pet-friendly coffee spot surrounded by greenery — perfect for families and relaxed meetups Find Out More Explore All Activities Dining Gourmet Eateries With permanent structures in place for food vendors, Syringa Park offers a selection of gastronomic delights for every palate and lifestyle, to be enjoyed in an open and relaxing environment. View Gourmet Eateries Events Book a Venue Whether you're planning a birthday celebration, corporate function, or private gathering, Syringa Park offers versatile venue options to suit any occasion. Let us help you create an unforgettable experience in a beautiful open-air setting. Book a Venue Now What's On Events At Syringa Park Syringa Park features a variety of venues and activities that operate independently, all conveniently located within the same park. ; !empty($eventItem->tags)) !! Str::limit(strip_tags($eventItem->description), 85) !!} \Carbon\Carbon::parse($eventItem->start_time)->format('H:i') }} !-- Testimonials Section --> Testimonials What Our Clients Say ; $i ; $i 😁" Yolanda van Heerden ; $i !" Tshepho Mojapelo Read More Reviews on Google Follow Us On Instagram ; var track = document.getElementById('actTrack'); var prevBtn = document.getElementById('actPrev'); var nextBtn = document.getElementById('actNext'); if (!track || !viewport) return; var cards = track.querySelectorAll('.activity-card'); if (!cards.length) return; var currentPage = 0; var perPage, totalPages; var scrollTimer; var isScrolling = false; function getPerPage() { var w = window.innerWidth; if (w = totalPages - 1); } function goTo(page) { currentPage = Math.max(0, Math.min(page, totalPages - 1)); var target = cards[currentPage]; if (target) { isScrolling = true; viewport.scrollTo({ left: target.offsetLeft - viewport.offsetLeft, behavior: 'smooth' }); } syncUI(); } prevBtn.addEventListener('click', function() { goTo(currentPage - 1); }); nextBtn.addEventListener('click', function() { goTo(currentPage + 1); }); viewport.addEventListener('scroll', functio # index Source: resources/views/knowledge/index.blade.php | Practical Insights') !-- Open Graph --> !-- Page Header --> Knowledge Insights & Articles Knowledge That Drives Better Decisions Our knowledge blogs were created to turn complex topics into clear, practical insights . In an age of information overload, we focus on delivering well-researched, experience-driven content that helps readers understand trends, make informed choices, and stay ahead in their fields. Each article is thoughtfully written to balance expert knowledge with real-world application — whether you're exploring new ideas, deepening your understanding, or looking for actionable guidance. Our goal is simple: to share knowledge that's useful, credible, and easy to apply. url() }}"> ; × Clear | ── Sidebar ─────────────────────────────────────────── --}} Categories ? 'active' : '' }}"> url() }}?category="> []; foreach ($blogs as $blog) { $blogPosts[] = [ '?? '', 'image' => $blog->thumbnail ? asset('storage/' . $blog->thumbnail) : asset('assets/images/home/herobanner1.webpbp'), 'author' => $blog->author ? ['] : ['], 'publisher' => [ '[ '], ], ]; } $blogSchema = [ '[ [ '#webpage', 'url' => 'https://syringapark.co.za/knowledge', 'name' => 'Knowledge: Insights & Articles | Syringa Park', 'description' => 'Explore well-researched, experience-driven articles on nature, food, adventure, and lifestyle. Practical insights from Syringa Park to help you make informed choices.', 'breadcrumb' => ['#breadcrumb'], ], [ '#breadcrumb', 'itemListElement' => [ [ '], [ '], ], ], [ '#blog', 'name' => 'Syringa Park Knowledge Blog', 'description' => 'Insights and articles designed to turn complex topics into clear, practical guidance on outdoor leisure, local culture, and community.', 'url' => 'https://syringapark.co.za/knowledge', 'genre' => [ 'Adventure & Outdoor', 'Behind the Scenes', 'Events & Activities', 'Food & Dining', 'Nature & Wildlife', 'News & Updates', 'Tips & Guides', 'Travel & Destinations', ], 'publisher' => [ '#organization', 'name' => 'Syringa Park', 'url' => 'https://syringapark.co.za', ], 'blogPost' => $blogPosts, ], ], ]; +json">{!! json_encode($blogSchema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) !!} # show Source: resources/views/knowledge/show.blade.php ?? $blog->title . ' | Syringa Park') ?? Str::limit(strip_tags($blog->content), 155) }}"> ?? null) tags) ? implode(', ', $blog->tags) : $blog->tags }}, Syringa Park, Avianto Estate, Muldersdrift"> !-- Open Graph --> meta_title ?? $blog->title }} | Syringa Park"> meta_description ?? Str::limit(strip_tags($blog->content), 155) }}"> main_image ? asset('storage/' . $blog->main_image) : asset('assets/images/home/herobanner1.webp') }}"> url() }}"> !-- Twitter Card --> meta_title ?? $blog->title }} | Syringa Park"> meta_description ?? Str::limit(strip_tags($blog->content), 155) }}"> main_image ? asset('storage/' . $blog->main_image) : asset('assets/images/home/herobanner1.webp') }}"> ? asset('storage/' . $blog->main_image) : '/assets/images/about/about.webp' }}');"> | ── Article ───────────────────────────────────────── --}} Back to Knowledge {!! $blog->content !!} ── Sidebar ─────────────────────────────────────────── --}} Categories ? 'active' : '' }}"> slug }}"> ? 'active' : '' }}"> slug) }}"> # admin Source: resources/views/layouts/admin.blade.php ?family=Playfair+Display:wght;600;700&family=Poppins:wght;400;500;600;700&display=swap" rel="stylesheet"> !-- Sidebar --> SyringaPark Main routeIs('admin.dashboard') ? 'active' : '' }}"> Dashboard Content routeIs('admin.restaurants.*') ? 'active' : '' }}"> Restaurants routeIs('admin.events.*') ? 'active' : '' }}"> Events routeIs('admin.gallery-categories.*') ? 'active' : '' }}"> Gallery routeIs('admin.blogs.*') ? 'active' : '' }}"> Blogs Enquiries routeIs('admin.enquiries.contact') ? 'active' : '' }}"> Contact routeIs('admin.enquiries.bookings') ? 'active' : '' }}"> Bookings routeIs('admin.enquiries.newsletter') ? 'active' : '' }}"> Newsletter routeIs('admin.enquiries.feedback') ? 'active' : '' }}"> Feedback Support *') ? 'active' : '' }}"> Tickets !empty($pendingTicketCount)) ? 'active' : '' }}"> Submit Ticket Dashboard Administrator !-- Page Content --> ; const sidebar = document.querySelector('.admin-sidebar'); const overlay = document.getElementById('sidebarOverlay'); function openSidebar() { sidebar.classList.add('open'); overlay.classList.add('open'); } function closeSidebar() { sidebar.classList.remove('open'); overlay.classList.remove('open'); } hamburger.addEventListener('click', openSidebar); overlay.addEventListener('click', closeSidebar); # app Source: resources/views/layouts/app.blade.php !-- Google Fonts --> [a] = c[a] || function() { (c[a].q = c[a].q || []).push(arguments) }; t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i; y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y); })(window, document, "clarity", "script", "vmwj5x6t9r"); !-- Flash Messages --> ; flashMessages.forEach(function(message) { setTimeout(function() { message.style.opacity = '0'; setTimeout(function() { message.remove(); }, 300); }, 5000); }); }); # booking Source: resources/views/mail/booking.blade.php Booking Enquiry New Booking Enquiry Submitted via the Syringa Park website Name Email email }}"> Phone phone }}"> Number of Guests Event Type & Time ? '16px' : '28px' }};"> Special Requests # contact Source: resources/views/mail/contact.blade.php Contact Form Submission New Contact Message Submitted via the Syringa Park website Name Email !empty($data['phone'])) Phone ['subject'] }} Message Sent from the contact form at # newsletter-admin Source: resources/views/mail/newsletter-admin.blade.php New Subscriber New Newsletter Subscriber Someone just subscribed on syringapark.co.za Email Address Subscribed At Syringa Park · Avianto Estate · Muldersdrift # newsletter Source: resources/views/mail/newsletter.blade.php Welcome to Syringa Park You're now the first to know about events, offers & everything at Syringa Park. NATURE  ·  LIFESTYLE  ·  ADVENTURE Newsletter Subscription Welcome to Syringa Park 🌿 Avianto Estate  ·  Muldersdrift You’re on the list! Thank you for subscribing. You’ll now be the first to know about upcoming events, exclusive offers, and everything happening at Syringa Park at Avianto Estate . 🍃 🎉 Upcoming Events 🍽️ Dining Updates 🏕️ Activities & More 🍃 In the meantime, explore everything Syringa Park has to offer. Visit Our Website → 📍 Syringa Park at Avianto Estate Portion 61, Driefontein Rd, Muldersdrift, 1747 You’re receiving this because you subscribed at syringapark.co.za # assigned Source: resources/views/mail/tickets/assigned.blade.php Ticket Assigned SUPPORT  ·  TICKET ASSIGNED Syringa Park Ticket # Assigned to You Hi , A ticket has been assigned to you. The details are below — head to the dashboard when you're ready to pick it up. [ 'Title' => $ticket->title, 'Category' => $ticket->category, 'Priority' => ucfirst($ticket->priority), 'Status' => $ticket->statusLabel(), 'Submitted by' => $ticket->submitter_name, ]; ;border-bottom:;font-family:Arial,sans-serif;font-size:11px;color:#6a8f7c;text-transform:uppercase;letter-spacing:1px;width:34%;vertical-align:top;"> last ? 'none' : '1px solid #dceee6' }};font-family:Arial,sans-serif;font-size:14px;color:#333333;font-weight:bold;"> %" cellpadding="0" cellspacing="0" border="0" style="margin-top:24px;"> Description Open Ticket → Syringa Park at Avianto Estate · Muldersdrift # special-request Source: resources/views/mail/tickets/special-request.blade.php Special Request — Approval Needed APPROVAL  ·  ACTION REQUIRED Syringa Park Ticket # Ticket Received A request outside the retainer scope has been submitted and is held in Pending Approval . It won't enter the work queue until you approve it. [ 'Submitter' => $ticket->submitter_name . ' (' . $ticket->submitter_email . ')', 'Title' => $ticket->title, 'Priority' => ucfirst($ticket->priority), 'Submitted' => $ticket->created_at->format('d M Y \a\t H:i'), ]; if ($ticket->attachment_name) { $rows['Attachment'] = $ticket->attachment_name . ' (attached)'; } ;border-bottom:;font-family:Arial,sans-serif;font-size:11px;color:#a07c1a;text-transform:uppercase;letter-spacing:1px;width:34%;vertical-align:top;"> last ? 'none' : '1px solid #ecdcb4' }};font-family:Arial,sans-serif;font-size:14px;color:#333333;font-weight:bold;"> %" cellpadding="0" cellspacing="0" border="0" style="margin-top:24px;"> Description Review in Dashboard → Syringa Park at Avianto Estate · Muldersdrift # status-changed Source: resources/views/mail/tickets/status-changed.blade.php Ticket Update ; $accent = $declined ? '#c0392b' : '#206252'; ;padding:0;background-color:#e8ede9;font-family:Georgia,serif;"> SUPPORT  ·  TICKET UPDATE Syringa Park Ticket # Ticket Received Hi , Your ticket "" has been updated to . #. %" cellpadding="0" cellspacing="0" border="0" style="background-color:#f4f9f6;border:1px solid #dceee6;border-radius:12px;"> [ 'Category' => $ticket->category, 'Priority' => ucfirst($ticket->priority), 'Updated' => now()->format('d M Y \a\t H:i'), ]; ;border-bottom:;font-family:Arial,sans-serif;font-size:11px;color:#6a8f7c;text-transform:uppercase;letter-spacing:1px;width:34%;vertical-align:top;"> last ? 'none' : '1px solid #dceee6' }};font-family:Arial,sans-serif;font-size:14px;color:#333333;font-weight:bold;"> !-- FOOTER --> Syringa Park at Avianto Estate · Muldersdrift # submitted Source: resources/views/mail/tickets/submitted.blade.php Ticket Received SUPPORT  ·  TICKETING Syringa Park Ticket # Ticket Received Hi , Thanks — your request has been logged. %" cellpadding="0" cellspacing="0" border="0" style="background-color:#f4f9f6;border:1px solid #dceee6;border-radius:12px;"> [ 'Title' => $ticket->title, 'Category' => $ticket->category, 'Priority' => ucfirst($ticket->priority), 'Status' => $ticket->statusLabel(), 'Submitted' => $ticket->created_at->format('d M Y \a\t H:i'), ]; ;border-bottom:;font-family:Arial,sans-serif;font-size:11px;color:#6a8f7c;text-transform:uppercase;letter-spacing:1px;width:34%;vertical-align:top;"> last ? 'none' : '1px solid #dceee6' }};font-family:Arial,sans-serif;font-size:14px;color:#333333;font-weight:bold;"> %" cellpadding="0" cellspacing="0" border="0" style="margin-top:24px;"> Description Syringa Park at Avianto Estate · Muldersdrift # hours Source: resources/views/pages/hours.blade.php | Syringa Park Contact Details') ? Contact the Syringa Park team today to get details on events, our activities and more."> !-- Page Header --> Operating Hours Keen To Pay Us A Visit? Each operator at Syringa Park runs independently. The hours below reflect general trading times — please confirm directly with your chosen operator before visiting. Monday Trails 07:00 – 16:00 Padel & Padel Bar 14:00 – 22:00 Epic Karting 11:00 – 17:00 Rest of the park is closed Tuesday Trails 07:00 – 16:00 Padel & Padel Bar 14:00 – 22:00 Epic Karting 11:00 – 17:00 Rest of the park is closed Wednesday Trails 07:00 – 16:00 Padel & Padel Bar 06:00 – 22:00 Epic Karting 11:00 – 18:00 The Trout Farm 08:00 – 18:00 Pizza di Materina 12:00 – 19:00 Rest of the park is closed Thursday Trails 07:00 – 16:00 Padel & Padel Bar 06:00 – 22:00 Epic Karting 11:00 – 18:00 The Trout Farm 08:00 – 18:00 Rest of the park is closed Weekends & Public Holidays Whole Park Open – Saturday 09:00 – Sunday 09:00 – Public Holidays 09:00 – Wednesdays at Syringa Park We're excited to be growing our midweek offering. While not all operators are open on Wednesdays yet, the following activities and eateries are ready to welcome you. Book direct with each operator to confirm your visit. Contact Us Get Directions Epic Karting Activity 067 465 2070 074 143 2836 067 465 2070 www.birdiebay.co.za The Trout Farm Activity 082 856 2448 Walk, Run & Cycle Trails Dog Friendly 078 871 3943 Pizza di Materina Eatery 072 932 9681 076 302 4266 Please note: Not all eateries and activities at Syringa Park are open on Wednesdays. We recommend contacting your chosen operator directly before your visit to confirm availability and make a booking. Where To Find Us Find Us Portion 61, Driefontein Farm, Driefontein Rd, Muldersdrift, 1747 Get Directions [ '| Syringa Park', 'description' => 'View trading hours for Syringa Park at Avianto Estate, including Pavilion regular and special hours, general operator hours, and Wednesday midweek offerings.', 'url' => 'https://syringapark.co.za/operating-hours', 'mainEntity' => [ '#organization', 'image' => 'https://syringapark.co.za/assets/images/home/herobanner1.webp', 'telephone' => '+27100258956', 'email' => 'info[ '], 'geo' => [ '], 'openingHoursSpecification' => [ [ '['Monday', 'Tuesday', 'Wednesday', 'Thursday'], 'opens' => '08:00', 'closes' => '17:00', ], [ '], [ '['Saturday', 'Sunday'], 'opens' => '09:00', 'closes' => $weekendClose, ], ], 'sameAs' => [ 'https://www.facebook.com/syringapark/', 'https://www.instagram.com/syringapark/', 'https://www.tiktok.com/], ], 'breadcrumb' => [ '[ [ '], [ '], ], ], ]; +json">{!! json_encode($operatingHoursSchema, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) !!} # privacy Source: resources/views/pages/privacy.blade.php | Syringa Park') !-- Open Graph --> !-- Page Header --> Privacy Policy Your Privacy Matters Privacy Policy At Syringa Park, Avianto Estate , we are committed to protecting your personal information in accordance with the Protection of Personal Information Act (POPIA) of South Africa. This policy explains how we collect, use, store, and protect your information when you visit our website or interact with us. Section 1 Information We Collect We may collect the following personal information when you interact with us through our website, booking forms, or direct communication: Full name Email address Contact number Event details and preferences submitted via our booking enquiry form IP address and browser information collected automatically via cookies Any additional information you voluntarily provide in correspondence with us Section 2 How We Use Your Information We use your personal information only for the purposes for which it was collected, including: Responding to booking enquiries and event requests Communicating updates or information relevant to your enquiry Improving our website and services based on usage data Complying with legal obligations Sending promotional communications where you have opted in to receive them We will never sell, rent, or share your personal information with third parties for their own marketing purposes without your explicit consent. Section 3 Cookies & Website Tracking Our website uses cookies and similar tracking technologies to improve your browsing experience, analyse site traffic, and understand how visitors interact with our content. Cookies are small text files stored on your device. You can control or disable cookies through your browser settings at any time. Please note that disabling cookies may affect the functionality of certain parts of our website. We use Google reCAPTCHA on our forms to protect against spam and abuse. Its use is subject to Google's Privacy Policy and Terms of Service. Section 4 How We Store & Protect Your Information Your personal information is stored securely on our servers and is accessible only to authorised personnel. We implement appropriate technical and organisational measures to protect your data against unauthorised access, loss, or misuse. We retain your personal information only for as long as is necessary to fulfil the purposes for which it was collected, or as required by law. Once no longer needed, your data is securely deleted or anonymised. Section 5 Third-Party Services Our website may contain links to third-party websites or services, including social media platforms and independent operators such as MiFitness Kids Play Park , Epic Karting , and Padelnation . We are not responsible for the privacy practices of these third parties and encourage you to review their own privacy policies. We may use trusted third-party service providers to assist with email delivery, analytics, and website functionality. These providers are contractually obligated to handle your data securely and only for the purposes we specify. Section 6 Your Rights Under POPIA In accordance with the Protection of Personal Information Act, you have the right to: Request access to the personal information we hold about you Request correction of inaccurate or outdated information Request deletion of your personal information, subject to legal obligations Object to the processing of your personal information Lodge a complaint with the Information Regulator of South Africa To exercise any of these rights, please contact us at info!-- Section 7 --> Section 7 Updates to This Policy We may update this Privacy Policy from time to time to reflect changes in our practices or legal requirements. The latest version will always be available on this page. We encourage you to review it periodically. This policy was last updated in . For any questions or concerns regarding your privacy, please contact us at info!-- Have Questions Section --> We're Here to Help Have Questions? Get in touch with us and one of our friendly staff will assist you. Get In Touch # terms Source: resources/views/pages/terms.blade.php & Conditions | Syringa Park') & Conditions for Syringa Park at Avianto Estate, Muldersdrift. Understand our policies on venue hire, bookings, and park rules."> !-- Page Header --> Terms & Conditions Please Read Carefully Terms & Conditions By visiting, making a booking, or hiring a venue at Syringa Park, Avianto Estate , you agree to the following terms and conditions. These apply to all guests, event organisers, and third-party vendors operating on the premises. Section 1 General Entry & Park Rules Entry to Syringa Park is free of charge. However, right of admission is reserved at all times. Management reserves the right to refuse entry or remove any person from the premises without notice. All visitors are expected to conduct themselves in a respectful and responsible manner at all times. Any behaviour deemed disruptive, offensive, or dangerous to other guests or staff will result in immediate removal from the premises. The following are strictly prohibited on the premises: Weapons of any kind Pepper spray or mace Illegal substances Glass containers of any kind Pocket knives or multi-tools Fireworks Outside food or beverages Section 2 Venue Hire & Bookings All venue hire bookings are subject to availability and written confirmation from Syringa Park management. A booking is only confirmed once a signed agreement and the required deposit have been received. Deposits are non-refundable. Cancellations made less than 14 days before the event date may be subject to the full venue hire fee. Any changes to booking dates are subject to availability and must be requested in writing. The client is responsible for ensuring that all guests, vendors, and contractors comply with Syringa Park's rules and policies. Any damage to the venue or property caused by the client, their guests, or contractors will be for the client's account. All pricing excludes VAT and is subject to change without prior notice. Right of admission is reserved at all events. Section 3 Food & Beverage Policy Syringa Park is a fully licensed venue . To maintain the premium and exclusive atmosphere of the park, outside food or beverages are strictly not permitted on the premises. All guests are invited to enjoy our curated selection of on-site gourmet eateries. For private venue hire, catering arrangements must be agreed upon in advance with management. Only approved caterers and vendors may operate on the premises. Section 4 Dogs & Pets Policy Syringa Park is proud to be a dog-friendly lifestyle precinct . Pets are welcome on the premises provided that owners adhere to our Paws Policy at all times. All dogs must be kept on a leash at all times. Owners are responsible for their pets and must clean up after them. Any aggressive or disruptive animal may be asked to leave the premises. Syringa Park accepts no liability for any injury, loss, or damage caused by or to any animal on the premises. Section 5 Liability & Indemnity Syringa Park and Avianto Estate, its management, employees, and agents shall not be held liable for any loss, damage, theft, injury, or death suffered by any visitor, guest, vendor, or contractor on the premises, whether caused by negligence or otherwise. All visitors enter the premises at their own risk . Syringa Park reserves the right to use CCTV and security measures on the premises for the safety of all guests. Independent operators on the premises, including MiFitness Kids Play Park , Epic Karting , and Padelnation , operate under their own terms, conditions, and liability policies. Section 6 Photography & Media By entering Syringa Park, visitors consent to being photographed or filmed as part of general event or promotional media. Syringa Park reserves the right to use such material for marketing and promotional purposes without compensation. Commercial photography or videography on the premises requires prior written approval from management. Section 7 Amendments S # footer Source: resources/views/partials/footer.blade.php Nature. Lifestyle. Adventure. Stay in the Loop Be the first to know about launches and events! ;left:-9999px;opacity:0;height:0;width:0;"> Plan Your Visit Book a Venue Now Read our reviews on © Syringa Park. All rights reserved. Website & SEO by Mintt Terms & Conditions Privacy Policy # header Source: resources/views/partials/header.blade.php Home Activities Gourmet Eateries Our Story Operating Hours Book A Venue Upcoming Events Book A Venue Upcoming Events # index Source: resources/views/restaurants/index.blade.php & Restaurants | Syringa Park Muldersdrift') ? Visit Syringa Park for everything from burgers to Halaal options at our family-friendly venue in Muldersdrift."> !-- Page Header --> Gourmet Eateries Dine With Us Our Restaurants Syringa Park presents a variety of upscale takeaway eateries conveniently located on-site. Whether you choose to enjoy your meal on the go, relax within our diverse seating areas , dine at one of the outdoor tables , or unwind on the lush green lawns , the choice is entirely yours. Each space is designed to let you indulge in a delightful, relaxed dining experience surrounded by nature. [ 'day' => $t->day_of_week, 'open_time' => $t->open_time, 'close_time' => $t->close_time, 'is_closed' => $t->is_closed, ], ) ->toJson(); ? '1' : '0' }}"> !-- Status pill — JS targets [data-status-pill] --> is_open_now ? 'status-pill--open' : 'status-pill--closed' }}" data-status-pill> ; !-- Kindly Note --> Before You Visit Kindly Note Fully Licensed Venue To maintain the premium and exclusive atmosphere of Syringa Park, outside food or beverages are not permitted on-site. Gourmet Eateries On-Site Guests are invited to enjoy our carefully curated selection of high-end dining experiences to suit every taste. Halaal Options Available Dedicated halaal-certified options are available on-site to cater to all visitors and dietary requirements. ← replaces ::before --}} Menu Scroll to view all pages * ── SAST clock helpers ──────────────────────────────────────── */ function sastParts() { const now = new Date(); const fmt = new Intl.DateTimeFormat('en-ZA', { timeZone: 'Africa/Johannesburg', weekday: 'long', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false, }); const p = {}; fmt.formatToParts(now).forEach(part => { p[part.type] = part.value; }); return { timeStr: String(p.hour || '0').padStart(2, '0') + ':' + String(p.minute || '0').padStart(2, '0') + ':' + String(p.second || '0').padStart(2, '0'), dayStr: (p.weekday || '').toLowerCase(), }; } function fmt12(t) { if (!t) return ''; const [hh, mm] = t.split(':'); let h = parseInt(hh, 10); const ap = h >= 12 ? 'PM' : 'AM'; h = h % 12 || 12; return h + ':' + mm + '\u202f' + ap; } function parseSlots(card) { try { return JSON.parse(card.getAttribute('data-opening-times') || '[]'); } catch (e) { return []; } } function getStatus(card) { // If manually closed today, always return closed if (card.getAttribute('data-closed-today') === '1') { return { isOpen: false, todaySlots: [] }; } const { timeStr, dayStr } = sastParts(); const todaySlots = parseSlots(card).filter(s => s.day === dayStr && !s.is_closed); const openSlot = todaySlots.find(s => timeStr >= s.open_time && timeStr { const daySlots = slots.filter(s => s.day === day); if (!daySlots.length) return null; const closed = daySlots.every(s => s.is_closed); // If this is today and closed-today is toggled, show override message if (day === dayStr && card.getAttribute('data-closed-today') === '1') { return capitalise(day) + ': Closed today'; } if (closed) return capitalise(day) + ': Closed'; const times = daySlots .filter(s => !s.is_closed) .map(s => fmt12(s.open_time) + ' – ' + fmt12(s.close_time)) .join(', '); return capitalise(day) + ': ' + times; }).filter(Boolean).join('\n'); # bootstrap-4 Source: resources/views/vendor/pagination/bootstrap-4.blade.php ‹ ‹ › › # bootstrap-5 Source: resources/views/vendor/pagination/bootstrap-5.blade.php !! __('Showing') !!} {!! __('to') !!} {!! __('of') !!} {!! __('results') !!} ‹ ‹ › › # default Source: resources/views/vendor/pagination/default.blade.php ‹ ‹ › › # semantic-ui Source: resources/views/vendor/pagination/semantic-ui.blade.php # simple-bootstrap-4 Source: resources/views/vendor/pagination/simple-bootstrap-4.blade.php # simple-bootstrap-5 Source: resources/views/vendor/pagination/simple-bootstrap-5.blade.php !! __('Pagination Navigation') !!}"> !! __('pagination.previous') !!} !! __('pagination.previous') !!} !! __('pagination.next') !!} !! __('pagination.next') !!} # simple-default Source: resources/views/vendor/pagination/simple-default.blade.php # simple-tailwind Source: resources/views/vendor/pagination/simple-tailwind.blade.php !! __('pagination.previous') !!} !! __('pagination.previous') !!} !! __('pagination.next') !!} !! __('pagination.next') !!} # tailwind Source: resources/views/vendor/pagination/tailwind.blade.php