Skip to content

Installation

This guide covers installing Podcast Framework in detail, including system requirements, manual setup, and troubleshooting.

You’ll need accounts for:

  1. Sanity (free tier) - Required for CMS
  2. GitHub (free) - Recommended for deployment
  3. 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

The fastest way to get started:

Terminal window
# Create new project
npm create @rejected-media/podcast-framework my-podcast
# Navigate to project
cd my-podcast

Interactive 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:

Terminal window
# 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 install
npm create @rejected-media/podcast-framework my-podcast --skip-install

What 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

Clone the template repository directly:

Terminal window
# Clone template
git clone https://github.com/rejected-media/podcast-template.git my-podcast
# Navigate to project
cd my-podcast
# Remove git history
rm -rf .git
git init
# Install dependencies
npm install

Use GitHub’s template feature:

  1. Go to podcast-template
  2. Click “Use this template”
  3. Click “Create a new repository”
  4. Name your repository
  5. Click “Create repository”
  6. Clone your new repository:
Terminal window
git clone https://github.com/your-username/your-podcast.git
cd your-podcast
npm install

For advanced users who want full control:

Terminal window
# Create new Astro project
npm create astro@latest my-podcast
# Navigate to project
cd my-podcast
# Install Podcast Framework packages
npm install @rejected-media/podcast-framework-core @rejected-media/podcast-framework-sanity-schema
# Install peer dependencies
npm install @sanity/client @sanity/cli
# Install Tailwind CSS
npx astro add tailwind
# Create required directories
mkdir -p src/pages/{episodes,guest,guests,api}
mkdir -p src/components
mkdir -p sanity/schemas

Create a project at sanity.io/manage:

  1. Click “Create project”
  2. Enter project name: my-podcast
  3. Choose “Production” dataset
  4. Save your Project ID from the project settings

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',
// ...
});

Already generated by CLI! Just update with your values in .env:

Terminal window
PUBLIC_SANITY_PROJECT_ID="abc123xyz" # Your Project ID from Step 1
PUBLIC_SANITY_DATASET="production"
PUBLIC_SANITY_API_VERSION="2024-01-01"
SANITY_TOKEN="your_write_token" # Optional: for RSS import

That’s it! The schemas are already configured in sanity/schemas/index.ts.

Terminal window
cp .env.template .env

Add these required variables to .env:

Terminal window
# 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"

Add optional services as needed:

Terminal window
# 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"
NOTIFICATION_EMAIL="[email protected]"
# 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"
Terminal window
npm list @rejected-media/podcast-framework-core

Should output:

└── @rejected-media/[email protected]
Terminal window
npm run dev

Visit http://localhost:4321 - you should see your podcast homepage!

In a new terminal:

Terminal window
npm run dev:sanity

Visit http://localhost:3333 - you should see Sanity Studio!

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"
}
}

Podcast Framework requires TypeScript with strict mode. Your tsconfig.json should include:

{
"extends": "astro/tsconfigs/strict",
"compilerOptions": {
"jsx": "react-jsx",
"jsxImportSource": "react"
}
}

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',
},
});

Try using a different package manager:

Terminal window
# Try pnpm
npm install -g pnpm
pnpm install
# Or try yarn
npm install -g yarn
yarn install

“ERESOLVE unable to resolve dependency tree”

Section titled ““ERESOLVE unable to resolve dependency tree””

Use the legacy peer deps flag:

Terminal window
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:

Terminal window
npm install @rejected-media/podcast-framework-core

Check your .env file - PUBLIC_SANITY_PROJECT_ID must match your Sanity project:

Terminal window
# List your Sanity projects
npx sanity projects list

Create the production dataset:

Terminal window
cd sanity
npx sanity dataset create production
cd ..

Make sure you’re in the sanity directory:

Terminal window
cd sanity
npx sanity schema deploy
cd ..

Check your Node.js version:

Terminal window
node --version # Must be v18.0.0 or higher

Update if needed:

Terminal window
# Using nvm
nvm install 18
nvm use 18

Clear node_modules and reinstall:

Terminal window
rm -rf node_modules package-lock.json
npm install

Increase Node.js memory:

Terminal window
NODE_OPTIONS="--max-old-space-size=4096" npm run build

Change the dev server port:

Terminal window
npm run dev -- --port 3000

Change Sanity’s port:

Terminal window
cd sanity
npx sanity dev --port 3334
cd ..

Recommended extensions:

{
"recommendations": [
"astro-build.astro-vscode",
"bradlc.vscode-tailwindcss",
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint"
]
}

Add to .vscode/settings.json:

{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[astro]": {
"editor.defaultFormatter": "astro-build.astro-vscode"
}
}
Terminal window
npm update @rejected-media/podcast-framework-core
Terminal window
npm update
Terminal window
npm outdated

Always check the GitHub releases page before updating to a new major version.

Now that you have Podcast Framework installed:

  1. Project Structure - Understand the file layout
  2. Configuration - Configure your site
  3. Quick Start - Build your first page
  4. Components - Learn about the components