audora icon indicating copy to clipboard operation
audora copied to clipboard

A high-reliability, full-stack audio/video recording platform. Built to explore and learn advanced topics like WebRTC, FFmpeg/GStreamer processing, S3 multipart uploads, and scalable monorepo architec...

Audora.xyz 🎙️

Audora Logo

High-Quality Podcast Recording Platform

License PRs Welcome Code of Conduct

Code of Conduct

Please read and follow our Code of Conduct to help keep Audora a welcoming and inclusive space for everyone.

License

This project is licensed under the MIT License.

🏗 Project Structure

This monorepo is managed using Turborepo and is structured as follows:

audora/
├── apps/ # Contains independent applications
│   ├── audora-frontend/        # Next.js app for the UI
│   ├── audora-backend/         # Fastify backend for API handling
│   ├── audora-signal/       # WebSocket server for real-time communication
├── packages/ # Shared code across apps
│   ├── database/        # Prisma & PostgreSQL setup
│   ├── types/           # Shared TypeScript types
# │   ├── backend-common/  # Common utilities for backend services
├── docker/              # Docker configuration
│   ├── backend.prod.Dockerfile    # Production Dockerfile for backend
│   ├── frontend.prod.Dockerfile   # Production Dockerfile for frontend
│   ├── signal.prod.Dockerfile  # Production Dockerfile for WebSocket
│   ├── db.docker-compose.yml         # Docker Compose configuration
├── .github/workflows/    # GitHub Actions CI/CD pipelines
│   ├── cd_api.yml    # CI/CD pipeline for backend
│   ├── cd_frontend.yml   # CI/CD pipeline for frontend
│   ├── cd_signal.yml  # CI/CD pipeline for WebSocket
├── turbo.json           # Turborepo config file
├── package.json         # Root package.json for Bun & Turborepo setup
└── README.md            # Project documentation

🧩 Features

Audora offers a comprehensive set of features for professional podcast recording:

  • 🎥 High-Quality Recording

    • Studio-grade audio and video recording
    • Multiple input device support
    • Customizable recording settings
  • 🌐 Real-Time Communication

    • WebRTC-based peer-to-peer connections
    • Low-latency audio/video streaming
    • Multi-participant support
  • 📤 Reliable Uploads

    • S3 multipart uploads with automatic retry
    • Progress tracking and resume capability
    • Secure file transfer
  • 🎬 Professional Processing

    • Video transcoding pipeline
    • Audio normalization and enhancement
    • Custom overlays and branding
  • 🔒 Security & Privacy

    • End-to-end encryption
    • Secure room management
    • Privacy-focused design

🚀 Getting Started

Prerequisites

  • Bun (v1.2.5 or later)
  • Node.js (v18 or later)
  • PostgreSQL (v14 or later)
  • FFmpeg
  • AWS Account (for S3)
  • Docker and Docker Compose

Install Dependencies

bun install

Configure Environment Variables

Create environment files for each app:

  1. Copy the example environment files
  2. Rename them to .env in each app directory
  3. Fill in the required values like DATABASE_URL, AWS_CREDENTIALS, etc.

Database Setup

Start the PostgreSQL database using Docker:

bun run db:up

Generate Prisma Client

bun run generate

Deploy Database Migrations

bun run db:deploy

Run the Application

Development Mode

bun run dev

Production Mode

bun run build
bun run start

Or use the combined command:

bun run server:start

Start Individual Apps

# Start frontend only
bun run start:frontend

# Start backend API only
bun run start:backend

# Start WebSocket server only
bun run start:websocket

📦 Tech Stack

  • Turborepo → Monorepo management
  • Bun → Fast JavaScript package manager & runtime
  • Next.js 14 → Frontend framework
  • Fastify → Backend API
  • WebRTC → Real-time communication
  • PostgreSQL → Database
  • Prisma → ORM for database management
  • AWS S3 → File storage
  • FFmpeg → Media processing
  • Docker → Containerization
  • GitHub Actions → CI/CD pipelines

🗄 Database Setup

Start PostgreSQL with Docker

bun db:up

Stop PostgreSQL

bun db:down

Run Database Migrations

bun run db:deploy

🚢 Deployment

The project includes production Docker configurations and GitHub Actions workflows for continuous deployment:

Docker Production Setup

The /docker directory contains production Dockerfiles for each service:

  • backend.prod.Dockerfile - Production container for the backend API
  • frontend.prod.Dockerfile - Production container for the Next.js frontend
  • websocket.prod.Dockerfile - Production container for the WebSocket server

CI/CD Pipelines

GitHub Actions workflows in the .github/workflows directory automate the deployment process:

  • cd_backend.yml - Deploys the backend service
  • cd_frontend.yml - Deploys the frontend application
  • cd_websocket.yml - Deploys the WebSocket server

📜 Available Scripts

{
  "scripts": {
    "dev": "turbo run dev",
    "build": "turbo run build",
    "start": "turbo run start",
    "start:frontend": "turbo run start:frontend --filter=audora-frontend",
    "start:backend": "turbo run start:backend --filter=audora-backend",
    "start:websocket": "turbo run start:websocket --filter=audora-websocket",
    "lint": "turbo run lint",
    "format": "prettier --write \"**/*.{ts,tsx,md}\"",
    "check-types": "turbo run check-types",
    "db:up": "docker-compose -f docker/docker-compose.yml up -d",
    "db:down": "docker-compose -f docker/docker-compose.yml down",
    "infra:build": "docker-compose -f docker-compose.yml build",
    "infra:up": "docker-compose -f docker-compose.yml up -d",
    "infra:down": "docker-compose -f docker-compose.yml down",
    "db:deploy": "turbo run db:deploy",
    "server:start": "bun run db:deploy && bun run start",
    "generate": "turbo run generate"
  }
}

Development Tools

# Run linting across all packages
bun run lint

# Format code with Prettier
bun run format

# Type checking
bun run check-types

📞 Support

🙏 Acknowledgments

  • WebRTC for real-time communication
  • FFmpeg for media processing
  • Prisma for database management
  • All our contributors and supporters

Made with ❤️ by the Audora Team