├── .gitignore ├── .travis.yml ├── Dockerfile ├── LICENSE ├── README.md ├── access.html ├── assets ├── css │ ├── access.css │ ├── index.css │ └── main.css ├── img │ ├── backgrounds │ │ ├── b01.png │ │ ├── b02.jpg │ │ ├── b03.jpg │ │ └── b04.png │ └── favicons │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── apple-touch-icon.png │ │ ├── browserconfig.xml │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon.ico │ │ ├── manifest.json │ │ └── mstile-150x150.png └── sass │ ├── access.scss │ ├── index.scss │ └── main.scss ├── index.html ├── package-lock.json ├── package.json └── templates ├── access.json ├── access.mustache ├── index.json └── index.mustache /.gitignore: -------------------------------------------------------------------------------- 1 | ### macOS ### 2 | # General 3 | .DS_Store 4 | .AppleDouble 5 | .LSOverride 6 | 7 | # Icon must end with two \r 8 | Icon 9 | 10 | # Thumbnails 11 | ._* 12 | 13 | # Files that might appear in the root of a volume 14 | .DocumentRevisions-V100 15 | .fseventsd 16 | .Spotlight-V100 17 | .TemporaryItems 18 | .Trashes 19 | .VolumeIcon.icns 20 | .com.apple.timemachine.donotpresent 21 | 22 | # Directories potentially created on remote AFP share 23 | .AppleDB 24 | .AppleDesktop 25 | Network Trash Folder 26 | Temporary Items 27 | .apdisk 28 | 29 | ### Node ### 30 | # Logs 31 | logs 32 | *.log 33 | npm-debug.log* 34 | yarn-debug.log* 35 | yarn-error.log* 36 | lerna-debug.log* 37 | 38 | # Diagnostic reports (https://nodejs.org/api/report.html) 39 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 40 | 41 | # Runtime data 42 | pids 43 | *.pid 44 | *.seed 45 | *.pid.lock 46 | 47 | # Directory for instrumented libs generated by jscoverage/JSCover 48 | lib-cov 49 | 50 | # Coverage directory used by tools like istanbul 51 | coverage 52 | 53 | # nyc test coverage 54 | .nyc_output 55 | 56 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 57 | .grunt 58 | 59 | # Bower dependency directory (https://bower.io/) 60 | bower_components 61 | 62 | # node-waf configuration 63 | .lock-wscript 64 | 65 | # Compiled binary addons (https://nodejs.org/api/addons.html) 66 | build/Release 67 | 68 | # Dependency directories 69 | node_modules/ 70 | jspm_packages/ 71 | 72 | # TypeScript v1 declaration files 73 | typings/ 74 | 75 | # Optional npm cache directory 76 | .npm 77 | 78 | # Optional eslint cache 79 | .eslintcache 80 | 81 | # Optional REPL history 82 | .node_repl_history 83 | 84 | # Output of 'npm pack' 85 | *.tgz 86 | 87 | # Yarn Integrity file 88 | .yarn-integrity 89 | 90 | # dotenv environment variables file 91 | .env 92 | .env.test 93 | 94 | # parcel-bundler cache (https://parceljs.org/) 95 | .cache 96 | 97 | # next.js build output 98 | .next 99 | 100 | # nuxt.js build output 101 | .nuxt 102 | 103 | # vuepress build output 104 | .vuepress/dist 105 | 106 | # Serverless directories 107 | .serverless/ 108 | 109 | # FuseBox cache 110 | .fusebox/ 111 | 112 | # DynamoDB Local files 113 | .dynamodb/ 114 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "lts/*" 4 | cache: yarn 5 | before_script: 6 | - npm install -g jsonlint 7 | script: 8 | - jsonlint --quiet templates/*.json 9 | - yarn build 10 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:alpine 2 | 3 | # Install node 4 | RUN apk update && apk add --no-cache npm 5 | 6 | # Copy all files over to www 7 | COPY . /usr/share/nginx/html 8 | 9 | # Preinstall all tools 10 | RUN rm -rf /usr/share/nginx/html/node_modules 11 | RUN cd /usr/share/nginx/html && npm install -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Ryan Johnston 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Plex Landing Page 2 | 3 | [](https://travis-ci.org/ryjo1026/plex-landing-page) 4 | 5 | A simple landing page for your Plex Media Server. I made this with [bulma](https://bulma.io/) for CSS styling and [mustache.js](http://mustache.github.io/) for templating. 6 | 7 |  8 | 9 | ## Instructions 10 | 11 | The page is fully templated to make customization as easy as editing a JSON file. Fork the repository and replace text in `templates/index.json` and `templates/access.json` with your desired text. Template compilation, Sass compilation, and the Bulma installation are handled by npm. Install required packages using `npm install ` and use the available scripts to build the site: 12 | 13 | - `npm build`- Compile templates and Sass. 14 | - `npm build:html/npm build:css`- Compile templates only or Sass only. 15 | - `npm watch`- Automatically build when changes are detected in the directory. 16 | - `npm start`- An alias to `npm watch`. 17 | 18 | Additionally, I chose two background images for the home page and instruction page from one of my favorite movies and shows. I recommend browsing [/r/CineShots](https://www.reddit.com/r/CineShots/) for background images if you like that idea. You can change them in the respective .scss files under the `.hero` class. 19 | 20 | Editing the JSON and rendering the templates is very easy but if you'd rather just edit the raw HTML it's located in `index.html` and `access.html`. 21 | 22 | ### Docker 23 | 24 | There's a [Docker image](https://hub.docker.com/repository/docker/ryjo1026/plex-landing-page/general) for this if you would like to use that as well. The Docker comes preinstalled with node and nginx and the project is lightweight enough to just edit the json files on the container. 25 | 26 | 1. Run the container 27 | ``` 28 | docker run \ 29 | --name plex-landing-page \ 30 | -p 80:80 \ 31 | ryjo1026/plex-landing-page:latest 32 | ``` 33 | 1. Access the container 34 | ``` 35 | docker exec -it plex-landing-page /bin/sh 36 | ``` 37 | 1. Edit the json files to your liking 38 | ``` 39 | vi /usr/share/nginx/html/templates/index.json 40 | ``` 41 | 1. Compile the templates 42 | ``` 43 | npm run-script build 44 | ``` 45 | 1. Done! Your site is accessible at port 80 of the docker host. 46 | 47 | Alternatively, attach this repo as a volume and compile the templates locally with whatever local dev tools you use. The following should be run from the directory to which you cloned the repo 48 | 49 | ``` 50 | docker run \ 51 | --name plex-landing-page \ 52 | -p 80:80 \ 53 | -v .:/usr/share/nginx/html \ 54 | ryjo1026/plex-landing-page:latest 55 | ``` 56 | 57 | Note: The Dockerfile used to build the image is included in this repo if you want to build directly from that for some reason. 58 | 59 | ## Contribution 60 | 61 | This project is open-sourced under the MIT license. Feel free to make issues and pull requests for any improvements you want to see. 62 | 63 | ## Help 64 | 65 | Please feel free to open an issue even if you just need help getting it set up! I'm very responsive to new issues and actively looking to remove friction from the setup process. 66 | -------------------------------------------------------------------------------- /access.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |Create a plex account through plex.tv. There are also options sign up using your Google or Facebook account. You don't need to buy a Plex Pass or pay for anything.
42 |Go to your profile and send either your username or email to me.
45 |Wait for me to add you as a friend. You should receive an email, follow the directions in the email and accept the invitation.
48 |You're all set you can watch movies through the web player at plex.tv or use your Xbox, Smart TV, etc. (iOS requires a one time $5 payment). Feel free to make requests for new content through Ombi, you can sign in using your plex username.
51 |Read the instructions on how to get access to the server. You'll be watching movies and television in no time.
37 |Use Ombi to request new content for the server. Just sign in with the same Plex account you use for the server. Your request will be reviewed by the administrator and your content will get added as soon as possible.
41 |Want to watch a movie with other members of the server? Create a SyncLounge Room and you'll be able to watch media off the server while synced up to each other.The SyncLounge player provides a chat window for discussing the movie or you can use any of your plex devices(XBox, Roku, etc.).
45 |{{&step-body}}
43 |{{body}}
38 |