import React, { useState, useEffect } from 'react'; import { BarChart, LineChart, Line, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, PieChart, Pie, Cell } from 'recharts'; import { AlertCircle, Building, ChevronRight, Clock, Compass, Database, Filter, MessageSquare, Phone, PieChart as PieChartIcon, Search, Zap, Bell, Settings, User, LogOut, Plus, Edit, Trash2, Calendar, CheckCircle, XCircle, ArrowRight, Mail, FileText, BarChart2, Home, Briefcase, Users, Eye, Upload, Image, Save, ChevronDown, Menu, X } from 'lucide-react'; // Sample data for visualizations const opportunityData = [ { name: 'Retail', value: 42, color: '#2c7a7b' }, { name: 'Office', value: 65, color: '#3182ce' }, { name: 'Mixed', value: 23, color: '#805ad5' }, ]; const timeToLeaseData = [ { name: 'Jan', market: 75, aveny: 45 }, { name: 'Feb', market: 82, aveny: 48 }, { name: 'Mar', market: 78, aveny: 42 }, { name: 'Apr', market: 80, aveny: 40 }, { name: 'May', market: 85, aveny: 38 }, { name: 'Jun', market: 79, aveny: 35 }, ]; const tenantSignals = [ { id: 1, company: 'NordicDesign Co', signal: 'Hiring burst: 8 new positions', location: 'Oslo Central', size: '150-200 sqm', urgency: 'High', intentScore: 92, logo: 'https://via.placeholder.com/40/2c7a7b/FFFFFF?text=ND', industry: 'Design & Architecture', founded: '2015', employees: '25-50', website: 'nordicdesign.co', description: 'Innovative design studio specializing in Nordic minimalist architecture and interior design.', contactName: 'Erik Larsen', contactTitle: 'Operations Director', contactEmail: 'erik@nordicdesign.co', contactPhone: '+47 555 1234', notes: 'Currently in a smaller space in west Oslo. Looking to expand due to recent client acquisitions.', status: 'New Lead', lastContact: '2023-06-15', }, { id: 2, company: 'TechVentures AS', signal: 'Series B funding: €5.2M', location: 'Bergen Innovation District', size: '300-450 sqm', urgency: 'Medium', intentScore: 78, logo: 'https://via.placeholder.com/40/3182ce/FFFFFF?text=TV', industry: 'Software Development', founded: '2018', employees: '50-100', website: 'techventures.no', description: 'Fast-growing tech company developing enterprise software solutions.', contactName: 'Maria Olsen', contactTitle: 'Facilities Manager', contactEmail: 'maria@techventures.no', contactPhone: '+47 555 5678', notes: 'Currently spread across two smaller offices. Looking to consolidate after recent funding.', status: 'In Discussion', lastContact: '2023-06-10', }, { id: 3, company: 'Sustainable Foods', signal: 'New distribution center announced', location: 'Stavanger South', size: '500-700 sqm', urgency: 'Medium', intentScore: 81, logo: 'https://via.placeholder.com/40/805ad5/FFFFFF?text=SF', industry: 'Food & Beverage', founded: '2016', employees: '100-250', website: 'sustainablefoods.no', description: 'Organic food producer and distributor focused on sustainable practices.', contactName: 'Jonas Berg', contactTitle: 'Expansion Director', contactEmail: 'jonas@sustainablefoods.no', contactPhone: '+47 555 9012', notes: 'Looking for additional office space near their new distribution center.', status: 'New Lead', lastContact: '2023-06-12', }, { id: 4, company: 'FinTech Solutions', signal: 'Office closure at current location', location: 'Oslo Business Park', size: '200-250 sqm', urgency: 'Very High', intentScore: 95, logo: 'https://via.placeholder.com/40/dd6b20/FFFFFF?text=FS', industry: 'Financial Technology', founded: '2017', employees: '25-50', website: 'fintechsolutions.no', description: 'Financial technology company specializing in payment solutions.', contactName: 'Sofie Hansen', contactTitle: 'CEO', contactEmail: 'sofie@fintechsolutions.no', contactPhone: '+47 555 3456', notes: 'Current lease ending in 60 days. Need to relocate quickly.', status: 'Viewing Scheduled', lastContact: '2023-06-14', }, { id: 5, company: 'Green Energy Innovations', signal: 'Expanding renewable energy division', location: 'Trondheim Tech Hub', size: '350-400 sqm', urgency: 'Medium', intentScore: 76, logo: 'https://via.placeholder.com/40/38a169/FFFFFF?text=GE', industry: 'Renewable Energy', founded: '2014', employees: '50-100', website: 'greenenergy.no', description: 'Developing innovative solutions for renewable energy storage and distribution.', contactName: 'Anders Johansen', contactTitle: 'Facilities Director', contactEmail: 'anders@greenenergy.no', contactPhone: '+47 555 7890', notes: 'Looking for modern office space with lab facilities.', status: 'New Lead', lastContact: '2023-06-08', }, { id: 6, company: 'Nordic Health Tech', signal: 'Merger with MediScan Technologies', location: 'Oslo Medical District', size: '400-500 sqm', urgency: 'High', intentScore: 88, logo: 'https://via.placeholder.com/40/e53e3e/FFFFFF?text=NH', industry: 'Healthcare Technology', founded: '2015', employees: '100-250', website: 'nordichealthtech.no', description: 'Developing medical devices and healthcare software solutions.', contactName: 'Ingrid Larsen', contactTitle: 'COO', contactEmail: 'ingrid@nordichealthtech.no', contactPhone: '+47 555 2345', notes: 'Need larger space after merger. Requires specialized infrastructure for medical device testing.', status: 'In Discussion', lastContact: '2023-06-13', }, ]; const properties = [ { id: 1, name: 'Oslo Creative Hub', size: '160 sqm', type: 'Creative Studio', location: 'Central Oslo', availability: 'Immediate', image: 'https://images.unsplash.com/photo-1497366754035-f200968a6e72?ixlib=rb-4.0.3&auto=format&fit=crop&w=500&q=80', description: 'Modern creative studio in the heart of Oslo. Open floor plan with abundant natural light.', features: ['Open floor plan', 'High ceilings', 'Natural light', 'Kitchenette', 'Meeting room'], price: '28,000 NOK/month', address: 'Storgata 25, 0184 Oslo', floorPlan: 'https://via.placeholder.com/800x600?text=Floor+Plan', virtualTour: 'https://example.com/virtual-tour', energyRating: 'B', yearBuilt: '2015', lastRenovated: '2021', matchingTenants: [1, 4], status: 'Available', }, { id: 2, name: 'Bergen Waterfront', size: '320 sqm', type: 'Office Space', location: 'Bergen Harbor', availability: '30 days', image: 'https://images.unsplash.com/photo-1497215842964-222b430dc094?ixlib=rb-4.0.3&auto=format&fit=crop&w=500&q=80', description: 'Premium office space with stunning harbor views. Modern facilities and excellent location.', features: ['Harbor views', 'Private offices', 'Conference room', 'Reception area', 'Parking'], price: '52,000 NOK/month', address: 'Strandgaten 15, 5013 Bergen', floorPlan: 'https://via.placeholder.com/800x600?text=Floor+Plan', virtualTour: 'https://example.com/virtual-tour', energyRating: 'A', yearBuilt: '2018', lastRenovated: '2022', matchingTenants: [2, 5], status: 'Available', }, { id: 3, name: 'Stavanger Tech Park', size: '450 sqm', type: 'Mixed Use', location: 'Stavanger Innovation District', availability: '60 days', image: 'https://images.unsplash.com/photo-1504384308090-c894fdcc538d?ixlib=rb-4.0.3&auto=format&fit=crop&w=500&q=80', description: 'Versatile mixed-use space in Stavanger\'s innovation district. Suitable for offices, showroom, and light production.', features: ['Flexible layout', 'Loading dock', 'Showroom space', 'High-speed internet', 'Security system'], price: '68,000 NOK/month', address: 'Innovasjonsveien 10, 4021 Stavanger', floorPlan: 'https://via.placeholder.com/800x600?text=Floor+Plan', virtualTour: 'https://example.com/virtual-tour', energyRating: 'B', yearBuilt: '2016', lastRenovated: '2020', matchingTenants: [3, 6], status: 'Available', }, { id: 4, name: 'Trondheim Innovation Center', size: '280 sqm', type: 'Office Space', location: 'Trondheim Tech Hub', availability: '45 days', image: 'https://images.unsplash.com/photo-1556761175-5973dc0f32e7?ixlib=rb-4.0.3&auto=format&fit=crop&w=500&q=80', description: 'Modern office space designed for tech companies. Collaborative environment with premium amenities.', features: ['Open workspace', 'Meeting pods', 'Relaxation area', 'Bike storage', 'Shower facilities'], price: '45,000 NOK/month', address: 'Teknologiveien 8, 7031 Trondheim', floorPlan: 'https://via.placeholder.com/800x600?text=Floor+Plan', virtualTour: 'https://example.com/virtual-tour', energyRating: 'A', yearBuilt: '2019', lastRenovated: '2022', matchingTenants: [5], status: 'Available', }, { id: 5, name: 'Oslo Medical Office', size: '210 sqm', type: 'Specialized Office', location: 'Oslo Medical District', availability: 'Immediate', image: 'https://images.unsplash.com/photo-1587527901949-ab0341697c1e?ixlib=rb-4.0.3&auto=format&fit=crop&w=500&q=80', description: 'Purpose-built medical office space with specialized infrastructure for healthcare companies.', features: ['Medical-grade facilities', 'Private consultation rooms', 'Waiting area', 'Accessible entrance', 'Specialized ventilation'], price: '38,000 NOK/month', address: 'Helseveien 12, 0372 Oslo', floorPlan: 'https://via.placeholder.com/800x600?text=Floor+Plan', virtualTour: 'https://example.com/virtual-tour', energyRating: 'B', yearBuilt: '2017', lastRenovated: '2021', matchingTenants: [6], status: 'Available', }, ]; const notifications = [ { id: 1, type: 'signal', title: 'New High-Intent Signal', message: 'FinTech Solutions shows 95% intent score and urgent need for space', time: '2 hours ago', read: false, }, { id: 2, type: 'message', title: 'Message from TechVentures AS', message: 'Maria Olsen: "Thanks for the property suggestions. Can we schedule a viewing?"', time: '5 hours ago', read: false, }, { id: 3, type: 'property', title: 'Property Match', message: 'Oslo Creative Hub matches with 2 new tenant signals', time: '1 day ago', read: true, }, { id: 4, type: 'analytics', title: 'Analytics Update', message: 'Your average time-to-lease decreased by 12% this month', time: '2 days ago', read: true, }, ]; const messages = [ { id: 1, tenantId: 1, company: 'NordicDesign Co', contact: 'Erik Larsen', logo: 'https://via.placeholder.com/40/2c7a7b/FFFFFF?text=ND', messages: [ { id: 1, sender: 'system', content: 'SmartAutoReach™ message sent to Erik Larsen', timestamp: '2023-06-15 09:30', }, { id: 2, sender: 'outbound', content: 'Hi Erik, we noticed that NordicDesign Co is hiring for 8 new positions in Oslo. We have a 160 sqm creative studio available in Central Oslo that might be perfect for your expanding team. Would you be interested in a viewing this week?', timestamp: '2023-06-15 09:30', }, { id: 3, sender: 'inbound', content: 'Thanks for reaching out. We are indeed looking for a larger space. Could you send me more details about the studio?', timestamp: '2023-06-15 10:45', }, { id: 4, sender: 'outbound', content: 'Great to hear from you, Erik! I've attached the details for Oslo Creative Hub. It features an open floor plan, high ceilings, and abundant natural light - perfect for a design studio. The space is available immediately. Would you be available for a viewing on Thursday or Friday this week?', timestamp: '2023-06-15 11:15', }, ], status: 'Active', lastActivity: '2023-06-15 11:15', }, { id: 2, tenantId: 2, company: 'TechVentures AS', contact: 'Maria Olsen', logo: 'https://via.placeholder.com/40/3182ce/FFFFFF?text=TV', messages: [ { id: 1, sender: 'system', content: 'SmartAutoReach™ message sent to Maria Olsen', timestamp: '2023-06-10 14:20', }, { id: 2, sender: 'outbound', content: 'Hi Maria, congratulations on TechVentures' recent Series B funding! As you plan for growth, we have a 320 sqm office space in Bergen Harbor that could be perfect for your team. Would you like to learn more?', timestamp: '2023-06-10 14:20', }, { id: 3, sender: 'inbound', content: 'Thank you! We are indeed looking to consolidate our offices after the funding. Could you send me the details of the space?', timestamp: '2023-06-10 16:05', }, { id: 4, sender: 'outbound', content: 'Of course, Maria. I've sent the details for Bergen Waterfront. It's a premium office space with harbor views, private offices, and modern facilities. Available in 30 days. Would you be interested in a viewing next week?', timestamp: '2023-06-11 09:30', }, { id: 5, sender: 'inbound', content: 'Thanks for the property suggestions. Can we schedule a viewing for next Tuesday?', timestamp: '2023-06-15 08:45', }, ], status: 'Active', lastActivity: '2023-06-15 08:45', }, ]; const viewings = [ { id: 1, propertyId: 2, property: 'Bergen Waterfront', tenantId: 2, tenant: 'TechVentures AS', contact: 'Maria Olsen', date: '2023-06-20', time: '10:00', status: 'Confirmed', notes: 'Maria is particularly interested in the harbor views and conference facilities.', }, { id: 2, propertyId: 1, property: 'Oslo Creative Hub', tenantId: 1, tenant: 'NordicDesign Co', contact: 'Erik Larsen', date: '2023-06-22', time: '14:00', status: 'Pending', notes: 'Erik requested information about potential modifications to the space.', }, { id: 3, propertyId: 5, property: 'Oslo Medical Office', tenantId: 6, tenant: 'Nordic Health Tech', contact: 'Ingrid Larsen', date: '2023-06-21', time: '11:30', status: 'Confirmed', notes: 'Ingrid needs to verify if the specialized infrastructure meets their requirements.', }, ]; export default function AvenyAI() { const [activeTab, setActiveTab] = useState('dashboard'); const [selectedSignal, setSelectedSignal] = useState(null); const [showModal, setShowModal] = useState(false); const [modalType, setModalType] = useState(null); const [selectedProperty, setSelectedProperty] = useState(null); const [selectedMessage, setSelectedMessage] = useState(null); const [newMessage, setNewMessage] = useState(''); const [showNotifications, setShowNotifications] = useState(false); const [unreadNotifications, setUnreadNotifications] = useState(notifications.filter(n => !n.read).length); const [showUserMenu, setShowUserMenu] = useState(false); const [showMobileMenu, setShowMobileMenu] = useState(false); const [selectedViewing, setSelectedViewing] = useState(null); const [newProperty, setNewProperty] = useState({ name: '', size: '', type: '', location: '', availability: '', price: '', description: '', }); const [filterStatus, setFilterStatus] = useState('All'); const [searchTerm, setSearchTerm] = useState(''); const handleSignalClick = (signal) => { setSelectedSignal(signal); setModalType('signal'); setShowModal(true); }; const handlePropertyClick = (property) => { setSelectedProperty(property); setModalType('property'); setShowModal(true); }; const handleMessageClick = (message) => { setSelectedMessage(message); setModalType('message'); setShowModal(true); }; const handleViewingClick = (viewing) => { setSelectedViewing(viewing); setModalType('viewing'); setShowModal(true); }; const handleNewPropertySubmit = (e) => { e.preventDefault(); // In a real app, this would send the data to the backend console.log('New property submitted:', newProperty); setModalType(null); setShowModal(false); // Reset form setNewProperty({ name: '', size: '', type: '', location: '', availability: '', price: '', description: '', }); }; const handleSendMessage = () => { if (!newMessage.trim()) return; // In a real app, this would send the message to the backend console.log('Message sent:', newMessage); // For demo purposes, we'll just add it to the UI if (selectedMessage) { const updatedMessages = [...messages]; const messageIndex = updatedMessages.findIndex(m => m.id === selectedMessage.id); if (messageIndex !== -1) { updatedMessages[messageIndex].messages.push({ id: updatedMessages[messageIndex].messages.length + 1, sender: 'outbound', content: newMessage, timestamp: new Date().toLocaleString(), }); updatedMessages[messageIndex].lastActivity = new Date().toLocaleString(); setSelectedMessage(updatedMessages[messageIndex]); } } setNewMessage(''); }; const markAllNotificationsAsRead = () => { // In a real app, this would update the backend setUnreadNotifications(0); setShowNotifications(false); }; const filteredTenantSignals = tenantSignals.filter(signal => { if (filterStatus !== 'All' && signal.status !== filterStatus) { return false; } if (searchTerm) { const searchLower = searchTerm.toLowerCase(); return ( signal.company.toLowerCase().includes(searchLower) || signal.location.toLowerCase().includes(searchLower) || signal.signal.toLowerCase().includes(searchLower) || signal.industry.toLowerCase().includes(searchLower) ); } return true; }); const filteredProperties = properties.filter(property => { if (searchTerm) { const searchLower = searchTerm.toLowerCase(); return ( property.name.toLowerCase().includes(searchLower) || property.location.toLowerCase().includes(searchLower) || property.type.toLowerCase().includes(searchLower) || property.description.toLowerCase().includes(searchLower) ); } return true; }); return (
{/* Navigation */} {/* Hero Section - Only show on dashboard */} {activeTab === 'dashboard' && (

Never miss a leasing opportunity again

Aveny.ai helps CRE landlords fill small commercial spaces faster by leveraging real-time business signals, smart tenant profiling, and automated outreach.

)} {/* Main Content */}
{/* Dashboard View */} {activeTab === 'dashboard' && (

Deal Intelligence Dashboard

Active Signals

Live
42

Companies showing interest in your market

Time to Lease

-45% vs market
38 days

Average time to lease with Aveny.ai

Match Rate

High
78%

Of signals convert to viewings

Latest Opportunities

    {tenantSignals.slice(0, 3).map((signal) => (
  • handleSignalClick(signal)} className="cursor-pointer hover:bg-gray-50">
    {signal.company}
    {signal.company}
    {signal.location} • {signal.size}
    Intent Score
    {signal.intentScore}%
    {signal.urgency}
    {signal.signal}
  • ))}

Upcoming Viewings

    {viewings.map((viewing) => (
  • handleViewingClick(viewing)} className="cursor-pointer hover:bg-gray-50">
    {viewing.property}
    {viewing.tenant} • {viewing.date} at {viewing.time}
    {viewing.status}
  • ))}

