← back to Hospitalitydesignreps
views/index.ejs
117 lines
<%- include('partials/head', { title: site.name + ' — ' + site.tagline, description: site.description }) %>
<main class="wrap main">
<section class="hero">
<h1>Who carries what,<br><span class="hero-accent">where, and for which brand standard.</span></h1>
<p class="lead">An independent, free index of <%= total %> hospitality FF&E rep agencies — boutique hotel, hotel brand, resort, casino, cruise, F&B, spa, hospitality healthcare. Filter by territory, by segment, or by line carried.</p>
</section>
<form class="filter-bar" method="get" action="/">
<input type="search" name="q" value="<%= filters.q %>" placeholder="Search rep, agency, line, city…" aria-label="Search">
<select name="territory" aria-label="Territory">
<option value="">All territories</option>
<% facets.territories.forEach(function(t){ %>
<option value="<%= t %>" <%= filters.territory === t ? 'selected' : '' %>><%= t %></option>
<% }) %>
</select>
<select name="vertical" aria-label="Segment">
<option value="">All segments</option>
<% facets.verticals.forEach(function(v){ %>
<option value="<%= v %>" <%= filters.vertical === v ? 'selected' : '' %>><%= v %></option>
<% }) %>
</select>
<select name="line" aria-label="Line carried">
<option value="">All lines</option>
<% facets.lines.forEach(function(l){ %>
<option value="<%= l %>" <%= filters.line === l ? 'selected' : '' %>><%= l %></option>
<% }) %>
</select>
<button type="submit" class="btn-primary">Filter</button>
<% if (filters.q || filters.territory || filters.vertical || filters.line) { %>
<a class="btn-ghost" href="/">Reset</a>
<% } %>
</form>
<div class="result-bar">
<div class="muted"><%= matched %> of <%= total %> matching</div>
<div class="controls">
<label class="control">
<span>Sort</span>
<select id="sort-select" name="sort">
<option value="newest" <%= filters.sort === 'newest' ? 'selected' : '' %>>Newest</option>
<option value="name" <%= filters.sort === 'name' ? 'selected' : '' %>>Name A→Z</option>
<option value="agency" <%= filters.sort === 'agency' ? 'selected' : '' %>>Agency A→Z</option>
<option value="city" <%= filters.sort === 'city' ? 'selected' : '' %>>City A→Z</option>
<option value="territory" <%= filters.sort === 'territory' ? 'selected' : '' %>>Territory</option>
</select>
</label>
<label class="control">
<span>Density</span>
<input id="density-slider" type="range" min="220" max="420" step="20" value="300">
</label>
</div>
</div>
<% if (!matched) { %>
<div class="empty">No reps match those filters. <a href="/">Reset</a>.</div>
<% } else { %>
<ul class="rep-grid" id="rep-grid">
<% reps.forEach(function(r){ %>
<li class="rep-card">
<a class="rep-link" href="/rep/<%= r.id %>">
<div class="rep-card-head">
<div class="rep-avatar"><%= r.name.split(' ').map(s => s[0]).join('').slice(0,2) %></div>
<div>
<div class="rep-name"><%= r.name %></div>
<div class="rep-agency"><%= r.agency %></div>
</div>
</div>
<div class="rep-meta">
<span class="chip city"><%= r.city %></span>
<% r.territories.slice(0,4).forEach(function(t){ %>
<span class="chip"><%= t %></span>
<% }) %>
</div>
<div class="rep-lines muted">
<%= r.lines.slice(0,3).join(' · ') %>
</div>
<div class="rep-vertical">
<% r.vertical.forEach(function(v){ %>
<span class="tag"><%= v %></span>
<% }) %>
</div>
</a>
</li>
<% }) %>
</ul>
<% } %>
<section class="how-matches">
<h2>How matches work</h2>
<div class="how-grid">
<div class="how-step">
<div class="how-num">01</div>
<h3>Filter by where the project is</h3>
<p>Pick the state the property sits in (territory). Reps are indexed by every state they actively cover — not by where their office happens to be — so a rep based in Atlanta who covers FL/AL/GA/SC/TN shows up under all five.</p>
</div>
<div class="how-step">
<div class="how-num">02</div>
<h3>Narrow by segment, or by line</h3>
<p>A rep who carries a resort textile line in CA isn't always the right call for a roadside select-service in the same state. Use the segment filter (boutique hotel, casino, cruise, F&B, spa, etc.) or filter to a specific manufacturer line you already need to spec.</p>
</div>
<div class="how-step">
<div class="how-num">03</div>
<h3>Contact the rep directly</h3>
<p>Open the listing page for the agency principal you want. Every record has a direct email and phone — no contact form, no lead-routing, no introductions. We are not a brokerage; we are a map.</p>
</div>
</div>
<p class="how-foot muted">Operated by <a href="https://designerwallcoverings.com">Designer Wallcoverings</a> as a free industry resource. Listings are not pay-to-play; there is no advertising. To add, update, or correct a listing, email <a href="mailto:<%= site.email %>"><%= site.email %></a>.</p>
</section>
</main>
<%- include('partials/foot') %>