Welcome to WordPress! This is your first post. Edit or delete it to take the first step in your blogging journey.
-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Ada County Real Estate Market: October 2025</title> <script src="https://cdn.tailwindcss.com"></script> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700;900&display=swap" rel="stylesheet"> <style> body { font-family: 'Lato', sans-serif; background-color: #f4f7f7; margin:0; } .chart-container { position: relative; width: 100%; max-width: 600px; margin: 0 auto; height: 300px; max-height: 400px; } @media (min-width: 768px) { .chart-container { height: 350px; } } .stat-card { background-color: white; border-radius: 0.75rem; padding: 1.5rem; text-align: center; box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); } .stat-number { font-size: 3rem; font-weight: 900; color: #5F909C; line-height: 1; } .stat-label { margin-top: 0.5rem; color: #4A5568; font-weight: 700; } .gemini-button { background-color: #5F909C; color: white; padding: 0.75rem 1.5rem; border-radius: 0.5rem; font-weight: 700; transition: background-color 0.3s; } .gemini-button:hover { background-color: #4A7A85; } .gemini-button:disabled { background-color: #99C3C3; cursor: not-allowed; } .gemini-output { background-color: #f4f7f7; border-left: 4px solid #5F909C; padding: 1rem; margin-top: 1rem; min-height: 100px; border-radius: 0.25rem; } .loader { border: 4px solid #D2E7E7; border-top: 4px solid #5F909C; border-radius: 50%; width: 40px; height: 40px; animation: spin 1s linear infinite; margin: 20px auto; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } </style> </head> <body> <header class="bg-[#5F909C] text-white text-center py-12 px-4"> <h1 class="text-4xl md:text-5xl font-bold">Ada County Real Estate Market</h1> <p class="text-xl mt-2 text-[#D2E7E7]">An October 2025 Snapshot</p> </header> <main class="container mx-auto p-4 md:p-8"> <!-- Market Overview --> <section class="mb-12 text-center"> <h2 class="text-3xl font-bold text-[#5F909C] mb-2">The Big Picture: A Resilient Market</h2> <p class="text-lg text-gray-600 max-w-3xl mx-auto mb-8">The Ada County housing market remains resilient, showing modest price gains and a quicker sales pace as we enter the fall season. Despite higher borrowing costs, buyer demand is keeping pace with supply.</p> <div class="grid grid-cols-1 md:grid-cols-3 gap-6"> <div class="stat-card"><div class="stat-number">$558K</div><div class="stat-label">Median Sale Price</div></div> <div class="stat-card"><div class="stat-number">26</div><div class="stat-label">Average Days on Market</div></div> <div class="stat-card"><div class="stat-number">2.9</div><div class="stat-label">Months of Inventory</div></div> </div> </section> <!-- AI Insights --> <section class="mb-12 bg-white p-6 rounded-lg shadow-md text-center"> <h2 class="text-3xl font-bold text-[#5F909C] mb-4">✨ AI Market Insights</h2> <p class="text-lg text-gray-600 max-w-3xl mx-auto mb-6">Get a personalized summary of what the current market data means for you, powered by the Gemini API.</p> <div class="flex justify-center gap-4 mb-4"> <button id="buyerSummaryBtn" class="gemini-button">Generate Buyer Summary</button> <button id="sellerSummaryBtn" class="gemini-button">Generate Seller Summary</button> </div> <div id="summaryOutput" class="gemini-output"><p class="text-gray-500">Your AI-generated summary will appear here...</p></div> </section> <!-- Charts Example --> <section class="mb-12 grid grid-cols-1 md:grid-cols-2 gap-8"> <div class="bg-white p-6 rounded-lg shadow-md"> <h3 class="text-xl font-bold text-center mb-4 text-[#5F909C]">Sale Price vs. List Price</h3> <div class="chart-container h-64"><canvas id="salesRatioChart"></canvas></div> </div> <div class="bg-white p-6 rounded-lg shadow-md"> <h3 class="text-xl font-bold text-center mb-4 text-[#5F909C]">Median Home Prices</h3> <div class="chart-container h-64"><canvas id="valueChart"></canvas></div> </div> </section> </main> <footer class="text-center py-6 bg-[#5F909C] text-[#D2E7E7]"> <p>Data sourced from market reports as of October 2025.</p> </footer> <!-- Charts JS --> <script> const tealPalette = ['#5F909C', '#7CAAAA', '#99C3C3', '#B5DDDD', '#D2E7E7']; const tooltipTitleCallback = (tooltipItems) => tooltipItems[0].chart.data.labels[tooltipItems[0].dataIndex]; const defaultChartOptions = { responsive:true, maintainAspectRatio:false, plugins:{legend:{position:'top'}, tooltip:{callbacks:{title: tooltipTitleCallback}}} }; new Chart(document.getElementById('salesRatioChart'), { type:'doughnut', data:{ labels:['Sold Below List Price','Sold At/Above List Price'], datasets:[{ data:[80,20], backgroundColor:[tealPalette[2],tealPalette[0]], borderColor:'#fff', borderWidth:2 }] }, options:{ ...defaultChartOptions, plugins:{legend:{position:'bottom'}} } }); new Chart(document.getElementById('valueChart'), { type:'bar', data:{ labels:['Boise','Salt Lake City','Portland','Seattle','San Jose'], datasets:[{ label:'Median Home Price', data:[540000,575000,610000,860000,1460000], backgroundColor:tealPalette[1], borderColor:tealPalette[0], borderWidth:1 }] }, options:defaultChartOptions }); </script> <!-- Gemini API JS --> <script> const apiKey = "AIzaSyDsmwAZkxbTY83004u7NbdRvH0uK-nRsS8"; // Your Gemini API Key const apiUrl = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-05-20:generateContent?key=${apiKey}`; const buyerSummaryBtn = document.getElementById('buyerSummaryBtn'); const sellerSummaryBtn = document.getElementById('sellerSummaryBtn'); const summaryOutput = document.getElementById('summaryOutput'); const marketData = "Median Sale Price is $558K, Average Days on Market is 26, and there are 2.9 months of housing inventory."; const simpleMarkdownToHtml = (text) => text.replace(/\*\*(.*?)\*\*/g,'<strong>$1</strong>').replace(/\*(.*?)\*/g,'<li>$1</li>').replace(/\n/g,'<br>'); const callGeminiApi = async (prompt) => { summaryOutput.innerHTML = '<div class="loader"></div>'; buyerSummaryBtn.disabled = sellerSummaryBtn.disabled = true; try { const response = await fetch(apiUrl,{ method:'POST', headers:{ 'Content-Type':'application/json' }, body:JSON.stringify({ contents:[{ parts:[{ text: prompt }] }] }) }); const result = await response.json(); const text = result.candidates?.[0]?.content?.parts?.[0]?.text || 'No response from API.'; summaryOutput.innerHTML = simpleMarkdownToHtml(text); } catch(e) { summaryOutput.innerHTML = `<p class="text-red-500">Error: ${e.message}</p>`; } buyerSummaryBtn.disabled = sellerSummaryBtn.disabled = false; }; buyerSummaryBtn.addEventListener('click', () => callGeminiApi(`You are a helpful real estate advisor. Based on data: ${marketData}. Write 2-3 concise sentences for a potential home buyer.`)); sellerSummaryBtn.addEventListener('click', () => callGeminiApi(`You are a helpful real estate advisor. Based on data: ${marketData}. Write 2-3 concise sentences for a potential home seller.`)); </script> <!-- Auto-resize for iframe --> <script> function resizeIframe() { if (window.parent) { const height = document.documentElement.scrollHeight; window.parent.postMessage({ type: 'resize-iframe', height }, '*'); } } window.addEventListener('load', resizeIframe); window.addEventListener('resize', resizeIframe); </script> </body> </html>