Skip to content

AyanPutatunda/thepractitionerspod

Repository files navigation

The Practitioners Pod - Website

A professional podcast platform featuring tech industry leaders with an integrated guest management system. Built with Next.js 14, TypeScript, Tailwind CSS, and Prisma.

🎯 Features

Public-Facing Website

  • Home Page: Hero section, latest episodes, featured guests, newsletter signup
  • Episodes: Browse all episodes with filtering, search, and YouTube integration
  • Guests: Directory of featured guests with social links and bios
  • About: Podcast story, host information, values, and mission
  • Contact: Contact form with FAQ section
  • Guest Application: Comprehensive application form for potential guests

Admin Dashboard

  • Application Management: Review, accept, or decline guest applications
  • Episode Management: Add and manage podcast episodes
  • Guest Database: Complete profiles and contact information
  • Analytics: Track applications, episodes, and engagement
  • Email Automation: Automated responses and notifications

Technical Features

  • YouTube Integration: Automatic video embedding and metadata sync
  • Database: PostgreSQL with Prisma ORM
  • Authentication: Secure admin access with NextAuth.js
  • Email: Transactional emails with Resend
  • SEO Optimized: Meta tags, Open Graph, and schema markup
  • Responsive Design: Mobile-first, works on all devices
  • Type-Safe: Full TypeScript coverage

πŸš€ Getting Started

Prerequisites

  • Node.js 18+ and npm
  • Supabase account (provides PostgreSQL + Authentication)
  • YouTube Data API key
  • Resend API key (optional, for custom emails)

Installation

  1. Clone the repository
cd thepractitionerspod
  1. Install dependencies
npm install
  1. Set up environment variables

Copy the .env.example file:

cp .env.example .env

Edit .env with your actual values:

# Supabase (provides both database and authentication)
NEXT_PUBLIC_SUPABASE_URL="https://your-project.supabase.co"
NEXT_PUBLIC_SUPABASE_ANON_KEY="your-anon-key"
DATABASE_URL="postgresql://postgres:[password]@db.your-project.supabase.co:5432/postgres"

# YouTube API
YOUTUBE_API_KEY="your-youtube-api-key"
YOUTUBE_CHANNEL_ID="your-youtube-channel-id"

# Email (Optional - Supabase has built-in email)
RESEND_API_KEY="your-resend-api-key"
FROM_EMAIL="noreply@thepractitionerspod.com"
ADMIN_EMAIL="admin@thepractitionerspod.com"

See SUPABASE_SETUP.md for detailed setup instructions.

  1. Set up the database
# Generate Prisma client
npm run db:generate

# Push schema to database
npm run db:push
  1. Create admin user

Go to your Supabase project dashboard:

  • Navigate to Authentication β†’ Users
  • Click Add user β†’ Create new user
  • Enter email and password
  • Check Auto Confirm User
  • Click Create user

That's it! No password hashing or scripts needed.

  1. Run the development server
npm run dev

Open http://localhost:3000 to see the website.

πŸ“ Project Structure

thepractitionerspod/
β”œβ”€β”€ app/                          # Next.js 14 App Router
β”‚   β”œβ”€β”€ (pages)/
β”‚   β”‚   β”œβ”€β”€ page.tsx             # Home page
β”‚   β”‚   β”œβ”€β”€ episodes/            # Episodes pages
β”‚   β”‚   β”œβ”€β”€ guests/              # Guests directory
β”‚   β”‚   β”œβ”€β”€ apply/               # Guest application
β”‚   β”‚   β”œβ”€β”€ about/               # About page
β”‚   β”‚   └── contact/             # Contact page
β”‚   β”œβ”€β”€ admin/                   # Admin dashboard
β”‚   β”‚   β”œβ”€β”€ page.tsx            # Dashboard home
β”‚   β”‚   β”œβ”€β”€ login/              # Admin login
β”‚   β”‚   β”œβ”€β”€ applications/       # Manage applications
β”‚   β”‚   └── episodes/           # Manage episodes
β”‚   β”œβ”€β”€ api/                     # API routes
β”‚   β”‚   β”œβ”€β”€ auth/               # NextAuth endpoints
β”‚   β”‚   β”œβ”€β”€ newsletter/         # Newsletter subscription
β”‚   β”‚   β”œβ”€β”€ contact/            # Contact form
β”‚   β”‚   └── applications/       # Guest applications
β”‚   β”œβ”€β”€ layout.tsx              # Root layout
β”‚   └── globals.css             # Global styles
β”œβ”€β”€ components/                  # React components
β”‚   β”œβ”€β”€ Navigation.tsx          # Header navigation
β”‚   β”œβ”€β”€ Footer.tsx              # Footer
β”‚   β”œβ”€β”€ EpisodeCard.tsx         # Episode display
β”‚   β”œβ”€β”€ NewsletterSignup.tsx    # Newsletter form
β”‚   └── ...
β”œβ”€β”€ lib/                         # Utility libraries
β”‚   β”œβ”€β”€ prisma.ts               # Prisma client
β”‚   β”œβ”€β”€ auth.ts                 # NextAuth configuration
β”‚   └── youtube.ts              # YouTube API integration
β”œβ”€β”€ prisma/                      # Database schema
β”‚   └── schema.prisma           # Prisma schema
β”œβ”€β”€ public/                      # Static assets
β”œβ”€β”€ tailwind.config.ts          # Tailwind configuration
β”œβ”€β”€ tsconfig.json               # TypeScript configuration
└── package.json                # Dependencies

