The virtual tours feature allows properties to showcase immersive 3D tours and enables users to schedule live virtual tours with agents.
- Navigate to any property detail page
- If the property has a virtual tour, you'll see a "View Virtual Tour" button
- Click the button to display the embedded 3D tour
- Explore the property using your mouse/touch controls
- Compatible with VR headsets for supported providers
- On properties with live tours enabled, click "Schedule Live Tour"
- Select your preferred date and time
- Add any questions or areas of interest in the notes field
- Submit the form to schedule your appointment
- You'll receive a confirmation and the agent will contact you
- Navigate to Properties → Edit Property
- Find the "Virtual Tour URL" field
- Paste the tour URL from your provider (e.g., Matterport, Kuula)
- Select the provider from the dropdown (optional)
- Toggle "Live Virtual Tours Available" if you want to offer scheduled tours
- Save the property
- Matterport -
https://my.matterport.com/show/?m=XXXXX - Kuula -
https://kuula.co/share/XXXXX - 3D Vista -
https://www.3dvista.com/tour/XXXXX - Seekbeak -
https://seekbeak.com/v/XXXXX - Custom - Any URL with iframe support
If auto-generation doesn't work for your provider:
- Get the embed code from your virtual tour provider
- Paste it in the "Virtual Tour Embed Code" field
- Save the property
Run the database seeder to create sample properties with virtual tours:
php artisan db:seed --class=PropertySeederThis will create properties where:
- ~30% of regular properties have virtual tours
- ~50% of HMO properties have virtual tours
- ~60-70% of properties with tours offer live scheduling
// Check if property has a virtual tour
if ($property->hasVirtualTour()) {
// Display virtual tour button
}
// Get the embed HTML
$embedHtml = $property->getVirtualTourEmbed();
// Check if live tours are available
if ($property->live_tour_available) {
// Show schedule button
}// In PropertyDetail component
wire:click="toggleVirtualTour" // Toggle tour display
wire:click="openScheduleLiveTourModal" // Open scheduling modal
wire:submit.prevent="scheduleLiveTour" // Submit scheduling form-- Properties table
virtual_tour_url VARCHAR(255) NULL -- URL to the tour
virtual_tour_provider VARCHAR(255) NULL -- Provider name
virtual_tour_embed_code TEXT NULL -- Custom embed code
live_tour_available BOOLEAN DEFAULT FALSE -- Enable live tours# Run all virtual tour tests
php artisan test --filter VirtualTour
# Run specific test file
php artisan test tests/Feature/VirtualTourTest.php
php artisan test tests/Unit/PropertyTest.php --filter virtualGET /api/properties/{id}/virtual-tour
POST /api/properties/{id}/schedule-live-tour
GET /api/properties/{id}/appointments
- Check that the URL is valid and accessible
- Verify the provider allows iframe embedding
- Check browser console for any errors
- Try using custom embed code instead
- Verify
live_tour_availableis set totrue - Check that the property has a virtual tour URL
- Ensure user is authenticated
All URLs are automatically sanitized using htmlspecialchars() with ENT_QUOTES to prevent XSS attacks.
- Use High-Quality Tours: Ensure tours are well-lit and comprehensive
- Test Before Publishing: Preview tours in the admin panel
- Keep URLs Updated: Monitor for broken or expired tour links
- Respond Promptly: Answer live tour requests within 24 hours
- Mobile Optimization: Test tours on mobile devices
- Video call integration (Zoom/Teams)
- Tour analytics and heatmaps
- Multi-property tour packages
- VR headset optimization
- Automated tour reminders
- Tour recording and replay
Version: 1.0.0
Last Updated: February 16, 2026
Status: Production Ready ✅