266 lines
No EOL
11 KiB
HTML
266 lines
No EOL
11 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Miami Alumni Chicagoland Business Directory</title>
|
||
<meta name="description" content="A directory of businesses owned by Miami University (OH) alumni in the Chicagoland area.">
|
||
<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=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
||
<link rel="stylesheet" href="style.css">
|
||
<link rel="icon" type="image/png" href="favicon-custom.png">
|
||
<link rel="apple-touch-icon" href="favicon-custom.png">
|
||
</head>
|
||
<body>
|
||
|
||
<!-- ===== Header ===== -->
|
||
<header class="site-header">
|
||
<h1>Miami Alumni Chicagoland Business Directory</h1>
|
||
<p class="subtitle">Supporting Miami University alumni–owned businesses in the Chicagoland area</p>
|
||
</header>
|
||
|
||
<!-- ===== Filter Bar ===== -->
|
||
<nav class="filter-bar" role="navigation" aria-label="Filter businesses">
|
||
<div class="filter-bar-inner">
|
||
<div class="stats">
|
||
<strong id="totalCount">9</strong> businesses
|
||
</div>
|
||
<div class="search-wrapper">
|
||
<input type="text" id="searchInput" placeholder="Search by name, industry, or location…" aria-label="Search businesses">
|
||
</div>
|
||
<button class="filter-toggle" id="filterToggle" aria-expanded="true" onclick="toggleFilters()">
|
||
<span class="filter-toggle-label">Industry</span>
|
||
<span class="filter-toggle-badge" id="filterBadge">All</span>
|
||
<svg class="filter-toggle-arrow" width="12" height="8" viewBox="0 0 12 8"><path d="M1 1l5 5 5-5" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"/></svg>
|
||
</button>
|
||
<div class="industry-filters" id="industryFilters">
|
||
<button class="industry-btn active" data-filter="all">All</button>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<!-- ===== Directory Grid ===== -->
|
||
<main>
|
||
<div class="directory-grid" id="directoryGrid"></div>
|
||
</main>
|
||
|
||
<!-- ===== Footer ===== -->
|
||
<footer class="site-footer">
|
||
<div>Miami University Alumni Chicagoland Chapter</div>
|
||
<div><a href="https://www.miamialum.org" target="_blank" rel="noopener">miamialum.org</a></div>
|
||
</footer>
|
||
|
||
<!-- ===== Data & Script ===== -->
|
||
<script>
|
||
// ─── Business Data ────────────────────────────────────────────────
|
||
// Sorted alphabetically by company name
|
||
const businesses = [
|
||
{
|
||
company: "Centered Therapy Chicago",
|
||
alumni: "Bianka Hardin",
|
||
role: "Owner",
|
||
industry: "Mental Health Care",
|
||
location: "Chicago, IL",
|
||
address: "1507 W. Lawrence, Chicago, IL",
|
||
description: "Mental health practice providing individual, couples, and family therapy services.",
|
||
phone: "(773) 569-1426",
|
||
email: "biankahardinpsyd@centeredtherapychicago.com",
|
||
website: null
|
||
},
|
||
{
|
||
company: "Chicago Pelvic Health and Wellness",
|
||
alumni: "Jana Fronda",
|
||
role: "Owner/Founder",
|
||
industry: "Health Wellness and Fitness",
|
||
location: "Wheaton, IL",
|
||
address: "301 S County Farm Rd Suite H, Wheaton, IL",
|
||
description: "Specialized pelvic floor physical therapy clinic dedicated to women's health and wellness.",
|
||
phone: "(773) 219-2749",
|
||
email: "jana@chicagopelvic.com",
|
||
website: null
|
||
},
|
||
{
|
||
company: "Garrett Consulting",
|
||
alumni: "Steve Garrett",
|
||
role: "Owner/Founder",
|
||
industry: "Human Resources",
|
||
location: "Chicago, IL",
|
||
address: "7022 N. Paulina Street, Apt 2, Chicago, IL 60626",
|
||
description: "Leadership development consulting since the late 1980s — executive coaching, leadership training, and assessments.",
|
||
phone: "(312) 208-0636",
|
||
email: "steve.garrett@garrettconsulting.us",
|
||
website: null
|
||
},
|
||
{
|
||
company: "GLP Capital Partners",
|
||
alumni: "Britton Leigh",
|
||
role: "Partner",
|
||
industry: "Investment Management",
|
||
location: "Chicago, IL",
|
||
address: "10 S. Wacker, Chicago, IL",
|
||
description: "Global alternative asset manager specializing in logistics, self-storage, and data center assets.",
|
||
phone: null,
|
||
email: "bleigh@gcp.com",
|
||
website: null
|
||
},
|
||
{
|
||
company: "John Tyler Carlson State Farm Agency",
|
||
alumni: "John Carlson",
|
||
role: "Owner/Founder",
|
||
industry: "Insurance",
|
||
location: "Evanston, IL",
|
||
address: "829 Main St, Evanston, IL",
|
||
description: "State Farm Agency providing insurance and financial services to the Evanston community.",
|
||
phone: "(847) 869-2336",
|
||
email: "Agent@JohnTylerCarlson.com",
|
||
website: null
|
||
},
|
||
{
|
||
company: "Morgan Stanley Wealth Management",
|
||
alumni: "James Lamoree",
|
||
role: "Private Wealth Advisor",
|
||
industry: "Financial Services",
|
||
location: "Chicago, IL",
|
||
address: "227 W. Monroe St, Chicago, IL",
|
||
description: "Private wealth management and financial advisory services for individuals and families.",
|
||
phone: null,
|
||
email: "James.lamoree@ms.com",
|
||
website: null
|
||
},
|
||
{
|
||
company: "New York Life Insurance and NYLIFE Securities",
|
||
alumni: "Mary Beth Velzy",
|
||
role: "Owner",
|
||
industry: "Financial Services",
|
||
location: "Chicago, IL",
|
||
address: "500 W. Madison St Suite 1725, Chicago, IL",
|
||
description: "Female-owned practice serving professionals and businesses with insurance and securities solutions.",
|
||
phone: "(312) 493-7216",
|
||
email: "mvelzy@ft.newyorklife.com",
|
||
website: null
|
||
},
|
||
{
|
||
company: "Renee Davis Consulting",
|
||
alumni: "Renee Davis",
|
||
role: "Owner/Founder",
|
||
industry: "Nonprofit Organization Management",
|
||
location: "Western Springs, IL",
|
||
address: "4310 Lawn Avenue, Western Springs, IL",
|
||
description: "Consulting and coaching for nonprofit leaders and fundraisers to maximize their impact.",
|
||
phone: "(312) 231-9712",
|
||
email: "renee.n.davis@gmail.com",
|
||
website: null
|
||
},
|
||
{
|
||
company: "Ruggaard & Associates, LLC",
|
||
alumni: "Ryan Ruggaard",
|
||
role: "Owner/Partner",
|
||
industry: "Investment Management",
|
||
location: "Chicago, IL",
|
||
address: "171 N Aberdeen St Suite 400, Chicago, IL",
|
||
description: "Registered investment advisor serving 300+ clients across 35 states. Contact Ryan at ryan@ruggaard.net or Randy at randy@ruggaard.net.",
|
||
phone: "(330) 487-5888",
|
||
email: "ryan@ruggaard.net",
|
||
website: null
|
||
}
|
||
];
|
||
|
||
// ─── Render ───────────────────────────────────────────────────────
|
||
const grid = document.getElementById('directoryGrid');
|
||
const searchInput = document.getElementById('searchInput');
|
||
const industryFilterBar = document.getElementById('industryFilters');
|
||
const totalCount = document.getElementById('totalCount');
|
||
|
||
// Collect unique industries
|
||
const allIndustries = [...new Set(businesses.map(b => b.industry))].sort();
|
||
allIndustries.forEach(ind => {
|
||
const btn = document.createElement('button');
|
||
btn.className = 'industry-btn';
|
||
btn.dataset.filter = ind;
|
||
btn.textContent = ind;
|
||
industryFilterBar.appendChild(btn);
|
||
});
|
||
|
||
let activeFilter = 'all';
|
||
let activeSearch = '';
|
||
|
||
function render() {
|
||
const filtered = businesses.filter(b => {
|
||
const matchIndustry = activeFilter === 'all' || b.industry === activeFilter;
|
||
if (!matchIndustry) return false;
|
||
if (!activeSearch) return true;
|
||
const q = activeSearch.toLowerCase();
|
||
return b.company.toLowerCase().includes(q) ||
|
||
b.alumni.toLowerCase().includes(q) ||
|
||
b.industry.toLowerCase().includes(q) ||
|
||
b.location.toLowerCase().includes(q) ||
|
||
b.description.toLowerCase().includes(q);
|
||
});
|
||
|
||
totalCount.textContent = businesses.length;
|
||
|
||
if (filtered.length === 0) {
|
||
grid.innerHTML = `<div class="no-results">
|
||
<h3>No businesses found</h3>
|
||
<p>Try adjusting your search or filter.</p>
|
||
</div>`;
|
||
return;
|
||
}
|
||
|
||
grid.innerHTML = filtered.map(b => `
|
||
<article class="business-card">
|
||
<div class="card-accent"></div>
|
||
<div class="card-body">
|
||
<h2 class="card-company">${b.company}</h2>
|
||
<div class="card-alumni">${b.alumni} — ${b.role}</div>
|
||
<div class="card-tags">
|
||
<span class="card-tag industry">${b.industry}</span>
|
||
<span class="card-tag location">${b.location}</span>
|
||
</div>
|
||
<p class="card-description">${b.description}</p>
|
||
<div class="card-contact">
|
||
<div class="contact-item">📍 ${b.address}</div>
|
||
${b.phone ? `<div class="contact-item">📞 <a href="tel:${b.phone.replace(/[^0-9]/g, '')}">${b.phone}</a></div>` : ''}
|
||
${b.email ? `<div class="contact-item">✉️ <a href="mailto:${b.email}">${b.email}</a></div>` : ''}
|
||
${b.website ? `<div class="contact-item">🌐 <a href="${b.website}" target="_blank" rel="noopener">${b.website.replace(/^https?:\/\//, '')}</a></div>` : ''}
|
||
</div>
|
||
</div>
|
||
</article>
|
||
`).join('');
|
||
}
|
||
|
||
// ─── Event Listeners ──────────────────────────────────────────────
|
||
searchInput.addEventListener('input', e => {
|
||
activeSearch = e.target.value;
|
||
render();
|
||
});
|
||
|
||
industryFilterBar.addEventListener('click', e => {
|
||
const btn = e.target.closest('.industry-btn');
|
||
if (!btn) return;
|
||
industryFilterBar.querySelectorAll('.industry-btn').forEach(b => b.classList.remove('active'));
|
||
btn.classList.add('active');
|
||
activeFilter = btn.dataset.filter;
|
||
render();
|
||
// Update the filter toggle badge
|
||
const badge = document.getElementById('filterBadge');
|
||
if (badge) badge.textContent = btn.textContent;
|
||
});
|
||
|
||
// ─── Initial Render ───────────────────────────────────────────────
|
||
render();
|
||
// Set initial badge
|
||
const initBadge = document.getElementById('filterBadge');
|
||
if (initBadge) initBadge.textContent = document.querySelector('.industry-btn.active')?.textContent || 'All';
|
||
|
||
function toggleFilters() {
|
||
const container = document.getElementById('industryFilters');
|
||
const toggle = document.getElementById('filterToggle');
|
||
const isOpen = toggle.getAttribute('aria-expanded') === 'true';
|
||
container.classList.toggle('collapsed', isOpen);
|
||
toggle.setAttribute('aria-expanded', !isOpen);
|
||
}</script>
|
||
|
||
</body>
|
||
</html> |