Radio show website: Full Astro build with 194 episodes imported

Complete website for The Computer Guru Show (radio.azcomputerguru.com):
- Astro 6.0.4 static site with React islands
- 194 episodes imported from gurushow.com RSS feed
- Dark/light mode HSL design system
- Persistent audio player with session persistence
- Episode archive with search and season filtering
- Home page with animated hero, stats, latest episodes
- All pages: About, Subscribe, Community, Live, Contact, Blog, 404
- Podcast RSS feed with iTunes namespace
- Session log updated

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-14 20:44:42 -07:00
parent 1adc2ed3a4
commit ee89727662
236 changed files with 16513 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
export function episodeSlug(season: number, episode: number, title: string): string {
const slug = title
.toLowerCase()
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-+|-+$/g, '')
.substring(0, 60);
return `s${String(season).padStart(2, '0')}e${String(episode).padStart(2, '0')}-${slug}`;
}

View File

@@ -0,0 +1,15 @@
export function formatDate(date: Date): string {
return date.toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric',
});
}
export function formatShortDate(date: Date): string {
return date.toLocaleDateString('en-US', {
month: 'short',
day: 'numeric',
year: 'numeric',
});
}

View File

@@ -0,0 +1,14 @@
export function formatDuration(duration: string): string {
// Handle HH:MM:SS or MM:SS formats
const parts = duration.split(':').map(Number);
if (parts.length === 3) {
const [h, m] = parts;
if (h > 0) return `${h}h ${m}m`;
return `${m}m`;
}
if (parts.length === 2) {
const [m] = parts;
return `${m}m`;
}
return duration;
}