Skip to content

Commit 56094a5

Browse files
commitconfirmclaude
andcommitted
Add footer partner links and simplify preview behavior
Footer changes: - Add "Treefort Music Fest 2026" and "Powered by Spotify Web API" links - Styled with zine aesthetic (thick borders, box shadows) Preview section behavior: - Two-column layout maintained throughout (preview left, auth/loading right) - Loading section appears in right column while scanning - Preview removed when real results load - Mobile: auth/loading on top, preview below Co-Authored-By: Claude Opus 4.5 <[email protected]>
1 parent 42785aa commit 56094a5

4 files changed

Lines changed: 68 additions & 7 deletions

File tree

src/callback.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ <h3>Your Treefort Matches</h3>
9494
</main>
9595

9696
<footer>
97+
<div class="footer-partners">
98+
<a href="https://treefortmusicfest.com/" target="_blank" rel="noopener noreferrer" class="partner-link">Treefort Music Fest 2026</a>
99+
<a href="https://developer.spotify.com/documentation/web-api" target="_blank" rel="noopener noreferrer" class="partner-link">Powered by Spotify Web API</a>
100+
</div>
97101
<p class="disclaimer">Not affiliated with, endorsed by, or associated with Treefort Music Fest or Spotify.</p>
98102
<p class="disclaimer">Use at your own risk — no guarantees of accuracy.</p>
99103
<p class="footer-links">

src/index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ <h3>Your Treefort Matches</h3>
9494
</main>
9595

9696
<footer>
97+
<div class="footer-partners">
98+
<a href="https://treefortmusicfest.com/" target="_blank" rel="noopener noreferrer" class="partner-link">Treefort Music Fest 2026</a>
99+
<a href="https://developer.spotify.com/documentation/web-api" target="_blank" rel="noopener noreferrer" class="partner-link">Powered by Spotify Web API</a>
100+
</div>
97101
<p class="disclaimer">Not affiliated with, endorsed by, or associated with Treefort Music Fest or Spotify.</p>
98102
<p class="disclaimer">Use at your own risk — no guarantees of accuracy.</p>
99103
<p class="footer-links">

src/style.css

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,38 @@ footer {
350350
font-size: 0.875rem;
351351
}
352352

353+
.footer-partners {
354+
display: flex;
355+
flex-wrap: wrap;
356+
justify-content: center;
357+
gap: 1rem;
358+
margin-bottom: 1.5rem;
359+
}
360+
361+
.partner-link {
362+
display: inline-block;
363+
font-family: 'Ubuntu', sans-serif;
364+
font-weight: 700;
365+
font-size: 1rem;
366+
padding: 0.75rem 1.25rem;
367+
background-color: var(--white);
368+
color: var(--black);
369+
text-decoration: none;
370+
border: 3px solid var(--black);
371+
box-shadow: 3px 3px 0 var(--black);
372+
transition: transform 0.1s, box-shadow 0.1s;
373+
}
374+
375+
.partner-link:hover {
376+
transform: translate(-2px, -2px);
377+
box-shadow: 5px 5px 0 var(--black);
378+
}
379+
380+
.partner-link:active {
381+
transform: translate(1px, 1px);
382+
box-shadow: 2px 2px 0 var(--black);
383+
}
384+
353385
.disclaimer {
354386
margin-bottom: 0.5rem;
355387
color: #666;
@@ -830,9 +862,10 @@ footer {
830862
gap: 2rem;
831863
}
832864

833-
/* Mobile: auth/setup first, preview second */
865+
/* Mobile: auth/setup/loading first, preview second */
834866
.landing-grid #auth-section,
835-
.landing-grid #setup-section {
867+
.landing-grid #setup-section,
868+
.landing-grid #loading-section {
836869
order: 1;
837870
}
838871

@@ -856,7 +889,8 @@ footer {
856889
}
857890

858891
.landing-grid #auth-section,
859-
.landing-grid #setup-section {
892+
.landing-grid #setup-section,
893+
.landing-grid #loading-section {
860894
order: 2;
861895
margin: 0;
862896
max-width: none;

src/ui.js

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ export function initUI(lineup) {
187187
* @param {number} trackCount - Number of tracks fetched so far
188188
*/
189189
export function showLoading(trackCount = 0) {
190-
const main = document.querySelector('main');
190+
const landingGrid = document.querySelector('.landing-grid');
191191

192192
// Check if loading section already exists
193193
let loadingSection = document.getElementById('loading-section');
@@ -199,10 +199,12 @@ export function showLoading(trackCount = 0) {
199199
authSection.classList.add('hidden');
200200
}
201201

202-
// Create loading section
202+
// Create loading section inside landing-grid (replaces auth section's spot)
203203
loadingSection = document.createElement('section');
204204
loadingSection.id = 'loading-section';
205-
main.insertBefore(loadingSection, main.firstChild);
205+
if (landingGrid) {
206+
landingGrid.appendChild(loadingSection);
207+
}
206208
}
207209

208210
loadingSection.innerHTML = `
@@ -232,6 +234,18 @@ export function showResults(matchedArtists, lastUpdated) {
232234
authSection.classList.add('hidden');
233235
}
234236

237+
// Remove preview section - real results replace it
238+
const previewSection = document.getElementById('preview-section');
239+
if (previewSection) {
240+
previewSection.remove();
241+
}
242+
243+
// Hide landing grid
244+
const landingGrid = document.querySelector('.landing-grid');
245+
if (landingGrid) {
246+
landingGrid.classList.add('hidden');
247+
}
248+
235249
// Show results section
236250
let resultsSection = document.getElementById('results-section');
237251
if (!resultsSection) {
@@ -426,12 +440,13 @@ function renderSimilarArtists(container, similarArtists) {
426440
}
427441

428442
/**
429-
* Show the auth section (initial state)
443+
* Show the auth section (after Client ID is set, before auth)
430444
*/
431445
export function showAuth() {
432446
const authSection = document.getElementById('auth-section');
433447
const resultsSection = document.getElementById('results-section');
434448
const loadingSection = document.getElementById('loading-section');
449+
const setupSection = document.getElementById('setup-section');
435450

436451
if (authSection) {
437452
authSection.classList.remove('hidden');
@@ -442,6 +457,10 @@ export function showAuth() {
442457
if (loadingSection) {
443458
loadingSection.remove();
444459
}
460+
// Hide setup section when showing auth
461+
if (setupSection) {
462+
setupSection.classList.add('hidden');
463+
}
445464
}
446465

447466
/**

0 commit comments

Comments
 (0)