← back to Stars of Design
views/public/videos.ejs
92 lines
<%- include('../partials/head', { title, meta_desc_override: typeof meta_desc_override !== 'undefined' ? meta_desc_override : undefined }) %>
<%- include('../partials/header') %>
<main class="videos-page">
<section class="section">
<div class="wrap">
<header class="rail-header" style="display:block">
<h1>Designer Videos</h1>
<p class="muted" style="max-width:760px;margin:.5rem 0 1.25rem">
A curated gallery of <%= total %> verified YouTube videos — designer home tours from Architectural Digest, sit-down interviews from House & Garden, project showcases from Studio McGee, and behind-the-scenes work from the firms themselves. Every video links back to the designer's profile when we have one.
</p>
<form class="filter-form" method="get" action="/videos">
<label class="control">
<span>Search</span>
<input type="search" name="q" placeholder="title, channel, summary" value="<%= filter.q || '' %>" maxlength="120">
</label>
<label class="control">
<span>Category</span>
<select name="category">
<option value="">All</option>
<% categories.forEach(function (c) { %>
<option value="<%= c %>" <%= filter.category === c ? 'selected' : '' %>><%= c %></option>
<% }); %>
</select>
</label>
<label class="control">
<span>Source</span>
<select name="source_org">
<option value="">All sources</option>
<% sources.forEach(function (s) { %>
<option value="<%= s %>" <%= filter.source_org === s ? 'selected' : '' %>><%= s %></option>
<% }); %>
</select>
</label>
<button class="btn primary" type="submit">Filter</button>
<a class="btn ghost" href="/videos">Reset</a>
</form>
</header>
<% if (!videos.length) { %>
<p class="muted">No videos match those filters. <a href="/videos">Reset</a> to see all <%= total %> videos.</p>
<% } else { %>
<div class="video-grid">
<% videos.forEach(function (v) { %>
<article class="video-card">
<a class="video-card-poster"
href="<%= v.url %>"
target="_blank"
rel="noopener noreferrer"
aria-label="<%= v.title %> — opens YouTube in new tab"
style="background-image:url('<%= v.thumb_url %>')">
<span class="video-card-play" aria-hidden="true">▶</span>
<span class="video-card-cat"><%= v.category %></span>
</a>
<div class="video-card-body">
<h3><a href="<%= v.url %>" target="_blank" rel="noopener noreferrer"><%= v.title %></a></h3>
<p class="muted small"><%= v.channel %><% if (v.year) { %> · <%= v.year %><% } %></p>
<% if (v.designer_slug) { %>
<p class="video-card-link">
Profile → <a href="/designers/<%= v.designer_slug %>"><%= v.designer_slug.split('-').map(function(w){return w[0].toUpperCase()+w.slice(1)}).join(' ') %></a>
</p>
<% } %>
</div>
</article>
<% }); %>
</div>
<% } %>
</div>
</section>
<section class="section alt">
<div class="wrap two-col">
<div>
<h2>How we built this gallery</h2>
<ol class="prose">
<li><strong>Source channels.</strong> We leaned on AIA, ASID, IIDA, Architectural Digest, House Beautiful, Elle Decor, Veranda, Studio McGee, Corey Damen Jenkins, and a dozen firm-owned channels.</li>
<li><strong>Verification.</strong> Every video ID is oEmbed-verified against YouTube before publication — no fabricated IDs, no broken thumbnails.</li>
<li><strong>Cross-linked.</strong> Where the video features a designer in our directory, the card links to that designer's profile so the gallery is a discovery path back into the catalog.</li>
</ol>
</div>
<div>
<h2>Suggest a video</h2>
<p>Know a great designer-feature video we missed — an AIA talk, an ASID interview, a firm-owned project showcase? Drop a link via the <a href="/submit">submission form</a>. We add new videos weekly.</p>
<p class="muted small">All videos remain hosted on YouTube under their original uploader's account. We only catalog and link.</p>
</div>
</div>
</section>
</main>
<%- include('../partials/footer') %>