- π About The Project
- β¨ Features
- π οΈ Built With
- ποΈ Project Architecture
- π Getting Started
- π± Usage Guide
- π Screenshots
- π§ Configuration
- π API Documentation
- π Future Enhancements
- π€ Contributing
- π License
- π¨βπ» Developer
Podstream is a comprehensive podcast platform designed to bridge the gap between content creators and audio enthusiasts. It transforms the traditional podcasting experience by providing an all-in-one solution for podcast creation, distribution, and discovery.
The podcasting industry often suffers from:
- Fragmented tools for content creation and distribution
- Limited discovery mechanisms for new podcasts
- Poor user experience across different platforms
- Lack of comprehensive analytics for creators
- Complex monetization and audience engagement tools
Podstream addresses these challenges by providing:
- Unified Platform for creation, hosting, and discovery
- Advanced Audio Player with seamless streaming capabilities
- Creator-Focused Dashboard with detailed analytics
- Smart Discovery through categories, tags, and search
- Multi-Role System supporting users, creators, and administrators
Click to view screenshots
Clean and intuitive user dashboard with quick access to all features
User Profile Page with Edit Options
Simple drag-and-drop file upload with real-time preview
- Custom Audio Controls: Play, pause, seek, volume control
- Progress Tracking: Visual progress bar with time indicators
- Quality Streaming: High-quality audio playback with Cloudinary CDN
- Responsive Design: Seamless experience across all devices
- Personal Dashboard: Comprehensive podcast management interface
- Real-time Analytics: Track plays, likes, and audience engagement
- Content Management: Easy upload, edit, and delete functionality
- Performance Insights: Detailed analytics on listener behavior
- User Management: Complete user administration system
- Content Moderation: Review and manage all platform content
- Platform Analytics: System-wide statistics and insights
- Category Management: Organize and maintain content taxonomies
- High-Quality Audio Streaming: Support for MP3, WAV, and OGG formats
- Custom Audio Player: Built-in player with play/pause, seek, volume control
- Audio Upload: Seamless audio file upload with Cloudinary integration
- Audio Processing: Automatic duration calculation and metadata extraction
- Playback Controls: Advanced seek functionality and audio quality optimization
- Multi-Role System: User, Creator, and Admin roles with distinct permissions
- Secure Authentication: JWT-based authentication with bcrypt password hashing
- Profile Management: Customizable user profiles with bio and profile images
- Password Recovery: Secure forgot password functionality with email verification
- Notification Preferences: Granular control over email and in-app notifications
- Podcast Creation: Intuitive podcast upload form with metadata management
- Rich Media Support: Cover image uploads with automatic optimization
- Category System: Organized content categorization for easy discovery
- Tag Management: Flexible tagging system for enhanced searchability
- Draft/Published States: Content workflow management for creators
- Personal Dashboard: Comprehensive overview of podcast statistics
- Analytics Insights: Track plays, likes, and engagement metrics
- Content Management: Edit, update, or delete uploaded podcasts
- Performance Metrics: Detailed analytics on audience engagement
- Upload Management: Bulk operations and content organization tools
- User Management: Complete user administration with role assignments
- Content Moderation: Review and manage all platform content
- Analytics Dashboard: Platform-wide statistics and insights
- Category & Tag Management: Organize and maintain content taxonomies
- System Monitoring: Real-time platform health and performance metrics
- Bulk Operations: Efficient management of large content volumes
- Advanced Search: Full-text search across podcasts and creators
- Category Filtering: Browse content by specific categories
- Like System: Social engagement features for content appreciation
- Play Tracking: Automatic play count recording for analytics
- Responsive Design: Optimized for all device sizes and platforms
- Contact System: Built-in contact form for user inquiries
- Email Integration: Automated email notifications and newsletters
- Newsletter Subscription: Keep users engaged with regular updates
- Notification System: Real-time updates for user activities
- βοΈ React.js 18.3.1 - Modern UI library with hooks
- β‘ Vite - Lightning-fast build tool and development server
- π¨ Tailwind CSS - Utility-first CSS framework for rapid styling
- π§ React Router Dom - Client-side routing and navigation
- π Framer Motion - Smooth animations and transitions
- π₯ React Hot Toast - Beautiful notification system
- π‘ Axios - HTTP client for API communication
- π Formik & Yup - Form handling and validation
- π― Lucide React - Modern icon library
- π΅ React Audio Player - Specialized audio playback components
- π Recharts - Data visualization and analytics charts
- β° Moment.js - Date and time manipulation
- π’ Node.js - JavaScript runtime environment
- π Express.js - Web application framework
- π MongoDB - NoSQL database with Mongoose ODM
- π JWT - JSON Web Tokens for secure authentication
- π Bcrypt.js - Password hashing and security
- βοΈ Cloudinary - Cloud-based media management and optimization
- π€ Multer - File upload middleware
- π§ Nodemailer - Email sending capabilities
- π Morgan - HTTP request logging
- π CORS - Cross-Origin Resource Sharing configuration
- β Joi - Data validation and sanitization
- π ESLint - Code linting and quality assurance
- π¨ PostCSS - CSS post-processing
- π§ Autoprefixer - CSS vendor prefixing
- π Vercel - Frontend and backend deployment platform
- π Concurrently - Run multiple scripts simultaneously
π Podstream/
βββ π client/ # React Frontend Application
β βββ π public/ # Static assets and branding
β β βββ π images/image/ # User avatars and content images
β β βββ π podstream-logo.svg # Custom platform logo
β β βββ π logo.svg # Additional branding assets
β βββ π src/
β β βββ π components/ # Reusable UI components
β β β βββ π AdminRoute.jsx # Admin access protection
β β β βββ π AudioPlayer.jsx # Custom audio player
β β β βββ π CategoryFilter.jsx # Content filtering
β β β βββ π Layout.jsx # Main app layout
β β β βββ π PodcastCard.jsx # Podcast display component
β β β βββ π PrivateRoute.jsx # Authentication guard
β β β βββ π SearchBar.jsx # Search functionality
β β β βββ π UploadForm.jsx # File upload interface
β β βββ π context/
β β β βββ π AuthContext.jsx # Global authentication state
β β βββ π pages/ # Application pages
β β β βββ π ADMIN/ # Admin panel pages
β β β β βββ π AdminOverview.jsx # Admin dashboard
β β β β βββ π AdminUsers.jsx # User management
β β β β βββ π AdminPodcasts.jsx # Content moderation
β β β β βββ π AdminAnalytics.jsx # Platform analytics
β β β βββ π Dashboard.jsx # Creator dashboard
β β β βββ π Home.jsx # Main homepage
β β β βββ π Login.jsx # User authentication
β β β βββ π PodcastCreate.jsx # Content creation
β β β βββ π PodcastDetails.jsx # Individual podcast view
β β β βββ π Profile.jsx # User profile management
β β βββ π utils/
β β βββ π api.js # API configuration and calls
β βββ π package.json # Frontend dependencies
β βββ π vite.config.js # Vite configuration
β βββ π tailwind.config.js # Tailwind CSS configuration
β
βββ π server/ # Node.js Backend API
β βββ π controllers/ # Business logic handlers
β β βββ π adminController.js # Admin operations
β β βββ π analyticsController.js # Data analytics
β β βββ π podcastController.js # Podcast CRUD operations
β β βββ π userController.js # User management
β β βββ π contactController.js # Contact form handling
β β βββ π emailController.js # Email notifications
β βββ π middleware/ # Custom middleware functions
β β βββ π authMiddleware.js # Authentication verification
β β βββ π errorHandler.js # Error handling
β β βββ π roleMiddleware.js # Role-based access control
β βββ π models/ # MongoDB schema definitions
β β βββ π User.js # User data model
β β βββ π Podcast.js # Podcast data model
β β βββ π Category.js # Category taxonomy
β β βββ π Tag.js # Tag system
β β βββ π Analytics.js # Analytics data model
β βββ π routes/ # API endpoint definitions
β β βββ π adminRoutes.js # Admin panel APIs
β β βββ π podcastRoutes.js # Podcast operations
β β βββ π userRoutes.js # User management
β β βββ π analyticsRoutes.js # Analytics endpoints
β β βββ π categoryRoutes.js # Category management
β β βββ π tagRoutes.js # Tag management
β βββ π utils/ # Helper functions and utilities
β β βββ π cloudinary.js # Media upload configuration
β β βββ π emailSender.js # Email service setup
β β βββ π jwtUtils.js # JWT token utilities
β β βββ π csvExporter.js # Data export functionality
β βββ π scripts/ # Utility scripts
β β βββ π seedCategories.js # Database seeding
β βββ π seed/ # Seed data
β β βββ π categories.js # Default categories
β β βββ π tags.js # Default tags
β βββ π server.js # Main server entry point
β βββ π package.json # Backend dependencies
β βββ π vercel.json # Vercel deployment config
β
βββ π package.json # Root project configuration
- Node.js (v16 or higher)
- MongoDB (local or MongoDB Atlas)
- Cloudinary Account (for media storage)
- Email Service (Gmail/SendGrid for notifications)
git clone https://github.com/raj-deshmukh6403/Podstream.git
cd Podstream# Install all dependencies (root, client, and server)
npm run install-all
# Or install individually
npm install # Root dependencies
npm run install-client # Frontend dependencies
npm run install-server # Backend dependenciesCreate .env file in the server directory:
# Database Configuration
MONGODB_URI=mongodb://localhost:27017/podstream
# or for MongoDB Atlas:
# MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/podstream
# JWT Security
JWT_SECRET=your_super_secret_jwt_key_here
JWT_EXPIRE=30d
# Cloudinary Media Storage
CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name
CLOUDINARY_API_KEY=your_cloudinary_api_key
CLOUDINARY_API_SECRET=your_cloudinary_api_secret
# Email Service Configuration
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your_email@gmail.com
EMAIL_PASS=your_app_password
# Server Configuration
PORT=5000
NODE_ENV=productioncd server
npm run seed:categories # Populate default categories
npm run seed:tags # Populate default tags
npm run seed:all # Run all seeding scripts### π Access the Application
- **Client App**: http://localhost:5173
- **Backend API**: http://localhost:5000
- **Live Demo**: [https://podstreamf.vercel.app](https://podstreamf.vercel.app)
---
## π± Usage Guide
### For Listeners
1. **Registration & Discovery**
- Create an account or browse as a guest
- Explore podcasts by categories (Business, Comedy, Crime, etc.)
- Use advanced search to find specific content
- View podcast details and creator profiles
2. **Listening Experience**
- Click play on any podcast to start streaming
- Use custom audio controls (play, pause, seek, volume)
- Track your listening progress with visual indicators
- Like podcasts to save them to your favorites
3. **Profile Management**
- Customize your profile with bio and avatar
- View your listening history and liked podcasts
- Manage notification preferences
- Update account settings and preferences
### For Content Creators
1. **Getting Started**
- Register with creator role or upgrade existing account
- Complete profile setup with bio and profile image
- Access the creator dashboard for content management
2. **Creating Podcasts**
- Navigate to "Create Podcast" from dashboard
- Upload audio files (MP3, WAV, OGG) up to 50MB
- Add cover images with automatic optimization
- Configure metadata:
- Title and description
- Category selection
- Tags for better discovery
- Episode numbering and seasons
3. **Content Management**
- Monitor real-time analytics (plays, likes, engagement)
- Edit podcast details and metadata
- Manage draft and published states
- Track audience demographics and listening patterns
4. **Analytics & Insights**
- View comprehensive dashboard statistics
- Track performance metrics over time
- Monitor audience engagement and retention
- Export data for external analysis
### For Administrators
1. **Platform Overview**
- Access admin dashboard with platform-wide statistics
- Monitor user activity and content creation trends
- View system health and performance metrics
- Track revenue and platform growth
2. **Content Moderation**
- Review and approve new podcast submissions
- Manage content categories and tags
- Handle user reports and content violations
- Bulk operations for content management
3. **User Management**
- View and manage all user accounts
- Assign and modify user roles (User/Creator/Admin)
- Monitor user activity and engagement
- Handle user support requests and issues
4. **System Configuration**
- Configure platform settings and preferences
- Manage category and tag taxonomies
- Set up email notifications and system alerts
---
## π§ Configuration
### Environment Variables
Create a `.env` file in the `server` directory:
```bash
# Database Configuration
MONGODB_URI=mongodb://localhost:27017/podstream
# For MongoDB Atlas (Production):
MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/podstream
# JWT Security
JWT_SECRET=your-super-secret-jwt-key-here
JWT_EXPIRE=30d
# Cloudinary Media Storage
CLOUDINARY_CLOUD_NAME=your-cloudinary-cloud-name
CLOUDINARY_API_KEY=your-cloudinary-api-key
CLOUDINARY_API_SECRET=your-cloudinary-api-secret
# Email Service Configuration (Nodemailer)
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your-email@gmail.com
EMAIL_PASS=your-app-password
# Server Configuration
PORT=5000
NODE_ENV=production
FRONTEND_URL=http://localhost:5173
# File Upload Settings
MAX_FILE_SIZE=52428800 # 50MB in bytes
ALLOWED_AUDIO_TYPES=audio/mpeg,audio/wav,audio/ogg
ALLOWED_IMAGE_TYPES=image/jpeg,image/png,image/webpThe system allows dynamic configuration through environment variables and admin settings:
// Default platform settings (configurable via admin panel)
const defaultSettings = {
maxFileSize: 50, // 50MB max audio file size
maxImageSize: 10, // 10MB max image file size
allowedAudioFormats: ['mp3', 'wav', 'ogg'],
allowedImageFormats: ['jpg', 'jpeg', 'png', 'webp'],
maxPodcastsPerUser: 100, // Maximum podcasts per creator
maxCategories: 50, // Maximum number of categories
enableRegistration: true, // Allow new user registrations
enableGuestAccess: true, // Allow guest browsing
moderationEnabled: false, // Enable content moderation
analyticsRetention: 365, // Days to retain analytics data
};| Method | Endpoint | Description | Access |
|---|---|---|---|
| POST | /api/auth/register |
User registration | Public |
| POST | /api/auth/login |
User login | Public |
| POST | /api/auth/forgot-password |
Password reset request | Public |
| POST | /api/auth/reset-password |
Password reset confirmation | Public |
| GET | /api/auth/profile |
Get user profile | Private |
| PUT | /api/auth/profile |
Update user profile | Private |
| PUT | /api/auth/profile/image |
Update profile image | Private |
| Method | Endpoint | Description | Access |
|---|---|---|---|
| GET | /api/podcasts |
Get all podcasts (with pagination/search) | Public |
| GET | /api/podcasts/:id |
Get specific podcast | Public |
| POST | /api/podcasts |
Create new podcast | Creator+ |
| PUT | /api/podcasts/:id |
Update podcast | Creator/Admin |
| DELETE | /api/podcasts/:id |
Delete podcast | Creator/Admin |
| PUT | /api/podcasts/:id/like |
Toggle like status | Private |
| PUT | /api/podcasts/:id/play |
Record play count | Public |
| GET | /api/podcasts/user |
Get user's podcasts | Private |
| GET | /api/podcasts/stats |
Get podcast statistics | Creator+ |
| Method | Endpoint | Description | Access |
|---|---|---|---|
| GET | /api/categories |
Get all categories | Public |
| POST | /api/categories |
Create category | Admin |
| PUT | /api/categories/:id |
Update category | Admin |
| DELETE | /api/categories/:id |
Delete category | Admin |
| GET | /api/tags |
Get all tags | Public |
| POST | /api/tags |
Create tag | Admin |
| PUT | /api/tags/:id |
Update tag | Admin |
| DELETE | /api/tags/:id |
Delete tag | Admin |
| Method | Endpoint | Description | Access |
|---|---|---|---|
| GET | /api/admin/stats |
Get platform statistics | Admin |
| GET | /api/admin/users |
Get all users (with pagination) | Admin |
| POST | /api/admin/users |
Create new user | Admin |
| PUT | /api/admin/users/:id |
Update user details | Admin |
| DELETE | /api/admin/users/:id |
Delete user | Admin |
| GET | /api/admin/podcasts |
Get all podcasts for moderation | Admin |
| PUT | /api/admin/podcasts/:id |
Update podcast status | Admin |
| DELETE | /api/admin/podcasts/:id |
Delete any podcast | Admin |
| Method | Endpoint | Description | Access |
|---|---|---|---|
| GET | /api/analytics/overview |
Platform overview stats | Admin |
| GET | /api/analytics/users |
User engagement analytics | Admin |
| GET | /api/analytics/podcasts |
Podcast performance metrics | Creator+ |
| GET | /api/analytics/categories |
Category-wise statistics | Admin |
- JWT Tokens: Secure, stateless authentication
- Password Hashing: Bcrypt with salt rounds for password security
- Role-Based Access: Granular permissions for Users, Creators, and Admins
- Route Protection: Middleware-based route security
- Token Expiration: Automatic session management
- Input Validation: Joi schema validation for all inputs
- SQL Injection Prevention: Mongoose ODM with parameterized queries
- XSS Protection: Input sanitization and output encoding
- CORS Configuration: Controlled cross-origin resource sharing
- File Upload Security: Type validation and size limits
- Environment Variables: Secure configuration management
- Error Handling: Comprehensive error catching without data exposure
- Rate Limiting: API endpoint protection (can be implemented)
- HTTPS Ready: SSL/TLS support for production deployment
- Registration Trends: Track user growth over time
- Engagement Metrics: Monitor user activity and retention
- Role Distribution: Analyze user role adoption
- Geographic Data: User location and regional preferences
- Upload Statistics: Track content creation trends
- Play Counts: Monitor podcast popularity and engagement
- Category Performance: Analyze most popular content types
- Creator Insights: Individual creator performance metrics
- System Performance: Monitor server response times
- Storage Usage: Track media storage consumption
- Error Rates: Monitor system reliability
- Feature Usage: Analyze feature adoption and usage patterns
- Format Support: MP3, WAV, OGG audio formats
- Automatic Transcoding: Cloudinary-based audio optimization
- Duration Extraction: Automatic audio length calculation
- Quality Control: Audio quality validation and optimization
- Full-Text Search: Advanced search across titles and descriptions
- Faceted Search: Filter by categories, tags, creators
- Recommendation Engine: Content suggestion algorithms
- Trending Content: Popular and trending podcast identification
- Like System: Social engagement tracking
- Sharing Capabilities: Social media sharing integration
- Creator Following: User-creator relationship management
- Comment System: Community engagement features (extensible)
- Lazy Loading: Efficient content loading strategies
- Image Optimization: Automatic image compression and sizing
- CDN Integration: Cloudinary CDN for global content delivery
- Caching Strategies: Redis integration ready for enhanced performance
-
Build Configuration:
{ "buildCommand": "npm run build", "outputDirectory": "dist", "installCommand": "npm install" } -
Environment Variables:
VITE_API_URL=https://your-backend-domain.com/api
-
Production Environment:
NODE_ENV=production MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/podstream JWT_SECRET=your_production_jwt_secret # ... other production environment variables
-
Build Scripts:
{ "scripts": { "start": "node server.js", "build": "npm install" } }
# Production database setup
npm run seed:categories
npm run seed:tags
# Import any existing data
mongorestore --uri="your_production_mongodb_uri" --db=podstream ./backup-
π± Mobile Applications
- Native iOS and Android apps using React Native
- Offline podcast downloads for premium users
- Push notifications for new episodes and interactions
- Background audio playback with lock screen controls
-
οΏ½ AI-Powered Features
- Automatic transcript generation for accessibility
- AI-powered podcast recommendations
- Smart content categorization and tagging
- Voice-to-text search functionality
-
π° Monetization Features
- Creator revenue sharing program
- Premium subscriptions with exclusive content
- Integrated advertising platform
- Donation and tip system for creators
-
π Advanced Social Features
- User following and creator subscriptions
- Community discussions and comments
- Social sharing with custom previews
- Collaborative playlists and collections
-
π Enhanced Analytics
- Advanced listener demographics
- Geographic listening patterns
- Retention and engagement analytics
- A/B testing for content optimization
-
β‘ Performance Optimizations
- Redis caching layer implementation
- CDN integration for global content delivery
- Progressive Web App (PWA) features
- Advanced lazy loading and code splitting
-
π Security Enhancements
- Two-factor authentication (2FA)
- Advanced rate limiting and DDoS protection
- Content encryption for premium podcasts
- Comprehensive audit logging system
-
π³ DevOps Improvements
- Docker containerization for easy deployment
- CI/CD pipeline with automated testing
- Kubernetes orchestration for scalability
- Automated backup and disaster recovery
-
π§ Platform Expansion
- Multi-language support and localization
- API marketplace for third-party integrations
- White-label solutions for organizations
- Advanced admin tools and reporting
We welcome contributions from the community! Here's how you can help:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Make your changes
- Commit your changes
git commit -m 'Add some amazing feature' - Push to the branch
git push origin feature/amazing-feature
- Open a Pull Request
Found a bug? Please create an issue with:
- Clear description of the problem
- Steps to reproduce the issue
- Expected vs actual behavior
- Screenshots or screen recordings (if applicable)
- Environment details (browser, OS, device)
Have an idea for improving Podstream? We'd love to hear it! Create an issue with:
- Detailed description of the proposed feature
- Use case and benefits for users
- Mockups or examples (if applicable)
- Technical considerations or implementation ideas
- Code Style: Follow ESLint configuration and existing patterns
- Component Structure: Use functional components with hooks
- API Design: Follow RESTful principles with consistent responses
- Error Handling: Implement comprehensive error catching and user-friendly messages
- Documentation: Update documentation for new features and API changes
- Testing: Add unit tests for new components and API endpoints
This project is licensed under the ISC License - see the LICENSE file for details.
Full Stack Developer & MERN Stack Specialist
"Passionate about creating seamless digital experiences that connect creators with their audiences. I built Podstream to democratize podcast creation and make audio content more accessible to everyone."
- π Education: Information Technology & Engineering Student
- πΌ Experience: 2+ years in Full Stack Web Development
- π Location: Maharashtra, India
- β Built Podstream from concept to production deployment
- β Designed scalable MERN stack architecture
- β Implemented advanced audio streaming with Cloudinary
- β Created responsive, mobile-first user interface
- β Developed comprehensive admin panel and analytics
- β Integrated secure authentication and role-based access
- β Optimized for performance and SEO
"To expand Podstream into a comprehensive audio content ecosystem that empowers creators worldwide, fostering a global community where stories, knowledge, and creativity flow freely through the power of audio."
Made with β€οΈ by Rajvardhan Deshmukh
Β© 2024 Podstream. Empowering creators, connecting communities, one podcast at a time.