🎨 Design System

Colors

  • Primary: Deep Navy (#1a2332)
  • Accent: Muted Blue (#4a5f7f)
  • Text: Charcoal (#1a202c)
  • Background: White (#ffffff) / Light Gray (#f8f9fa)

Typography

  • Font Family: Inter (sans-serif)
  • Heading Scale: 5xl (48px) to xl (20px)
  • Body: 16-18px with 1.6-1.8 line height
  • Letter Spacing: 0.02em for headings

Components

  • Clean, minimal cards with subtle borders
  • Smooth transitions (350ms duration)
  • Hover states with color changes
  • Responsive breakpoints (mobile-first)

πŸ—„οΈ Database Schema

Main Tables

  • Users: Admin authentication
  • Episodes: Podcast episodes with YouTube data
  • Guests: Featured guest profiles
  • GuestApplications: Guest application submissions
  • NewsletterSubscribers: Email subscribers
  • ContactMessages: Contact form submissions

See prisma/schema.prisma for complete schema.

πŸ”Œ API Routes

Public Routes

  • POST /api/newsletter/subscribe - Newsletter subscription
  • POST /api/contact - Contact form submission
  • POST /api/applications/submit - Guest application submission

Protected Routes (Admin)

  • GET /api/admin/applications - List all applications
  • PATCH /api/admin/applications/[id] - Update application status
  • POST /api/admin/episodes - Create new episode
  • GET /api/youtube/sync - Sync episodes from YouTube

πŸ” Authentication

The admin dashboard is protected by Supabase Auth.

Benefits:

  • Built-in user management
  • Email verification
  • Password reset functionality
  • Session management
  • Optional social logins (Google, GitHub, etc.)

Login: Visit /admin/login with credentials created in Supabase dashboard

πŸ“§ Email Integration

Email templates and sending powered by Resend.

Automated Emails:

  • Guest application confirmation
  • Application status updates
  • Newsletter welcome email
  • Contact form acknowledgment
  • Admin notifications

πŸŽ₯ YouTube Integration

The YouTube Data API v3 is used to:

  • Fetch channel videos automatically
  • Pull video metadata (title, description, thumbnail)
  • Get view counts and duration
  • Embed videos responsively

Setup:

  1. Create a Google Cloud project
  2. Enable YouTube Data API v3
  3. Generate API key
  4. Add to .env file

πŸ“± Responsive Design

  • Mobile: 320px - 768px
  • Tablet: 768px - 1024px
  • Desktop: 1024px+
  • Max Content Width: 1200px

🚒 Deployment

Vercel (Recommended)

  1. Push code to GitHub
  2. Import project in Vercel
  3. Add environment variables
  4. Deploy

Manual Deployment

# Build for production
npm run build

# Start production server
npm start

Database

  • Your Supabase database is already production-ready
  • Make sure you've run npm run db:push to create tables

πŸ”§ Development

Commands

npm run dev          # Start development server
npm run build        # Build for production
npm run start        # Start production server
npm run lint         # Run ESLint
npm run db:push      # Push schema to database
npm run db:studio    # Open Prisma Studio
npm run db:generate  # Generate Prisma Client

Environment Variables

All required environment variables are documented in .env.example.

πŸ“ Content Management

Adding Episodes

  1. Via YouTube: Episodes automatically sync from your YouTube channel
  2. Via Admin Dashboard: Manually add episodes with YouTube video IDs
  3. Via Database: Direct database insertion with Prisma Studio

Managing Applications

  1. Log in to /admin
  2. Navigate to Applications
  3. Review applications and update status
  4. Send responses via email automation

🎯 SEO & Performance

  • Meta Tags: Unique titles and descriptions for each page
  • Open Graph: Social media preview optimization
  • Image Optimization: Next.js Image component
  • Lazy Loading: Images and videos load on demand
  • Fast Loading: Optimized assets and code splitting

🀝 Contributing

This is a custom project for The Practitioners Pod. For issues or suggestions:

  1. Document the issue
  2. Contact the development team
  3. Submit detailed bug reports or feature requests

πŸ“„ License

Proprietary - All rights reserved by The Practitioners Pod.

πŸ“ž Support

For technical support or questions:

πŸ™ Acknowledgments

Built with:


The Practitioners Pod - Conversations with Tech Practitioners Who Build the Future

About

Professional podcast platform featuring tech industry leaders with integrated guest management system

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors