{"id":30764570,"url":"https://github.com/bpavan16/murfy-podcasts","last_synced_at":"2025-09-04T17:10:32.723Z","repository":{"id":312895530,"uuid":"1048421018","full_name":"bPavan16/murfy-podcasts","owner":"bPavan16","description":"Murf Coding Challenge 4 solution : Murphy - An an AI Powered Podcast Generator ","archived":false,"fork":false,"pushed_at":"2025-09-02T17:50:37.000Z","size":155,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-02T18:13:48.304Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bPavan16.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-01T12:19:44.000Z","updated_at":"2025-09-02T17:50:40.000Z","dependencies_parsed_at":"2025-09-02T18:15:02.241Z","dependency_job_id":"e8d844cb-74f3-49f7-9f98-273aa2888ace","html_url":"https://github.com/bPavan16/murfy-podcasts","commit_stats":null,"previous_names":["bpavan16/murfy-podcasts"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/bPavan16/murfy-podcasts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bPavan16%2Fmurfy-podcasts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bPavan16%2Fmurfy-podcasts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bPavan16%2Fmurfy-podcasts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bPavan16%2Fmurfy-podcasts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bPavan16","download_url":"https://codeload.github.com/bPavan16/murfy-podcasts/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bPavan16%2Fmurfy-podcasts/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273641897,"owners_count":25142248,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-04T17:10:31.647Z","updated_at":"2025-09-04T17:10:32.714Z","avatar_url":"https://github.com/bPavan16.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🎙️ Murphy - AI-Powered Podcast Generator\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Next.js-15.5.0-black?style=for-the-badge\u0026logo=next.js\" alt=\"Next.js\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/React-19.1.0-blue?style=for-the-badge\u0026logo=react\" alt=\"React\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/TypeScript-5.0-blue?style=for-the-badge\u0026logo=typescript\" alt=\"TypeScript\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/MongoDB-green?style=for-the-badge\u0026logo=mongodb\" alt=\"MongoDB\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/TailwindCSS-4.0-blue?style=for-the-badge\u0026logo=tailwindcss\" alt=\"TailwindCSS\" /\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch3\u003eGenerate professional podcasts from ideas using AI-powered content creation and multi-language voice synthesis\u003c/h3\u003e\n\u003c/div\u003e\n\n---\n\n## 🌟 Features\n\n### 🤖 AI-Powered Content Generation\n- **Smart Content Creation**: Transform simple ideas into comprehensive podcast scripts using Google's Gemini AI\n- **Multiple Themes**: Choose from 8 different podcast styles (Casual, Professional, Educational, Entertaining, etc.)\n- **Intelligent Script Structure**: Automatically generates titles, descriptions, and structured content with speaker assignments\n\n### 🎧 Multi-Language Audio Generation\n- **7 Supported Languages**: English, Hindi, Bengali, French, German, Italian, Tamil\n- **Multiple Voice Options**: Choose from a variety of high-quality voices for each language\n- **Multi-Speaker Support**: Add up to 5 different speakers per language for dynamic conversations\n- **Audio Playback \u0026 Download**: Built-in audio player with download functionality\n\n### 📚 Podcast Management\n- **Personal Library**: Browse and manage all your generated podcasts\n- **User Authentication**: Secure login/signup with NextAuth\n- **All Podcasts vs My Podcasts**: Toggle between viewing all podcasts and your personal creations\n- **Search \u0026 Filter**: Find podcasts by title, description, or content\n\n### 🎨 Modern UI/UX\n- **Responsive Design**: Works seamlessly on desktop and mobile devices\n- **Beautiful Components**: Built with Radix UI and TailwindCSS\n- **Dark/Light Mode**: Automatic theme switching support\n- **Real-time Feedback**: Toast notifications and loading states\n\n---\n\n## 🚀 Getting Started\n\n### Prerequisites\n\nBefore running this application, make sure you have:\n\n- **Node.js** (version 18 or higher)\n- **npm** or **yarn** package manager\n- **MongoDB** database (local or MongoDB Atlas)\n- **Google Gemini API** key\n- **Azure Blob Storage** account (for audio file storage)\n\n### Environment Variables\n\nCreate a `.env.local` file in the root directory with the following variables:\n\n```env\n# Database\nMONGODB_URI=mongodb://localhost:27017/murphy\n# or for MongoDB Atlas:\n# MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/murphy\n\n# NextAuth Configuration\nNEXTAUTH_URL=http://localhost:3000\nNEXTAUTH_SECRET=your-nextauth-secret-key\n\n# Google Gemini AI\nGEMINI_API_KEY=your-gemini-api-key\n\n# Azure Blob Storage (for audio files)\nAZURE_STORAGE_CONNECTION_STRING=your-azure-storage-connection-string\nAZURE_STORAGE_CONTAINER_NAME=your-container-name\n\n```\n\n### Installation\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/Samarth-T17/murfy.git\n   cd murfy/murphy\n   ```\n\n2. **Install dependencies**\n   ```bash\n   npm install\n   # or\n   yarn install\n   ```\n\n3. **Set up environment variables**\n   ```bash\n   cp .env.example .env.local\n   # Edit .env.local with your actual values\n   ```\n\n4. **Run the development server**\n   ```bash\n   npm run dev\n   # or\n   yarn dev\n   ```\n\n5. **Open your browser**\n   Navigate to [http://localhost:3000](http://localhost:3000)\n\n---\n\n## 📁 Project Structure\n\n```\nmurphy/\n├── src/\n│   ├── app/                    # Next.js 13+ App Router\n│   │   ├── api/               # API routes\n│   │   │   ├── auth/          # NextAuth endpoints\n│   │   │   ├── generate-audio/ # Audio generation API\n│   │   │   └── podcasts/      # Podcast CRUD operations\n│   │   ├── auth/              # Authentication pages\n│   │   │   ├── signin/        # Sign in page\n│   │   │   └── signup/        # Sign up page\n│   │   ├── generate-podcast/  # Podcast creation interface\n│   │   ├── podcasts/          # Podcast browsing \u0026 details\n│   │   │   └── [id]/          # Individual podcast page\n│   │   ├── globals.css        # Global styles\n│   │   ├── layout.tsx         # Root layout component\n│   │   └── page.tsx           # Homepage\n│   ├── components/            # Reusable UI components\n│   │   ├── ui/               # Shadcn/ui components\n│   │   └── Navigation.tsx     # Main navigation component\n│   ├── lib/                   # Utility libraries\n│   │   ├── auth.ts           # NextAuth configuration\n│   │   ├── firebase.ts       # MongoDB connection \u0026 operations\n│   │   ├── voices.ts         # Voice options for TTS\n│   │   ├── langVoiceType.ts  # Language-voice mapping types\n│   │   └── utils.ts          # General utilities\n│   ├── gemini/               # Google Gemini AI integration\n│   │   └── content.ts        # Content generation logic\n│   └── murphy/               # Additional modules\n│       └── contents.ts       # Content management\n├── public/                   # Static assets\n├── package.json             # Dependencies and scripts\n├── next.config.ts          # Next.js configuration\n├── tailwind.config.js      # TailwindCSS configuration\n└── tsconfig.json          # TypeScript configuration\n```\n\n---\n\n## 🛠️ Technologies Used\n\n### Frontend\n- **Next.js 15.5.0** - React framework with App Router\n- **React 19.1.0** - UI library\n- **TypeScript 5.0** - Type-safe JavaScript\n- **TailwindCSS 4.0** - Utility-first CSS framework\n- **Radix UI** - Accessible component primitives\n- **Lucide React** - Beautiful icons\n\n### Backend \u0026 Database\n- **MongoDB** - NoSQL database for podcast storage\n- **NextAuth.js** - Authentication solution\n- **Azure Blob Storage** - Cloud storage for audio files\n\n### AI \u0026 Voice\n- **Google Gemini AI** - Content generation\n- **MURF API's** - Multi-language voice synthesis\n- **FFmpeg** - Audio processing\n\n### Development Tools\n- **ESLint** - Code linting\n- **Prettier** - Code formatting\n- **Turbopack** - Fast bundler for development\n\n---\n\n## 🎯 Usage Guide\n\n### Creating Your First Podcast\n\n1. **Sign Up/Login**\n   - Navigate to the authentication page\n   - Create an account or sign in with existing credentials\n\n2. **Generate Content**\n   - Go to \"Generate Podcast\" page\n   - Enter your podcast idea\n   - Select a theme (Casual, Professional, Educational, etc.)\n   - Click \"Generate Content\" to create your script\n\n3. **Configure Audio**\n   - Choose target languages for audio generation\n   - Select voice options for each language\n   - Add multiple speakers if desired (up to 5 per language)\n\n4. **Generate Audio**\n   - Review and edit the generated content if needed\n   - Click \"Generate Audio\" to create voice files\n   - Preview audio with built-in player\n   - Download generated audio files\n\n5. **Manage Podcasts**\n   - View all your podcasts in the \"My Podcasts\" section\n   - Browse community podcasts in \"All Podcasts\"\n   - Search and filter podcasts by content\n\n### Advanced Features\n\n#### Content Editing\n- Switch between \"Generated\" and \"Edited\" tabs\n- Make custom modifications to AI-generated content\n- Real-time word count tracking\n- Copy content to clipboard\n\n#### Multi-Language Support\n- Generate podcasts in multiple languages simultaneously\n- Language-specific voice selection\n- Automatic script translation (when supported)\n\n#### Voice Customization\n- Choose from various voice personas\n- Add/remove speakers dynamically\n- Preview voice options before generation\n\n---\n\n## 🔧 API Reference\n\n### Authentication Endpoints\n\n```typescript\nPOST /api/auth/signin          # User sign in\nPOST /api/auth/signup          # User registration\nGET  /api/auth/session         # Get current session\n```\n\n### Podcast Management\n\n```typescript\nGET    /api/podcasts           # Get all podcasts or user's podcasts\nGET    /api/podcasts/[id]      # Get specific podcast\nPOST   /api/podcasts           # Create new podcast\nPUT    /api/podcasts/[id]      # Update podcast\nDELETE /api/podcasts/[id]      # Delete podcast\n```\n\n### Audio Generation\n\n```typescript\nPOST /api/generate-audio       # Generate audio from content\n```\n\n---\n\n## 🔐 Security Features\n\n- **Secure Authentication** - NextAuth.js with secure session handling\n- **Password Hashing** - bcryptjs for secure password storage\n- **Environment Variables** - Sensitive data protection\n- **API Route Protection** - Server-side authentication checks\n- **Input Validation** - Client and server-side validation\n\n---\n\n\n## 🤝 Contributing\n\nWe welcome contributions! Please follow these steps:\n\n1. **Fork the repository**\n2. **Create a feature branch**\n   ```bash\n   git checkout -b feature/amazing-feature\n   ```\n3. **Commit your changes**\n   ```bash\n   git commit -m 'Add amazing feature'\n   ```\n4. **Push to the branch**\n   ```bash\n   git push origin feature/amazing-feature\n   ```\n5. **Open a Pull Request**\n\n### Development Guidelines\n\n- Follow TypeScript best practices\n- Use meaningful commit messages\n- Add tests for new features\n- Update documentation as needed\n- Follow the existing code style\n\n---\n\n## 📝 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n## 🙏 Acknowledgments\n\n- **MURF AI** - For providing TTS and translation api\n- **Google Gemini AI** - For intelligent content generation\n- **Radix UI** - For accessible component primitives\n- **MongoDB** - For reliable database services\n- **Azure** - For media storage and deployment\n\n---\n\n## 📞 Support\n\n- **GitHub Issues**: [Report bugs or request features](https://github.com/Samarth-T17/murfy/issues)\n- **Documentation**: Check our [Wiki](https://github.com/Samarth-T17/murfy/wiki) for detailed guides\n- **Community**: Join our discussions in [GitHub Discussions](https://github.com/Samarth-T17/murfy/discussions)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003eMade with ❤️ by Samarth and Pavan :) \u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://github.com/Samarth-T17/murfy\"\u003e⭐ Star this repository\u003c/a\u003e •\n    \u003ca href=\"https://github.com/Samarth-T17/murfy/issues\"\u003e🐛 Report Bug\u003c/a\u003e •\n    \u003ca href=\"https://github.com/Samarth-T17/murfy/issues\"\u003e✨ Request Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbpavan16%2Fmurfy-podcasts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbpavan16%2Fmurfy-podcasts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbpavan16%2Fmurfy-podcasts/lists"}