Skip to content

Getting Started ​

Requirements ​

  • Node.js 20.6 or newer for native .env support.
  • A Plex Media Server with an admin Plex token, or a Jellyfin/Emby server with an admin API key.
  • An SMTP provider if you want automated email notifications.

Install Locally ​

Clone the repository and install dependencies:

bash
git clone https://github.com/jl94x4/Server-Manager-Portal.git
cd Server-Manager-Portal
npm install

Create a .env file with a signing secret:

bash
printf 'JWT_SECRET=%s\n' "$(node -e "console.log(require('crypto').randomBytes(48).toString('hex'))")" > .env

Start the app:

bash
npm start

npm start builds Tailwind CSS, bundles the React frontend with esbuild, stamps the version file, and starts the Express server on port 2121.

Open http://localhost:2121 and complete the setup wizard.

First-Time Setup ​

The setup wizard asks you to choose a media server mode:

ModeAuthenticationAnalytics CompanionBranding
PlexPlex.tv OAuth, Plex token, selected owned serverTautulliPlex or custom theme
JellyfinJellyfin username/password or Quick ConnectJellystatJellyfin server assets or custom theme
EmbyEmby-compatible server connectionOptional external analytics/status toolsEmby or custom theme

After setup, use the Settings area to configure the media server, SMTP, temporary access, branding, status services, integrations, home layout, and scheduled tasks.

Runtime Data ​

Runtime data is written to config/ by default. Docker deployments mount this directory to /app/config.

Important files include:

FilePurpose
config/config.jsonServer and portal configuration
config/users.jsonPortal user records
config/audit-log.jsonSystem action history
config/trending-cache.jsonCached analytics and trending data
config/analytics-cache.jsonCached dashboard analytics

Older root-level JSON files are migrated into config/ automatically on startup when the destination file does not already exist.

Built for the self-hosting community.