← back to Commercialdesignreps

views/index.ejs

156 lines

<%- include('partials/head', { title: site.name + ' — ' + site.tagline, description: site.description }) %>

<main class="wrap main">
  <section class="hero">
    <span class="eyebrow">Specifier directory &middot; Updated May 2026</span>
    <h1>The independent rep agencies<br><span class="hero-accent">behind every commercial spec.</span></h1>
    <p class="lead">A curated index of showroom agencies serving hospitality, healthcare, education, F&amp;B, retail, and contract interiors &mdash; mapped to the lines they carry and the territories they cover. No pay-to-rank. No lead resale. Specifiers reach the right rep on the first call.</p>
  </section>

  <section class="stats-strip" aria-label="Directory at a glance">
    <div class="stat"><span class="stat-num"><%= stats.agencies %></span><span class="stat-label">Agencies</span></div>
    <div class="stat"><span class="stat-num"><%= stats.territories %></span><span class="stat-label">Territories</span></div>
    <div class="stat"><span class="stat-num"><%= stats.lines %></span><span class="stat-label">Lines carried</span></div>
    <div class="stat"><span class="stat-num"><%= stats.verticals %></span><span class="stat-label">Verticals served</span></div>
  </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="Vertical">
      <option value="">All verticals</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(' &middot; ') %>
            </div>
            <div class="rep-vertical">
              <% r.vertical.forEach(function(v){ %>
                <span class="tag"><%= v %></span>
              <% }) %>
            </div>
          </a>
        </li>
      <% }) %>
    </ul>
  <% } %>

  <section class="how-matches" aria-labelledby="how-matches-heading">
    <h2 id="how-matches-heading">How matches work</h2>
    <ol class="match-steps">
      <li class="match-step">
        <span class="match-num">01</span>
        <div>
          <h3>Filter by what you need</h3>
          <p>Narrow by state, by manufacturer line, or by project vertical &mdash; hospitality, healthcare, education, F&amp;B, contract, residential. Stack filters; reset anytime.</p>
        </div>
      </li>
      <li class="match-step">
        <span class="match-num">02</span>
        <div>
          <h3>Open the rep card</h3>
          <p>Every listing maps the agency's full territory footprint, the lines they carry, and the verticals they actively service. No pay-to-rank &mdash; ordering is editorial.</p>
        </div>
      </li>
      <li class="match-step">
        <span class="match-num">03</span>
        <div>
          <h3>Reach out directly</h3>
          <p>Each rep page links to the agency's own contact form. No middleman, no lead-sale, no inbox spam. Your specification request goes straight to the showroom.</p>
        </div>
      </li>
    </ol>
  </section>

  <section class="faq" aria-labelledby="faq-heading">
    <h2 id="faq-heading">Specifier FAQ</h2>
    <details class="faq-item">
      <summary>Do I need to go through a rep to spec a commercial line?</summary>
      <p>For most contract textile and wallcovering lines &mdash; yes. Brands like Maharam, Designtex, Knoll Textiles, Carnegie, and Wolf-Gordon route specification, sampling, and quoting through their independent rep network. The rep is your single point of contact for memo samples, custom colorways, lead times, COM/COL approvals, and project pricing. Skipping the rep usually means slower samples and no project-level pricing.</p>
    </details>
    <details class="faq-item">
      <summary>How do I get memo samples or a binder for a project?</summary>
      <p>Contact the rep that covers your territory for that specific line. Open the rep card, find the line you need, and email the agency directly. Most agencies turn samples in 24&ndash;72 hours for in-state requests. For multi-line specs, one email to the rep agency usually covers every line they carry.</p>
    </details>
    <details class="faq-item">
      <summary>Why does the same brand have a different rep in each state?</summary>
      <p>Manufacturers contract independent rep agencies on a territory basis &mdash; typically a single state, a metro region, or a multi-state cluster. The rep agency is the brand's exclusive on-the-ground sales arm in that territory, handling specifier visits, showroom demos, CEU presentations, and quotes. That's why a line like Maya Romanoff might have one rep in California and a different one in Texas.</p>
    </details>
    <details class="faq-item">
      <summary>I'm a manufacturer looking for rep coverage &mdash; can this directory help?</summary>
      <p>The directory is a one-way reference: specifiers find reps, not the reverse. If you're a brand evaluating territory gaps, you can use the filters to see which agencies already carry adjacent lines in a given region, then approach those agencies directly. Email <a href="mailto:<%= site.email %>"><%= site.email %></a> if you'd like a free territory-coverage report on a specific line.</p>
    </details>
  </section>

  <section class="seo-block">
    <h2>About this directory</h2>
    <p>Commercial Design Reps is a curated index of independent sales-rep agencies serving the contract, hospitality, and commercial interior design industries. Each listing maps the rep's territory coverage, the manufacturer lines they carry, and the verticals (residential, contract, hospitality, healthcare, education, F&amp;B, retail) they actively service. Use the filters above to find a rep by region, by line carried, or by project type. Specifiers, designers, architects, and purchasing teams can contact reps directly through the listing page.</p>
    <p>This directory is operated by <a href="https://designerwallcoverings.com">Designer Wallcoverings</a> as a free industry resource. To list your agency, update an existing listing, or correct an entry, email <a href="mailto:<%= site.email %>"><%= site.email %></a>.</p>
  </section>
</main>

<%- include('partials/foot') %>