PODSTR uses environment variables to configure your podcast metadata and settings. This makes it easy to customize your podcast without modifying code.
-
Copy the example configuration:
cp .env.example .env
-
Edit the
.envfile with your podcast details:# Required: Your Nostr public key VITE_CREATOR_NPUB=npub1your_public_key_here # Basic podcast info VITE_PODCAST_TITLE=My Amazing Podcast VITE_PODCAST_DESCRIPTION=A podcast about amazing things VITE_PODCAST_AUTHOR=Your Name VITE_PODCAST_EMAIL=you@example.com
-
Start the development server:
npm run dev
These are the minimum settings you should configure:
VITE_CREATOR_NPUB- Your Nostr public key (npub format)VITE_PODCAST_TITLE- Your podcast nameVITE_PODCAST_DESCRIPTION- Brief description of your podcastVITE_PODCAST_AUTHOR- Your name as the host/creatorVITE_PODCAST_EMAIL- Contact email for your podcast
VITE_PODCAST_IMAGE- URL to your podcast cover art (1400x1400px minimum)VITE_PODCAST_WEBSITE- Your podcast website URLVITE_PODCAST_COPYRIGHT- Copyright notice
VITE_PODCAST_CATEGORIES- Comma-separated categories (e.g., "Technology,Education")VITE_PODCAST_LANGUAGE- Language code (e.g., "en-us", "es-es")VITE_PODCAST_EXPLICIT- Set to "true" if explicit content
Configure Lightning payments for listener support:
VITE_PODCAST_VALUE_AMOUNT- Suggested payment amount in sats per minuteVITE_PODCAST_VALUE_CURRENCY- Currency type ("sats", "USD", "BTC", etc.)VITE_PODCAST_VALUE_RECIPIENTS- JSON array of payment recipients
VITE_PODCAST_LOCATION_NAME- Recording location nameVITE_PODCAST_LOCATION_GEO- GPS coordinates (latitude,longitude)VITE_PODCAST_GUID- Unique podcast identifier (defaults to your npub)
The VITE_PODCAST_VALUE_RECIPIENTS field accepts a JSON array defining how Lightning payments are split:
[
{
"name": "Host",
"type": "node",
"address": "your_lightning_address_or_pubkey",
"split": 60,
"fee": false
},
{
"name": "Producer",
"type": "keysend",
"address": "producer_pubkey",
"split": 30,
"customKey": "podcast",
"customValue": "producer-fee"
},
{
"name": "Platform",
"type": "node",
"address": "platform_pubkey",
"split": 10,
"fee": true
}
]Split percentages should total 100%.
Define who's involved in your podcast with VITE_PODCAST_PERSON:
[
{
"name": "Your Name",
"role": "host",
"group": "cast",
"img": "https://example.com/your-photo.jpg",
"href": "https://yourwebsite.com"
},
{
"name": "Producer Name",
"role": "producer",
"group": "crew"
}
]Add support links with VITE_PODCAST_FUNDING (comma-separated):
VITE_PODCAST_FUNDING=lightning:your@address.com,https://donate.example.com,bitcoin:bc1address
| Variable | Type | Description | Default |
|---|---|---|---|
VITE_CREATOR_NPUB |
string | Your Nostr public key | Example npub |
VITE_PODCAST_TITLE |
string | Podcast name | "PODSTR Podcast" |
VITE_PODCAST_DESCRIPTION |
string | Podcast description | Example description |
VITE_PODCAST_AUTHOR |
string | Host/creator name | "PODSTR Creator" |
VITE_PODCAST_EMAIL |
string | Contact email | "creator@podstr.example" |
VITE_PODCAST_IMAGE |
string | Cover art URL | Example image URL |
VITE_PODCAST_LANGUAGE |
string | Language code | "en-us" |
VITE_PODCAST_CATEGORIES |
string | Comma-separated categories | "Technology,Social Networking" |
VITE_PODCAST_EXPLICIT |
boolean | Explicit content flag | false |
VITE_PODCAST_WEBSITE |
string | Podcast website | "https://podstr.example" |
VITE_PODCAST_COPYRIGHT |
string | Copyright notice | "© 2025 PODSTR Creator" |
VITE_PODCAST_VALUE_AMOUNT |
number | Sats per minute | 1000 |
VITE_PODCAST_VALUE_CURRENCY |
string | Payment currency | "sats" |
VITE_PODCAST_VALUE_RECIPIENTS |
JSON array | Payment recipients | Example recipients |
VITE_RSS_TTL |
number | RSS cache time (minutes) | 60 |
After configuring your environment variables, you can validate the configuration by:
- Starting the development server (
npm run dev) - Checking the browser console for any parsing errors
- Visiting the podcast pages to see if your metadata appears correctly
- Generating the RSS feed to ensure all fields are populated
- JSON fields: Use online JSON validators to ensure your JSON arrays are properly formatted
- URLs: Always use complete URLs starting with
https:// - Lightning addresses: Test your Lightning addresses before adding them to recipients
- Images: Use high-quality square images (1400x1400px minimum) for best podcast directory compatibility
- Categories: Check common podcast categories used by Apple Podcasts and Spotify for better discoverability
JSON parsing errors: Check the browser console for detailed error messages about malformed JSON in environment variables.
Missing metadata: Ensure all required VITE_ prefixed variables are set in your .env file.
Lightning recipients not working: Verify that split percentages total 100% and all addresses are valid Lightning addresses or node public keys.