If you're reading this, the repo recently had a big update that might break current installs.
Setup is much easier now! just docker compose (tweak mounts first on compose.yml) and set all initial settings on the site itself.
The readme is mostly accurate, but new screenshots will be added soon.
Self-hosted user onboarding site for Plex and Audiobookshelf server owners
Onboarderr is a customizable onboarding site for a host's Plex and (optional) Audiobookshelf servers. It includes user instructions, server highlights, and an admin dashboard.
As someone who's never made a website before, I wanted to:
- Learn about HTML, CSS, websites in general, and self-hosting
- Improve on a few "new user setup" guides I've seen for Plex
- Offer a more appealing way for friends to join my Plex
- Give me something constructive to do while unemployed lol
Admittedly, most of the code was generated by AI (ChatGPT, Gemini, Cursor).
I handled the layout, all copywriting/instructions, collected and edited screenshots, and came up with this whole thing.
Big thanks to @mon5termatt for many of the improvements in v2
- Customizable branding
- Setup instructions for Plex and Audiobookshelf users
- Carousel previews and media lists pulled from your server
- Optional Discord notifications when users request access
- Admin dashboard with tools and info
- Links to other services
- User request log
- Invite Plex users
- Add Audiobookshelf users
- Storage bars
- Change settings
Docker or Python (3.10+)
Plex Media Server
Method of making your local server publicly accessible:
- Tailscale w/ Tailscale Funnel if you're new to self-hosting. Simple and free.
- I use Cloudflared now to handle a few local service URLs I want to make public.
Audiobookshelf Server and public URL to share with users
Pulsarr - Per-user content requests integrated w/ Sonarr & Radarr via Plex watchlist
- Pulsarr is also able to push "media added" notifications through the Plex mobile app via Tautulli integration. Works fine for movies, but does not handle every new episode of shows.
Overseerr - User media requesting site
Depending if you have pulsarr or overseerr, or neither, some body content (section 5 on /onboarding) will change/disappear.
Tautulli - Per-user specific "episode/media item added" notifications on Discord
- If a user wants notifications for each new episode of a show, I create a new private text channel that is only for them on my discord server, then use the info for that channel in Tautulli for a new notification agent. Condition for the Show Name and it directs those notifs to the channel I made.
Sonarr & Radarr - to grab the watchlisted content
Discord - to handle certain admin & user notifications
git clone https://github.com/secretlycarl/onboarderr
cd onboarderr
A compose.yml file is included for use with Docker Compose.
Before running docker compose up -d, see below
To display storage bars for specific drives (e.g., E: and F: on Windows, or /mnt/e and /mnt/f on Linux), you must:
- Add volume mounts for each drive in your
compose.ymlunder thevolumes:section:
- Linux Example:
volumes: - .:/app - /mnt/e:/mnt/e - /mnt/f:/mnt/f - Windows Example:
volumes: - .:/app - E:\:/mnt/e - F:\:/mnt/f
- Set the
DRIVESDuring setup or via variable in your.envfile to the mount points inside the container (e.g.,/mnt/e,/mnt/f).
Note: On Windows, you may need to allow Docker Desktop access to your drives (Docker Desktop > Settings > Resources > File Sharing).
It runs on port 10000 by default. You can change this near the top of app.py.
If you change the port, you must also update compose.yml to use the same one.
- After setup or changing settings, the app will automatically restart itself to apply changes
- You do not need to manually restart the container after setup or settings changes
- If you ever need to restart manually (e.g., after updating code), use:
docker restart onboarderr(for Docker)CTRL+Cthenpython app.pyagain (for manual/venv use)
Create and activate a venv (conda or through system python), then:
pip install -r requirements.txt
python app.py
- It runs on port
10000by default. You can change this near the top ofapp.py - Go to
http://127.0.0.1:10000
- First run will bring you to /setup. Everything here can be changed afterwards from Settings on
/services(reccomended) or.env - The library descriptions you write are saved to
library_notes.json, and displayed on the Plex onboarding page in section 1 - After submission, the app will restart to apply the new
.envand direct you to/login ADMIN_PASSWORDwill take you to services page, but you can browse the others from the links at the topSITE_PASSWORDwill not allow access to admin page- After submission, it will pull all posters from selected libraries for use across the site. This can take a while for large libraries, so keep an eye on the console to see when it finishes.
Most customization is done on setup and settings in the admin panel, but you may want to tweak some HTML contents or instructional images it comes with.
-
onboarding_section7.htmlis personalized, you should change it to what you want it to say -
Delete placeholder
plex_submissions.jsonandaudiobookshelf_submissions.json. The ones that come with it have example data to populate the requests sections on/services
When ready,
- Activate your tailscale funnel, cloudflare tunnel, or bingle tube
- Share the public URL with friends
Option 1:
git pull will try to update the repo and notify you if there are any incompatible changes, like if your customizations will overlap with anything from the update
Option 2:
git stash # temporarily saves your changes (html, css, etc)
git pull # gets updates
git stash pop # re-applies your changes on top
Setup and customization is pretty quick now (no more .env editing and much less html editing) so don't be afraid to start from scratch.
Keep copies of custom assets in another folder!
I've never made a project this complex, or had a project this many people were interested in, so I'm not clear on how the future development for this will go. I have some ideas to make it better, but getting this all set up in a way that it's customizable and not just for my machine only was a beast itself.
That being said, a release for v2 is coming soon. Already committed most of the new code changes.
Once that is finalized I want to overhaul the CSS and make the whole experience cleaner for v2.
If you want to make it better, please do! Fork, PR, make an issue
Thanks for your interest in my project! I hope you find it useful. If you want to give me a tip for putting this all together -