Skip to content
/ pavo Public

PAVO - Unified media dashboard for Jellyfin, Audiobookshelf, Immich, and Paperless

License

Notifications You must be signed in to change notification settings

chbornman/pavo

Repository files navigation

PAVO - Your Data, Your Control

Break free from Big Tech. PAVO is a fully open source personal cloud platform that puts you in complete control of your data - know exactly where it lives, import and export freely, and never worry about your privacy being sold.

License Next.js TypeScript Tailwind CSS

Why PAVO?

Privacy First

  • Your data never leaves your control - No tracking, no data mining, no surveillance
  • Full export capabilities - Download everything, anytime
  • Self-hosted by default - Run on your own infrastructure
  • Open source transparency - Inspect every line of code

Unified Experience

  • 📸 Photos - Store memories without giving them away
  • 🎵 Music - Stream without algorithms or ads
  • 🎬 Movies & TV - Watch without surveillance
  • 📄 Documents - Files that stay truly private
  • 🌓 Dark/Light Mode - Beautiful interface that adapts to your preference
  • 📱 Mobile Ready - Works perfectly on all devices

Developer Friendly

  • 🔐 Secure Authentication - Built with Clerk
  • Smart Caching - Optimized performance
  • 🛠️ Modern Stack - Next.js 15, TypeScript, Tailwind CSS v4

Built on Amazing Open Source Projects

PAVO is a unified interface that brings together the best self-hosted services. We're grateful to these incredible projects:

  • Immich (AGPL-3.0) - Self-hosted photo and video backup solution with AI-powered features
  • Jellyfin (GPL-2.0) - The volunteer-built media server that puts you in control of your media
  • Paperless-ngx (GPL-3.0) - Scan, index, and archive your physical documents

PAVO creates a beautiful, unified dashboard while preserving the full power and flexibility of these excellent services. All credit for the core functionality goes to these amazing development teams.

Prerequisites

  • Node.js 18+ and npm
  • Running instances of:
    • Immich server
    • Paperless-ngx server
    • Jellyfin server
  • API keys/tokens for each service
  • Clerk account for authentication

Quick Start

Option 1: PAVO Cloud (Managed Hosting)

Get started instantly with our managed service:

  • ✅ Zero setup required
  • ✅ Automatic updates and backups
  • ✅ Mobile apps included
  • ✅ 14-day free trial

Start Free Trial →

Option 2: Self-Host (Free Forever)

  1. Clone the repository:
git clone https://github.com/chbornman/pavo.git
cd pavo
  1. Install dependencies:
npm install
  1. Configure environment variables:
cp .env.example .env.local
  1. Edit .env.local with your service URLs and API keys:
# Clerk Authentication
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
CLERK_SECRET_KEY=your_clerk_secret_key

# Immich Configuration
NEXT_PUBLIC_IMMICH_URL=https://immich.yourdomain.com
IMMICH_API_KEY=your_immich_api_key

# Paperless-ngx Configuration
NEXT_PUBLIC_PAPERLESS_URL=https://paperless.yourdomain.com
PAPERLESS_API_TOKEN=your_paperless_token

# Jellyfin Configuration
NEXT_PUBLIC_JELLYFIN_URL=https://jellyfin.yourdomain.com
JELLYFIN_API_KEY=your_jellyfin_api_key
JELLYFIN_USER_ID=your_jellyfin_user_id

Development

Run the development server:

npm run dev

Open http://localhost:3000 to view the dashboard.

Production

Build for production:

npm run build
npm run start

Configuration

Jellyfin Setup

  1. Ensure your user has access to the Music library in Jellyfin
  2. Go to Jellyfin Admin → Users → Your User → Library Access
  3. Enable access to Movies, Shows, and Music libraries

Immich Setup

  1. Generate an API key from Immich web interface
  2. Go to User Settings → API Keys → Generate New Key

Paperless Setup

  1. Generate an authentication token
  2. Go to Settings → Token Authentication → Create Token

Tech Stack

  • Framework: Next.js 15.5 with App Router
  • Language: TypeScript
  • Styling: Tailwind CSS v4 with OKLCH colors
  • Authentication: Clerk
  • Fonts: Space Grotesk & JetBrains Mono

Project Structure

/app
  /api          # API routes for proxying service requests
  /components   # React components
  /hooks        # Custom React hooks
  /lib          # Utility functions and API clients
  page.tsx      # Main dashboard page
  layout.tsx    # Root layout with authentication
  globals.css   # Global styles and theme variables

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

PAVO is licensed under the GNU Affero General Public License v3.0.

This ensures that:

  • ✅ You can use, modify, and distribute PAVO freely
  • ✅ Any improvements remain open source and benefit the community
  • ✅ Network copyleft protects against proprietary cloud services using our code without contributing back
  • ✅ Commercial use is allowed with proper attribution and source code sharing

For the complete license terms, see LICENSE.md.

Acknowledgments

  • Built with love for the self-hosting and privacy community
  • Inspired by the need for a unified, privacy-respecting media dashboard
  • Immense gratitude to the teams behind Immich, Jellyfin, and Paperless-ngx for creating the incredible services that power PAVO
  • Special thanks to everyone fighting for digital privacy and data ownership

About

PAVO - Unified media dashboard for Jellyfin, Audiobookshelf, Immich, and Paperless

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •