feat: complete dashboard widgets, fix tooltips, integrate chatbot, and update docs

This commit is contained in:
Satyam
2026-02-01 16:00:17 +05:30
parent cfc5c943e5
commit 719172372e
12 changed files with 1269 additions and 296 deletions
+39 -1
View File
@@ -39,7 +39,7 @@ GUIDELINES:
const Chatbot = () => {
const { user } = useAuth();
const { addMeeting, meetings } = useMockStore();
const { addMeeting, meetings, properties } = useMockStore();
const [isOpen, setIsOpen] = useState(false);
const [isMinimized, setIsMinimized] = useState(false);
const [input, setInput] = useState('');
@@ -127,6 +127,44 @@ ${scheduleSummary}`;
systemContext += `\n\nCURRENT USER CONTEXT: Guest (Not Logged In)`;
}
// --- INJECT DASHBOARD DATA ---
// Calculate real-time metrics to give the AI context about the territory
if (properties && properties.length > 0) {
const totalProps = properties.length;
// 1. Golden Leads
const goldenLeads = properties.filter(p =>
p.propertyData.yearBuilt < 2000 && p.propertyData.currentEstimatedMarketValue > 400000
);
const goldenLeadAddresses = goldenLeads.slice(0, 3).map(p => p.propertyData.propertyAddress).join(', ');
// 2. Hot Leads
const hotLeads = properties.filter(p => p.canvassingStatus === 'Hot Lead');
// 3. Roof Health
const roofCounts = properties.reduce((acc, p) => {
const c = p.propertyData.roofCondition || 'Unknown';
acc[c] = (acc[c] || 0) + 1;
return acc;
}, {});
// 4. Intent
const willingToSell = properties.filter(p => p.ownerData.willingToSellProperty).length;
const willingToRent = properties.filter(p => p.ownerData.willingToRentProperty).length;
// 5. Risk Index (simplified calculation for context)
const vulnerableCount = (roofCounts['Fair'] || 0) + (roofCounts['Needs Repair'] || 0);
const riskPercent = Math.round((vulnerableCount / totalProps) * 100);
systemContext += `\n\nLIVE DASHBOARD INTELLIGENCE (Use this to answer questions about leads and territory status):
- Total Properties in Territory: ${totalProps}
- GOLDEN LEADS (High Value + Older Homes): ${goldenLeads.length} found. (Top examples: ${goldenLeadAddresses}...)
- HOT LEADS (Priority for Canvassing): ${hotLeads.length} properties.
- OWNER INTENT: ${willingToSell} owners willing to sell, ${willingToRent} willing to rent.
- ROOF HEALTH BREAKDOWN: Excellent: ${roofCounts['Excellent'] || 0}, Good: ${roofCounts['Good'] || 0}, Fair: ${roofCounts['Fair'] || 0}, Needs Repair: ${roofCounts['Needs Repair'] || 0}.
- RISK ANALYSIS: ${riskPercent}% of territory has vulnerable roofs.`;
}
const chatCompletion = await groq.chat.completions.create({
messages: [
{ role: 'system', content: systemContext },