Time to Lease Comparison

Opportunity Distribution

)} {/* TenantSignal View */} {activeTab === 'signals' && (

TenantSignal™ Engine

setSearchTerm(e.target.value)} />

Active Tenant Signals

Companies showing interest in commercial spaces based on real-time signals.

Showing {filteredTenantSignals.length} of {tenantSignals.length} signals
    {filteredTenantSignals.map((signal) => (
  • handleSignalClick(signal)} className="cursor-pointer hover:bg-gray-50">
    {signal.company}
    {signal.company}
    {signal.location} • {signal.size}
    Intent Score
    {signal.intentScore}%
    {signal.urgency}
    Signal: {signal.signal}
    {signal.industry} {signal.employees} employees Status: {signal.status}
  • ))}
{filteredTenantSignals.length === 0 && (

No signals match your current filters.

)}
)} {/* Properties View */} {activeTab === 'properties' && (

Your Properties

setSearchTerm(e.target.value)} />
{filteredProperties.map((property) => (
{property.name}

{property.name}

{property.size} • {property.type}
{property.location}
Available: {property.availability}
Price: {property.price}
{property.matchingTenants.length} matching signals
))}
{filteredProperties.length === 0 && (

No properties found

No properties match your current search criteria.

{searchTerm && ( )}
)}
)} {/* Messages View */} {activeTab === 'messages' && (

Messages

Conversations

Your active conversations with potential tenants.

    {messages.map((message) => (
  • handleMessageClick(message)} className="cursor-pointer hover:bg-gray-50">
    {message.company}
    {message.company}
    {message.contact}
    {new Date(message.lastActivity).toLocaleDateString()}
    {message.status}

    {message.messages[message.messages.length - 1].content}

  • ))}
)} {/* Viewings View */} {activeTab === 'viewings' && (

Property Viewings

Upcoming Viewings

Scheduled property viewings with potential tenants.

    {viewings.map((viewing) => (
  • handleViewingClick(viewing)} className="cursor-pointer hover:bg-gray-50">
    {viewing.property}
    {viewing.date} at {viewing.time}
    Tenant: {viewing.tenant} ({viewing.contact})
    {viewing.status}
    {viewing.notes && (
    Notes: {viewing.notes}
    )}
  • ))}

Viewing Calendar

Calendar view would be implemented here, showing all scheduled viewings in a monthly/weekly format.

)} {/* Analytics View */} {activeTab === 'analytics' && (

Deal Intelligence Analytics

Insights to optimize your leasing strategy and performance.

Average Time to Lease

-45% vs market
38 days

Down from 42 days last month

Signal to Lease Rate

+5% vs last month
28%

Of signals convert to signed leases

Avg. Response Time

-15% vs last month
2.4 hrs

Average time to respond to signals

Time to Lease Comparison

Your properties lease 45% faster than market average.

Signal to Lease Conversion

28% of signals convert to signed leases.

Top Performing Outreach Sequences

Sequence Name Open Rate Response Rate Viewing Rate Conversion
Growth Signal Sequence 92% 68% 42% 32%
Funding Announcement 88% 62% 38% 28%
Office Closure Alert 95% 72% 48% 35%

Property Performance

{properties.map((property) => ( ))}
Property Signals Viewings Avg. Time to Lease Status
{property.name} {property.matchingTenants.length} {viewings.filter(v => v.propertyId === property.id).length} {Math.floor(Math.random() * 20) + 30} days {property.status}
)} {/* Profile View */} {activeTab === 'profile' && (

Your Profile

Manage your account information and preferences.

Personal Information

Your personal details and contact information.

Full name
John Doe
Job title
Leasing Manager
Email address
john@example.com
Phone number
+47 555 1234
Company
Nordic Properties AS

Account Settings

Manage your account preferences and security settings.

Password
Two-factor authentication
Enabled
Notification preferences
API access
)} {/* Settings View */} {activeTab === 'settings' && (

Settings

Configure your Aveny.ai platform settings.

TenantSignal™ Settings

Configure how the TenantSignal™ engine works for your properties.

Signal Sensitivity

Adjust how sensitive the system is to detecting potential tenant signals.

Signal Types

Select which types of signals you want to monitor.

Geographic Focus

Define the geographic areas to monitor for signals.

SmartAutoReach™ Settings

Configure automated outreach settings and templates.

Automated Outreach

Enable or disable automated outreach to potential tenants.

Message Templates

Customize the templates used for automated outreach.

Follow-up Settings

Configure automated follow-up messages.

)}
{/* Modals */} {showModal && (
{/* Signal Detail Modal */} {modalType === 'signal' && selectedSignal && (
{selectedSignal.company}

{selectedSignal.location} • {selectedSignal.size}

Signal: {selectedSignal.signal}

Industry: {selectedSignal.industry}
Founded: {selectedSignal.founded}
Employees: {selectedSignal.employees}

Contact Information

Name: {selectedSignal.contactName}
Title: {selectedSignal.contactTitle}

Recommended Properties

    {properties.filter(p => p.matchingTenants.includes(selectedSignal.id)).map((property) => (
  • {property.name}

    {property.name}

    {property.size} • {property.type}

  • ))}

SmartAutoReach™ Suggestion

Hi {selectedSignal.contactName.split(' ')[0]}, we noticed that {selectedSignal.company} is {selectedSignal.signal.toLowerCase()}. We have a {properties.find(p => p.matchingTenants.includes(selectedSignal.id))?.size} {properties.find(p => p.matchingTenants.includes(selectedSignal.id))?.type.toLowerCase()} available in {properties.find(p => p.matchingTenants.includes(selectedSignal.id))?.location} that might be perfect for your needs. Would you be interested in a viewing this week?
{selectedSignal.notes && (

Notes

{selectedSignal.notes}
)}
)} {/* Property Detail Modal */} {modalType === 'property' && selectedProperty && (
{selectedProperty.name}
Size: {selectedProperty.size}
Type: {selectedProperty.type}
Location: {selectedProperty.location}
Availability: {selectedProperty.availability}
Price: {selectedProperty.price}
Address: {selectedProperty.address}

Description

{selectedProperty.description}

Features

    {selectedProperty.features.map((feature, index) => (
  • {feature}
  • ))}

Matching Tenants

{selectedProperty.matchingTenants.length > 0 ? (
    {selectedProperty.matchingTenants.map((tenantId) => { const tenant = tenantSignals.find(t => t.id === tenantId); return tenant ? (
  • {tenant.company}

    {tenant.company}

    {tenant.intentScore}% intent

  • ) : null; })}
) : (

No matching tenants yet.

)}

Property Details

Energy Rating: {selectedProperty.energyRating}
Year Built: {selectedProperty.yearBuilt}
Last Renovated: {selectedProperty.lastRenovated}

Additional Resources

)} {/* Message Detail Modal */} {modalType === 'message' && selectedMessage && (
{selectedMessage.company}

{selectedMessage.company}

{selectedMessage.contact}

{selectedMessage.status}
{selectedMessage.messages.map((msg) => (
{msg.sender === 'system' && (
{msg.content}
)} {msg.sender === 'outbound' && (

{msg.content}

{new Date(msg.timestamp).toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'})}

)} {msg.sender === 'inbound' && (

{msg.content}

{new Date(msg.timestamp).toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'})}

)}
))}
setNewMessage(e.target.value)} onKeyPress={(e) => e.key === 'Enter' && handleSendMessage()} />
{/* Hero Section - Only show on dashboard */} {activeTab === 'dashboard' && (

Never miss a leasing opportunity again

Aveny.ai helps CRE landlords fill small commercial spaces faster by leveraging real-time business signals, smart tenant profiling, and automated outreach.

)} {/* Main Content */}
{/* Dashboard View */} {activeTab === 'dashboard' && (

Deal Intelligence Dashboard

Active Signals

Live
42

Companies showing interest in your market

Time to Lease

-45% vs market
38 days

Average time to lease with Aveny.ai

Match Rate

High
78%

Of signals convert to viewings

Latest Opportunities

    {tenantSignals.slice(0, 3).map((signal) => (
  • handleSignalClick(signal)} className="cursor-pointer hover:bg-gray-50">
    {signal.company}
    {signal.company}
    {signal.location} • {signal.size}
    Intent Score
    {signal.intentScore}%
    {signal.urgency}
    {signal.signal}
  • ))}

Time to Lease Comparison

Opportunity Distribution

)} {/* TenantSignal View */} {activeTab === 'signals' && (

TenantSignal™ Engine

Active Tenant Signals

Companies showing interest in commercial spaces based on real-time signals.

    {tenantSignals.map((signal) => (
  • handleSignalClick(signal)} className="cursor-pointer hover:bg-gray-50">
    {signal.company}
    {signal.company}
    {signal.location} • {signal.size}
    Intent Score
    {signal.intentScore}%
    {signal.urgency}
    Signal: {signal.signal}
  • ))}
)} {/* Properties View */} {activeTab === 'properties' && (

Your Properties

{properties.map((property) => (
{property.name}

{property.name}

{property.size} • {property.type}
{property.location}
Available: {property.availability}
5 matching signals
))}
)} {/* Analytics View */} {activeTab === 'analytics' && (

Deal Intelligence Analytics

Insights to optimize your leasing strategy and performance.

Time to Lease Comparison

Your properties lease 45% faster than market average.

Signal to Lease Conversion

28% of signals convert to signed leases.

Top Performing Outreach Sequences

Sequence Name Open Rate Response Rate Viewing Rate Conversion
Growth Signal Sequence 92% 68% 42% 32%
Funding Announcement 88% 62% 38% 28%
Office Closure Alert 95% 72% 48% 35%
)}
{/* Signal Detail Modal */} {showModal && selectedSignal && (
{selectedSignal.company}

{selectedSignal.location} • {selectedSignal.size}

Signal: {selectedSignal.signal}

Recommended Properties

    {properties.slice(0, 2).map((property) => (
  • {property.name}

    {property.name}

    {property.size} • {property.type}

  • ))}

SmartAutoReach™ Suggestion

Hi there, we noticed that {selectedSignal.company} is {selectedSignal.signal.toLowerCase()}. We have a {properties[0].size} {properties[0].type.toLowerCase()} available in {properties[0].location} that might be perfect for your needs. Would you be interested in a viewing this week?
)} {/* Footer */}
); }