Installation
Installation
Section titled “Installation”This guide covers installing Podcast Framework in detail, including system requirements, manual setup, and troubleshooting.
System Requirements
Section titled “System Requirements”Required
Section titled “Required”Recommended
Section titled “Recommended”Account Setup
Section titled “Account Setup”You’ll need accounts for:
- Sanity (free tier) - Required for CMS
- GitHub (free) - Recommended for deployment
- Cloudflare (free tier) - Recommended for hosting
Optional services:
- ConvertKit (free tier) - Newsletter signups
- Resend (free tier) - Contribution emails
- Google Analytics (free) - Site analytics
- Sentry (free tier) - Error tracking
Installation Methods
Section titled “Installation Methods”Method 1: CLI (Recommended)
Section titled “Method 1: CLI (Recommended)”The fastest way to get started:
# Create new projectnpm create @rejected-media/podcast-framework my-podcast
# Navigate to projectcd my-podcastInteractive Prompts:
The CLI will ask for:
- Description (optional with default) - Press Enter to use:
"my-podcast - A podcast built with @podcast-framework"
That’s the only prompt! All features are enabled by default.
CLI Flags:
# Skip all prompts (use defaults)npm create @rejected-media/podcast-framework my-podcast --yes
# Use specific template (future feature)npm create @rejected-media/podcast-framework my-podcast --template advanced
# Skip npm installnpm create @rejected-media/podcast-framework my-podcast --skip-installWhat You Get:
- ✅ Complete project structure
- ✅ All features enabled (newsletter, search, contributions, transcripts)
- ✅ Configuration files (podcast.config.js, astro.config.mjs, .env.template)
- ✅ Ready for Sanity CMS setup
Method 2: Clone Template
Section titled “Method 2: Clone Template”Clone the template repository directly:
# Clone templategit clone https://github.com/rejected-media/podcast-template.git my-podcast
# Navigate to projectcd my-podcast
# Remove git historyrm -rf .gitgit init
# Install dependenciesnpm installMethod 3: GitHub Template
Section titled “Method 3: GitHub Template”Use GitHub’s template feature:
- Go to podcast-template
- Click “Use this template”
- Click “Create a new repository”
- Name your repository
- Click “Create repository”
- Clone your new repository:
git clone https://github.com/your-username/your-podcast.gitcd your-podcastnpm installMethod 4: Manual Setup
Section titled “Method 4: Manual Setup”For advanced users who want full control:
# Create new Astro projectnpm create astro@latest my-podcast
# Navigate to projectcd my-podcast
# Install Podcast Framework packagesnpm install @rejected-media/podcast-framework-core @rejected-media/podcast-framework-sanity-schema
# Install peer dependenciesnpm install @sanity/client @sanity/cli
# Install Tailwind CSSnpx astro add tailwind
# Create required directoriesmkdir -p src/pages/{episodes,guest,guests,api}mkdir -p src/componentsmkdir -p sanity/schemasSanity CMS Setup
Section titled “Sanity CMS Setup”Step 1: Create Sanity Project
Section titled “Step 1: Create Sanity Project”Create a project at sanity.io/manage:
- Click “Create project”
- Enter project name:
my-podcast - Choose “Production” dataset
- Save your Project ID from the project settings
Step 2: Add Project ID
Section titled “Step 2: Add Project ID”Update sanity.config.ts with your project ID:
export default defineConfig({ name: 'default', title: 'my-podcast',
projectId: 'abc123xyz', // ← Replace with your actual Project ID dataset: 'production',
// ...});Step 3: Configure Environment Variables
Section titled “Step 3: Configure Environment Variables”Already generated by CLI! Just update with your values in .env:
PUBLIC_SANITY_PROJECT_ID="abc123xyz" # Your Project ID from Step 1PUBLIC_SANITY_DATASET="production"PUBLIC_SANITY_API_VERSION="2024-01-01"
SANITY_TOKEN="your_write_token" # Optional: for RSS importThat’s it! The schemas are already configured in sanity/schemas/index.ts.
Environment Configuration
Section titled “Environment Configuration”Step 1: Create .env File
Section titled “Step 1: Create .env File”cp .env.template .envStep 2: Required Variables
Section titled “Step 2: Required Variables”Add these required variables to .env:
# Sanity CMS (Required)PUBLIC_SANITY_PROJECT_ID="your-project-id"PUBLIC_SANITY_DATASET="production"PUBLIC_SANITY_API_VERSION="2024-01-01"
# Site Configuration (Required)PUBLIC_SITE_URL="http://localhost:4321"Step 3: Optional Variables
Section titled “Step 3: Optional Variables”Add optional services as needed:
# Newsletter (Optional - ConvertKit)CONVERTKIT_API_KEY="your-convertkit-api-key"CONVERTKIT_FORM_ID="your-form-id"
# Contributions (Optional - Resend)RESEND_API_KEY="your-resend-api-key"
# Analytics (Optional - Google Analytics)PUBLIC_GA_MEASUREMENT_ID="G-XXXXXXXXXX"
# Error Tracking (Optional - Sentry)SENTRY_DSN="your-sentry-dsn"
# RSS Import (Optional)RSS_FEED_URL="https://your-podcast.com/feed.xml"Verify Installation
Section titled “Verify Installation”Check Dependencies
Section titled “Check Dependencies”npm list @rejected-media/podcast-framework-coreShould output:
└── @rejected-media/[email protected]Start Dev Server
Section titled “Start Dev Server”npm run devVisit http://localhost:4321 - you should see your podcast homepage!
Start Sanity Studio
Section titled “Start Sanity Studio”In a new terminal:
npm run dev:sanityVisit http://localhost:3333 - you should see Sanity Studio!
Package Versions
Section titled “Package Versions”Current stable versions (generated by CLI):
{ "dependencies": { "@rejected-media/podcast-framework-cli": "^0.1.20", "@rejected-media/podcast-framework-core": "^0.1.2", "@rejected-media/podcast-framework-sanity-schema": "^1.1.0", "@astrojs/tailwind": "^5.1.0", "astro": "^5.1.0", "react": "^19.0.0", "react-dom": "^19.0.0", "resend": "^4.0.0", "sanity": "^4.0.0", "@sanity/client": "^6.0.0", "@sanity/vision": "^3.0.0", "styled-components": "^6.1.15", "tailwindcss": "^3.4.0" }}TypeScript Configuration
Section titled “TypeScript Configuration”Podcast Framework requires TypeScript with strict mode. Your tsconfig.json should include:
{ "extends": "astro/tsconfigs/strict", "compilerOptions": { "jsx": "react-jsx", "jsxImportSource": "react" }}Build Configuration
Section titled “Build Configuration”Your astro.config.mjs should include:
import { defineConfig } from 'astro/config';import tailwind from '@astrojs/tailwind';
export default defineConfig({ integrations: [tailwind()], output: 'static', build: { inlineStylesheets: 'auto', },});Troubleshooting
Section titled “Troubleshooting”Installation Issues
Section titled “Installation Issues”npm install fails
Section titled “npm install fails”Try using a different package manager:
# Try pnpmnpm install -g pnpmpnpm install
# Or try yarnnpm install -g yarnyarn install“ERESOLVE unable to resolve dependency tree”
Section titled ““ERESOLVE unable to resolve dependency tree””Use the legacy peer deps flag:
npm install --legacy-peer-deps“Module not found: @rejected-media/podcast-framework-core”
Section titled ““Module not found: @rejected-media/podcast-framework-core””Make sure the package is installed:
npm install @rejected-media/podcast-framework-coreSanity Issues
Section titled “Sanity Issues””Project not found”
Section titled “”Project not found””Check your .env file - PUBLIC_SANITY_PROJECT_ID must match your Sanity project:
# List your Sanity projectsnpx sanity projects list“Dataset not found”
Section titled ““Dataset not found””Create the production dataset:
cd sanitynpx sanity dataset create productioncd ..“Schema deploy failed”
Section titled ““Schema deploy failed””Make sure you’re in the sanity directory:
cd sanitynpx sanity schema deploycd ..Build Issues
Section titled “Build Issues””Build failed: Type error”
Section titled “”Build failed: Type error””Check your Node.js version:
node --version # Must be v18.0.0 or higherUpdate if needed:
# Using nvmnvm install 18nvm use 18“Cannot find module ’…’”
Section titled ““Cannot find module ’…’””Clear node_modules and reinstall:
rm -rf node_modules package-lock.jsonnpm install“Out of memory” during build
Section titled ““Out of memory” during build”Increase Node.js memory:
NODE_OPTIONS="--max-old-space-size=4096" npm run buildPort Conflicts
Section titled “Port Conflicts”Port 4321 already in use
Section titled “Port 4321 already in use”Change the dev server port:
npm run dev -- --port 3000Port 3333 already in use (Sanity)
Section titled “Port 3333 already in use (Sanity)”Change Sanity’s port:
cd sanitynpx sanity dev --port 3334cd ..IDE Setup
Section titled “IDE Setup”VS Code
Section titled “VS Code”Recommended extensions:
{ "recommendations": [ "astro-build.astro-vscode", "bradlc.vscode-tailwindcss", "esbenp.prettier-vscode", "dbaeumer.vscode-eslint" ]}Settings
Section titled “Settings”Add to .vscode/settings.json:
{ "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode", "[astro]": { "editor.defaultFormatter": "astro-build.astro-vscode" }}Updating Podcast Framework
Section titled “Updating Podcast Framework”Update Core Package
Section titled “Update Core Package”npm update @rejected-media/podcast-framework-coreUpdate All Packages
Section titled “Update All Packages”npm updateCheck for Updates
Section titled “Check for Updates”npm outdatedBreaking Changes
Section titled “Breaking Changes”Always check the GitHub releases page before updating to a new major version.
Next Steps
Section titled “Next Steps”Now that you have Podcast Framework installed:
- Project Structure - Understand the file layout
- Configuration - Configure your site
- Quick Start - Build your first page
- Components - Learn about the components
Getting Help
Section titled “Getting Help”- GitHub Discussions - Ask questions
- GitHub Issues - Report installation problems
- Quick Start - Simplified guide