Compare commits

..

28 Commits

Author SHA1 Message Date
github-actions[bot] c074f7b8a4 deploy: 0a38171836 2026-07-30 21:52:19 +00:00
github-actions[bot] c5c69aa0bf deploy: d009528388 2026-07-30 21:34:39 +00:00
github-actions[bot] 107948ef04 deploy: 3461a4ec74 2026-07-05 17:41:12 +00:00
github-actions[bot] 036cb55fa8 deploy: 13bd37c32c 2026-03-09 07:02:50 +00:00
github-actions[bot] 3077f02867 deploy: a9f928a44c 2026-03-04 07:58:54 +00:00
github-actions[bot] e3dac1e383 deploy: 2bad7bc272 2026-03-04 07:36:00 +00:00
github-actions[bot] 5d0d4ca2e6 deploy: a16769e0db 2025-05-11 19:48:46 +00:00
github-actions[bot] 32e4cf98a0 deploy: 16012da267 2025-01-20 00:09:11 +00:00
github-actions[bot] e5873f9134 deploy: 953dcf0034 2024-07-02 21:09:08 +00:00
github-actions[bot] 4c0fb6f74d deploy: b749bffa15 2024-04-18 13:30:09 +00:00
github-actions[bot] 412f1cfa63 deploy: 70ed52cec4 2024-03-27 22:57:09 +00:00
github-actions[bot] 904cd762ca deploy: cfbc8def98 2024-03-26 12:31:48 +00:00
github-actions[bot] 8a65d49d72 deploy: 7261f2f454 2024-03-26 02:34:38 +00:00
github-actions[bot] 8643d9918d deploy: a12ac3c4a0 2024-03-25 21:19:49 +00:00
github-actions[bot] 9cf16dc634 deploy: ac1ac76891 2024-03-24 18:08:55 +00:00
github-actions[bot] 347f89973d deploy: f992841314 2024-03-18 02:58:21 +00:00
github-actions[bot] 6bd3b48e2a deploy: 74f896a8bc 2024-03-09 03:43:14 +00:00
github-actions[bot] 89487156c2 deploy: 3b1d42c148 2024-03-09 01:56:10 +00:00
github-actions[bot] 27c70fca15 deploy: 8a5fd8182f 2024-03-06 22:32:41 +00:00
github-actions[bot] 8e44f45a8f deploy: e9a4629c2a 2024-02-16 15:53:20 +00:00
github-actions[bot] a8f810fe84 deploy: dcb21a6e1e 2024-02-11 23:31:31 +00:00
github-actions[bot] ccbef2d228 deploy: a6fcd93244 2023-10-13 22:57:09 +00:00
github-actions[bot] 4e46e74896 deploy: 20b3a2631a 2023-10-13 00:57:16 +00:00
github-actions[bot] 768c7c4776 deploy: 7960876873 2023-10-11 23:41:45 +00:00
github-actions[bot] a486de48d6 deploy: 2395908c20 2023-10-11 23:27:18 +00:00
github-actions[bot] 1659aa91a4 deploy: a3e8877199 2023-10-11 23:18:30 +00:00
Mr 5ee79631d1 Create CNAME 2023-10-11 22:41:06 +00:00
github-actions[bot] 7ae9ffeee3 deploy: bca9336d4f 2023-10-11 22:39:51 +00:00
264 changed files with 799 additions and 45512 deletions
-15
View File
@@ -1,15 +0,0 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
/doc
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
package-lock.json
yarn.lock
-27
View File
@@ -1,27 +0,0 @@
module.exports = {
root: true,
parser: "@typescript-eslint/parser",
extends: ["plugin:svelte/recommended"],
plugins: ["@typescript-eslint"],
ignorePatterns: ["*.cjs", "*.config.js"],
overrides: [
{
files: ["*.svelte"],
parser: "svelte-eslint-parser",
parserOptions: {
parser: "@typescript-eslint/parser"
}
}
],
parserOptions: {
project: "./tsconfig.json",
extraFileExtensions: [".svelte"],
sourceType: "module",
ecmaVersion: 2020
},
env: {
browser: true,
es2017: true,
node: false
}
};
-2
View File
@@ -1,2 +0,0 @@
# Auto detect text files and perform LF normalization
* text=auto
-5
View File
@@ -1,5 +0,0 @@
<!-- Make sure your code is formatted by running `npm run format` or using prettier manually. -->
### Changes made
<!-- Describe changes made here. If changes are visual a screenshot could be useful! -->
-27
View File
@@ -1,27 +0,0 @@
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
# Web UI
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
commit-message:
prefix: "ui"
# Server
- package-ecosystem: "gomod"
directory: "/server"
schedule:
interval: "weekly"
commit-message:
prefix: "server"
# Workflows
- package-ecosystem: "github-actions"
directory: "/" # / will look in /.github/workflows directory by default
schedule:
interval: "weekly"
commit-message:
prefix: "workflow"
-45
View File
@@ -1,45 +0,0 @@
# Multi arch support doc/guide:
# https://docs.docker.com/build/ci/github-actions/multi-platform/
name: Development Watcharr Image Release
on:
workflow_dispatch:
env:
image: ghcr.io/sbondco/watcharr
jobs:
release-dev-image:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout Repo
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ env.image }}:dev
labels: ${{ env.image }}:${{ github.sha }}
-50
View File
@@ -1,50 +0,0 @@
name: Release Watcharr Image
on:
push:
tags:
- v*
env:
image: ghcr.io/sbondco/watcharr
jobs:
release-images:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout Repo
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.image }}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
-50
View File
@@ -1,50 +0,0 @@
name: Publish Docs
on:
push:
branches:
- dev
paths:
- ".github/workflows/publish-docs.yml"
- "doc/**"
permissions:
contents: write
jobs:
deploy:
name: Deploy to GitHub Pages
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
defaults:
run:
working-directory: doc
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
- name: Install dependencies
run: npm ci
- name: Build website
run: npm run build
# Popular action to deploy to GitHub Pages:
# Docs: https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-docusaurus
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
# Build output to publish to the `gh-pages` branch:
publish_dir: ./doc/build
cname: watcharr.app
# The following lines assign commit authorship to the official
# GH-Actions bot for deploys to `gh-pages` branch:
# https://github.com/actions/checkout/issues/13#issuecomment-724415212
# The GH actions bot is used by default if you didn't specify the two fields.
# You can swap them out with your own user credentials.
user_name: github-actions[bot]
user_email: 41898282+github-actions[bot]@users.noreply.github.com
-28
View File
@@ -1,28 +0,0 @@
name: Test doc deployment
on:
pull_request:
branches:
- dev
paths:
- ".github/workflows/test-docs.yml"
- "doc/**"
jobs:
test-deploy:
name: Test deployment
runs-on: ubuntu-latest
defaults:
run:
working-directory: doc
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
- name: Install dependencies
run: npm ci
- name: Test build website
run: npm run build
-28
View File
@@ -1,28 +0,0 @@
name: Test PR Changes
on:
pull_request:
branches:
- "**"
tags-ignore:
- v*
jobs:
linter_check:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
- name: Get dependencies
run: npm i
- name: Check for linting/formatting errors
run: npm run lint
-47
View File
@@ -1,47 +0,0 @@
# If you prefer the allow list template instead of the deny list, see community template:
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
#
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories (remove the comment below to include it)
# vendor/
# Go workspace file
go.work
# Database
*.db
# Server data
server/data
# web
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
# Docker dev volume
container_data/
data/
# Build artifacts
server/ui
server/watcharr
View File
-1
View File
@@ -1 +0,0 @@
engine-strict=true
-13
View File
@@ -1,13 +0,0 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
package-lock.json
yarn.lock
-18
View File
@@ -1,18 +0,0 @@
{
"tabWidth": 2,
"semi": true,
"singleQuote": false,
"printWidth": 100,
"useTabs": false,
"trailingComma": "none",
"arrowParens": "always",
"plugins": ["prettier-plugin-svelte"],
"overrides": [
{
"files": "*.svelte",
"options": {
"parser": "svelte"
}
}
]
}
-15
View File
@@ -1,15 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch Package",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${fileDirname}"
}
]
}
+16
View File
@@ -0,0 +1,16 @@
<!doctype html>
<html lang="en" dir="ltr" class="plugin-native plugin-id-default" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">Page Not Found | Watcharr Docs</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://watcharr.app/img/social-card.png"><meta data-rh="true" name="twitter:image" content="https://watcharr.app/img/social-card.png"><meta data-rh="true" property="og:url" content="https://watcharr.app/404.html"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Page Not Found | Watcharr Docs"><link data-rh="true" rel="icon" href="/img/favicon.png"><link data-rh="true" rel="canonical" href="https://watcharr.app/404.html"><link data-rh="true" rel="alternate" href="https://watcharr.app/404.html" hreflang="en"><link data-rh="true" rel="alternate" href="https://watcharr.app/404.html" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.b440cd64.css">
<script src="/assets/js/runtime~main.9a9f349d.js" defer="defer"></script>
<script src="/assets/js/main.04a4ba76.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>document.documentElement.setAttribute("data-theme","light"),document.documentElement.setAttribute("data-theme-choice","light"),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/img/favicon.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/favicon.png" alt="Watcharr Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/favicon.png" alt="Watcharr Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Watcharr</b></a><a class="navbar__item navbar__link" href="/docs/introduction">Docs</a><a class="navbar__item navbar__link" href="/docs/introduction">Next</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://beta.watcharr.app" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Demo<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><a href="https://github.com/sbondCo/Watcharr" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="navbarSearchContainer_Bca1"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div></div>
</body>
</html>
+1
View File
@@ -0,0 +1 @@
watcharr.app
-11
View File
@@ -1,11 +0,0 @@
# Contributing 🎉
First of all, thank you for looking into contributing! 🫡
Feel free to contribute in any way: 🐞 bug reports, 💡 ideas, 🥖 new features etc - everything is welcome!
For big PRs (lots of changes/big change in the way something works), if you'd like, it can be discussed first in an issue (dont want to waste anyones time!).
## Project Board
We have a [board to organize new features and bug fixes](https://github.com/orgs/sbondCo/projects/9/views/2) to be worked on. If you see something you'd like to work on, just ask in the issue and it can be assigned to you. Even if it isn't set for the next milestone already, it can be.
-35
View File
@@ -1,35 +0,0 @@
# Backend
FROM golang:1.21-alpine AS server
WORKDIR /server
COPY server/*.go server/go.* ./
COPY server/arr/*.go ./arr/
COPY server/game/*.go ./game/
# Required so we can build with cgo
RUN apk update && apk add --no-cache musl-dev gcc build-base
# CGO_CFLAGS: https://github.com/mattn/go-sqlite3/issues/1164#issuecomment-1635253695
RUN go mod download && GOOS=linux CGO_ENABLED=1 CGO_CFLAGS="-D_LARGEFILE64_SOURCE" go build -o ./watcharr
# Frontend
FROM node:20-alpine AS ui
WORKDIR /app
COPY package*.json vite.config.ts svelte.config.js tsconfig.json ./
COPY ./src ./src
COPY ./static ./static
RUN npm install && npm run build
# Production
FROM node:20-alpine AS runner
COPY --from=server /server/watcharr /
COPY --from=ui /app/build /ui
COPY --from=ui /app/package.json /app/package-lock.json /ui
RUN cd /ui && npm ci --omit=dev
EXPOSE 3080
CMD ["/watcharr"]
-21
View File
@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2023 IRHM
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
-60
View File
@@ -1,60 +0,0 @@
<h1 align="center">Watcharr</h1>
<p align="center"><img src="./static/logo-col.png" alt="logo" width="250" /></p>
<p align="center">
<a href="https://github.com/sbondCo/Watcharr/pkgs/container/watcharr"><img src="https://img.shields.io/github/v/release/sbondCo/Watcharr?label=version&style=for-the-badge" /></a>
<a href="https://beta.watcharr.app"><img src="https://img.shields.io/website?label=DEMO&style=for-the-badge&url=https%3A%2F%2Fbeta.watcharr.app" /></a>
<a href="https://watcharr.app"><img src="https://img.shields.io/website?label=DOCS&style=for-the-badge&url=https%3A%2F%2Fwatcharr.app" /></a>
<a href="https://github.com/sbondCo/Watcharr/issues"><img src="https://img.shields.io/github/issues-raw/sbondCo/Watcharr?label=ISSUES&style=for-the-badge" /></a>
<a href="/LICENSE"><img src="https://img.shields.io/github/license/sbondCo/Watcharr?style=for-the-badge" /></a>
<a href="https://matrix.to/#/#watcharr:matrix.org"><img src="https://img.shields.io/matrix/watcharr%3Amatrix.org?style=for-the-badge&logo=matrix" /></a>
</p>
I'm your new easily self-hosted content watched list. The place you store your watched (or watching, planned, etc) **movies** and **tv shows** (and **anime**), rate them and track their status.
With [some extra configuration](https://watcharr.app/docs/server_config/game-support-igdb) I can also track your **video games**.
I am built with Go and Svelte(Kit).
Feel free to abuse this demo instance (nicely), which runs on the latest `dev` build (there may be bugs, as new features are tested on here too): [https://beta.watcharr.app/](https://beta.watcharr.app/)
[Track Progress Until Next Version](https://github.com/orgs/sbondCo/projects/9/views/3)
### Contents
- [Screenshots](#screenshots)
- [Setup](#set-up)
- [Contributing](CONTRIBUTING.md)
- [Getting Help](#getting-help)
# Screenshots
<p align="center">
| Homepage | Watched Show Hover |
| ---------------------------------------------------------- | ----------------------------------------------------------------------- |
| <img src="./screenshot/homepage.png" alt="Watched List" /> | <img src="./screenshot/homepage-poster-hover.png" alt="Watched List" /> |
| Watched Show Status Change | Movie Details |
| --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| <img src="./screenshot/homepage-poster-change-status.png" alt="Changing Show Status" /> | <img src="./screenshot/content-details-page.png" alt="Content Details Page" /> |
| User Profile | Discover |
| ------------------------------------------------------------------- | ---------------------------------------------------------------- |
| <img src="./screenshot/user-profile.png" alt="User Profile Page" /> | <img src="./screenshot/discover-page.png" alt="Discover Page" /> |
| Dark Homepage | Dark Content Details |
| ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| <img src="./screenshot/homepage-dark.png" alt="Dark Theme Homepage" /> | <img src="./screenshot/content-details-page-dark.png" alt="Dark Theme Content Page" /> |
</p>
# Set Up
[Checkout our documentation](https://watcharr.app/docs/category/installation) for an up to date guide on setup! If you hate manuals, but love docker, this [docker-compose.yml](./docker-compose.yml) file is your friend.
# Getting Help
If something isn't working for you or you are stuck, [creating an issue](https://github.com/sbondCo/Watcharr/issues/new) is the best way to get help! Every type of issue is accepted, so don't be afraid to ask anything!
You can also [join our space on Matrix](https://matrix.to/#/#watcharr:matrix.org) for support.
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Before

Width:  |  Height:  |  Size: 305 KiB

After

Width:  |  Height:  |  Size: 305 KiB

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Before

Width:  |  Height:  |  Size: 369 KiB

After

Width:  |  Height:  |  Size: 369 KiB

Before

Width:  |  Height:  |  Size: 321 KiB

After

Width:  |  Height:  |  Size: 321 KiB

Before

Width:  |  Height:  |  Size: 303 KiB

After

Width:  |  Height:  |  Size: 303 KiB

Before

Width:  |  Height:  |  Size: 317 KiB

After

Width:  |  Height:  |  Size: 317 KiB

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Before

Width:  |  Height:  |  Size: 675 KiB

After

Width:  |  Height:  |  Size: 675 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[61],{7973(e,a,t){t.r(a),t.d(a,{default:()=>h});t(6540);var s=t(4164),l=t(5500),d=t(7559),i=t(1656),c=t(540),r=t(7763),n=t(6896),o=t(2153);const m="mdxPageWrapper_j9I6";var g=t(4848);function h(e){const{content:a}=e,{metadata:t,assets:h}=a,{title:p,editUrl:x,description:j,frontMatter:_,lastUpdatedBy:A,lastUpdatedAt:v}=t,{keywords:w,wrapperClassName:u,hide_table_of_contents:N}=_,b=h.image??_.image,k=!!(x||v||A);return(0,g.jsx)(l.e3,{className:(0,s.A)(u??d.G.wrapper.mdxPages,d.G.page.mdxPage),children:(0,g.jsxs)(i.A,{children:[(0,g.jsx)(l.be,{title:p,description:j,keywords:w,image:b}),(0,g.jsx)("main",{className:"container container--fluid margin-vert--lg",children:(0,g.jsxs)("div",{className:(0,s.A)("row",m),children:[(0,g.jsxs)("div",{className:(0,s.A)("col",!N&&"col--8"),children:[(0,g.jsx)(n.A,{metadata:t}),(0,g.jsx)("article",{children:(0,g.jsx)(c.A,{children:(0,g.jsx)(a,{})})}),k&&(0,g.jsx)(o.A,{className:(0,s.A)("margin-top--sm",d.G.pages.pageFooterEditMetaRow),editUrl:x,lastUpdatedAt:v,lastUpdatedBy:A})]}),!N&&a.toc.length>0&&(0,g.jsx)("div",{className:"col col--2",children:(0,g.jsx)(r.A,{toc:a.toc,minHeadingLevel:_.toc_min_heading_level,maxHeadingLevel:_.toc_max_heading_level})})]})})]})})}}}]);
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[237],{3363(e,t,i){i.d(t,{A:()=>s});i(6540);var n=i(4164),o=i(1312),a=i(1107),r=i(4848);function s({className:e}){return(0,r.jsx)("main",{className:(0,n.A)("container margin-vert--xl",e),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(a.A,{as:"h1",className:"hero__title",children:(0,r.jsx)(o.A,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.A,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.A,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},2237(e,t,i){i.r(t),i.d(t,{default:()=>h});i(6540);var n=i(1312),o=i(5500),a=i(1656),r=i(3363),s=i(4848);function h(){const e=(0,n.T)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.be,{title:e}),(0,s.jsx)(a.A,{children:(0,s.jsx)(r.A,{})})]})}}}]);
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[134],{591(e,t,n){n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>c,default:()=>l,frontMatter:()=>s,metadata:()=>a,toc:()=>d});const a=JSON.parse('{"type":"mdx","permalink":"/markdown-page","source":"@site/src/pages/markdown-page.md","title":"Markdown page example","description":"You don\'t need React to write simple standalone pages.","frontMatter":{"title":"Markdown page example"},"unlisted":false}');var o=n(4848),r=n(8453);const s={title:"Markdown page example"},c="Markdown page example",p={},d=[];function i(e){const t={h1:"h1",header:"header",p:"p",...(0,r.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"markdown-page-example",children:"Markdown page example"})}),"\n",(0,o.jsx)(t.p,{children:"You don't need React to write simple standalone pages."})]})}function l(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(i,{...e})}):i(e)}},8453(e,t,n){n.d(t,{R:()=>s,x:()=>c});var a=n(6540);const o={},r=a.createContext(o);function s(e){const t=a.useContext(r);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),a.createElement(r.Provider,{value:t},e.children)}}}]);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[647],{7121(r,a,e){e.r(a),e.d(a,{default:()=>o});e(6540);var c=e(4164),s=e(7559),h=e(5500),t=e(2831),u=e(1656),l=e(4848);function o(r){return(0,l.jsx)(h.e3,{className:(0,c.A)(s.G.wrapper.docsPages),children:(0,l.jsx)(u.A,{children:(0,t.v)(r.route.routes)})})}}}]);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[990],{6948(e,r,t){t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>d});const o=JSON.parse('{"id":"importing/watcharr","title":"Watcharr","description":"You may consider a backup of your server before starting any import. They are not easily reversible, though we do our best to ensure they are accurate and bug free!","source":"@site/docs/importing/watcharr.md","sourceDirName":"importing","slug":"/importing/watcharr","permalink":"/docs/importing/watcharr","draft":false,"unlisted":false,"editUrl":"https://github.com/sbondCo/Watcharr/tree/dev/doc/docs/importing/watcharr.md","tags":[],"version":"current","sidebarPosition":0,"frontMatter":{"sidebar_position":0},"sidebar":"tutorialSidebar","previous":{"title":"Importing","permalink":"/docs/category/importing"},"next":{"title":"Text File (.txt list)","permalink":"/docs/importing/text-file"}}');var n=t(4848),i=t(8453);const a={sidebar_position:0},s="Watcharr",c={},d=[];function l(e){const r={a:"a",admonition:"admonition",h1:"h1",header:"header",li:"li",ol:"ol",p:"p",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.header,{children:(0,n.jsx)(r.h1,{id:"watcharr",children:"Watcharr"})}),"\n",(0,n.jsx)(r.admonition,{title:"Backup?",type:"info",children:(0,n.jsx)(r.p,{children:"You may consider a backup of your server before starting any import. They are not easily reversible, though we do our best to ensure they are accurate and bug free!"})}),"\n",(0,n.jsx)(r.admonition,{title:"May not be what you want",type:"warning",children:(0,n.jsxs)(r.p,{children:["Watcharr import/export is a feature intended for end users. If you are the server admin, it is recommended that you copy your server files directly to any new server you are creating (it'll be much faster and easier). ",(0,n.jsx)(r.a,{href:"/docs/server_config/backup",children:"See backup guide"}),"."]})}),"\n",(0,n.jsxs)(r.ol,{children:["\n",(0,n.jsx)(r.li,{children:"Provide the Watcharr export file (that you generated from your profile page)."}),"\n",(0,n.jsx)(r.li,{children:"Review the import table, if everything looks good, start the import."}),"\n"]})]})}function h(e={}){const{wrapper:r}={...(0,i.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},8453(e,r,t){t.d(r,{R:()=>a,x:()=>s});var o=t(6540);const n={},i=o.createContext(n);function a(e){const r=o.useContext(i);return o.useMemo(function(){return"function"==typeof e?e(r):{...r,...e}},[r,e])}function s(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),o.createElement(i.Provider,{value:r},e.children)}}}]);
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[449],{9095(e,t,n){n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"usage/adding-to-watchlist","title":"Adding To Your Watchlist","description":"Adding movies or shows to your watchlist is the core feature of Watcharr.","source":"@site/docs/usage/adding-to-watchlist.md","sourceDirName":"usage","slug":"/usage/adding-to-watchlist","permalink":"/docs/usage/adding-to-watchlist","draft":false,"unlisted":false,"editUrl":"https://github.com/sbondCo/Watcharr/tree/dev/doc/docs/usage/adding-to-watchlist.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Usage","permalink":"/docs/category/usage"}}');var o=n(4848),i=n(8453);const r={sidebar_position:1},a="Adding To Your Watchlist",c={},d=[];function h(e){const t={code:"code",em:"em",h1:"h1",header:"header",img:"img",li:"li",ol:"ol",p:"p",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"adding-to-your-watchlist",children:"Adding To Your Watchlist"})}),"\n",(0,o.jsx)(t.p,{children:"Adding movies or shows to your watchlist is the core feature of Watcharr."}),"\n",(0,o.jsx)(t.p,{children:"The homepage is where your list will appear once you have added some."}),"\n",(0,o.jsx)(t.p,{children:"To get started, you can follow along with these steps to add your first movie/show:"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"Search for the content:"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Searching For Content",src:n(8406).A+"",width:"745",height:"440"})}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"Hover or click on the content you want to add:"}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Hovering over poster",src:n(6320).A+"",width:"745",height:"440"})}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"Clicking the + (Plus) icon will let you give the content a status."}),"\n",(0,o.jsxs)(t.p,{children:["Currently supported statuses include: ",(0,o.jsx)(t.code,{children:"Finished"}),", ",(0,o.jsx)(t.code,{children:"Watching"}),", ",(0,o.jsx)(t.code,{children:"Held"}),", ",(0,o.jsx)(t.code,{children:"Planned"}),", ",(0,o.jsx)(t.code,{children:"Dropped"}),"."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Giving content a status",src:n(2385).A+"",width:"745",height:"440"})}),"\n"]}),"\n",(0,o.jsxs)(t.li,{children:["\n",(0,o.jsx)(t.p,{children:"Rate the content."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Giving content a rating",src:n(1985).A+"",width:"745",height:"440"})}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(t.p,{children:["If you prefer, you can also do this by clicking/tapping on the active poster again.\nThis will take you to the contents full page. Here you can see all the options, including\nadding ",(0,o.jsx)(t.code,{children:"Thoughts"})," for the content."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"Content full page",src:n(8234).A+"",width:"745",height:"837"})}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.code,{children:"Thoughts"})," can be anything you would like to write down or remember about the specific movie/show.\nFor example, sometimes I like to write something specific that I ",(0,o.jsx)(t.em,{children:"really"})," liked about the content,\nor for some shows, I write down my favourite seasons and how many times I have watched them."]})]})}function l(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},8234(e,t,n){n.d(t,{A:()=>s});const s=n.p+"assets/images/content-full-page-4cdac3f6a414c03b6231b32db57cd7ff.png"},1985(e,t,n){n.d(t,{A:()=>s});const s=n.p+"assets/images/search-for-content-hover-poster-rate-23ebec4c88db3592961ba6d72a75183e.png"},2385(e,t,n){n.d(t,{A:()=>s});const s=n.p+"assets/images/search-for-content-hover-poster-status-19fe5d733c26eb921d1ae59e37717d19.png"},6320(e,t,n){n.d(t,{A:()=>s});const s=n.p+"assets/images/search-for-content-hover-poster-6574ac86e280bfa112b04635b9689e9a.png"},8406(e,t,n){n.d(t,{A:()=>s});const s=n.p+"assets/images/search-for-content-c81935a18e93b262ca2adb89783fa9aa.png"},8453(e,t,n){n.d(t,{R:()=>r,x:()=>a});var s=n(6540);const o={},i=s.createContext(o);function r(e){const t=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]);
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[671],{2040(e,r,t){t.r(r),t.d(r,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>n,toc:()=>d});const n=JSON.parse('{"id":"server_config/backup","title":"Backing Up","description":"Backing up your server.","source":"@site/docs/server_config/backup.md","sourceDirName":"server_config","slug":"/server_config/backup","permalink":"/docs/server_config/backup","draft":false,"unlisted":false,"editUrl":"https://github.com/sbondCo/Watcharr/tree/dev/doc/docs/server_config/backup.md","tags":[],"version":"current","sidebarPosition":100,"frontMatter":{"sidebar_position":100,"description":"Backing up your server."},"sidebar":"tutorialSidebar","previous":{"title":"Environment Variables","permalink":"/docs/server_config/environment-variables"},"next":{"title":"Importing","permalink":"/docs/category/importing"}}');var i=t(4848),s=t(8453);const a={sidebar_position:100,description:"Backing up your server."},o="Backing Up",c={},d=[{value:"Simple Steps",id:"simple-steps",level:2},{value:"Advanced Steps",id:"advanced-steps",level:2}];function l(e){const r={admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.header,{children:(0,i.jsx)(r.h1,{id:"backing-up",children:"Backing Up"})}),"\n",(0,i.jsx)(r.p,{children:"Watcharr cannot handle backing up for you, but its simple structure should make it easy to slide it into your existing backup routine."}),"\n",(0,i.jsx)(r.p,{children:"Once you have created your first backup, it's recommended that you try restoring from that backup to make sure everything is correct and will work in case you need to restore from it in the future."}),"\n",(0,i.jsx)(r.admonition,{title:"Shutdown your server!",type:"danger",children:(0,i.jsx)(r.p,{children:"Always shutdown Watcharr before backing up its data, otherwise you run the risk of corrupting files (mainly your database)."})}),"\n",(0,i.jsx)(r.h2,{id:"simple-steps",children:"Simple Steps"}),"\n",(0,i.jsx)(r.admonition,{title:"Recommended",type:"success",children:(0,i.jsx)(r.p,{children:"This is the recommended way to backup."})}),"\n",(0,i.jsxs)(r.p,{children:["Here are the steps that are run daily for the ",(0,i.jsx)(r.code,{children:"beta.watcharr.app"})," instance."]}),"\n",(0,i.jsxs)(r.ol,{children:["\n",(0,i.jsx)(r.li,{children:"Shutdown Watcharr."}),"\n",(0,i.jsxs)(r.li,{children:["Copy and backup the entire ",(0,i.jsx)(r.code,{children:"data"})," folder (default location is ",(0,i.jsx)(r.code,{children:"./data"}),", backup whichever folder your server is configured to store its data in)."]}),"\n",(0,i.jsx)(r.li,{children:"Start Watcharr."}),"\n"]}),"\n",(0,i.jsx)(r.p,{children:"I call these the simple steps because they simply backup your entire server, if you ever need to restore your server, it will start up from its exact state at backup."}),"\n",(0,i.jsx)(r.h2,{id:"advanced-steps",children:"Advanced Steps"}),"\n",(0,i.jsx)(r.admonition,{title:"Discouraged",type:"danger",children:(0,i.jsx)(r.p,{children:"Backing up this way is discouraged because new important files could be added later and missed."})}),"\n",(0,i.jsx)(r.p,{children:'If you don\'t care about the warning not to backup this way, here are the "important" files that you can single out for backup:'}),"\n",(0,i.jsxs)(r.ul,{children:["\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.code,{children:"watcharr.db"})," & ",(0,i.jsx)(r.code,{children:"watcharr.db-wal"})," Your database, holds all users, their watchlists, etc."]}),"\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.code,{children:"watcharr.json"})," Server config."]}),"\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.code,{children:"img/up"})," Profile picture uploads."]}),"\n",(0,i.jsxs)(r.li,{children:[(0,i.jsx)(r.code,{children:"img/games"})," Game posters (not exactly important, but scenarios in which this folder is not backed up have not been tested, only relevant for servers with game support enabled)."]}),"\n"]})]})}function u(e={}){const{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},8453(e,r,t){t.d(r,{R:()=>a,x:()=>o});var n=t(6540);const i={},s=n.createContext(i);function a(e){const r=n.useContext(s);return n.useMemo(function(){return"function"==typeof e?e(r):{...r,...e}},[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(s.Provider,{value:r},e.children)}}}]);
File diff suppressed because one or more lines are too long
+9
View File
@@ -0,0 +1,9 @@
/*!
* Viewer.js v1.11.7
* https://fengyuanchen.github.io/viewerjs
*
* Copyright 2015-present Chen Fengyuan
* Released under the MIT license
*
* Date: 2024-11-24T04:32:19.116Z
*/
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[352],{5421(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Usage","description":"Hopefully Watcharr is easy enough to get started with and use, but incase you are stuck, one of these usage guides may help.","slug":"/category/usage","permalink":"/docs/category/usage","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"Trakt","permalink":"/docs/importing/trakt"},"next":{"title":"Adding To Your Watchlist","permalink":"/docs/usage/adding-to-watchlist"}}}}')}}]);
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[899],{1920(t,e,n){n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>a,metadata:()=>o,toc:()=>d});const o=JSON.parse('{"id":"introduction","title":"Introduction","description":"Watcharr is for the peeps who like to keep a list of all the content they have ever watched.","source":"@site/docs/introduction.md","sourceDirName":".","slug":"/introduction","permalink":"/docs/introduction","draft":false,"unlisted":false,"editUrl":"https://github.com/sbondCo/Watcharr/tree/dev/doc/docs/introduction.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_position":1},"sidebar":"tutorialSidebar","next":{"title":"Installation","permalink":"/docs/category/installation"}}');var r=n(4848),i=n(8453);const a={sidebar_position:1},s="Introduction",c={},d=[];function h(t){const e={a:"a",h1:"h1",header:"header",p:"p",...(0,i.R)(),...t.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.header,{children:(0,r.jsx)(e.h1,{id:"introduction",children:"Introduction"})}),"\n",(0,r.jsx)(e.p,{children:"Watcharr is for the peeps who like to keep a list of all the content they have ever watched."}),"\n",(0,r.jsxs)(e.p,{children:["If you would like more insight, the ",(0,r.jsx)(e.a,{href:"/docs/usage/adding-to-watchlist",children:"adding to your watchlist guide"}),"\nis a great example of how Watcharr is used."]})]})}function l(t={}){const{wrapper:e}={...(0,i.R)(),...t.components};return e?(0,r.jsx)(e,{...t,children:(0,r.jsx)(h,{...t})}):h(t)}},8453(t,e,n){n.d(e,{R:()=>a,x:()=>s});var o=n(6540);const r={},i=o.createContext(r);function a(t){const e=o.useContext(i);return o.useMemo(function(){return"function"==typeof t?t(e):{...e,...t}},[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:a(t.components),o.createElement(i.Provider,{value:e},t.children)}}}]);
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[235],{8552(a){a.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]);
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[98],{1723(n,e,r){r.r(e),r.d(e,{default:()=>d});r(6540);var s=r(5500);function o(n,e){return`docs-${n}-${e}`}var t=r(3025),c=r(2831),a=r(1463),i=r(4848);function u(n){const{version:e}=n;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a.A,{version:e.version,tag:o(e.pluginId,e.version)}),(0,i.jsx)(s.be,{children:e.noIndex&&(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(n){const{version:e,route:r}=n;return(0,i.jsx)(s.e3,{className:e.className,children:(0,i.jsx)(t.n,{version:e,children:(0,c.v)(r.routes)})})}function d(n){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(u,{...n}),(0,i.jsx)(l,{...n})]})}}}]);
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[887],{3419(e,n,t){t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>l});const o=JSON.parse('{"id":"installation/docker-compose","title":"Docker Compose","description":"Install and setup with Docker Compose.","source":"@site/docs/installation/docker-compose.md","sourceDirName":"installation","slug":"/installation/docker-compose","permalink":"/docs/installation/docker-compose","draft":false,"unlisted":false,"editUrl":"https://github.com/sbondCo/Watcharr/tree/dev/doc/docs/installation/docker-compose.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_position":1,"description":"Install and setup with Docker Compose."},"sidebar":"tutorialSidebar","previous":{"title":"Installation","permalink":"/docs/category/installation"},"next":{"title":"From Source","permalink":"/docs/installation/from-source"}}');var s=t(4848),a=t(8453);const r={sidebar_position:1,description:"Install and setup with Docker Compose."},i="Docker Compose",c={},l=[{value:"Installing",id:"installing",level:2},{value:"Updating",id:"updating",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"docker-compose",children:"Docker Compose"})}),"\n",(0,s.jsx)(n.h2,{id:"installing",children:"Installing"}),"\n",(0,s.jsx)(n.p,{children:"Installing Watcharr with a docker compose file is easy. You can copy the example below to get started:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",metastring:'title="docker-compose.yml"',children:"services:\n watcharr:\n # The :latest tag is used for simplicity, it is recommended\n # to use an actual version, then when updating check the releases for changelogs.\n image: ghcr.io/sbondco/watcharr:latest\n container_name: watcharr\n ports:\n - 3080:3080\n volumes:\n # Contains all of watcharr data (database & cache)\n - ./data:/data\n restart: unless-stopped\n"})}),"\n",(0,s.jsx)(n.admonition,{title:"first account",type:"danger",children:(0,s.jsxs)(n.p,{children:["When ",(0,s.jsx)(n.strong,{children:"first"})," running Watcharr, make sure only you have access. The first user created will become admin."]})}),"\n",(0,s.jsxs)(n.p,{children:["You can now start ",(0,s.jsx)(n.code,{children:"Watcharr"})," like so:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker compose up -d\n"})}),"\n",(0,s.jsxs)(n.p,{children:["If you didn't change the ports in the example, the server will be available at ",(0,s.jsx)(n.a,{href:"http://localhost:3080/",children:"http://localhost:3080/"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"updating",children:"Updating"}),"\n",(0,s.jsxs)(n.admonition,{title:"Take care",type:"danger",children:[(0,s.jsx)(n.p,{children:"We try taking care as to not release breaking changes, however it is still recommended that\nyou lookover changelogs before updating!"}),(0,s.jsxs)(n.p,{children:["Breaking changes are marked at the top of releases: ",(0,s.jsx)(n.a,{href:"https://github.com/sbondCo/Watcharr/releases",children:"https://github.com/sbondCo/Watcharr/releases"})]})]}),"\n",(0,s.jsx)(n.p,{children:"Updating your server can be done in two steps:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Update the ",(0,s.jsx)(n.code,{children:"image"})," version in your ",(0,s.jsx)(n.code,{children:"docker-compose.yml"})," file.\nSkip this step if you are using the ",(0,s.jsx)(n.code,{children:"latest"})," tag."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"# eg. update v1.19.0 to v1.20.0 (or whatever version you are updating to)\nimage: ghcr.io/sbondco/watcharr:v1.19.0\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Pull the new changes and re-create your container:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker compose pull && docker compose down && docker compose up -d\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"And that is it!"})]})}function h(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},8453(e,n,t){t.d(n,{R:()=>r,x:()=>i});var o=t(6540);const s={},a=o.createContext(s);function r(e){const n=o.useContext(a);return o.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),o.createElement(a.Provider,{value:n},e.children)}}}]);
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[742],{7093(a){a.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]);
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[287],{934(e,t,n){n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"importing/trakt","title":"Trakt","description":"You may consider a backup of your server before starting any import. They are not easily reversible, though we do our best to ensure they are accurate and bug free!","source":"@site/docs/importing/trakt.md","sourceDirName":"importing","slug":"/importing/trakt","permalink":"/docs/importing/trakt","draft":false,"unlisted":false,"editUrl":"https://github.com/sbondCo/Watcharr/tree/dev/doc/docs/importing/trakt.md","tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"sidebar_position":3},"sidebar":"tutorialSidebar","previous":{"title":"MyAnimeList","permalink":"/docs/importing/myanimelist"},"next":{"title":"Usage","permalink":"/docs/category/usage"}}');var r=n(4848),o=n(8453);const s={sidebar_position:3},a="Trakt",c={},l=[{value:"(Optional) API Key",id:"optional-api-key",level:3},{value:"Getting an API Key",id:"getting-an-api-key",level:4}];function d(e){const t={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h3:"h3",h4:"h4",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"trakt",children:"Trakt"})}),"\n",(0,r.jsx)(t.admonition,{title:"Backup?",type:"info",children:(0,r.jsx)(t.p,{children:"You may consider a backup of your server before starting any import. They are not easily reversible, though we do our best to ensure they are accurate and bug free!"})}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Note:"})," Your Trakt profile must be public ",(0,r.jsx)(t.em,{children:"during"})," this process. You are free to private it again once it completes."]}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsx)(t.li,{children:"Provide your Trakt username in the text box."}),"\n",(0,r.jsxs)(t.li,{children:["(Optional) ",(0,r.jsx)(t.a,{href:"#optional-api-key",children:"Provide your own api key"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Press ",(0,r.jsx)(t.code,{children:"Start Import"}),"."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"This will be a long process, possibly a couple hours depending on how large of a Trakt history you have. If you think it has frozen or isn't working, try checking your server logs to see if it is doing anything."}),"\n",(0,r.jsx)(t.h3,{id:"optional-api-key",children:"(Optional) API Key"}),"\n",(0,r.jsxs)(t.p,{children:["This step is optional because Watcharr comes built in with its own API Key that it can use for your import, however, if you encounter any issues where imports cannot start or keep failing and you see any ",(0,r.jsx)(t.code,{children:"403"})," errors in your server logs, providing your own key may fix the problem."]}),"\n",(0,r.jsx)(t.h4,{id:"getting-an-api-key",children:"Getting an API Key"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.a,{href:"https://trakt.tv/oauth/applications/new",children:"Visit this link to create a new Trakt API App"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["Fill out all required fields (",(0,r.jsx)(t.code,{children:"Name"})," and ",(0,r.jsx)(t.code,{children:"Redirect uri"}),") with any random data.","\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["You can set the ",(0,r.jsx)(t.code,{children:"Redirect uri"})," to any value the input accepts since we don't use it (eg: ",(0,r.jsx)(t.code,{children:"http://localhost"}),")"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(t.li,{children:["Click ",(0,r.jsx)(t.code,{children:"Save App"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["You should now be redirected to your new app. Copy the ",(0,r.jsx)(t.code,{children:"Client ID"})," into the ",(0,r.jsx)(t.code,{children:"API Key"})," textbox in Watcharr."]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453(e,t,n){n.d(t,{R:()=>s,x:()=>a});var i=n(6540);const r={},o=i.createContext(r);function s(e){const t=i.useContext(o);return i.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]);
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[157],{2640(e,n,r){r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"id":"server_config/environment-variables","title":"Environment Variables","description":"All environment variables you can use to start your server in a specific way.","source":"@site/docs/server_config/environment-variables.md","sourceDirName":"server_config","slug":"/server_config/environment-variables","permalink":"/docs/server_config/environment-variables","draft":false,"unlisted":false,"editUrl":"https://github.com/sbondCo/Watcharr/tree/dev/doc/docs/server_config/environment-variables.md","tags":[],"version":"current","sidebarPosition":11,"frontMatter":{"sidebar_position":11,"description":"All environment variables you can use to start your server in a specific way."},"sidebar":"tutorialSidebar","previous":{"title":"Restoring Admin Priviliges","permalink":"/docs/server_config/restoring-admin"},"next":{"title":"Backing Up","permalink":"/docs/server_config/backup"}}');var i=r(4848),a=r(8453);const o={sidebar_position:11,description:"All environment variables you can use to start your server in a specific way."},s="Environment Variables",c={},l=[{value:"<code>WATCHARR_DATA</code>",id:"watcharr_data",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",header:"header",p:"p",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"environment-variables",children:"Environment Variables"})}),"\n",(0,i.jsx)(n.p,{children:"Currently there is only one, and maybe it will stay that way forever (because the admin interface can handle most settings). A very lonely page right now ;(."}),"\n",(0,i.jsx)(n.h2,{id:"watcharr_data",children:(0,i.jsx)(n.code,{children:"WATCHARR_DATA"})}),"\n",(0,i.jsx)(n.p,{children:"Make Watcharr use a custom directory for all of its data."}),"\n",(0,i.jsxs)(n.p,{children:["Defaults to ",(0,i.jsx)(n.code,{children:"./data"}),"."]})]})}function u(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453(e,n,r){r.d(n,{R:()=>o,x:()=>s});var t=r(6540);const i={},a=t.createContext(i);function o(e){const n=t.useContext(a);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]);
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[361],{1860(e,t,r){r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"importing/text-file","title":"Text File (.txt list)","description":"You may consider a backup of your server before starting any import. They are not easily reversible, though we do our best to ensure they are accurate and bug free!","source":"@site/docs/importing/text-file.md","sourceDirName":"importing","slug":"/importing/text-file","permalink":"/docs/importing/text-file","draft":false,"unlisted":false,"editUrl":"https://github.com/sbondCo/Watcharr/tree/dev/doc/docs/importing/text-file.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Watcharr","permalink":"/docs/importing/watcharr"},"next":{"title":"MyAnimeList","permalink":"/docs/importing/myanimelist"}}');var n=r(4848),o=r(8453);const a={sidebar_position:1},s="Text File (.txt list)",l={},c=[{value:"Format",id:"format",level:2},{value:"An example",id:"an-example",level:2}];function d(e){const t={admonition:"admonition",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"text-file-txt-list",children:"Text File (.txt list)"})}),"\n",(0,n.jsx)(t.admonition,{title:"Backup?",type:"info",children:(0,n.jsx)(t.p,{children:"You may consider a backup of your server before starting any import. They are not easily reversible, though we do our best to ensure they are accurate and bug free!"})}),"\n",(0,n.jsx)(t.p,{children:"The text file (.txt) import is of an arbitrary format (the one I used for years before creating Watcharr)."}),"\n",(0,n.jsx)(t.p,{children:"Hopefully it is useful for others with similar files or in scenarios where its the easiest to generate for an import (though if possible, when generating a backup from another service data manually, matching a Watcharr export would enable keeping more data)."}),"\n",(0,n.jsx)(t.h2,{id:"format",children:"Format"}),"\n",(0,n.jsx)(t.p,{children:"Each line is a new entry. The name of the content (show/movie) must be provided. Doesn't support specifying if name is for a show or movie, the importer will only automatically match on full search matches, if there are multiple results, you will be asked to pick the correct one."}),"\n",(0,n.jsx)(t.p,{children:"Optionally provide:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["The year in brackets (eg: ",(0,n.jsx)(t.code,{children:"(1983)"}),")"]}),"\n",(0,n.jsxs)(t.li,{children:["A rating (out of 10) in square brackets (eg: ",(0,n.jsx)(t.code,{children:"[4]"})," or ",(0,n.jsx)(t.code,{children:"[6.9]"}),")"]}),"\n"]}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{children:"<name> [(<year>)]\n"})}),"\n",(0,n.jsx)(t.h2,{id:"an-example",children:"An example"}),"\n",(0,n.jsx)(t.pre,{children:(0,n.jsx)(t.code,{children:"The Terminator (1984)\nBreaking Bad\nA Fistful of Dollars\nReacher (2022)\n"})})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453(e,t,r){r.d(t,{R:()=>a,x:()=>s});var i=r(6540);const n={},o=i.createContext(n);function a(e){const t=i.useContext(o);return i.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]);
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[299],{1933(e){e.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Server Configuration","description":"Learn how to configure your server.","slug":"/category/server-configuration","permalink":"/docs/category/server-configuration","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"For Development","permalink":"/docs/installation/for-development"},"next":{"title":"Games Support (via IGDB/Twitch)","permalink":"/docs/server_config/game-support-igdb"}}}}')}}]);
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[527],{7877(r){r.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Importing","description":"Guides for importing your data from other services.","slug":"/category/importing","permalink":"/docs/category/importing","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"Backing Up","permalink":"/docs/server_config/backup"},"next":{"title":"Watcharr","permalink":"/docs/importing/watcharr"}}}}')}}]);
+1
View File
@@ -0,0 +1 @@
"use strict";(globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[]).push([[545],{3608(o){o.exports=JSON.parse('{"categoryGeneratedIndex":{"title":"Installation","description":"Choose how you would like to install Watcharr.","slug":"/category/installation","permalink":"/docs/category/installation","sidebar":"tutorialSidebar","navigation":{"previous":{"title":"Introduction","permalink":"/docs/introduction"},"next":{"title":"Docker Compose","permalink":"/docs/installation/docker-compose"}}}}')}}]);
File diff suppressed because one or more lines are too long
+61
View File
@@ -0,0 +1,61 @@
/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
* @license MIT */
/**
* @license React
* react-dom-client.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react-dom.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react-jsx-runtime.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* scheduler.production.js
*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/** @license React v16.13.1
* react-is.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
+1
View File
@@ -0,0 +1 @@
(()=>{"use strict";var e,a,r,t,d,o={},c={};function n(e){var a=c[e];if(void 0!==a)return a.exports;var r=c[e]={id:e,loaded:!1,exports:{}};return o[e].call(r.exports,r,r.exports,n),r.loaded=!0,r.exports}n.m=o,n.c=c,e=[],n.O=(a,r,t,d)=>{if(!r){var o=1/0;for(i=0;i<e.length;i++){for(var[r,t,d]=e[i],c=!0,f=0;f<r.length;f++)(!1&d||o>=d)&&Object.keys(n.O).every(e=>n.O[e](r[f]))?r.splice(f--,1):(c=!1,d<o&&(o=d));if(c){e.splice(i--,1);var b=t();void 0!==b&&(a=b)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[r,t,d]},n.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return n.d(a,{a:a}),a},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,n.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var d=Object.create(null);n.r(d);var o={};a=a||[null,r({}),r([]),r(r)];for(var c=2&t&&e;("object"==typeof c||"function"==typeof c)&&!~a.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach(a=>o[a]=()=>e[a]);return o.default=()=>e,n.d(d,o),d},n.d=(e,a)=>{for(var r in a)n.o(a,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce((a,r)=>(n.f[r](e,a),a),[])),n.u=e=>"assets/js/"+({48:"a94703ab",61:"1f391b9e",97:"568bc3e4",98:"a7bd4aaa",134:"393be207",157:"c742a5ec",235:"a7456010",287:"b0e6f294",299:"d8d80848",303:"d9e31b1c",352:"8cfff9c6",361:"d37720bd",401:"17896441",449:"828ae7da",461:"d294ea5b",514:"6885b268",527:"e38456de",545:"f12d36e3",618:"45afa828",634:"c4f5d8e4",647:"5e95c892",671:"8494da2d",742:"aba21aa0",849:"0058b4c6",869:"760d6d76",887:"aa9d541a",899:"a09c2993",969:"14eb3368",990:"809512ee",996:"6b269b4f"}[e]||e)+"."+{48:"5e89ff31",61:"f6452e68",97:"4c00deee",98:"5c80c731",134:"77279b04",157:"62b9efe6",235:"690e10ce",237:"87ce40e0",285:"ecf30459",287:"8cd2710d",299:"ebec2bb9",303:"c2d8aa4b",352:"ea08dd5a",361:"926f1f6d",401:"a877991e",449:"8d5e1ada",461:"4573b1f1",514:"0ccd16fa",527:"20ed0ade",545:"6512db9b",618:"9315791c",634:"f084dabe",647:"9c713677",671:"a80f25ad",742:"1f888d55",849:"47da1b4d",869:"046a0bd6",887:"f25f6844",891:"e57a69c4",899:"82b1b8de",969:"fff76230",990:"17472274",996:"6fa89571"}[e]+".js",n.miniCssF=e=>{},n.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},d="watcharr-doc:",n.l=(e,a,r,o)=>{if(t[e])t[e].push(a);else{var c,f;if(void 0!==r)for(var b=document.getElementsByTagName("script"),i=0;i<b.length;i++){var l=b[i];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==d+r){c=l;break}}c||(f=!0,(c=document.createElement("script")).charset="utf-8",n.nc&&c.setAttribute("nonce",n.nc),c.setAttribute("data-webpack",d+r),c.src=e),t[e]=[a];var u=(a,r)=>{c.onerror=c.onload=null,clearTimeout(s);var d=t[e];if(delete t[e],c.parentNode&&c.parentNode.removeChild(c),d&&d.forEach(e=>e(r)),a)return a(r)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=u.bind(null,c.onerror),c.onload=u.bind(null,c.onload),f&&document.head.appendChild(c)}},n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="/",n.gca=function(e){return e={17896441:"401",a94703ab:"48","1f391b9e":"61","568bc3e4":"97",a7bd4aaa:"98","393be207":"134",c742a5ec:"157",a7456010:"235",b0e6f294:"287",d8d80848:"299",d9e31b1c:"303","8cfff9c6":"352",d37720bd:"361","828ae7da":"449",d294ea5b:"461","6885b268":"514",e38456de:"527",f12d36e3:"545","45afa828":"618",c4f5d8e4:"634","5e95c892":"647","8494da2d":"671",aba21aa0:"742","0058b4c6":"849","760d6d76":"869",aa9d541a:"887",a09c2993:"899","14eb3368":"969","809512ee":"990","6b269b4f":"996"}[e]||e,n.p+n.u(e)},(()=>{var e={354:0,250:0};n.f.j=(a,r)=>{var t=n.o(e,a)?e[a]:void 0;if(0!==t)if(t)r.push(t[2]);else if(/^(250|354)$/.test(a))e[a]=0;else{var d=new Promise((r,d)=>t=e[a]=[r,d]);r.push(t[2]=d);var o=n.p+n.u(a),c=new Error;n.l(o,r=>{if(n.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var d=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;c.message="Loading chunk "+a+" failed.\n("+d+": "+o+")",c.name="ChunkLoadError",c.type=d,c.request=o,t[1](c)}},"chunk-"+a,a)}},n.O.j=a=>0===e[a];var a=(a,r)=>{var t,d,[o,c,f]=r,b=0;if(o.some(a=>0!==e[a])){for(t in c)n.o(c,t)&&(n.m[t]=c[t]);if(f)var i=f(n)}for(a&&a(r);b<o.length;b++)d=o[b],n.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return n.O(i)},r=globalThis.webpackChunkwatcharr_doc=globalThis.webpackChunkwatcharr_doc||[];r.forEach(a.bind(null,0)),r.push=a.bind(null,r.push.bind(r))})()})();
-20
View File
@@ -1,20 +0,0 @@
# Dependencies
/node_modules
# Production
/build
# Generated files
.docusaurus
.cache-loader
# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
-41
View File
@@ -1,41 +0,0 @@
# Website
This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.
### Installation
```
$ yarn
```
### Local Development
```
$ yarn start
```
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
### Build
```
$ yarn build
```
This command generates static content into the `build` directory and can be served using any static contents hosting service.
### Deployment
Using SSH:
```
$ USE_SSH=true yarn deploy
```
Not using SSH:
```
$ GIT_USER=<Your GitHub username> yarn deploy
```
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
-3
View File
@@ -1,3 +0,0 @@
module.exports = {
presets: [require.resolve("@docusaurus/core/lib/babel/preset")]
};
-8
View File
@@ -1,8 +0,0 @@
{
"label": "Installation",
"position": 2,
"link": {
"type": "generated-index",
"description": "Choose how you would like to install Watcharr."
}
}
-69
View File
@@ -1,69 +0,0 @@
---
sidebar_position: 1
---
# Docker Compose
## Installing
Installing Watcharr with a docker compose file is easy. You can copy the example below to get started:
```yaml title="docker-compose.yml"
version: "3"
services:
watcharr:
# The :latest tag is used for simplicity, it is recommended
# to use an actual version, then when updating check the releases for changelogs.
image: ghcr.io/sbondco/watcharr:latest
container_name: watcharr
ports:
- 3080:3080
volumes:
# Contains all of watcharr data (database & cache)
- ./data:/data
restart: unless-stopped
```
:::danger first account
When **first** running Watcharr, make sure only you have access. The first user created will become admin.
:::
You can now start `Watcharr` like so:
```bash
docker compose up -d
```
If you didn't change the ports in the example, the server will be available at [http://localhost:3080/](http://localhost:3080/).
## Updating
:::danger Take care
We try taking care as to not release breaking changes, however it is still recommended that
you lookover changelogs before updating!
Breaking changes are marked at the top of releases: https://github.com/sbondCo/Watcharr/releases
:::
Updating your server can be done in two steps:
1. Update the `image` version in your `docker-compose.yml` file.
Skip this step if you are using the `latest` tag.
```yaml
# eg. update v1.19.0 to v1.20.0 (or whatever version you are updating to)
image: ghcr.io/sbondco/watcharr:v1.19.0
```
2. Pull the new changes and re-create your container:
```bash
docker compose pull && docker compose down && docker compose up -d
```
And that is it!
-74
View File
@@ -1,74 +0,0 @@
---
sidebar_position: 10
---
# From Source
## Installing
1. Get the code
```bash
git clone https://github.com/sbondCo/Watcharr.git && \
cd Watcharr
```
If you want a specific version, checkout a version tag (replace `<tag>` with the tag):
```bash
git checkout <tag>
```
2. Build the frontend
The server will use the built files, so we move them to the `ui` folder, besides where it's binary will be built.
```bash
npm i && \
npm run build && \
mv ./build ./server/ui
```
3. Build the server
```bash
cd server && \
go mod download && \
GOOS=linux go build -o ./watcharr
```
4. Run the server
:::danger first account
When **first** running Watcharr, make sure only you have access. The first user created will become admin.
:::
```bash
./watcharr
```
5. Visit [http://localhost:3080/](http://localhost:3080/) and setup Watcharr.
## Updating
:::danger Take care
We try taking care as to not release breaking changes, however it is still recommended that
you lookover changelogs before updating!
Breaking changes are marked at the top of releases: https://github.com/sbondCo/Watcharr/releases
:::
Updating is the same as installing except:
1. Cleanup old build. Delete the `ui` folder and the `watcharr` binary.
2. Replace step one with getting the new code:
```bash
git pull
```
If you checked out a tag, update to the new tag as well.
-10
View File
@@ -1,10 +0,0 @@
---
sidebar_position: 1
---
# Introduction
Watcharr is for the peeps who like to keep a list of all the content they have ever watched.
If you would like more insight, the [adding to your watchlist guide](/docs/usage/adding-to-watchlist)
is a great example of how Watcharr is used.
-8
View File
@@ -1,8 +0,0 @@
{
"label": "Server Configuration",
"position": 2,
"link": {
"type": "generated-index",
"description": "Learn how to configure your server."
}
}
@@ -1,47 +0,0 @@
---
sidebar_position: 1
---
# Games Support (via IGDB/Twitch)
## Overview
Game support in Watcharr, currently, must be enabled by you.
This involves setting up a Twitch developer account (phone number needed for 2FA which is required) and entering application credentials into Watcharr, that can then be used for looking up game info via IGDB.
P.S. These steps are stolen from [igdb api docs](https://api-docs.igdb.com/#account-creation), I've tried to make it easier to follow with screenshots.
## Steps
### Setup On Twitch
1. Sign up for a [Twitch](https://dev.twitch.tv/login) account.
Click login with twitch, then create an account in the Sign Up tab.
2. Enable two factor authentication in your [account Security settings](https://www.twitch.tv/settings/security) (currently requires a phone number).
3. [Register a new Application in the Twitch Developer Console](https://dev.twitch.tv/console/apps/create).
These settings will do (name can be anything, we don't use OAuth, but a redirect url is required; localhost will do):
![Registering twitch application](./img/twitch-register-app.png)
4. [Click manage](https://dev.twitch.tv/console/apps) on your newly created application.
5. Click 'New Secret' to generate a new Client Secret.
6. Take a note of your Client ID and new Client Secret (by leaving this tab open, until we are ready to copy the values into Watcharr).
### Setup On Watcharr
1. Login to Watcharr with an Admin account and navigate to server settings.
![Navigating to server settings in Watcharr](./img/watcharr-settings-dropdown.png)
2. Scroll down and click on the Twitch service.
![Twitch service config button](./img/watcharr-twitch-service.png)
3. Enter your Client ID and Client Secret (from Twitch Application page, step 6 on twitch setup steps)
![Twitch service config](./img/watcharr-twitch-config.png)
4. Click save, and start searching for your favourite games!
![Watcharr game details page](./img/watcharr-game-details.png)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

-8
View File
@@ -1,8 +0,0 @@
{
"label": "Usage",
"position": 3,
"link": {
"type": "generated-index",
"description": "Hopefully Watcharr is easy enough to get started with and use, but incase you are stuck, one of these usage guides may help."
}
}
-39
View File
@@ -1,39 +0,0 @@
---
sidebar_position: 1
---
# Adding To Your Watchlist
Adding movies or shows to your watchlist is the core feature of Watcharr.
The homepage is where your list will appear once you have added some.
To get started, you can follow along with these steps to add your first movie/show:
1. Search for the content:
![Searching For Content](./img/search-for-content.png)
2. Hover or click on the content you want to add:
![Hovering over poster](./img/search-for-content-hover-poster.png)
3. Clicking the + (Plus) icon will let you give the content a status.
Currently supported statuses include: `Finished`, `Watching`, `Held`, `Planned`, `Dropped`.
![Giving content a status](./img/search-for-content-hover-poster-status.png)
4. Rate the content.
![Giving content a rating](./img/search-for-content-hover-poster-rate.png)
If you prefer, you can also do this by clicking/tapping on the active poster again.
This will take you to the contents full page. Here you can see all the options, including
adding `Thoughts` for the content.
![Content full page](./img/content-full-page.png)
`Thoughts` can be anything you would like to write down or remember about the specific movie/show.
For example, sometimes I like to write something specific that I _really_ liked about the content,
or for some shows, I write down my favourite seasons and how many times I have watched them.
-110
View File
@@ -1,110 +0,0 @@
// @ts-check
// Note: type annotations allow type checking and IDEs autocompletion
const { themes } = require("prism-react-renderer");
const lightTheme = themes.github;
const darkTheme = themes.dracula;
/** @type {import('@docusaurus/types').Config} */
const config = {
title: "Watcharr Docs",
tagline:
"Open source, self-hostable watched list for all your content with user authentication, modern and clean UI and a very simple setup. ",
favicon: "img/favicon.png",
// Set the production url of your site here
url: "https://watcharr.app",
// Set the /<baseUrl>/ pathname under which your site is served
// For GitHub pages deployment, it is often '/<projectName>/'
baseUrl: "/",
// GitHub pages deployment config.
// If you aren't using GitHub pages, you don't need these.
organizationName: "sbondCo", // Usually your GitHub org/user name.
projectName: "Watcharr", // Usually your repo name.
onBrokenLinks: "throw",
onBrokenMarkdownLinks: "warn",
trailingSlash: false,
// Even if you don't use internalization, you can use this field to set useful
// metadata like html lang. For example, if your site is Chinese, you may want
// to replace "en" with "zh-Hans".
i18n: {
defaultLocale: "en",
locales: ["en"]
},
presets: [
[
"classic",
/** @type {import('@docusaurus/preset-classic').Options} */
({
docs: {
sidebarPath: require.resolve("./sidebars.js"),
// Please change this to your repo.
// Remove this to remove the "edit this page" links.
editUrl: "https://github.com/sbondCo/Watcharr/tree/dev/doc"
},
blog: {
showReadingTime: true,
// Please change this to your repo.
// Remove this to remove the "edit this page" links.
editUrl: "https://github.com/sbondCo/Watcharr/tree/dev/doc"
},
theme: {
customCss: [
"./node_modules/viewerjs/dist/viewer.css",
require.resolve("./src/css/custom.css")
]
}
})
]
],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
({
image: "img/social-card.png",
navbar: {
title: "Watcharr",
logo: {
alt: "Watcharr Logo",
src: "img/favicon.png"
},
items: [
{
type: "docSidebar",
sidebarId: "tutorialSidebar",
position: "left",
label: "Docs"
},
{
type: "docsVersionDropdown"
},
{
href: "https://beta.watcharr.app",
label: "Demo",
position: "right"
},
{
href: "https://github.com/sbondCo/Watcharr",
label: "GitHub",
position: "right"
}
]
},
prism: {
theme: lightTheme,
darkTheme: darkTheme
},
colorMode: {
defaultMode: "light",
// Dark theme currently disabled.. no time to fix the icons etc.
disableSwitch: true
}
})
};
module.exports = config;
-14664
View File
File diff suppressed because it is too large Load Diff
-44
View File
@@ -1,44 +0,0 @@
{
"name": "watcharr-doc",
"version": "0.0.0",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids"
},
"dependencies": {
"@docusaurus/core": "3.1.1",
"@docusaurus/preset-classic": "3.1.1",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.1.0",
"prism-react-renderer": "^2.3.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"viewerjs": "^1.11.6"
},
"devDependencies": {
"@docusaurus/module-type-aliases": "3.1.1"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"engines": {
"node": ">=18.0"
}
}
-33
View File
@@ -1,33 +0,0 @@
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
// @ts-check
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
const sidebars = {
// By default, Docusaurus generates a sidebar from the docs folder structure
tutorialSidebar: [{ type: "autogenerated", dirName: "." }]
// But you can create a sidebar manually
/*
tutorialSidebar: [
'intro',
'hello',
{
type: 'category',
label: 'Tutorial',
items: ['tutorial-basics/create-a-document'],
},
],
*/
};
module.exports = sidebars;
@@ -1,61 +0,0 @@
import React from "react";
import clsx from "clsx";
import styles from "./styles.module.css";
const FeatureList = [
{
title: "Free and Open",
Svg: require("@site/static/img/icon/code-slash.svg").default,
description: (
<>
Watcharr is free and open source software distributed under the MIT license. Feel free to
browse, modify or contribute!
</>
)
},
{
title: "Simple",
Svg: require("@site/static/img/icon/happy.svg").default,
description: (
<>
Watcharr is incredibly easy to dive into. Install without hassle and get started with the
seamless and intuitive user experience.
</>
)
},
{
title: "Built With Go and Svelte",
Svg: require("@site/static/img/icon/go.svg").default,
description: (
<>Don't know what else to add here, so now you know Watcharr is built with Go and Svelte.</>
)
}
];
function Feature({ Svg, title, description }) {
return (
<div className={clsx("col col--4")}>
<div className="text--center">
<Svg className={styles.featureSvg} role="img" />
</div>
<div className="text--center padding-horiz--md">
<h3>{title}</h3>
<p>{description}</p>
</div>
</div>
);
}
export default function HomepageFeatures() {
return (
<section className={styles.features}>
<div className="container">
<div className="row">
{FeatureList.map((props, idx) => (
<Feature key={idx} {...props} />
))}
</div>
</div>
</section>
);
}
@@ -1,11 +0,0 @@
.features {
display: flex;
align-items: center;
padding: 2rem 0;
width: 100%;
}
.featureSvg {
height: 200px;
width: 200px;
}
-71
View File
@@ -1,71 +0,0 @@
import React, { useEffect } from "react";
import styles from "./styles.module.css";
import clsx from "clsx";
import Viewer from "viewerjs";
function TwoColFeat({ title, description, imgSrc }) {
return (
<div className={clsx(styles.twoCol)}>
<div>
<h2>{title}</h2>
<p>{description}</p>
</div>
<div>
<img src={imgSrc} alt="" loading="lazy" />
</div>
</div>
);
}
export function HomepageTwoColFeats() {
useEffect(() => {
const ctr = document.getElementById("homepage-two-col-feats");
console.debug("Starting image viewer", ctr);
new Viewer(ctr, {
navbar: 0,
toolbar: {
zoomIn: 2,
zoomOut: 2,
next: 2,
prev: 2
},
title: 0,
className: "twoColViewer"
});
}, []);
return (
<section id="homepage-two-col-feats" className={styles.twoColFeats}>
<TwoColFeat
title="Neat UI"
description="We just look lightweight."
imgSrc="https://github.com/sbondCo/Watcharr/raw/dev/screenshot/homepage.png"
/>
<TwoColFeat
title="Easy To Use"
description="Not much to it, other than ease of use."
imgSrc="https://github.com/sbondCo/Watcharr/raw/dev/screenshot/homepage-poster-change-status.png"
/>
<TwoColFeat
title="In-Depth Details"
description="About your favourite content."
imgSrc="https://github.com/sbondCo/Watcharr/raw/dev/screenshot/content-details-page.png"
/>
<TwoColFeat
title="Personal Stats and Configuration"
description="Make it how you like."
imgSrc="https://github.com/sbondCo/Watcharr/raw/dev/screenshot/user-profile.png"
/>
<TwoColFeat
title="Discovery"
description="Find the latest trending content."
imgSrc="https://github.com/sbondCo/Watcharr/raw/dev/screenshot/discover-page.png"
/>
<TwoColFeat
title="Dark Theme"
description="For you who are still unsatisfied. ;("
imgSrc="https://github.com/sbondCo/Watcharr/raw/dev/screenshot/content-details-page-dark.png"
/>
</section>
);
}
@@ -1,53 +0,0 @@
.twoColFeats {
display: flex;
align-items: center;
margin-left: auto;
margin-right: auto;
flex-flow: column;
width: 100%;
max-width: 1300px;
}
.twoCol {
display: flex;
flex-flow: row;
width: 100%;
padding: 2.5rem 5rem;
gap: 50px;
background-color: rgb(236, 236, 236);
}
.twoCol:nth-child(even) {
flex-flow: row-reverse;
background-color: transparent;
}
.twoCol > div {
width: 50%;
display: flex;
align-items: center;
justify-content: center;
flex-flow: column;
}
.twoCol > div > img {
width: 100%;
border-radius: 12px;
box-shadow: 0px 0px 5px rgb(121, 121, 121);
cursor: pointer;
}
@media screen and (max-width: 850px) {
.twoCol,
.twoCol:nth-child(even) {
flex-flow: column;
}
.twoCol > div {
width: 100%;
}
.twoCol > div > img {
max-width: 500px;
}
}
-44
View File
@@ -1,44 +0,0 @@
/**
* Any CSS included here will be global. The classic template
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
/* You can override the default Infima variables here. */
:root {
--ifm-color-primary: #2e8555;
--ifm-color-primary-dark: #29784c;
--ifm-color-primary-darker: #277148;
--ifm-color-primary-darkest: #205d3b;
--ifm-color-primary-light: #33925d;
--ifm-color-primary-lighter: #359962;
--ifm-color-primary-lightest: #3cad6e;
--ifm-code-font-size: 95%;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
}
/* For readability concerns, you should choose a lighter palette in dark mode. */
[data-theme="dark"] {
--ifm-color-primary: #25c2a0;
--ifm-color-primary-dark: #21af90;
--ifm-color-primary-darker: #1fa588;
--ifm-color-primary-darkest: #1a8870;
--ifm-color-primary-light: #29d5b0;
--ifm-color-primary-lighter: #32d8b4;
--ifm-color-primary-lightest: #4fddbf;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
}
.twoColViewer .viewer-close {
right: 10px;
top: 10px;
width: 50px;
height: 50px;
}
/* Stupid poopin fix for viewerjs because whatever is bundling the css
isn't keeping the order of this correctly. All this time wasted and it
was just opaque ;( BUT ONLY IN THE BUILD AAAAAAAAAAAAAAAAAAAAAA */
.viewer-in {
opacity: 1 !important;
}
-53
View File
@@ -1,53 +0,0 @@
import React from "react";
import Link from "@docusaurus/Link";
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
import Layout from "@theme/Layout";
import HomepageFeatures from "@site/src/components/HomepageFeatures";
import LogoCol from "@site/static/img/logo-col.png";
import styles from "./index.module.css";
import clsx from "clsx";
import { HomepageTwoColFeats } from "../components/TwoColFeat";
function HomepageHeader() {
const { siteConfig } = useDocusaurusContext();
return (
<header className="hero shadow--lw">
<div className={styles.heroContainer}>
<div className={styles.heroWrapper}>
<img src={LogoCol} />
<h1 className="hero__title">{siteConfig.title}</h1>
<p className="hero__subtitle">{siteConfig.tagline}</p>
<div className={styles.buttons}>
<Link className="button button--secondary button--lg" to="/docs/introduction">
Get Started
</Link>
<Link
className="button button--secondary button--outline button--lg"
to="https://beta.watcharr.app"
target="_blank"
>
Demo
</Link>
</div>
</div>
</div>
</header>
);
}
export default function Home() {
const { siteConfig } = useDocusaurusContext();
return (
<Layout
title={`${siteConfig.title}`}
description="Description will go into a meta tag in <head />"
>
<HomepageHeader />
<main>
<HomepageFeatures />
<HomepageTwoColFeats />
</main>
</Layout>
);
}
-34
View File
@@ -1,34 +0,0 @@
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
*/
.heroContainer {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
}
.heroWrapper {
display: flex;
align-items: center;
justify-content: center;
flex-flow: column;
max-width: 600px;
padding-left: 2rem;
padding-right: 2rem;
text-align: center;
}
.heroWrapper img {
width: 30vh;
max-width: 250px;
}
.buttons {
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
}
-7
View File
@@ -1,7 +0,0 @@
---
title: Markdown page example
---
# Markdown page example
You don't need React to write simple standalone pages.
-13
View File
@@ -1,13 +0,0 @@
version: "3"
# To test prod
services:
watcharr:
build:
context: .
dockerfile: Dockerfile
container_name: watcharr
ports:
- 3080:3080
volumes:
- ./container_data:/data
-14
View File
@@ -1,14 +0,0 @@
version: "3"
services:
watcharr:
# The :latest tag is used for simplicity, it is recommended
# to use an actual version, then when updating check the releases for changelogs.
image: ghcr.io/sbondco/watcharr:latest
container_name: watcharr
ports:
- 3080:3080
volumes:
# Contains all of watcharr data (database & cache)
- ./data:/data
restart: unless-stopped
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More