commit 11c6212fb7f1ef4c719b573474ced68c197ffacb
Author: Nathan Schneider <n@nathanschneider.info>
Date:   Sun Mar 14 16:34:32 2021 -0600

    Initial commit

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e5b6dc5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+knowledgebase/site/
+developer/site/
+dist
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..07ffb65
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,31 @@
+# jobs belong to a stage. the jobs of a stage are run in parallel.
+# stages are run in sequence.
+# artifacts are attached to the jobs on success (downloadable from UI)
+# cache is preserved between pipelines (and not meant for jobs)
+
+default:
+  image: cloudron/docs-ci@sha256:4a63ad48a6fbbd168828769b0d796b511d09d173ab5dd64368338997164aa4ab
+
+variables:
+  DOCS_SERVER: docs.medlab.host
+
+build-docs:
+  stage: build
+  script:
+    - redoc-cli bundle cloudron_api_swagger.yaml --output "dist/api.html" --title "Docs" --disableGoogleFont=true
+    - cd files && LC_ALL=C.UTF-8 LANG=C.UTF-8 mkdocs build --dirty --site-dir "../dist/"
+  artifacts:
+    paths:
+      - dist/
+    expire_in: 2 hours
+
+deploy-docs:
+  stage: deploy
+  script:
+    - surfer put --server ${DOCS_SERVER} --token ${CLOUDRON_DOCS_SURFER_TOKEN} --delete dist/* /
+  only:
+    - master
+
+stages:
+  - build
+  - deploy
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..1f0d3a5
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,11 @@
+FROM cloudron/base:3.0.0@sha256:455c70428723e3a823198c57472785437eb6eab082e79b3ff04ea584faf46e92
+
+# passed from ./update.sh
+ARG MKDOCS_MATERIAL_VERSION
+ARG SURFER_VERSION
+
+RUN apt-get update && \
+    apt install python3-setuptools && \
+    pip3 install mkdocs-material==$MKDOCS_MATERIAL_VERSION && \
+    npm i -g redoc-cli && \
+    npm install -g cloudron-surfer@$SURFER_VERSION
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..2bba1e8
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 cloudron
+
+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.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..02deaaf
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+Example mkdocs site that publishes from GitLab to Surfer on Cloudron. Based on [https://git.cloudron.io/cloudron/docs](https://git.cloudron.io/cloudron/docs).
+
+Example live docs site: [https://docs.medlab.host](https://docs.medlab.host)
+
+Ensure that CLOUDRON_DOCS_SURFER_TOKEN and DOCS_SERVER are set in GitLab
diff --git a/cloudron_api_swagger.yaml b/cloudron_api_swagger.yaml
new file mode 100644
index 0000000..ec2ff0c
--- /dev/null
+++ b/cloudron_api_swagger.yaml
@@ -0,0 +1,2562 @@
+swagger: "2.0"
+info:
+  title: Cloudron API
+  version: 1.0.0
+  x-logo:
+    url: "/img/cloudron-banner.png"
+  description: Cloudron provides a RESTful API to manage all aspects of the Cloudron like adding users, configuring groups and installing apps.
+    <br/>
+    <br/>
+    If you are an app developer, the [Cloudron CLI tool](https://www.npmjs.com/package/cloudron) implements a workflow that allows
+    you to develop apps on your Cloudron. The CLI tool uses the REST API documented here.
+    <br/>
+    <br/>
+    The access token can be provided via the request query `?access_token=<token>` or the token can be provided via the Authorization header using `Bearer <token>`.
+host: my.example.com
+basePath: /api/v1
+schemes:
+  - https
+consumes:
+  - application/json
+produces:
+  - application/json
+tags:
+  # Primary objects
+  - name: "Cloudron"
+  - name: "Appstore"
+  - name: "App Passwords"
+  - name: "Apps"
+  - name: "Backups"
+  - name: "Branding"
+  - name: "Domains"
+    description: Add and manage domains.
+  - name: "Groups"
+  - name: "Mail"
+  - name: "Mailserver"
+  - name: "Network"
+  - name: "Notifications"
+  - name: "Profile"
+  - name: "Services"
+  - name: "Settings"
+  - name: "Tasks"
+  - name: "Tokens"
+  - name: "Users"
+  - name: "Volumes"
+parameters:
+  DomainName:
+    in: path
+    name: domain
+    description: Domain
+    required: true
+    type: string
+  MailboxName:
+    in: path
+    name: name
+    description: Mailbox
+    required: true
+    type: string
+  PaginationPage:
+    in: query
+    name: page
+    type: integer
+    format: int32
+    minimum: 1
+    default: 1
+  PaginationPerPage:
+    in: query
+    name: per_page
+    type: integer
+    format: int32
+    minimum: 1
+    default: 25
+  TaskId:
+    in: path
+    name: taskId
+    description: Task ID
+    required: true
+    type: integer
+  UserId:
+    in: path
+    name: userId
+    description: User ID
+    required: true
+    type: string
+  GroupId:
+    in: path
+    name: groupId
+    description: Group ID
+    required: true
+    type: string
+  ServiceName:
+    in: path
+    name: service
+    description: Service Name
+    required: true
+    type: string
+    enum:
+      - mail
+      - mongodb
+      - mysql
+      - postgresql
+      - docker
+      - unbound
+      - sftp
+      - graphite
+      - nginx
+definitions:
+  Mailbox:
+    description: Mailbox
+    type: object
+    properties:
+      name:
+        type: string
+        example: webmaster
+      domain:
+        type: string
+        example: example.com
+      ownerId:
+        type: string
+        example: uid-be9dcf57-ad65-40e0-a3f8-d1c75974bf01
+      ownerType:
+        type: string
+        example: user
+      aliases:
+        type: array
+        example: "[{ name, domain }]"
+  Domain:
+    description: Domain Info
+    type: object
+    properties:
+      domain:
+        type: string
+        example: example.com
+      enabled:
+        type: boolean
+        example: true
+      mailFromValidation:
+        type: boolean
+        example: true
+      catchAll:
+        type: array
+        example: []
+      relay:
+        type: object
+        properties:
+          provider:
+            $ref: '#/definitions/MailRelayProvider'
+      banner:
+        type: object
+        description: Text and HTML mail signature
+        properties:
+          text:
+            type: string
+          html:
+            type: string
+  UserId:
+    description: User ID
+    type: string
+    example: 'uid-5d06e9da-8e4a-4184-b63c-c25487e1c70b'
+  Group:
+    type: object
+    properties:
+      id:
+        type: string
+        example: gid-e08ca116-d3e5-43c9-b43f-6eb990be58ea
+      name:
+        type: string
+        example: Manager
+  GroupWithMembers:
+    type: object
+    properties:
+      id:
+        type: string
+        example: gid-e08ca116-d3e5-43c9-b43f-6eb990be58ea
+      name:
+        type: string
+        example: Manager
+      userIds:
+        type: array
+        items:
+          $ref: '#/definitions/UserId'
+        example: [ 'uid-e08ca116-d3e5-43c9-b43f-6eb990be58ea' ]
+  User:
+    type: object
+    properties:
+      id:
+        type: string
+      username:
+        type: string
+      displayName:
+        type: string
+      email:
+        type: string
+        format: email
+      fallbackEmail:
+        type: string
+        format: email
+      groupIds:
+        type: array
+        example: []
+      admin:
+        type: boolean
+      active:
+        type: boolean
+      source:
+        type: string
+        description: A value of `ldap` indicates, this user if from an LDAP/ActiveDirectory user, otherwise a local user
+        enum:
+          - ''
+          - ldap
+  RestrictedUser:
+    type: object
+    properties:
+      id:
+        type: string
+      username:
+        type: string
+      displayName:
+        type: string
+      email:
+        type: string
+        format: email
+      active:
+        type: boolean
+  Provider:
+    type: string
+    description: VPS provider name tag
+    enum:
+      - ami
+      - azure
+      - cloudscale
+      - contabo
+      - digitalocean
+      - ec2
+      - exoscale
+      - galaxygate
+      - gce
+      - hetzner
+      - interox
+      - lightsail
+      - linode
+      - netcup
+      - ovh
+      - rosehosting
+      - scaleway
+      - skysilk
+      - time4vps
+      - upcloud
+      - vultr
+      - generic
+    example: linode
+  MailRelayProvider:
+    type: string
+    description: Mail SMTP relay provider
+    enum:
+      - cloudron-smtp
+      - external-smtp
+      - external-smtp-noauth
+      - ses-smtp
+      - elasticemail-smtp
+      - google-smtp
+      - mailgun-smtp
+      - mailjet-smtp
+      - postmark-smtp
+      - sendgrid-smtp
+      - sparkpost-smtp
+      - noop
+    example: postmark-smtp
+  Service:
+    type: object
+    properties:
+      name:
+        type: string
+        example: mysql
+        enum:
+          - mail
+          - mongodb
+          - mysql
+          - postgresql
+          - docker
+          - unbound
+          - sftp
+          - graphite
+          - nginx
+      status:
+        type: string
+        example: active
+        enum:
+          - starting
+          - active
+          - stopped
+      memoryUsed:
+        type: integer
+        format: int32
+        minimum: 0
+      memoryPercent:
+        type: integer
+        format: int32
+        minimum: 0
+      error:
+        type: string
+        example: ''
+        x-nullable: true
+      config:
+        type: object
+        description: If `memory` and `memorySwap` is not set, then they cannot be configured
+        properties:
+          memory:
+            type: integer
+            format: int32
+            minimum: 0
+          memorySwap:
+            type: integer
+            format: int32
+            minimum: 0
+  TaskType:
+    type: string
+    example: update
+    enum:
+      - app
+      - backup
+      - update
+      - renewcerts
+      - prepareDashboardDomain
+      - cleanBackups
+      - syncExternalLdap
+  Task:
+    type: object
+    properties:
+      id:
+        type: integer
+      type:
+        $ref: '#/definitions/TaskType'
+      percent:
+        type: integer
+        example: 33
+        minimum: 0
+        maximum: 100
+      message:
+        type: string
+        description: For display purpose to show more informed progress
+      error:
+        type: object
+        properties:
+          message:
+            type: string
+          code:
+            type: string
+            example: crashed
+            enum:
+              - stopped
+              - crashed
+              - timeout
+      active:
+        type: boolean
+        description: Determines if this task is currently active. Progress can be tracked with `message` and `percent`
+        example: true
+      creationTime:
+        type: integer
+        description: Creation time UTC timestamp
+      result:
+        type: object
+      ts:
+        type: integer
+        description: Last modified UTC timestamp
+      success:
+        type: boolean
+        example: true
+        description: Determines if the task was successful. If `false` check `error` or `active` properties.
+  AddonConfig:
+    type: object
+    properties:
+      memory:
+        type: integer
+        example: 268435456
+        description: Memory limit in bytes. Example is 256MB
+      memorySwap:
+        type: integer
+        example: 536870912
+        description: Swap memory limit in bytes. Example is 512MB
+  DnsProvider:
+    type: string
+    example: digitalocean
+    enum:
+      - route53
+      - cloudflare
+      - digitalocean
+      - gandi
+      - godaddy
+      - gcdns
+      - linode
+      - namecom
+      - namecheap
+      - wildcard
+      - manual
+      - noop
+  TlsConfig:
+    type: object
+    properties:
+      provider:
+        type: string
+        example: letsencrypt-prod
+        enum:
+          - letsencrypt-prod
+          - letsencrypt-staging
+          - fallback
+      wildcard:
+        type: boolean
+        example: false
+  SysConfig:
+    type: object
+    properties:
+      provider:
+        type: string
+        description: Currently the sysinfo provider is only used to determine the public IP of the server. Which in turn is used in the DNS logic to setup records.
+        enum:
+          - fixed
+          - network-interface
+          - generic
+        example: generic
+  DomainConfig:
+    type: object
+    required:
+      - provider
+      - config
+    properties:
+      provider:
+        $ref: '#/definitions/DnsProvider'
+      config:
+        description: Provider specific config. May include username and api tokens
+        type: object
+      hyphenatedSubdomains:
+        type: boolean
+      wildcard:
+        type: boolean
+      zoneName:
+        type: string
+      fallbackCertificate:
+        type: object
+        properties:
+          key:
+            type: string
+            example: ""
+          cert:
+            type: string
+            example: ""
+      tlsConfig:
+        $ref: '#/definitions/TlsConfig'
+  AppManifest:
+    type: object
+    properties:
+      id:
+        type: string
+  App:
+    type: object
+    properties:
+      id:
+        type: string
+        example: "2b97b864-37b6-4e79-88b0-63712186a326"
+      appStoreId:
+        type: string
+        example: "org.wordpress.cloudronapp"
+      installationState:
+        type: string
+        example: "installed"
+      error:
+        type: object
+        example: null
+      runState:
+        type: string
+        example: "running"
+      health:
+        type: string
+        example: "healthy"
+      taskId:
+        type: string
+        x-nullable: true
+        example: "1234"
+      location:
+        type: string
+        description: This is the subdomain, the app is installed on. May be an empty string if no subdomain is configured
+        example: "www"
+      domain:
+        type: string
+        example: "example.com"
+      fqdn:
+        type: string
+        description: FullQualifiedDomainName is essentially `location`.`domain`
+        example: "www.example.com"
+      manifest:
+        $ref: '#/definitions/AppManifest'
+      portBindings:
+        type: object
+      iconUrl:
+        type: string
+        example: "/api/v1/apps/2b97b864-37b6-4e79-88b0-63712186a326/icon"
+      creationTime:
+        type: string
+        description: Time the app was installed
+        format: date-time
+        example: ISO-8601 UTC date
+      ts:
+        type: string
+        description: Time the app was last modified
+        format: date-time
+        example: ISO-8601 UTC date
+      tags:
+        type: array
+      label:
+        type: string
+        x-nullable: true
+        example: "MyGreatWebsite"
+  BackupFormat:
+    type: string
+    example: rsync
+    enum:
+      - rsync
+      - targz
+  BackupConfig:
+    type: object
+    properties:
+      provider:
+        type: string
+        example: s3
+        enum:
+          - s3
+          - gcs
+          - filesystem
+          - minio
+          - s3-v4-compat
+          - digitalocean-spaces
+          - exoscale-sos
+          - wasabi
+          - scaleway-objectstorage
+          - noop
+      format:
+        $ref: '#/definitions/BackupFormat'
+      retentionSecs:
+        type: integer
+        description: Maximum time to keep backups in seconds (1 week is 604800 seconds)
+        example: 604800
+      intervalSecs:
+        type: integer
+        description: Interval for automatic backups in seconds. Must be atleast 6 hours (21600 seconds)
+        example: 1
+        minimum: 21600
+      key:
+        type: string
+        description: Encyrption key. May contain a placeholder string to not leak the key
+      syncConcurrency:
+        type: integer
+        example: 5
+        minimum: 1
+      acceptSelfSignedCerts:
+        type: boolean
+        example: false
+      backupFolder:
+        type: string
+        description: only for filesystem provider
+      noHardlinks:
+        type: boolean
+        description: only for filesystem provider
+      externalDisk:
+        type: boolean
+        description: only for filesystem provider
+      accessKeyId:
+        type: string
+        description: only for S3 style provider
+      secretAccessKey:
+        type: string
+        description: only for S3 style provider
+      signatureVersion:
+        type: string
+        description: only for S3 style provider
+      endpoint:
+        type: string
+        description: only for S3 style provider
+      region:
+        type: string
+        description: only for S3 style provider
+      bucket:
+        type: string
+        description: only for S3 and gcs style provider
+      prefix:
+        type: string
+        description: only for S3 and gcs style provider
+      projectId:
+        type: string
+        description: only for gcs provider
+      credentials:
+        type: object
+        description: only for gcs provider
+        properties:
+          client_email:
+            type: string
+          private_key:
+            type: string
+  PlatformConfig:
+    type: object
+    properties:
+      mysql:
+        $ref: '#/definitions/AddonConfig'
+      postgresql:
+        $ref: '#/definitions/AddonConfig'
+      mail:
+        $ref: '#/definitions/AddonConfig'
+      mongodb:
+        $ref: '#/definitions/AddonConfig'
+  ExternalLdapConfig:
+    type: object
+    required:
+      - provider
+      - url
+      - baseDn
+      - filter
+    properties:
+      provider:
+        type: string
+        enum:
+          - ad
+          - jumpcloud
+          - okta
+          - other
+          - noop
+      url:
+        type: string
+        format: url
+      baseDn:
+        type: string
+      filter:
+        type: string
+      usernameField:
+        type: string
+        default: uid
+      bindDn:
+        type: string
+      bindPassword:
+        type: string
+      autoCreate:
+        type: boolean
+  RegistryConfig:
+    type: object
+    required:
+      - serverAddress
+    properties:
+      serverAddress:
+        type: string
+        format: url
+      username:
+        type: string
+      email:
+        type: string
+        format: email
+      password:
+        type: string
+  SysinfoConfig:
+    type: object
+    required:
+      - provider
+    properties:
+      provider:
+        type: string
+        default: generic
+        enum:
+          - generic
+          - fixed
+          - network-interface
+      ip:
+        type: string
+        description: Only applies to the `fixed` provider
+        example: 123.123.123.123
+      ifname:
+        type: string
+        description: Only applies to the `network-interface` provider
+        example: eth0
+  UpdatePattern:
+    type: object
+    required:
+      - pattern
+    properties:
+      pattern:
+        type: string
+        example: 0 030 4 1,15 * 5
+        description: The format listed in the [node-cron](https://github.com/ncb000gt/node-cron#cron-ranges) page.
+          Note that unlike classic crontab format, the pattern contains seconds as the first part. Setting pattern to `never` disables auto update.
+          Some examples of patterns are
+
+            * `00 00 1,3,5,23 * * *` would run updates at 1am, 3am, 5am, 11pm every night.
+
+            * `0 030 4 1,15 * 5` would run updates at 4:30 am on the 1st and 15th of each month, plus every Friday.
+  TimezoneConfig:
+    type: object
+    required:
+      - timeZone
+    properties:
+      timeZone:
+        type: string
+        default: America/Los_Angeles
+        description: Timezone is automatically set based on the IP address from where the Cloudron was activated. This timezone is used with the auto update pattern to trigger updates at the correct time.
+          See the [Tz database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) for a list of valid values.
+  CloudronNameConfig:
+    type: object
+    required:
+      - name
+    properties:
+      name:
+        type: string
+        default: Cloudron
+paths:
+  /cloudron/setup:
+    post:
+      summary: Initial DNS Setup
+      description: |
+        Public route and very first call to setup the dashboard domain.
+        <br/><br/>
+        <b>This call has to be made against the raw IP address (eg. https://1.2.3.4 ) accepting self-signed certificates.</b>
+        <br/><br/>
+        A curl example could look like:<br/>
+        ```curl -k -X POST -H 'Content-Type: application/json' --data '{...}' http://1.2.3.4/api/v1/cloudron/setup```
+        <br/><br/>
+        Once called, the process can be tracked through the `setup` object in the `/api/v1/cloudron/status` API reply.
+        After the status API returns a success, future API requests must be made to `https://my.domain.com`.
+        <br/><br/>
+        This routes gets disabled once the Cloudron has been activated.
+      tags: [ "Cloudron" ]
+      parameters:
+        - in: body
+          name: dns config
+          schema:
+            type: object
+            required:
+              - dnsConfig
+            properties:
+              dnsConfig:
+                type: object
+                required:
+                  - provider
+                  - domain
+                  - config
+                properties:
+                  provider:
+                    $ref: '#/definitions/DnsProvider'
+                  domain:
+                    type: string
+                    example: hello.example.com
+                  zoneName:
+                    type: string
+                    example: example.com
+                  config:
+                    type: object
+                    description: DNS provider specific configuration, for example API tokens and secrets
+                    example: { "token": "digitalocean_api_token" }
+                  tlsConfig:
+                    $ref: '#/definitions/TlsConfig'
+                  sysinfoConfig:
+                    $ref: '#/definitions/SysConfig'
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+  /cloudron/status:
+    get:
+      summary: Get status
+      description: Public route to get status information for this Cloudron.
+      tags: [ "Cloudron" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              version:
+                type: string
+                description: Cloudron version
+                example: 5.1.0
+              apiServerOrigin:
+                type: string
+                description: The API endpoint to make App Store requests
+                example: https://api.cloudron.io
+              webServerOrigin:
+                type: string
+                description: The Web endpoint for App Store assets (docs, images, etc)
+                example: https://cloudron.io
+              provider:
+                $ref: '#/definitions/Provider'
+              cloudronName:
+                type: string
+                description: Name of the Cloudron used in the login screen, nav bar
+                example: My Space
+              footer:
+                type: string
+                description: Markdown formatted footer content
+                example: "&copy; 2020  &nbsp;  [Cloudron](https://cloudron.io) &nbsp; &nbsp; &nbsp;  [Forum <i class=\"fa fa-comments\"></i>](https://forum.cloudron.io)"
+              adminFqdn:
+                type: string
+                description: The FQDN of the Cloudron dashboard
+                example: my.example.com
+              activated:
+                type: boolean
+                description: Indicates if this Cloudron was already activated. This is true once the first user was created during setup.
+                example: true
+              setup:
+                type: object
+                properties:
+                  active:
+                    type: boolean
+                    description: Indicates if a DNS setup is currently in progress. This happens after /api/v1/cloudron/setup was issued.
+                    example: false
+                  message:
+                    type: string
+                    description: Setup process status messages for ongoing progress display
+                    example: Fetching SSL certificate ...
+                  errorMessage:
+                    type: string
+                    x-nullable: true
+                    example: null
+              restore:
+                type: object
+                properties:
+                  active:
+                    type: boolean
+                    description: Indicates if a restore is currently in progress.
+                    example: false
+                  message:
+                    type: string
+                    description: Restore process status messages for ongoing progress display
+                    example: Downloading backups ...
+                  errorMessage:
+                    type: string
+                    x-nullable: true
+                    example: null
+  /cloudron/activate:
+    post:
+      summary: Activate
+      description:
+        Public route to activate the Cloudron. This creates the first user (aka owner) account.
+        <br/><br/>
+        Before installing apps, the Cloudron must be registered with a valid Appstore account as well using the 'Register Cloudron' route.
+      tags: [ "Cloudron" ]
+      parameters:
+        - in: body
+          name: activate config
+          schema:
+            type: object
+            required:
+              - username
+              - password
+              - email
+            properties:
+              username:
+                type: string
+                description: Username. The first user is also called the Owner.
+                example: oksana
+              password:
+                type: string
+                description: Password. Minimum of 8 characters required.
+                example: strongPa55word!?
+              email:
+                type: string
+                description: Primary email of the user.
+                example: oksane@example.com
+              displayName:
+                type: string
+                description: Full name of the user.
+                example: Oksana Muller
+      responses:
+        201:
+          description: OK
+          schema:
+            type: object
+            properties:
+              userId:
+                type: string
+                description: Unique ID of the created user
+                example: uid-e08ca116-d3e5-43c9-b43f-6eb990be58ea
+              token:
+                type: string
+                description: A token that will authenticate the user for future API requests. Pass this as `?access_token=<token>`.
+                example: sometoken
+              expires:
+                type: string
+                description: Expiry time of token
+                format: date-time
+                example: ISO-8601 UTC date
+  /cloudron/restore:
+    post:
+      summary: Restore
+      description: Public route to restore a whole Cloudron from backup. This is only available until the Cloudron is activated.
+      tags: [ "Cloudron" ]
+      parameters:
+        - in: body
+          name: restore config
+          schema:
+            type: object
+            required:
+              - backupConfig
+              - backupId
+              - version
+            properties:
+              backupConfig:
+                $ref: "#/definitions/BackupConfig"
+              backupId:
+                type: string
+                example: 2020-04-20-161041-646/box_2020-04-20-161045-600_v5.2.0
+              version:
+                type: string
+                example: 5.1.0
+              sysinfoConfig:
+                $ref: "#/definitions/SysinfoConfig"
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+  /cloudron/login:
+    post:
+      summary: API Login
+      description: Login to the Cloudron API to obtain an access token
+      tags: [ "Cloudron" ]
+      parameters:
+        - in: body
+          name: login data
+          schema:
+            type: object
+            required:
+              - username
+              - password
+            properties:
+              username:
+                type: string
+                example: julia
+              password:
+                type: string
+                example: supersecret
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              token:
+                type: string
+                example: sometoken
+              expiresAt:
+                type: string
+                format: date-time
+                example: ISO-8601 UTC date
+  /config:
+    get:
+      summary: Get Config
+      description: This config object contains the platform configuration.
+      tags: [ "Cloudron" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              apiServerOrigin:
+                type: string
+                format: url
+                example: https://api.cloudron.io
+              webServerOrigin:
+                type: string
+                format: url
+                example: https://cloudron.io
+              adminDomain:
+                type: string
+                description: The main domain for this Cloudron. `adminFqdn` and `mailFqdn` depend on this
+                example: example.com
+              adminFqdn:
+                type: string
+                description: Subdomain where the dashboard is reachable.
+                example: my.example.com
+              mailFqdn:
+                type: string
+                description: Subdomain where the mail server is reachable.
+                example: my.example.com
+              version:
+                type: string
+                description: Cloudron version
+                example: 4.1.2
+              isDemo:
+                type: boolean
+                example: false
+              provider:
+                $ref: '#/definitions/Provider'
+              cloudronName:
+                type: string
+                description: Same as /api/v1/settings/clouron_name
+                example: My Cloudron
+              uiSpec:
+                type: object
+                description: See https://docs.cloudron.io/hosting-provider/#customization
+  /appstore/register_cloudron:
+    post:
+      summary: Register Cloudron
+      description: Register this Cloudron with cloudron.io AppStore and enable access to the app library.
+      tags: [ "Appstore" ]
+      parameters:
+        - in: body
+          name: login data
+          schema:
+            type: object
+            required:
+              - signup
+              - email
+              - password
+            properties:
+              signup:
+                type: boolean
+                description:
+                  If `true` a new cloudron.io account will be created. If an account already exists, this request will return an error.
+                  Otherwise, this Cloudron will be assigned to the existing account.
+                example: false
+              email:
+                type: string
+                format: email
+                example: julia@example.com
+              password:
+                type: string
+                example: supersecret
+              totpToken:
+                type: string
+                description: 2FA token. Required when the cloudron.io account already exists and was setup with 2FA.
+      responses:
+        201:
+          description: OK
+  /appstore/subscription:
+    get:
+      summary: Get Subscription
+      tags: [ "Appstore" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              email:
+                type: string
+                format: email
+                example: julia@example.com
+              cloudronId:
+                type: string
+              cloudronCreatedAt:
+                type: string
+                format: date-time
+                example: ISO-8601 UTC date
+              plan:
+                type: string
+              current_period_end:
+                type: string
+                format: date-time
+                example: ISO-8601 UTC date
+              canceled_at:
+                type: string
+                format: date-time
+                example: ISO-8601 UTC date
+              cancel_at:
+                type: string
+                format: date-time
+                example: ISO-8601 UTC date
+              status:
+                type: string
+              features:
+                type: string
+  /domains:
+    get:
+      summary: List Domains
+      description: Get all domains
+      tags: [ "Domains" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              domains:
+                type: array
+                example: []
+    post:
+      summary: Add Domain
+      description: Add a new domain
+      tags: [ "Domains" ]
+      parameters:
+        - in: body
+          name: Domain config
+          schema:
+            allOf:
+              - type: object
+                required:
+                  - domain
+                properties:
+                  domain:
+                    type: string
+                    example: example.com
+              - $ref: '#/definitions/DomainConfig'
+      responses:
+        201:
+          description: OK
+        400:
+          description: Invalid fields or provider credentials
+        409:
+          description: Conflict. Domain already exists.
+  /domains/{domain}:
+    parameters:
+      - in: path
+        name: domain
+        description: Domain
+        required: true
+        type: string
+    get:
+      summary: Get Domain
+      tags: [ "Domains" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              domain:
+                type: string
+                example: cloud.example.com
+              zoneName:
+                type: string
+                example: example.com
+              provider:
+                type: string
+                example: cloudflare
+              config:
+                type: object
+                properties:
+                  hyphenatedSubdomains:
+                    type: boolean
+                    example: false
+              tlsConfig:
+                type: object
+                properties:
+                  provider:
+                    type: string
+                    example: letsencrypt-prod
+                  wildcard:
+                    type: boolean
+                    example: true
+              fallbackCertificate:
+                type: object
+                properties:
+                  cert:
+                    type: string
+                    example: ''
+                  key:
+                    type: string
+                    example: ''
+              locked:
+                type: boolean
+                example: false
+    put:
+      summary: Update Domain
+      tags: [ "Domains" ]
+      parameters:
+        - in: body
+          name: domain config
+          schema:
+            $ref: '#/definitions/DomainConfig'
+      responses:
+        204:
+          description: OK
+        400:
+          description: Invalid fields or provider credentials
+    delete:
+      summary: Remove Domain
+      tags: [ "Domains" ]
+      responses:
+        204:
+          description: OK
+        409:
+          description: Conflict. The domain is still in use
+  /domains/{domain}/dns_check:
+    parameters:
+      - in: path
+        name: domain
+        description: Domain
+        required: true
+        type: string
+      - in: query
+        name: subdomain
+        type: string
+        description: The subdomain to check the DNS record for
+    get:
+      summary: Check DNS Records
+      tags: [ "Domains" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              needsOverwrite:
+                type: boolean
+                example: false
+  /settings/dynamic_dns:
+    get:
+      summary: Get Dynamic DNS State
+      tags: [ "Settings" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              enabled:
+                type: boolean
+                example: false
+    post:
+      summary: Set Dynamic DNS State
+      tags: [ "Settings" ]
+      parameters:
+        - in: body
+          name: dynamic dns config
+          schema:
+            type: object
+            required:
+              - enabled
+            properties:
+              enabled:
+                type: boolean
+                example: false
+      responses:
+        200:
+          description: OK
+  /apps/install:
+    post:
+      summary: Install App
+      description: This triggers an app installation. Use the `taskId` from the response with the Tasks API to follow the installation progress
+        <br/>
+        <br/>
+        **Either `manifest` or `appStoreId` are required!** In most cases the `appStoreId` is the correct property to be used for installing apps from the Cloudron app catalogue.
+      tags: [ "Apps" ]
+      parameters:
+        - in: body
+          name: app config
+          schema:
+            type: object
+            required:
+              # https://stackoverflow.com/questions/29708505/swagger-2-0-how-to-make-one-or-the-other-parameter-required for manifest or appStoreId
+              - location
+              - domain
+              - accessRestriction
+            properties:
+              # Currently we ignore the key, cert, env and debugMode params in the docs
+              manifest:
+                $ref: '#/definitions/AppManifest'
+              appStoreId:
+                type: string
+                example: "org.wordpress.cloudronapp"
+              location:
+                type: string
+                description: Subdomain the app is installed at. This may be an empty string if the app is installed directly at `domain`
+                example: "www"
+              domain:
+                type: string
+                example: "example.com"
+              accessRestriction:
+                type: object
+                description: By default all users have access
+                default: {}
+                example: {}
+              portBindings:
+                type: object
+                default: {}
+              icon:
+                type: string
+              label:
+                type: string
+                default: ""
+                example: "MyAwesomeWebsite"
+              memoryLimit:
+                type: number
+                format: int32
+                default: Value from the AppManifest
+                description: Memory limit as a number of `MB * 1024 * 1024`. So 600MB memory limit is 629145600
+                example: 629145600
+              sso:
+                type: boolean
+                description: For apps with `optionalSso` set in the manifest.
+                default: true
+                example: true
+              enableBackup:
+                type: boolean
+                default: true
+                example: true
+              enableAutomaticUpdate:
+                type: boolean
+                default: true
+                example: true
+              alternateDomains:
+                type: array
+                default: []
+              overwriteDns:
+                type: boolean
+                description: If set to `true` Cloudron will overwrite any existing DNS records. This should not be required in most cases.
+                default: false
+                example: false
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              id:
+                type: string
+                example: "2b97b864-37b6-4e79-88b0-63712186a326"
+              taskId:
+                type: string
+                example: "1234"
+  /apps:
+    get:
+      summary: List installed Apps
+      tags: [ "Apps" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              apps:
+                type: array
+                items:
+                  $ref: '#/definitions/App'
+  /apps/{appid}:
+    get:
+      summary: Get installed App
+      tags: [ "Apps" ]
+      parameters:
+        - in: path
+          name: appid
+          description: Installed App ID
+          required: true
+          type: string
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: "#/definitions/App"
+  /apps/{appid}/logs:
+    get:
+      summary: Get App Logs
+      description: "For format `plain` simple text lines are returned. When format is `json` each log line looks like `{
+            realtimeTimestamp: timestamp,
+            message: message,
+            source: appId
+        }`"
+      tags: [ "Apps" ]
+      parameters:
+        - in: path
+          name: appid
+          description: Installed App ID
+          required: true
+          type: string
+        - in: query
+          name: lines
+          schema:
+            type: integer
+          description: Number of log lines to fetch. Starting at latest.
+          default: 10
+        - in: query
+          name: format
+          schema:
+            type: string
+          description: Log type
+          default: json
+          enum:
+            - plain
+            - json
+      responses:
+        200:
+          description: OK
+          content:
+            application/x-logs:
+              schema:
+                type: string
+  /apps/{appid}/logstream:
+    get:
+      summary: Get App Logstream
+      description: "A logstream is of type [EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource). For format `plain` simple text lines are returned. When format is `json` each log line looks like `{
+            realtimeTimestamp: timestamp,
+            message: message,
+            source: appId
+        }`"
+      tags: [ "Apps" ]
+      parameters:
+        - in: path
+          name: appid
+          description: Installed App ID
+          required: true
+          type: string
+        - in: query
+          name: lines
+          schema:
+            type: integer
+          description: Number of log lines to fetch. Starting at latest.
+          default: 10
+        - in: query
+          name: format
+          schema:
+            type: string
+          description: Log type
+          default: json
+          enum:
+            - plain
+            - json
+      responses:
+        200:
+          description: OK
+          content:
+            text/event-stream:
+              schema:
+                type: string
+  /settings/unstable_apps:
+    get:
+      summary: Get Unstable Apps State
+      tags: [ "Settings" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              enabled:
+                type: boolean
+                example: false
+    post:
+      summary: Set Unstable Apps State
+      tags: [ "Settings" ]
+      parameters:
+        - in: body
+          name: unstable apps config
+          schema:
+            type: object
+            required:
+              - enabled
+            properties:
+              enabled:
+                type: boolean
+                example: false
+      responses:
+        200:
+          description: OK
+  /settings/backup_config:
+    get:
+      summary: Get Backup Config
+      tags: [ "Settings" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/BackupConfig'
+    post:
+      summary: Set Backup Config
+      tags: [ "Settings" ]
+      parameters:
+        - in: body
+          name: backup config
+          schema:
+            $ref: '#/definitions/BackupConfig'
+      responses:
+        200:
+          description: OK
+  /settings/platform_config:
+    get:
+      summary: Get Platform Config
+      tags: [ "Settings" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/PlatformConfig'
+    post:
+      summary: Set Platform Config
+      tags: [ "Settings" ]
+      parameters:
+        - in: body
+          name: platform config
+          schema:
+            $ref: '#/definitions/PlatformConfig'
+      responses:
+        200:
+          description: OK
+  /settings/external_ldap_config:
+    get:
+      summary: Get External LDAP Config
+      tags: [ "Settings" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/ExternalLdapConfig'
+    post:
+      summary: Set External LDAP Config
+      tags: [ "Settings" ]
+      parameters:
+        - in: body
+          name: external ldap config
+          schema:
+            $ref: '#/definitions/ExternalLdapConfig'
+      responses:
+        200:
+          description: OK
+        400:
+          description: Invalid field
+  /settings/registry_config:
+    get:
+      summary: Get Registry Config
+      tags: [ "Settings" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/RegistryConfig'
+    post:
+      summary: Set Registry Config
+      tags: [ "Settings" ]
+      parameters:
+        - in: body
+          name: registry config
+          schema:
+            $ref: '#/definitions/RegistryConfig'
+      responses:
+        200:
+          description: OK
+        400:
+          description: Invalid field
+  /settings/sysinfo_config:
+    get:
+      summary: Get Sysinfo Config
+      tags: [ "Settings" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/SysinfoConfig'
+    post:
+      summary: Set Sysinfo Config
+      tags: [ "Settings" ]
+      parameters:
+        - in: body
+          name: sysinfo config
+          schema:
+            $ref: '#/definitions/SysinfoConfig'
+      responses:
+        200:
+          description: OK
+        400:
+          description: Invalid field
+  /settings/app_autoupdate_pattern:
+    get:
+      summary: Get Apps Autoupdate Pattern
+      tags: [ "Settings" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/UpdatePattern'
+    post:
+      summary: Set Apps Autoupdate Pattern
+      tags: [ "Settings" ]
+      parameters:
+        - in: body
+          name: apps autoupdate pattern
+          schema:
+            $ref: '#/definitions/UpdatePattern'
+      responses:
+        200:
+          description: OK
+  /settings/box_autoupdate_pattern:
+    get:
+      summary: Get Cloudron Autoupdate Pattern
+      description: Gets the pattern that the Cloudron uses to automatically update itself and installed apps. Patterns are matched based on the Cloudron's timezone.
+      tags: [ "Settings" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/UpdatePattern'
+    post:
+      summary: Set Cloudron Autoupdate Pattern
+      tags: [ "Settings" ]
+      parameters:
+        - in: body
+          name: cloudron autoupdate pattern
+          schema:
+            $ref: '#/definitions/UpdatePattern'
+      responses:
+        200:
+          description: OK
+  /settings/time_zone:
+    get:
+      summary: Get Timezone
+      tags: [ "Settings" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/TimezoneConfig'
+    post:
+      summary: Set Timezone
+      tags: [ "Settings" ]
+      parameters:
+        - in: body
+          name: timezone
+          schema:
+            $ref: '#/definitions/TimezoneConfig'
+      responses:
+        200:
+          description: OK
+  /settings/cloudron_name:
+    get:
+      summary: Get Cloudron Name
+      tags: [ "Settings" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/CloudronNameConfig'
+    post:
+      summary: Set Cloudron Name
+      tags: [ "Settings" ]
+      parameters:
+        - in: body
+          name: cloudron name
+          schema:
+            $ref: '#/definitions/CloudronNameConfig'
+      responses:
+        200:
+          description: OK
+  /settings/cloudron_avatar:
+    get:
+      summary: Get Cloudron Avatar
+      tags: [ "Settings" ]
+      produces:
+        - image/png
+      responses:
+        200:
+          description: OK
+          schema:
+            type: file
+    post:
+      summary: Set Cloudron Avatar
+      tags: [ "Settings" ]
+      consumes:
+        - multipart/form-data
+      parameters:
+        - in: formData
+          name: avatar
+          required: true
+          type: file
+      responses:
+        200:
+          description: OK
+  /backups:
+    get:
+      summary: List Backups
+      tags: [ "Backups" ]
+      parameters:
+        - $ref: '#/parameters/PaginationPage'
+        - $ref: '#/parameters/PaginationPerPage'
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              backups:
+                type: array
+                items:
+                  type: object
+                  properties:
+                    id:
+                      type: string
+                    creationTime:
+                      type: number
+                      format: date-time
+                    version:
+                      type: string
+                      description: Cloudron version that backups was made for
+                      example: 4.2.1
+                    type:
+                      type: string
+                      description: Is always `box` since this API returns the list of platform backups. Individual app backups can be retrieved with the /api/v1/apps/ routes.
+                    dependsOn:
+                      type: array
+                      description: Contains a list of backup IDs referencing the app backups
+                      items:
+                        type: string
+                    state:
+                      type: string
+                      enum:
+                        - normal
+                        - creating
+                        - error
+                    manifest:
+                      type: object
+                      example: null
+                      description: Is always `null` since this API returns the list of platform backups. Individual app backups can be retrieved with the /api/v1/apps/ routes.
+                    format:
+                      $ref: '#/definitions/BackupFormat'
+                    preserveSecs:
+                      type: integer
+                      description: Time to keep this backup in seconds (1 week is 604800 seconds). This number + `creationTime` determines if a backup is kept or removed
+                      example: 604800
+  /backups/create:
+    post:
+      summary: Trigger new Backup
+      description: This will trigger a new backup for the whole system, including all apps.
+      tags: [ "Backups" ]
+      responses:
+        202:
+          description: OK
+          schema:
+            type: object
+            properties:
+              taskId:
+                type: integer
+                description: This id can be used with the /api/v1/tasks routes to determine state and get logs
+                example: 123
+  /backups/cleanup:
+    post:
+      summary: Cleanup old Backups
+      description: Based on the backup creation and `retentionSecs` specified in the backup config, backups will be purged.
+        This should not need to be called manually as the same logic is called automatically very 6 hours.
+      tags: [ "Backups" ]
+      responses:
+        202:
+          description: OK
+          schema:
+            type: object
+            properties:
+              taskId:
+                type: integer
+                description: This id can be used with the /api/v1/tasks routes to determine state and get logs
+                example: 123
+  /tasks:
+    get:
+      summary: List Tasks
+      tags: [ "Tasks" ]
+      parameters:
+        - $ref: '#/parameters/PaginationPage'
+        - $ref: '#/parameters/PaginationPerPage'
+        - in: query
+          name: type
+          type: string
+          default: ''
+          enum:
+            - app
+            - backup
+            - update
+            - renewcerts
+            - prepareDashboardDomain
+            - cleanBackups
+            - syncExternalLdap
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              tasks:
+                type: array
+                items:
+                  $ref: '#/definitions/Task'
+  /tasks/{taskId}:
+    parameters:
+      - $ref: '#/parameters/TaskId'
+    get:
+      summary: Get Task
+      tags: [ "Tasks" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/Task'
+  /tasks/{taskId}/logs:
+    parameters:
+      - $ref: '#/parameters/TaskId'
+    get:
+      summary: Get Task Logs
+      tags: [ "Tasks" ]
+      produces:
+        - application/x-logs
+      responses:
+        200:
+          description: OK
+          schema:
+            type: file
+  /tasks/{taskId}/logstream:
+    parameters:
+      - $ref: '#/parameters/TaskId'
+    get:
+      summary: Get Task Logstream
+      description: The log stream is in [EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) format
+      tags: [ "Tasks" ]
+      produces:
+        - text/event-stream
+      responses:
+        200:
+          description: OK
+  /tasks/{taskId}/stop:
+    parameters:
+      - $ref: '#/parameters/TaskId'
+    post:
+      summary: Stop Task
+      tags: [ "Tasks" ]
+      responses:
+        204:
+          description: OK
+  /services:
+    get:
+      summary: Get Services
+      tags: [ "Services" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              services:
+                type: array
+                items:
+                  type: string
+                  example: mysql
+                  enum:
+                    - mail
+                    - mongodb
+                    - mysql
+                    - postgresql
+                    - docker
+                    - unbound
+                    - sftp
+                    - graphite
+                    - nginx
+  /services/{service}:
+    get:
+      summary: Get Service
+      tags: [ "Services" ]
+      parameters:
+        - $ref: '#/parameters/ServiceName'
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/Service'
+    post:
+      summary: Configure Service
+      tags: [ "Services" ]
+      parameters:
+        - $ref: '#/parameters/ServiceName'
+        - in: body
+          name: service config
+          schema:
+            type: object
+            properties:
+              memory:
+                type: integer
+                format: int32
+                minimum: 0
+      responses:
+        202:
+          description: OK
+  /services/{service}/logs:
+    get:
+      summary: Get Service Logs
+      tags: [ "Services" ]
+      parameters:
+        - $ref: '#/parameters/ServiceName'
+      produces:
+        - application/x-logs
+      responses:
+        200:
+          description: OK
+          schema:
+            type: file
+  /services/{service}/logstream:
+    get:
+      summary: Get Service Logstream
+      description: The log stream is in [EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) format
+      tags: [ "Services" ]
+      parameters:
+        - $ref: '#/parameters/ServiceName'
+      produces:
+        - text/event-stream
+      responses:
+        200:
+          description: OK
+  /services/{service}/restart:
+    post:
+      summary: Restart Service
+      tags: [ "Services" ]
+      parameters:
+        - $ref: '#/parameters/ServiceName'
+      responses:
+        202:
+          description: OK
+  /users:
+    get:
+      summary: List Users
+      description: Get all users
+      tags: [ "Users" ]
+      parameters:
+        - $ref: '#/parameters/PaginationPage'
+        - $ref: '#/parameters/PaginationPerPage'
+        - in: query
+          name: search
+          type: string
+          default: ''
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              users:
+                type: array
+                example: []
+    post:
+      summary: Add User
+      description: Add new User
+      tags: [ "Users" ]
+      parameters:
+        - in: body
+          name: user object
+          schema:
+            type: object
+            required:
+              - email
+            properties:
+              email:
+                type: string
+                format: email
+              username:
+                type: string
+                description: If not specified, the new user will have to set it during onboarding
+              displayName:
+                type: string
+                description: If not specified, the new user will have to set it during onboarding
+              password:
+                type: string
+                description: If not specified, the new user will have to set it during onboarding
+              admin:
+                type: boolean
+                default: false
+      responses:
+        201:
+          description: OK
+          schema:
+            $ref: '#/definitions/User'
+  /users/{userId}:
+    get:
+      summary: Get User
+      description: Get user
+      tags: [ "Users" ]
+      parameters:
+        - $ref: '#/parameters/UserId'
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/User'
+    post:
+      summary: Update User
+      description: Update user
+      tags: [ "Users" ]
+      parameters:
+        - $ref: '#/parameters/UserId'
+        - in: body
+          name: user object
+          schema:
+            type: object
+            properties:
+              email:
+                type: string
+                format: email
+              fallbackEmail:
+                type: string
+                format: email
+              username:
+                type: string
+                description: If not specified, the new user will have to set it during onboarding
+              displayName:
+                type: string
+                description: If not specified, the new user will have to set it during onboarding
+              admin:
+                type: boolean
+              active:
+                type: boolean
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/User'
+    delete:
+      summary: Delete User
+      description: Delete user
+      tags: [ "Users" ]
+      parameters:
+        - $ref: '#/parameters/UserId'
+      responses:
+        204:
+          description: OK
+  /users/{userId}/password:
+    post:
+      summary: Change Password
+      description: Change Password
+      tags: [ "Users" ]
+      parameters:
+        - $ref: '#/parameters/UserId'
+        - in: body
+          name: password change
+          schema:
+            type: object
+            required:
+              - password
+            properties:
+              password:
+                type: string
+      responses:
+        204:
+          description: OK
+  /users/{userId}/groups:
+    put:
+      summary: Set Groups
+      description: Set groups a user belongs to
+      tags: [ "Users" ]
+      parameters:
+        - $ref: '#/parameters/UserId'
+        - in: body
+          name: groups
+          schema:
+            type: object
+            required:
+              - groupIds
+            properties:
+              groupIds:
+                type: array
+                example: []
+      responses:
+        204:
+          description: OK
+  /users/{userId}/send_invite:
+    post:
+      summary: Send Invite
+      description: Send user invite email. This will not reset the invite token. See the create invite route.
+      tags: [ "Users" ]
+      parameters:
+        - $ref: '#/parameters/UserId'
+      responses:
+        200:
+          description: OK
+  /users/{userId}/create_invite:
+    post:
+      summary: Create Invite
+      description: Create a new invite token. This will invalidate the previous one. This only works for local users, not LDAP/ActiveDirectory users.
+      tags: [ "Users" ]
+      parameters:
+        - $ref: '#/parameters/UserId'
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              resetToken:
+                type: string
+  /groups:
+    get:
+      summary: List Groups
+      description: List groups
+      tags: [ "Groups" ]
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              groups:
+                type: array
+                items:
+                  $ref: '#/definitions/Group'
+                example:
+                  - id: gid-e08ca116-d3e5-43c9-b43f-6eb990be58ea
+                    name: Manager
+                  - id: gid-351904ce-6a21-4fbc-806e-4f457b120ef3
+                    name: Employee
+    post:
+      summary: Add Group
+      description: Add group
+      tags: [ "Groups" ]
+      parameters:
+        - in: body
+          name: group
+          schema:
+            type: object
+            required:
+              - name
+            properties:
+              name:
+                type: string
+                example: Manager
+      responses:
+        201:
+          description: OK
+          schema:
+            $ref: '#/definitions/Group'
+  /groups/{groupId}:
+    get:
+      summary: Get Group
+      description: Get group
+      tags: [ "Groups" ]
+      parameters:
+        - $ref: '#/parameters/GroupId'
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/GroupWithMembers'
+    post:
+      summary: Update Group
+      description: Update group
+      tags: [ "Groups" ]
+      parameters:
+        - $ref: '#/parameters/GroupId'
+        - in: body
+          name: group
+          schema:
+            type: object
+            required:
+              - name
+            properties:
+              name:
+                type: string
+                example: Manager
+      responses:
+        200:
+          description: OK
+    delete:
+      summary: Delete Group
+      description: Delete group
+      tags: [ "Groups" ]
+      parameters:
+        - $ref: '#/parameters/GroupId'
+      responses:
+        204:
+          description: OK
+  /groups/{groupId}/members:
+    put:
+      summary: Set Group Members
+      description: Set group members
+      tags: [ "Groups" ]
+      parameters:
+        - $ref: '#/parameters/GroupId'
+        - in: body
+          name: groupMembers
+          schema:
+            type: object
+            required:
+              - userIds
+            properties:
+              userIds:
+                type: array
+                items:
+                  $ref: '#/definitions/UserId'
+      responses:
+        200:
+          description: OK
+  /mail/{domain}:
+    get:
+      summary: Get Mail Domain Info
+      description: Get Mail Domain Info
+      tags: [ "Mail" ]
+      parameters:
+        - $ref: '#/parameters/DomainName'
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/Domain'
+  /mail/{domain}/status:
+    get:
+      summary: Get Mail Domain Status
+      description: Get Mail Domain Status
+      tags: [ "Mail" ]
+      parameters:
+        - $ref: '#/parameters/DomainName'
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              dns:
+                type: object
+                properties:
+                  mx:
+                    type: object
+                    properties:
+                      domain:
+                        type: string
+                        example: "example.com"
+                      name:
+                        type: string
+                        example: "@"
+                      type:
+                        type: string
+                        example: "MX"
+                      value:
+                        type: string
+                        example: "10 my.example.com."
+                      expected:
+                        type: string
+                        example: "10 my.example.com."
+                      status:
+                        type: boolean
+                        example: true
+                  spf:
+                    type: object
+                    properties:
+                      domain:
+                        type: string
+                        example: "example.com"
+                      name:
+                        type: string
+                        example: "@"
+                      type:
+                        type: string
+                        example: "TXT"
+                      value:
+                        type: string
+                        example: "v=spf1 a:my.example.com ~all"
+                      expected:
+                        type: string
+                        example: "v=spf1 a:my.example.com ~all"
+                      status:
+                        type: boolean
+                        example: true
+                  dmarc:
+                    type: object
+                    properties:
+                      domain:
+                        type: string
+                        example: "_dmarc.nebulon.space"
+                      name:
+                        type: string
+                        example: "_dmarc"
+                      type:
+                        type: string
+                        example: "TXT"
+                      value:
+                        type: string
+                        example: "v=DMARC1; p=reject; pct=100"
+                      expected:
+                        type: string
+                        example: "v=DMARC1; p=reject; pct=100"
+                      status:
+                        type: boolean
+                        example: true
+                  dkim:
+                    type: object
+                    properties:
+                      domain:
+                        type: string
+                        example: "cloudron._domainkey.example.com"
+                      name:
+                        type: string
+                        example: "cloudron._domainkey"
+                      type:
+                        type: string
+                        example: "TXT"
+                      expected:
+                        type: string
+                        example: "v=DKIM1; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBooiGgy1csAPyIf2bfpSrhbVu8l086BXynoCPLlznxpa1HzhYJhv/Y72/3ce88WsSUs7NmtfAYSMc59BrC+ad3ibHTFj3Z5I6YwWsKymxQsoD2hd71IMkmHe9I9zV+r2NTiBwTFSfli8+GUUTMSwCl/vb4o53DRVkCxXBlxNGvQIDAQAB"
+                      value:
+                        type: string
+                        example: "v=DKIM1; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBooiGgy1csAPyIf2bfpSrhbVu8l086BXynoCPLlznxpa1HzhYJhv/Y72/3ce88WsSUs7NmtfAYSMc59BrC+ad3ibHTFj3Z5I6YwWsKymxQsoD2hd71IMkmHe9I9zV+r2NTiBwTFSfli8+GUUTMSwCl/vb4o53DRVkCxXBlxNGvQIDAQAB"
+                      status:
+                        type: boolean
+                        example: true
+                  ptr:
+                    type: object
+                    properties:
+                      domain:
+                        type: string
+                        example: "59.133.179.95.in-addr.arpa"
+                      name:
+                        type: string
+                        example: "95.179.133.59"
+                      type:
+                        type: string
+                        example: "PTR"
+                      value:
+                        type: string
+                        example: "my.example.com"
+                      expected:
+                        type: string
+                        example: "my.example.com"
+                      status:
+                        type: boolean
+                        example: true
+              rbl:
+                type: object
+                properties:
+                  status:
+                    type: boolean
+                    example: true
+                  ip:
+                    type: string
+                    example: "1.2.3.4"
+                  servers:
+                    type: array
+                    example: []
+              relay:
+                type: object
+                properties:
+                  value:
+                    type: string
+                    example: "OK"
+                  status:
+                    type: boolean
+                    example: true
+  /mail/{domain}/enable:
+    post:
+      summary: Enable Incoming Email
+      description: Enable incoming email for the domain to receive emails. By default, only email sending is enabled.
+      tags: [ "Mail" ]
+      parameters:
+        - $ref: '#/parameters/DomainName'
+        - in: body
+          name: enable mailboxes
+          schema:
+            type: object
+            required:
+              - enabled
+            properties:
+              enabled:
+                type: boolean
+      responses:
+        202:
+          description: OK
+  /mail/{domain}/mail_from_validation:
+    post:
+      summary: Set Mail From Validation
+      description: Set Mail From Validation
+      tags: [ "Mail" ]
+      parameters:
+        - $ref: '#/parameters/DomainName'
+        - in: body
+          name: from validation
+          schema:
+            type: object
+            required:
+              - enabled
+            properties:
+              enabled:
+                type: boolean
+      responses:
+        202:
+          description: OK
+  /mail/{domain}/catch_all:
+    post:
+      summary: Set Catchall
+      description: Set Catchall addresses
+      tags: [ "Mail" ]
+      parameters:
+        - $ref: '#/parameters/DomainName'
+        - in: body
+          name: catchall addresses
+          schema:
+            type: object
+            required:
+              - addresses
+            properties:
+              addresses:
+                type: array
+                example: [ 'mailbox@example.com' ]
+      responses:
+        202:
+          description: OK
+  /mail/{domain}/relay:
+    post:
+      summary: Set SMTP Relay
+      description: Configure a SMTP relay for this domain
+      tags: [ "Mail" ]
+      parameters:
+        - $ref: '#/parameters/DomainName'
+        - in: body
+          name: relay settings
+          schema:
+            type: object
+            required:
+              - provider
+            properties:
+              provider:
+                $ref: '#/definitions/MailRelayProvider'
+              host:
+                type: string
+              port:
+                type: number
+              username:
+                type: string
+              password:
+                type: string
+              acceptSelfSignedCerts:
+                type: boolean
+      responses:
+        202:
+          description: OK
+  /mail/{domain}/banner:
+    post:
+      summary: Set Mail Signature
+      description: Set Mail Signature
+      tags: [ "Mail" ]
+      parameters:
+        - $ref: '#/parameters/DomainName'
+        - in: body
+          name: banner
+          schema:
+            type: object
+            required:
+              - text
+            properties:
+              text:
+                type: string
+              html:
+                type: string
+      responses:
+        202:
+          description: OK
+  /mail/{domain}/send_test_mail:
+    post:
+      summary: Test Mail
+      description: Sent a test mail from domain.
+      tags: [ "Mail" ]
+      parameters:
+        - $ref: '#/parameters/DomainName'
+        - in: body
+          name: banner
+          schema:
+            type: object
+            required:
+              - to
+            properties:
+              to:
+                type: string
+                example: "hello@example.com"
+      responses:
+        202:
+          description: OK
+  /mail/{domain}/mailbox_count:
+    get:
+      summary: Get Mailbox Count
+      description: Get mailbox count.
+      tags: [ "Mail" ]
+      parameters:
+        - $ref: '#/parameters/DomainName'
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              count:
+                type: number
+  /mail/{domain}/mailboxes:
+    get:
+      summary: List Mailboxes
+      description: List mailboxes for this domain.
+      tags: [ "Mail" ]
+      parameters:
+        - $ref: '#/parameters/DomainName'
+        - $ref: '#/parameters/PaginationPage'
+        - $ref: '#/parameters/PaginationPerPage'
+        - in: query
+          name: search
+          type: string
+          default: ''
+      responses:
+        200:
+          description: OK
+          schema:
+            type: object
+            properties:
+              mailboxes:
+                type: array
+                items:
+                  $ref: '#/definitions/Mailbox'
+    post:
+      summary: Add Mailbox
+      description: Add mailbox.
+      tags: [ "Mail" ]
+      parameters:
+        - $ref: '#/parameters/DomainName'
+        - in: body
+          name: mailbox
+          schema:
+            type: object
+            required:
+              - name
+              - ownerId
+              - ownerType
+            properties:
+              name:
+                type: string
+                example: webmaster
+              ownerId:
+                type: string
+                example: uid-be9dcf57-ad65-40e0-a3f8-d1c75974bf01
+              ownerType:
+                type: string
+                example: user
+      responses:
+        201:
+          description: OK
+  /mail/{domain}/mailboxes/{name}:
+    get:
+      summary: Get Mailbox
+      description: Get mailbox information.
+      tags: [ "Mail" ]
+      parameters:
+        - $ref: '#/parameters/DomainName'
+        - $ref: '#/parameters/MailboxName'
+      responses:
+        200:
+          description: OK
+          schema:
+            $ref: '#/definitions/Mailbox'
+    post:
+      summary: Update Mailbox
+      description: Update mailbox.
+      tags: [ "Mail" ]
+      parameters:
+        - $ref: '#/parameters/DomainName'
+        - $ref: '#/parameters/MailboxName'
+      responses:
+        204:
+          description: OK
+    delete:
+      summary: Delete Mailbox
+      description: Delete mailbox.
+      tags: [ "Mail" ]
+      parameters:
+        - $ref: '#/parameters/DomainName'
+        - $ref: '#/parameters/MailboxName'
+        - in: body
+          name: delete options
+          schema:
+            type: object
+            properties:
+              deleteMails:
+                type: boolean
+                description: Also delete emails in mailbox.
+                default: false
+      responses:
+        201:
+          description: OK
diff --git a/files/docs/apps/ackee.md b/files/docs/apps/ackee.md
new file mode 100644
index 0000000..ac0d447
--- /dev/null
+++ b/files/docs/apps/ackee.md
@@ -0,0 +1,37 @@
+# <img src="/img/ackee-logo.png" width="25px"> Ackee App
+
+## About
+
+Ackee is a Self-hosted, Node.js based analytics tool for those who care about privacy. 
+
+* Questions? Ask in the [Cloudron Forum - CouchPotato](https://forum.cloudron.io/category/118/couchpotato)
+* [Ackee Website](https://ackee.electerious.com/)
+* [Ackee docs](https://docs.ackee.electerious.com/)
+* [Ackee issue tracker](https://github.com/electerious/Ackee/issues)
+
+## Admin Password
+
+The admin password can be changed by editing `/app/data/env` using the [File manager](/apps/#file-manager). Be
+sure to restart the app after making the change.
+
+## Adding a domain
+
+* First, add a domain inside Ackee.
+* Add [CORS configuration](https://docs.ackee.electerious.com/#/docs/CORS%20headers#platforms-as-a-service-configuration) by
+  editing `/app/data/env` and adding your website in `ACKEE_ALLOW_ORIGIN` and restart the app.
+* Embed the Ackee tracker.js script in your website.
+
+## Data collection
+
+Ackee won't track personal information (device/browser info) by default, but it has the ability to do so in a privacy focused way.
+See Ackee's [docs](https://github.com/electerious/Ackee/blob/master/docs/Anonymization.md#personal-data) for more information.
+
+To enable detailed tracking, pass the `data-ackee-opts` to the script tag:
+
+```
+<script async src="https://example.com/ackee-tracker.min.js" 
+data-ackee-server="https://example.com" 
+data-ackee-domain-id="hd11f820-68a1-11e6-8047-79c0c2d9bce0" 
+data-ackee-opts='{ "ignoreLocalhost": true, "detailed": true }'></script>
+```
+
diff --git a/files/docs/apps/adguard-home.md b/files/docs/apps/adguard-home.md
new file mode 100644
index 0000000..3cbc2cc
--- /dev/null
+++ b/files/docs/apps/adguard-home.md
@@ -0,0 +1,60 @@
+# <img src="/img/adguard-home-logo.png" width="25px"> AdGuard Home App
+
+## About
+
+AdGuard Home is a network-wide software for blocking ads & tracking.
+
+* Questions? Ask in the [Cloudron Forum - AdGuard Home](https://forum.cloudron.io/category/113/adguard-home)
+* [AdGuard Home Website](https://adguard.com/en/adguard-home/overview.html)
+* [AdGuard Home forum](https://forum.adguard.com/index.php)
+* [AdGuard Home issue tracker](https://github.com/AdguardTeam/AdGuardHome/issues)
+
+## Change Password
+
+To change the AdGuard Home password, one must use the `htpasswd` tool.
+First, open the [Web terminal](/apps#web-terminal) and run the following command:
+
+```
+$ htpasswd -nbB admin mypassword
+admin:$2y$05$zsr9LdcnDQ3TCBLuyljJHer6XS03ute6GiuA8H7ZjvKuJikud/wk2
+```
+
+Copy the password part (after the ':') and put it in `/app/data/AdGuardHome.yaml`
+(use the [File Manager](/apps/#file-manager). It's a good idea to quote the password
+field. So, it will look like this:
+
+```
+users:
+- name: admin
+  password: "$2y$05$zsr9LdcnDQ3TCBLuyljJHer6XS03ute6GiuA8H7ZjvKuJikud/wk2"
+```
+
+The app must be restarted for the password change to take effect.
+
+## Securing Installation
+
+While the admin page is password protected, the DNS server is not. This is because DNS has
+no notion of authentication. Leaving your DNS server open will lead to it getting
+abused for conducting DDoS reflection and amplification attacks. Many VPS providers
+will likely send you a warning/caution email, if you run a open DNS resolver.
+
+We strongly recommend securing your installation in the following ways:
+
+* When available, use your VPS providers firewall functionality to restrict access to
+  Port 53 (TCP & UDP).
+
+* In the AdGuard Home dashboard, go to `Settings` -> `DNS settings`. Scroll to the bottom
+  for `Access settings` and set a list of clients that can access the DNS server. You
+  can also use [ipdeny lists](https://www.ipdeny.com/ipblocks/) to set access and block lists.
+
+    <center>
+    <img src="/img/adguard-access-control.png" class="shadow">
+    </center>
+
+## DoH
+
+DNS over HTTPS is enabled by default. Cloudron does not support DNS over TLS yet.
+Note that there is a Settings page that lets you enable DoH but you won't able to save
+that page since this is [not implemented yet](https://github.com/AdguardTeam/AdGuardHome/issues/1009).
+
+This is fine because DoH is enabled in the configs.
diff --git a/files/docs/apps/alltube.md b/files/docs/apps/alltube.md
new file mode 100644
index 0000000..5fb5a90
--- /dev/null
+++ b/files/docs/apps/alltube.md
@@ -0,0 +1,17 @@
+# <img src="/img/alltube-logo.png" width="25px"> Alltube App
+
+## About
+
+Alltube provides a Web GUI for youtube-dl. Despite it's name, Alltube can be used to download
+videos from all kinds of sources including Dailymotion, Vimeo, SoundCloud, Facebook and Instagram.
+
+* Questions? Ask in the [Cloudron Forum - AllTube](https://forum.cloudron.io/category/63/alltube)
+* [AllTube Website](https://alltubedownload.net)
+* [AllTube issue tracker](https://github.com/Rudloff/alltube/issues)
+
+## Customization
+
+Use the [File Manager](/apps#file-manager) to edit `/app/data/config.yml` to add custom configuration.
+See the [upstream file](https://github.com/Rudloff/alltube/blob/master/config/config.example.yml)
+for reference.
+
diff --git a/files/docs/apps/ampache.md b/files/docs/apps/ampache.md
new file mode 100644
index 0000000..e9d77ef
--- /dev/null
+++ b/files/docs/apps/ampache.md
@@ -0,0 +1,58 @@
+# <img src="/img/ampache-logo.png" width="25px"> Ampache App
+
+## About
+
+Ampache is a web based audio/video streaming application and file manager. Allowing you to access your music & videos
+from anywhere, using almost any internet enabled device.
+
+* Questions? Ask in the [Cloudron Forum - Ampache](https://forum.cloudron.io/category/110/ampache)
+* [Ampache Website](http://www.ampache.org)
+* [Ampache issue tracker](https://github.com/ampache/ampache/issues)
+
+## Import Audio Files
+
+Ampache works with audio catalogs. To  import songs into Ampache:
+
+* Create a directory for it through the [File Manager](/apps#file-manager). For example create `/app/data/catalogs/music`.
+You can upload new audio files to this folder now or later.
+* Create a new catalog. You can do this by clicking the `Admin` icon (next to the gear icon).
+  <img src="/img/ampache-catalog.png" class="shadow">
+* Set the catalog type to `local`
+* Set the directory path `/app/data/catalogs/music` in the path text input
+* Trigger a catalog update via the ampache UI to update the catalog.
+
+
+## Customization
+
+Use the [Web terminal](/apps#web-terminal) or the [File Manager](/apps#file-manager)
+to edit custom configuration under `/app/data/config/ampache.cfg.php`. Full documentation
+is available [here](https://github.com/ampache/ampache/wiki/Basic).
+
+## Playback issues
+
+For larger audio files, ampache often needs more memory to play them.
+Unlike other php based apps, increasing the memory limit in php.ini will get overwritten.
+The correct file for ampache is `/app/data/config/ampache.cfg.php`:
+```
+memory_limit = 512M
+```
+
+## CLI
+
+[Ampache CLI](https://github.com/ampache/ampache/wiki/CLI) can be used to run various
+common management tasks. You can use the CLI using the [Web terminal](/apps#web-terminal)
+as follows:
+
+```
+    sudo -u www-data /usr/bin/php /app/code/bin/install/catalog_update.inc
+```
+
+## Features
+
+Ampache has a lot of exciting features that are worth exploring further:
+
+* [Subscribe to Podcasts](https://github.com/ampache/ampache/wiki/Podcasts)
+* [Icecast compatible Channels](https://github.com/ampache/ampache/wiki/Channels)
+* [Democratic play](https://github.com/ampache/ampache/wiki/Democratic)
+* [Subsonic API](https://github.com/ampache/ampache/wiki/subsonic)
+
diff --git a/files/docs/apps/astral.md b/files/docs/apps/astral.md
new file mode 100644
index 0000000..f2283c4
--- /dev/null
+++ b/files/docs/apps/astral.md
@@ -0,0 +1,21 @@
+# <img src="/img/astral-logo.png" width="25px"> Astral App
+
+## About
+
+Astral is an open source application that allows you to organize your GitHub Stars with ease.
+
+* Questions? Ask in the [Cloudron Forum - Astral](https://forum.cloudron.io/category/120/astral)
+* [Astral Website](https://astralapp.com/)
+* [Astral issue tracker](https://github.com/astralapp/astral/)
+
+## Setup
+
+Astral requires a Github OAuth Application. You are able to create one from you Github account and then adjust the `env` file to use this application: 
+
+- Go to [Github -> Settings -> OAuth Apps](https://github.com/settings/developers) and create a new OAuth app.
+- Enter `Astral`, `astral.yourcloudron.com`, and `https://astral.yourcloudron.com/auth/github/callback` for Application Name, Homepage URL, and Authorization callback URL, respectively. 
+- Generate a new Client Secret, make note of this, you'll only see it once. 
+- Use the app's [File Manager](/apps#file-manager) to edit `/app/data/env` file. Update the `GITHUB_CLIENT_ID` and `GITHUB_CLIENT_SECRET` values with your Github OAuth App's Client ID and Client Secret. 
+- Restart the app.
+- Login with Github!
+
diff --git a/files/docs/apps/bitwardenrs.md b/files/docs/apps/bitwardenrs.md
new file mode 100644
index 0000000..f0a7846
--- /dev/null
+++ b/files/docs/apps/bitwardenrs.md
@@ -0,0 +1,34 @@
+# <img src="/img/bitwardenrs-logo.png" width="25px"> Bitwarden_rs App
+
+## About
+
+Bitwarden is an Open Source Password Management solution for individuals, teams, and business organizations.
+Bitwarde_rs is an unofficial Bitwarden compatible server written in Rust, fully compatible with the client apps.
+
+* Questions? Ask in the [Cloudron Forum - Bitwarden_rs](https://forum.cloudron.io/category/64/bitwardenrs)
+* [Bitwarden_rs Website](https://github.com/dani-garcia/bitwarden_rs)
+* [Bitwarden_rs issue tracker](https://github.com/dani-garcia/bitwarden_rs/issues)
+
+## Users
+
+Bitwarden does not support Single Sign On. This is by design for security reasons. You must create a new password for your Bitwarden account.
+
+By default, open registration is enabled. This can be changed via environment variables by editing `/app/data/config.env` using
+the [File Manager](/apps/#file-manager).
+
+Uncomment the following lines to disable user signup and enable invite only setup:
+
+```
+export SIGNUPS_ALLOWED=false
+export INVITATIONS_ALLOWED=true
+```
+
+## YubiKey
+
+Bitwarden_rs has support for [YubiKeys](https://www.yubico.com/). To make use of them, just specify your client id and secret key in the `/app/data/config.env` and restart the app.
+
+```
+export YUBICO_CLIENT_ID="clientId"
+export YUBICO_SECRET_KEY="secretKey"
+```
+
diff --git a/files/docs/apps/bookstack.md b/files/docs/apps/bookstack.md
new file mode 100644
index 0000000..73839a8
--- /dev/null
+++ b/files/docs/apps/bookstack.md
@@ -0,0 +1,36 @@
+# <img src="/img/bookstack-logo.png" width="25px"> BookStack App
+
+## About
+
+BookStack is a simple, self-hosted, easy-to-use platform for organising and storing information.
+
+* Questions? Ask in the [Cloudron Forum - BookStack](https://forum.cloudron.io/category/29/bookstack)
+* [BookStack Website](https://www.bookstackapp.com)
+* [BookStack discord](https://discord.com/invite/ztkBqR2)
+* [BookStack issue tracker](https://github.com/BookStackApp/BookStack/issues)
+
+## Admin
+
+When using Cloudron user management, BookStack's built-in admin user is disabled.
+See the [BookStack docs](https://www.bookstackapp.com/docs/admin/ldap-auth/) for
+more information. In addition, the app is pre-setup to give admin status to all users.
+You can change this by going to `Settings` -> `Registration` and adjusting the value of
+`Default user role after registration`. This way, the first user to login will be an admin
+and the roles of rest of the users can be managed inside BookStack.
+
+## Customization
+
+Use the [File Manager](/apps#file-manager) to edit custom configuration in `/app/data/env`.
+
+See [BookStack customization docs](https://www.bookstackapp.com/docs/admin/visual-customisation/)
+for more information.
+
+## External registration
+
+Bookstack does not allow external users to register when Cloudron user management (LDAP)
+is enabled. If you require external registration, install Bookstack with Cloudron user
+management disabled.
+
+See the [Bookstack docs](https://www.bookstackapp.com/docs/admin/third-party-auth/) to
+enable 3rd party auth like Google, GitHub, Twitter, Facebook & others.
+
diff --git a/files/docs/apps/build-service.md b/files/docs/apps/build-service.md
new file mode 100644
index 0000000..a9eda8d
--- /dev/null
+++ b/files/docs/apps/build-service.md
@@ -0,0 +1,52 @@
+# <img src="/img/build-service-logo.png" width="25px"> Build Service App
+
+## Purpose
+
+Cloudron can be used to build and install [custom apps](/custom-apps/tutorial/) using docker images.
+Building docker images locally might require many CPU resources depending on the app. Pushing docker images
+can also be network intensive (for e.g, if you are working from a coffee shop).
+
+This app tries to solve the above situation by simply building and pushing docker images on the Cloudron where
+it is installed. This app merely acts a proxy for authenticated users to build and push docker images to a configured
+registry.
+
+!!! note "Do not install on production Cloudron"
+    Installing this app on a production Cloudron is risky and is not recommended.
+
+## Configuring CLI
+
+Cloudron CLI can be configured to use the build service using `cloudron build --set-build-service`.
+The CLI will then ask for the Cloudron credentials on which the build service is installed.
+
+```
+$ cloudron build --set-build-service
+Enter build service URL: https://buildbot.example.com
+Using build service https://buildbot.cloudron.ml
+Building girish/nodejs-app:20191113-015207-340e7f520
+Uploading source tarball...
+Build Service login (https://buildbot.example.com):
+Username: username
+Password: *********
+Login successful.
+Step 1/8 : FROM cloudron/base:2.0.0@sha256:96cb00e968d7f78ff6c7f6a373ce184e0f94ad4a5298d849031201bf4a9e3bf6
+ ---> 534bd0efda10
+Step 2/8 : RUN mkdir -p /app/code
+ ---> Running in 75e1b25ffd14
+...
+
+```
+
+## Private registry auth
+
+The build service requires authentication information to be able to push images to a private
+registry. Credentials can be set by opening the [Web terminal](/apps#web-terminal)
+and editing `/app/data/docker.json`. Be sure to restart the app after setting the credentials.
+
+```
+{
+  "docker.io": {
+    "username": "username",
+    "password": "mypassword"
+  }
+}
+```
diff --git a/files/docs/apps/calibre-web.md b/files/docs/apps/calibre-web.md
new file mode 100644
index 0000000..4766c63
--- /dev/null
+++ b/files/docs/apps/calibre-web.md
@@ -0,0 +1,18 @@
+# <img src="/img/calibre-web-logo.png" width="25px"> Calibre Web App
+
+## About
+
+Calibre Web is a web app for browsing, reading and downloading eBooks stored in a Calibre database.
+
+* Questions? Ask in the [Cloudron Forum - Calibre Web](https://forum.cloudron.io/category/105/calibre)
+* [Calibre Web Website](https://github.com/janeczku/calibre-web)
+* [Calibre Web issue tracker](https://github.com/janeczku/calibre-web/issues)
+
+## Importing existing calibre database
+
+To import an existing Calibre database, do the following:
+
+* Stop the app
+* Copy the database into `/app/data/library` using the File Manager
+* Start the app
+
diff --git a/files/docs/apps/collabora.md b/files/docs/apps/collabora.md
new file mode 100644
index 0000000..d75ab80
--- /dev/null
+++ b/files/docs/apps/collabora.md
@@ -0,0 +1,46 @@
+# <img src="/img/collabora-logo.png" width="25px"> Collabora App
+
+## About
+
+Collabora Online is a collaborative online office suite based on LibreOffice technology.
+
+* Questions? Ask in the [Cloudron Forum - Collabora Office](https://forum.cloudron.io/category/57/collabora-office)
+* [Collabora Office Website](https://www.collaboraoffice.com)
+* [Collabora Office forum](https://forum.collaboraonline.com/)
+* [Collabora Office issue tracker](https://github.com/CollaboraOnline/online/issues)
+
+## Setup
+
+The Collabora App can be used to provide rich document editing functionality for
+files hosting inside [NextCloud](/apps/nextcloud).
+
+* Install [NextCloud](/store/com.nextcloud.cloudronapp.html) from
+  the App Store. For this example, we assume NextCloud was installed at `nextcloud.smartserver.space`.
+
+* Install [Collabora](/store/com.collaboraoffice.coudronapp.html) from the App Store
+
+* In the Collabora setup UI, provide the domain of the NextCloud installation.
+
+  <img src="/img/collabora-settings.png" class="shadow">
+
+* Enable the `Collabora Online` app in NextCloud. This app is under the `Office & text`
+  category in the NextCloud app store. Once installed, go to NextCloud `Settings` and
+  select the `Collabora Office` item on the left pane. Enter the domain of the collabora
+  installation.
+
+  <img src="/img/nextcloud-collabora.png" class="shadow">
+
+* You should now be able to view and edit rich text documents right inside NextCloud.
+
+  <img src="/img/nextcloud-collabora-editor.png" class="shadow">
+
+## Spell check
+
+The empty document templates that are provided by default in Nextcloud are German documents. For
+this reason, it might appear that the spell-checker is flagging a lot of spelling errors.
+
+The language of a document can be changed by clicking the menu bar icon on the far right (three
+horizontal lines). Then `Tools` -> `Language` -> `For all text`.
+
+<img src="/img/collabora-change-language.png" class="shadow">
+
diff --git a/files/docs/apps/commento.md b/files/docs/apps/commento.md
new file mode 100644
index 0000000..1d4467a
--- /dev/null
+++ b/files/docs/apps/commento.md
@@ -0,0 +1,33 @@
+# <img src="/img/commento-logo.png" width="25px"> Commento App
+
+## About
+
+Commento is a fast, privacy-focused commenting platform.
+
+* Questions? Ask in the [Cloudron Forum - Commento](https://forum.cloudron.io/category/40/commento)
+* [Commento Website](https://commento.io/)
+
+## Usermanagement
+
+Commento does not integrate with Cloudron usermanagement but instead has two types of users.
+
+1. **Owners** which can manage domains where comments may be shown as well as act as moderators.
+2. **Commentors** which have to be created by every user wanting to write a comment
+
+Owner signup is enabled by default and can be done when visiting the domain where a Commento instance is installed at.
+To disable open owner registration, to change this, edit `/app/data/commento.conf`
+
+```
+COMMENTO_FORBID_NEW_OWNERS=true
+```
+
+## Sign-in with Google
+
+Commento also supports OAuth sign-in with Google for users wanting to comment.
+To enable this feature, create a Google API secret and key pair and put those into `/app/data/commento.conf`:
+
+```
+COMMENTO_GOOGLE_KEY=<your key>
+COMMENTO_GOOGLE_SECRET=<your secret>
+```
+
diff --git a/files/docs/apps/confluence.md b/files/docs/apps/confluence.md
new file mode 100644
index 0000000..2e491c0
--- /dev/null
+++ b/files/docs/apps/confluence.md
@@ -0,0 +1,41 @@
+# <img src="/img/confluence-logo.png" width="25px"> Confluence App
+
+## About
+
+Confluence is purpose-built for teams that need a secure and reliable way to collaborate on mission-critical projects.
+
+* Questions? Ask in the [Cloudron Forum - Confluence](https://forum.cloudron.io/category/16/confluence)
+* [Confluence Website](https://www.atlassian.com/software/confluence)
+* [Confluence forum](https://community.atlassian.com/)
+
+## Completing the installation
+
+To finish the installation, do the following:
+
+* Select Production Installation
+* Add your license key.
+* Select `PostgreSQL` as External Database.
+* Choose `By connection string`.
+* Use the [File Manager](/apps/#file-manager) and open `/app/data/credentials.txt` to get database settings.
+
+## Adminstration check list
+
+* Disable `Backup Confluence` Schedule Jobs. The Cloudron backups up confluence already.
+
+* To enable LDAP, go to `Confluence Administration`:
+
+    * `Users & Security` -> `User directories`
+    * `Add Directory` -> `Internal with LDAP authentication`
+    * Use the [File Manager](/apps/#file-manager) and open `/app/data/credentials.txt` to get LDAP settings.
+    * You can make Cloudron users admin once they log in to Confluence and appear in user listing via LDAP
+
+* To configure mail:
+
+    * `Mail Servers` -> `Add SMTP mail`
+    * Use the [File Manager](/apps/#file-manager) and open `/app/data/credentials.txt` to get LDAP settings.
+
+## Oracle Java
+
+OpenJDK is [not supported](https://confluence.atlassian.com/confkb/is-openjdk-supported-by-confluence-297667642.html)
+by Confluence. For this reason, the Cloudron app uses Oracle Java.
+
diff --git a/files/docs/apps/couchpotato.md b/files/docs/apps/couchpotato.md
new file mode 100644
index 0000000..f4177da
--- /dev/null
+++ b/files/docs/apps/couchpotato.md
@@ -0,0 +1,10 @@
+# <img src="/img/couchpotato-logo.png" width="25px"> CouchPotato App
+
+## About
+
+CouchPotato automatically find movies you want to watch.
+
+* Questions? Ask in the [Cloudron Forum - CouchPotato](https://forum.cloudron.io/category/118/couchpotato)
+* [CouchPotato Website](https://couchpota.to/)
+* [CouchPotato Forum](https://couchpota.to/forum/)
+
diff --git a/files/docs/apps/directus.md b/files/docs/apps/directus.md
new file mode 100644
index 0000000..ed266dd
--- /dev/null
+++ b/files/docs/apps/directus.md
@@ -0,0 +1,25 @@
+# <img src="/img/directus-logo.png" width="25px"> Directus App
+
+## About
+
+Directus is an Instant App & API for your SQL Database.
+
+* Questions? Ask in the [Cloudron Forum - Directus](https://forum.cloudron.io/category/101/directus)
+* [Directus Website](https://directus.io)
+* [Directus issue tracker](https://github.com/directus/directus/issues)
+
+## CLI
+
+CLI commands can be executed by opening a [Web terminal](/apps#web-terminal):
+
+```
+# cd /app/code
+# sudo -u www-data -- /app/code/bin/directus
+```
+
+## Multi-tenancy
+
+While Directus supports [multiple projects](https://docs.directus.io/guides/projects.html), the Cloudron package does not.
+This is because the Cloudron package is designed with the app having access to only a single database. To create another
+project, simply make a new installation of Directus.
+
diff --git a/files/docs/apps/discourse.md b/files/docs/apps/discourse.md
new file mode 100644
index 0000000..b7dbd1d
--- /dev/null
+++ b/files/docs/apps/discourse.md
@@ -0,0 +1,67 @@
+# <img src="/img/discourse-logo.png" width="25px"> Discourse App
+
+## About
+
+Discourse is a platform for community discussion. Free, open, simple. 
+
+* Questions? Ask in the [Cloudron Forum - Discourse](https://forum.cloudron.io/category/33/discourse)
+* [Discourse Website](https://www.discourse.org/)
+* [Discourse forum](https://meta.discourse.org/)
+
+## Installing plugins
+
+To install a plugin, open a [Web terminal](/apps#web-terminal) and run the following
+commands:
+
+```
+cd /app/code/plugins
+git clone <plugin-repo>
+cd /app/code
+bundle exec rake plugin:install_gems['REPLACE_WITH_PLUGINS_NAME'] 
+
+# the line below will force assets to be rebuilt on next application restart
+rm -rf /run/discourse/public/assets/*
+```
+
+Restart the application for the assets to get re-built.
+
+If the plugin modifies the posts in some way, you might want to [rebake posts](#rebaking-posts).
+
+## Changing root account email
+
+The email of the root account is `root@cloudron.local`. Discourse sends an activation email to the old
+email address to switch email. Since we don't have access to the default email account, we have to use
+the rails console to switch the email.
+
+Open  a [Web terminal](/apps#web-terminal) and run the following commands:
+
+```
+# sudo -E -u cloudron bundle exec script/rails console
+irb(main):001:0> u = User.find_by_username("root")
+irb(main):002:0> u.email = "YOUR_NEW_EMAIL_ADDRESS"
+irb(main):003:0> u.email_tokens.create(email: u.email)
+irb(main):004:0> u.activate
+irb(main):005:0> u.save!
+```
+
+## Changing domain
+
+When changing the domain of an existing discourse installation, Cloudron automatically
+rebuilds the assets. However, the posts in the forum are not re-written. To rebake
+the posts, open a [Web terminal](/apps#web-terminal) and run the following
+command:
+
+```
+sudo -E -u cloudron bundle exec ruby script/discourse remap old.domain.com new.domain.com
+```
+
+## Rebaking posts
+
+To rebuild all posts (for example, to apply formatting provided by a newly installed plugin to
+old posts), open a [Web terminal](/apps#web-terminal) and run the following
+command:
+
+```
+sudo -E -u cloudron bundle exec rake posts:rebake
+```
+
diff --git a/files/docs/apps/docker-registry.md b/files/docs/apps/docker-registry.md
new file mode 100644
index 0000000..7fc6d92
--- /dev/null
+++ b/files/docs/apps/docker-registry.md
@@ -0,0 +1,87 @@
+# <img src="/img/docker-registry-logo.png" width="25px"> Docker Registry App
+
+## About
+
+Docker Registry is used for storing and distributing Docker and OCI images using the OCI Distribution Specification.
+
+* Questions? Ask in the [Cloudron Forum - Docker Registry](https://forum.cloudron.io/category/119/docker-registry)
+* [Docker Registry docs](https://docs.docker.com/registry/)
+* [Docker Registry issue tracker](https://github.com/docker/distribution)
+
+## User Management
+
+## Cloudron Directory
+
+When Cloudron user management is enabled, simply use the Cloudron username and password to login.
+
+## Without Cloudron Directory
+
+When Cloudron user management is disabled, the registry is setup with no authentication. The main use case for this is to
+have the registry authenticate with an external provider such as GitLab instead of Cloudron. See the GitLab section
+below on how to set this up.
+
+### GitLab Integration
+
+The following steps can be used to setup [GitLab container registry](https://about.gitlab.com/blog/2016/05/23/gitlab-container-registry/).
+
+* Create a [volume](/storage/#volumes) named `registry-shared`.
+* Attach volume name `registry-shared` to both GitLab and Docker Registry apps. Be sure to uncheck the `Read Only` checkbox.
+* Create folders `containers` and `certs` on the host filesystem inside the path that is assigned to
+   the `registry-shared` volume.
+* Run the following commands inside the certs folder:
+
+```bash
+openssl req -nodes -newkey rsa:2048 -keyout registry-auth.key -out registry-auth.csr -subj "/CN=gitlab-issuer"
+openssl x509 -in registry-auth.csr -out registry-auth.crt -req -signkey registry-auth.key -days 365000
+chmod 777 registry-auth.key registry-auth.crt registry-auth.csr
+```
+
+* Modify `/app/data/config.yml` of the Docker Registry app using the [File manager](/apps/#file-manager) by altering the auth part to resemble the
+   following:
+
+```yaml
+auth:
+  token:
+    realm: https://<GITLAB_HOST>/jwt/auth
+    service: container_registry
+    issuer: gitlab-issuer
+    rootcertbundle: /media/registry-shared/certs/registry-auth.crt
+
+```
+
+Change the 'rootdirectory' value inside the same config file to:
+
+```bash
+/media/registry-shared/containers
+```
+
+Save the file and restart the app.
+
+* Modify `/app/data/gitlab.yml` of the GitLab app by adding the following lines (some of them
+   might already be there, so skip them):
+
+```yaml
+production:
+  <<: *base
+
+  registry:
+    enabled: true
+    host: <DOCKER_REGISTRY_HOST>
+    port: 443
+    api_url: https://<DOCKER_REGISTRY_HOST>
+    key: /media/registry-shared/certs/registry-auth.key
+    path: /media/registry-shared/containers
+    issuer: gitlab-issuer
+```
+
+Save the file and restart the app.
+
+## Garbage collector
+
+The [Garbage Collector](https://docs.docker.com/registry/garbage-collection/) is automatically run once
+a day. You can always trigger an immediate collection using the following command:
+
+```
+/usr/local/bin/gosu cloudron:cloudron /app/code/registry garbage-collect /app/data/config.yml
+```
+
diff --git a/files/docs/apps/dokuwiki.md b/files/docs/apps/dokuwiki.md
new file mode 100644
index 0000000..efa25d5
--- /dev/null
+++ b/files/docs/apps/dokuwiki.md
@@ -0,0 +1,95 @@
+# <img src="/img/dokuwiki-logo.png" width="25px"> Dokuwiki App
+
+## About
+
+DokuWiki is a simple to use and highly versatile Open Source wiki software that doesn't require a database
+
+* Questions? Ask in the [Cloudron Forum - DokuWiki](https://forum.cloudron.io/category/60/dokuwiki)
+* [DokuWiki Website](https://www.dokuwiki.org)
+* [DokuWiki forum](https://forum.dokuwiki.org/)
+* [DokuWiki issue tracker](https://github.com/splitbrain/dokuwiki/issues)
+
+## User management
+
+### Cloudron Directory
+
+When Cloudron user management is enabled, only Cloudron users can login to the wiki and
+edit pages. 
+
+To make a Cloudron user an admin, use the [File Manager](/apps#file-manager)
+and edit `/app/data/conf/local.php`:
+
+```
+<?php
+
+$conf['superuser'] = "userid1,userid2";
+```
+
+To make all Cloudron admins as wiki admins edit `/app/data/conf/local.php` and add:
+
+```
+<?php
+
+$conf['plugin']['authldap']['mapping']['grps']  = array('memberof' => '/CN=(.+?),/i');
+$conf['superuser'] = '@admins';
+```
+
+By default, the pages are readable by all. The wiki can be made readable
+only for logged in users by changing the ACL Rules for the `@ALL` group
+in dokuwiki's `Access Control List Management` admin page.
+
+### Without Cloudron SSO
+
+When not using Cloudron authentication, first register a new user.
+
+To make the new user an admin, use the [File Manager](/apps#file-manager)
+and edit `/app/data/conf/local.php`:
+
+```
+<?php
+
+$conf['superuser'] = "userid1,userid2";
+```
+
+#### Disabling registration
+
+To [disable registration](https://www.dokuwiki.org/faq:regdisable), `Admin` -> `Configuration Manager` -> `Disable DokuWiki actions`
+and check `Register`.
+
+## Configuring
+
+At a high level, Dokuwiki applies [configuration](https://www.dokuwiki.org/config) as follows:
+
+* `conf/foo.conf` – default value that comes with Dokuwiki. **Do not make changes to these files, they will be lost across updates.**
+* `conf/foo.protected.conf` – settings applied by the Cloudron package. **Do not make changes to these files, they will be lost across updates.**
+* `conf/foo.local.conf` – changed by plugin manager or Cloudron user. Changes can be freely made to these files and they will be retained across updates.
+
+## Plugins
+
+[Plugins](https://www.dokuwiki.org/plugins) can be installed using the `Extension Manager`.
+
+Some [suggested](http://diyfuturism.com/index.php/2018/01/01/how-to-set-up-a-personal-wiki-with-configuration-for-common-use-cases-like-recipes-and-journaling/) plugins:
+
+* Blockquote – Easily add blockquoted text
+* Blog – displays your posts in a familiar blog format
+* Todo – add todo’s to wiki pages and assign to users if desired
+* Dokubookmark – archive web pages with a simple bookmarklet to your wiki
+* DW2PDF – Export wiki pages as PDFs
+* EditTable – Visually edit and add tables
+* Gallery – Embed image galleries in pages
+* Move – move pages and namespaces while preserving all links
+* Note – Insert notes that stand out from the rest of your text. Useful for documentation.
+* NSPages – Automatically generate a custom list of pages in your wiki or namespace
+* TemplatePageName – Changes the default template names so they can be edited from within the wiki.
+* Struct – Index, display, and query structured data in your wiki pages (requires SQLite)
+* Tag – add tagging functions
+* VShare – Embed videos
+* Wrap – probably the most useful formatting plugin – easily add columns, notes, divs, etc.
+* Yearbox – Auto generate a table with links for a journal or diary, very customizable.
+
+## Themes
+
+[Themes (templates)](https://www.dokuwiki.org/template) can be installed using the `Extension Manager`.
+Note that the theme has to be activated after installation. This can be done using the `Configuration Manager`'s
+`template` drop down setting.
+
diff --git a/files/docs/apps/dolibarr.md b/files/docs/apps/dolibarr.md
new file mode 100644
index 0000000..a31dd2a
--- /dev/null
+++ b/files/docs/apps/dolibarr.md
@@ -0,0 +1,12 @@
+# <img src="/img/dolibarr-logo.png" width="25px"> Dolibarr App
+
+
+## About
+
+Dolibarr is an open source ERP & CRM for business.
+
+* Questions? Ask in the [Cloudron Forum - Dolibarr](https://forum.cloudron.io/category/102/dolibarr)
+* [Dolibarr Website](https://dolibarr.org/)
+* [Dolibarr forum](https://www.dolibarr.org/forum.php)
+* [Dolibarr issue tracker](https://github.com/Dolibarr/dolibarr/issues)
+
diff --git a/files/docs/apps/easyappointments.md b/files/docs/apps/easyappointments.md
new file mode 100644
index 0000000..d88b1ae
--- /dev/null
+++ b/files/docs/apps/easyappointments.md
@@ -0,0 +1,9 @@
+# <img src="/img/easyappointments-logo.png" width="25px"> Easy!Appointments App
+
+## About
+
+Easy!Appointments is a web appointment scheduler.
+
+* Questions? Ask in the [Cloudron Forum - EasyAppointments](https://forum.cloudron.io/category/123/easy-appointments)
+* [EasyAppointments Website](https://easyappointments.org)
+* [EasyAppointments issue tracker](https://github.com/alextselegidis/easyappointments/issues)
diff --git a/files/docs/apps/element.md b/files/docs/apps/element.md
new file mode 100644
index 0000000..cb63ebe
--- /dev/null
+++ b/files/docs/apps/element.md
@@ -0,0 +1,39 @@
+# <img src="/img/element-logo.png" width="25px"> Element App
+
+## Setup
+
+Element is a front end that lets you connect to Matrix home servers. See the [Synapse](/apps/synapse)
+package for installing a home server.
+
+This app is pre-configured to use the matrix installation at `matrix.yourdomain.com`.
+For example, if you installed Element at `element.example.com`, the application is pre-configured
+to use `matrix.example.com`.
+
+You can change the homeserver location, by using a [Web Terminal](/apps/#web-terminal)
+and editing `/app/data/config.json`.
+
+## Custom configuration
+
+You can add custom Element configuration using the
+[Web terminal](/apps#web-terminal):
+
+* Add any custom configuration in `/app/data/config.json`.
+* Restart the app
+
+See [config.json](https://github.com/vector-im/riot-web/blob/develop/docs/config.md) for
+reference.
+
+## Custom files
+
+Custom files can be located under `/app/data/custom`. They can then be used in some of
+the configurations (like background) as follows:
+
+```
+
+    "branding": {
+        "welcomeBackgroundUrl": "/custom/background.png",
+        "authHeaderLogoUrl": "/custom/header.png"
+    }
+
+```
+
diff --git a/files/docs/apps/emby.md b/files/docs/apps/emby.md
new file mode 100644
index 0000000..144daa3
--- /dev/null
+++ b/files/docs/apps/emby.md
@@ -0,0 +1,86 @@
+# <img src="/img/emby-logo.png" width="25px"> Emby App
+
+## About
+
+Bringing all of your home videos, music, and photos together into one place has never been easier. Your personal Emby Server automatically converts and streams your media on-the-fly to play on any device.
+
+* Questions? Ask in the [Cloudron Forum - Emby](https://forum.cloudron.io/category/62/emby)
+* [Emby Website](https://emby.media/)
+* [Emby support](https://support.emby.media/support/home)
+* [Emby forum](https://emby.media/community/)
+
+## Mobile Apps
+
+Emby Apps for various devices can be downloaded [here](https://emby.media/download.html).
+
+For iOS and Android, you should be able to connect simply using the `https://emby.mydomain.com`.
+in the custom server url field. No further ports or custom api urls need to be specified.
+
+!!! note "Use port 443"
+    When connecting with the mobile apps use port 443 and not port 8920.
+
+## Hardware Transcoding
+
+!!! note "Cloudron 5.6 required"
+    Cloudron 5.6 is the first release that supports hardware transcoding.
+
+Emby supports 3 types of [hardware acceleration](https://support.emby.media/support/solutions/articles/44001160207)
+on Linux - Nvidia NVDEC, VA API and Intel QuickSync. Cloudron does not support Nvidia at the time of this
+writing.
+
+There are various steps to check if your hardware supports transcoding and if Emby is able to take
+advantage of it.
+
+* Check the output of `vainfo` on your server. You might have to run `apt-get install vainfo libva2 i965-va-driver`
+  if that command is not available on your server. The output should look like below. `VAEntrypointVLD` means that
+    your card is capable to decode this format, `VAEntrypointEncSlice` means that you can encode to this format.
+
+```
+$ vainfo 
+error: can't connect to X server!
+libva info: VA-API version 1.1.0
+libva info: va_getDriverName() returns 0
+libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
+libva info: Found init function __vaDriverInit_1_1
+libva info: va_openDriver() returns 0
+vainfo: VA-API version: 1.1 (libva 2.1.0)
+vainfo: Driver version: Intel i965 driver for Intel(R) CherryView - 2.1.0
+vainfo: Supported profile and entrypoints
+      VAProfileMPEG2Simple            :	VAEntrypointVLD
+      VAProfileMPEG2Simple            :	VAEntrypointEncSlice
+      VAProfileMPEG2Main              :	VAEntrypointVLD
+      VAProfileMPEG2Main              :	VAEntrypointEncSlice
+      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
+      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
+      VAProfileH264Main               :	VAEntrypointVLD
+      VAProfileH264Main               :	VAEntrypointEncSlice
+      VAProfileH264High               :	VAEntrypointVLD
+      VAProfileH264High               :	VAEntrypointEncSlice
+      VAProfileH264MultiviewHigh      :	VAEntrypointVLD
+      VAProfileH264MultiviewHigh      :	VAEntrypointEncSlice
+      VAProfileH264StereoHigh         :	VAEntrypointVLD
+      VAProfileH264StereoHigh         :	VAEntrypointEncSlice
+      VAProfileVC1Simple              :	VAEntrypointVLD
+      VAProfileVC1Main                :	VAEntrypointVLD
+      VAProfileVC1Advanced            :	VAEntrypointVLD
+      VAProfileNone                   :	VAEntrypointVideoProc
+      VAProfileJPEGBaseline           :	VAEntrypointVLD
+      VAProfileJPEGBaseline           :	VAEntrypointEncPicture
+      VAProfileVP8Version0_3          :	VAEntrypointVLD
+      VAProfileVP8Version0_3          :	VAEntrypointEncSlice
+      VAProfileHEVCMain               :	VAEntrypointVLD
+```
+
+* Next step is to check Emby logs. In `Manage Emby Server` -> `Advanced` -> `Logs`, look for a file named
+  `hardware_detection-<something>.txt`. If you cannot find this file, simply restart Emby and it will appear on 
+  startup. The log file output will indicate that it detected the DRI device and can access it and what it can transcode.
+
+* Now that Emby can access the DRI devices, play a video. For every video played, Emby will generate a log file of
+  the `ffmpeg-transcode-<something>.txt`. The log file outputs the Porcessing plan. Finally, when the video is playing,
+  open a new browser tab and see the `Active Devices` in the Emby dashboard. This will show that the video is indeed
+  transcoding.
+
+<center>
+<img src="/img/emby-active-devices.png" class="shadow">
+</center>
+
diff --git a/files/docs/apps/espocrm.md b/files/docs/apps/espocrm.md
new file mode 100644
index 0000000..e289ea5
--- /dev/null
+++ b/files/docs/apps/espocrm.md
@@ -0,0 +1,63 @@
+# <img src="/img/espocrm-logo.png" width="25px"> EspoCRM App
+
+## About
+
+EspoCRM is a web application that allows users to see, enter and evaluate all your company relationships regardless of the type. People, companies, projects or opportunities — all in an easy and intuitive interface.
+
+* Questions? Ask in the [Cloudron Forum - Espo CRM](https://forum.cloudron.io/category/17/espocrm)
+* [Espo CRM Website](https://www.espocrm.com/)
+* [Espo CRM forum](https://forum.espocrm.com/)
+* [Espo CRM issue tracker](https://github.com/espocrm/espocrm/issues)
+
+## Admin access
+
+EspoCRM is automatically setup with an admin account.
+
+```
+    username: admin
+    password: changeme
+```
+
+Be sure to change the admin credentials immediately after installation.
+
+To make an existing Cloudron user an admin, set the admin flag under
+`Teams and Access Control`. Currently, this requires that the Cloudron user
+log into EspoCRM first.
+
+
+## Portals
+
+[EspoCRM Portal](https://www.espocrm.com/tips/customer-portals/) is a functionality that provides the access specific CRM data
+and functions for your customers and partners. Portals can either be sub paths or standalone domains.
+
+Cloudron supports standalone domains for EspoCRM portals using [App Location Aliases](/apps/#aliases). To setup a portal domain:
+
+* Create the [EspoCRM portal](https://docs.espocrm.com/administration/portal/)
+* Specify a custom URL and custom ID for the portal. For example, `https://acme.cloudron.club` in the screenshot below:
+
+    <center>
+    <img src="/img/espocrm-portal-config.png" class="shadow">
+    </center>
+
+* Add the domain in the Cloudron dashboard.
+
+    <center>
+    <img src="/img/espocrm-portal-alias.png" class="shadow">
+    </center>
+
+* Add [portal configuration rewrite rules](https://docs.espocrm.com/administration/portal/#access-to-portal) in `/app/data/apache/portals.conf`
+  using the [File Manager](/apps#file-manager):
+
+```
+    RewriteCond %{HTTP_HOST} ^acme\.cloudron\.club$
+    RewriteRule ^client - [L]
+
+    RewriteCond %{HTTP_HOST} ^acme\.cloudron.club$
+    RewriteCond %{REQUEST_URI} !^/portal/acme/.*$
+    RewriteRule ^(.*)$ /portal/acme/$1 [L]
+```
+
+* Restart the app for the apache configuration changes to take effect.
+
+* You can now visit `https://acme.cloudron.club`.
+
diff --git a/files/docs/apps/etherpad.md b/files/docs/apps/etherpad.md
new file mode 100644
index 0000000..523d0cf
--- /dev/null
+++ b/files/docs/apps/etherpad.md
@@ -0,0 +1,88 @@
+# <img src="/img/etherpad-logo.png" width="25px"> Etherpad App
+
+## Installing plugins
+
+To install plugins or change the configuration, visit the admin
+interface at `/admin`. Only Cloudron admins will have access to
+this page.
+
+A complete list of available plugins is available [here](https://static.etherpad.org/plugins.html).
+
+## Admin user
+
+The first user to login in will be an admin. Additional admins can be added by adding their username to the
+`ep_cloudron.admins` array in the `/app/data/settings.json`
+
+```
+  "ep_cloudron": {
+    "admins": [
+      "username1",
+      "username2"
+    ]
+  }
+```
+
+!!! warning ""
+    The app has to be restarted after editing `/app/data/settings.json` and all users have to re-login to change their role
+
+## Custom settings
+
+Use a [Web terminal](/apps#web-terminal) and add any custom
+settings to `/app/data/settings.json`.
+
+!!! warning ""
+    The app has to be restarted after editing `/app/data/settings.json`
+
+### Make Documents Public
+
+By default the app will always require login with a valid user.
+To allow any visitor to create and edit documents, add the following to `/app/data/settings.json`:
+
+```
+  "requireAuthentication": false,
+```
+
+## Customizing CSS
+
+The CSS and Javascript can be customized by editing the files at `/app/data/custom/`.
+See the [etherpad docs](http://etherpad.org/doc/v1.2.7/#index_custom_static_files) for
+more information.
+
+### Dark mode
+
+The app ships with the **colibris** theme/skin. This skin supports a dark mode through the [skinVariants](https://github.com/ether/etherpad-lite/blob/develop/settings.json.template#L93). To enable that, edit `/app/data/settings.json`:
+
+```
+  "skinVariants": "super-dark-toolbar super-dark-editor dark-background",
+```
+
+## API Access
+
+The [Etherpad API](http://etherpad.org/doc/v1.3.0/#index_http_api) can be accessed by
+obtaining the APIKEY. For this, open a [Web terminal](/apps#web-terminal)
+and view the contents of the file `/app/data/APIKEY.txt`.
+
+Example usage:
+
+    curl https://etherpad.domain/api/1.2.7/listAllPads?apikey=c5513793f24a6fbba161e4497b26c734ff5b2701fad0f1211097ccb405ea65c7
+
+## Troubleshooting
+
+If the app does not start, especially after an update, usually this is related to incompatible plugins.
+To fix this situation, put the app in recovery mode and open a [Web terminal](/apps#web-terminal).
+Get a list of installed plugins:
+```
+npm ls 2> /dev/null | grep ep_
+```
+The two plugins `ep_cloudron` and `ep_etherpad-lite` are required, any other plugin might cause the issue.
+Uninstall other plugins one by one with:
+```
+npm rm <pluginname>
+```
+Then see if the app can start up again by running `/app/pkg/start.sh`. If the app starts up and is accessible normally,
+disable recovery mode again, otherwise try the next one.
+
+Plugins which did not cause the problem can be reinstalled again with:
+```
+npm i <pluginname>
+```
diff --git a/files/docs/apps/filepizza.md b/files/docs/apps/filepizza.md
new file mode 100644
index 0000000..9449e46
--- /dev/null
+++ b/files/docs/apps/filepizza.md
@@ -0,0 +1,10 @@
+# <img src="/img/filepizza-logo.png" width="25px"> File Pizza App
+
+## About
+
+File Pizza imlements peer-to-peer file transfers in your browser.
+
+* Questions? Ask in the [Cloudron Forum - File Pizza](https://forum.cloudron.io/category/66/filepizza)
+* [File Pizza Website](http://file.pizza)
+* [Upstream File Pizza issue tracker](https://github.com/kern/filepizza/issues)
+
diff --git a/files/docs/apps/firefly-iii.md b/files/docs/apps/firefly-iii.md
new file mode 100644
index 0000000..7c41750
--- /dev/null
+++ b/files/docs/apps/firefly-iii.md
@@ -0,0 +1,24 @@
+# <img src="/img/firefly-iii-logo.png" width="25px"> Firefly III App
+
+## About
+
+Firefly III is a free and open source personal finance manager.
+
+* Questions? Ask in the [Cloudron Forum - Firefly III](https://forum.cloudron.io/category/48/firefly-iii)
+* [Firefly III Website](https://firefly-iii.org/)
+* [Firefly III issue tracker](https://github.com/firefly-iii/firefly-iii/issues)
+
+## Admin
+
+Cloudron user can login to Firefly III using their username and password. This app has no 
+separate 'admin' account. The first user to login is made an admin (site owner). Site owners
+can edit and remove other users.
+
+The Firefly III UI does not have a way to grant site owner permissions to another user.
+
+## Sharing accounts
+
+Currently, sharing account between users is not implemented. See the upstream bugtracker for
+more information - [#372](https://github.com/firefly-iii/firefly-iii/issues/372)
+and [#2531](https://github.com/firefly-iii/firefly-iii/issues/2531).
+
diff --git a/files/docs/apps/freescout.md b/files/docs/apps/freescout.md
new file mode 100644
index 0000000..b2ee057
--- /dev/null
+++ b/files/docs/apps/freescout.md
@@ -0,0 +1,48 @@
+# <img src="/img/freescout-logo.png" width="25px"> FreeScout App
+
+## About
+
+FreeScout is the super lightweight free open source help desk and shared inbox.
+
+* Questions? Ask in the [Cloudron Forum - FreeScout](https://forum.cloudron.io/category/68/freescout)
+* [FreeScout Website](https://freescout.net)
+* [FreeScout issue tracker](https://github.com/freescout-helpdesk/freescout/issues)
+
+## Mailbox Setup
+
+Mailboxes do not need to be hosted on Cloudron itself. The app acts as a regular email client and thus can be setup for any IMAP mailbox.
+For sending emails of a specific mailbox, the STMP method has to be selected as `php mail()` or `sendmail` wont work on Cloudron.
+
+<center>
+<img src="/img/freescout-smtp-settings.png" class="shadow">
+</center>
+
+### Cloudron mailbox
+
+To configure Freescout with a Cloudron mailbox, use the following connection settings.
+
+For Sending Emails:
+
+!!! note "Set encryption to None if FreeScout and Cloudron Mail are on same server"
+    For technical reasons, the mail server does not offer encryption for apps hosted on the same server.
+    For this reason, set the Encryption in the screenhot below to None instead of TLS. This is safe since
+    all communication is internal to the server.
+
+<center>
+<img src="/img/freescout-sending-emails.png" class="shadow">
+</center>
+
+For Fetching Emails, use the configuration below. Unlike sending emails, the encryption setting is always `SSL`.
+
+<center>
+<img src="/img/freescout-fetching-emails.png" class="shadow">
+</center>
+
+
+## Modules
+
+FreeScout supports a wide variety of modules to extend the app. Most of them can simply be installed through the FreeScout user interface,
+however some require additional steps to migrate the database before being used.
+
+To ensure all necessary steps are run after a module installation, simply restart the app through the Cloudron dashboard after activating the module.
+
diff --git a/files/docs/apps/freshrss.md b/files/docs/apps/freshrss.md
new file mode 100644
index 0000000..953deeb
--- /dev/null
+++ b/files/docs/apps/freshrss.md
@@ -0,0 +1,30 @@
+# <img src="/img/freshrss-logo.png" width="25px"> FreshRSS
+
+## About
+
+FreshRSS is a free, self-hostable aggregator.
+
+* Questions? Ask in the [Cloudron Forum - FreshRSS](https://forum.cloudron.io/category/27/freshrss)
+* [FreshRSS Website](http://www.freshrss.org)
+* [FreshRSS issue tracker](https://github.com/FreshRSS/FreshRSS/issues)
+
+## Installing Extensions
+
+To install extensions, simply extract them to `/app/data/extensions` and restart
+the app.
+
+The [File manager](/apps#file-manager) can be used to upload and extract extensions.
+
+## Apps
+
+To enable [mobile access](https://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html),
+
+* In `Administration` -> `Authentication`, enable the option “Allow API access (required for mobile apps)”.
+* Under the section `Profile`, fill-in the field `API password (e.g., for mobile apps)`.
+  * Note that every user must define an API password.
+
+### FeedMe
+
+The [FeedMe Android app](https://play.google.com/store/apps/details?id=com.seazon.feedme) has support
+for FreshRSS. When using this app, remember to use the hostname as `https://freshrss.example.com/api/greader.php`
+
diff --git a/files/docs/apps/geoip.md b/files/docs/apps/geoip.md
new file mode 100644
index 0000000..3be69e5
--- /dev/null
+++ b/files/docs/apps/geoip.md
@@ -0,0 +1,32 @@
+# <img src="/img/geoip-logo.png" width="25px"> GeoIP App
+
+## About
+
+A simple Geolocation service based on [maxmind](https://www.npmjs.com/package/maxmind).
+
+* Questions? Ask in the [Cloudron Forum - GeoIP Service](https://forum.cloudron.io/category/79/geoip-service)
+* [GeoIP Website](https://git.cloudron.io/cloudron/geoip/)
+
+## Usage
+
+When making any request to either `/json` or `/jsonp?callback=functionName`, the service will
+resolve the IP to a location and return as much information as possible about the country and city.
+
+Additionally both routes can take a query param `ip` which will override the source ip.
+
+Example:
+
+```
+$ curl https://geoip.example.com/json
+{"city":{"geoname_id":5344157,"names":{"en":"Dublin","ru":"Дублин","zh-CN":"都伯林"}},"continent":{"code":"NA","geoname_id":6255149,"names":{"de":"Nordamerika","en":"North America","es":"Norteamérica","fr":"Amérique du Nord","ja":"北アメリカ","pt-BR":"América do Norte","ru":"Северная Америка","zh-CN":"北美洲"}},"country":{"geoname_id":6252001,"iso_code":"US","names":{"de":"USA","en":"United States","es":"Estados Unidos","fr":"États-Unis","ja":"アメリカ合衆国","pt-BR":"Estados Unidos","ru":"США","zh-CN":"美国"}},"location":{"accuracy_radius":50,"latitude":37.7201,"longitude":-121.919,"metro_code":807,"time_zone":"America/Los_Angeles"},"postal":{"code":"94568"},"registered_country":{"geoname_id":6252001,"iso_code":"US","names":{"de":"USA","en":"United States","es":"Estados Unidos","fr":"États-Unis","ja":"アメリカ合衆国","pt-BR":"Estados Unidos","ru":"США","zh-CN":"美国"}},"subdivisions":[{"geoname_id":5332921,"iso_code":"CA","names":{"de":"Kalifornien","en":"California","es":"California","fr":"Californie","ja":"カリフォルニア州","pt-BR":"Califórnia","ru":"Калифорния","zh-CN":"加利福尼亚州"}}]}
+```
+
+## Access Token
+
+An access token can be set in `/app/data/apitoken.txt`. If set, you have to pass the `accessToken` query parameter.
+
+```
+$ curl https://geoip.example.com/json?accessToken=thetoken
+{"city":{"geoname_id":5344157,"names":{"en":"Dublin","ru":"Дублин","zh-CN":"都伯林"}},"continent":{"code":"NA","geoname_id":6255149,"names":{"de":"Nordamerika","en":"North America","es":"Norteamérica","fr":"Amérique du Nord","ja":"北アメリカ","pt-BR":"América do Norte","ru":"Северная Америка","zh-CN":"北美洲"}},"country":{"geoname_id":6252001,"iso_code":"US","names":{"de":"USA","en":"United States","es":"Estados Unidos","fr":"États-Unis","ja":"アメリカ合衆国","pt-BR":"Estados Unidos","ru":"США","zh-CN":"美国"}},"location":{"accuracy_radius":50,"latitude":37.7201,"longitude":-121.919,"metro_code":807,"time_zone":"America/Los_Angeles"},"postal":{"code":"94568"},"registered_country":{"geoname_id":6252001,"iso_code":"US","names":{"de":"USA","en":"United States","es":"Estados Unidos","fr":"États-Unis","ja":"アメリカ合衆国","pt-BR":"Estados Unidos","ru":"США","zh-CN":"美国"}},"subdivisions":[{"geoname_id":5332921,"iso_code":"CA","names":{"de":"Kalifornien","en":"California","es":"California","fr":"Californie","ja":"カリフォルニア州","pt-BR":"Califórnia","ru":"Калифорния","zh-CN":"加利福尼亚州"}}]}
+```
+
diff --git a/files/docs/apps/ghost.md b/files/docs/apps/ghost.md
new file mode 100644
index 0000000..a639bb5
--- /dev/null
+++ b/files/docs/apps/ghost.md
@@ -0,0 +1,40 @@
+# <img src="/img/ghost-logo.png" width="25px"> Ghost App
+
+## About
+
+Ghost makes it simple to publish content online, grow an audience with email newsletters, and make money from premium memberships.
+
+* Questions? Ask in the [Cloudron Forum - Ghost](https://forum.cloudron.io/category/59/ghost)
+* [Ghost Website](https://ghost.org/)
+* [Ghost forum](https://forum.ghost.org/)
+* [Ghost issue tracker](https://github.com/TryGhost/Ghost/issues)
+
+## Structured data
+
+Ghost outputs basic meta tags to allow rich snippets of your content to be recognised by popular social networks.
+Currently there are 3 supported rich data protocols which are output in `{{ghost_head}}`:
+
+- Schema.org - http://schema.org/docs/documents.html
+- Open Graph - http://ogp.me/
+- Twitter cards - https://dev.twitter.com/cards/overview
+
+The Cloudron app enables output of [structured data](https://github.com/TryGhost/Ghost/blob/master/PRIVACY.md#structured-data)
+by default.
+
+## Gravatar
+
+For [privacy](https://github.com/TryGhost/Ghost/blob/master/PRIVACY.md) reasons, Gravatar functionality is disabled
+by default. You can re-enable this by editing the `useGravatar` field in `/app/data/config.production.json` using
+the  [File Manager](/apps#file-manager). Be sure to restart the app after editing the config file.
+
+## Importing
+
+You can import content from another Ghost installation from Settings -> Labs -> Import content.
+
+If the JSON file is large, the import might fail. To fix this:
+
+* Give the app [more memory](/apps/#memory-limit) (say 2GB).
+* Next, use the [File Manager](/apps#file-manager) to edit `/app/data/env` to adjust the NodeJS `max-old-space-size` limit.
+  Set it to 2GB using a line like this `export NODE_OPTIONS="--max-old-space-size=2048"`
+* Restart Ghost and try the import again.
+
diff --git a/files/docs/apps/gitea.md b/files/docs/apps/gitea.md
new file mode 100644
index 0000000..65d59fd
--- /dev/null
+++ b/files/docs/apps/gitea.md
@@ -0,0 +1,25 @@
+# <img src="/img/gitea-logo.png" width="25px"> Gitea App
+
+## About
+
+Gitea is a community managed lightweight code hosting solution written in Go.
+
+* Questions? Ask in the [Cloudron Forum - Gitea](https://forum.cloudron.io/category/19/gitea)
+* [Gitea Website](https://gitea.io)
+* [Gitea forum](https://discourse.gitea.io/)
+* [Gitea issue tracker](https://github.com/go-gitea/gitea/issues)
+
+## Customizing Gitea
+
+[Customizing Gitea](https://docs.gitea.io/en-us/customizing-gitea/) is typically done
+using the custom folder. This is the central place to override configuration settings,
+templates, etc.
+
+On Cloudron, the custom data folder is located at `/app/data/custom`.
+
+Gitea also supports various [configuration customizations](https://docs.gitea.io/en-us/config-cheat-sheet/).
+To add customizations, use the [File Manager](/apps#file-manager) and edit
+the file named `/app/data/app.ini`.
+
+After editing, restart the app for the changes to take effect.
+
diff --git a/files/docs/apps/githubpages.md b/files/docs/apps/githubpages.md
new file mode 100644
index 0000000..8bd8fff
--- /dev/null
+++ b/files/docs/apps/githubpages.md
@@ -0,0 +1,63 @@
+# <img src="/img/githubpages-logo.png" width="25px"> GitHub Pages App
+
+## About
+
+GitHub pages compatible repos can be published using this app.
+
+* Questions? Ask in the [Cloudron Forum - GitHub Pages](https://forum.cloudron.io/category/39/github-pages)
+
+## Publishing pages
+
+To publish your page, push your GitHub Pages repository via HTTP to this
+app:
+
+```
+    git remote add page https://<app.example.com>/_git/page
+    git push page master
+```
+
+When pushing, `git` will prompt for Cloudron username and credentials. Any
+Cloudron user with access to the app can push.
+
+It can be convenient to store the HTTP username and password in the `~/.netrc`
+file:
+
+```
+    machine app.example.com login fred password bluebonnet
+```
+
+Adjust `app.example.com`, `fred` and `bluebonnet` above to your setup.
+
+## Jekyll plugins
+
+The GitHub pages app does not support custom Jekyll plugins. The app follows
+the list of plugins supported by GitHub pages. See
+[GitHub pages plugins](https://pages.github.com/versions/) page for a list of
+supported plugins.
+
+## GitHub pages GEM
+
+The app uses the [pages gem](https://github.com/github/pages-gem) to statically
+build the website. In the event that the gem update does not build the repo (because
+of version mismatch), the app will continue to serve the last successful build.
+
+## Using mkdocs
+
+[mkdocs](https://www.mkdocs.org/) has a command called `gh-deploy` that can
+automatically build docs and publish the site to a specific remote and branch.
+
+```
+    git remote add page https://site.cloudron.xyz/_git/page # add the github-pages app remote
+    mkdocs gh-deploy --remote-name page --remote-branch master --force
+```
+
+
+
+## About
+
+   This app is blah blah
+
+   * Questions? Ask in the [Cloudron Forum - GitHub Pages](https://forum.cloudron.io/category/39/github-pages)
+   * [GitHub Pages Website](https://pages.github.com/)
+   * [Upstream GitHub Pages forum](https://forum.cloudron.io/category/39/github-pages)
+   * [Upstream GitHub Pages issue tracker](https://forum.cloudron.io/category/39/github-pages)
diff --git a/files/docs/apps/gitlab.md b/files/docs/apps/gitlab.md
new file mode 100644
index 0000000..b5348c0
--- /dev/null
+++ b/files/docs/apps/gitlab.md
@@ -0,0 +1,121 @@
+# <img src="/img/gitlab-logo.png" width="25px"> GitLab App
+
+## About
+
+GitLab is the complete DevOps platform.
+
+* Questions? Ask in the [Cloudron Forum - GitLab](https://forum.cloudron.io/category/25/gitlab)
+* [GitLab Website](https://about.gitlab.com/)
+* [GitLab forum](https://forum.gitlab.com/)
+* [GitLab issue tracker](https://gitlab.com/gitlab-org/gitlab/-/issues)
+
+## Custom gitlab.yml
+
+GitLab is customized using GitLab's admin interface. Some options can ony be
+changed in `gitlab.yml`. For such situations, use the [File Manager](/apps#file-manager)
+and create a file named `/app/data/gitlab.yml`. This way custom configurations
+will be preserved across updates and will also be backed up.
+
+For example, to add GitHub login and Piwik analytics, add a `/app/data/gitlab.yml` like below
+and _restart_ the application:
+
+```
+production:
+  <<: *base
+  extra:
+    ## Piwik analytics.
+    piwik_url: 'analytics.example.com'
+    piwik_site_id: '7'
+
+  omniauth:
+    # Allow login via Twitter, Google, etc. using OmniAuth providers
+    enabled: true
+    allow_single_sign_on: ["github"]
+    block_auto_created_users: false
+    external_providers: [ ]
+    providers:
+      - { name: 'github',
+          app_id: 'my_app_id',
+          app_secret: 'my_app_secret',
+          url: "https://github.com/",
+          verify_ssl: true,
+          args: { scope: 'user:email' } }
+
+```
+
+## Disabling registration
+
+By default, GitLab allows external people to sign up. This can be disabled to
+restrict use only to Cloudron users as follows:
+
+GitLab > Admin area > Settings > Features > remove the check mark "Sign-up enabled"
+
+## GitLab Runner for CI
+
+[GitLab CI](https://docs.gitlab.com/ce/ci/README.html) involves installing one or more GitLab Runners.
+These runners carry out tasks as instructed by the main GitLab installation. When installing a runner,
+you have to select the [project tags](https://docs.gitlab.com/ce/ci/runners/#using-tags) to
+which the runner will respond and the type of tasks ("[executor](https://docs.gitlab.com/runner/executors/README.html)")
+it can carry out. For example, there is a Shell executor, Docker execuctor etc.
+
+Once GitLab runner is installed, you have to add the runner in GitLab. When adding the
+runner in GitLab, you can decide how GitLab [schedules tasks](https://docs.gitlab.com/ce/ci/runners/)
+in the runner ie. if the runner is exclusive to a project ('Specific Runner') or shared between
+projects ('Shared Runner) or specific to a group ('Group Runner').
+
+Cloudron's GitLab package can be used with GitLab Runner as follows.
+
+* First create a **new** server and install GitLab Runner on it following the instructions
+  at [GitLab docs](https://docs.gitlab.com/runner/install/linux-repository.html). In short:
+
+```
+    # For ubuntu
+    curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
+    sudo apt-get install gitlab-runner
+```
+
+* Get the token listed in GitLab under `https://<gitlab.example.com>/admin/runners` (under shared runners section).
+
+* [Register the runner](https://docs.gitlab.com/runner/register/index.html) with the token from the above step
+
+```
+    root@localhost:~# sudo gitlab-runner register
+    Running in system-mode.                            
+                                                           
+    Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
+    https://gitlab.cloudron.xyz
+    Please enter the gitlab-ci token for this runner:
+    xzdZgdsXq5uSFCyAK7pP
+    Please enter the gitlab-ci description for this runner:
+    [localhost]: Shell Jobs Runner
+    Please enter the gitlab-ci tags for this runner (comma separated):
+
+    Whether to lock the Runner to current project [true/false]:
+    [true]: false
+    Registering runner... succeeded                     runner=xzdZgdsX
+    Please enter the executor: docker, docker-ssh, shell, ssh, virtualbox, docker-ssh+machine, parallels, docker+machine, kubernetes:
+    shell
+    Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 
+```
+
+* The Runner should now be listed under `https://<gitlab.example.com>/admin/runners`.
+
+* Now push a [.gitlab-ci.yml](https://docs.gitlab.com/ce/ci/yaml/README.html) to your project to
+  start using the runner.
+
+
+## Reset Admin Password  
+
+To reset the admin password, run the following commands using the [Web terminal](/apps#web-terminal):
+
+```
+# su - git  
+$ cd gitlab
+$ bundle exec rails c -e production # (takes about 10 sec to bring up rails terminal)
+=> user = User.where(id: 1).first
+=> user.password = 'NEW_PASS'
+=> user.password_confirmation = 'NEW_PASS'
+=> user.save
+=> exit
+```
+
diff --git a/files/docs/apps/gogs.md b/files/docs/apps/gogs.md
new file mode 100644
index 0000000..1e6e235
--- /dev/null
+++ b/files/docs/apps/gogs.md
@@ -0,0 +1,18 @@
+# <img src="/img/gogs-logo.png" width="25px"> Gogs App
+
+## About
+
+Gogs is a painless self-hosted Git service.
+
+* Questions? Ask in the [Cloudron Forum - Gogs](https://forum.cloudron.io/category/70/gogs)
+* [Gogs Website](https://gogs.io)
+* [Gogs issue tracker](https://github.com/gogs/gogs/issues)
+
+## Customizing Gogs
+
+Gogs supports various [customizations](https://gogs.io/docs/advanced/configuration_cheat_sheet).
+To add customizations, use the [File Manager](/apps#file-manager)) and
+edit the file named `/app/data/app.ini`.
+
+After editing, restart the app for the changes to take effect.
+
diff --git a/files/docs/apps/grafana.md b/files/docs/apps/grafana.md
new file mode 100644
index 0000000..6f9a8b1
--- /dev/null
+++ b/files/docs/apps/grafana.md
@@ -0,0 +1,32 @@
+# <img src="/img/grafana-logo.png" width="25px"> Grafana App
+
+## About
+
+Grafana is the open and composable observability and data visualization platform.
+
+* Questions? Ask in the [Cloudron Forum - Grafana](https://forum.cloudron.io/category/98/grafana)
+* [Grafana Website](https://grafana.com)
+* [Grafana forum](https://community.grafana.com/)
+* [Grafana issue tracker](https://github.com/grafana/grafana/issues)
+
+## Customizations
+
+Custom configuration can be added in the file `/app/data/custom.ini`. See the [Grafana docs](https://grafana.com/docs/grafana/latest/administration/configuration/)
+on the various configuration options.
+
+## Installing plugins
+
+To install plugins, you run the grafana CLI tool using the [Web Terminal](/apps#web-terminal).
+
+For example,
+
+```
+# /app/code/bin/grafana-cli -homepath /app/code -config /run/grafana/custom.ini plugins install grafana-worldmap-panel
+```
+
+## Reset admin password
+
+```
+# /app/code/bin/grafana-cli --homepath /app/code  --config /run/grafana/custom.ini admin reset-admin-password secret123 
+```
+
diff --git a/files/docs/apps/grav.md b/files/docs/apps/grav.md
new file mode 100644
index 0000000..877f29c
--- /dev/null
+++ b/files/docs/apps/grav.md
@@ -0,0 +1,21 @@
+# <img src="/img/grav-logo.png" width="25px"> Grav App
+
+## About
+
+Grav is a modern open source flat-file CMS.
+
+* Questions? Ask in the [Cloudron Forum - Grav](https://forum.cloudron.io/category/72/grav-cms)
+* [Grav Website](https://getgrav.org)
+* [Grav forum](https://discourse.getgrav.org/)
+* [Grav issue tracker](https://github.com/getgrav/grav/issues)
+
+## CLI
+
+GPM and Grav commands can be executed by opening a [Web terminal](/apps#web-terminal):
+
+```
+# cd /app/code
+# sudo -u www-data -- /app/code/bin/gpm install bootstrap4-open-matter
+# sudo -u www-data -- /app/code/bin/grav
+```
+
diff --git a/files/docs/apps/greenlight.md b/files/docs/apps/greenlight.md
new file mode 100644
index 0000000..d267d72
--- /dev/null
+++ b/files/docs/apps/greenlight.md
@@ -0,0 +1,60 @@
+# <img src="/img/greenlight-logo.png" width="25px"> Greenlight App
+
+## About
+
+Greenlight is a really simple end-user interface for your BigBlueButton server. 
+
+* Questions? Ask in the [Cloudron Forum - Greenlight](https://forum.cloudron.io/category/103/greenlight)
+* [Greenlight Website](https://github.com/bigbluebutton/greenlight)
+* [Greenlight issue tracker](https://github.com/bigbluebutton/greenlight/issues)
+
+## Installing BigBlueButton
+
+This app is intended to work alongside a BigBlueButton installation. Greenlight is the frontend which
+has Cloudron user authentication and the BigBlueButton install is the backend. BBB must be
+installed on a separate VM following the instructions at https://github.com/bigbluebutton/bbb-install.
+
+To summarize the installation procedure:
+
+* Click yourself a dedicated bare metal. Let's say https://www.hetzner.com/de/dedicated-rootserver/ax41-nvme
+* Install ubuntu 16 on it.
+* SSH into it
+* `wget -qO- https://ubuntu.bigbluebutton.org/bbb-install.sh | bash -s -- -w -v xenial-22 -s bbb.example.com -e info@example.com -c <hostname>:<secret>`.
+* Install Greenlight on Cloudron
+* Take the output of `bbb-conf --secret` and put it into `/app/data/.env` of Greenlight using the [File manager](/apps/#file-manager).
+* Restart the Greenlight app.
+
+## Creating a new user with a role
+
+To create a new User, open a [Web terminal](/apps/#web-terminal) and run the following commands:
+
+```bash
+# Information
+# bundle exec rake user:create["name","email","password","role"]
+
+# Creating an admin
+bundle exec rake user:create["admin","admin@server.local","changeme","admin"]
+
+# Creating a user - Can be usefull if there is no cloudron user
+bundle exec rake user:create["user-noldap","user-noldap@server.local","changeme","user"]
+```
+
+For further documentation about user creation you can visit the official documentation. [Greenlight - Creating Accounts](https://docs.bigbluebutton.org/greenlight/gl-admin.html#creating-accounts)
+
+## Customizing looks and content of Greenlight
+
+Please visit the official [Greenlight Documentaion](https://docs.bigbluebutton.org/greenlight/gl-admin.html#site-settings) for information about the customization.
+
+## Customizing the Landing Page
+
+The [Official Documentation](https://docs.bigbluebutton.org/greenlight/gl-customize.html#customizing-the-landing-page).
+
+You can follow the [Official Documentation](https://docs.bigbluebutton.org/greenlight/gl-customize.html#customizing-the-landing-page) with the Cloudron [File manager](/apps/#file-manager).
+
+Just note the path changes:
+
+```
+app/views/main/index.html.erb => /app/data/views/index.html.erv
+config/locales/en.yml => /app/data/locales/en.yml
+```
+
diff --git a/files/docs/apps/guacamole.md b/files/docs/apps/guacamole.md
new file mode 100644
index 0000000..fc6d56b
--- /dev/null
+++ b/files/docs/apps/guacamole.md
@@ -0,0 +1,30 @@
+# <img src="/img/guacamole-logo.png" width="25px"> Guacamole App
+
+## About
+
+Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH.
+
+* Questions? Ask in the [Cloudron Forum - Guacamole](https://forum.cloudron.io/category/99/guacamole)
+* [Guacamole Website](https://guacamole.apache.org//)
+* [Guacamole support](https://guacamole.apache.org/support/)
+* [Guacamole issue tracker](https://issues.apache.org/jira/projects/GUACAMOLE/issues/GUACAMOLE-1239)
+
+## RDP
+
+Most Windows/RDP servers do not have a valid certificate installed. For this reason,
+be sure to check the ignore server certificate checkbox in the Parameters section.
+
+<center>
+<img src="/img/guacamole-rdp.png" class="shadow">
+</center>
+
+## Guacamole menu
+
+The Guacamole menu is a sidebar which is hidden until explicitly shown. On a desktop or other
+device which has a hardware keyboard, you can show this menu by pressing **Ctrl+Alt+Shift**.
+If you are using a mobile or touchscreen device that lacks a keyboard, you can also show the
+menu by swiping right from the left edge of the screen.
+
+See [the docs](https://guacamole.apache.org/doc/gug/using-guacamole.html#guacamole-menu) for
+more information.
+
diff --git a/files/docs/apps/hastebin.md b/files/docs/apps/hastebin.md
new file mode 100644
index 0000000..5f716b1
--- /dev/null
+++ b/files/docs/apps/hastebin.md
@@ -0,0 +1,16 @@
+# <img src="/img/hastebin-logo.png" width="25px"> Hastebin App
+
+## About
+
+Hastebin is an open source pastebin written in node.js.
+
+* Questions? Ask in the [Cloudron Forum - Hastebin](https://forum.cloudron.io/category/78/hastebin)
+* [Hastebin Website](https://hastebin.com/about.md)
+* [Hastebin issue tracker](https://github.com/seejohnrun/haste-server/issues)
+
+## Deleting pastes
+
+Pastes never expire and have to be cleaned up manually. For this,
+use the [File Manager](/apps#file-manager) and simply
+remove the pastes stored under `/app/data` as needed.
+
diff --git a/files/docs/apps/hedgedoc.md b/files/docs/apps/hedgedoc.md
new file mode 100644
index 0000000..82a7636
--- /dev/null
+++ b/files/docs/apps/hedgedoc.md
@@ -0,0 +1,39 @@
+# <img src="/img/hedgedoc-logo.png" width="25px"> HedgeDoc App
+
+## About
+
+HedgeDoc is the best platform to write and share markdown.
+
+* Questions? Ask in the [Cloudron Forum - HedgeDoc](https://forum.cloudron.io/category/38/hedgedoc)
+* [HedgeDoc Website](https://demo.hedgedoc.org/)
+* [HedgeDoc issue tracker](https://github.com/hedgedoc/hedgedoc/issues)
+
+!!! note "Impending rename"
+    CodiMD is being renamed to HedgeDoc. This app package will be renamed accordingly.
+
+## Custom configuration
+
+Use the [File manager](/apps#file-manager)
+to place custom configuration under `/app/data/config.json`.
+
+See [HedgeDoc docs](https://github.com/hedgedoc/hedgedoc/blob/master/docs/configuration.md)
+for configuration options reference.
+
+## Image uploads
+
+By default, images are uploaded to the data directory of the app itself.
+To switch to another provider like MinIO, first [configure minio](https://github.com/hedgedoc/hedgedoc/blob/master/docs/guides/minio-image-upload.md) to image uploads. Then, use the following configuration in
+`/app/data/config.json`:
+
+```
+    "imageUploadType": "minio",
+    "s3bucket": "codimd-images",
+    "minio": {
+        "accessKey": "MINIO_ACCESS_KEY",
+        "secretKey": "MINIO_SECRET_KEY",
+        "endPoint": "minio.cloudrondomain.com",
+        "secure": true,
+        "port": 443
+    }
+```
+
diff --git a/files/docs/apps/invoiceninja.md b/files/docs/apps/invoiceninja.md
new file mode 100644
index 0000000..81fd9f0
--- /dev/null
+++ b/files/docs/apps/invoiceninja.md
@@ -0,0 +1,46 @@
+# <img src="/img/invoiceninja-logo.png" width="25px"> Invoice Ninja App
+
+## About
+
+InvoiceNinja is the leading self-host platform to create invoices, accept payments, track expenses & time tasks. Support WePay, Stripe, Braintree, PayPal, Zapier, and more!
+
+* Questions? Ask in the [Cloudron Forum - Invoice Ninja](https://forum.cloudron.io/category/11/invoice-ninja)
+* [Invoice Ninja Website](https://www.invoiceninja.org)
+* [Invoice Ninja forum](https://forum.invoiceninja.com/)
+
+## Customizations
+
+InvoiceNinja customizations can be made by opening a  [File Manager](/apps#file-manager)
+and editing `/app/data/env`.
+
+## Invoices
+
+The app is pre-configured to send any invoices every 6 hours. To run the invoice
+sending task manually, open a [Web terminal](/apps#web-terminal) and run:
+
+```
+sudo -u www-data /usr/local/bin/php /app/code/artisan ninja:send-invoices
+```
+
+## Reminders
+
+The app is pre-configured to send out reminders at 0800 UTC. This limitation
+is because running the send-reminders cron more than once a day would
+[cause problems](https://github.com/invoiceninja/invoiceninja/issues/1921#issuecomment-368806883)
+(duplicate late fees, etc.).
+
+To run the reminders task manually, open a [Web terminal](/apps#web-terminal) and run:
+
+```
+sudo -u www-data /usr/local/bin/php /app/code/artisan ninja:send-reminders
+```
+
+## Cron logs
+
+Cron logs are stored in `/app/data/storage/logs/cron.log`.
+
+## API Key
+
+To get the API key, open `/app/data/.env` with the [File manager](/apps#file-manager), and lookg
+for `API_SECRET`.
+
diff --git a/files/docs/apps/jellyfin.md b/files/docs/apps/jellyfin.md
new file mode 100644
index 0000000..7a8ea90
--- /dev/null
+++ b/files/docs/apps/jellyfin.md
@@ -0,0 +1,10 @@
+# <img src="/img/jellyfin-logo.png" width="25px"> Jellyfin App
+
+## About
+
+Jellyfin is the volunteer-built media solution that puts you in control of your media. Stream to any device from your own server, with no strings attached. Your media, your server, your way.
+
+* Questions? Ask in the [Cloudron Forum - Jellyfin](https://forum.cloudron.io/category/85/jellyfin)
+* [Jellyfin Website](https://jellyfin.org/)
+* [Jellyfin issue tracker](https://github.com/jellyfin/jellyfin/issues/)
+
diff --git a/files/docs/apps/jingo.md b/files/docs/apps/jingo.md
new file mode 100644
index 0000000..f3d390b
--- /dev/null
+++ b/files/docs/apps/jingo.md
@@ -0,0 +1,24 @@
+# <img src="/img/jingo-logo.png" width="25px"> Jingo App
+
+## About
+
+The aim of Jingo Wiki is to provide an easy way to create a centralized documentation area for people used to work with git and markdown.
+
+
+* Questions? Ask in the [Cloudron Forum - Jingo](https://forum.cloudron.io/category/83/jingo)
+* [Jingo Website](https://github.com/claudioc/jingo)
+* [Jingo issue tracker](https://github.com/claudioc/jingo/issues)
+
+## Custom configuration
+
+Use the [File manager](/apps#file-manager)
+to place custom configuration under `/app/data/config.yml`.
+
+See [Jingo docs](https://github.com/claudioc/jingo#configuration-options-reference)
+for configuration options reference.
+
+## Look and feel
+
+You can add a sidebar, footer, custom CSS and custom Javascript by following the
+instructions in [Jingo docs](https://github.com/claudioc/jingo#customization).
+
diff --git a/files/docs/apps/jirafeau.md b/files/docs/apps/jirafeau.md
new file mode 100644
index 0000000..31ad573
--- /dev/null
+++ b/files/docs/apps/jirafeau.md
@@ -0,0 +1,66 @@
+# <img src="/img/jirafeau-logo.png" width="25px"> Jirafeau App
+
+## About
+
+Jirafeau is a "one-click-filesharing": Select your file, upload, share a link. That's it.
+
+* Questions? Ask in the [Cloudron Forum - Jirafeau](https://forum.cloudron.io/category/121/jirafeau)
+* [Jirafeau Website](https://jirafeau.net/)
+* [Jirafeau issue tracker](https://gitlab.com/mojo42/Jirafeau/-/issues)
+
+## Customization
+
+The app allows for a multitude of customization by overwriting config values in `/app/data/custom.php` using the [File Manager](/apps/#file-manager).
+
+All options can be seen [here](https://gitlab.com/mojo42/Jirafeau/-/blob/master/lib/config.original.php).
+
+For example settings the page title can be done by adding the following:
+```
+$cfg['organisation'] = 'My filedrop';
+```
+
+## Restricting Uploads
+
+By default, anyone can upload to the instance. You can add customizations in `/app/data/custom.php` to protect
+your instance.
+
+To protect uploads with a password:
+
+```
+$cfg['upload_password'] = array('psw1');         // One password
+```
+
+Alternately, uploads can be restricted by IP address(es):
+
+```
+$cfg['upload_ip'] = array('123.45.0.0/16');
+```
+
+If you set a password, you can set a list of IPs that can upload without password:
+
+```
+$cfg['upload_ip_nopassword'] = array();
+```
+
+## Themes
+
+To change the theme, edit `/app/data/custom.php`. List of theme names is [available here](https://gitlab.com/mojo42/Jirafeau/-/tree/master/media).
+
+```
+$cfg['style'] = 'dark-courgette';
+```
+
+If you want to make a custom theme, then use the [Web Terminal](/apps/#web-terminal) to first copy over
+from an existing theme (themes are located under `/app/code/media.original`):
+
+```
+# cd /app/data/media
+# cp -r /app/code/media.original/dark-courgette/ mydarkhorse
+```
+
+Edit the new theme `mydarkhorse` to your content. Then, change `/app/data/custom.php`:
+
+```
+$cfg['style'] = 'mydarkhorse';
+```
+
diff --git a/files/docs/apps/jupyterhub.md b/files/docs/apps/jupyterhub.md
new file mode 100644
index 0000000..3d43080
--- /dev/null
+++ b/files/docs/apps/jupyterhub.md
@@ -0,0 +1,81 @@
+# <img src="/img/jupyterhub-logo.png" width="25px"> JupyterHub App
+
+## About
+
+JupyterHub brings the power of notebooks to groups of users. It gives users access to computational environments and resources without burdening the users with installation and maintenance tasks.
+
+* Questions? Ask in the [Cloudron Forum - Jupyter Hub](https://forum.cloudron.io/category/75/jupyterhub)
+* [Jupyter Hub Website](https://jupyter.org/hub)
+* [Jupyter Hub Community](https://jupyter.org/community)
+* [Jupyter Hub issue tracker](https://github.com/jupyterhub/jupyterhub/issues)
+
+## How it works
+
+The JupyterHub app is run as a container (like any other Cloudron app). The hub app manages user login and creates
+a separate container for each user's notebooks. The notebook container is created from the `c.DockerSpawner.container_image`
+setting (see below on how to customize this). Each notebook container is run with a configurable memory limit based
+on `c.Spawner.mem_limit`. The advantage of this approach is that you can control how much compute/memory is allocated to
+each user and a notebook cannot bring down the whole server.
+
+If you change the notebook image or any configuration, the notebook containers have to be "recreated". To help with this,
+the `/app/code/remove_notebook_containers.py` script can be run. Note that this only removes the containers but not the
+user's notebooks itself.
+
+## Selecting a notebook image
+
+By default, the app uses the `jupyter/datascience-notebook`. The upstream Jupyterhub project
+maintains many other [notebook images](https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html).
+
+To use a different notebook image, use the [File Manager](/apps#file-manager)
+to place custom configuration under `/app/data/customconfig.py`. For example,
+add a line like below:
+
+```
+c.DockerSpawner.container_image = 'jupyter/all-spark-notebook:77e10160c7ef'
+```
+
+It is also possible to use any arbitrary docker image built from the `jupyter/base-notebook`.
+For this, build an image from Dockerfile with `FROM jupyter/base-notebook`, push it to Dockerhub
+and update the image field above.
+
+To apply the configuration, restart the app using the Restart button.
+
+!!! note "Remove existing notebook containers"
+    For the container image to take effect, you have to remove any existing docker notebook containers
+    using the `/app/code/remove_notebook_containers.py` script. Notebook data will be intact despite
+    deleting the container.
+
+## Notebook Memory limit
+
+By default, notebooks are given 500M (including swap). This can be changed by editing `/app/data/customconfig.py`.
+
+```
+c.Spawner.mem_limit = '1G'
+```
+
+To apply the configuration, restart the app using the Restart button.
+
+!!! note "Remove existing notebook containers"
+    For the memory limit to take effect, you have to remove any existing docker notebook containers
+    using the `/app/code/remove_notebook_containers.py` script. Notebook data will be intact despite
+    deleting the container.
+
+## Notebook persistence
+
+All notebooks are part of the application backup and persisted across updates.
+
+Libraries installed using `conda` are not part of the backup and are part of the notebook container.
+Idle notebooks are shutdown over time but they are not destroyed. This means that if any libraries
+installed in notebook container will generally persist.
+
+If the notebook image is changed, the old notebook containers are destroyed. This means that
+any libraries that were previously installed have to be re-installed.
+
+## Other custom configuration
+
+Use the [File Manager](/apps#file-manager)
+to place custom configuration under `/app/data/customconfig.py`.
+
+See the [docs](https://github.com/jupyterhub/jupyterhub-deploy-docker#run-jupyterhub) for
+more information.
+
diff --git a/files/docs/apps/kanboard.md b/files/docs/apps/kanboard.md
new file mode 100644
index 0000000..2e8ca5d
--- /dev/null
+++ b/files/docs/apps/kanboard.md
@@ -0,0 +1,23 @@
+# <img src="/img/kanboard-logo.png" width="25px"> Kanboard App
+
+## About
+
+Kanboard is a free and open source Kanban project management software.
+
+* Questions? Ask in the [Cloudron Forum - Kanboard](https://forum.cloudron.io/category/36/kanboard)
+* [Kanboard Website](http://kanboard.net/)
+* [Kanboard issue tracker](https://github.com/kanboard/kanboard/issues)
+
+## Installing plugins
+
+[Kanboard Plugins](https://kanboard.org/#plugins) are used to extend Kanboard. Kanboard has a UI to install and uninstall plugins
+at `/app/data/plugins` directly.
+
+Plugins can also be installed manually at `/app/data/plugins`. Use the [file manager](/apps/#file-manager) to upload
+and extract plugins under that directory.
+
+## Custom configuration
+
+Custom plugin configuration can be stored in `/app/data/customconfig.php`. To edit
+the file, use the [file manager](/apps#file-manager) for the app.
+
diff --git a/files/docs/apps/kimai.md b/files/docs/apps/kimai.md
new file mode 100644
index 0000000..6f9ffd2
--- /dev/null
+++ b/files/docs/apps/kimai.md
@@ -0,0 +1,33 @@
+# <img src="/img/kimai-logo.png" width="25px"> Kimai App
+
+## About
+
+Kimai is a free & open source timetracker.
+
+* Questions? Ask in the [Cloudron Forum - Kimai](https://forum.cloudron.io/category/45/kimai)
+* [Kimai Website](https://www.kimai.org/)
+* [Kimai issue tracker](https://github.com/kevinpapst/kimai2/issues)
+
+## Plugins
+
+Kimai2 supports both free and paid plugins or sometimes called bundles.
+The [marketplace](https://www.kimai.org/store/) offers a selection of mostly paid plugins, while there are many free ones on github. Plugins can be obtained either through git checkout or downloading and extracting a zip bundle into `/app/data/plugins`.
+
+The following example installes the demo plugin using the [Web terminal](/apps#web-terminal) into the running app instance:
+
+```
+cd /app/data/plugins
+git clone https://github.com/Keleo/DemoBundle.git
+chown -R www-data.www-data .
+cd /app/code
+sudo -u www-data bin/console kimai:reload
+```
+
+## Customization
+
+Use the [File Manager](/apps#file-manager) to edit custom configuration under `/app/data/local.yaml`.
+
+See [Kimai customization docs](https://www.kimai.org/configurations.html) for more information.
+
+Once the `local.yaml` is updated, restart the app from the Cloudron dashboard.
+
diff --git a/files/docs/apps/kopano-meet.md b/files/docs/apps/kopano-meet.md
new file mode 100644
index 0000000..4d72800
--- /dev/null
+++ b/files/docs/apps/kopano-meet.md
@@ -0,0 +1,7 @@
+# <img src="/img/kopano-meet-logo.png" width="25px"> Kopano Meet App
+
+## TURN Server
+
+The Kopano Meet app is pre-configured to use Cloudron's built-in TURN server. No
+additional configuration is required.
+
diff --git a/files/docs/apps/kutt.md b/files/docs/apps/kutt.md
new file mode 100644
index 0000000..06d1226
--- /dev/null
+++ b/files/docs/apps/kutt.md
@@ -0,0 +1,40 @@
+# <img src="/img/kutt-logo.png" width="25px"> Kutt App
+
+## About
+
+Kutt is a free Modern URL Shortener.
+
+* Questions? Ask in the [Cloudron Forum - Kutt](https://forum.cloudron.io/category/111/kutt)
+* [Kutt Website](https://kutt.it)
+
+## Custom config
+
+Custom configuration can be put in `/app/data/env` using the [Web Terminal](/apps#web-terminal) or the
+[File Manager](/apps/#file-manager).
+
+## Registration
+
+Registration is enabled by default. This can be disabled by settings `DISALLOW_REGISTRATION=true`
+in `/app/data/env'
+
+## 3rd party packages
+
+Kutt integrates with a variety of languages and frameworks. See [upstream docs](https://github.com/thedevs-network/kutt#3rd-party-packages)
+for more information
+
+## Custom domains
+
+Kutt supports having more than one domain. You can add domains in the custom domain section. Note
+`Set domain` below is a bit misleading because it's really `Add domain`.
+
+<center>
+<img src="/img/kutt-custom-domain.png" class="shadow">
+</center>
+
+Then, in the Cloudron Dashboard add the custom domains as domain aliases in the `Location` view:
+
+<center>
+<img src="/img/kutt-domain-aliases.png" class="shadow">
+</center>
+
+
diff --git a/files/docs/apps/lamp.md b/files/docs/apps/lamp.md
new file mode 100644
index 0000000..3e40269
--- /dev/null
+++ b/files/docs/apps/lamp.md
@@ -0,0 +1,431 @@
+# <img src="/img/lamp-logo.png" width="25px"> Lamp App
+
+## About
+
+Running LAMP apps on the Cloudron is no different than what is available on
+many hosting providers. You can upload your PHP code using SFTP or the
+[File Manager](/apps#file-manager) and then modify
+the `.htaccess` and `php.ini` files as required. Most commonly used
+[PHP extensions](#php-extensions) are pre-installed and you don't have to worry
+about keeping them up-to-date.
+
+The main advantage of using the Cloudron to host LAMP apps are:
+
+*   DNS configuration, Let's Encrypt (SSL) certificate installation and renewal are automated.
+*   Can use MySQL, redis and send email out of the box.
+*   Don't have to worry about app and server backups, restore and updates since the Cloudron takes care of it.
+*   Run multiple LAMP apps, isolated from one another, on same server easily.
+
+* Questions? Ask in the [Cloudron Forum - LAMP (PHP 7.2)](https://forum.cloudron.io/category/15/lamp)
+
+## Uploading LAMP app
+
+The LAMP app can be upload using the Web terminal or SFTP.
+
+### Using SFTP
+
+The app can be uploaded using an SFTP client like [FileZilla](https://filezilla-project.org/).
+
+You can find the SFTP login details when clicking on the `i` icon in the app grid.
+
+<center>
+<img src="/img/lamp-filezilla.png" class="shadow">
+</center>
+
+!!! note "SFTP Access"
+    SFTP access for non-admin users can be granted using the [access control UI](/apps/#restricting-app-access-to-specific-users).
+
+## PHP settings
+
+You can add custom [PHP settings](http://php.net/manual/en/ini.core.php) in `/app/data/public/.htaccess`
+using the [File Manager](/apps#file-manager). Note that settings with a [mode](http://php.net/manual/en/configuration.changes.modes.php) of `PHP_INI_SYSTEM` cannot be set in htaccess files.
+
+For example:
+
+```
+#example
+php_value post_max_size 600M
+php_value upload_max_filesize 600M
+php_value memory_limit 128M
+php_value max_execution_time 300
+php_value max_input_time 300
+php_value session.gc_maxlifetime 1200
+```
+
+## Apache settings
+
+You can add custom [Apache settings](http://httpd.apache.org/docs/current/howto/htaccess.html) in `/app/data/public/.htaccess`
+using the [File Manager](/apps#file-manager).
+
+For example:
+```
+ServerSignature Off
+```
+
+## Custom HTTP headers
+
+Custom HTTP headers can be set in `/app/data/public/.htaccess`. apache `mod_headers`
+is already enabled. See this [article](https://www.digitalocean.com/community/tutorials/how-to-configure-apache-content-caching-on-ubuntu-14-04#setting-expires-and-caching-headers-on-content) for more information.
+
+## PHP extensions
+
+The LAMP app already includes most of the popular PHP extensions including the following:
+
+* php-apcu
+* php-cli
+* php-curl
+* php-fpm
+* php-gd
+* php-gmp
+* php-imap
+* php-intl
+* php-json
+* php-mbstring
+* php-mcrypt
+* php-mysql
+* php-mysqlnd
+* php-pgsql
+* php-redis
+* php-sqlite
+* php-xml
+* php-xmlrpc
+* php-zip
+
+You can check the complete list of pre-installed extensions by visiting the default index.php
+of the app that prints out `phpInfo()`.
+
+## Installing custom PHP extensions
+
+The LAMP app supports installing custom PHP extensions. As an example, we will install [ionCube Loader](http://www.ioncube.com/),
+which is often required to install commercial PHP apps.
+
+!!! note "ionCube is already installed"
+    The LAMP app has built-in support for ionCube. The installation steps for ionCube here are just an example.
+
+### Step 1: Download extension
+
+Download and extract the `tar.gz` or `zip` Linux 64-bit ionCube packages to your PC/Mac from the
+[ionCube website](https://www.ioncube.com/loaders.php) or use the
+[direct link](http://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz).
+
+### Step 2: Upload using SFTP
+
+Upload the extracted directory to the SFTP root directory (`/app/data`) of the Cloudron app
+(i.e one level above `public/`).
+
+<center>
+<img src="/img/lamp-upload-ioncube.png" class="shadow">
+</center>
+
+### Step 3: Enable extension
+
+In the top level directory of the Cloudron app (in `/app/data`), you will find a `php.ini`.
+
+Add the following line to enable the extension (just add it before the many `;extension` lines):
+
+```
+zend_extension=/app/data/ioncube/ioncube_loader_lin_7.2.so
+```
+
+The LAMP app has thread safety disabled, so we choose the extension without the `ts` extension.
+
+### Step 4: Restart app
+
+Lastly, restart the app for the extension to be enabled.
+
+### Step 5: Verifying installation
+
+Visit the LAMP app's default page to verify that the extension is enabled.
+
+<center>
+<img src="/img/lamp-ioncube-installed.png" class="shadow">
+</center>
+
+## Configuring MySQL
+
+On the Cloudron, MySQL credentials are exposed as environment variables to the app.
+These variables can change over time. This approach makes it possible for Cloudron
+to transparently rotate the MySQL password periodically as a security measure and
+also makes app easily migratable across Cloudrons.
+
+The exposed environment variables are:
+
+```
+CLOUDRON_MYSQL_URL=            # the mysql url (only set when using a single database, see below)
+CLOUDRON_MYSQL_USERNAME=       # username
+CLOUDRON_MYSQL_PASSWORD=       # password
+CLOUDRON_MYSQL_HOST=           # server IP/hostname
+CLOUDRON_MYSQL_PORT=           # server port
+CLOUDRON_MYSQL_DATABASE=       # database name (only set when using a single database, see below)
+```
+
+If the PHP app has a `config.php` that requires the MySQL credentials to be set, they can set as below:
+```
+'db' => array (
+    'hostname' => getenv("CLOUDRON_MYSQL_HOST"),
+    'username' => getenv("CLOUDRON_MYSQL_USERNAME"),
+    'password' => getenv("CLOUDRON_MYSQL_PASSWORD"),
+    'database' => getenv("CLOUDRON_MYSQL_DATABASE")
+  ), // Database configuration
+```
+
+Some apps show a setup screen and will require the raw MySQL credentials. For such apps, the MySQL
+credentials can be obtained using the [File Manager](/apps#file-manager) inside the file `/app/data/credentials.txt`.
+
+<center>
+<img src="/img/lamp-webterminal-mysql.png" class="shadow">
+</center>
+
+**IMPORTANT:** Once the installation is completed, be sure to switch the config file of the app to use
+the environment variables using `getenv()` instead of the raw credentials. Otherwise, future updates
+might break the app.
+
+### Customizing MySQL
+
+On Cloudron, the MySQL server is shared across all apps. Each app gets non-root credentials to
+the database that helps isolate them from one another. This means one cannot configure mysql for
+one app specifically.
+
+However, many [MySQL variables](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html)
+like `sql_mode` can be set per session by modifying your code as follows:
+
+```
+// connect to mysql and call the first query
+mysql_query("SET SESSION SQL_MODE = 'TRADITIONAL'");
+mysql_query("SET SESSION UNIQUE_CHECKS = false");
+mysql_query("SET SESSION FOREIGN_KEY_CHECKS=0");
+```
+
+## phpMyAdmin
+
+[phpMyAdmin](https://www.phpmyadmin.net/) can be accessed at the
+`/phpmyadmin` path of the app. It uses basic auth through a htpasswd file
+and is pre-setup with an admin account and a generated password.
+The password can be found in the `phpmyadmin_login.txt` file,
+alongside with details how to managed more users.
+
+<br/>
+<center>
+<img src="/img/lamp-phpmyadmin.png" class="shadow" height="300px">
+</center>
+<br/>
+
+If access does not work anymore, simply remove the file `.phpmyadminauth` and restart the app.
+This will generate new phpMyAdmin credentials.
+
+## Email
+
+On Cloudron, Email credentials are exposed as environment variables to the app.
+
+The exposed environment variables are:
+```
+CLOUDRON_MAIL_SMTP_SERVER 	# SMTP server
+CLOUDRON_MAIL_SMTP_PORT 	    # SMTP server port
+CLOUDRON_MAIL_SMTPS_PORT 	# SMTPS server port. This is mostly for legacy apps
+CLOUDRON_MAIL_SMTP_USERNAME 	# Username
+CLOUDRON_MAIL_SMTP_PASSWORD 	# Password
+CLOUDRON_MAIL_FROM 	        # The MAIL FROM. If you want to change this, see [this](/apps/#mail-from-address)
+CLOUDRON_MAIL_DOMAIN 	    # The mail domain
+```
+
+You can use `getenv()` to get the values of the above environment variables in code. The raw values
+can be obtained using the [File Manager](/apps/#file-manager) inside the file `/app/data/credentials.txt`.
+
+!!! warning "The built-in PHP mail() function does not work"
+    It uses the local sendmail binary, which is **not configured** on Cloudron.
+
+Use the following code instead, which has the same arguments and will pickup the correct environment variables:
+
+```php
+function cloudronmail($to, $subject, $body, $headers)
+{
+    $smtp = stream_socket_client('tcp://' . getenv('CLOUDRON_MAIL_SMTP_SERVER') . ':' . getenv('CLOUDRON_MAIL_SMTP_PORT'), $eno, $estr, 30);
+
+    $B = 8192;
+    $c = "\r\n";
+    $s = getenv('CLOUDRON_MAIL_FROM');
+
+    fwrite($smtp, 'helo ' . getenv('HOSTNAME') . $c);
+        $junk = fgets($smtp, $B);
+
+    // Envelope
+    fwrite($smtp, 'mail from: ' . $s . $c);
+        $junk = fgets($smtp, $B);
+    fwrite($smtp, 'rcpt to: ' . $to . $c);
+        $junk = fgets($smtp, $B);
+    fwrite($smtp, 'data' . $c);
+
+        $junk = fgets($smtp, $B);
+
+    // Header
+    fwrite($smtp, 'To: ' . $to . $c);
+    if(strlen($subject)) fwrite($smtp, 'Subject: ' . $subject . $c);
+    if(strlen($headers)) fwrite($smtp, $headers); // Must be \r\n (delimited)
+    fwrite($smtp, $headers . $c);
+
+    // Body
+    if(strlen($body)) fwrite($smtp, $body . $c);
+    fwrite($smtp, $c . '.' . $c);
+        $junk = fgets($smtp, $B);
+
+    // Close
+    fwrite($smtp, 'quit' . $c);
+        $junk = fgets($smtp, $B);
+    fclose($smtp);
+}
+```
+
+## Redis
+
+On Cloudron, Redis credentials are exposed as environment variables to the app.
+
+The exposed environment variables are:
+```
+CLOUDRON_REDIS_URL 	        # redis URL of the form redis://username:password@host:port
+CLOUDRON_REDIS_HOST 	        # redis hostname
+CLOUDRON_REDIS_PORT 	6379    # redis port
+CLOUDRON_REDIS_PASSWORD      # redis password
+```
+
+You can use `getenv()` to get the values of the above environment variables in code. The raw values
+can be obtained using the [File Manager](/apps#file-manager) inside the file `/app/data/credentials.txt`
+
+## Custom Startup Script
+
+A custom startup script can be placed at `/app/data/run.sh`. For example,
+
+```
+#!/bin/bash
+
+echo "This script is called before the app starts"
+
+# create symlinks
+rm -rf /app/data/var/cache
+mkdir -p /run/cache
+ln -sf /run/cache /app/data/var/cache
+```
+
+## Cron support
+
+For cron support, add a file named `/app/data/crontab` support.
+
+The file can be edited using the [File Manager](/apps#file-manager)
+or `FileZilla`.
+
+<br/>
+<center>
+<img src="/img/lamp-filezilla-crontab.png" class="shadow" height="300px">
+</center>
+<br/>
+
+The crontab contains a line like:
+
+```
+0 * * * * php /app/code/update.php --feeds
+```
+
+The app must be restarted after making any changes to the `crontab`
+file. You can do this by pressing the 'Restart' button in the web terminal.
+
+## Running composer, npm, bundler, ...
+
+`composer`, `npm` and other common tools are installed in from the Cloudron base app image. To run these tools, first switch to the `www-data`
+user (most of them should not be run as root).
+
+```
+su - www-data
+cd public           # this is where PHP code resides
+composer require drush/drush
+
+npm install
+```
+
+!!! note "Memory limit"
+    The LAMP app runs with 256MB ram by default which is not enough for Composer and possibly others. If you see a `Killed` error
+    message after a run, increase the [memory limit](/apps/#increasing-the-memory-limit-of-an-app)
+    of the app to 1GB.
+
+## Laravel
+
+To init a laravel app, you can use the [CLI tool](/custom-apps/cli/) to shell into the app
+and run composer commands. If you have an existing Laravel app, you can skip this step and simply SFTP the app.
+
+!!! note "Memory limit"
+    The LAMP app runs with 256MB ram by default which is not enough for Composer. We recommend increasing the
+    [memory limit](/apps/#increasing-the-memory-limit-of-an-app)
+    of the app to 1GB.
+
+Switch to the `www-user` because the web server runs as that user.
+
+```
+root@869b2f2e-dccc-4e06-a22a-8aa0e9265c00:/app/data# su - www-data
+www-data@869b2f2e-dccc-4e06-a22a-8aa0e9265c00:~$
+```
+
+We can now create a Laravel app, following the [Larabel Quickstart](https://laravel.com/docs/4.2/quick):
+
+```
+www-data@869b2f2e-dccc-4e06-a22a-8aa0e9265c00:~$ composer create-project laravel/laravel my-project
+Installing laravel/laravel (v6.4.0)
+  - Installing laravel/laravel (v6.4.0): Loading from cache
+Created project in my-project
+```
+
+The LAMP app has `public` as the document root. Let's move the project into the public directory:
+
+```
+www-data@869b2f2e-dccc-4e06-a22a-8aa0e9265c00:~$ cp -r my-project/. public
+www-data@869b2f2e-dccc-4e06-a22a-8aa0e9265c00:~$ rm -rf my-project
+```
+
+Next, adjust the `/app/data/public/.htaccess` to serve lavarel's public directory:
+
+```
+RewriteEngine On
+RewriteCond %{REQUEST_URI} !^/public/
+RewriteRule ^(.*)$ /public/$1 [L,QSA]
+```
+
+That's it! Your app should load on the browser now.
+
+## Reverse proxy setup
+
+If you want to run for example a custom WordPress within this app, please note that the code will run behind a nginx proxy.
+Apps like WordPress require some code in `wp-config.php` to handle such a setup:
+
+```
+/*
+ http://cmanios.wordpress.com/2014/04/12/nginx-https-reverse-proxy-to-wordpress-with-apache-http-and-different-port/
+ http://wordpress.org/support/topic/compatibility-with-wordpress-behind-a-reverse-proxy
+ https://wordpress.org/support/topic/wp_home-and-wp_siteurl
+ */
+// If WordPress is behind reverse proxy which proxies https to http
+if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
+    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
+
+    if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
+        $_SERVER['HTTPS']='on';
+}
+```
+
+## Health check
+
+The LAMP app expects a 2xx response from the '/' path. If your app is completely protected,
+then the healthcheck logic will mark your app as `not responding` instead of `running`.
+
+You can work around this by adding the following in `/app/data/public/.htaccess`:
+```
+RewriteEngine On
+RewriteCond %{HTTP_USER_AGENT} CloudronHealth
+RewriteRule ^ - [R=200]
+```
+
+Alternately, add something like below in the app's config.php or index.php:
+
+```
+if ($_SERVER["REMOTE_ADDR"] == '172.18.0.1') {
+    echo "Cloudron healthcheck reponse";
+    exit;
+}
+```
+
diff --git a/files/docs/apps/limesurvey.md b/files/docs/apps/limesurvey.md
new file mode 100644
index 0000000..0fd3f61
--- /dev/null
+++ b/files/docs/apps/limesurvey.md
@@ -0,0 +1,22 @@
+# <img src="/img/limesurvey-logo.png" width="25px"> LimeSurvey App
+
+## About
+
+LimeSurvey is the most versatile online survey tool for newcomers and professionals. 
+
+* Questions? Ask in the [Cloudron Forum - LimeSurvey](https://forum.cloudron.io/category/71/limesurvey)
+* [LimeSurvey Website](https://www.limesurvey.org)
+* [LimeSurvey forum](https://forums.limesurvey.org/)
+
+## Command Line Tool
+
+The CLI tool can run using the [Web Terminal](/apps#web-terminal) as follows:
+
+```
+sudo -E -u www-data php /app/code/application/commands/console.php
+```
+
+## Templates
+
+Questionnaire templates can be downloaded from the LimeSurvey site [here](https://account.limesurvey.org/downloads/category/19-templates).
+
diff --git a/files/docs/apps/lychee.md b/files/docs/apps/lychee.md
new file mode 100644
index 0000000..233b671
--- /dev/null
+++ b/files/docs/apps/lychee.md
@@ -0,0 +1,25 @@
+# <img src="/img/lychee-logo.png" width="25px"> Lychee App
+
+## About
+
+Lychee is a free photo-management tool, which runs on your server or web-space
+
+* Questions? Ask in the [Cloudron Forum - Lychee](https://forum.cloudron.io/category/34/lychee)
+* [Lychee Website](https://lychee.electerious.com/)
+
+## User management
+
+While lychee has a UI to change the password, there is no UI to reset the password.
+If you forget the password, reset the password of the admin user, use the [Web terminal](/apps#web-terminal).
+
+```
+# sudo -E -u www-data php artisan lychee:reset_admin
+```
+
+After running the above command, just logout from Lychee and it will ask for creating the admin user again.
+Note that existing data is not lost when resetting admin credentials.
+
+## Using an existing folder structure
+
+Lychee has it's own folder-structure and database. You have to re-upload or re-import all your photos to use them.
+
diff --git a/files/docs/apps/mailtrain.md b/files/docs/apps/mailtrain.md
new file mode 100644
index 0000000..e70959d
--- /dev/null
+++ b/files/docs/apps/mailtrain.md
@@ -0,0 +1,44 @@
+# <img src="/img/mailtrain-logo.png" width="25px"> Mailtrain App
+
+## About
+
+Mailtrain is a self hosted newsletter app.
+
+* Questions? Ask in the [Cloudron Forum - Mailtrain](https://forum.cloudron.io/category/81/mailtrain)
+* [Mailtrain Website](https://mailtrain.org/)
+* [Mailtrain issue tracker](https://github.com/Mailtrain-org/mailtrain/issues)
+
+## VERP handling
+
+VERP is a feature where bounces are sent back to _special_ addresses.
+Mailtrain [supports VERP](https://github.com/Mailtrain-org/mailtrain#5-set-up-verp)
+and can be configured to process these bounces and automatically unsubscribe
+addresses that are bouncing.
+
+On the Cloudron, VERP handling is disabled because Cloudron's mail server
+does not support it. We plan to add this feature in a future release. Rest
+assured, Mailtrain can be used without any issue when VERP is not setup.
+
+For now, bounces are sent to the Email "reply-to" address in the campaign
+and have to be processesed manually.
+
+## Changing Email "from" Address
+
+Cloudron's email server does not allow apps to send emails with arbitrary
+FROM addresses. This is a simple security measure that prevents apps from
+unintentionally sending out emails that they are not supposed to send.
+
+Cloudron assigns `location.app@domain` address by default to apps.
+To change this email address, follow the instructions [here](email/#changing-the-from-address-of-an-app).
+
+## External mail server
+
+To revert from an external email server setup to the Cloudron setup,
+set the SMTP Hostname to `localhost` and then restart the app.
+This will inject the Cloudrons SMTP credentials automatically.
+
+## Customizations
+ 
+Additional settings can be added to `/app/data/production.toml` using
+the [File manager](/apps#file-manager).
+
diff --git a/files/docs/apps/mastodon.md b/files/docs/apps/mastodon.md
new file mode 100644
index 0000000..06892f3
--- /dev/null
+++ b/files/docs/apps/mastodon.md
@@ -0,0 +1,83 @@
+# <img src="/img/mastodon-logo.png" width="25px"> Mastodon App
+
+## About
+
+Mastodon is an open source decentralized social network - by the people for the people. Join the federation and take back control of your social media!
+
+* Questions? Ask in the [Cloudron Forum - Mastodon](https://forum.cloudron.io/category/41/mastodon)
+* [Mastodon Website](https://joinmastodon.org/)
+* [Mastodon issue tracker](https://github.com/tootsuite/mastodon/issues/)
+
+## Admin
+
+To make a user an administrator, use the [Web Terminal](/apps/#web-terminal)
+and run the following command:
+
+```
+    bin/tootctl accounts modify <username> --role admin
+```
+
+## Adding users
+
+When used with Cloudron authentication, simply add new users to the Cloudron dashboard.
+
+Without Cloudron authentication, new users can be added using the CLI:
+
+```
+    bin/tootctl accounts create testusername --email=test@cloudron.io
+```
+
+## Registration
+
+Registration is closed by default. To enable, login to Mastodon as an admin and change the "Registration mode"
+under `Administration` -> `Site Settings`.
+
+## Federation
+
+Cloudron will setup Mastodon accounts to be of the form `username@social.example.org` when you install
+Mastodon at `social.example.org`. This domain is called the `LOCAL_DOMAIN` in Mastodon terminology.
+
+Changing the `LOCAL_DOMAIN` will let you have handles as `username@example.org` even when installed at `social.example.org`
+Changing the `LOCAL_DOMAIN` is not recommended since it is complicated and in most cases unnecessary.
+This is because Mastodon account names are not intended to be remembered like usernames (it's not like email where
+you can start following another account). Instead, users usually visit a website and click the 'Follow' button.
+
+If you decide to not change the `LOCAL_DOMAIN`, no further configuration is required and your Mastodon instance
+is already set up for federation.
+
+### Changing LOCAL_DOMAIN
+
+You can change the account domain name by using the [File Manager](/apps/#file-manager)
+and changing `LOCAL_DOMAIN` in `/app/data/env.production`. After that, you have to configure `LOCAL_DOMAIN`'s
+web server to serve up `.well-known/host-meta` query.
+
+If `LOCAL_DOMAIN` is an app on Cloudron, you can use Cloudron's Well Known URI
+support. Go to the `Domains` view and set the Mastodon domain in the `Advanced` settings:
+
+<center>
+<img src="/img/mastodon-wellknown.png" class="shadow">
+</center>
+
+If the `LOCAL_DOMAIN` is **NOT** hosted on Cloudron, you must figure out a suitable way to serve up the well-known documents.
+Here are some hints:
+
+* For WordPress, you can setup a redirect using [Redirection plugin](https://wordpress.org/plugins/redirection/)
+* For Ghost,you can add a [redirects.json](https://ghost.org/tutorials/implementing-redirects/)
+* For Surfer, simply upload the XML above into `.well-known/host-meta`.
+* For anything else, setup nginx config as follows:
+
+```
+location = /.well-known/host-meta {
+       return 301 https://social.example.org$request_uri;
+}
+```
+
+## Following users
+
+To follow external users, visit their mastodon account and click on 'Follow'. This will popup a window asking your
+mastodon identity (which will be `username@LOCAL_DOMAIN`).
+
+If you have an existing account on another server, you can bring those connections with you to your own server.
+For this, go to Settings -> Data Export and download your following list as a CSV file, and finally
+on your own server, you go to Settings -> Import and upload that file.
+
diff --git a/files/docs/apps/matomo.md b/files/docs/apps/matomo.md
new file mode 100644
index 0000000..a038c45
--- /dev/null
+++ b/files/docs/apps/matomo.md
@@ -0,0 +1,49 @@
+# <img src="/img/piwik-logo.png" width="25px"> Matomo App
+
+## About
+
+Matomo is Google Analytics alternative that protects your data and your customers' privacy
+
+* Questions? Ask in the [Cloudron Forum - Matomo](https://forum.cloudron.io/category/87/matomo)
+* [Matomo Website](https://matomo.org/)
+* [Matomo forum](https://forum.matomo.org/)
+* [Matomo issue tracker](https://github.com/matomo-org/matomo/issues/)
+
+## Installing plugins
+
+Matomo plugins can be installed from the Marketplace view. Only the Matomo super-user
+can install plugins (Matomo admins cannot install plugins).
+
+Please be aware that there is a bug in Matomo that you [cannot install plugins when LDAP authentication is enabled](https://github.com/matomo-org/matomo/issues/14770).
+
+To workaround this issue:
+
+* Deactivate the LDAP plugin. `Plugins` -> `LoginLdap` -> `Deactivate`.
+
+* Install required plugins
+
+* Re-enable the LDAP plugin
+
+## UI Errors
+
+The matomo UI shows many [intermittent error messages](https://github.com/matomo-org/matomo/issues/10578)
+on Firefox. We recommend using an alternate browser.
+
+## Debugging the tracker
+
+To [debug the tracker](https://developer.matomo.org/api-reference/tracking-api#debugging-the-tracker), add the following to `config.ini.php`
+using the [file manager](/apps/#file-manager):
+
+```
+
+[Tracker]
+debug = 1
+debug_on_demand = 1
+```
+
+You can then debug the request using the following curl request (be sure to fix up the idsite):
+
+```
+curl -X POST 'https://matomo.example.com/matomo.php?idsite=1&rec=1&bots=1&debug=1
+```
+
diff --git a/files/docs/apps/mattermost.md b/files/docs/apps/mattermost.md
new file mode 100644
index 0000000..4b6be5d
--- /dev/null
+++ b/files/docs/apps/mattermost.md
@@ -0,0 +1,48 @@
+# <img src="/img/mattermost-logo.png" width="25px"> Mattermost App
+
+## About
+
+Mattermost is an open source, self-hosted Slack-alternative.
+
+* Questions? Ask in the [Cloudron Forum - Mattermost](https://forum.cloudron.io/category/26/mattermost)
+* [Mattermost Website](https://mattermost.org/)
+* [Mattermost forum](https://forum.mattermost.org/)
+* [Mattermost docs](https://docs.mattermost.com/index.html)
+* [Mattermost issue tracker](https://github.com/mattermost/mattermost-server/issues)
+
+## Config
+
+The config file is located at `/app/data/config.json` and can be edited using the [File manager](/apps/#file-manager).
+Be sure to restart the app after making changes to the config file.
+
+## Command Line Tool
+
+The [Mattermost CLI tool](https://docs.mattermost.com/administration/command-line-tools.html) can be used
+to administer user and team management tasks.
+
+To use the CLI, open the [Web Terminal](/apps#web-terminal) and run the following command:
+
+```
+sudo -u cloudron /app/code/bin/mattermost --config=/app/data/config.json help
+```
+
+## Migration
+
+In you want to migrate your existing non-Cloudron mattermost installation to Cloudron, do
+the following:
+
+* [Export data](https://docs.mattermost.com/administration/bulk-export.html#bulk-export-data) from the old
+  installation as follow:
+
+    ```
+        sudo ./mattermost export bulk file.json --all-teams
+    ```
+
+* Install mattermost on Cloudron. Then use the [Web Terminal](/apps#web-terminal) to first upload
+  the `file.json` above to the `/tmp` directory using the Upload button in the top of the Web terminal. Then,
+  import it using the following command:
+
+    ```
+      sudo -u cloudron /app/code/bin/mattermost --config=/app/data/config.json import bulk --apply /tmp/file.json
+    ```
+
diff --git a/files/docs/apps/mautic.md b/files/docs/apps/mautic.md
new file mode 100644
index 0000000..94cbbac
--- /dev/null
+++ b/files/docs/apps/mautic.md
@@ -0,0 +1,35 @@
+# <img src="/img/mautic-logo.png" width="25px"> Mautic App
+
+## About
+
+Mautic a free and opensource marketing automation tool.
+
+* Questions? Ask in the [Cloudron Forum - Mautic](https://forum.cloudron.io/category/46/mautic)
+* [Mautic Website](https://www.mautic.org/)
+* [Mautic forum](https://forum.mautic.org/)
+* [Mautic issue tracker](https://github.com/mautic/mautic/issues)
+
+## System cron jobs
+
+Mautic often requires cron jobs to be triggered manually. For this, open the [Web terminal](/apps/#web-terminal)
+and run the job manually like so:
+
+```
+sudo -E -u www-data php /app/code/bin/console mautic:segments:update
+```
+
+You can look into `/app/data/crontab.system` to look into the various pre-configured cron jobs.
+
+## Custom cron jobs
+
+For cron support, edit the file `/app/data/crontab.user` using the the [File manager](/apps/#file-manager).
+
+The crontab contains a line like:
+
+```
+0,15,30,45 * * * *  sudo -E -u www-data php /app/code/app/console mautic:integration:fetchleads --integration=Hubspot > /proc/$(cat /var/run/crond.pid)/fd/1 2>&1
+```
+
+The app must be restarted after making any changes to the `crontab` file.
+
+
diff --git a/files/docs/apps/mediawiki.md b/files/docs/apps/mediawiki.md
new file mode 100644
index 0000000..a010216
--- /dev/null
+++ b/files/docs/apps/mediawiki.md
@@ -0,0 +1,151 @@
+# <img src="/img/mediawiki-logo.png" width="25px"> MediaWiki App
+
+## About
+
+MediaWiki is a collaboration and documentation platform brought to you by a vibrant community.
+
+* Questions? Ask in the [Cloudron Forum - MediaWiki](https://forum.cloudron.io/category/80/mediawiki)
+* [MediaWiki Website](https://www.mediawiki.org)
+
+## Access Control
+
+### Default setup
+
+When using Cloudron SSO, the wiki is setup to be editable only by Cloudron users.
+Anonymous users can read all pages. Cloudron admins are added into the 'admins'
+mediawiki group. This group is given `bureaucrat` permission. Please note that
+when using this option, external registration [cannot be enabled](https://stackoverflow.com/questions/46403601/mediawiki-its-not-possible-to-create-user-account-using-ldap-authentication-ex).
+
+When not using Cloudron SSO, the wiki is setup to be editable by users with a
+registered wiki account.
+
+### Changing permissions
+
+Use the [File manager](/apps#file-manager) to edit the values in
+`/app/data/LocalSettings.php`.
+
+Here are some commonly requested settings:
+
+* To disable read access for anonymous users, add the following line:
+
+    $wgGroupPermissions['*']['read'] = false;
+
+* To allow write access to anonymous users, add the following line:
+
+    $wgGroupPermissions['*']['edit'] = true;
+
+* To disable email confirmation before new users are allowed to edit files:
+
+    $wgEmailConfirmToEdit = false;
+
+* To disallow account creation and remove the 'Create account' link:
+
+    $wgGroupPermissions['*']['createaccount'] = false;
+
+## Administrator operations
+
+MediaWiki has 3 built-in groups: bots, bureaucrats and sysop. sysops are administrators that have
+[special previliges](https://www.mediawiki.org/wiki/Help:Sysops_and_permissions):
+
+* Protecting and unprotecting pages, and editing protected pages
+* Deleting pages, and undeleting
+* Blocking a user or IP address, and unblocking them.
+
+Bureaucrats are sysops with the additional role of being able to **promote users to be sysops**.
+
+Sysops can perform a number of maintanence operations by vising `/wiki/Special:SpecialPages` of the wiki.
+
+### Setting a custom icon
+
+To set a custom icon, use the [File manager](/apps#file-manager) and upload a file named
+`/app/data/images/wiki.png`.
+
+## Extensions
+
+### Installing
+
+MediaWiki [extensions](https://www.mediawiki.org/wiki/Manual:Extensions) can be installed
+as follows:
+
+* Use the [File manager](/apps#file-manager) to upload the tarball and extract the package under `/app/data/extensions`.
+* Change the ownership of the newly uploaded directory to `www-data`
+* Load the skin in `/app/data/LocalSettings.php` by adding this line:
+
+```
+        wfLoadExtension( '<extension-name>' );
+```
+* Additional extension settings may be set in `/app/data/LocalSettings.php`
+
+### Suppressing skins
+
+To [suppress](https://www.mediawiki.org/wiki/Manual:Skin_configuration) one or more skins add the following line
+to `/app/data/LocalSettings.php`:
+
+```
+    $wgSkipSkins = array( "cologneblue", "monobook" );
+```
+
+## Skins
+
+### Installing
+
+MediaWiki [skins](https://www.mediawiki.org/wiki/Manual:Gallery_of_user_styles) can be installed
+as follows:
+
+* Use the [File manager](/apps#file-manager) to upload the tarball and extract the package under `/app/data/skins`.
+* Change the ownership of the newly uploaded directory to `www-data`
+* Load the skin in `/app/data/LocalSettings.php` by adding this line:
+
+```
+        wfLoadSkin( '<skin-name>' );
+```
+
+* The default skin for new users can be changed by adding this line to `/app/data/LocalSettings.php`:
+
+```
+        $wgDefaultSkin = '<skin-name>';
+```
+
+### Suppressing skins
+
+To [suppress](https://www.mediawiki.org/wiki/Manual:Skin_configuration) one or more skins add the following line
+to `/app/data/LocalSettings.php`:
+
+```
+    $wgSkipSkins = array( "cologneblue", "monobook" );
+```
+
+## Exporting a Wiki
+
+To export in XML format, use the [dumpBackup](https://www.mediawiki.org/wiki/Manual:DumpBackup.php) script as part of MediaWiki
+installation. Open a [Web terminal](/apps#web-terminal) and run the following
+commands:
+
+```
+# cd /app/code/maintenance
+# php dumpBackup.php --full > /tmp/dump.xml
+```
+
+You can download the dump using the download button at the top of the terminal and entering `/tmp/dump.xml`.
+
+## Importing a Wiki
+
+To import in XML format, use the [importDump](https://www.mediawiki.org/wiki/Manual:ImportDump.php) script as part of MediaWiki
+installation.
+
+Open a [Web terminal](/apps#web-terminal):
+
+* Upload the XML using the Upload button
+* Run the following commands
+
+```
+# cd /app/code/maintenance
+# php importDump.php < /tmp/dump.xml
+You might want to run rebuildrecentchanges.php to regenerate RecentChanges,
+and initSiteStats.php to update page and revision counts
+# php rebuildrecentchanges.php
+# php initSiteStats.php
+```
+
+When importing a wiki, the Main Page might still appear without the correct content. You can fix this by going to the Main Page's History and undoing the latest change. Please note that the administrator account needs a valid email for this to work (preferences -> confirm email address).
+
diff --git a/files/docs/apps/meemo.md b/files/docs/apps/meemo.md
new file mode 100644
index 0000000..8a4d65c
--- /dev/null
+++ b/files/docs/apps/meemo.md
@@ -0,0 +1,14 @@
+# <img src="/img/meemo-logo.png" width="25px"> Meemo App
+
+## About
+
+Meemo simplifies your life by capturing what's on your mind. From short lists, ideas, links, inspiration, to lengthy research, pictures and memories. 
+
+* Questions? Ask in the [Cloudron Forum - Meemo](https://forum.cloudron.io/category/35/meemo)
+* [Meemo Website](https://meemo.minimal-space.de/)
+
+## Chrome extension
+
+The [Meemo chrome extension](https://chrome.google.com/webstore/detail/meemo/lhkjapedcimeeiildlmebipnekekjmod)
+allows to add the current page with notes into Meemo.
+
diff --git a/files/docs/apps/metabase.md b/files/docs/apps/metabase.md
new file mode 100644
index 0000000..c299c45
--- /dev/null
+++ b/files/docs/apps/metabase.md
@@ -0,0 +1,11 @@
+# <img src="/img/metabase-logo.png" width="25px"> Metabase App
+
+## About
+
+Metabase is the simplest, fastest way to get business intelligence and analytics to everyone in your company.
+
+* Questions? Ask in the [Cloudron Forum - Metabase](https://forum.cloudron.io/category/86/metabase)
+* [Metabase Website](https://www.metabase.com)
+* [Metabase forum](https://discourse.metabase.com/)
+* [Metabase issue tracker](https://github.com/metabase/metabase/issues)
+
diff --git a/files/docs/apps/minecraft.md b/files/docs/apps/minecraft.md
new file mode 100644
index 0000000..84e1592
--- /dev/null
+++ b/files/docs/apps/minecraft.md
@@ -0,0 +1,29 @@
+# <img src="/img/minecraft-logo.png" width="25px"> Minecraft App
+
+## About
+
+This app sets up a multiplayer minecraft server.
+
+* Questions? Ask in the [Cloudron Forum - Minecraft Server](https://forum.cloudron.io/category/49/minecraft)
+* [Minecraft Server Website](https://minecraft.net/)
+
+# Supported editions
+
+There are 3 different app packages:
+
+* [Minecraft Java Edition Server](https://minecraft.gamepedia.com/Java_Edition)
+* [Minecraft Java Edition Forge server](https://forums.minecraftforge.net/)
+* [Bedrock/Pocket Edition](https://minecraft.gamepedia.com/Bedrock_Edition)
+
+# Java Edition
+
+## Common commands
+
+Please note that you have to run these commands when the user is logged into the app instance from the Cloudron dashboard.
+The username and password are your Cloudron credentials.
+
+* Whitelist a client - `/whitelist minecraft_username`
+* Blacklist a client - `/blacklist minecraft_username`
+* Become the server operator - `/op your_minecraft_username`
+* Reload server after chaning config files like **server.properties** - `/reload`
+
diff --git a/files/docs/apps/minio.md b/files/docs/apps/minio.md
new file mode 100644
index 0000000..4304953
--- /dev/null
+++ b/files/docs/apps/minio.md
@@ -0,0 +1,47 @@
+# <img src="/img/minio-logo.png" width="25px"> MinIO App
+
+## About
+
+Minio is a high performance S3 compatible Object Storage.
+
+* Questions? Ask in the [Cloudron Forum - Minio](https://forum.cloudron.io/category/69/minio)
+* [Minio Website](http://www.minio.io)
+* [Minio issue tracker](https://github.com/minio/minio/issues)
+
+## Admin credentials
+
+To change admin credentials, use the [Web terminal](/apps#web-terminal) to edit
+the `credentials` section in `/app/data/data/.minio.sys/config/config.json`. Note that MinIO does
+not save this JSON file with identation/formatting, making it hard to edit it. For this reason,
+we have written a small script that is part of the package to edit it easily.
+
+To set credentials:
+
+```
+# /app/code/minio-credentials set NEWACCESSKEY NEWSECRETKEY
+Credentials updated. Restart minio app for new credentials to take effect.
+```
+
+To get the current credentials (in case you forgot it):
+
+```
+# /app/code/minio-credentials get
+Access Key: NEWACCESSKEY
+Secret Key: NEWSECRETKEY
+```
+
+!!! note "Access Key Contraints"
+    Please see the [AWS Docs](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html) for
+    length and pattern restrictions of the access key and secret key. In short, make sure it matches the `[\w+=,.@-]+` regexp
+    and has atleast 8 characters
+
+## Cloudron Backup
+
+Cloudron supports [backing up to minio](/backups/#backing-up-to-minio).
+Backing up a Cloudron to a minio installed in another Cloudron will work fine. However, backing up a
+Cloudron to a minio installed in the very same Cloudron is not supported.
+
+## Custom configuration
+
+Custom config variables can be exported in `/app/data/env.sh`. This file is sourced automatically on startup.
+
diff --git a/files/docs/apps/monica.md b/files/docs/apps/monica.md
new file mode 100644
index 0000000..dc85d16
--- /dev/null
+++ b/files/docs/apps/monica.md
@@ -0,0 +1,42 @@
+# <img src="/img/monica-logo.png" width="25px"> Monica App
+
+## About
+
+Monica helps you organize the social interactions with your loved ones.
+
+* Questions? Ask in the [Cloudron Forum - MonicaHQ](https://forum.cloudron.io/category/24/monica)
+* [MonicaHQ Website](https://monicahq.com)
+* [MonicaHQ issue tracker](https://github.com/monicahq/monica/issues)
+
+## Multiuser
+
+By default, Monica is setup to be single user.
+
+To enable user registration, open the [File manager](/apps#file-manager) and add
+the following variable in `/app/data/env`:
+
+```
+APP_DISABLE_SIGNUP=false
+```
+
+Restart the app and the login page will show a sign-up link in the login page.
+
+## Mobile App
+
+To enable the mobile app, open the [Web terminal](/apps#web-terminal) and run
+the following command:
+
+```
+$ php artisan passport:client --password --name="MobileApp"
+Password grant client created successfully.
+Client ID: 8
+Client Secret: Q1gM1DXaMUt8rdvU3MhC4dnxGrV2EdjnBfyj9Sjm
+```
+
+Now edit the file `/app/data/env` and search/edit the values:
+
+```
+PASSPORT_PERSONAL_ACCESS_CLIENT_ID=
+PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET=
+```
+
diff --git a/files/docs/apps/moodle.md b/files/docs/apps/moodle.md
new file mode 100644
index 0000000..dd42d6f
--- /dev/null
+++ b/files/docs/apps/moodle.md
@@ -0,0 +1,24 @@
+# <img src="/img/moodle-logo.png" width="25px"> Moodle App
+
+## About
+
+Moodle is the world's most popular learning management system. Start creating your online learning site in minutes! 
+
+* Questions? Ask in the [Cloudron Forum - Moodle](https://forum.cloudron.io/category/102/moodle)
+* [Moodle Website](https://moodle.org/)
+* [Moodle forum](https://moodle.org/course/)
+
+## Updates
+
+Moodle is a complex application with a complicated upgrade procedure. It supports
+over 25 different [types of plugins](https://docs.moodle.org/dev/Plugin_types) each
+located in a different location in the source code. While we have automated the upgrade,
+do not use any more plugins than necessary to reduce update issues. On the same note,
+do not edit the source code of core moodle since it will be overwritten on an update.
+
+## Themes
+
+To install a theme, extract the new theme under `/app/data/moodle/theme` using the
+[File manager](/apps/#file-manager). Then, complete the installation by going to
+`Site Administration` in Moodle.
+
diff --git a/files/docs/apps/navidrome.md b/files/docs/apps/navidrome.md
new file mode 100644
index 0000000..2108e25
--- /dev/null
+++ b/files/docs/apps/navidrome.md
@@ -0,0 +1,34 @@
+# <img src="/img/navidrome-logo.png" width="25px"> Navidrome App
+
+## About
+
+Navidrome is an open source web-based music collection server and streamer.
+
+* Questions? Ask in the [Cloudron Forum - Navidrome](https://forum.cloudron.io/category/108/navidrome)
+* [Navidrome Website](https://www.navidrome.org/)
+* [Navidrome community](https://www.navidrome.org/community/)
+* [Navidrome issue tracker](https://github.com/deluan/navidrome/issues)
+
+## Music folder
+
+To change the music folder, edit `config.toml` using the [File Manager](/apps/#file-manager)
+
+```
+MusicFolder = '/media/MyMusic`
+```
+
+Be sure to restart the app after changing the music folder location.
+
+## Custom Configuration
+
+Custom configuration can be placed in `/app/data/config.toml`.
+See the [Navidrome docs](https://www.navidrome.org/docs/usage/configuration-options/) for
+all the options.
+
+## CLI
+
+To trigger a scan, open a [Web terminal](/apps#web-terminal) and run the following command:
+
+```
+gosu cloudron:cloudron /app/code/navidrome -c /app/data/config.toml scan -f
+```
diff --git a/files/docs/apps/nextcloud.md b/files/docs/apps/nextcloud.md
new file mode 100644
index 0000000..f63c101
--- /dev/null
+++ b/files/docs/apps/nextcloud.md
@@ -0,0 +1,260 @@
+# <img src="/img/nextcloud-logo.png" width="25px"> Nextcloud App
+
+## About
+
+Nextcloud is the self-hosted productivity platform that keeps you in control.
+
+* Questions? Ask in the [Cloudron Forum - Nextcloud](https://forum.cloudron.io/category/10/nextcloud)
+* [Nextcloud Website](https://www.nextcloud.com)
+* [Upstream Nextcloud forum](https://help.nextcloud.com/categories)
+* [Upstream Nextcloud issue tracker](https://github.com/nextcloud/server/issues)
+
+## Installing Nextcloud client on Ubuntu
+
+Nextcloud provides its own desktop client for Linux in form of AppImage which can
+be downloaded by issuing the following command:
+
+```
+sudo wget -nv https://download.nextcloud.com/desktop/releases/Linux/latest -O Nextcloud.AppImage
+```
+
+Alternatively, for Ubuntu, the latest version of the client can be installed from PPA following the instructions [here](https://launchpad.net/~nextcloud-devs/+archive/ubuntu/client):
+
+```
+sudo add-apt-repository ppa:nextcloud-devs/client
+sudo apt-get update
+sudo apt-get install nextcloud-client
+```
+
+For other platforms, please follow client installation instructions located at the [Nextcloud website](https://nextcloud.com/install/#install-clients).
+
+## Plugin warning
+
+We do not recommend installing apps in Nextcloud unless absolutely required. Maintaining such systems is a
+security hassle since you need to keep them up-to-date. Apps often break when Nextcloud is updated and you
+have to know how to fix them. Finally, Nextcloud apps are not run sandboxed. This means that a faulty plugin
+might compromise the whole app and also not make the app work at all. Nextcloud apps also write into the same
+database as the main application which might result in unintended data corruption.
+
+For the above reason, extensive use of Nextcloud plugins is highly discouraged since it will eventually break
+your install.
+
+## Running occ tool
+
+The `occ` tool can be used for Nextcloud [administrative tasks](https://docs.nextcloud.com/server/19/admin_manual/configuration_server/occ_command.html).
+
+The occ command can be run using the [Web terminal](/apps#web-terminal). For example, to list the users:
+
+```
+    sudo -u www-data php -f /app/code/occ user:list
+```
+
+## Resetting admin password
+
+To reset the admin password, run the following occ command using the [Web terminal](/apps#web-terminal):
+
+```
+    sudo -u www-data php -f /app/code/occ user:resetpassword admin
+```
+
+If you had deleted the admin user previously by mistake, you can create it again:
+
+```
+    sudo -u www-data php -f /app/code/occ user:add --display-name="Admin" -g admin admin
+```
+
+You can also make an existing user an admin:
+
+```
+    sudo -u www-data php -f /app/code/occ group:adduser admin <username> -n
+```
+
+## LDAP Sync
+
+Nextcloud will periodically sync users from LDAP. However, we have noticed that this fails at times. To trigger a manual sync,
+use the [Web terminal](/apps#web-terminal) and run the following command:
+
+
+```
+    sudo -u www-data php -f /app/code/occ ldap:check-user --update <username>
+```
+
+## Managing deleted files
+
+When you delete a file in Nextcloud, it is not [immediately deleted](https://docs.nextcloud.com/server/19/user_manual/files/deleted_file_management.html) permanently. Instead, it is moved into the trash bin.
+It is not permanently deleted until you manually delete it, or when the Deleted Files app deletes it to make room for
+new files.
+
+To configure, how items are permanently deleted, configure the [trashbin_retention_obligation](https://docs.nextcloud.com/server/19/admin_manual/configuration_server/config_sample_php_parameters.html#deleted-items-trash-bin) parameter.
+
+The parameter can be edited using the [File Manager](/apps#file-manager) and editing the file `config/config.php`.
+
+## Attaching external storage
+
+Many VPS providers like Digital Ocean, Linode allow attaching external block storage to the server. Nextcloud has a feature
+that allows mounting additional directories on the server as [external storage](https://docs.nextcloud.com/server/9/admin_manual/configuration_files/external_storage_configuration_gui.html).
+
+Mounting an existing server directory as 'external storage' on Nextcloud is currently not supported.
+
+If the intent is to simply increase the amount of storage available to Nextcloud (since you have run out of disk
+space in the default data partition), there are two options:
+
+* Configure Nextcloud to use an external object storage like Digital Ocean Spaces, AWS S3 etc
+  * [DigitalOcean Spaces Guide](https://www.digitalocean.com/community/questions/is-it-possible-to-mount-do-spaces-as-external-storage-in-nextcloud-as-i-mount-aws-s3-storage)
+
+* Configure Cloudron to store all of Nextcloud's data in the external block storage. To achieve this, follow the
+  [guide](/storage/#moving-a-single-apps-data-directory-to-another-location) for
+  moving a single app's data directory to another location.
+
+Moving Nextcloud's directory entirely has the advantage that the iOS/Android app's Instant Upload feature uses
+this new disk.
+
+## Rescan files
+
+Nextcloud will not pick up files if they are added directly in the data directory of the user on the server.
+To make it rescan, open a [Web terminal](/apps#web-terminal) and run the following command:
+
+```
+sudo -u www-data php -f /app/code/occ files:scan <username>
+```
+
+To rescan external storage, use the `--path` parameter.
+
+```
+sudo -u www-data php -f /app/code/occ files:scan <username> --path=/<username>/files/externaltest
+```
+
+## Fixing a broken install
+
+The [Nextcloud App Store](https://apps.nextcloud.com/) has a wide variety of apps that can be installed on
+top of Nextcloud. Nextcloud has no native sandboxing mechanism for plugins - if a plugin fails, it will bring
+down the whole installation. Plugins might also break an installation after a Nextcloud upgrade. For this reason,
+we encourage carefully reviewing apps before using them.
+
+To fix a broken installation, open a [Web terminal](/apps#web-terminal) and repair the app. Then run the following
+commands:
+
+```
+sudo -u www-data php -f /app/code/occ app:list            # this lists the apps
+sudo -u www-data php -f /app/code/occ app:disable <app>   # use this to disable the faulty app
+sudo -u www-data php /app/code/occ maintenance:mode --off
+```
+
+After running the commands, end the repair for the app to come up.
+
+## Collabora Online Document Editor
+
+Collabora Online is a powerful online office suite that supports all major document, spreadsheet and presentation
+file formats, which you can integrate in your own infrastructure. Key features are collaborative editing and
+excellent office file format support.
+
+See the [Collabora App docs](app/collabora) on how to setup Nextcloud with Collabora Office.
+
+<img src="/img/nextcloud-collabora-editor.png" class="shadow">
+
+## Previews
+
+By default, Nextcloud generates previews for text and images. Previews for other document types is
+[disabled for privacy reasons](https://docs.nextcloud.com/server/19/admin_manual/configuration_server/config_sample_php_parameters.html#previews). Note that generating previews also require more memory and CPU.
+
+To enable previews for PDF and OpenOffice documents, open a [File Manager](/apps#file-manager) and
+edit `config/config.php` and add the following setting:
+
+```
+'enable_previews' => true,
+'enabledPreviewProviders' =>
+   array (
+      0 => 'OC\\Preview\\TXT',
+      1 => 'OC\\Preview\\MarkDown',
+      2 => 'OC\\Preview\\OpenDocument',
+      3 => 'OC\\Preview\\PDF',
+      4 => 'OC\\Preview\\MSOffice2003',
+      5 => 'OC\\Preview\\MSOfficeDoc',
+      6 => 'OC\\Preview\\PDF',
+      7 => 'OC\\Preview\\Image',
+      8 => 'OC\\Preview\\Photoshop',
+      9 => 'OC\\Preview\\TIFF',
+     10 => 'OC\\Preview\\SVG',
+     11 => 'OC\\Preview\\Font',
+     12 => 'OC\\Preview\\MP3',
+     13 => 'OC\\Preview\\Movie',
+     14 => 'OC\\Preview\\MKV',
+     15 => 'OC\\Preview\\MP4',
+     16 => 'OC\\Preview\\AVI',
+   ),
+```
+
+## Removing NextCloud users
+
+To delete obsolete LDAP users and their data, see the [nextcloud docs](https://docs.nextcloud.com/server/stable/admin_manual/configuration_user/user_auth_ldap_cleanup.html?highlight=ldap).
+
+## Skeleton directory
+
+A skeleton directory provides the initial list of files for Nextcloud when a new user is created. By default,
+the skeleton directory is `/app/code/core/skeleton`. This directory is read only but can be changed to a custom
+directory.
+
+* Open the [File Manager](/apps#file-manager).
+    * Create a directory named `skeleton`.
+    * Set the owner of the directory to `www-data`. You can do this by clicking the icon to the right of the directory.
+    * Add files and directories to this new skeleton directory. Be sure to fix ownership of the files to `www-data`
+
+* Edit `config/config.php` to contain the following line:
+
+```
+  'skeletondirectory' => '/app/data/skeleton'
+```
+
+New users will receive the contents of `skeleton` directory on first log-in. The `skeletondirectory` property above
+can be set to empty string (`''`) to have no files added on first login.
+
+## Email
+
+NextCloud has apps like Mail, Rainloop to access email.
+
+!!! warning "Not recommended"
+    We do not recommend installing apps in Nextcloud unless absolutely required.
+    Maintaining such systems is a security hassle since you need to keep them up-to-date.
+    Apps often break when Nextcloud is updated and you have to know how to fix them.
+    Finally, Apps are not run sandboxed. This means that a faulty plugin might compromise
+    the whole app and also not make the app work at all.
+
+### Rainloop App
+
+That warning aside, it is possible to configure Rainloop to access mail as follows.
+
+1. Login to Rainloop admin. You can find the admin link by going to Nextcloud `Settings` -> `Administration` -> `Additional Settings`.
+
+2. Login as `admin`/`12345`
+
+3. Add your domain for email. In the example below, we use `my.cloudron.cf`.
+
+IMAP and SMTP configuration:
+
+<center>
+<img src="/img/nextcloud-rainloop-domain.png" class="shadow" width="500px">
+</center>
+
+Note that the SMTP encryption is turned off intentionally. This is safe because the communication
+is within the same server. (STARTTLS is disabled by Cloudron Email intentionally in the internal
+network for app compatibility when used with various languages and frameworks).
+
+Sieve configuration:
+
+<center>
+<img src="/img/nextcloud-rainloop-sieve.png" class="shadow" width="500px">
+</center>
+
+### Mail App
+
+The Mail icon will appear in the top bar of Nextcloud. You can configure your mailbox
+as below:
+
+<center>
+<img src="/img/nextcloud-mail-setup.png" class="shadow" width="300px">
+</center>
+
+Note that the SMTP encryption is turned off intentionally. This is safe because the communication
+is within the same server. (STARTTLS is disabled by Cloudron Email intentionally in the internal
+network for app compatibility when used with various languages and frameworks).
+
diff --git a/files/docs/apps/nodebb.md b/files/docs/apps/nodebb.md
new file mode 100644
index 0000000..df7bcee
--- /dev/null
+++ b/files/docs/apps/nodebb.md
@@ -0,0 +1,42 @@
+# <img src="/img/nodebb-logo.png" width="25px"> NodeBB App
+
+## About
+
+NodeBB is next generation forum software. It's powerful, mobile-ready and easy to use.
+
+* Questions? Ask in the [Cloudron Forum - NodeBB](https://forum.cloudron.io/category/18/nodebb)
+* [NodeBB Website](https://nodebb.org/)
+* [NodeBB forum](https://community.nodebb.org/)
+* [NodeBB issue tracker](https://github.com/NodeBB/NodeBB/issues)
+
+## Installing plugins
+
+NodeBB admin dashboard offers a UI to install plugins and themes in their dashboard.
+However, some plugins/themes may need to be installed by hand. To do so, use the
+[Web terminal](/apps#web-terminal):
+
+```
+cd /app/code
+/usr/local/bin/gosu cloudron:cloudron npm install nodebb-theme-timuu
+```
+
+After installation, restart the app and activate the plugin in the NodeBB
+dashboard.
+
+## Disabling plugins
+
+The list of plugins can be viewed as follows:
+
+```
+cd /app/code
+./nodebb list
+```
+
+Plugins can sometimes make NodeBB not start up. To fix this, first pause the app
+and then
+
+```
+cd /app/code
+./nodebb reset -p nodebb-plugin-pluginname
+```
+
diff --git a/files/docs/apps/onlyoffice.md b/files/docs/apps/onlyoffice.md
new file mode 100644
index 0000000..83307a6
--- /dev/null
+++ b/files/docs/apps/onlyoffice.md
@@ -0,0 +1,46 @@
+# <img src="/img/onlyoffice-logo.png" width="25px"> ONLYOFFICE App
+
+## About
+
+ONLYOFFICE has to be integrated with some the document store. On Cloudron there is currently Nextcloud available as a
+document store application, other [3rdparty solutions](https://www.onlyoffice.com/all-connectors.aspx) are also supported.
+
+* Questions? Ask in the [Cloudron Forum - ONLYOFFICE Docs](https://forum.cloudron.io/category/13/onlyoffice)
+* [ONLYOFFICE Website](https://www.onlyoffice.com/)
+* [ONLYOFFICE forum](https://dev.onlyoffice.org/)
+* [ONLYOFFICE Docs issue tracker](https://github.com/ONLYOFFICE/CommunityServer/issues)
+
+## Changing default app secret
+
+The default secret for the ONLYOFFICE app package in Cloudron is `changeme`. Please change that to some unique secret:
+
+* Open a [File Manager](/apps/#file-manager) into the app
+
+* Edit the file `/app/data/config/production-linux.json`
+
+  * Locate the section called `secret`.
+```
+              "secret": {
+                "inbox": {
+                  "string": "changeme"
+                },
+                "outbox": {
+                  "string": "changeme"
+                }
+```
+
+   * Be sure to change the **two secrets** above to the same unique password.
+
+* Restart the app
+
+## Setup Nextcloud connector
+
+!!! warning "Do not install the Document Server"
+    There are two ONLYOFFICE apps - [Community Document Server](https://apps.nextcloud.com/apps/documentserver_community) and
+    [ONLYOFFICE](https://apps.nextcloud.com/apps/onlyoffice). Be sure to install the latter.
+
+To integrate ONLYOFFICE into Nextcloud for office document editing and collaboration, install [ONLYOFFICE](https://apps.nextcloud.com/apps/onlyoffice)
+from the Nextcloud app library and configure the plugin as follows, adjusting the domain and secret:
+
+<img src="/img/onlyoffice-nextcloud-integration.png" class="shadow">
+
diff --git a/files/docs/apps/openproject.md b/files/docs/apps/openproject.md
new file mode 100644
index 0000000..7772165
--- /dev/null
+++ b/files/docs/apps/openproject.md
@@ -0,0 +1,27 @@
+# <img src="/img/openproject-logo.png" width="25px"> OpenProject App
+
+## About
+
+OpenProject is an efficient classic, agile or hybrid project management in a secure environment.
+
+* Questions? Ask in the [Cloudron Forum - OpenProject](https://forum.cloudron.io/category/31/openproject)
+* [OpenProject Website](https://www.openproject.org/)
+* [OpenProject forum](https://community.openproject.com/projects/openproject/boards/)
+* [OpenProject issue tracker](https://community.openproject.com/projects/openproject/boards/2905)
+
+## User management
+
+### Cloudron Directory
+
+Cloudron users can login to the OpenProject. The Cloudron *admin* status however is not carried over to the app, thus it comes with a pre-setup admin account,
+which requires a password change upon first login. Check the post-install notes when installing the app for admin account username and password.
+
+OpenProject supports various authentication methods in parallel, this means even when Cloudron Directory is used,
+non Cloudron users can still be invited to the app.
+
+### Without Cloudron Directory
+
+The app has a pre-setup admin account, which requires a password change upon first login.
+Check the post-install notes when installing the app for admin account username and password.
+Other users can be invited or added by this admin.
+
diff --git a/files/docs/apps/openvpn.md b/files/docs/apps/openvpn.md
new file mode 100644
index 0000000..873d8ce
--- /dev/null
+++ b/files/docs/apps/openvpn.md
@@ -0,0 +1,116 @@
+# <img src="/img/openvpn-logo.png" width="25px"> OpenVPN App
+
+## About
+
+OpenVPN provides flexible VPN solutions to secure your data communications, whether it's for
+Internet privacy, remote access for employees, securing IoT, or for networking Cloud data centers
+
+* Questions? Ask in the [Cloudron Forum - OpenVPN](https://forum.cloudron.io/category/20/openvpn)
+* [OpenVPN Website](https://openvpn.org/)
+* [Upstream OpenVPN forum](https://community.openvpn.net/openvpn)
+
+## Desktop and Mobile Clients
+
+The OpenVPN app has been tested with the following clients:
+
+* NetworkManager on Ubuntu
+* [Tunnelblick](https://www.tunnelblick.net/) on Mac OS X
+* [OpenVPN for Android](https://play.google.com/store/apps/details?id=de.blinkt.openvpn)
+
+## How to connect on Ubuntu 16.04
+
+* Install the Network Manager OpenVPN plugin
+```
+sudo apt-get install network-manager-openvpn-gnome
+```
+
+* Download the .ovpn embedded certs config file from the OpenVPN app
+
+<center>
+<img src="/img/openvpn-config.png" class="shadow">
+</center>
+
+* Open Network Manager, `VPN Settings` -> `Import from file...`
+
+## Admin Settings
+
+The admin panel can be used to customize some of the popular settings like
+the network address and client-to-client connectivity.
+
+To make a user an admin, edit the file `/app/data/config.ini` and add
+the username to the `admins` key. Note that you have to restart the app
+and re-login for the admin role to take effect.
+
+<center>
+<img src="/img/openvpn-settings.png" class="shadow">
+</center>
+
+## DNS Server
+
+This app has a built-in Dnsmasq DNS server (which is pushed to clients). This DNS server
+allows resolution of connected clients using `devicename.username`.
+
+You can configure this DNS server by editing `/app/data/dnsmasq.conf` using the (/apps#file-manager).
+For example, to make Dnsmasq forward DNS requests to an internal DNS server, use the following:
+
+```
+server=internal-server-ip
+```
+
+See [Dnsmasq docs](http://thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html) for all the available options.
+
+## Customizations
+
+You can customize various settings by editing `/app/data/openvpn.conf` using
+the  [File Manager](/apps#file-manager). Some popular options are
+discussed below:
+
+### Custom routes
+
+By default, clients are configured to route all traffic via the VPN. If you disable this, you would
+want to push custom routes for the network and hosts behind the VPN. For example, edit the file as below and
+restart the app.
+
+```
+# push "redirect-gateway def1 bypass-dhcp"
+push "route 178.128.183.220 255.255.255.255"
+push "route 178.128.74.0 255.255.255.0"
+```
+
+## Privacy
+
+The OpenVPN app provides a tunnel to channel all the traffic from your
+devices via the Cloudron. Websites and services that you visit will
+not see the IP address of your devices but they *will* see the IP
+address and possibly the RDNS hostname of your Cloudron.
+
+You can check what sort of information can be gathered from your
+Cloudron's IP address using [ipleak.net](https://ipleak.net).
+
+## Custom Client Configuration
+
+Custom Client Configuration allows the OpenVPN admin to assign a specific IP address to a client or push specific options 
+such as compression and DNS server to a client.
+
+To add custom settings:
+
+* Edit `/app/data/openvpn.conf` and add the following line:
+```
+client-config-dir /app/data/ccd
+```
+
+* Create the directory `/app/data/ccd`
+
+* You can create custom client configs in this directory by creating files with the name `[username]_[devicename]`. You can also
+  create a file named `DEFAULT` which will be used if no device specific file exists.
+
+* For example, to assign a static IP to a client, you can add the line `ifconfig-push 10.8.0.50 10.8.0.51` (requires IP pair)
+
+* Restart the app for changes to take effect.
+
+## Troubleshooting
+
+If you are unable to connect to the OpenVPN server, make sure that your VPS firewall
+allows the OpenVPN port (by default, this is 7494/TCP). For example, you might have
+to add this incoming port as part of EC2 security group.
+
diff --git a/files/docs/apps/osticket.md b/files/docs/apps/osticket.md
new file mode 100644
index 0000000..f85f187
--- /dev/null
+++ b/files/docs/apps/osticket.md
@@ -0,0 +1,54 @@
+# <img src="/img/osticket-logo.png" width="25px"> osTicket App
+
+## About
+
+osTicket is the world’s most popular customer support software.
+
+* Questions? Ask in the [Cloudron Forum - osTicket](https://forum.cloudron.io/category/89/osticket)
+* [osTicket Website](https://osticket.com/)
+* [osTicket forum](https://forum.osticket.com/)
+* [osTicket issue tracker](https://github.com/osTicket/osTicket/issues)
+
+## Admin Checklist
+
+* Do not remove the email address of `osTicket Alerts` under 'Email Addresses'. This mailbox is managed
+by Cloudron. However, you can change the email address from Cloudron dashboard's [Email section](/apps/#mail-from-address).
+
+* Change the administrator email under `Emails` -> `Email Settings and Options`. If you miss this,
+  osTicket will send alerts to this address and bounces get attached to tickets.
+
+## Emails
+
+osTicket can be configured to process emails from mailboxes hosted with or without Cloudron.
+
+When the mailbox is hosted in Cloudron, you can use the IMAP+SSL at port 993 for receiving Email:
+
+<center>
+<img src="/img/osticket-imap.png" class="shadow">
+</center>
+
+To send email, use port 587:
+
+<center>
+<img src="/img/osticket-smtp.png" class="shadow">
+</center>
+
+## User Management
+
+osTicket is integrated with Cloudron user management. However, agents must be manually
+added into osTicket before they can login. When adding an agent, choose LDAP as the
+authentication backend.
+
+<center>
+<img src="/img/osticket-add-agent.png" class="shadow">
+</center>
+
+## CLI
+
+osTicket comes with a CLI tool for various administrative tasks like managing users.
+Use the [Web Terminal](/apps#web-terminal) to run the following command:
+
+```
+    sudo -E -u www-data php /app/code/upload/manage.php
+```
+
diff --git a/files/docs/apps/owncloud.md b/files/docs/apps/owncloud.md
new file mode 100644
index 0000000..2dbba63
--- /dev/null
+++ b/files/docs/apps/owncloud.md
@@ -0,0 +1,109 @@
+# <img src="/img/owncloud-logo.png" width="25px"> ownCloud App
+
+## About
+
+ownCloud is a suite of client–server software for creating and using file hosting services.
+
+* Questions? Ask in the [Cloudron Forum - ownCloud](undefined)
+* [ownCloud Website](https://www.owncloud.org)
+
+## Installing ownCloud client on Ubuntu
+
+The ownCloud client on Ubuntu is [outdated](https://bugs.launchpad.net/ubuntu/+source/owncloud-client/+bug/1718308).
+The client will display an error:
+```
+Error downloading https://SERVERNAME/owncloud/remote.php/webdav/ - server replied: Forbidden (Unsupported client version.)".
+```
+
+To resolve the problem, install the ownCloud client by following the instructions [here](https://download.owncloud.com/repositories/desktop/download/):
+
+```
+sudo wget -nv https://download.owncloud.com/repositories/desktop/Ubuntu_16.04/Release.key -O Release.key
+sudo apt-key add - < Release.key
+sudo sh -c "echo 'deb http://download.owncloud.com/repositories/desktop/Ubuntu_16.04/ /' > /etc/apt/sources.list.d/owncloud.list"
+sudo apt-get update
+sudo apt-get install owncloud-client
+```
+
+!!! warning
+    As of this writing, the ownCloud website links to the opensuse website for installing the owncloud client.
+    The packages in the opensuse website do not work. See the [forum](https://central.owncloud.org/t/repository-bug-on-ubuntu-16-04/9546/7)
+    and [GitHub issue](https://github.com/owncloud/client/issues/6034) for more information.
+
+## Running occ tool
+
+The `occ` tool can be used for ownCloud [administrative tasks](https://doc.owncloud.org/server/9.0/admin_manual/configuration_server/occ_command.html#using-the-occ-command).
+
+The occ command can be run using the [Web terminal](/apps#web-terminal). For example, to list the users:
+
+```
+    sudo -u www-data php -f /app/code/occ app:list
+```
+
+## Managing deleted files
+
+When you delete a file in ownCloud, it is not [immediately deleted](https://doc.owncloud.org/server/9.0/user_manual/files/deleted_file_management.html) permanently. Instead, it is moved into the trash bin.
+It is not permanently deleted until you manually delete it, or when the Deleted Files app deletes it to make room for
+new files.
+
+To change permanent deletion policy configure the [trashbin_retention_obligation](https://doc.owncloud.com/server/9.1/admin_manual/configuration_server/config_sample_php_parameters.html?highlight=trashbin_retention_obligation#deleted-items-trash-bin) parameter.
+
+The parameter can be edited using the [Web terminal](/apps#web-terminal) and editing the file
+`/app/data/config/config.php`.
+
+## Max upload size
+
+The app is configured to allow maximum uploads of up to 5GB.
+
+## Attaching external storage
+
+Many VPS providers like Digital Ocean, Linode allow attaching external block storage to the server. ownCloud has a feature
+that allows mounting additional directories on the server as [external storage](https://doc.owncloud.org/server/9.0/admin_manual/configuration_files/external_storage_configuration_gui.html).
+
+Mounting an existing server directory as 'external storage' on ownCloud is currently not supported.
+
+If the intent is to simply increase the amount of storage available to ownCLoud (since you have run out of disk
+space in the default data partition), there are two options:
+
+* Configure ownCloud to use an external object storage like Digital Ocean Spaces, AWS S3 etc.
+
+* Configure Cloudron to store all of ownCloud's data in the external block storage. To achieve this, follow the
+  [guide](/storage/#moving-a-single-apps-data-directory-to-another-location) for
+  moving a single app's data directory to another location.
+
+Moving ownCloud's directory entirely has the advantage that the iOS/Android app's Instant Upload feature uses
+this new disk.
+
+## Rescan files
+
+ownCloud will not pick up files if they are added directly in the data directory of the user on the server.
+To make it rescan, open a [Web terminal](/apps#web-terminal) and run the following command:
+
+```
+sudo -u www-data php -f /app/code/occ files:scan <username>
+```
+
+To rescan external storage, use the `--path` parameter.
+
+```
+sudo -u www-data php -f /app/code/occ files:scan <username> --path=/<username>/files/externaltest
+```
+
+## Fixing a broken install
+
+The [ownCloud Marketplace](https://marketplace.owncloud.com/) has a wide variety of apps that can be installed on
+top of ownCloud. ownCloud has no native sandboxing mechanism for plugins - if a plugin fails, it will bring
+down the whole installation. Plugins might also break an installation after a ownCloud upgrade. For this reason,
+we encourage carefully reviewing apps before using them.
+
+To fix a broken installation, open a [Web terminal](/apps#web-terminal) and repair the app. Then run the following
+commands:
+
+```
+sudo -u www-data php -f /app/code/occ app:list            # this lists the apps
+sudo -u www-data php -f /app/code/occ app:disable <app>   # use this to disable the faulty app
+sudo -u www-data php /app/code/occ maintenance:mode --off
+```
+
+After running the commands, end the repair for the app to come up.
+
diff --git a/files/docs/apps/peertube.md b/files/docs/apps/peertube.md
new file mode 100644
index 0000000..87e39f1
--- /dev/null
+++ b/files/docs/apps/peertube.md
@@ -0,0 +1,34 @@
+# <img src="/img/peertube-logo.png" width="25px"> PeerTube App
+
+## About
+
+PeerTube is an activityPub-federated video streaming platform using P2P directly in your web browser.
+
+* Questions? Ask in the [Cloudron Forum - PeerTube](https://forum.cloudron.io/category/91/peertube)
+* [PeerTube Website](https://joinpeertube.org/)
+* [PeerTube issue tracker](https://github.com/Chocobozzz/PeerTube/issues)
+
+## Customization
+
+Use the [File manager](/apps#file-manager) to edit custom configuration
+under `/app/data/production.yaml`.
+
+## CLI
+
+The CLI can be accessed using the `peertube` command.
+
+### Uploading video
+
+```
+# peertube up --file /tmp/video.wmv --url https://peertube.cloudron.club --username root --password changeme --video-name "Sample video"
+Uploading Sample video video...
+Video Sample video uploaded.
+```
+
+## Importing video
+
+```
+# peertube import --url https://peertube.cloudron.club --username root --password changeme --target-url https://www.youtube.com/watch?v=xxx --tmpdir /tmp
+info: Will download and upload 1 videos.
+```
+
diff --git a/files/docs/apps/phabricator.md b/files/docs/apps/phabricator.md
new file mode 100644
index 0000000..3f98bb0
--- /dev/null
+++ b/files/docs/apps/phabricator.md
@@ -0,0 +1,37 @@
+# <img src="/img/phabricator-logo.png" width="25px"> Phabricator App
+
+## About
+
+Phabricator is a set of tools that help companies build better software, faster.
+
+* Questions? Ask in the [Cloudron Forum - Phabricator](https://forum.cloudron.io/category/42/phabricator)
+* [Phabricator Website](http://phabricator.org/)
+
+## Empower
+
+A registered user can be made an administrator by running the following command in
+the [Web Terminal](/apps#web-terminal):
+
+```
+# /app/code/phabricator/bin/user empower --user <username>
+```
+
+See the phabricator [docs](https://secure.phabricator.com/book/phabricator/article/unlocking/) for
+more information.
+
+## Admin recovery
+
+When not using Cloudron authentication, If you accidentally log yourself out before adding an Auth provider, you
+must use the CLI tool to recover it (or simply re-install phabricator). See [T8282](https://secure.phabricator.com/T8282) for more information.
+
+```
+# /app/code/phabricator/bin/auth recover <admin-username>
+```
+
+## Uploading large files
+
+This app is configured to accept files upto 512MB. Note that large files need to be
+dragged and dropped (instead of the file upload button).
+
+See [Q216](https://secure.phabricator.com/Q216)
+
diff --git a/files/docs/apps/php-server-monitor.md b/files/docs/apps/php-server-monitor.md
new file mode 100644
index 0000000..93e7086
--- /dev/null
+++ b/files/docs/apps/php-server-monitor.md
@@ -0,0 +1,27 @@
+# <img src="/img/phpservermonitor-logo.png" width="25px"> PHP Server Monitor App
+
+## About
+
+PHP Server Monitor is a script that checks whether your websites and servers are up and running.
+
+* Questions? Ask in the [Cloudron Forum - PHP Server Monitor](https://forum.cloudron.io/category/126/php-server-monitor)
+* [Website](http://www.phpservermonitor.org/)
+* [Issue tracker](https://github.com/phpservermon/phpservermon/issues)
+
+## Check interval
+
+The app is configured to check the status of online servers every 5 minutes and check the status of offline servers every minute.
+
+## Custom config
+
+Custom configuration can be added in `/app/data/config.php` using the [File manager](/apps/#file-manager).
+
+## Public page
+
+To setup a public page (accessed at `/public.php`):
+
+* Set `PSM_PUBLIC` to true in `/app/data/config.php`.
+* Create a user named `__PUBLIC__`. Set the Level to `Anonymous`.
+* Add servers to user '__PUBLIC__'.
+* Go to `/public.php`.
+
diff --git a/files/docs/apps/pixelfed.md b/files/docs/apps/pixelfed.md
new file mode 100644
index 0000000..d54a8b8
--- /dev/null
+++ b/files/docs/apps/pixelfed.md
@@ -0,0 +1,46 @@
+# <img src="/img/pixelfed-logo.png" width="25px"> Pixelfed App
+
+## About
+
+A free and ethical photo sharing platform, powered by ActivityPub federation.
+
+* Questions? Ask in the [Cloudron Forum - Pixelfed](https://forum.cloudron.io/category/90/pixelfed)
+* [Pixelfed Website](https://pixelfed.org/)
+* [Pixelfed docs](https://docs.pixelfed.org/)
+* [Pixelfed issue tracker](https://github.com/pixelfed/pixelfed/issues)
+
+## Admin
+
+To make a register user an admin, use the [Web terminal](/apps#web-terminal) and run
+the following command:
+
+```
+# sudo -u www-data php artisan user:admin username_here
+
+Found username: girish
+
+ Add admin privileges to this user? (yes/no) [no]:
+ > yes
+
+Successfully changed permissions!
+```
+
+Further administration commands like removing a user, removing unused media can be found in
+[Pixelfed docs](https://docs.pixelfed.org/running-pixelfed/administration.html#admin-user).
+
+## Federation
+
+To test if federation works, search for a handle like `girish@pixelfed.social`. You should then
+be able to follow that handle. Note that you can only see posts that are made _after_ you followed
+the handle. Existing posts will **not** appear in you stream.
+
+If following doesn't work:
+
+* Login as an admin user on your Pixelfed instance
+* Check `https://pixelfed.domain.com/horizon/failed` for job failures 
+
+## Customizations
+
+You can find the configuration file (env.production) under `/app/data`. Don`t forget to restart the app
+after making any changes to this file.
+
diff --git a/files/docs/apps/privatebin.md b/files/docs/apps/privatebin.md
new file mode 100644
index 0000000..b8208f7
--- /dev/null
+++ b/files/docs/apps/privatebin.md
@@ -0,0 +1,28 @@
+# <img src="/img/privatebin-logo.png" width="25px"> PrivateBin App
+
+## About
+
+PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted in the browser using 256 bits AES. 
+
+* Questions? Ask in the [Cloudron Forum - PrivateBin](https://forum.cloudron.io/category/54/privatebin)
+* [PrivateBin Website](https://privatebin.info/)
+* [PrivateBin issue tracker](https://github.com/PrivateBin/PrivateBin/issues)
+
+## Customizations
+ 
+Various PrivateBin settings can be configured by editing `/app/data/conf.php` using
+the [File manager](/apps#file-manager).
+
+## Custom template
+
+You can set a [custom template](https://github.com/PrivateBin/PrivateBin/wiki/Templates)
+as follows:
+
+* Create the template in `/app/data/custom_template/custom.php`. The name `custom.php` is
+  hardcoded in the package.
+
+* Change the template name in `/app/data/conf/conf.php` to be `custom`.
+
+* You can save additional js/css/img in `/app/data/custom_template/` and access them from the
+  php script as `js/custom/..`, `css/custom/...`, `img/custom/...`.
+
diff --git a/files/docs/apps/prometheus.md b/files/docs/apps/prometheus.md
new file mode 100644
index 0000000..d3f78cc
--- /dev/null
+++ b/files/docs/apps/prometheus.md
@@ -0,0 +1,4 @@
+# <img src="/img/prometheus-logo.png" width="25px"> Prometheus App
+
+Nothing here yet!
+
diff --git a/files/docs/apps/radicale.md b/files/docs/apps/radicale.md
new file mode 100644
index 0000000..4bcbb86
--- /dev/null
+++ b/files/docs/apps/radicale.md
@@ -0,0 +1,30 @@
+# <img src="/img/radicale-logo.png" width="25px"> Radicale App
+
+## About
+
+Radicale is a small but powerful CalDAV (calendars, to-do lists) and CardDAV (contacts) server.
+
+* Questions? Ask in the [Cloudron Forum - Radicale](https://forum.cloudron.io/category/76/radicale)
+* [Radicale Website](http://radicale.org/)
+* [Radicale issue tracker](https://github.com/Kozea/Radicale/issues)
+
+## Custom permissions (e.g. shared calendar)
+
+Per default, each user can only access their own calendar and contacts. If you
+want something more complicated you can change the permissions.
+
+You can change the permissions editing `/app/data/rights` using the [File Manager](/apps/#file-manager)
+in the app instance. The default content of that file is:
+
+    [owner-write]
+    user = .+
+    collection = %(login)s(/.*)?
+    permission = rw
+
+    [read]
+    user = .*
+    collection =
+    permission = r
+
+You can extend the file using the syntax described in [the radicale documentation](http://radicale.org/rights/).
+
diff --git a/files/docs/apps/rainloop.md b/files/docs/apps/rainloop.md
new file mode 100644
index 0000000..139098c
--- /dev/null
+++ b/files/docs/apps/rainloop.md
@@ -0,0 +1,83 @@
+# <img src="/img/rainloop-logo.png" width="25px"> Rainloop App
+
+## About
+
+Rainloop is a simple, modern & fast web-based email client.
+
+* Questions? Ask in the [Cloudron Forum - RainLoop](https://forum.cloudron.io/category/37/rainloop)
+* [RainLoop Website](http://www.rainloop.net)
+* [RainLoop docs](https://www.rainloop.net/docs/installation/)
+* [RainLoop issue tracker](https://github.com/RainLoop/rainloop-webmail/issues)
+
+## Default Setup
+
+Rainloop is pre-configured for use with Cloudron Email. The app automatically
+generates domain configuration for all the apps that have email enabled at
+_installation_ time. If you enable or disable email on one or more domains,
+simply reconfigure the app and it will re-generate the necessary configuration.
+
+## Multi-domain Setup
+
+There are two ways to use Rainloop when using Cloudron Email with multiple
+domains.
+
+* Users can login with their email and password to access their mailbox. If the
+  Cloudron has two domains, `example1.com` and `example2.com`, the user can login
+  using `user@example1.com` and `user@example2.com`. Aliases can be added as identities
+  under Rainloop settings.
+
+* Users can login using one of the email domains and add the other domains
+  using the `Add Account` dialog. For example, user can login as `user@example1.com`
+  and add `user@example2.com` in the `Add Account` dialog.
+
+    !!! note "Multiple accounts"
+        Rainloop tracks accounts based on the login email. This means
+        that in the example above, if the user logs in `user@example2.com`, the
+        `user@example1.com` id will not show up.
+
+## External domains
+
+To add one or more external domains, add them in Rainloop's [admin panel](#admin-panel).
+
+## Vacation Email
+
+An out of office / vacation mail message can be setup using Sieve filters.
+
+A vacation message can be set in `Settings` -> `Filters` -> `Add a filter`. Choose
+`Vacation message` action.
+
+<center>
+<img src="/img/email-vacation-message-rainloop.png" class="shadow" width="600px">
+</center>
+
+!!! note "At most once a day"
+    Vacation messages are sent at most once a day to the same sender. This setting cannot
+    be changed.
+
+## Forwarding all emails
+
+To forward all emails to an external mail, setup a Sieve filter in
+`Settings` -> `Filters` -> `Add a filter` -> `Forward to`
+
+<center>
+<img src="/img/forward-all-emails-rainloop.png" class="shadow" width="600px">
+</center>
+
+## Admin panel
+
+The admin panel is located at `/?admin` and is disabled by default.
+
+To enable it, open a [File manager](/apps#file-manager)
+and edit the file `/app/data/_data_/_default_/configs/application.ini`.
+Set the value of `allow_admin_panel` to `On`. The default admin credentials
+are:
+
+    Username: admin
+    Password: 12345
+
+
+Restart the app for the changes to take effect.
+
+!!! warning "Disable admin panel after use"
+    We highly recommend disabling the admin panel after use.
+
diff --git a/files/docs/apps/redash.md b/files/docs/apps/redash.md
new file mode 100644
index 0000000..98d92ea
--- /dev/null
+++ b/files/docs/apps/redash.md
@@ -0,0 +1,44 @@
+# <img src="/img/redash-logo.png" width="25px"> Redash App
+
+## About
+
+Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data.
+
+* Questions? Ask in the [Cloudron Forum - Redash](https://forum.cloudron.io/category/88/redash)
+* [Redash Website](https://redash.io/)
+* [Redash forum](https://redash.io/community/)
+* [Redash issue tracker](https://github.com/getredash/redash/issues)
+
+## SSH tunnel
+
+If your data source cannot be reached over the internet, you can setup
+a [SSH tunnel](https://discuss.redash.io/t/connect-to-mysql-postgres-over-ssh-tunnel/57).
+[stunnel](https://www.stunnel.org/index.html) is another way to setup
+a TCP tunnel.
+
+## Admin access
+
+The app is pre-setup with a admin account. To give admin access to other
+users, login as admin and add users to the `admin` group.
+
+Alternately, use the [Web terminal](/apps#web-terminal) and
+run the following command:
+
+```
+    bin/run ./manage.py users grant_admin <email>
+```
+
+## Login form
+
+By default, the app allows user's to login via `Cloudron LDAP` and via
+email. Once you have made one or more Cloudron user's as Redash admins,
+the email login can be disabled. For this, use the [File manager](/apps#file-manager)
+and add/edit a file `/app/data/env` and add the following line:
+
+    export REDASH_PASSWORD_LOGIN_ENABLED=false
+
+Restart the app for changes to take effect.
+
+If you want to login as admin again at some point, set the above value
+to `true`.
+
diff --git a/files/docs/apps/redmine.md b/files/docs/apps/redmine.md
new file mode 100644
index 0000000..16abce9
--- /dev/null
+++ b/files/docs/apps/redmine.md
@@ -0,0 +1,78 @@
+# <img src="/img/redmine-logo.png" width="25px"> Redmine App
+
+## About
+
+Redmine is a flexible project management web application
+
+* Questions? Ask in the [Cloudron Forum - Redmine](https://forum.cloudron.io/category/52/redmine)
+* [Redmine Website](https://redmine.org)
+* [Redmine forum](https://redmine.org/projects/redmine/boards)
+
+## Installing plugins
+
+To install plugins in redmine, simply extract them to `/app/data/plugins`
+and run the db migration.
+
+* Open a [File manager](/apps#file-manager) for the app.
+* Upload and extract the plugin to `/app/data/plugins`
+
+* Some plugins require gems to be installed but for some reason do not have
+`source 'https://rubygems.org'` at the start of the Gemfile. If it is missing,
+add the line to the top of Gemfile. Then in a [Web terminal](/apps#web-terminal):
+
+```
+cd /app/data/plugins/redmine_contacts
+vi Gemfile                  # ensure first line is "source 'https://rubygems.org'"
+bundle install              # this installs gems into /app/data/bundle/vendor
+```
+
+* Initialize the database of the plugin
+
+```
+# cd /app/code
+# bundle exec rake redmine:plugins NAME=redmine_checklists RAILS_ENV=production
+```
+
+* Restart redmine using the `restart` button
+
+## Installing themes
+
+To install plugins in redmine, simply extract them to `/app/data/themes`,
+install dependancies and run the build script
+
+```
+cd /app/data/themes/
+git clone https://github.com/hardpixel/minelab.git
+cd minelab
+bundle install
+./bundle.sh
+```
+
+## Code repositories
+
+Redmine can integrate various source code management tools like git, cvs, subversion. The repositories
+have to be created manually in `/app/data/repos/` and then configured with that path in the project settings.
+
+For further more detailed information for repository integration can be found [here](http://www.redmine.org/projects/redmine/wiki/RedmineRepositories).
+
+## SSH Keys
+
+Redmine is run as the `cloudron` user. To generate SSH keys for this user, open a
+[Web Terminal](/apps#web-terminal) and run the following commands:
+
+```
+su - cloudron
+ssh-keygen          # generates keys under ~/.ssh. keys are part of the backup
+```
+
+## Custom Cron
+
+Custom cron jobs can be placed in the file `/app/data/cron`.
+
+## Custom Settings
+
+The ruby app settings can be overwritten in the file `/app/data/additional_environment.rb`.
+For example to put the app in debug mode, add the following to this file and restart the app:
+```
+config.log_level = :debug
+```
diff --git a/files/docs/apps/releasebell.md b/files/docs/apps/releasebell.md
new file mode 100644
index 0000000..8223d2a
--- /dev/null
+++ b/files/docs/apps/releasebell.md
@@ -0,0 +1,17 @@
+# <img src="/img/releasebell-logo.png" width="25px"> Release Bell App
+
+## About
+
+Release Bell is a self-hosted release notification service.
+
+* Questions? Ask in the [Cloudron Forum - Release Bell](https://forum.cloudron.io/category/55/release-bell)
+* [Release Bell Website](https://releasebell.com/)
+
+## Supported Providers
+
+ReleaseBell supports release notification for repos hosted on the following providers:
+
+* GitHub
+* GitLab
+
+
diff --git a/files/docs/apps/rocket.chat.md b/files/docs/apps/rocket.chat.md
new file mode 100644
index 0000000..531ee3d
--- /dev/null
+++ b/files/docs/apps/rocket.chat.md
@@ -0,0 +1,191 @@
+# <img src="/img/rocketchat-logo.png" width="25px"> Rocket.Chat App
+
+## About
+
+Rocket.Chat is a solution for communities and companies wanting to privately host their own chat service or
+for developers looking forward to build and evolve their own chat platforms.
+
+* Questions? Ask in the [Cloudron Forum - Rocket.Chat](https://forum.cloudron.io/category/14/rocket-chat)
+* [Rocket.Chat Website](http://rocket.chat/)
+* [Rocket.Chat issue tracker](https://github.com/RocketChat/Rocket.Chat/issues)
+
+## Mobile Clients
+
+Rocket.Chat [mobile clients](https://rocket.chat/download) are available for most mobile platforms:
+
+* [Play Store](https://play.google.com/store/apps/details?id=chat.rocket.android)
+* [Apple App Store](https://itunes.apple.com/app/rocket-chat/id1148741252)
+
+## Webhook Integrations
+
+Webhook Integrations can be added in the Administration panel under `Integrations`.
+Rocket.Chat supports notifications from and to other apps or services through its webhook integrations.
+Incoming notifications require a message body parsing code snippet, which transforms the incoming webhook to a readable message,
+which will be posted into a selected chat channel.
+
+### GitLab
+
+Create a new `Incoming WebHook Integration` and configure the destination channel and user, then enalbe a custom sript.
+GitLab supports multiple types of webhook notifications and thus requires a more sophisticated transform script.
+The below works for issue, comment, merge request, push and tag events:
+
+```javascript
+/*jshint  esnext:true*/
+// see https://gitlab.com/help/web_hooks/web_hooks for full json posted by GitLab
+const NOTIF_COLOR = '#6498CC';
+
+class Script {
+    process_incoming_request({
+        request
+    }) {
+        try {
+            switch (request.headers['x-gitlab-event']) {
+                case 'Push Hook':
+                    return this.pushEvent(request.content);
+                case 'Merge Request Hook':
+                    return this.mergeRequestEvents(request.content);
+                case 'Note Hook':
+                    return this.commentEvent(request.content);
+                case 'Issue Hook':
+                    return this.issueEvent(request.content);
+                case 'Tag Push Hook':
+                    return this.tagEvent(request.content);
+            }
+        } catch (e) {
+            console.log('gitlabevent error', e);
+            return {
+                error: {
+                    success: false,
+                    message: e.message || e
+                }
+            };
+        }
+    }
+
+    issueEvent(data) {
+        return {
+            content: {
+                username: data.user.name,
+                text: `${data.user.username} ${data.object_attributes.state} an issue _${data.object_attributes.title}_ on ${data.project.name}. *Description:* ${data.object_attributes.description}. See: ${data.object_attributes.url}`,
+                icon_url: data.user.avatar_url
+            }
+        };
+    }
+
+    commentEvent(data) {
+        const comment = data.object_attributes;
+        const user = data.user;
+        let text;
+        if (data.merge_request) {
+            let mr = data.merge_request;
+            text = `${user.name} commented on Merge Request #${mr.id} [${mr.title}](${comment.url})`;
+
+        } else if (data.commit) {
+            let commit = data.commit;
+            let message = commit.message.replace(/\n[^\s\S]+/, '...').replace(/\n$/, '');
+            text = `${user.name} commented on commit [${commit.id.slice(0, 8)} ${message}](${comment.url})`;
+        } else if (data.issue) {
+            let issue = data.issue;
+            text = `${user.name} commented on issue [#${issue.id} ${issue.title}](${comment.url})`;
+        } else if (data.snippet) {
+            let snippet = data.snippet;
+            text = `${user.name} commented on code snippet [#${snippet.id} ${snippet.title}](${comment.url})`;
+        }
+        return {
+            content: {
+                username: 'gitlab/' + data.project.name,
+                icon_url: data.project.avatar_url || user.avatar_url || '',
+                text,
+                attachments: [{
+                    text: comment.note,
+                    color: NOTIF_COLOR
+                }]
+            }
+        };
+    }
+
+    mergeRequestEvent(data) {
+        const user = data.user;
+        const mr = data.object_attributes;
+        return {
+            content: {
+                username: `gitlab/${mr.target.name}`,
+                icon_url: mr.target.avatar_url || mr.source.avatar_url || user.avatar_url || '',
+                attachments: [{
+                    title: `${user.name} ${mr.action} Merge Request #${mr.id} ${mr.title}`,
+                    title_link: mr.url,
+                    text: `_${mr.source_branch} into ${mr.target_branch}_`,
+                    color: NOTIF_COLOR
+                }]
+            }
+        };
+    }
+
+    pushEvent(data) {
+        const project = data.project;
+        return {
+            content: {
+                username: `gitlab/${project.name}`,
+                text: `![${data.user_name}](${data.user_avatar}) ${data.user_name} pushed ${data.total_commits_count} commits to ${project.name}. See: ${project.web_url}`,
+                icon_url: project.avatar_url || data.user_avatar || '',
+                attachments: [{
+                    title: data.total_commits_count + ' Commits',
+                    title_link: project.web_url,
+                    text: data.commits.map((commit) => `  - ${new Date(commit.timestamp).toUTCString()} [${commit.id.slice(0, 8)}](${commit.url}) by ${commit.author.name}: ${commit.message.replace(/\s*$/, '')}`).join('\n'),
+                    color: NOTIF_COLOR
+                }]
+            }
+        };
+    }
+
+    tagEvent(data) {
+        let tag = data.ref.replace(/^.*?([^\/]+)$/, '$1');
+        return {
+            content: {
+                username: `gitlab/${data.project.name}`,
+                icon_url: data.project.avatar_url || data.user_avatar || '',
+                text: `${data.user_name} push tag [${tag} ${data.checkout_sha.slice(0, 8)}](${data.project.web_url}/tags/${tag})`
+            }
+        };
+    }
+
+}
+```
+
+After the integration is setup, the Webhook URL and Secret Token is generated and can now be setup with the project in GitLab at `Settings` -> `Integrations`.
+
+!!! warning "Webhook test"
+    Triggering a test webhook from GitLab will likely result in an error, since the above transform script expects a body, which is not provided from GitLab while running a test call. A test has to be made with a real action on the repo.
+
+## Live Chat
+
+Rocket.Chat has a live chat feature that allows you to embed a chat widget into your website.
+
+Head over to Rocket.Chat app's Administration view, select the Livechat section and enable it. After this, you will find a `Livechat` entry in the side bar.
+
+<center>
+<img src="/img/rocketchat-live-chat-4.png" class="shadow" width="30%">
+<img src="/img/rocketchat-live-chat-2.png" class="shadow" width="30%">
+<img src="/img/rocketchat-live-chat-3.png" class="shadow" width="30%">
+</center>
+<br/>
+
+*You will also find options to customize the live chat widget appearance to match your look and feel there.*
+
+Then, copy the Javascript code snippet shown in the Livechat Installation view and paste it to the bottom of your website's html code as the last thing before the `</body>` tag. WordPress users can use the [Rocket.Chat LiveChat WordPress plugin](https://wordpress.org/plugins/rocketchat-livechat/) instead.
+
+You will now see the live chat widget on the bottom right of your page.
+
+## Reset Admin Password
+
+If you lost the admin password, you can make an existing user an admin. Use the [Web Terminal](/apps#web-terminal)
+to open a MongoDB shell and run the following command:
+
+```
+db.users.update({username:'myusername'}, {$set: {'roles' : [ "admin" ]}});
+```
+
+## Environment Variables
+
+Custom environment variables can be set in `/app/data/env`.
+
diff --git a/files/docs/apps/roundcube.md b/files/docs/apps/roundcube.md
new file mode 100644
index 0000000..ec05620
--- /dev/null
+++ b/files/docs/apps/roundcube.md
@@ -0,0 +1,155 @@
+# <img src="/img/roundcube-logo.png" width="25px"> Roundcube App
+
+## About
+
+Roundcube webmail is a browser-based multilingual IMAP client with an application-like user interface.
+
+* Questions? Ask in the [Cloudron Forum - Roundcube](https://forum.cloudron.io/category/22/roundcube)
+* [Roundcube Website](https://roundcube.net)
+* [Upstream Roundcube issue tracker](https://github.com/roundcube/roundcubemail/issues)
+
+## Default Setup
+
+Roundcube is pre-configured for use with Cloudron Email.
+
+## Multi-domain Setup
+
+Users can login with their email and password to access their mailbox. If the
+Cloudron has two domains, `example1.com` and `example2.com`, the user can login
+using `user@example1.com` and `user@example2.com`. Aliases can be added as identities
+under Roundcube settings.
+
+## External domains
+
+The roundcube app does not support adding domains that are not managed in Cloudron.
+Consider using [Rainloop app](/apps/rainloop) as an alternative.
+
+## Vacation Email
+
+An out of office / vacation mail message can be setup using Sieve filters.
+
+A vacation message can be set in `Settings` -> `Filters` -> `Add filter` -> `Vacation message` action.
+
+<center>
+<img src="/img/email-vacation-message-roundcube.png" class="shadow" width="600px">
+</center>
+
+## Forwarding all emails
+
+To forward all emails to an external mail, setup a Sieve filter in
+`Settings` -> `Filters` -> `Add a filter` -> `Forward to`
+
+<center>
+<img src="/img/forward-all-emails-roundcube.png" class="shadow" width="600px">
+</center>
+
+## Plugins
+
+[Plugins](https://plugins.roundcube.net/) can be installed as follows:
+
+* Extract the plugin using the [File Manager](/apps#file-manager) into
+  `/app/data/plugins`.
+
+* Change the ownership of the extracted plugin to `www-data`.
+
+* Add the plugin to `$config['plugins']` in `/app/data/customconfig.php`:
+
+```
+    array_push($config['plugins'], 'myplugin');
+```
+
+* Some plugins have dependencies that need to be installed via `composer`. `composer`
+  requires a lot of RAM for it's resolution mechanism. For this reason, first bump the
+  [memory limit](/apps/#memory-limit) of the app to 2GB and then run composer using the
+  [Web Terminal](/apps/#web-terminal). You can reset back the memory limit after installation
+  is complete.
+
+```
+    # cd /app/data/plugins/<plugin>
+    # composer install --no-dev --optimize
+    # chown -R www-data:www-data .
+```
+
+### Enabling PGP support
+
+The Enigma plugin can be used to enable PGP support. The Enigma plugin is part of the
+roundcube code and no installation is required. To enable the plugin:
+
+* Add the following lines to `/app/data/customconfig.php`:
+
+```
+    array_push($config['plugins'], 'enigma');
+    $config['enigma_pgp_homedir'] = '/app/data/enigma';
+```
+
+* Create the directory where enigma will save the PGP keys on the server:
+
+```
+    mkdir /app/data/enigma
+    chown www-data:www-data /app/data/enigma
+```
+* New PGP keys can be created or existing ones can be imported in `Settings` -> `PGP Keys`
+
+<center>
+<img src="/img/roundcube-pgp-settings.png" class="shadow" width="600px">
+</center>
+
+
+* When composing new mail, you will see an Encryption icon in the tool bar.
+
+<center>
+<img src="/img/roundcube-encryption-icon.png" class="shadow" width="600px">
+</center>
+
+## Changing the title
+
+Add the following lines to `/app/data/customconfig.php` using the [File Manager](/apps/#file-manager):
+
+```
+$rcmail_config['product_name'] = 'My Hosting Company';
+```
+
+## Skins
+
+[Skins](https://plugins.roundcube.net/explore/) can be installed as follows:
+
+* Extract the skin using the [File Manager](/apps#file-manager) into
+  `/app/data/skins`.
+
+* Change the ownership of the extracted skin to `www-data`.
+
+* Set the new skin as the default skin by adding this line in `/app/data/customconfig.php`:
+
+```
+    $rcmail_config['skin'] = 'newskin_directory_name';
+```
+
+### Customizing CSS and logo
+
+To customize CSS and logo, it's best to create a copy of an existing skin and make
+changes as needed.
+
+* Open a [Web terminal](/apps#web-terminal):
+
+```
+# cd /app/data/skins
+# cp -Lr larry customskin
+... make changes in customskin ...
+# chown -R www-data:www-data customskin
+```
+
+* Set the new skin as the default skin by adding this line in `/app/data/customconfig.php`:
+
+```
+$rcmail_config['skin'] = 'customskin';
+```
+
+## Search
+
+By default, the search field only searches the current folder. To search across all folders,
+change the `Scope`.
+
+<center>
+<img src="/img/roundcube-search.png" class="shadow" width="500px">
+</center>
+
diff --git a/files/docs/apps/scrumblr.md b/files/docs/apps/scrumblr.md
new file mode 100644
index 0000000..5766286
--- /dev/null
+++ b/files/docs/apps/scrumblr.md
@@ -0,0 +1,11 @@
+# <img src="/img/scrumblr-logo.png" width="25px"> Scrumblr App
+
+## About
+
+Scrumblr is a collaborative online scrum tool.
+
+* Questions? Ask in the [Cloudron Forum - AllTube](https://forum.cloudron.io/category/115/scrumblr)
+* [AllTube Website](http://scrumblr.ca)
+* [Scrumblr issue tracker](https://github.com/aliasaria/scrumblr/issues)
+
+
diff --git a/files/docs/apps/searx.md b/files/docs/apps/searx.md
new file mode 100644
index 0000000..9adc0bb
--- /dev/null
+++ b/files/docs/apps/searx.md
@@ -0,0 +1,14 @@
+# <img src="/img/searx-logo.png" width="25px"> searx App
+
+## About
+
+Searx is a privacy-respecting metasearch engine.
+
+* Questions? Ask in the [Cloudron Forum - Searx](https://forum.cloudron.io/category/47/searx)
+* [Searx Website](https://searx.info)
+* [Searx issue tracker](https://github.com/searx/searx/issues)
+
+## Custom configuration
+
+Use the [File Manager](/apps#file-manager) to edit `/app/data/settings.yml`.
+
diff --git a/files/docs/apps/shaarli.md b/files/docs/apps/shaarli.md
new file mode 100644
index 0000000..630bc47
--- /dev/null
+++ b/files/docs/apps/shaarli.md
@@ -0,0 +1,25 @@
+# <img src="/img/shaarli-logo.png" width="25px"> Shaarli App
+
+## About
+
+The personal, minimalist, super-fast, database free, bookmarking service.
+
+* Questions? Ask in the [Cloudron Forum - Shaarli](https://forum.cloudron.io/category/82/shaarli)
+* [Shaarli Website](https://github.com/shaarli/Shaarli)
+* [Shaarli Docs](https://shaarli.readthedocs.io/en/master/)
+* [Shaarli issue tracker](https://github.com/shaarli/Shaarli/issues)
+
+## Browser Extensions
+
+Shaarli's browser extensions currently [do not work](https://chrome.google.com/webstore/detail/shiny-shaarli/hajdfkmbdmadjmmpkkbbcnllepomekin/support) on Cloudron because Cloudron sets the `X-Frame-Options` as
+a security measure. A future version of Cloudron might support disabling
+this security measure.
+
+## Using the bookmarklet
+
+* Open your Shaarli and Login
+* Click the Tools button in the top bar
+* Drag the `✚Shaare link` button, and drop it to your browser's bookmarks bar.
+
+You can read more about setting up the bookmarklet in the [Shaarli docs](https://shaarli.readthedocs.io/en/master/Bookmarklet/)
+
diff --git a/files/docs/apps/sickchill.md b/files/docs/apps/sickchill.md
new file mode 100644
index 0000000..5b73d43
--- /dev/null
+++ b/files/docs/apps/sickchill.md
@@ -0,0 +1,17 @@
+# <img src="/img/sickchill-logo.png" width="25px"> SickChill App
+
+## About
+
+SickChill is an automatic Video Library Manager for TV Shows.
+
+* Questions? Ask in the [Cloudron Forum - SickChill](https://forum.cloudron.io/category/117/sickchill)
+* [SickChill Website](https://sickchill.github.io/)
+* [SickChill issue tracker](https://github.com/SickChill/SickChill/issues)
+
+### Configuration
+
+You will have to enable NZB/Torrent providers. You may also want to enable post-processing.
+
+Do *not* enable "Reverse proxy headers" : SickChill will block you from connecting, because it will believe that you are
+connecting from a remote address with no passwords, as it does not see Cloudron's authentication wall.
+
diff --git a/files/docs/apps/simple-torrent.md b/files/docs/apps/simple-torrent.md
new file mode 100644
index 0000000..f4e27f4
--- /dev/null
+++ b/files/docs/apps/simple-torrent.md
@@ -0,0 +1,20 @@
+# <img src="/img/simple-torrent-logo.png" width="25px"> Simple Torrent App
+
+## About
+
+Simple Torrent is a self-hosted remote torrent client (rebranded from Cloud Torrent).
+
+* Questions? Ask in the [Cloudron Forum - Simple Torrent](https://forum.cloudron.io/category/73/simple-torrent)
+* [Simple Torrent Website](https://github.com/boypt/simple-torrent)
+* [Simple Torrent issue tracker](https://github.com/boypt/simple-torrent/issues)
+
+## Customization
+
+Use the [File Manager](/apps#file-manager) and edit `cloud-torrent.yaml` for customization.
+See the [docs](https://github.com/boypt/simple-torrent/wiki/Config-File) on what can be customized.
+Some important fields are:
+
+* `downloaddirectory` - where the download files are placed.
+* `donecmd` - a script to run once file has downloaded. See [DoneCmdUsage](https://github.com/boypt/simple-torrent/wiki/DoneCmdUsage)
+  for more information.
+
diff --git a/files/docs/apps/snipe-it.md b/files/docs/apps/snipe-it.md
new file mode 100644
index 0000000..b657ae0
--- /dev/null
+++ b/files/docs/apps/snipe-it.md
@@ -0,0 +1,14 @@
+# <img src="/img/snipe-it-logo.png" width="25px"> Snipe-IT App
+
+## Customization
+
+Use the [Web terminal](/apps#web-terminal) to edit custom configuration
+under `/app/data/env`.
+
+## Full Company Support
+
+[Full Multiple Companies Support](https://snipe-it.readme.io/docs/general-settings#full-multiple-companies-support)
+lets you set up Snipe-IT as a multi-tenant application. This features allows super-admins
+to restrict the assets non-super-admins can see. This feature is disabled by default but
+can be enabled from the General Settings page.
+
diff --git a/files/docs/apps/sogo.md b/files/docs/apps/sogo.md
new file mode 100644
index 0000000..8292cf4
--- /dev/null
+++ b/files/docs/apps/sogo.md
@@ -0,0 +1,109 @@
+# <img src="/img/sogo-logo.png" width="25px"> SOGo App
+
+## About
+
+SOGo is a fully supported and trusted groupware server with a focus on scalability and open standards.
+
+* Questions? Ask in the [Cloudron Forum - SOGo](https://forum.cloudron.io/category/58/sogo)
+* [SOGo Website](http://www.sogo.nu/)
+* [SOGo support](https://sogo.nu/support.html)
+* [SOGo docs](https://sogo.nu/support.html#/documentation)
+* [SOGo issue tracker](https://sogo.nu/support.html#/bugs)
+
+## Login
+
+SOGo only works with mailbox accounts on the Cloudron. Login using the full email address including the domain as the username.
+
+## Email
+
+SOGo is setup out of the box as an email client for Cloudron for all mailboxes on the Cloudron.
+
+By default the full name for sending out emails is currently prefilled with the email address.
+Adjusting this to the real name, can be done by editing the IMAP account under `Preferences` -> `Mail`:
+
+<center>
+<img src="/img/sogo-email-identity-setup.png" class="shadow" width="100%">
+</center>
+
+## External domains
+
+The SOGo app does not support adding domains that are not managed in Cloudron.
+Consider using the [rainloop app](/apps/rainloop) as an alternative.
+
+### Sieve Scripts
+
+SOGo UI only supports setting up a limited set of filtering rules. You can setup more advanced rules
+using the Rainloop or Roundcube app.
+
+## CalDAV
+
+SOGo supports syncing using CalDAV:
+
+Clicking on the 'ribbon' next to the calendar shows a popup menu.
+
+<center>
+<img src="/img/sogo-links-to-calendar.png" class="shadow" width="50%">
+</center>
+
+Clicking on `Links to this Calendar` will show the calendar settings for various clients.
+
+<center>
+<img src="/img/sogo-calendar-links.png" class="shadow" width="50%">
+</center>
+
+!!! note "Calendar URLs"
+    CalDAV URL - https://sogo.example.com/SOGo/dav/<username>/Calendar/personal/
+    <br>
+    Wedav ICS URL - https://sogo.example.com/SOGo/dav/<username>/Calendar/personal.ics
+    <br>
+    WebDAV XML URL - https://sogo.example.com/SOGo/dav/<username>/Calendar/personal.xml
+
+## CardDAV
+
+Clicking on the 'ribbon' next to the address book shows a popup menu.
+
+<center>
+<img src="/img/sogo-links-to-address-book.png" class="shadow" width="50%">
+</center>
+
+Clicking on `Links to this Address book` will show the address book settings for various clients.
+
+<center>
+<img src="/img/sogo-address-book-links.png" class="shadow" width="50%">
+</center>
+
+!!! note "Address book URLs"
+    CardDAV URL - https://sogo.example.com/SOGo/dav/<username>/Contacts/personal/
+
+## ActiveSync
+
+Exchange ActiveSync is a protocol used by Microsoft Exchange to sync mobile devices.
+The Cloudron SOGo app does not support ActiveSync. It only supports clients that
+use IMAP/SMTP/CardDAV/CalDAV.
+
+## UI Issues
+
+SOGo behaves differently depending on how you access the app.
+If you navigate to SOGo by clicking on the icon on your Cloudron
+dashboard, parts of the SOGo UI [do not work](https://sogo.nu/bugs/view.php?id=3900).
+
+This issue manifests itself as:
+
+* Email delete button not working
+* Compose email popup not closing. Sometimes, it ends up closing the tab itself.
+* The browser's web inspector console displays a DOMException with the message
+`"Permission denied to access property \"$mailboxController\" on cross-origin object"`.
+
+To workaround this, always use SOGo by opening a new browser tab and entering the
+SOGo domain name directly.
+
+## CalDAV and CardDAV Migration
+
+Follow [this guide](https://blog.cloudron.io/carddav-and-caldav-migration/)
+to migrate CardDAV and CalDAV resources to and from existing installations.
+
+## Mark as spam
+
+To mark emails as spam (or ham), click on the gravatar icon in the email header.
+Then, there is a thumbs down icon for marking as spam.
+
diff --git a/files/docs/apps/statping.md b/files/docs/apps/statping.md
new file mode 100644
index 0000000..7eee937
--- /dev/null
+++ b/files/docs/apps/statping.md
@@ -0,0 +1,16 @@
+# <img src="/img/statping-logo.png" width="25px"> Statping App
+
+## About
+
+Statping is a status Page for monitoring your websites and applications with beautiful graphs, analytics, and plugins.
+
+* Questions? Ask in the [Cloudron Forum - Statping](https://forum.cloudron.io/category/92/statping)
+* [Statping Website](https://statping.com/)
+* [Statping issue tracker](https://github.com/statping/statping/issues)
+
+## Config changes
+
+Sometimes after making config or setting changes, the graphs do not appear.
+To fix this, go to admin settings and clear the cache after doing any config or setting
+changes.
+
diff --git a/files/docs/apps/surfer.md b/files/docs/apps/surfer.md
new file mode 100644
index 0000000..0de04cf
--- /dev/null
+++ b/files/docs/apps/surfer.md
@@ -0,0 +1,94 @@
+# <img src="/img/surfer-logo.png" width="25px"> Surfer App
+
+## About
+
+Surfer comes with a webinterface to manage and upload files, a command line tool as well as providing a [WebDAV](https://en.wikipedia.org/wiki/WebDAV) endpoint to manage files in your local file manager.
+
+* Questions? Ask in the [Cloudron Forum - Surfer](https://forum.cloudron.io/category/28/surfer)
+* [Surfer Website](https://git.cloudron.io/cloudron/surfer)
+
+## Admin page
+
+The web interface is available under the `https://[appdomain]/_admin/` location.
+
+## CLI tool
+
+Install the surfer cli tool using npm.
+
+```
+npm -g install cloudron-surfer
+```
+
+Login using your Cloudron credentials:
+
+```
+surfer login <this app's domain>
+```
+
+Put some files:
+
+```
+surfer put index.html favicon.ico /
+```
+
+Put a directory (the `/.` below meand that the contents of `build` dir get copied into the root of surfer.
+Without it, a `build` directory will get created in the root of surfer).
+
+```
+surfer put build/. /
+```
+
+## CI/CD integration
+
+You can setup your CI/CD to automatically push static files to surfer as follows:
+
+* First, create an `Access Token` in surfer.
+
+* Install the surfer cli tool as part of the CI/CD pipeline
+
+* Push the artifacts (`dist/` in the example below):
+
+```
+surfer put --token api-7e6d90ff-5825-4ebe-a85b-a68795055955 --server surfer.cloudron.ml dist/. /
+```
+
+## WebDAV
+
+WebDAV is a well supported extension of the Hypertext Transfer Protocol that allows clients to perform remote Web content authoring operations. WebDAV shares can be mounted usually with your local file manager.
+
+The URI schemes differ on the common platforms:
+
+| Platform| URI |
+| ---     | --- |
+| Windows | https://[appdomain]/_webdav/ |
+| Mac     | https://[appdomain]/_webdav/ |
+| Gnome   | davs://[appdomain]/_webdav/ |
+| KDE     | webdavs://[appdomain]/_webdav/ |
+
+On Linux the [Davfs2](http://savannah.nongnu.org/projects/davfs2) library can also be used to locally mount a share:
+```
+mount -t davfs https://[appdomain]/_webdav/ /mount/point
+```
+
+
+## CLI Usage
+
+```
+$ surfer
+Usage: surfer [options] [command]
+
+Options:
+  -V, --version                output the version number
+  -s, --server <url>           Server URL (optional)
+  -t, --token <access token>   Server Access Token (optional)
+  -h, --help                   display help for command
+
+Commands:
+  login [options] <url>        Login to server
+  logout                       Logout from server
+  put [options] <file|dir...>  Puts a list of files or dirs to the destination. The last argument is destination dir
+  get [file|dir]               Get a file or directory listing
+  del [options] <file>         Delete a file or directory
+  help [command]               display help for comman
+```
+
diff --git a/files/docs/apps/synapse.md b/files/docs/apps/synapse.md
new file mode 100644
index 0000000..0daafda
--- /dev/null
+++ b/files/docs/apps/synapse.md
@@ -0,0 +1,74 @@
+# <img src="/img/synapse-logo.png" width="25px"> Synapse App
+
+## About
+
+Matrix is an open network for secure, decentralized communication.
+
+* Questions? Ask in the [Cloudron Forum - Matrix Synapse](https://forum.cloudron.io/category/50/matrix-synapse-riot)
+* [Matrix Synapse Website](https://matrix.org)
+* [Matrix Synapse issue tracker](https://github.com/matrix-org/synapse/issues)
+
+## Post installation
+
+### Step 1: Select Matrix IDs
+
+Just like email, users on matrix has a unique universal id. These ids are
+of the form `@username:domain.com`.
+
+To give users a "memorable id", this app (also known as home server) is pre-setup to use the second level
+domain for the domain part of the id (also known as the `server_name`). For example,
+if you installed the app at `matrix-homeserver.example.com`, this app package will set the
+`server_name` to `example.com`. This will generate user ids of the form `@username:example.com`.
+
+If you require a different server name, use a [File Manager](/apps#file-manager)
+to edit `/app/data/configs/homeserver.yaml` and restart the app.
+
+### Step 2: Delegation
+
+Matrix clients and other matrix servers discover the Matrix server for an ID using
+[Well-Known](https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml) URIs.
+The Well-Known URI is a document that is served up from the `server_name` domain (i.e `example.com`)
+that [delegates](https://github.com/matrix-org/synapse/blob/master/docs/delegate.md) the handling
+to another server (i.e `matrix-homeserver.example.com`).
+
+If `server_name` is an app hosted on Cloudron, you can use Cloudron's Well Known URI
+support to serve up well-known documents. Go to the `Domains` view and set the Matrix domain in the `Advanced` settings:
+
+<center>
+<img src="/img/synapse-wellknown.png" class="shadow">
+</center>
+
+Be sure to provide both the hostname and port number (443). To verify the delegation setup, try this command
+from your laptop/PC:
+
+```
+$ curl https://example.com/.well-known/matrix/server
+{ "m.server": "matrix-homeserver.example.com:443" }
+```
+
+### Step 3. Federation
+
+[Federation setup](https://github.com/matrix-org/synapse/blob/master/docs/federate.md) is automatic.
+Use the [Federation Tester](https://federationtester.matrix.org/) to verify that everything is setup properly.
+Note you must enter the `server_name` (like `example.com`) in the form field in the website and NOT the location
+of your home server (despite what the form says).
+
+## Admin
+
+To make an existing user an admin, open a [Web terminal](/apps#web-terminal) and
+run the following command:
+
+```
+PGPASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD} psql -h ${CLOUDRON_POSTGRESQL_HOST} -p ${CLOUDRON_POSTGRESQL_PORT} -U ${CLOUDRON_POSTGRESQL_USERNAME} -d ${CLOUDRON_POSTGRESQL_DATABASE} -c "UPDATE users SET admin=1 WHERE name='@user:example.com'"
+```
+
+## Customizations
+
+Synapse offers a variety of [customizations](https://github.com/matrix-org/synapse/blob/develop/docs/sample_config.yaml).
+To make changes, use a [File Manager](/apps#file-manager)
+to edit `/app/data/configs/homeserver.yaml` and restart the app.
+
+## Home page
+
+The `index.html` can be customized by editing `/app/data/index.html`. Note that any assets have to be embedded inline.
+
diff --git a/files/docs/apps/syncthing.md b/files/docs/apps/syncthing.md
new file mode 100644
index 0000000..b72492a
--- /dev/null
+++ b/files/docs/apps/syncthing.md
@@ -0,0 +1,18 @@
+# <img src="/img/syncthing-logo.png" width="25px"> Syncthing App
+
+## About
+
+Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes.
+
+* Questions? Ask in the [Cloudron Forum - Syncthing](https://forum.cloudron.io/category/56/syncthing)
+* [Syncthing Website](https://syncthing.net)
+* [Syncthing forum](https://forum.syncthing.net/)
+* [Syncthing docs](https://docs.syncthing.net/)
+* [Syncthing issue tracker](https://github.com/syncthing/syncthing/issues)
+
+## Apps
+
+Complete list of native GUIs and integrations is available [here](https://syncthing.net/).
+
+* [Android app](https://play.google.com/store/apps/details?id=com.nutomic.syncthingandroid)
+
diff --git a/files/docs/apps/taiga.md b/files/docs/apps/taiga.md
new file mode 100644
index 0000000..2fcb800
--- /dev/null
+++ b/files/docs/apps/taiga.md
@@ -0,0 +1,97 @@
+# <img src="/img/taiga-logo.png" width="25px"> Taiga App
+
+## About
+
+Taiga is the project management tool for multi-functional agile teams.
+
+* Questions? Ask in the [Cloudron Forum - Taiga](https://forum.cloudron.io/category/65/taiga)
+* [Taiga Website](https://taiga.io)
+* [Taiga issue tracker](https://github.com/taigaio/taiga-front/issues)
+
+## Custom configuration
+
+Taiga customizations are placed in two files:
+
+* `conf.json` - This contains [UI settings](https://github.com/taigaio/taiga-front/blob/master/conf/conf.example.json). On the Cloudron app, this file is
+  located at `/app/data/conf.json`.
+
+* `local.py` - This contains [backend settings](https://github.com/taigaio/taiga-back/blob/master/settings/local.py.example). On the Cloudron app, this file
+  is located at `/app/data/customlocal.py`.
+
+These customizations will persist across updates and restarts.
+
+To edit these files use the [File manager](/apps#file-manager).
+
+## Disabling external registration
+
+When using Cloudron auth, external registration is already disabled. When now
+using Cloudron auth, edit the following files using [File manager](/apps#file-manager).
+
+* `PUBLIC_REGISTER_ENABLED = False` in `/app/data/customlocal.py`
+* `"publicRegisterEnabled": false` in `/app/data/conf.json`
+
+## Importing a project
+
+An existing project's json can be imported into Taiga as follows:
+
+* Connect to taiga using the [Web terminal](/apps#web-terminal)
+* Upload the project.json using the 'Upload to /tmp' button
+* `su cloudron`
+* `source /app/code/taiga/bin/activate`
+* `cd /app/code/taiga-back`
+* `python manage.py load_dump /tmp/project.json email@domain.tld`
+
+### Asana
+
+To import projects from Asana:
+
+* Create an [Asana Connect](https://asana.com/guide/help/api/api#gl-connect) client and secret. The redirect URL must be set to `https://taiga.example.com/project/new/import/asana`
+
+* Edit the backend config at `/app/data/customlocal.py` to contain the key:
+
+```
+IMPORTERS["asana"] = {
+    "active": True, # Enable or disable the importer
+    "callback_url": "{}://{}/project/new/import/asana".format(SITES["front"]["scheme"],
+                                                              SITES["front"]["domain"]),
+    "app_id": "client id from above",
+    "app_secret": "client secret from above"
+}
+```
+
+* Edit `/app/data/conf.json`:
+
+```
+  "importers": [
+    "asana"
+  ]
+```
+
+* Restart the app
+
+## Plugins
+
+### Slack
+
+The `slack` plugin is installed but not enabled. To enable it, add the following line to `/app/data/customlocal.py`:
+
+```
+INSTALLED_APPS += ["taiga_contrib_slack"]
+```
+
+Enable the frontend of Slack plugin by editing `/app/data/conf.json`:
+
+```
+    "contribPlugins": [ "/plugins/slack/slack.json" ]
+```
+
+Then, initialize the database by running the following command in the [web terminal](/apps#web-terminal):
+
+```
+source /app/code/taiga/bin/activate
+cd /app/code/taiga-back
+python manage.py migrate taiga_contrib_slack
+```
+
+Be sure to restart the app for the changes to take effect.
+
diff --git a/files/docs/apps/teamspeak.md b/files/docs/apps/teamspeak.md
new file mode 100644
index 0000000..5ab32c8
--- /dev/null
+++ b/files/docs/apps/teamspeak.md
@@ -0,0 +1,23 @@
+# <img src="/img/teamspeak-logo.png" height="32px" style="vertical-align: middle;"> TeamSpeak App
+
+## About
+
+Use crystal clear sound to communicate with your team mates cross-platform with military-grade security, lag-free performance & unparalleled reliability and uptime. 
+
+* Questions? Ask in the [Cloudron Forum - Teamspeak Server](https://forum.cloudron.io/category/84/teamspeak)
+* [Teamspeak Server Website](https://www.teamspeak.com)
+* [Teamspeak Server forum](https://community.teamspeak.com/)
+
+## Initial Setup
+
+After installation, check the app logs (in the `Console` section) to get the admin server token. You can now connect
+using one of the [Teamspeak client](https://www.teamspeak.com/en/downloads/).
+
+On first time connect, the client with ask for a privilege key. This is the same as the admin server token.
+
+<img src="/img/teamspeak-privilege-key.png" class="shadow">
+
+## License
+
+To configure a Teamspeak license in an app instance, upload the license `.dat` file to `/app/data/licensekey.dat` using the web terminal or Cloudron cli tool, then restart the app from the dashboard.
+
diff --git a/files/docs/apps/thelounge.md b/files/docs/apps/thelounge.md
new file mode 100644
index 0000000..c7ba21d
--- /dev/null
+++ b/files/docs/apps/thelounge.md
@@ -0,0 +1,55 @@
+# <img src="/img/thelounge-logo.png" width="25px"> The Lounge App
+
+## About
+
+The Lounge is a self-hosted web IRC client.
+
+* Questions? Ask in the [Cloudron Forum - The Lounge](https://forum.cloudron.io/category/67/the-lounge)
+* [The Lounge Website](https://thelounge.chat/)
+* [The Lounge community](https://thelounge.chat/community)
+* [The Lounge issue tracker](https://github.com/thelounge/thelounge/issues)
+
+## User management
+
+When installed with Cloudron SSO enabled, add and remove users in the Cloudron
+admin page.
+
+When installed without Cloudron SSO enabled, new users must be added using
+the Lounge CLI tools.
+
+* Open a [Web terminal](/apps#web-terminal) for the app.
+* Use the [lounge CLI](https://thelounge.github.io/docs/server/users.html) command
+  to add a user:
+
+```
+root@3543a0255d97:/home/cloudron# thelounge add girish
+2017-10-28 05:21:59 [PROMPT] Enter password:
+2017-10-28 05:22:02 [PROMPT] Save logs to disk? (yes)
+2017-10-28 05:22:04 [INFO] User girish created.
+2017-10-28 05:22:04 [INFO] User file located at /app/data/users/girish.json.
+```
+
+* To remove a user:
+
+```
+root@3543a0255d97:/home/cloudron# thelounge remove girish
+2017-10-28 05:22:21 [INFO] User girish removed.
+```
+
+!!! warning "Default admin user"
+    With SSO disabled, the Cloudron app creates a default user named 'admin'
+    for convenience. Be sure to change the password in the Lounge setting's
+    page. If you do not intend to use this user, you can delete this user.
+
+
+## Installing themes
+
+[Lounge themes](https://thelounge.github.io/docs/plugins/themes.html) can be
+installed using the lounge CLI tool.
+
+* First, look for a theme at [npm](https://www.npmjs.com/search?q=keywords%3Athelounge-theme)
+* Open a [Web terminal](/apps#web-terminal) for the app.
+    * Run command `thelounge install thelounge-theme-custom`
+* Restart the app
+* Select theme in options
+
diff --git a/files/docs/apps/tinytinyrss.md b/files/docs/apps/tinytinyrss.md
new file mode 100644
index 0000000..8492aac
--- /dev/null
+++ b/files/docs/apps/tinytinyrss.md
@@ -0,0 +1,54 @@
+# <img src="/img/tinytinyrss-logo.png" width="25px"> Tiny Tiny RSS
+
+## About
+
+Tiny Tiny RSS is a free and open source web-based news feed (RSS/Atom) reader and aggregator
+
+* Questions? Ask in the [Cloudron Forum - Tiny Tiny RSS](https://forum.cloudron.io/category/21/tiny-tiny-rss)
+* [Tiny Tiny RSS Website](http://tt-rss.org)
+* [Tiny Tiny RSS forum](https://community.tt-rss.org/)
+
+## Customizing configuration
+
+Use the [File Manager](/apps#file-manager) to place custom configuration under `/app/data/config.php`.
+
+Please be careful when changing configuration since the Cloudron packaging might depend on it.
+
+## Installing Plugins
+
+To install [plugins](https://git.tt-rss.org/fox/tt-rss/wiki/Plugins), simply extract
+them to `/app/data/plugins` (system plugins) or `/app/data/plugins.local` (user plugins) and restart the app.
+
+The [File Manager](/apps#file-manager) can be used to upload and extract plugins.
+
+You can see list of plugins [here](https://git.tt-rss.org/git/tt-rss/wiki/Plugins)
+
+## Installing themes
+
+To install [themes](https://git.tt-rss.org/fox/tt-rss/wiki/Themes), simply extract them to `/app/data/themes` (system themes)
+or `/app/data/themes.local` (user themes) and restart the app.
+
+The [File Manager](/apps#file-manager) can be used to upload and extract themes.
+
+Some suggested [themes](https://git.tt-rss.org/git/tt-rss/wiki/Themes):
+
+* [Reeder](https://github.com/tschinz/tt-rss_reeder_theme)
+* [Clean GReader](https://github.com/naeramarth7/clean-greader)
+* [Feedly](https://github.com/levito/tt-rss-feedly-theme)
+
+## Fever support
+
+TinyTinyRSS supports Fever API using a plugin. There are many version of 
+fever API floating around but [this version](https://github.com/wodev/tinytinyrss-fever-plugin#installation)
+is known to work.
+
+Instruction on how to setup the apps is in the [old forum page](https://tt-rss.org/oldforum/viewtopic.php?f=22&t=1981)
+
+## External registration
+
+To enable external registration, make two changes to `/app/data/config.php` using the [File Manager](/apps#file-manager):
+
+* Set `ENABLE_REGISTRATION` to `true`
+* Edit the `PLUGINS` variable to include `auth_internal`. Note that `PLUGINS` is comma separated plugin names.
+  This enables auth via the internal database authentication in addition to LDAP that Cloudron setup.
+
diff --git a/files/docs/apps/transmission.md b/files/docs/apps/transmission.md
new file mode 100644
index 0000000..5b8270f
--- /dev/null
+++ b/files/docs/apps/transmission.md
@@ -0,0 +1,31 @@
+# <img src="/img/transmission-logo.png" style="height: 48px; vertical-align: middle;"> Transmission App
+
+## About
+
+Transmission is a fast, easy and free BitTorrent client.
+
+* Questions? Ask in the [Cloudron Forum - Transmission](https://forum.cloudron.io/category/114/transmission)
+* [Transmission Website](https://transmissionbt.com/)
+* [Transmission forum](https://forum.transmissionbt.com/index.php)
+* [Transmission issue tracker](https://github.com/transmission/transmission/issues)
+
+## Paths
+
+By default, this app is configured to, at the end of a download, automatically hard-link the downloaded files from
+`/app/data/files/Downloading/` to `/app/data/files/Downloaded/`. This allows potential post-processing by other apps of
+the file in `Downloaded`, without interfering with seeding from the file in `Downloading`.
+
+The paths above can be [changed](#custom-config).
+
+## Custom config
+
+Custom configuration can be edited in `/app/data/transmission-config/modifiable.settings.json` using the
+[File Manager](/apps/$#file-manager). Be sure to restart the app after making changes.
+
+See [transmission docs](https://github.com/transmission/transmission/wiki/Editing-Configuration-Files) for
+a full list of configurable options.
+
+!!! warning "Do not edit settings.json"
+    There is a file named `settings.json`. This gets overwritten on startup. Instead, place settings only
+    in `modifiable.settings.json`.
+
diff --git a/files/docs/apps/trilium.md b/files/docs/apps/trilium.md
new file mode 100644
index 0000000..d7eabdb
--- /dev/null
+++ b/files/docs/apps/trilium.md
@@ -0,0 +1,16 @@
+# <img src="/img/trilium-logo.png" width="25px"> Trilium App
+
+## About
+
+Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases.
+
+* Questions? Ask in the [Cloudron Forum - Trilium Notes](https://forum.cloudron.io/category/95/trilium)
+* [Trilium Notes Website](https://github.com/zadam/trilium)
+* [Trilium Notes issue tracker](https://github.com/zadam/trilium/issues)
+
+## Multiple users
+
+Trilium does not support multiple users. It's a single user application intended
+for personal notes. See the [FAQ](https://github.com/zadam/trilium/wiki/FAQ#multi-user-support)
+for more information.
+
diff --git a/files/docs/apps/vault.md b/files/docs/apps/vault.md
new file mode 100644
index 0000000..ae0bd78
--- /dev/null
+++ b/files/docs/apps/vault.md
@@ -0,0 +1,35 @@
+# <img src="/img/vault-logo.png" width="25px"> Vault App
+
+## About
+
+Vault is a tool for secrets management, encryption as a service, and privileged access management.
+
+* Questions? Ask in the [Cloudron Forum - Vault](https://forum.cloudron.io/category/94/vault)
+* [Vault Website](https://www.vaultproject.io/)
+* [Vault community](https://www.vaultproject.io/community)
+* [Vault issue tracker](https://github.com/hashicorp/vault/issues)
+
+## Setup
+
+On first visit, you can generate the keys for the vault by specifying the number
+of shares and the threshold. The idea is that a master key is generated and split
+into the number of shares. To unlock the vault, you must provide atleast threshold count
+of the parts. See [this blog](https://shadow-soft.com/vault-auto-unseal/) for a full
+explanation on how Vault uses Shamir’s secret sharing algorithm.
+
+## Unsealing
+
+Vault stores all the secrets in memory. It uses the mlock capability of the kernel to
+prevent swapping. When the app restarts or the server restarts, it must be unsealed using
+the keys that were generated during setup. This is by Vault design.
+
+## LDAP
+
+After the Vault is unsealed, you can run the following command to enable Cloudron authentication.
+
+```
+    /app/pkg/enable-ldap.sh <root-token>
+```
+
+The root token is part of the keys generated during setup.
+
diff --git a/files/docs/apps/verdaccio.md b/files/docs/apps/verdaccio.md
new file mode 100644
index 0000000..0aae77d
--- /dev/null
+++ b/files/docs/apps/verdaccio.md
@@ -0,0 +1,56 @@
+# <img src="/img/verdaccio-logo.png" width="25px"> Verdaccio App
+
+## About
+
+Verdaccio is a lightweight open source private npm proxy registry.
+
+* Questions? Ask in the [Cloudron Forum - Verdaccio](https://forum.cloudron.io/category/43/verdaccio)
+* [Verdaccio Website](https://verdaccio.org/)
+* [Verdaccio issue tracker](https://github.com/verdaccio/verdaccio/issues)
+
+## Custom configuration
+
+You can add custom verdaccio configuration using the [File Manager](/apps#file-manager):
+
+* Add any custom configuration in `/app/data/config.yaml`.
+* Restart the app
+
+See [config.yaml](https://github.com/verdaccio/website/tree/master/docs/config.md) for
+reference.
+
+## Access control
+
+See the [Verdaccio docs](https://verdaccio.org/docs/en/packages) on how to allow or restrict
+access to packages.
+
+## Publishing packages
+
+To publish a package:
+
+```
+npm adduser --registry https://<verdaccio domain>
+npm publish --registry https://<verdaccio domain>
+```
+
+!!! warning "EPUBLISHCONFLICT"
+    Verdaccio is a proxying package manager. Packages are checked against npmjs registry
+    before being published. For this reason, publishing packages that already exist on npmjs
+    will result in a `EPUBLISHCONFLICT` error. See [GitHub issue 1203](https://github.com/verdaccio/verdaccio/issues/1203)
+    for a workaround.
+
+## Installing packages
+
+To set the custom registry globally:
+
+```
+npm adduser --registry https://<verdaccio domain>
+npm set registry https://<verdaccio domain>
+```
+
+To set it on just the project:
+
+```
+npm adduser --registry https://<verdaccio domain>
+npm install my-package --registry https://<verdaccio domain>
+```
+
diff --git a/files/docs/apps/vikunja.md b/files/docs/apps/vikunja.md
new file mode 100644
index 0000000..f4d6ca5
--- /dev/null
+++ b/files/docs/apps/vikunja.md
@@ -0,0 +1,15 @@
+# <img src="/img/vikunja-logo.png" width="25px"> Vikunja App
+
+## About
+
+Vikunja is the to-do app to organize your life.
+
+* Questions? Ask in the [Cloudron Forum - Vikunja](https://forum.cloudron.io/category/127/vikunja)
+* [Vikunja Website](https://vikunja.io)
+* [Vikunja community](https://community.vikunja.io/)
+
+## Config
+
+Custom configuration can be set using the [File manager](/apps/#file-manager) by editing `/app/data/config.yml`.
+The various options are documented [here](https://vikunja.io/docs/config-options/).
+
diff --git a/files/docs/apps/wallabag.md b/files/docs/apps/wallabag.md
new file mode 100644
index 0000000..44cdd41
--- /dev/null
+++ b/files/docs/apps/wallabag.md
@@ -0,0 +1,28 @@
+# <img src="/img/wallabag-logo.png" width="25px"> Wallabag App
+
+## About
+
+Wallabag is a self hostable application for saving web pages: Save and classify articles. Read them later. Freely.
+
+* Questions? Ask in the [Cloudron Forum - Wallabag](https://forum.cloudron.io/category/44/wallabag)
+* [Wallabag Website](https://www.wallabag.org/)
+* [Wallabag docs](https://doc.wallabag.org/en/)
+* [Wallabag issue tracker](https://github.com/wallabag/wallabag/issues)
+
+## Using the Browser Extensions
+
+* [Firefox](https://addons.mozilla.org/fr/firefox/addon/wallabagger/)
+* [Chrome](https://chrome.google.com/webstore/detail/wallabagger/gbmgphmejlcoihgedabhgjdkcahacjlj)
+
+Follow the instructions in the [wallabag website](https://wallabag.org/en/news/wallabagger-howto)
+to configure the extension to use the Cloudron app.
+
+## Admin
+
+To make an existing user an admin, first make note of the user's id (100 in the example below).
+Then, run the following PostgreSQL command using the [Web Terminal](/apps#web-terminal):
+
+```
+UPDATE wallabag_user SET roles = 'a:2:{i:0;s:9:"ROLE_USER";i:1;s:16:"ROLE_SUPER_ADMIN";}' where id = 100;
+```
+
diff --git a/files/docs/apps/wbo.md b/files/docs/apps/wbo.md
new file mode 100644
index 0000000..b6be6c9
--- /dev/null
+++ b/files/docs/apps/wbo.md
@@ -0,0 +1,10 @@
+# <img src="/img/wbo-logo.png" width="25px"> WBO App
+
+## About
+
+WBO is an online collaborative whiteboard that allows many users to draw simultaneously on a large virtual board.
+
+* Questions? Ask in the [Cloudron Forum - WBO](https://forum.cloudron.io/category/116/wbo)
+* [WBO Website](https://wbo.ophir.dev/)
+* [WBO issue tracker](https://github.com/lovasoa/whitebophir/issues)
+
diff --git a/files/docs/apps/weblate.md b/files/docs/apps/weblate.md
new file mode 100644
index 0000000..3958cba
--- /dev/null
+++ b/files/docs/apps/weblate.md
@@ -0,0 +1,33 @@
+# <img src="/img/weblate-logo.png" width="25px"> Weblate App
+
+## About
+
+Weblate is a libre web-based translation tool with tight version control integration.
+
+* Questions? Ask in the [Cloudron Forum - Weblate](https://forum.cloudron.io/category/106/weblate)
+* [Weblate Website](https://weblate.org)
+* [Weblate docs](https://docs.weblate.org/en/latest/)
+* [Weblate issue tracker](https://github.com/WeblateOrg/weblate/issues)
+
+## Celery Worker Options
+
+Weblate has a few [celery worker](https://docs.weblate.org/en/weblate-4.2.2/admin/install.html#celery) for background processing.
+Depending on the allocated resources and available CPUs it may be required to adjust the worker options.
+Those can be set by editing the file at `/app/data/.celery.env`:
+
+The default file contains one env variable per worker:
+```
+export CELERY_MAIN_OPTIONS=""
+export CELERY_NOTIFY_OPTIONS=""
+export CELERY_TRANSLATE_OPTIONS=""
+export CELERY_BACKUP_OPTIONS=""
+export CELERY_BEAT_OPTIONS=""
+```
+
+To set for example the concurrency for one worker, adjust the corresponding line like:
+```
+export CELERY_MAIN_OPTIONS="--concurrency 16"
+```
+
+Then restart the app. If the app does not start up again, take a look at the logs to see if an option may not be accepted for a worker.
+
diff --git a/files/docs/apps/wekan.md b/files/docs/apps/wekan.md
new file mode 100644
index 0000000..12de03b
--- /dev/null
+++ b/files/docs/apps/wekan.md
@@ -0,0 +1,52 @@
+# <img src="/img/wekan-logo.png" width="25px"> Wekan App
+
+## About
+
+Wekan is an open source Kanban board.
+
+* Questions? Ask in the [Cloudron Forum - Wekan](https://forum.cloudron.io/category/30/wekan)
+* [Wekan Website](https://wekan.github.io/)
+* [Wekan chat](https://community.vanila.io/wekan)
+* [Wekan issue tracker](https://github.com/wekan/wekan/issues)
+
+## API
+
+Wekan has a [REST API](https://github.com/wekan/wekan/wiki/REST-API) for managing users.
+
+## Webbooks
+
+When a webhook is activated, Wekan sends the related information within the POST request body.
+See [Webhook-data](https://github.com/wekan/wekan/wiki/Webhook-data) for details.
+
+## Users
+
+Wekan currently does not support syncing or searching users via LDAP. This limitation means
+that a user must login to Wekan first before they become available for sharing
+boards.
+
+## Admin
+
+To make a Cloudron user an admin, first make sure the user has logged once into Wekan (this
+creates the user in Wekan). Then, run the following command after replacing `ADMIN_USERNAME` below
+in the [Web Terminal](/apps#web-terminal):
+
+```
+# mongo -u "${CLOUDRON_MONGODB_USERNAME}" -p "${CLOUDRON_MONGODB_PASSWORD}" ${CLOUDRON_MONGODB_HOST}:${CLOUDRON_MONGODB_PORT}/${CLOUDRON_MONGODB_DATABASE} --eval "db.users.update({ username: 'ADMIN_USERNAME' }, { \$set: {isAdmin: true } })"
+
+MongoDB shell version v3.6.3
+connecting to: mongodb://mongodb:27017/b52e1fdb-5b2d-417e-a41c-53d060a97141
+MongoDB server version: 3.6.3
+WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
+```
+
+## Registration
+
+External user registration is disabled by default. Note that the register link is still visible
+in the login screen even when registration is disabled ([Wekan issue](https://github.com/wekan/wekan/issues/2839)).
+User registration can be enabled from the Wekan's Admin Panel. The Wekan Admin Panel option is only
+visible when the Cloudron user is a Wekan administrator.
+
+## Customization
+
+Custom env vars can be added in `/app/data/env` using the [File Manager](/apps/#file-manager). Be sure to restart the app after editing this file.
+
diff --git a/files/docs/apps/wikijs.md b/files/docs/apps/wikijs.md
new file mode 100644
index 0000000..b4dfa06
--- /dev/null
+++ b/files/docs/apps/wikijs.md
@@ -0,0 +1,9 @@
+# <img src="/img/wikijs-logo.png" style="height: 48px; vertical-align: middle;"> Wiki.js App
+
+## About
+
+Wiki.js is a wiki engine running on Node.js
+
+* Questions? Ask in the [Cloudron Forum - Wiki.js](https://forum.cloudron.io/category/51/wiki-js)
+* [Wiki.js Website](https://wiki.js.org/)
+* [Wiki.js issue tracker](https://github.com/Requarks/wiki/issues)
diff --git a/files/docs/apps/wordpress-developer.md b/files/docs/apps/wordpress-developer.md
new file mode 100644
index 0000000..fee09e9
--- /dev/null
+++ b/files/docs/apps/wordpress-developer.md
@@ -0,0 +1,252 @@
+# <img src="/img/wordpress-developer-logo.png" width="25px"> WordPress (Developer) App
+
+## About
+
+This app is targeted at users who want to have complete control over their WordPress installation.
+The WordPress code can be accessed and edited via SFTP. WordPress' built-in updater has to be used
+to periodically check and install updates. If you prefer delegating the responsibility of applying
+updates to the Cloudron team, use the [WordPress Managed app](/apps/wordpress-managed) instead.
+
+This package also supports WordPress Multisite.
+
+* Questions? Ask in the [Cloudron Forum - WordPress (Developer)](https://forum.cloudron.io/category/77/wordpress-developer)
+
+## Admin page
+
+The WordPress admin page is located `https://<my.example.com>/wp-login.php`.
+
+## Using SFTP
+
+The app can be uploaded using an SFTP client like [FileZilla](https://filezilla-project.org/).
+
+You can find the SFTP login details when clicking on the `i` icon in the app grid.
+
+<center>
+<img src="/img/lamp-filezilla.png" class="shadow">
+</center>
+
+!!! note "SFTP Access"
+    SFTP access for non-admin users can be granted using the [access control UI](/apps/#restricting-app-access-to-specific-users).
+
+## Memory limits
+
+To adjust memory allocated for WordPress, edit `/app/data/wp-config.php` using the [File manager](/apps#file-manager)
+and add the following line at the end of the file:
+
+```
+define('WP_MEMORY_LIMIT', '128M');
+define('WP_MAX_MEMORY_LIMIT', '256M');
+```
+
+Note that the app also has a separate memory limit controlled by the app's [memory limit](/apps/#increasing-the-memory-limit-of-an-app). If you increase `WP_MEMORY_LIMIT`, be sure to increase the app's memory limit. A good formula is to provide the app 6 times the `WP_MEMORY_LIMIT` value at the bare minimum.
+
+`WP_MAX_MEMORY_LIMIT` is the limit for administration tasks, which often require more.
+
+A detailed explanation can be found in the [WordPress docs](https://wordpress.org/support/article/editing-wp-config-php/#increasing-memory-allocated-to-php).
+
+## htaccess
+
+By default the app does not have an `.htaccess` file. It can be added via [SFTP](/apps/wordpress-Developer/#using-sftp) or the [File manager](/apps#file-manager) into the app at `/app/data/public/.htaccess` for `/` or depending on where it is required in any of the other WordPress related subfolders in `/app/data/public/`.
+
+## Cron tasks
+
+The app is configured to run WordPress cron tasks every minute.
+
+To run the cron tasks manually run the following command using the
+[Web terminal](/apps#web-terminal):
+
+```
+wp cron event run --due-now
+```
+
+WordPress' built-in cron task schedule `wp-cron` is disabled since
+it is [not effective](https://www.lucasrolff.com/wordpress/why-wp-cron-sucks/)
+for low traffic websites.
+
+To add custom cron events, use a plugin like [WP Crontrol](https://wordpress.org/plugins/wp-crontrol/).
+
+## Plugins
+
+Unlike the [Managed WordPress app](/apps/wordpress-managed), you can install
+plugins that modify the code.
+
+## Performance
+
+[GTmetrix](https://gtmetrix.com) is a great site for getting performance metrics on the
+WordPress installation.
+
+* To set the expires headers for all pages, the [WP Fastest Cache](https://wordpress.org/plugins/wp-fastest-cache/)
+  plugin can be installed.
+
+* For CDN caching, we recommend [WP Fastest Cache](https://wordpress.org/plugins/wp-fastest-cache/) or
+[W3 Total Cache](https://wordpress.org/plugins/w3-total-cache/) for CDN based cache. Ryan Kite has a
+[good tutorial](https://ryan-kite.com/how-to-create-a-cdn-for-wp-fastest-cache-with-aws-cloudfront/) on
+how to setup AWS Cloudfront with WP Fastest Cache.
+
+## Database access
+
+Cloudron does not support PHPMyAdmin. It is, however, possible to access the database
+using other methods:
+
+* Open a [Web terminal](/apps#web-terminal) and press the 'MySQL' button to get console
+  access. You can execute SQL commands directly.
+
+* Use a plugin like [WP phpMyAdmin](https://wordpress.org/plugins/wp-phpmyadmin-extension/) or 
+  [ARI Adminer](https://wordpress.org/plugins/ari-adminer/) for a GUI.
+
+## WP CLI
+
+[WP CLI](http://wp-cli.org/) is a command line interface to WordPress. To run commands
+using the CLI tool, open a [Web terminal](/apps#web-terminal) and
+execute commands WP CLI using simply `wp`. It is pre-setup to run as the correct user already.
+
+Additional php settings can be configured, when running the cli manually with `php -d key=value`:
+```
+sudo -E -u www-data php -d max_execution_time=100 /app/pkg/wp --path=/app/data/public/
+```
+In this case setting the maximum execution timeout to 100 seconds.
+
+## PHP settings
+
+You can add custom [PHP settings](http://php.net/manual/en/ini.core.php) in `/app/data/php.ini`
+
+### File upload size
+
+Change the following values in `/app/data/php.ini`:
+
+```
+post_max_size = 256M
+upload_max_filesize = 256M
+memory_limit = 256M
+```
+
+## Migrating existing site
+
+See our [blog](https://blog.cloudron.io/migrating-a-wordpress-site-to-cloudron/) on how to migrate an existing
+WordPress site to Cloudron.
+
+## File editing
+
+WordPress' built-in file editing functionality is enabled by default. For security reasons, we recommend that
+you turn this off by editing `/app/data/wp-config.php` and setting `DISALLOW_FILE_EDIT` to true.
+
+```
+define('DISALLOW_FILE_EDIT', true);
+```
+
+## Unfiltered HTML
+
+Non-admins are allowed to post unfiltered HTML content. You can disable this by editing
+`/app/data/wp-config.php` and setting `DISALLOW_UNFILTERED_HTML` to true.
+
+
+```
+define('DISALLOW_UNFILTERED_HTML', true);
+```
+
+## Multisite
+
+!!! note "To multisite or not to multisite"
+    WordPress multisite is a complex system with many compatibility gotchas. Unless you have a strong reason, we recommend
+    installing a separate WordPress app for each site.
+
+To enable WordPress multisite, start with a fresh installation. There are two way to convert a fresh installation to multisite
+- using the WP CLI tool or using the WordPress Network Setup Tool.
+
+
+### CLI
+
+You can install WordPress multisite using the CLI tool as follows:
+
+* Open a [Web Terminal](/apps/#web-terminal). To use subdomains in multisite mode:
+
+```
+# /app/pkg/wp-convert-multisite --subdomains
+```
+
+You can pass `--subdirectories` to install in subdirectory mode.
+
+The command will convert existing site to multisite and also place the required `.htaccess` rules for multisite to work.
+
+* When using subdomains, go to the `Location` view of the Cloudron dashboard and configure a Wildcard alias.
+
+<center>
+<img src="/img/wordpress-multisite-alias.png" class="shadow">
+</center>
+
+* That's it! You can add new sites from the `Network Admin` menu. You have to always add a site as a subdomain (or subdirectory). The
+Site Address can be changed after addition by editing the site. If you set the Site Address to a different domain, you simply have to add
+it to the domain aliases in the `Location` section in Cloudron Dashboard.
+
+<center>
+<img src="/img/wordpress-multisite-new-site.png" class="shadow">
+</center>
+
+### Network Setup Tool
+
+You can install WordPress multisite using WordPress' Network Setup tool as follows:
+
+* Enable Multisite in `/app/data/public/wp-config.php` by adding the following line using the [File manager](/apps/#file-manager).
+Add this line above the line that says "That’s all, stop editing! Happy blogging.":
+
+```
+/* Multisite */
+define( 'WP_ALLOW_MULTISITE', true );
+```
+
+* Run through the WordPress Network Setup in `Tools` -> `Network Setup` in the WordPress dashboard. You might have to refresh the
+browser page for this to appear. As instructed in that page, deactivate all the plugins before proceeding. Cloudron supports both sub-domain
+and sub-directory installation.
+
+<center>
+<img src="/img/wordpress-tools-network-setup.png" class="shadow">
+</center>
+
+* Once you click install, you will see a message `Warning! Wildcard DNS may not be configured correctly!`. To fix this, go to the
+`Location` view of the Cloudron dashboard and configure a Wildcard alias. Once the alias has been added, the warning will disappear
+(you have to refresh the WordPress dashboard).
+
+<center>
+<img src="/img/wordpress-multisite-alias.png" class="shadow">
+</center>
+
+
+* To complete the network installation, add the following to `/app/data/public/wp-config.php` as instructed.
+
+```
+define('MULTISITE', true);
+define('SUBDOMAIN_INSTALL', true);
+define('DOMAIN_CURRENT_SITE', 'msite.cloudron.club');
+define('PATH_CURRENT_SITE', '/');
+define('SITE_ID_CURRENT_SITE', 1);
+define('BLOG_ID_CURRENT_SITE', 1);
+```
+
+Also, completely replace the contents of `/app/data/public/.htaccess` as instructed. Note that the Rewrite rules are slightly different
+for sub-domain and sub-directory setups. The config below is for sub-domain setup:
+
+```
+RewriteEngine On
+RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
+RewriteBase /
+RewriteRule ^index\.php$ - [L]
+
+# add a trailing slash to /wp-admin
+RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
+
+RewriteCond %{REQUEST_FILENAME} -f [OR]
+RewriteCond %{REQUEST_FILENAME} -d
+RewriteRule ^ - [L]
+RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
+RewriteRule ^(.*\.php)$ $1 [L]
+RewriteRule . index.php [L]
+```
+
+* That's it! You can add new sites from the `Network Admin` menu. You have to always add a site as a subdomain (or subdirectory). The
+Site Address can be changed after addition by editing the site. If you set the Site Address to a different domain, you simply have to add
+it to the domain aliases in the `Location` section in Cloudron Dashboard.
+
+<center>
+<img src="/img/wordpress-multisite-new-site.png" class="shadow">
+</center>
+
diff --git a/files/docs/apps/wordpress-managed.md b/files/docs/apps/wordpress-managed.md
new file mode 100644
index 0000000..3f4a213
--- /dev/null
+++ b/files/docs/apps/wordpress-managed.md
@@ -0,0 +1,174 @@
+# <img src="/img/wordpress-managed-logo.png" width="25px"> WordPress (Managed) App
+
+## About
+
+This app is targeted at users who want a managed WordPress installation. The
+Cloudron team tracks upstream WordPress releases and publishes updates. The WordPress
+code is read-only and you have to extend WordPress using plugins. If you require full
+control over the installation including editing the WordPress code, use the
+[WordPress (unmanaged) app](/apps/wordpress-unmanaged) instead.
+
+* Questions? Ask in the [Cloudron Forum - WordPress](https://forum.cloudron.io/category/12/wordpress-managed)
+
+## Admin page
+
+The WordPress admin page is located `https://<my.example.com>/wp-login.php`.
+
+## Admin user
+
+When using WordPress with Cloudron user management, an admin user is created by default with a
+random password and the email as `admin@cloudron.local`. You can delete the admin user
+post-installation by logging in as a Cloudron admin. It is not deleted automatically because
+the default posts auto-generated by WordPress installer are assigned to admin.
+
+## Administration Email Address
+
+WordPress uses the Administration Email Address to send out important administrative emails.
+To be able to receive those, make sure to change that address in the `Settings` section.
+
+## Using SFTP
+
+The Managed WordPress app does not support editing files via SFTP. If you require SFTP access
+to edit WordPress files, use the [WordPress (unmanaged) app](/apps/wordpress-unmanaged) instead.
+
+## Memory limits
+
+To adjust memory allocated for WordPress, edit `/app/data/wp-config.php` using the [File manager](/apps#file-manager)
+and add the following line at the end of the file:
+
+```
+define('WP_MEMORY_LIMIT', '128M');
+define('WP_MAX_MEMORY_LIMIT', '256M');
+```
+
+Note that the app also has a separate memory limit controlled by the app's [memory limit](/apps/#increasing-the-memory-limit-of-an-app). If you increase `WP_MEMORY_LIMIT`, be sure to increase the app's memory limit. A good formula is to provide the app 6 times the `WP_MEMORY_LIMIT` value at the bare minimum.
+
+`WP_MAX_MEMORY_LIMIT` is the limit for administration tasks, which often require more.
+
+A detailed explanation can be found in the [WordPress docs](https://wordpress.org/support/article/editing-wp-config-php/#increasing-memory-allocated-to-php).
+
+## Cron tasks
+
+The app is configured to run WordPress cron tasks every 5 minutes.
+
+To run the cron tasks manually run the following command using the
+[Web terminal](/apps#web-terminal):
+
+```
+sudo -E -u www-data /app/pkg/wp cron event run --due-now
+```
+
+WordPress' built-in cron task schedule `wp-cron` is disabled since
+it is [not effective](https://www.lucasrolff.com/wordpress/why-wp-cron-sucks/)
+for low traffic websites.
+
+To add custom cron events, use a plugin like [WP Crontrol](https://wordpress.org/plugins/wp-crontrol/).
+
+## Plugins
+
+Cloudron does not support plugins that modify the code. Code is read-only
+and immutable. This property is essential for Cloudron to update apps correctly.
+
+Use the [WordPress (unmanaged) app](/apps/wordpress-unmanaged) as an alternative
+to install plugins that modify the code.
+
+A list of plugins known to not work can be found [here](https://git.cloudron.io/cloudron/wordpress-app/issues?label_name%5B%5D=plugin).
+
+## Performance
+
+[GTmetrix](https://gtmetrix.com) is a great site for getting performance metrics on the
+WordPress installation.
+
+* To set the expires headers for all pages, the [WP Fastest Cache](https://wordpress.org/plugins/wp-fastest-cache/)
+  plugin can be installed.
+
+* For CDN caching, we recommend [WP Fastest Cache](https://wordpress.org/plugins/wp-fastest-cache/) or
+[W3 Total Cache](https://wordpress.org/plugins/w3-total-cache/) for CDN based cache. Ryan Kite has a
+[good tutorial](https://ryan-kite.com/how-to-create-a-cdn-for-wp-fastest-cache-with-aws-cloudfront/) on
+how to setup AWS Cloudfront with WP Fastest Cache.
+
+## Database access
+
+Cloudron does not support PHPMyAdmin. It is, however, possible to access the database
+using other methods:
+
+* Open a [Web terminal](/apps#web-terminal) and press the 'MySQL' button to get console
+  access. You can execute SQL commands directly.
+
+* Use a plugin like [WP phpMyAdmin](https://wordpress.org/plugins/wp-phpmyadmin-extension/) or 
+  [ARI Adminer](https://wordpress.org/plugins/ari-adminer/) for a GUI.
+
+## WP CLI
+
+[WP CLI](http://wp-cli.org/) is a command line interface to WordPress. To run commands
+using the CLI tool, open a [Web terminal](/apps#web-terminal) and
+execute commands WP CLI.
+
+```
+sudo -E -u www-data /app/pkg/wp
+```
+
+If one or more plugins/themes are erroring, you can make WP CLI skip loading plugins/themes as follows:
+
+```
+sudo -E -u www-data /app/pkg/wp --skip-plugins --skip-themes
+```
+
+Additional php settings can be configured, when running the cli with `php -d key=value`:
+```
+sudo -E -u www-data php -d max_execution_time=100 /app/pkg/wp
+```
+In this case setting the maximum execution timeout to 100 seconds.
+
+### Disable themes
+
+To list the themes:
+
+```
+sudo -E -u www-data /app/pkg/wp --skip-plugins --skip-themes theme list
+```
+
+To disable a theme, just activate another theme:
+```
+sudo -E -u www-data /app/pkg/wp --skip-plugins --skip-themes theme activate sometheme
+```
+
+## PHP settings
+
+You can add custom [PHP settings](http://php.net/manual/en/ini.core.php) in `/app/data/htaccess`
+using the [File manager](/apps#file-manager). Note that settings with a [mode](http://php.net/manual/en/configuration.changes.modes.php) of `PHP_INI_SYSTEM` cannot be set in htaccess files.
+
+For example:
+```
+#example
+php_value post_max_size 600M
+php_value upload_max_filesize 600M
+php_value memory_limit 128M
+php_value max_execution_time 300
+php_value max_input_time 300
+php_value session.gc_maxlifetime 1200
+```
+
+## Migrating existing site
+
+See our [blog](https://blog.cloudron.io/migrating-a-wordpress-site-to-cloudron/) on how to migrate an existing
+WordPress site to Cloudron.
+
+## File editing
+
+For security reasons, WordPress' built-in file editing functionality is disabled by default. You can enable this
+back by editing `/app/data/wp-config.php` and setting `DISALLOW_FILE_EDIT` to false.
+
+```
+define('DISALLOW_FILE_EDIT', false);
+```
+
+## Unfiltered HTML
+
+For security reasons, non-admins are not allowed to post unfiltered HTML content. You can enable this back by editing
+`/app/data/wp-config.php` and setting `DISALLOW_UNFILTERED_HTML` to false.
+
+```
+define('DISALLOW_UNFILTERED_HTML', false);
+```
+
diff --git a/files/docs/apps/yourls.md b/files/docs/apps/yourls.md
new file mode 100644
index 0000000..b83d3df
--- /dev/null
+++ b/files/docs/apps/yourls.md
@@ -0,0 +1,58 @@
+# <img src="/img/yourls-logo.png" width="25px"> YOURLS App
+
+## About
+
+YOURLS is a URL Shortener.
+
+* Questions? Ask in the [Cloudron Forum - Yourls](https://forum.cloudron.io/category/93/yourls)
+* [Yourls Website](https://yourls.org)
+* [Yourls issue tracker](https://github.com/YOURLS/YOURLS/issues)
+
+## Admin password
+
+If the app is installed without Cloudron user directory integration, the admin password can be changed using the [File Manager](/apps#file-manager) and editing the file `/app/data/user/config.php` and set a new plain text password.
+
+YOURLS will automatically encrypt this field if you refresh your browser as explained [here](https://github.com/YOURLS/YOURLS/wiki/Username-Passwords).
+
+```
+$yourls_user_passwords = array(
+    'admin' => 'supersecret123' /* Password encrypted by YOURLS */
+);
+```
+
+## Custom index page
+
+You can edit `/app/data/index.html` using the [File Manager](/apps/#file-manager) to your liking to customize the home page. You can also add a `/app/data/index.php` to
+place a PHP script.
+
+## Public Shortner
+
+You can make the URL shortner available to all users. Be aware that a public interface will attract spammers.
+YOURLS project comes with a public page that be used for this purpose.
+
+1. Use the [Web terminal](/apps#web-terminal) and set the sample public page as the default page:
+
+```
+    cp /app/code/sample-public-front-page.txt /app/data/index.php
+```
+
+
+2. fix the require_once path in `/app/data/index.php` from `dirname(__FILE__).'/includes/load-yourls.php'` to `/app/code/includes/load-yourls.php`.
+Like so:
+
+```
+    require_once( '/app/code/includes/load-yourls.php' );
+```
+
+## Plugins
+
+YOURLS supports a wide variety of [plugins](https://github.com/YOURLS/awesome-yourls#plugins). To install a plugin,
+use the [Web terminal](/apps#web-terminal) to unpack a plugin into `/app/data/user/plugins/`. For example,
+
+```
+# cd /app/data/user/plugins
+# git clone https://github.com/apelly/YourlsBlacklistDomains.git
+```
+
+Then, activate the plugin using the `Manage Plugins` link in the admin dashboard.
+
diff --git a/files/docs/img/favicon.ico b/files/docs/img/favicon.ico
new file mode 100644
index 0000000..810a9eb
Binary files /dev/null and b/files/docs/img/favicon.ico differ
diff --git a/files/docs/img/logo_small.svg b/files/docs/img/logo_small.svg
new file mode 100644
index 0000000..e8e855f
--- /dev/null
+++ b/files/docs/img/logo_small.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.1"
+   id="svg2"
+   width="750"
+   height="183"
+   viewBox="0 0 750 183">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <image
+     width="750"
+     height="183"
+     preserveAspectRatio="none"
+     xlink:href="data:image/png;base64,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 7SgZlLzsOlNv6rxMkUWtSyRzNIcqT/XvjQPiOpLL++u1k+kz00ek516fUT2LjD6NWGtWjl2/Huw8 oxuqr951Ym1ldDvSzYw8XpmetpRcmTF6fXlzaOsq+SjCAjORcUqqjlffazNS2oxxeTJE/UaLE8mT XVyvbKYfT6aovnJwWYPKpGWdIJMvQtbovXSv7W5DJPV7+smks3LedSYtI6O9zvaT7SPqJ7sG2fnu Gb9qIyOHZ1dR+6zulPGP8NOj+lFj8WwgGzij+p6fzshiPzP9VHJk2vXqe2OZ45+YLFP9t2pX5c8Z y+vFzrPxzJMtk67mqnf927am+KypeuDZeBbMz2T7Sfc5Qrhs2al9Zfsd0U/WWcxtJ2o7s/hR+55T zcoTydHjELLGmw1+2cCY6dPDCH2a0obSN2/O2fpk51PJEJXLjLFnTUfZr3LeXtBX+p3RucgZqwCU DTiePDYv8ieZPiKZVZ9eWVXeWxOv/WhdorVhZVnbamxeP6qdbDlv7aN/TEYms1oXVjfqJ9JP1oaS MdIPT+ZovqO5tbKwdjP9RuNT/UXzGI0lI0+PLXm6w8r1yJiR25PN9pGRjfU3Zf09uXvTsu1JZIy+ pmUMNapv60QKH7U9pX92nS3nGXFk6J7cTAm9OY/Ken1YOSJFjpS8V0k3YQg9Y8zI0NO3ksHT70gX e9N6dDlKs3UjvWP92ryMnU+RkfXjwbNJJZs3RpbvrYf9HM2JN89e+71tZvvdhDxemYzOqPKZz1Pl ifS/Z45V3SnyRHL02orXpyo7dX2nyqPKvt7tPFN/Tn81L9tvT7tTyntxqUfOqOwU3WV1ZZ0/Riqx x8VNwdy2svXb9PrZ/mXl27+YKesI2e21JwOTOeqrt33vEWaqDa99lZcpp8ab1YlaNzP+KXrm1WNo DdLTk5416pF7aluZsmpsHqbObe9aAet60crKHGU23Xv8G8vLpvWWzYD5v6gvdJTNzkPvnGcxZb7V Z699FWt653bqmmfmKVNn7jpkxp+dU+9zWxbonwuv3KmdT7dzz7+OmK9Mv7311VgzsmXs3Lbdo1+2 7R7fdKxjVnCqMmXrLcTnqD0l60LkRe1lofrolT2q781LW99+VnVV+d5+lRyqTFSfXffojpW3RyZW l6VHMno6twn9ntqPqj91DbP9qHVVZbJ9sD6nrN2Uvyotc92mRzrojSGjv6wtry6TMXO9rTnNzkdP XVs/MxZWT9Vty2X101ufnuvMmHvkV/KqulNs0ubP0YlI1kfZziNk5c/U7S07R8ZNjG90P0NkzDhl tegR81cdq9M5WzZ7WuedDNsy7MTWk0PBq8fmRbXP5oKdZkbyLZqy7VjZuK3ytLs6VpfJGp3Oqh2n kj3bHhuH5/zb+mzt2fzbdDaP0fqzz20/Sj9ZWdVPtnxkR0zvsm23Y8nYYVuOydjqcduu1c+ofds2 q5uRtaest4aR/Ud9M53ybIadgDEZmcw9+qICL/NbGbuO/FVm3qMyU2IWy8uedrP21Pp4sqg2a1tM 9p71tSd9Xr7qw5M5stWMXFm/5uWd2rkvC7NdFScz8SaaF9tGlldGup0hyazPKDb3jm8KPE6U1t+p iq6c4BzDyTpd5cgy/fWSeFbfKncki1cuKzdr17bB1idLgD351NxH8nv52bpe30DchtefkmEB3j9r k322ab3rrGQcYWO9+baMN06WztYgWhevvK0zZa1UO+yvJ2cku9d3lNe75j0+MdLVTP0589MTO5gN eTJmfFtmrT052jYzPka1oWTskccrM6qNUb42Uy/qOxrHqZ3zdC8WqbXLxoYe3c3M0ZQy3jxmx9Fb Nnvt1fd0a1KDPZ15ip6ZCNWG/dxrxJnrnjQvPYMphr3JfqeuzWj0Or8sIYj6yuTNcTRT25uLnnZ6 56zXrnsxRRdU2SiIq3ZsMOqRjdX39DWaWyZLVkYlpwq2UZrXhyrXM2esvSi2eOun6mT6ZmXUWvXO j9KRqH5Gnkz9nj5Y2xn/26MLXptemcj2T+081jEle6Rjqi/WtodeO7eyZObf1lGfPZ3O6ElGRlXf 7dhr0FvIyKB7FKO3ji2j5MlOIiuTkTEzBxmjtXVUOvsX9eOleYoerbknc7Yf219kENk01m6PjrHP bL2jfqI6c9NUP6ycJ9MIWTyZsmug5surw+SJ+lM6431WadnrqJxKy+T1ItuPZ98svfda9Tel7lRk dMTT86guu2bp2bF4axKt15T+I32O5mXKfCnM1dvXu51P8a2q3Sm6m5ErKt9Tdkq+Vy9je9m2esrQ 8qMUpdcIe9pU17suc4rNYbRe7qKd0Tq0Sf0bLdeo+ZqC3sDoBWG2EWBlbDtR+SlEibXZG2C9AOTJ NHWcqvwUWdS6RDJHc6jyVP/eOCCuI7m8v147mT4zfUR67vUZ1bPI6NOItWbl2PXrwc4zuqH66l0n 1lZGtyPdzMjjlelpS8mVGaPXlzeHtu6xv54CRPDqTr0pP2o3UtrMjzJYX3PmgbWnrnv6ypSL2o/m a4QMveXnyjQH6kc2c9oZVadXjuhHYXPmeI79sr43MV897fTYXM+P3TPtteXba9aXtQ2vHvN13o+3 az7rg/kM9UOvpVPPjiUD9SMzJiOzWfuDehZcVR/Rj9O9H+B6bSmoOcnUZT+gY/Og2mN9e+WiMbG5 834IruYx82NbZi/eWmd87evdzm3fta0sh4p+zOz1k22bpbXjq+iRYU6snDOGdt2Uvth6Uh//GGmE Nex19h8A+CwAZ9dl3yv8MoAPAHhhw/0oQ2WKHimcLfsuAH8awKUhkm4WPwXg/wRwH/F8ALEDyeQB wJ8H8LkAzvcIe4qN4DaAHwLwSQAPnXKRzXioAepvAbgI4LBfzL3G0vx7ePTvAYB/BeAeio3dA3AX wKtH/+6gzP8d6KCxSPwF+Dowcs+Iim2rHZeCkifK8+S7AuBbAVwmsvTgRwB8DGVuKzJyZPQ5Wg/A txVvbafIo2SsfWTl9/J619HrL6qTiTU965gZg5ovLz1jk15d235mzT0d+2sA3oJpHO93UHjARwIZ M5iqs6zf7Hz0zt2ofLffA9EgU2Sl3F8O4D3Yf6J0CcANcOIeGW/PxE5VrKifAwDvBvCXUILQvuMO gJ9HIRQtMobrOaRofj8fwDeiBOhT7BavAPjnKDZXibsXiCLnCJK/RCHrXw/gKoAzs6XeP1ji/uDo 330Usl5J+10UQvkqgP/n6HMl7/XvHayIPYMi2h7picpasrEgZdr22joLkZftt36+hKIjT2IefgPA iwBuNX14GwGm40xGj5DZ9tq2In9o+1HyMFnbNPuXycvs2hJIkDLeeOyGRI0lapPJwfTEI/y2jpUx y6Ui/WVgmwavHmufwdPH+vdPAXgfpnG8DwF4DoW427Z7N1tsHTPk2uuXlett38rppdl+FNz+DoLK rNOw0T3FYyiBnZFyBmbMbGEzUEqjCKta8Lfg5BOTiKS3iAyNlT/FfiGz3sxZRu1UvB7WvCVKh+g7 +XoA4GUAzwJ4HoV4Pnf0+UHz7yE0Kcv4TEXa1OGGJXY23V5bHWEbPuanlbxzoQiEgiK+HiEDuD14 ZBgkjZFxr6+ofY/8234Ugfc2MyrNymjXHOSa5bUyqPVgY2Fpqh82994Gh7XJ1kP1zWRUNmnre/ow Cp5dZ/pV+jfF1pmteNeZDUVNY76OyeXJbXmn7W9x0CR6BmIbOYm4AuANyJECNVZlGIAOUhny6SlS W+YZAOecdvYR3gYvMo4o3+addB19PUGtWe9anq65j0MATxz9q1gCuAng/SjfiHwQhcxX8l5hyU3m L0gb1o4zbdi6Ni3zt8qyCR2x5A/wZWfEg5H27DyockqODHGYKo8nn5InAyUPTJot26Oj0Tyov2xe etuI1ivbhx1/C68t5Xt71iiLnr4yeRmOpcYbxZ4pMkf1I32LcKz+gUlkBdVknLSA+RhK8DpEOWHy 0BNAImXIIKpzgELYn8TJO3HvUcqp7W/C0ZxiM/BsKUo7xRgsUG4l+zMAvgTl1pmXAPwkgB9GuQ3k vilvofxeRDhAyqk8r1zW7jMncFPRysWIHetfxQ2GBfmcsQl2eqfKKVKfabttw372+s8Q17Z+FH+V vIwkW6Kr+mVyMjDiHBHvbJsZ+bw6Hon3+rXrMQLRWrPP3ubM60fNf8Y3ZWLR3LqZDaRKWwKFECoj igzypOEQwAWU22WeP0rzFrdFZnel0DuHrPxZlE3HSSPtDNEJx9z2TrG/yJ5UqDTV5in6sUA5DDiH 8qPeyyj3gf8JAB8F8GGU22tuwidfqm2VZuNMtM5tOUbeVflM2yPh9aVIagsbzDNjZXVtWe+gjckV yco2KxkZbRte+yxPzUdk/3ZcjERlZFGbm4xtZMg7I3MMSk/Y+Njab4rnRPB0yZJ0T66szbN193Qh 2z6T0RtDti67lnN/gPXBMGG9HcNJwnmUU+tK3JUxg6RbeBOeMVzVPlOCcwDe5MhykqB2nHNI+0nV x9cbItJyuo67wQLFN74NwNMA3g7grQB+BeXHZR/D6gTeIzGs3YiEshNRFmDVSaktw/5uCqqfVlbm 39iYMvPUpmd8aDQvau4tKVZEKluOjVONjcFbU8VNmL4oohutg62r2qt5Hp9Qp622DOufyR1xDk83 PQ4yGh7ZZbrNPtu6iq+qwwGm71FdVi/jg1RbKk/po+1/Caw/x10pjTeok4TzAJ4CX3A2brvA7We2 2Av4SuWleUpxFsCbiXwnBVk9Y/OsNj1tO/XvJhzOKcaArW39rMigRwjbuqcYhwXKIcE3ojxi8zuO ri+hfGuZjQGKtLW26gUqu/4eqbJ9tv1u2id45KmmMV32grrXh9e+/WfByIGVx5Zv+2B9WplsLLTz w9qpbXgbHSYjG6+KFfXzErxt1r7t28qoYraafzYXiqS1aRaKdEdE1taxcdOulydDL9QGwdO73rba vyyvnTerBwyMt6i1yXLnDKxsa+vNBssIpWegJwkXUL4KjnZY9ZotEjMWr5wypjbNGrTFeZRTsJMI Ra6iNbA7UVW3TTslcfsLZUPtOtt0L3DZdk4xHvURij8D4G+gnMYD66dWdg3t+mR8oQqqnu9gRHRT xCMDFQfYWOtfRixtG7ZeO2ZGQuwmiW2OmLw98lgCq9aclVf60pZleqXkt7Jn5FFyRIcBdh493Vc6 qXQ08ndKHk/mKPZama1ebQqsX0VWvbF565DZHGf1tIXdbLK6qi1bN+KHNm8BYMl2e7bgphdwm6hf B3u7svrZ7kRtObaLA/gCsT68NIuTTNwBfVJSwfSvLWfnMFP3FPuLrB2o07DTtd4uLgD49wF8H4D/ DOvPc27JYdZvMltnvpKdyln794iLOtUbARXQvdNX75S2/vVihi1n59zrR82DtzbeoZJnk4xbqDXN 6AyTUY2HxeRI/7y8zLjbdWCEjG0wVf/tdbvGql4kUyuH14bqcxQ8XWb6wGzaa8O2Fc2d6jfSFWV3 3pwpe7BteXPyWt/2Oe49BP0kkvlDrH6E9SqOP13G24l5O7bRafb6HIrMF0ndk4DsPLD0OXVPsb9g hMcGW+u4VfopNo8FCll/GuW2vX8LwN9BeanTg6aMrQP4p4kRiWWnlCzwtbBkzbY9ClYeBTVu5dss 8WAknp0mevZi245OMa08Ns87ifTiprJz1b+qa2VTh2ZsHi1hsvMX6a2dR9sPy4v4g21f9Wv/Rr6Q 2VWkj2ozOgJqTGyOGGnO6K3aNLH+WRtqw+XVUfXVvHp6G/HORf0v2l1E1ycJC5TAcx2r+zWZY2dp aveq+smkeaj9XUJ5Bv2j9ip3ID9P6jRBlT/F/sFbJ+bcVABhDvAU28E5lN8IfT2Ab0Yh8ufASUX9 59muCnq2riJ6jNCxOpvY6FmS3fbjbVLaui0RsSSBjWlJysGUU4THq9Oul21HzS0rp0iwTWObCEaC 2Xg9YsZksWNmc27LeWNmZaL+PMJsPys9tnNu55HJyPpla6M2Sx5RHglFapl+sHJqQ6Cu23RWNrPR Yjpb06ONwpy6AMqtMszpRjjJAXOBEnDaRysq5bbXGdIQ7dCyMtb+LgP4jJntnSRkdsXs7ylOBjzf wQJZhQoup9guDlDeifHdAL4W5YerZ+ATTks0YNJB0rwNfOR7PT0aBUWKKiLCa+soYm3bV+PxSEIE 1m606VLET41REWyPdNq6ke9Q5bxx1M+tjlrZWDtee3aDYkmaIthZfzbH79m46Y1J5U+BXRdPj5l+ qHZse5GNsf6jzU92Dizp7h2v7VNt4lxHqDptd8EnEQcAPhvl5F2NI7Nji4wRJt0zNm+B64ujTio8 PfGcx4j2T7E/yGy0Micdp9gPnAXwnwD4NpSDEEbk2r/q5JGd/qlTr0iHGFHalB6x2MEOe4D1eVDx hM2DLaNOJ1l7bRkmo2ozcwLbXnvr582DTWPyMbkZuVb6pdqx7dmxeLrq6WZbl20kLbI62nNQNaXs 1PwslE17/EutgaezSjcA3r+VLbIPJrNX135Wmzbbn7KRRdsIa5QZ2aOABYB3ogQegI+tZ6dtJzUK TAxMUWudKyjPnn9U4Tm3TNqjpJunKMjqwil2iwMAXwPgewC8A+unROwUlJ2+2mubzk4z1XVbN+N7 50AFdevH7VjUmHtiiGpT9RPNW8YHR2Nha6X68U482fx4uhQRbDUHdq69Qzjblqe3qg4jmzbeqw2A 7aNtUxFHq4ttmv3M+mT5U6H6zegD+2vltXUZl4K5VuPP8DUls02z+covZOR8rfzURWHO5aRggXKC fQ6rN8eOUk41J97iqPpLlPvaLwF4fL5oO4O3W7XONapr0zYZlE8xBlPWKKsLp9g9zgN4BsB3AbiG 1W9xWtJmbVyRU/uXlWMBecphySgossrKqbHZ00FGAKL5amXpIf7smpFPW1fJofxzhhS3n7N6o+J3 tDFhRJ71Z/uJxmTXnxG0Vh5FWJmcasNrZfPG3Y7PW2+lx3PA1rnti82jWiN2bTcymTqZWKOIvrVb 1raSnW24ovKvfbaLbXcDENdt+knEBRQy3P6wqkW08C3YjjAzL5n5vAjgU1DkPKlgTiOzy1VzGAWV U+wXvI2bQnRy0dveKTaLSwC+BOWlTVdQDkQAnxTZzx7UyRlrq8d3z4UN2kpPPTkVeVeEWel7No5l ThM9GbMHLRHZYsS11ovajj6zDV0Uh1gduw7ePGQ2RwwRmfXKt+U8wsjatLqW0d0R8Him2lAwGSNk 4g7TD7WZaTcF6sBRrZenB8qnMV7+2hzY3VxbWV0/KsTpCawescgmixHyFp4iTSUr9W+tfw0lKJ5k KCNFk271Tc05M3qP1J1i/2DXWRFxFoisn8oExlNsHguUWw+/HeU2xIvIH/wowqPK2vyo7iZ9whRi rORT44v63AQ8/5st37spi9Izft76CE8u5TuiMXskdyS8g73Ih2ba3OYGt23f45nRXHtlLewaeeuW mT9vYxQdwvaM0dah6+LtMhTUTvCk4c0oT2zxdlYgfyvs3LFyioSw9lj69SMZHwWo0xq1IYzWILvj PcV+IDrxaNOYM2N+53S99wuXAXwHgC9u0uyhDwuiys4932DTWTmWPgosdrJYoq5ZW6pNVTdjI9GG SXEAT1Zv8+y1Caz764X5nNnIeYSOyVvLePJEcdzOFyvD+mXzY9tsoeaW6YSFWtPMhlK1vQ+HYeyA To2f1Y04Wb1m9prZvGaJfNaWrQ2u6dLC/Fuaa1vGNrIPizoVT6EEGs+BeWNekrotmHJld2Y17Y0o T5U5yVDK3zM/VqnVWp1kfXxUkSE4QGwbUfrp2u8HngHwTQC+Gn5wVWSm/WvrKQJf66jN3SY2eD2k y5NFHWjYNr1yWRLD2vEOkCL5M5tptS5KNo+URX23bagyqn3Pf/TOFyPcrDzLb8tFG1wmEyPr7RpE NpbRrZHwNmCt3GyMHqmO5ioqa8tnykbXSr8j3VlbU1uI7UZsvqfEJwlPoNyGYh2LZ/Ses2ihTiWy DrbOdZXxJCMzj2wNFiRd1VX9nGJ/wDa8Nt1CBdjTdd5fHKDcLvPnUA5HKrLELVtW1c2ckI1A1C7z Uay+p/9z6qhNxZTNsEf2WB+MP/TCG6MnT8+6sPRojhXxYnUypK9nPVQ5tdaeT90XH8rmt8cmRvWr MPpAKeo3JVdE1LsaO2G4hHLift6k211utEgZwhHtdNm3G+dQTtutfI8iMsTeq/so6uejAnYwYNM9 RKeaLP0Uu8VlAO8G8OexekM186n2MEh9u7Y0f1XZts0FfJ87F0pmls7ktnocjaXNYyTT/lOEiM2P LacIJjtYYX0wuVgZFWdtX2zTweTxxmzr2zIVal1YvPfGwvRUrZOqy/pjOtHms3ay49+EnbB+2r4y fSs9YbbG/nrzG8nI1pvxOWY3kZ3bvj05jrVnG/EMs0eIk4BDAJ+KQo49I4h26Kqe/eztLOt1S0Kv ovzI6xAnG8qBqXLtNTOENt9z/qfYP6jTs0zgYv7mlKzvL64A+CtHfz0f5n2bVtMYwcls2Dd5uhj5 p5quvllkY4kIhheLooM2lZ8lE+xU2UvLyqLA/HrmMDHqn43Vzn1NUzrG1i4zbgYJHwcAACAASURB VCWPt34sZvbqs7e+SndHx1Kr4958qTy2OWvbhvnr2ZsnY9uXJc32sMFeg9RfwJ9rJodtZ61x1pAV ypuwk4zHUZ7cwhQl4yQAn4wqh+D1Ucs/jdVLoh4FMOOqYPrFnFcmyJ/iZIHZgVrb0/U9OThEIe3f ivLtpkeAolM35jeyZGRTOjNnI5Ft39vI9EL52F67ypQNiQfpW8XFNo/FgTatZwMS9aF00tOpTFxT ZSNMWaesPtq12LTdZPOzG9fokLXNy46L6WVUVtXPbMyUPtp6C2D1vN2o46ywJw1XUZ7cwhAFALtT VjuwaEcG8MX5XJzs57dXRE486yT2cfO4BPAqgM/aoQz7jCWA+wAeivz2VMLTC6/cLvAAwA+ivHRo 0zgAcAbFF5zF6oVsjwN4A8qPQa9hP2+pOwDwHwH4ZQB3AdwB+doXx0mXDWTstN0SMU8vtqEzjDx6 G5Ul1ses0tTJs7UJW47NaTS3Xlsw6fbai5feRsMj3kxXVHmPYEfz48mv5GJxLbP27DpaB6bvrA3V l5LR2yhnyPAUMDLO9LLNi3iYzfM2eCrd4ylsg67mx5OxLR+Nuf3c/l0CWLQvysgMpu18yq5/3/A4 gM/oKD+VeGbrtOmP2ok70O8Q2OYmCtLbRiXvUzBnI5NtL1O210nPIUpsTaMNWVZXtokHWF/3nrFn 8xdH/w6O/r2IQuTPHv27iELmrwF4C4AvQDmQOMB+4ByAb0Ah7R+AfxBkx+9t3FjAtu1tGllisETO zlmaNx8gfz35FElSfar1UNde/5kyjKhUOaxcrH21obPlVVokR1TXzlt2bVSaZysevPxsHN2U/UQ6 r4h6xs6VrXn9TlkHL156fizTh6p7LP+AFMwKtA3HuGlcRCHvZwHcM3nZic8qTjR3raM4APAkHj3i ntU1m5dxNlFbu0SWXEwl8lNOR+bM1eh59px31O+mToamgBEO5sjVtQoQD+F/a3EGhbw/AeDjAN6K svF/AquXzO0S7wHwUQDPA3iZ5NvxqzX1Ahprr73eBDyffuyEjOR7dh4d7PQQCS8mtXUUye0B68uz Ada/J6O6VmDkPWonw282Zeden976ZP1n1O42uF2k5x7v6qnblmFz1hNnvU1em5fZpPdyGFr+AOuL 5lXah+A4EvWr58soJ1kVWQI15XSR1WuvDwBcQNlQ7Mup2Sj06JqqfxLRE2gyaRlHlAULbHOC95Q1 3KdNRA/YKasiCR4UAfCIbFvmHgohfgnlVPsJAO8D8CcBvB3Fl+zyR+5XAHwegGcBvNKkR6SWkV9F kmz9TLk5iOSxn1X5iIB4uuTpSXSSaeHpb8/cR+W9TVnP4VZm7jPlI8Jm52OXdt62w8ak6nrk3I6H cZwRiMZhyzFkiHe0EcnqTFvey2/zevqxUOOmviDjFBai3KgF3TXO4/jzhoE8uWgNRhl5dqdfcRbl tP1RIe12/FNIe6SnJxVTx+UF+lo3ats7RWDXWdlGrMdJ2aB5QXwJPbcVC/OX5dn6an7bMs8D+HsA vh3Ad6OQ5V3P6TsBfBnW58z6UIWpc7ipcXuETsnT5nvtqXajtrP92DZZHOtp0/Ml0cZEpXvrGpHn aH4yvk0RwH2y87YsI4e9us/0a5T9ZNtRcxCtmdqIqPazOq42G5Fcqh+2KfbaobK1jXgEK6NQJxUX AbxjYl1vBwtxzUhVW+Y8SpB7VDBiB98TsHYFzyn3BvE2L1PXCyZToPrucTJK7gxJU+2wz73tbRLR mKcG1Cl9LlEI+w+jnHb/Axw/7d42HkPxs1/apCnfGc1jW9Yrp4L3KCgSNQUslmTtz/M9ka4x3Zx6 kpzpJ7rOyJ3ZZLRt9PCXzCZj3+y8t06Ut01k1m9qG5vctO8UraJlT4c3oZS7xHkAbz76zEiA9zna YbM0Rqra8mdRfmT2qCAzZ73BpafutuCRjqkbX+9EMnuiztKtPKw8K6f6asFOUttyjCBE9sLkjjbM 24InUzuv3jzDpLP67FRUzW9b7yGAWwD+LoDvB/DhaEAbxFUAX4d1GRdYnx+l+3Zu1AnYpg+bsvJY udTms50Tz2dG9srsj80zk9Pm2TbUhoitXy3n6a0ai+1PzRlr05NJnSjbsp5etZ/3yc7Z+Fhbtl02 z0yu0WBzZvPbPBUrPB1n/dg2lN6oa5vutc3K23XzdIi1sQTKU2XaBfWI6D4QpCXK0xzuYdyPrs5j dWsKm4fWiVlZYPK8ebLOV/VxDuu37szFEiV4X8LmDNHru/3MFNY71WCbHDWX2x4bQyQvk13NgUdO 1ZxlNuEscKmymXIqoDN5rb/J+JaMfe0K1sm3Y1Jye/lqbZiuREEdTdmPYeU/genfMs7BRZQ3ql5D Of2vP7hlhIL9BbT+qHnalL7YOc74M89+vbVTMVoRUjV3EOk9/Xll2br1yNOC9RvxEy9mRLIysLlm dffBzr3+QdIiTgOSPxJRTFSc1M5lFEtYP56NqWtPftu2Vz6K9V7Z1/pgRsN2HEuSDnK9aSxRSPsL A9s8i/LjqfPQ41GLIic26FMt3AFWG4lRqHP2EvSTKbYJawzMkdk8lW/L7JrURcHHwjqSqfbF9M6b C+Z0vKDYllMytjKwcrVsZk2ZjCrA7wOW4HMYzZUXIDOBiMmgrgHgEwD+CYAfAXDDaWtTOINy6v5e lAMKz/ZbZOXcpm5kddnzCbaMtWNVd04cVnaVmeOonEdIlG3YfG/syqfY68ycM3kYObZ1ToKdW1gf rvJ62pyDdpOS2bCx+lEsWCCunxljZGs9cbu3rlwrb9EYeY92c9vAXQAfGdzmGRSy3PvkhXae7F+I a4Zapj7lZuQj3O6hBOnb2M16ZccfOa4oAOwDegIXsG6kPfaVcVpT6jK5YK4juVk91VZWJ7Ob4l0h 2ph5Ze1pm/2syrK223IsKD6Hcr/7j2J1+r5NHAL4JpQnZ2U24z3Ypm9gdtD+zaxP/Wtjbu+JZ5aY enWVDnp1a/3eAwsmn0Ivz2B9Z/RAHThk4vk+2nkkTzYubQI9vjwTU9kceX1kY5NK9+Kfat/rI1P3 WN+ZIKuC664C6F2UN/GN7P8A5Svc+tx0z+A8sJ1gj3Jewfj722+h3Ne6K4KbcQwsaLWfe095doHo tIaV9YJMNC4vOEaEWJ0a9fY9Racyp2bZvF3DBt2FSWvnVPkGtvFvSYRtU9Vty9k2rDw3AfynAH4a xT9sEwcAvhjlkZVnsS4zG7PVTTVnINd2DUaitSO11nZd7LWVmcUeVdf2zeSJ9MT2sRRlbJvZPlRZ O182TW1korLtNRsjk9Ebi63rzUNbdh/snMluZWD2Mce/K6j1VjqvxtOWUTIqvWBrwPQ7ajvSYdse k0nptJWV9s0mJKo4cjGn4B5W92uOwgHKS0vqibsi34wsRbvHnvm6jPJV8kjcAfBJ7BfBzZwE2M+s LLveFaL1V2PM1s+me/169afoh2cPPesyZwOzS6jTlwW5Vj5k2fyzbXppbXrbhrUv5cseAPivUHzp tm+hWwB4F4qvi+YHJl3NGUzZTLm5sAHYrhdbF3bdtqd8HmubkUNFYO0/NudK91p4+m3HpGyDjQVY nw9F/NVcWzm9sVlbtW2x+WJj8cZWsUs79/rJ2NEo2H6ifpUeWNm8PPVZ2V/GX3hz58ntjUeVYX0D KG9OtWDESBnHLkjTfZSXJd1DuU9yhAwLlDcNnumoo5SaGVSbrpwzsHr74Ui8CuA3UALlPiDjDJgz 9drz5vSkwepLVK5C6V1PfQt76lHr2XQbYFVw8XxIFIhZ2X0DOzFRgSVa34jERXMb2QxQvon7OZQD g6ed8pvA5x/1/4kmjZE6mHz2OUrbhr70rEtkEyxmMGTWO4o/jHQvTJ5CRkejuBf5A2bz2TW1YzqP chvq+aN/547+nWn+HTZyt/zo4VE79S3G97F6UMY9lAOyOyh3BNw8SnuYkHWTdm7bQ1N3ikybgNeX moMzWK3lRRTedB7lG7zD5l994Ehdswco63YXq/V6FWW97hzlZRDFXg9qPbNxH8DxJ6kooaLdx7ZR H2/2CsrTCXrItsIBCmE+d/S5GqlFL5mqddo8T0lHn7gvURTz+YFtjkYUuLw0VX8XUKctU0la75hU +Ww7Gfv2TgbUCQZM/pR+PcK+i8MDhZb0ZDdWlpyxDZI6FVREl224WFt3Afw8gE8HcB1jfGkWb0fx dWdRSI4np01X5KXNh0kbDUVO2zyAy9nK5fkKVteuPVvrTF1bzqYrvWxh6zKdzcRRVsezI9VG+/ks jpPzcyhvEH4cwKegkL36e7Ja7ixWt29V4lf7seTvHlYE8FUUTnILwB+iHCzeOsqr5W7h+G9Ktmnn qowFm/9NIDNO+/kcyu9iKlG/cvTv01B44GWsyPsZrLjcEqs1q6T9NgpZv4nCI3/n6O+tJv8Ojn8T Gdmasku2MW7re3YAcFtYHJgKLSID3DVh+gTKAo4KNhdRjPpFlEVj8JyQ2h2qeraNA6wUchQeoCjj SwPb7EVmszOH1O0Lejd0ACe7mbw2n7XvBc1svqfD0WZr9LpNmdtdQQW9HuduySkL1moNFAlSZPBD KIcW7wXwpo5xzsVjAN6A4nNfgE9QonGqYBfZ0Bww+bI20ua3MmZjiFfOIiJ/XrlsP0y/vDVQY/PW 2fbT9t2WrWnXAHwBgM9G+TbpTSjEbwoqkT/E6ndwEW6j6PWzAP4lgB9HeUjEfezGzr35t+mb5nZK NitjzTuHcrDwxQC+HGU9LyX7qtwqWre6Xr8G4CcA/BLWH+jhzQ/Tf/aXEXhV1rb9Wnl2q8xJwb8A 8DbkFzCDt6MsniLum8R1lJOvkWvyIoDfHtjeKU5xikcLSwAfBPADKPe8bxPvBPDrGPt431O8PnEF ZfP55QDeg/G/FetFvY3jHQD+MoDvQ4nHHwDwkwB+FoUYnkLjPQC+FuVty5s+VGjX66+jfIvyQZS1 +mfYs7sWKkn0Tsj27USr4lmUrzVG4g3ofxSjOmmITl/anfISxdFc7uw7wivY7Wk7cHxnadPadO8r PgZ2krPJr/cieF9NZk7FbDnvNNzmZ09UWH60LmwsXvveCZ1q06apupFNbRvq1FLlt2nqr9eHZyue HF77QDkJ/BAKsbjmlBuNqwDeiPWTRiDWkRbe9ab0xJ6aVth1YZ/tONSpqf1s6yqbUXoY+Q4lD0x5 W4Z9W8DaUGtq+1iC64Ttt77z5OtQCNfjKKfqU0/WN43HALwPZcP672FFCl9EuaWmYlN2ruqx+JGN XT1gugFzfRHlRP1bUA5SH8Nu1vMcyu8Cr6Po108C+N9Q+FTlnd44LDJlmQ1RPnmAdQNTX794i7sL PIcygSPluI6iOBmllZMa1Kuwcl/DeOL+8tG/fUCrsB7RzBJW76umXYDpQBvYPQeb0TPb16hxRwRJ bZAyGwePXIBcqzSWrkjcNhEF1bZM1pewPmwZdUjgkSXlq4Dy9f1LKI+H/Mvof5/FVNTf9JxH+ZaT zYOnI55ORaRnBKLgy+SBSGdteX4xylN6ojaT3maZEe0s4ci0oeRT83IR5e3i7wDwOSgE6wq2p7dT UX8AexmFa1xA2bj+KsoPtesTnjZl5zBlFbIcphcsXtXPZ1DuoHgXgH8X5TanXbzpveIAq03gNRQf 9RlYXytgPUZm/JLiLyyur7Vlb8uwDdg8a1S7JEo3UO7fvo/8fWcRnsCKuHuOrEWGtKu2WnwmxhP3 G9g9cfdIer2OHEWUtylHMxXRRsSTNzNfmXbVZsE6e7vJiGRXfUanBGqdMmuXJTe7RGZTEs1RLaPq t+lsQxWRXo9E3gHwvwP4RmyPAJ3Firw/28jk2UYLj0RuGpZEzW0nO4YFKdcz5sxGJyIOUdtz7NPT 7wWKrjwD4MsAvBdj3zK+TRygnCi/DWUD8rMop7wfQTmQVKQQmGfnIHlezNgk6hjOo6zpVwL4Emz/ CVcRDlBkegpFzs9E2WjUuz4yvr8XLpesv7r1TnoywXcXeIjVr7evDmrzCsou7xDrX11lNipsZ5wh bguUXd3I+/WXAH4f5XaZUY/NnCpHi8wJcgajTpx3CaYrU8ainLuFF1inBv+etctuaqP+WuzyxJ0R cZDP3hxFm6XoVDdKV4TMpt9Fuf/2LlZP1tgGLqIQmE/g+LxVOUGuvXHbsm36yDGpDa/tj5EjW86O JVtXETF1um110uvTkzVbl62X0sEWKv0QwF8E8G0oMX+Xtj8KCxTyfh3lNppvw4q8A+PtHFhvD6a8 7WcTqP3Uk/b/Btt/slUvFijE/UmUH8p+Bwp5vwe+DhXt/Ee2pPj4sXxP8VuDZA5x10azRHk++egT 5c9EUSDbF+sf8INCtCmquIyyaTiflDGD51FIe92A7IrcslMyVsaTz5vDXevhFGQIbDQuj+BYm2V1 vXXp6Zv1r9LmYlv9ZMECo/1sy6o2WrTrY529Iu1Mnp6yS5RvL+vTL7aFyyhfjdt5U/MVBca2nCXG I3XFzrHNs/1lNnLqMELVZelW95h+tm1aeZltZ+uyemozYOsyW6lphyg/VPwJAN+Lcsh1Ev2+h7Mo J7o/A+A/Rvkx5ibsHKSMLc8+j8YSZR3/OsqYe9+js0ucQ/mdwi8A+C4c/4bA6rS1j6wteRurpd1d qeDgGfQu8TzGB5n6fFA1NxZ2YZQT9/A0xt3uU/FJ7Mev1jPjV2S+p419gSIbGVtRY442f8w2I+fs bRSi+fbWa9Ra7dq3TAEj4C16CGTvPPbql+rj51Ceb7wt1BN3oG/zqLAt4mHbHymvkjuzfhEiOefM HzvEisai/tZ65wF8PYC/hXJLyaOOQwDfinLy/gUkf5Sde9hGvP0ClBPr78T+/zZB4QDAX0IZx/tE mV6/kLLP9gUDa5lB2ia/RslggXKrzOgg8zj6br1p5yE6RVF4CmUXNxLPozzSaN/ACJ6aQ+8kwWt7 l5hqJ6pcj51l9S9r8739t+Xn+oc5c7ZtsFNgQPsF7yS4h1i1bauTtow8LX4N293wn0HxuZeP+q33 9jL5T8Jm3jtRY/k23X7O9JXJU5sCzz+o0/sIyrdHZdvrBYpufA2Av4BywjnyG+l9xhWsiOBdFJsc bee79J3vRHnM41dg94/tnIvHUe7LP0TR1x8HP2lX6D3oXQDlx6k9RtXTwaaxRDlt/wOUr3hHfc3y OMrz1Fl/1rmyMi2yZOwtGH/i/pvYjxP3DGyAmfoV9651EtABc2q5tuyIgB71lSmbIf6bWgt1O8Eu wL6CZiTelmmv7doqAsfKsLKWcDEZlXxLlKfL3EAhDKMPExgWKL7vKsoPZCO5QdLsXEK0sQkoIsXk sOU9HWFtAnys9jraKDL9YXoclVXXVv8im2V6vQDwbgDfhEL0tqGL+4R6z/sdlPcctE/Qm2vn9XOF ii8jyX1d08dRHq/4PqzfknxScRVlPBdQ/OcnUF5+qdZFHUAwfkn9vnUG3ucobxe4h/Lj1JGn7o/h +K0yUZBssWj+AeuLApNey27qxP029mOdWrAA3CI7t239fRijWnNmQ4xQsPFV2KBny3lB0ds4KCg5 GAHwyqqxZ2RR8k0ZzybB/EKrw/a6wiPinl3Yuqxc/atIHrCuM7XN+1j9PmZbOEB5otch+HxUWBII 8HmxNjaKfDAoUmzl9Yh3+5fFDKtPzD8ykgxRXulaW87bAFmCDZOvCDycMjbtLIDvweuTtFdcR7kH /CkU21Cxr9fO2Vq2ZZgejcBZlG9Qvhkn92lACpdQfrD6N8AfKW5ty25sgXUbYmsH4Pg97jCZyjj3 DS+j7HBG4RCr56wCnBR5pwY2P5q7Bco9niOd002UnV89wdolPELFCLw3tywAqTrbhiLNzJF6ZdmO O9OXRUTMI3j9WucyYuyZNA+70AFFIFW5no1mRMw9WTKfvTY/ju2+KfAAwFux+tY0Ih8RGCncBDLx U43Fay8TM1T/vWV7dFPZsydvNBaWfhXlnvZ34fVL2isuAvifsXqKzig7j2xqtN1cRrk15u9i/GOv 9wVnUR6n+91Y/W7HwvMZ9rOsnyEHKtjuC25gfJC5gP5nidoTCoV2I3QGZed5JqjTg4coLwe4T/rd Z7DAwU5sLaL53jaU/FGQZ3lqXOxUz9Zl9dWJpZWBnZD1kAXbtkpT8qk8VXbXUKdfC+TltKea7aGJ twasH+9kTsnTlnsJ2/2B6gHKUzTqb66y4/Psw9YfDWaDnuz22togI1VT6rJ+58oT1W3L2PqeH2Lt XUa5ReabcQqgzMlVAF+F8q3UKDsHKdPqwkibOYvyzcnfHNzuvqL+LuOZJo3NbXvd5Tfsm1MV2g72 6ZQTKAHmtwe3eQH8qxzr4ECuLbx5O4sSsEYq80Os7rGycuwDojlkp2Wezu2bI7AysvGqOrasl17T WsOPdLPn2wo195nxtbJ56LGl6CRzV/BO3dXa9+p/RgbrxxURzOjAy9gucV9g/VaZVi4Wf9q6bdlt 6YWVR9lftI5qE810XK2fum7b9OS0/iNrl57vzfo0q6dvA/CnUW5Z3RTaW2xvoDzE4c5R+n0A/wrH 32B6AOBfQ9HPQ5RvAS6gnIZfPvp3AZt7nOEhgD+L8rb4FxvZgOl2HvmqkXb0eShz9tSAtpYoa/bK 0b9bWL2I8/9DmZsFypz961it1QUUH3MFm3+vzSWUe97/COUQ5Db6eE0YQ9QLmDwH2ebvkjRVGW6j TM4DjHus0AUAbybp2aCadXz12a2jifvHURS5J/hvC14AnuI49m181jDZxjjjbFmaR2CWJN9rM5pv VY4RJbWxsO2qtlj/qpwFO33aBSIZWyLWs/lQNjyFxGX9120A/zfG/ujfwwHKqaJ68VMPccxunkZg SrvZ9axptp+etIzOzZ3DiAdYgunp6SWURz6+x2lvCpYopLxuSCvp+90mrSXv97BO3M80/84fyfoY Vg+zuHJ0fenos70nfS6eQbkL4MM4/vuTqXY+YnOWwQWURz/O2dg8RPlx7kso6/UCgN9C2cRUEl83 XfWpVGeP+ruAsiaXUQ5J34iyZo9htV6bwNMob/d9DsA/QezzWeyGSXsNB01mi+z1PpCmO1jtmkfd O3Ue5cTdczY9jlaVP4tyb+dIPER5m1f9VfOukXEsGdKq0vYNmYBng1lEpj2SzNr1yvVsnDKn+NmN AEuLnFhPuV3phXWwajPCNnR23mxddSpp21TOXn1mG6u2jwco/vQWCgnZBi6h+N1DrG7zi+RmpDAi kqOg5rGVx5b3yimfuAC3h2jNVVusbEYXvXFk+mIbCFvnbQD+BMbqXNXlFwD8GICfRiF8d8hY1MHH A6x0kunXEoUEPo1yX/7XYXWye4AxOIPCFZ7G6t01c+xc+RfW1hxcJ+334AGKH3oWwD9EedziHaxO 1lu0ctdHYd9EIc91rIcoJ+/vAfCVKD8ord+kjMQC5T73bwPw8ygbD2YHtk7KNlviwDquf738XaEd 9B0AHxrYdn082SXocSrypcDyzmH8SyXuoTz31d7jvitkTmOiPM+J7FoPPWSdHiOfWb1j/WTmhDk9 m+cRZltvJHHunbddo3WsbD4soVQkp63HNiWqbGYNvLK2ryVKsHzRaW8TeAzrP0ZU86n8bnbTNxce uVH9e3PepqkNqSK8bIyZslav2JiUzqnPakwMtuyfQyG+o3ATwH+P8szwzwfwX6L8/uuO6beVRx1E 2Hwr+w0APwvgP0fZfPxVAP8Hxr5L5V1YvWVYIWPnrEz7z9OrXsyJz7cA/LcoevFlAP4XrL/rQY2l 9m3zH6AQ+R88avfzAPwDlNP80biAcm//d6H4tWgjxcZA7UntBtnJD3MA+0CaFli9pODPDGz3EGXH 9ItYV+jaL6AnGOK64gzKPXIjTxfuoLwx9WFUcItQZLsnuPZuiLaFBcoafnSHMuwLXkE5wfBI1FyM bm8umJ9k4/dIvWqzd5xzCav15Xex3fvcgWJL3tfpLN54/lcRsH1CpAuKlEfl5vjYqbqkyK7Ka/EE ymnyiHvbHwL4IIDvRTmpvdVRl+lTr50/RDll/RiAfwzgW1CeqDIXjwO4hvLN1F0jZxZqYxJdbxP3 UHjX30HhM3X9lIzRxlDVBco3MX8bwE+g/Lbi6zH2nTrnUX5o/SMoY7lr8iO7pbY45VaZOcFhE1ii LPTHB7d7gOJIPgR+v/jUsdd2LqKc6o/8iqYS933ZVAG+M+9tYx+D8ALlK97XOy5A20jPurHTaHV6 tE9QgQFYnwePnLcHJTDlVZusnAoI7ITHYoHVD/i2iUrc7dqywyJ2kGL93qZ1hK1VC5bOTtw8f50d g/oGTR00qTSvbpTGZGGHXWwN341yq+vcW0tuA/gIgO8D8EtY3VbB5LKI9MmWse206a+ikLQ7R/8O Ub5dv5AcB0P7qOqPEFmY3MrO2ZqPPGmfipcAfADltpgPofghu4litu/lA3oO7h31eR9Fd14B8NdQ 7rYYcZvTAmUz+rVHY3qOyGPXSsW811AFywQUJtA+kKgaZJ6LCnaiPlu4fdKBN2ZlwMphXgLwmUMk XeEOgN8w/ezDGrVQgcvmt2UYKWGBat/I3OsNak0zp1aqLc/B7RqMxNR0tfFg/oAFpkw/LM/bDET5 bbm72D5x/+NYf5Y7I4GWyLOAB3I9EsqvK7311lbZS8ZOopjEdM/KF0HJbPM8PVb91fQvQtm4zcFd lFPuH0L5QaCSLyOj539YG2yulyjfWv00Srw/i3LIM+fZ9PWJd79G8rJ2XqE2u7vyrS+ifFPxj1Bu O2rBDihaKKKrdN6u602s3lJ7EeWpMPVHxnOxQLkb5P9C+XHtHZPvcRcqv2d8nhD7hLpreh7Hd2dz cYhy4l5PgBhZYIYckcpa5hLK114j8SpWL6OKZN0WmNO3BE+dFsGUa+suRdopdge2KWuhdDLalEWb 4l2jtfsoCDIfYccP6OCk6lr/ZGVR82bXrLZzF+XJMttEffIEIyDqdLFFLq8O2AAAIABJREFUz4Zn LpSPaq9ZOpPHI092DGrMak3Z2L20qI7asNiynlwL8vkZlNsK5uB5lFse/ifSv5UjktF+Bqbb+RLl Pup/ikIM5+A8ym1Fbd9T7NyC+Y9t4h6AfwbgfwAn7WqjDmidRZPfllG6fB+FWH8XygbiFej56sXb AHwuCufzNh71s/Xrx3R1yuLsK0l6gPL10b1B7R2gTLZ6RJkXNLxgU/EYxjzXtEX9mtCTaR/BAnVG 9n0hbqdYh9J9SxAZSbGOWPmcXes0IyKMpDHS4LXF0tV1SyQ8e2jLRERygeJHbzvtbQKXsbq/1Ftb j1xG8zUKah4zBFhtsNhmhRFEjyirvlldprdMp1Wbtm82/61+WtsHSpy9iHJINufe4ldRbkX4+4GM DCrWWJI+187/HspTUex9zj04B+AznPweO1ebQ5W2SXwvyu1NHzTpzDbYGmRjQbQpXqLo0ncC+AGM /YH++wC8V8jk2bmVb00hmaK2+ZkAtA0wuYHy9dEco7A4RPlaqt6XxoxigfX58T7Xv5dxfOc8F6+i /LL9tiPTLuDpkwoW2X+2zil2C7Zh9dYf5to6qMim9mHNq6z2NM6elFSsnZ7geCBpNzNsHlVAZeXs HNqTJ6/ufax/pbtp2B+nsgDN5qyFmtvRsBsmttZMHvt5iXVdUWvNxmxthRGc9pq1yXREncAyIm7H GhHB1o7PojwEYq4t/yhW97RPlceWsfM1187vAfhVAO9PjEfhLMqPVOfYeYXHD7blW+8D+F8B/DDW SXI7/2zTacsyfW/zmD5DpN87kun7MO6WwSdRnjh0VchRr5k8C1uogu2GbZrd4WzKKUZQTvvjGEvc gfJDkErcrTHaeVFzaMtdAvApmHevm8VNAL+H1YsjlFPdBdh6MV3K6CBLU47qFNsFIw3eulnHbMHK 2TZ3CRb8rdNVG49aVhEtpstR4GV9szqMfNn+HmDct5dZnMPqxTVqk8fSog3eJqBksiTKI0+WbEfy qnZ75yci5Ey2toytG/WnygBlo3Yd8/AAwD9HuVWm/SEq038moy2v5muunT9EeXgEuz89iwMc/2Zi ip1nfAvzu6NRf5v4/Si3qLTvb2jltzLBlGM6bGNLZrNr819B2WT9IMbMwyGKrr+XyMjkAni/C5u5 SUc3Gmxgz2J8sHkj1n8JzoiinXCQMhWPo5y4j5zrV3D8WaTewm8TGacHkmcNjxkjm+9T7AeitWDr pk5XovRdwm7mvYABk6+CvZ0PW4dthiCubXlWlpWpxH2bc3wGq7d5o5HJ2/AzeHVGwVtjm8/WL9M+ W2u13vYQg82BJ0O0EbCbTPbX9qU27O31Gcx7SMMShbA/h+PfNlv52ZgjO/Lmb6qdv4zyAIkHzpg8 VOI+x8698lbmTeJllPvaP4DVk/taGVqZrDyU0JK0tq7ynUoHHqDo1o+gcMsR78a5hvJDbPvEmsiP H+OczFiZQkS7512AKdhzGH/i/iTKV7hqrphSqN16/XsV497yWnEDhbi3sjGCvG0wosXmh5Vv4c1t VPcU24Hn9G2et3mzUPm7Xm8VEFgeoJ0zIwAeKVUky9q+JRuqDuvrIY6/Qnwb6HlNfJ0HRSYhrkeB +fZM33b9FJFQ68IOhtQY1Yle1Dcj2KofRbJsjGS+e4Gy5lcx3ZaXKD8kvIXjL+ap8OSOyKCSe46d 1/cjTH0xU52z2t5UO1fjZwdom8B9lN/j/Y9YH4OSycqldFmVs7rJ4oqV4R7KtyQ/hDG/+XkM5YfY 3hOUrL21ci+B3OmVZ9z7gHZhb6OQ15E/qnoa5dYWpvTKWL25WaJsBka/SvwllF+se+u4C0yZH6+M F0z2RSdfr2AbWpYHU65nzfd1vdmpntpkMvLVttFT1yNt3hpk5KlEY1uoJ+617wqPYHhlbaDeFFqS YAm9R55b+Vg8sbK3RJIRYnSW9fpUeSBl1TWTB+bvIco30FPxEMDPYfVK+VY+1rcnj62r/NhcO7+H 6T96bIl7K48tU/tk8qhxRxuZkXg/gB9DOdFmm4Ro4+DFBM8mvLpq03IfwH8N4MOYzy0XKKT9S7G+ jnazofRquc2F2iTaxfoNlNPnUbiIsku6BH/nDXDFZ47sszDmDXEV9wH8PsrtMkqWXUPJoxy9LaOc 0yn2E1HgZOUy6fsERkQivcxuUkDa8oJRW7fHNmygs3W3eeJ+QOTwNoMtLCHdBrwTuzZGMB/nxV5G Dts8RRqVfPZatctksf1aHYtIkkId4wHmvZRoifII5PvNdTS3Ska2cW7HPMrOH2LMLb1z7FzVV5uY kbgD4KdQvilhsjBdtHrHNrUKipCrPhiWKE+ZmfP7hIpzKG8Z954R72343UlYYF2R2fUuYWVYopw6 j3xV9wLAp6MQ7YhcWpmYYtVfhc992USLl7H6qnCfCa5H3pWeAesnWDXNnvLs01hfj2DrpNKV/1C+ CCJ9H9ZckSwWEOzJSs1nJ0f1LyMR7PTIzrkKwswv2b6rnNu+VaaSd3sqxoKtJVUsyLN5GAF10tde 288RUVIngW3a1PKsfk2P9Lct55Eq1QdDOydTifsS5aT9FRzX02hebJ4aE4ulI+wcmGdXo+182z70 /Sj3jLe3CynbsXOu7NyCbZjVxlWNf2n+fRiFuL8iymdxFsA7UZ7Jr97OqvRvAeivJSMjZtfbhlqE FzD+jX+Po9za8mxQTjnFNq+S9hFv5Kp4HuUrHKaQu16nCqVTLCCrU6VMcDnFfiDSReWY2jy7Ocv4 pW1DbSqWJI8RryhoeJtSL83KoGRk7bTXU39ENwX2Hndvw4ImzxIZpkejEc1vCxYHQNLYODwd8cpF 6fYzcHyuPN8cyWV1t4Ud86sobzmdQt4fHtVvT69b2ZQMbA2sjIrcjbLzuTo5184jvdoUmX8I4Ceh b5Fp+1+KzyB5bH1Y7PB0w7MToPDKX0W5fXrO7V0HKHzyKsq3D3eNXFaWNbnt6YZS2F0HRwYl84sY e+IOlElu70nvmQ+7IG/C2MdAAsUI7GZlH9eM6VKWjKnxeMp+iu3Cku1IB3sOA/bt4KBCHXpk/SYL QF4aa1sFMyajJ4Otu8RubpVR84AmDybNwiOgI6D69ubSEgOIsoxsRLJ45MaT0dsYq34t+fHIRgvW x4sAvt3Jb+u2bUY2wcao9IRt9Lz25tr5CEQyejJEMm2K8y1RuNkvotwlwPSnjSFWTvuZ2YiyAVam fmZlbX6V6cMoj3T8UujT8gwWKC/4fBmrdw8oPV0bo9rptP/spGZOGDYNb7d5A+V+75EvD7mK8sgq NgdWDrvzs3M44tXOFr+O45sVtvvcJZQutflw0tq5ZXPcljvF7mCdJltn9s/m1bYydfdFx4H4FCeT 7pHQaKxesIp8AiNGwHZP3Nt73CuYj1+SNCSuRyLTds+6eeQk218WrE1GsjPIEEe1LpagRX1nymbq qjnNbpZG2PkIzLFzdm03LqPxAOVlS7fAifYU/WmvmT57nJWtdbSJeQnlaTjPC1l78DlYPbFQxT0r CxVySf6xvDZtF4hOEF7BmImteAzlxP0Mjs+BVaAl1pXB7ug+G+OJ+3M4fuKePanZFmygtXOo5qpN 8/TS1j3FbhA5Rbt+LK9th9mS18YuYQMEOz1hm/n2Wm1KbT/2mgVBTx5vnWy9kbf0Ragvj8vMI5uf TCAeBbaxBLlmY7HlMmtvy9h+orjc6oRHYqMyUd22DSu7vWbzx8Zu9TayI3XN2sqk2+sRdt6+IXgq 5ti5am+T/vQegH8IfqgaxW9vk8nayNh9pE+qrxdRNiBz8Q4U4s76dDcQ2YXaR0KknARQTp9fHNjX AcoEXzPpKpgwJ1jTnsTYW2VeRrm/3Z6M7cuaRYErYygKc+qeYjwY0bZ56rpNV8G2fo7a2BZY4ERz vUyUYYGGjVeRkFYO244t17azEP8qapk5Xwf3wr71WflUNg8e4dqEniii1/Zdy7Tz7RFf7+AiIpA2 zSPRIGn2gCSqa+1UtbfA+jxkZbFzxuZnQdJg6ikbbPu2pK/HhnvtvPKJORhh52wdK5TeTcV9lAPV T+I4V7EyqX6ZP1R+z6vLNsns8MLK1+ImgF8An7ceXEN5WmE9EFZzvaZDByYBTQNssAAf3C6gdpYL lNtlXhzc3wUU0v0JHJ+fLBZHbTyOcadYSxRDaN9waJ3krslNheckmG55eugRu1PsHmo9FEHx1tRz Zvuw5p78IOltGtNv1jYjL4oEevOYsSWLbZ64PwB/OkgFC7L1MwvWm9QRj0x6a87S1HowIq1Ihq3L ynm6pvpmsLF3iu57sti6Xl9KZjYXqg9P3rbsCDs/RPnGfe4LGEfYec8azMWrWH+SDOtD6THjD55d sLayaZGN3UHhXa+g3I0x9XCj6sF5lI0N82mWyy2A1T3uSxyfFDUIm77rwKmcwE0AvzO4r0rca38s UFh52rQzKDusM6TuVDzE6lW8Stl2DS+YWf3z6vQGxVNsH1EAVP4jCphZPdg2VBBv870TuChwMuIG J42dOkVzq2Svm4Ntnrg/gA7ANk1Bzfdo2MMutta2LDu9q/Xbvwoe4VB12dxl5lbpo9WxLDFifxlY GY98srYy/bTomTvWbo+dX0C57XbUm9NH2LnHHUbZzy0Av5Iol91kWXjjsrqkynvpbd2HKOT91zD/ N0CfinLqzvpr046t0bac3KZhT6BuoDwWcuQTES4CeCvpN5Kr4gyAtyfq9GAJ4F+Cv8xhHzZWPfDm JXKsp9g/KN8SBcGThCjAZYJBm9YSo/aEpWJpyqg01Y/1k17aLg4AWuJuocaiNi41jdXdBNhas7ll 9exYVLu9+tTbTkaeCo/kRYTeW2NL0pW8nj9h+m3LZMBsa66dPw3gC5P9ZzHVzpEsMwL1aTIeMn6R beI8rsPmAeDzkClb0x6gvERq7pul7cs9MwcAa8bMFpEpbmTU24IyyiXKfd8fG9jXJRSjs3PF5obJ eA7A55L8OXiI8niie6TvjMPZBqyOqflh154jzAaiU2wPPSdtbN2sg7Zt7asfUoRk2fwLnTHWg1FL ZNBc27o2cC3A+23TbDq7rn5rW2hvlbFjVuNTsm8TPfLY9axpLM/7hsqSXGsbrEzbVySPHQvTPU8X 7RqodcnYRmZurZ7YMXvyeLGSfVMx1c6voLwx86tEmV5MtXMVk5mdjcBDlBP3T4i2I+4SbXxZex4B Z9y2tRWlD23aAwAfwuqNvVNxBYW82/ZbrG1mPWNrldE2si+nua0htYNbouyEPiHqTcEhVl9zKXJh 56WV7wyApzDWGO6gPJ6o/qjLw67Wi82HzbdByXOQ9rNX/hTbBfMfIH9tGbaWFvvoh7zNBQucKkDa /PazDUKqjiI0NoB5waEts0Dxedu+x53pDJM7E1w3SeAz66fKRJsLr64lG6o8Iy9so1D/enPJNgAM zD8zGT099NKVrrMytu82TW1mmI7ZPmw/GTtfAHgCwH+I8vzvUZvhOXZuP9d67PNc3EK5H9yS3GiD lJXLS8vECMV/mSy17YcoTy68g3l3dlwG/6GytZdjODCFskFzX9EO9C6Ajw9u/yzKC5RuIk8clijz fA7lwf2jDOI+yg9w269qIpK8SzBDsM5mSf7aPJD8to1T7CcY8Y6IQIXyT7teb49AsGAA+ONmJCAi Ve1nRQiVDCogLlEI+1nR3qZwHyUIRvLaubZpNb1Hx6ZC6YDNY74rQ7wjks/6sv2wdpV/VWmeP47k qOmMGFtyotpV5Rh59WRQ8nvzPNXOz6CQsusAvhzAV6P8zm2ETY2w81rGtjGaR9wA8HtOH1YuNt9s jdnG09Mx22bNt/HFW5+2zB2UDclVTH/E98WjukyHrOyvXdsfHnkGCRw3FjjlNg3ljNvFHX3iDpT5 ehrAB1FOh6J5qp+rAT8myk/BHZTnt2ccGRxZNw1PPjR5IPnMmSsisyssUX5h/nrHK+BONdp0eToR rX+W1GwKjBwp3bXBUJENr7za6IKU9+RlZMxen0Eh7tvEXaz/2IvNg5W7IgrSm0JmDZnMWRJo+7GI bCyz4WU2qWS18mQItEfQlbzR/Cidj7gB++zNV4+dH6Ic0p1BOU19GoW0/0XodZ2KqXZeofzwaI53 C4W82/Y8wmzlUvxB+S/Pv7bwNi4Z3/ICymHuVOJ+AcC/afprZaZjOjAFIa5V3jacYkYGtih3UN5w NRJnUF6g1H59HBkPUO6Pvz5YljsAPgq+Hp6T3TY8+dTuPpJf1d82lii/pXjz0bW3oYycgFcnKs8c tKrnEcBMHxl52jLe+irbZX30BOltwQskNrCDXKuyNkix4Gbn0AtUqoyd/7ZufWzdNnEL649Fq/JU eEG+pisyMBJRP2xuma5niIwiYp6N2DYVuVfyeHkRGfLGwWI3I2ZsXhV5j8haRkYGNV+sjwXKRvcJ AF8M4PNRXrBzzWl/DubYuW3DKzMCt7C6S6GFx51aRLJ7aVZnvJioNmdeTP1d8BdKZXEOq282WXyl sdmeuKsAnk3bFaxRAeUr19soO6IrGHOv5iGAdx79zYy9lnkM60+kmYvbKI8j8jB65zwFnu4wYsLK KV3rIZLbQNYRZRzHFHKa7ccr01POq+ONx6ur9GFf1pihlX3K3GXLsnmKSC1rPzOXZzH/JTG9uAX+ hCwgT1RBym0CLJhHm9tIJo80MOKRGX9E3jLyKAJsZcrqVtumImmZujZtjt0x0s/qX0Z5F8vjKHH9 DSi3SlxD4RnnUPjBATb/KNW5du7lj7Shm1iduNe20dF+JkZ5XIFtJLPEn9lkm/4i5hH3uuE7j+PP uHfnnymWFxgiIrVNKKVtZXuIcrvMRYwh7gcoxnkBJcjUHyWwnXk7jxdRduKjsMTqJQC1D48MguTv AkpvMhsMdXJky+wDop17ZtfP9MmOTwXw3rVX8jCZM/5AnXwxR5vRB89B73LNo82GGoMi3LatjI+z c2F1Qs2fldO2cQ7Avy363xRuQ/+Ajekdg9KVbUPZhbVLTz62ppa895KziNwqsh7ZuK0TbTDUuJVN KZ23yOi7baP+PYOi95dQSPnFo8+XAHzKUVo9Ia23kp0zf7eta3PtPLKREbzhDgpfqnKxdjOcUulU 5EutzWT7jPQdKBuSuY+EPIPCKe3LqSwHeA3qHneQvy32gQR6jrs1+mcBPIMyMSNwFmWHfQMl0DB5 7OeLGPuV2V2UXWzt31ujXa8Vm5dsIGEGue96CWiH6eUD2jFFzkoFZzUf1glFwTxqM1s/CuZtejQm L3hvE96mxwZDds2CZtRmhqh5BwkR8V+gEJFtn7j/EY4Td7V5ZfakNv+bJFKeDdr1UptpdQAREX6W 3iOr6pNtQiM99tqqUOPNzM9SlPHks+Xq5/Pm34Wjv+eO/p0H8MdRyPrFo/wLzfU2X0jmYY6dA1q/ NsEb/l8UzsI2nNGG0Oqk5/9U3TbN4xRK99q2rNw3ob8lzKJuGC2knUdPldmHwKiQ3UF9FPOftWnx JMppd0vc1Vwdohj9lYH93wTwMtYfQ8QMYx+hjNbCIxfAfo/RgsmclV+dnnhte3WjOj0yZE96QNI9 qICzj2seBT61abOfGdFQc87qZGS0abadWu4sjr/Rbxt4Feu+OruxYQFe1R8BRQ7ZmjISz3RFbT5s e/ZaEY/2s5oTb248nWHlFAG3dRihUnMZ2T0b8wKrU/EzWD3W9CxWt7l8OsoJ+lWsnqV9HvtDzKci Y+fexi8bm7NYohBb+9sV5i+9WKVsQ/nQzBiYvUZlbFnms3pRf9CssGZDB9ATYmGdT1R+k2C7dOuw a9pHMH9HZPEWHH8LmLf7vYzyWtuRT2h4BcBvN31XMIPcB5KjnKsnr0rL1N02mAO0YMFSBWLVh9d2 W5/Nl5XVfo76UPmZMfTMTb1msjI5duWDKlQwisi8bSMiSWqOvPSpdYESSEa9lj2L9lYZNo+A9iEg 6dvQjWiDFo3Bxi9Wh5Wx/Xh2rcp6OurpbUavo3XptQVWhtWppP1tKE90eSPKQdsTR/+2+V6CTWKO nXvlR9vMHawe89qCxR629mqDF+lkmwaSbtOUXKyPtsyrWH8SVi8W4L83ZX0DR4WjHYeXtyui5DkO u+jPo9zWch1l9z0Cb8fx0yjP6V1H2dWPxEtY3d/OiM2uiayFnRcVfJVxMeNT5XeB7HwzYp0JnHDS anqt2zMnVnei8hEhsG1Fwd0L5MoJ74tOA3wDpkhXzQNJt22ofqI0L71tP1N39O19GbyC41+pWznZ hrCmV923dTelM0y+iJxbebLryvSI2U40X57sTJeZ3jJ52nbZGrC6rF9bzpO5JVFPAXgPgM9BIexP oMT6Bfn3qGCunav1YeXmoBJ31k/kB1VMZPrD7GBJ0iy8jYHiVm3afZSD4YeY/m3NAcqG0uMGx/IO sD55aqDKUHcBL9Czgb6IYtyPD+r/Osp9bwfgLwxBk3YVY5/fDpSNyEukX6Zg+4BIt7IGHDnefdBH NRY0aYxosLoqUNu0Noi1yMybcoS2frRBtHKpMVgoMsACSw/Z3SY8fwRo4tazabNgGxlFHFWamu8D FOK+zRP3myhBvn17agtvA6SQ9RtT4ZFpkGtbrpUxaleVzcqYnSdFrK0PUORd6aRXVo2vzW/rXkE5 RX8a5Wlt11H0tb7MZtSbSU8C5th55N9HoH2pGos1zMe3YHHOs6FoDlSs89JaOVj6A5RxTtW7Bda/ CWKx4zUcgA+eXdu0XQZMz8BtmSWA30L5VfMo4n4Bq3vibjvyAIW4jwyA9wD8Icp49omce8jolldO EV2LXemkdS5AbD8sTRE6RQJVgFR9RAFcOTj12cpc27DlGLmxfdo22UY86mfbsCTNIiJBEemxes/q ZttSdZnsF1GeKLOtFzA9RDmIaO+DVURjIfLQpLXYlk+I5rRFpP+2TZXm+YWMPqj0jI22srTrwgig 177S4zb/ACXmXkd52c0bUE7Vrx/9HfXgiZOIOXau4kj9O8J2HsKP3SrWeZtdBusro/JWBttX26aH BQpxt7cC9aDqOJOB8gn741TWYJZkbRtsx6VkegGrxxGN6vvTUMg7+4Fqq4SfjrHE/QZWzzvOKnP9 vA+Yq2veeHdN4jbVXjRf7DQjatO2kyXUEbKbE+86Y9u79j+AJieKNClyohBtUqIND5NFlW3rPI7t /jB1ieKjH5g0RUS9OZyqt71gpDlDTtScq42/XUdPzyyy+sDiVpvOiIwao1ePrSOTo5XhEoo+PgXg CwF8BUo8fVTuVZ+DqXbe5rVg+XN5QyXuGdJu8xiiuKCIv+0vw0O8DUSrpw8xhrirtVmLA1N+nMoa 2jaUE7Qy1bxPonwVOxJXUb6y+wTpv/Z7BuOD4PNYbUKUgm4reGXRBh0WdNU6ssCDpq4N7Lsao5Kx RTQGVSbqt9azsrT5TBZblvWdkSUzht65YTqwj8hshNQmxNso2fF7dqLSVVsZwnkV42/v8/AQxUe3 X6lHZCMzD9vQH08eJVemnlon1rct7+lBZn4ysmaIWIZUMdT8QwBfA+AbALwbJ/+JLxVLFF2fs/kY Yee1fC3Dys2NqfXWN6ULHmex8tm69lr5UFufXTOourafEcR9Ya6VfEvg0fhxakT2lihB4RXM+wGB xRNYvVSJOaolyo9YRz8L+VmUsQD+hmWfoIhIm8bKAVo/bRDY5Zg9G4oCcDtmT5dVm/W6thXZqbcB 95yjl2brKhnU+FgdRS4iGbcJu3G06Ux29TkqD6dMe63a8AKarfM0xr4wLsJDAB/H6lYZj1hGm0s1 D6zsHCi/y9Y0ksuLZ7ZORp/gpKs0Tx/a8QB8HqNYlN1ULVAI7WUAP4ZyO8x50edJwj0A7wfwT1Ge RPJXAXzJjPbm2rm3BnDS58jbytUrj20nU5f5RtZWK1fbtpLTjkfF3SweomxwvA1JK+PCewHTvsMj dnYMDwD8AQrhvTqo/ysot8sw1Hl8CsXpjMRv4/iJe9uflWEfEOlURDRVG2qtdwlFTrN1VVv2r7cB qP2yNm1g73HOXrmIdANcXm9zYsuxfna99pE8dTPWXqtytp22rkfkvGBt5VJ+oq1/iHIP8cj3TkR4 iNWtMl5gVoFTbYAsRupLa4v1msma8cvWFlXAtvW9ufFs26uniJDSRThlvH5tG7XeJQDvAPBtKPez 7+JtpCNwG+VdK59E+Vb+V1C+9b+B8rSmubqoNmRAbOc2PSozB/ZpKaxf27fSvykxX/lWFUdZ2faa tX+AeTq6xPojJZVfXwLHT5+zziK7M9oG1K4TzXXFDRRDGkXc61MXzqM8DcHuwADgzRj7C/eHKE/I uW3S2brtmtRUKGVnQcYzIFUX5HoXyDjG7Di89lTdKGjWPEsmbV6vXfdsTKydMl1Va+rZ+a7g6a7a dCnSYusB6zbSpkFc1zQmk+cfa/n6MpptPZljiXIa+RJW98N6ZQG9GcoS+BHwdNZ+tuVqPiPQXhxW dZVOWHky9s3a9ObQi8G9unoFwBcA+LMop9Hb+nH0HNxDOUG/ffT3VRRd/kOUg8JXUDalz2M1/lG3 oU218/Yv28C1+XPRklrGkXqgbIORflbXlmVpFopbWHuacyeHutVGbczWfsl6LJNVaK436RR74Tmo mncDhfS+e1CfZ7D64cwdcCV6E8aeuN9CGYd6odS+rEeLaKesyBvTMS9I7RpMziypigiaN2ZvTpWN qvqe8+uZ5wzJVMQmqqPI/y6IvCdDVq8ZYWP6kdngtu15duORxfqOim3N530UclOfkqXWt0KlsY0R C9Cj4a2bzVekwktv27DlorY9MhLpG0Ok322ZnvUDyiHYe1HuZ/9S7M/97EusHvdX/z1o0m6g6O/v oxwMvozy0sdXcXwjOuVQxMNcO/fIPUj+VFTiHsVyz7f1bExY3chnevpu9ZyN4wDz9LXqWHvtbdzX Oush4/tAmKxjtpPc/q3EfSQuojxP9jkiE1CI+6iTqyXK/e334JNmXTKIAAAgAElEQVS/fUOWWDIj 6SXpu54DZT9Zu1KOzdsItPlTNtOqrhdwM/1kNl02PVM+2nRsE14AVCTKEktLNoHj6+EFaNWmbcsj dVb2L8J2nyhzG4XoMB1QMs5NGwFlk95GTp3asbpsE9N+joi61Qlbh5GDLPnv1TEvrcr1FQD+Jsrt pfuEO1idmn8SwO+ikPMXj9LumPIZOx+BuXbO/mb0oReHWP8tJcx1pCdWLhUz2rqRT2Tt9Ww02/QR t8p4m7y1WMA6VDtmz/C3DeUcYdJaGV8E8BuD5XgM5YTqx5u0JYqyXkEJgKMeW7UE8EEcf7MgsN1g NQVRsKplsgQo2882Ea2HTc/UZXkeKbTkz7bjpXlEQPmHiBAwYgBSjqWxIBRd7wJe8KjpPRtsW86z E69db9PD5qymHwL4amz3iTI3AfzC0WcVe1QwZeNk87ApPWFEm8nDNlqe3CxtTl0rL7NL1o9XF1jX RTUHnjwXUU7YfwC7ecTjPRQC/tLRv99Dua3leRTCfgfrt3B5a6zKbAJT7NxrYxO2cgGrN9Z7cT5C xPesfXjzogi6uo5s7izmHdDex/ENYLgObCfUginitpWTQTl2tmj1832Ur2NfwdgXMb0R6/NwBuXJ DKO/7vs4jt8mM4cwbguZHWxm9xwR2F1uUCKbYGPI1M0GWDunKoh4pzHehjxLGrJ5HnmwfXlrvMs1 r1D2ZWVnhIeVUU5blVftRZsw+/kcyo8Cz2O7tynUE/fsmNu89q8ljnaDuQlE885IPfMDSh+8PG+j bu1L1fP6y9RlMjKZVDw6D+AZlJP2TZP2Jcrh3XNHf38H5eT8JkpMbW+Faa/b55CrdnvtfASm2rm3 ufLI61ScQ+FDXlt241ehYlpkdyq2ZEg/033lP6rfjMYXoRJ3b/N3bLzMQW/S0W0C2Y3EEuW+s+cx lrhfQ3E67Y8LzqB85TfSWB+i/Dq9fbtghbeD3Je19IJvhSKIraEqQroJ5zgXbA2yMnoOl31uodY8 s8FQ+T1yK/1kzlf5G1tuH+FtmLwA4JEuRfBYULPtKPKUmcPzKD8KPBOUG4l7KMTppaPrVifa6xZq HrwN0Cb0R5EytmmI5GGbkMzGIyIXbKMb6aU396ydFsrfsc0VUG4z/UqUQ65N4D4KSX8eq2/cK1m/ iXKQ1z5YQmETdj4XU+1ckXpbfxR/OEDxKWdQ1sP2p2TxwMqqTWNNi2JbJpayuTuP+T7TnriHcrUv YMos6CZ3kD1QsniLt0S5zeQTKL9cH4EzKD+quYTiCB426W/BuJOrKvuLOP7INJDPmZ3ithERFIDr VIb4emu+LWSJhi0XjZ/1och71L6VR22GssTRBgxVjrXL5MnKF/WzCyg5FWlj+szq2vJesFb1WXu2 7iHKYcb7sN3T9kra7xKZLLLjA9bndBMEipEBu4Gw62Y/K1tTPiEi8MwOrQyRXjCf5G1SAD6vzE+1 9c6inLZvQuceoBD0F1BuL/1lAB87SrPyVXnY/LVl2/SRdj4XPXaejQdt+gib+TdQTqYrcff0GOBz yMbD5jQi3y2ieJvhUhcxj7gvsfqWx/Yt0d4qowJA2wH7uwtEMqj0OwB+fbAs9XT9No4T95En7vVx aW2A84L1vhD2CiZP5CxtPTa2fdmgeGOwZWy5KKizPK/fyJ5VwLJBiZHFnrXKBi7VVo8v2gd4m0xv LhThU+NXRE6RVUWu2rqXUUjUk6S/TeIlAL+JnC4xvbXlo43+pvSlVx42jkj2iEwr+1PE29oyI01t OTZGb4MU2fnjKIdb1zEWD1AeRPHfAfhRrA7U1LxWeH4Y5HqEnY9Aj52rmJLRzzm4gEJw1dvrlS7W NFs2IrZZuSO9zdjAY5j32NJ7WD1wRNnMmp3vyyOXtoXbKDvwkTiL8ojJ2u4Bytcnb8M4I30V4+U+ xSlOcQoAeCfKC2+2jQ8B+MUd9HuK3eO9KA92GIkPA/gRAD+IEjNHk+RTTMNllId1PBcVPIG4jrIp mYpbAP6otxK7VYbt7Fn6LqG+9gHWd0Tt9X2Ur8vuYtwb2Q4BvBWrubyA8rrwkZuiuyjfFETjtdiX E0nvNKrdZXsnOpH+7VIn7clYdAJny0VjYvlqTpQ9W1kAXUdByWNPTFTfqh912qxOxnbtfyoi+2Lr kjlVAUljZezpGIN3wrtEIU9fiPEnnxFuAPgtlIcFsFPMCu/0NtLbSB9HInvKH52Ye/aa1QW25mq+ PDmydaMxs7R/ByVOjsA9FLL+Myi3xLRPXmNji74N8NaAodfON4HIzgGuY97YopPtLC5i9W6ISKes fBWZ+VRxUsHzGxFqX5+OeU+UuYWyybSye+Na2FtlmHDR513A+7pEfe1TcRfl3rcnMeaHWIc4/gSZ ixjnkCrqvfk2sIOkbdpBTAFbL5UGxERu204xghcw2/RscAT0mrJ5YHquSJCS27tmacr2IqIVya3a yQabXUDpnpfG/JTSDVu/h4x6hOQsyhsq34Ptv6XyIyi3ytQf2y+g15ilq8BtkdncjILycfWzItww n7N+ECbfymLbyvgEJo9H/rw2FYG8jPJQh7nvC1ii3P769wH8GMqJ7m1om2GyeePJEEMEaREfGQXP ziNbsfFptJyXsP6I2YwOq9jXsw413YszDMwGGa6hHNZOxU0UnbUyuZuQ6FR4k4o2Aiy4exuMqpzP AriKccT9KsrtMXdQlPQNA9qtqM7pk801K2M/79u6RXKzdPW3xTYDc4QMefbSWqP11jTqJ0OIvXnr WSsF1n5PEFMy7ZNPigJh+3mBdYdsSRLb3LB8FcQsSVTy1HLPAPiT2M1Lb/4FCnFX/loRH7aBzGx4 RkMRPrXBZXZt21IbtZpn15wRz7ZNO19snhgiO81uuBXpfRKFvM99BORtAL8E4PtQvrmpvzFTY58i b4bwAnxdvM3ZXDB98vQBJM/TNZs2B48B+DQiB0xaRiczMUvNt6f7bK09frlA0d9rKNxvKipxV7pH 5WUvYPJ2M9t2jgrWSCqY82Tj+yiALx4oz1kU8n4b40/c72H1/PloDfZlfVp4+qU+27JeHdXPNpEd oy2jyqmAF81Db7kp9b0A2LZlx9HblgqccNJ3gWwQYrapCIPqJyJeGSJWcQDgO1Fuldn2i2+WKL/Z eQnrBKQdF9MFiHIwn5U9jQIjTt7GwyMAbCxqvEoPorVX+qjaYL5BjQUiT+n3M5hHdoBC0j8G4G+D vxHd23wsTLo3N1HaVDufi14ZK7yxWk6ldKoX9R73A5QfD1s57DyxfllMaO0h4oEwaVYG5YM9f3QZ ZVMy5wD4Bgq/UzHY2vwCwLLNsAvoOSVvgreBtn+lrLZM/fcQZZd+l9Sbg3egkPbLKD9MHYWXsfpR hzdWtT67WqMKO/9tGlNMVhZBfZu/bUTyttdWRqWrwHp9VZ45Hda3J4sN3lk5vPn3fEvUFlvbTJ+7 wALrwQPNtUpX7dgydl4Yabf9e9eXAHwPymvmLwtZNoWHAH4W5XbF+jSFFkw3MvPFrrepG1YHGCFQ a9fmVTBC0rOB9Ta9njxMjyN52rGq+m0/X4j5t8n8LIDvB/Brpg9PH5Q8is/Y+Rtl5yORGbPyG8yH 1HSmv1NxgHVeFM01k6stp+JZK7c3PpCyyjYZDlEeKz73ro3fQzl19zZLa/KxBT4psE7SOp/2b4sl ChG+i7HjfQvK1yaXMf80ocUNlLe8WSil3IazGIUogPWOaddjV86OEeRIVs8BRXXUdU9bPf3YPjxZ vNOfqE0vfRdrz5x9FDijtFY3VEC2RAmiXJtW8QSArwfwzdjNK+YfAPhHWP9BliIg0ZgVoYxI9Ai0 /bTEQRFiVl9twFrZmZ6rOVDz09axeqv8bEZvbRueLdTr65j3m4o7KLdafYD0w2Ruy6h1sXpo13Wk nY9AZOeZtChOjZT5EsrTq1i/mbEoXbU6z9bYwotBnm639Q4BfBHm6/ENrPtCxQ9ek0dNVhQ41MJv E9ZJKocGkvcqyoSNPHV/CsCbAHwqxj5R5iaOfxUYGd2mgtQoKJ2qsOTFls04q11AOcipTjIK1m1a Jrh78to2rBNkdWxbmf4tWcicSiqf483ntmDnTZ3cgaTbgMEIn9q8WR/H/ll5lij+6asAfAPKc7S3 bTv3UW6PeT9WT/4AkUORwDZNEUY7B6q9UfA269ZGszK0ZVvyyNaV6QKTS9W1/tZuQJjMqn+Wb/s9 xPzbCz6C8rCGW6Q/9deOS62HrdPa5Cg7r+lz4Nm5iqEtPJvbhF+4BOBzof2+ksubyyi+gFzbNmue R/btnBxg9RjwOXr8AgoXtS/VZP0ei7ER+bMK5+XvCsypRU79IVaTNgrXUB5xdWVgm8DxV4ID+zX3 U2GDBMANUjkkkDrseptgJMuzGRVwbXtRf20g8siDbTMjY2RXIHmsHa9/9plds7b2yQYysrREydZV RD7S+bZt20/9fIDy5KuvAvAXALwrIesmcBvlue0v4vhLcZguW7Bg6+mkqjcKynepMqpchhzXct7h VISIMNk8jxSxeqwN+/kAhcCdEzJk8SEUHWL20sLTCTufWcI6ws4XGPNgDHXAoUjr0ny2MSuKy3Nw AeVWmfoY7owu202Tt0bLRD7ro61rwWL58mgM11C+OZrzreWzWHHQTP/HMqZi26c1Xv/K2Xh1fhOr HfsI1Hu4nhjY5gMAf4Djr2quUGPd5OnSFEQkjyEyQlt217oIcOfoydWzPt7mpu0zalMF1GzAy+hW VobotEXl74teVzDCzNamfmbp6iTJkjZLcCMZKmm/CODbUV6ytCvSDpQDiH8MP1jbIM2CeVuurdeO 26s7Ep5NWFkjwmLX2+pHRD7YuJnOMP1hhyVtvprbaBPQrkt9Atvcdfg4jsfEVn4mhyqT0TW1GZlq 50CxyTmPEGQy2DGwscLJZ+1nymVRH+DxBIoetESYyQcc1x1LoL06Hry4o+KLrXMJ5bR97p0VH8f6 i8JSnKF9AZOqxPJ6iNUmoIxNGRMLis+i3C4zEu+Mi3ThBZSnybRfpXgGahV9H4gOc2jsmo3L22l7 TmvbYDJaxxeNQZWBSLNt23ljMrT5S/OZlfP6VDJnxunNDZMv69i2jQzp9IIBI0demtcmC3CPo/yA 6ntQAuYu5+4GyknpT4t8z+6ZrvbUteVGILNe3rqxel6diLwz3wlTlrVty7D22jKRPN5Y6on7HD18 gPJo5HroltUTNt/ZOR5t5+dQHok5B4q0MkIPaDk9vjQ6np4B8FcA/Bco69j2o9ZAxcNM3bZ+G1Na qPljfdXr6wC+hQ+xC7+E1TPcM/b72vgORAGGjGFvC2zRvDJtWi3fGv8ojA6Mz6PcKlORcVBecNgF VABQ5RRx8wLxrjcoSh89Y4So4zkNlr5w6rP2bBueQ1drYNtVMntBnOUz+do85ZB3CW+jZTcj0Zy2 dVTgYm3a9GsAvhTAn0J53OMVIec28UEAP+XIYceixmah5tKrMxJsfRhBsPLY9bXp3liYbig9Ynms TVYvO5a2D1ve2uzcF33dxPFHCqq/nj5l66oxeW1Edn4Zq1PnOfD02pOHlfNI8kicQbld7wewIqze pqjF1Hhl2wDJ89bY1r+CcmfFnDdNP0QZ/wvQv7Ns12ZNrjlH/bsOmBUZ0sDK30JxAncx75W1m8QL WBF3S4DU/PembxqZfhUJzBD+Nn3X5ATIz7NHtm2+1wcLUEoWL0/1kV0DJm/WFj35al2v7V2hp+9M kEfzOSJpbdohyknmEyjPyH4ryj3tT2D+Y/dG4CWUp4B8BDwQqQ1he83mqaYzvc8G4zlQbUd9erob yc2I8QK8vO0nItfZdiOZGGpbc4n7Hax+HxHZkO0fpjzA52PO5i+y82so9jkS3vwrW2O8yTs8GYFK fN+J1RNV2n4Uf4vG5629dx21yfB2AJ+Peb9RuI9ykHEXRZdZ/FYbGgBYtC9g8siDcia7IoPRInk7 sZpW7x+/gXm7p03it3H8W4Gss20/73qDlZHZls0EFq/cthGdfmQCNctXwdiOmTmjLHlhtsH68gjX Ern+soHWI2v7sN5t/8x/qrSMvEwHFiiHLAcoJP3M0b9zKPfKXkIhBG9BuTXmGsY+2WoO/v/2rj3k suSo/3IZxnUdPtdlWWKyLHGJIUKIUUMQTXQV3++3UYIoSHxE0aAQRPxDRERCFPGN+MZXEl9oMBqT bNYkbtYkJps1xrhuhnVdx3Fdx3EcxvHz0z/qnr391ff7VVWfc+5jZm7B5Z7TXV1VXV3dXV2nT58j 2LF998O2/fk8oDYHKV1XJup1QCR7pb8xOq2zrOhX66YWQNEiUeVHTpUvH/kKC0x/KdNvsfB8Gc+K nVV8BoZXkWOAU7AtMs8T+WPAt6vnHflwDLfN8207B5wG8Pmwl4vPNfSV3pQue/p95tt6/spOboWd jPN8IVMVLgF4I1ZOe7bQhL/2W2U8+A6y7YlyADWIt3nekL2TAdhE8gh213E/i+OOe2Xwzgx20xB1 Rt9porqotG3XcYF5z+2/nuEqjn90R9mqt4cMbxtwGtNfMKvA4KyfgUUrb4Mdp3cHgI+FOQF3bUiW MXAJwO/AvnIJ8EWYmkBbUI6tz/dpIOlzQMX2MoepdYzYYiSqj1qos2tVvrqQ9jK39LJyc0OrsyhA MEBFbp9eScv4svIHsGj7J4ryvcDaOVtoMdmU3C3dOeHzALwF9vGs9ljYAVg/V30CiO2P2bjyGRm0 6c9f/qaeHHgJdiRuuwhlIOWe8nKqwt8ERI3hJwDfUK3Mj8D2un/mOoUdCWdhC4vLy3vVkVS7RIa+ aWCDS3vf4kURA1/WX2+6rgvYKvzfN8z3WoWfgZ1u4iFybDJnYBtj0GkA37787UHDIYBXwiZoduxZ FGRQbR8t8NREv04bieTJ5KgEYjwNj8fqXsWNdKtkYfJUAixD2hVBswoHiBcdbL5nQaFWpkxf7Drj y/i8GMALMc9RkErGyMZ8GeX4+7Jzwy0AvhgWlHwtuB6Zr+DrUvV3orbJ+tEAp2Fz19RTuS7CfM4H mjS1ePf/T9Z7ysupGf46IXPaAd0gLf6j4F8l3QV4AMed9szwWrxdcNZbUAOKN9ho0vL5bXtuYoLe wzyQTaAMN1qA75qt78Fg+NjSr8AmaBWdVX1aOUdoykc4m3BAPB+VHtVB6SXD8byUbtXYyORh9JQ8 EV60CJ/quD8Nq7PA/bzP6sh8A4YT+RPR/MXGKKaPZwH4ctiLjXNAZDdKD8oGMh2tAz4F9v7eO7E6 k1854MoZb/MqZSO7jfyHmwB8N6ztpr4P+RDsJf0Wehcb17Sjk62Ks2gCYBPKY5g+mKwDHsRqW4GX XXW0ngjApiBbTVYWJMO9WphFjv8erh1Qg6zPA8Hbw27BWQC/CNvHyj62pEA5H6yf90zwc8OYQFY1 SDbkD0GJNk3NcdGi16er+WSg0zOeZm3g6T1RpKvgNMx5HyLv2TzBgkMVR1w58O3/kBeNUQuY4/cy 2NfVp76c62lX/INojlVl1z2X3gLbdvI1OL7zg9mTb8+KjKzfH+F4+3s6Xh9HMEf9OQC+FtOPMj2E Oe73EFkr/uqTaSxKURVsVybMBU52HjbAMSO+AnPe5z7PfQ54H8xxV23CBi21ot4l8PVhMrMJS9nq guTtYXeh2laVSTJa+O1he/Ao7Aupr8XxE0AAPUEDJydNNWmzKGNLcxOL+cEWvTMwAHMSmKPF0pVj oeQ4Au8PLNDB5Msg0qkKyLTlhuurOH688Vh4JuxYRSDWE9O1kjXKj5x9kLz2/hbYC+Nf1cg8B2QL sCwf4H7fJufQZwD4Sth7OsPxmMphbfubcspZeeZPeLwo0v7MpYzPxfQtTo8B+BvYVhkliwcqfxQN jQjtEqgJ3uP4VeiQfhHA+9cj2mg4gsnUvsg3gHLih3KRAW8DosFUdUQmO5s8NjVJ72E9wBZjzB6U A7JrY9EezFF/K+yF1LPLNBXdGvLg8LxD7mm0+C0oR2UddqLGqPaepTN51AKl5RM9ifDpbGET8e8p w3wG1l+ZXIcw52XqOP0JWL0gGDngyiFtnUCWx64Huq0T2eKxOt0Mi9Z+P+yF8nWc9MSCXG2ev1a6 jxZ964Ihmv0yWDRb6cePC2yMiOT1+BVbXsDa7G4A35HWpAbvhL3vc5XkscX8cH3Cfx3TOLvqJEXR BYi8BezR3XvWItE4OIK9dTxslfGDglqRKloZzi4Am6grsu8dt2sP/MJLOXWsP2cRpD1sH94E4LeW /wO0zo6P8mURTwaRcxkt+uYE5ZBXHGA/BylHQjmIkaOseLOyXt5WBuYQZvVRkc0h/Srs6fZwFvtY +ByYw+c/YsT4exkZRDbIbNbjMd6nAHwZ7CuhLwx4zw1tP6sudFVQk5WZG24G8I0AXgI7HcsD6xus DapzQbYoHtJuBfAtAF6BebY3HQJ4A+xrqUymqJ+fkO+Uy2CrGDWJbtNp8nJVDY+lXQDw3rkFnACD 094C07WKRKl22VZ7RfaURZN66Lf09rDbkPVbZifKIdq3+e7AQwB+GhZx923LxqhK1JpFy9iibwA/ LmbRuLFQnRdVVDcKgHlbj4Iaao5maS2u6ltZkCTri96RZ07Sg7D9zWOPMD0A8Okwe/vjGeTx9/6a OcKRXZ+Bvcz4pbAFxjqg6vtEzm20yMwWO3PDywF8FOxJ3budDP6fycf6SOT0qz64gEXafwh22uBc H7B7NSxAfFHI3d6z/GN47aMJVolocNnmhJlF5qI0r5jheJ51DfC9cBm2TSbSb+S4KKPYlfbyaf5a DZxRWlt2D7sPqi0jpydbqO9he3AIG0d/HMePfhxAjUlqQgXBidIYTVV2LlAyeDtmzhOra2X+iXhU ZGvliZwaNa8qvlG/ZHV9EHbKyljHfQE7C/3cktYjTXq0YPQ02L1qP7/YYTocvmD8bQC+ALY/eo6j H1sYvuvQI/eQ7/FbyBY964bbAXwJVh+Yuy+QaQA2X1TqoBa7N8G2YH0XzGl/GuExBi4BeA2Ah3H8 S6leZiXXCVs91WQCubHvEgyVVBGa9t7nt9dXYAPA45j+1vAccAn2YioQd7IMdqUtmW2piJFqOzYA qbQ9XBugHIPhn0VEVPoetgdHsPHzTbCXUS9AO6ptGqCdWjbhKgdTyeTLzAWftPyf4yXL6wEehn0V t4VofAeAd8Ecozsn8L0DtgXl72BHjl4CtzUgn0eVw8TKegd+gFthi5FPgW39uA0nt/LMAQusnNsr Lr3SH9pFSBSQ3YYf9GwcX5gMR2Kz8YA6tIRmNKa0NG6HnfrzGbDz9m8R9HrhCqx/3A/blq2CqZnD fqxd2oi7Mm4/YFYGzk2AcvDatKxjts77B7H6OuE24TJWW2WyTsaALWiG9G1A1D7RatiDKhutwPew e9DaJ4s0sLZnbd2m72F78ARs3+YPwoIfqh29QxBNphWoRtfmto+XLH97MPgl2Et3KqDCHKfBiVGO dgUWMEfve2AO3oOwRWN0ilELFdtjc42345tgW3deADt95OuxHoe9hdMwR/MxnHzRkcno04HYkW3b bdNz6jNhke6nAfhh2Avu7TsR3ifKnihEAcBhEXQGtuD6apjTPledj2Bj4i9iZZsDRDxYgOqY3Mr7 90RY5GtXJkxmYGrwVk7BIWww2YXz3C9itcdrACU3g2zVvWlguo9kidrK54+d9PewPYgmj0qb79t7 d+ASgF8D8H2wyKt3mPwkGS28IodbOV0Z7racjxsRvK6jgMwHYdtBpz61OAWLvP8+gJfCnL5WHsab pUX+ArPZtuxnAfh5mHP2jVi/0w7YYuHu5b/qV8DJ8dK3TRbc29b4ejPsxd4/gb0c+jyCE80JakHI bPMFAH4B1oZfL8qNheFJ5G/CfEu/mPSyseAkwz/yx+9cqxMhW135+yjCcwh7fPfi9YqZwgXYfr1L TVoUgYxg16KRWTQ1kpV1uP1kfH3Ari0091CDs7A97a+HndsePYZmTjZz9KLJS0XU0eC313v72S5k bfAWmKP91Bl4HcBebvxs2FcpX4vjZ2WreYP5CwM+m5eOYE7ls2DbdL4Qdr73LZh/L3sEN8NOPLkX /MhoBsxHqjyhGtuPjmAvYz4b43cx3Argm2HvCzwAW6D9OSy46eXLxoahLU/D7O6FAD4XwCdjPe13 BdY+P0ryKjqNfFl6qkx73zJikYxtA1tBskmCTSAt/iHsUdu2I+7nsfr8L1BfhUWT2y600wCR8w7o 9mOTvKr7HnYb1CPONr9Njxy7PWweLsNO83gVbIvMYzj5ZVQflWzTQdLY+O2jglk0sOqY7GF90DPv 3A97X+CFmGd76q2wyOxtsHPe3wt7cv0wLPI5vDCt5khvbwPemSXNu2BO6MfC9ubfuUwb+4LtFDgN 24/9TQB+F/b0ot0yw/qgWoiocXgqHMKc7Udh7XLnCBoLmH5vhrXBHbDF0lkAH1rSPr/8XYbpYNiO ctOy3AHMNm6DLbg+ZknnTtgHoOY6NcbDvQBeh9W3LAaojk+RL3fkX06NiM21EpsLMoPL0n1nPYvV PqR1fCihAudhBukHjyOcHFg8sPxdmriUTWWTORC3tR+I9rDboBbZwPF2bu2eOYKe3h7WD+dhk/Hr YFHNdqIEakGTqmPucccElbIo/R7mA98GKpAypD0K4K9hAbMXzCTDAcyhfTbsuMmPhy0y/wm21/gJ mIN36H7D+DK8GDk4fWdgTt9Hw5y85yz/D0TdKnC4lOMh2L7qsXAA+xrraQB/AfNfzsOe1g9O/AKr SPIVHO+rWaBrjsDIOQBvXvK9FabPMTDs6b8dprNHYfUdHPd/hnbcPxLmnN8Gs4s7l3KsM/DzEGyb z1uxCgZni9osMNXmL04RZBYB28WBT8mcTe5q5XkRFj3a1ioaMCN82KVFuo+2mexim1UezfWkeZr7 KOy1BT3BgF0LHNxIcBUW1LgXds7ya12+GoeiuUU9Tcwi5yF94vIAABlQSURBVFFUvoVogbiH+UEF YVrw7fgAgD/C8U/ezwELmIP9jOX9Icyh/QDMmbzc/K7guMN+AHPyngp7QXKKk+7hCDbH3wf7SNkU xx0wR/QOAHcDuAfAO7DaanuE1fGUF7AKTHp5AB5AmWN8PYLt8T4Da4vnEV69sMDqiccuwmUAvwfb 0nM2wFPjWOQjPfnPIsuq80XRlE2DH+iV86byVCRn6vmyU+Ex2N68aIsMi0aiyfNldsHBibY/DPdq 4vb1R1O2TduVuu4hhija0N5nEYg9bA7uA/ATsAhS+0JhxWFn93D30cTFxobKYkDx3cP6IIqys3Z5 P8xp/kLYXuN1wSnYnL5OHhU4B/tA2a/AnOhLsKjwlLHtDOyJRfTU4scA/PKSp3qaDWifaiwsYIum V8MW/z+C9W1N2QW4DPsg2KtgT3g8ZL41m/d8+SNFyP9Ynme8aahOAu1/O8m0CmqV9j5whW8CLsEe +ZzDyfpkkfVshbZt8IsMv2DKomms7SDw9rDb0LYfG18AHVFlNrArNn69wWXYHuGXAfg62Euo7Bzi KFoX9c127FX/bVnvbKgFIAjuHjYDbftFdtLOvWdhL5b6L0peb/BuAN8JOz7zPKyuH8Dm36uLdDz3 QnegdQE2frwMxw/euJ7gCdgTyZdjddRpC2o3C0h6Nq7iFCnEYBcjFyx6DnIdpXl4CKb0bcAjsA7t 94xWDaCStg1gjnnUVj0yTym7h+2Caqsw0gDuGO5hPngU5mT8FexUiAdhwQRAL6zg0tlTQhVFj5x1 9kSNPYFj8rAnkXtYH2RP5FX/Hb4U/nOwU93uXKOM24ALsBdxfxJ23v3wrYMjWP96Bjb37ZhsQQyS Pwe/I5hv83ZY9P9bsRsfu5wLHoNtCfp1rBZlfrzyacwPiiLtaPIX/lQZRoANwr7MNiAaxKOVTfTI 9SysY23jBdWzsEZX20haUBOVMpRdgOipgaqzssNdXaTsIQc2nkRtqsaZfZvPA0ewKNg5WODi3bCj cR+ABROGl/f82KJoRffAyXZjY5gqrxZtzE52bfy73oEtmqIAWvt/Ebbn+zbYuejXg/N+CJvT74O9 zP16nHxy+DZYfTe1fUT1T9VP5uo7R7CtMucA/AZsX/5nwtp5237kVHgUwJ/Bjqq8B8cDr0Duq6jg RuT001Nl/L2Kbu3CgKgccLh7Vh+msOFooUvY/D73s1it1gaodqaoftuGKDqqHAE1OSs6u2CLe+iD zM5VXmQHe6jBIewR/WWY03QWFhX8Q5jj3jrrcP+VxbSKjrO2rDgN2YKhBSXLHjYDUTAtCr68Bxax XMA+vrOt98zmgMuwKOwfwBYkwwcVfZ96O+wJ/yYd2Kh/MD9qilyezyHsHb6fXl5/Aewl4G2d4jcV LsBeQv1l2AItGmeica4SeD7WRl5h1+ogF00MCgaF+Tr/I2wiY1/rWif8PVaPpFuIHp/0ODy7Dtlj u94ye9hN2D8t2S5chQUI7oEdWXYfLGrUngMdbUvx4PN6tr4MeSDXjA+LVA3loqj7rgQxrnfwj/R9 Xrbovhe2kHwcwPfOLt3m4F7Yx8nux/GPBQHHbXH4guwdsKMO1w2sXapPSsbyY3zeDeAHYe8UvgJW /2sNLgH4KdgWqOG9SBYUbqGyayAKZjyZrj7A1KbB5anG2AawAZnJF9XPK+os7EjGTTruR7DH1Oeg ZY1WwJU6b2vyYpN/ZGfRFgqmB4+/h2sDVEQO4NHVXbHnawkuwpzyD8AchL+HOQuPwCLuV2AOu+9r 7B7gfbmFqC9Wo+qV6GwWNdwvBjcPrH/6RZlyHNv0B2HO0Ltgn6Ff95nbc8FlWD/7Bdhxqe156gBf yALAr8KeLnzRBmT0Yyxb/LYwVe/Rk7nzAH4T9qTlR2Hn7s95JOi64CLsdK2fxerLtQNEvkykCxVE hst/kobaKuMLMMG2OTBGA0B7D5yUX0WShuvHYBPbJuFh2GOXdhJtZfLXDEctrOZeRY+BqtPFnPZq 9O9aGNz3kC/gVFurfnEjOGiHWH1c5LC5vwKbSC7Cxo/h/wKAf4E9hr9A8tvPpEeTBQSOcuQVTYUH kVYFVba60NjDfBBFcrPIY5s/7IW+BxaN/XIAn4jdPUbwKuyl07fCPoT0AE6eKqKcNcAc13fAPhx1 1wbkZYE9/6TER3/HAvO92uuLMH39AIAvhe17fxZ214G/H7Y15s2wdruIvjGwze8NTrRpx85xZ4Qh 0trVwZ/AojibeDP6EMA/CHnaezTp0aTElPYorGE29aY3sPp8b0/UiLUTuwdson4drJ021Sn+EquF SAvVJwpqoGP1a/HeBrOTg1FS72Gd8BeIF9QesujcAIcAfhv2db5dHfTHwhFOfunxEMD/YOW4X2r+ Bwf98eX98LJUFMmOFk1Z/1XBhSwKHkVjowAMK8ecEF/ucZiN3O7o72EavG35z3SqgmkDvgrkHMIi sq/G6h2M58OcurFf35wbLsECbvfDHO/7YfOrD775Ovr+Nxwj+HTYqTrr3NvPAiEsSuzb7Q2wgGaP T3QVphcfkW4XBIPzfs/y/58AfCqA52L18axtwxVY3e8H8BbYAu2hZTqz+cq8FpXLFnzHyvtI1kL8 mGCeuaehrj1dRZvhRGWiuni8Co6SJ/oxWSKema4jfUX4rC7qmuVVZY/we2n25Fflq8gyJ98x9Mfo O7LPXhnQgVupw1xyVa6zNGUDqhyrE1weu47qwWgoOhnP9j6iw3hFcvXUNdPNWP2psqq+VboZzwy3 Wpce3VboRLwjGTP8jF8Ec9piheezAXwHLKD2zwD+C8D/Avi/Df/+G8C/wYKHb4btw78dq2DB2H5+ GsCnAfjTNdXtVQCeI2Tz11G/Y3WqjFVtmajsAYC7YR97+1sA/wrT+abb+f8A/CdsIfGOpTx34XhQ qGe8zq6j8UzyUZOV6twRY1U2E1jRUdeqXIRTkS8beLK6VWWL7lkZRTuTu6rPTN5eeRSd6D6jozp+ pa7VMtlP1atCJ5OnV5bMFiNaDHcK7956VmigWFa1T0UeD4yGwlVQLRu1W4ZTTZ9StkeejNcc+huj nzF1m1KnatlKuV4dRv16DO1t1CWT52YALwXwRphTt2ln7n0AXgnb0jE80Z2rn98EizK/AeY0rstx V2O+l28d41O17CnYC6s/DNP5/2DzTvtrAHwDTkb+vb5UnVSdWXnVBpL+U0Rmz34bljcGInqDwBGf qhwer0K7Apk+evRUbYNe2VQekvwp7bwufW8T2jrN0S5z9aEpsA77XJfNzkXH67+1TZ82pMOltXlq wKWPOQXNaNuI58Pki+qQ7cVU+ojk9eksLysbyePl9rxaiORm/JXMastOdM9ky+qSbSVpcbLxJrKr TJ8Zf0Wnwi/ixXhEsgDm4J6GHaH4PAAvAnD38n7ubXIPw16WfRdsi8QDWL3Q7c/rjmRu86J2XcC2 An0FbM/3J2PaaTNXl3V4JWxv9iMuX83NrcxZPRhub79i9IbFzAGAZ8K2Sr0I9mTiAPMeIXkRts3p PbAPz71+mXYF1s7t9h4vdyt71n9aqNBr8Y7plznubeFoIsgm1YqzX6XH8KLBQOFmC4JqXbMJMeKt Gjly9rO6VHTt8eaoX5ZW4dlj4JFTkQ0cPXwzx0DVheEpXpmM1TpHcmZ8M3lZ2UofmWrziq/6r/JS ZSK8HhkZLXVdaYtMFxW5me1Uyqp+w0DpM8qv8lH9vGrHFX1F0IOj+DA8QLdzRtOX7bU9JZ+ioe6Z zEPaGN32yHoz7J2W22DO7dOWv6fDzgZ/Kmy/+MESd3D4T2H1nshwstIl2DsQj8P21p+DncB0HrYH /Ynl9UVSp3X08zuWv7sAfBxsq9Cdy7oeLOsy7De/itW7LY/D3pU7BzvW+rGl3B9c/l8mcqnxodoX VZ1UfbOx18Mp2GLmVlg7PxWmm6e7+zMwnZyG6eemJb3hRX6vp+H3IZjOzi/znoDp7Qi5vWfg9eXL R7bjyxzj/xRXKBssPBGVVh0sVcUq6RXnJpqIMl7oxIuMPJNL0VflK3jZBJ7pIdJ3m+ZpRxOTSlMw Vi4lY0Y7k2Wgo+y4t88wuRTvyE566tJDI5Mxs7eqjKxNI74RZGPRmAF4gIqDlrUTo6VwPG0lTyW9 4nhFZQdcNeZWxjglh2r/CvSUU+NS1qaeRkW3UZ2q82nPf0WerC4VWopGpU+oMpG/AWhdtuUOsHLu bsfKyT0D4MNhDt3ppszg0P03Vg7d4KQ/jtWRqW1kfdP9/AC2GLlr+X8rgI/AScf0MoD/WNbh3FL+ 4f9KIBOTsTJnR/5RNj+ztlN6ZXZ3CqsF27Boux2rxdmHYeW8D/oZ2vq/sDpZazhxa1jcsO9Y+Psp +vF02vQIl+UvvOPeA1Enr3b2iNac/HsHnzEDWobTM9D2yFzhB8J7jLzK4KbQjOqT5Y+xmx6aFfq9 MoxxxKo0K+03ts9mvLO0Co1efU9p/8w58On+X+G194rPkF6hHU2SFfkrOBXZM6cxk7siY6+OVRk1 7mX9pMIv4zm2jnPrq1eeihy9tFRaJT8bz5QTVOlP+37eV9+2HmjuK7x77jP6vbQiuhmtiLeyO5C0 rF1H37eJC/JjeW2a/2d4jE/2H12rchFORT5Vvwgnklvxj+5ZGUU7k7uqz0zeXnkUneg+o8PaTsk/ tkz2U/Wq0Mnk6ZUls8WIFsOdwru3nhUaKJZV7VORxwOjoXAVVMtG7ZbhVNOnlO2RJ+M1h/7G6GdM 3abUqVq2Uq5Xh1G/HkN7G3XZVlvf6P1cjbmRjL08ppTN6GV2M6ZvRLwrbR3JUm2DiD4VlE1ykQKZ 4rLryGB6lNMzCFUNqtIAmVyeXpRW1W8lLZJd6TXC6+HNZFGyVdKqA8pY3fbYaHXwiK570pRts/ox /KjOWbt4uuxfpUX3Wd9l8mT2EF0zem1aRZdT5PU0s7JZHca0eUSP0cra0pdRNJl+FZ+Kbiu0FG7W rtX/dek2s5dKnVVepf9U+FTTfVpWF/ZfkTHrR8oWI3l6eFzr/ZzJqMoqPlX9ZOOCumdlFJ0ee2Dp WdlKn850W7U7T/9E/aOXUxksMP9j/rEw8PMKmGtrQ4an8telB0bXpykcJDLNIXOmD99eY7ZS7BJE 9ZjLxqp4Xsc9tHtlGUN7Lh5j+EZ22ULPo2J2rSY53y5MJm9LLa3sUbynEYGSufqYHiK/UjdVNkv3 PKI2YjzVI25fTqUrnpF8mW49RO09RV9VGpX2Um2c9QW1FWOsjrK+psoxvqzsjdDPmTy9bebxvGxR f1Wy+vSqrnvKMhpK5z00WojaWcnYhfsUghwRVA5Y1mEhrrP/VrbMuFTnHzMoehhT7wq9anqFTqbP CB+FslU5fNpYmorGIGsVKhNYb9nqpDlmcOi1p54OH8lY4VUp26tjRReCTmXAq7abmlTVBMwGaV/W l2E0vNzsWt2zstG46+UcOwZPrYuXP9PxGHkUrZY3CrhZuqeh6ujvozpldVE8emlkegRJq8ie6YVB L80xfSeieaP2c5BrVo7xUrJCpEe6YRCNH55GNFdGNhPdKx5RH2RpkW7Vvafn89KMhUjzuOo64lEt 4/G8TCw/oqnys/uIB5Mn48/uF8EvkitKq+jE41fSFP9Mfkajt616ZMrqXGnLjHdm8xm9DKdK3+NX +mhVx5W8OWRXZattUSnX2397baTXHjM7zGhUx5oenMqYomy/16Z6dV215Z6xXuGwOlehMgap/N66 9I7tvbTmGuPGtlc25lZo7ft5nBbpsGpfY8eDrGzEV5VXfTazg4heJEdmL6xcVWbGK9wqs0Df6nnd UJHH44wp01tO/W8beuTZNdkH2KRcPTzG2swUnnOWXSftufQwtT0qZQaIoi8et4UsqookndFr6xLJ 08OjIpen3/LtlT2Ti0X1PK1Mnog/K8voV/Wk8qv6qbZfJq/Pr9BQOBmvHjthNJR+qrrNZPJ5rUwR j5bOjdrPI5wKTMGNotEZzbH6VmWBuM2r41UmT4+uS3JGnj+7ZngLlxbR9XQy2i0cgcvWph25ND9I ed4Vh6E6OLGyXk6Q/wxXyZ3hKfki3R4leFFdsvpV6LXpg1ytfJntKHoVPG87Hi/DRXCf1U+VjeSO Jh0lN5Mp0ldmY6y8GuQi24nsTtWl2s9VmpI1cuqG/+HX8mdjhlpMeHw1gXk+bTrj0fZjLyfj569Z fVTZI5ysx4Dv68TqyWhktFSaB6+riIdPY7qNJm5WP19W2S8rl/FlOs/skZWr2CiTlfU7bxOsXJum 7Ebpj8nmbdTTYjT2/ZzL6K+V3B4no53xicZklV7hldEagPHvxWN2GI0J7D4bk07QqwrugU2WA1GV 15aLHIUnhSPpin+FZosXORUtLe9UMJoV58jLyJyhzDgYPdaxo7p4YDpnA7KqY0SX/Wf0It1WyjI8 Rs93tmiCyfiowTWrn+rkHieanKJ2GYOrJuSoDSp6bPHaMYKNDZF8FV1U20BNUkyWzA5Yv2T8FUT1 bO2V9VEvn5oElLyR7NF43eIo2Zlulb4ZZBOacjCUI1QFNbdk8kQ4UXtF+s1wWlw2J1TGNtZnoj6i nA0PlbZnuBUcn97WueKMAjduP/cyVXycyDn1eonka/EZToVWJIvySxlU9KnSWNv7PNbPq3O2ogNg 9eXUDNiEGHXcKD8rq3DbSeQINRmAuCGzhmVyRGmVvCif1bcKSi89vKKykWys/FQb6OVdod+r07aM HxAjnsqB7OlDGd4UW1F8gHEyVnCjfjtFF1P4DvkZRGMQw2UTdORMRfkZH9bvMmA82rKKZ0RvKJ/p p1eWFifSTbVcpn8lo6KdQTTGTtUPo63KZnWIdDXGBjM7ZmUjWRVUbLmH1oB7vffzHjqRjBmdrO+y dvf0qrbTO25Fckb6Xoc8vf3lhFDD/cLl+TT28/RYeoSb8fMQ8Y/kzXgzORR9pjsmo6Kr+Cs+vXzH 6KYiD6ubwvG4URqjUU2rtkvVZqv2kcmT0fK4Ki2qV68tsrpUyo6VW6X3lGVyV+XxZaP7LJ3x8KD6 a1a/DMb027ZstS5RWkU/Ga1InkyWrG9X5Borc0XGMfZX7ZdVflVb7R0HGI8eeTIZWJkx/WVKe1zv /XyMjbFy7D6yiaq9ZHK1+Wq8V7pXMk/td6qNIjqqPaN2ffI/qki1YSIj87iRoMrIos4R1SGrn5cv a8CsblXZontWRtHO5K7qM5O3Vx5FJ7rP6LC2U/KPLZP9VL0qdDJ5emXJbDGixXCn8O6tZ4UGimVV +1Tk8cBoKFwF1bJRu2U41fQpZXvkyXjNob8x+hlTtyl1qpatlOvVYdSvx9DeRl221dY3ej9XY24k Yy+PKWUzepndjOkbEe9KW0eyVNsgor8xmJvp2IllzgmqF7cHZyzMIc+65eulvw55ptS5Z6LrpTMG 5uC9TVm2QZ8NltGE7vOzAZ7xY/cVmpk8jKbC8fQrTkyG6/kzeVR+pGMmhyrL6Fd4ZGmRXJnusok6 sitlD0oeT1/JUWmDiB+Th/FU9FXZrF0i+Rj/OfpVVFZBpQ+MlYfRVDieftbGjF7W/qpezBYqfaC3 HzD+FbpR3bLyqg5K7iyvt38sACyYYnsrrIymx8iZ8hieyhvS1J6uFu9I3CuZPU4k14CbGbOXU9W/ 0qiR3ACvn6fL9nFlRq34ZmXZPras7l6nUV0qMjJ+Rwmul4fRVjJW6ag2jeyfyZ6VrditwlNpkW6q +uiV2wOTh+GyvqGuFVT2Zvt71V8iGdT4E41tR83PA5O5vVZ1j8ZAVmcmt5c5yvdpfpyqjMlDebWP 1usrS1eyReBxBtm9vjN9qDIg14xeWzYa++ewCUWPlVd8M95ZnsLb9/OYh8Jp+bf3zL4jWRRO1haR PlsaWf2yPpGVYXORkq9qn91wCscHEj+BR4KojukNxg9U0QBRmZiHf+b8qkFe8WETSdQw6oUBJQ+T m9WnpRV1wgXB6+ETyejzWVsrPEVf8fa2puRSdVW2kbWBsu0sLZN7qow9thP1UyVXpM8Wl/Fj7Veh 5+l6GRV/Vj91HbVppOdoHGhxGb6aEEFwmewen8kbTTTRBNZr4xGNarrSAesX2WTI6EZtm9lCq89o vlB8PA3P2+NV2kfxypynqC+otqnyVrgqXbUp62MtMFuO2szfR22o5p6s/93I/VzdV/XWyyezYVWW zRFtvh8DlBxZ3/W8ojHIA5sfK32ud1yStlFt+Ay/J72CGxlaRieimdFpcSJ5etJ75KzIGKX3yFOV a0rbKpxN6rbF66l7Js8Y+5sDxg7WbVpGYw4eGX5kWxWeY5yTrGzvWOD7bYS/ED/FK8Nn8vi6KPqR HhhupV5T0yPZmA4YqDI98nh6VRtReZHtRXaY1SWTR9Ur0k2lLMuvyhrdM5pVm6/oWslQ1WtVpqzf Vuy7Umclf4VuBZfxqPLx9VP1jeTPaGRyV/iyfzj8atmKfip1oteqY2SdJhM26xjZ/5gKRzgV+VT9 IpxIbsU/umdlFO1M7qo+M3l75VF0ovuMDms7Jf/YMtlP1atCJ5OnV5bMFiNaDHcK7956VmigWFa1 T0UeD4yGwlVQLRu1W4ZTTZ9StkeejNcc+hujnzF1m1KnatlKuV4dRv16DO1t1GVbbX2j93M15kYy 9vKYUjajl9nNmL4R8a60dSRLtQ0k/f8Hkbk7duMTzqoAAAAASUVORK5CYII= "
+     id="image10"
+     x="0"
+     y="0" />
+</svg>
diff --git a/files/docs/img/logo_small.svg.png b/files/docs/img/logo_small.svg.png
new file mode 100644
index 0000000..b21cca8
Binary files /dev/null and b/files/docs/img/logo_small.svg.png differ
diff --git a/files/docs/index.md b/files/docs/index.md
new file mode 100644
index 0000000..6f8ee3b
--- /dev/null
+++ b/files/docs/index.md
@@ -0,0 +1,52 @@
+# Welcome to Cloudron!
+
+## What is Cloudron?
+
+Cloudron is a platform that makes it easy to install, manage and secure web apps on your server.
+
+You can install Cloudron on your server (from say AWS, Digital Ocean etc), give it a domain
+name and start installing apps. Behind the scenes, the Cloudron automates all the tasks around
+installation like configuring databases, DNS setup and Certificate management.
+
+Cloudron provides a centralized way to manage users and specify which apps they can access.
+
+Cloudron has a backup solution that lets you backup and restore each app individually
+(compared to server snapshots). With Cloudron backups, you can even migrate your Cloudron
+in it's entirety from one server provider to another.
+
+## The Cloudron App Store
+
+The [Cloudron App Store](https://cloudron.io/appstore.html) provides a mechanism for
+distribution and continuous update of apps. A good analogy for this is the Apple App Store for iOS or
+Google Play for Android. Anyone today can easily install apps on their phones and the apps are kept up-to-date.
+Cloudron does the same but for servers. You can easily install apps and receive continuous updates for
+the apps via the Cloudron App Store.
+
+<br/>
+
+<center>
+<video width="640" height="360" controls>
+  <source src="https://cloudron.io/videos/cloudron-app-install.mp4" type="video/mp4">
+  Your browser does not support the video tag.
+</video>
+</center>
+
+## Motivation
+
+Say you want to run a web application like WordPress, GitLab, Rocket.chat or even an email server.
+The first step is to start reading up installation manuals and configuring the server. Web apps today
+use multiple package managers, languages and frameworks making this process very tedious and complicated.
+
+Once the software is installed, DNS and SSL certificates have to be setup. If the server hosts
+multiple apps, one needs to make sure that apps do not interfere with each other, setup a
+reverse proxy and configure the firewall.
+
+Installation is just one hurdle though. The server and apps must be secured and backed up
+properly. Upstream releases must be tracked and updates must be applied on time.
+
+As you can see, self-hosting web applications is error prone and time consuming. 1-click installers
+and docker files automate some of the above tasks but requires one to have the technical know how to
+complete the installation and put in the effort to keep it up-to-date.
+
+We, at Cloudron, want to fix just that!
+
diff --git a/files/docs/stylesheets/extra.css b/files/docs/stylesheets/extra.css
new file mode 100644
index 0000000..b08128e
--- /dev/null
+++ b/files/docs/stylesheets/extra.css
@@ -0,0 +1,15 @@
+
+.shadow {
+    box-shadow: 0px 1px 12px rgba(0, 0, 0, 0.176);
+}
+
+.shortcuts {
+   width: 100%;
+   text-align: center;
+}
+
+.shortcuts a {
+    display: inline-block;
+    min-width: 20%;
+    text-align: center;
+}
diff --git a/files/mkdocs.yml b/files/mkdocs.yml
new file mode 100644
index 0000000..03a24cd
--- /dev/null
+++ b/files/mkdocs.yml
@@ -0,0 +1,38 @@
+site_name: Docs
+site_description: 'Description here'
+site_url: 'https://docs.medlab.host'
+copyright: 'Media Enterprise Design Lab'
+nav:
+  - Introduction: 'index.md'
+extra_css:
+  - 'stylesheets/extra.css'
+theme:
+  name: 'material'
+  language: 'en'
+  palette:
+    primary: 'white'
+    accent: 'light blue'
+  logo: 'img/logo_small.svg'
+  favicon: 'img/favicon.ico'
+  font:
+    text: 'Noto Sans'
+    code: 'Ubuntu Mono'
+extra:
+  search:
+    tokenizer: '[\s\-]+'
+  social:
+    - icon: fontawesome/brands/gitlab
+      link: 'https://git.cloudron.io'
+    - icon: fontawesome/brands/twitter
+      link: 'https://twitter.com/cloudron_io'
+    - icon: fontawesome/brands/linkedin
+      link: 'https://linkedin.com/company/cloudron'
+    - icon: fontawesome/regular/comments
+      link: 'https://forum.cloudron.io'
+use_directory_urls: true
+markdown_extensions:
+  - admonition
+  - codehilite
+  - toc
+  - footnotes
+  - meta
diff --git a/logo.png b/logo.png
new file mode 100644
index 0000000..67a28f3
Binary files /dev/null and b/logo.png differ
diff --git a/logo.svg b/logo.svg
new file mode 100644
index 0000000..d6ca55c
--- /dev/null
+++ b/logo.svg
@@ -0,0 +1,727 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   viewBox="0 0 750 183"
+   height="183"
+   width="750"
+   id="svg2"
+   version="1.1">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <image
+     y="0"
+     x="0"
+     id="image10"
+     xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAu4AAAC3CAYAAABNA9vcAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAg
+AElEQVR4nOy9a6ylWVoe9njr6KRSqlTKlUrRNEVRNDU9Mz09k6E9DMMwgQFjGLDBGGxzlbFl44Qk
+iCDHihRkIYtIEbKci0iMSJBzwZYBhySywYSrRwOGYRiTuTRDMzRN0zRNUakUrUqpXCmVtvJjndV7
+nXc/z/u+6/vWvpzq80hVZ3/r+q613suz1v729wErLKCxEJ+noreNEX3uE0aNJ7tmu2pvVDv7sv4L
+83dK3ShtTnujMFquOfO1jbX3ZI7kyNRVZae0qfrw5MyW7Vm77NimtDml7tRyrOyc+empq9qaqieL
+mXW98lPqbnq+esue2vk0bDNO7Uus3xSGjm/uwmxqsu2GYTT5yfa9bWwiOGXq9TinOf3MKTvCSffW
+7ZmvLHpk2VeCv4s+R66/9S8j++9pK5KD5U8hWFF6D0a03etbNk3kp25SeupO6X+TGDGnc+a2p3xk
+LxkifWrn09vLlO/dgI2MbXNsbRsbR1Z++MYma9DbdjZZI+hpK2p/BOYStalGne1zZHus7Z5y3qnD
+NpxRFBh6+5lDCOa075WfQ0Yi9Mozol1bbtP2O2XzG9WdIseIunMC/wjfYdvYBtndhO+fa0NTSY6X
+nrXzbc59Lza5AY3afD3Yuc3r1cMe4j6VMGd8+ogNW6bvTW5s0joULbLtdPSOaoHcoqh2p8hk++7p
+b0o/Pe14pDXT5xyiPIUAsrze9N7+orQMIhmzfU6RcySxjXQnk6bazNhW71pm9WgOaZwbuDLoCdw9
+852VZ46OTUHkh0b2N4U8Kp315M7GvjnkrTc/0+8UbEIHvbqsTE/M6Y1Pqm5PXrb8o2znozGF27V1
+e/Km+I0pdedgbj+T6o8gTnPamENM5hLBqU7aIz8s2MwhgsqgswbQ02YmjY1LrVcUbOeuX9SnzVPX
+TL7e/jN1e9bPW6uetDl6osp6iHTHpkfr0qZnHPOcoNzTfpakTCErPaRmBMHIjqFnbqM+RuiYp089
+PrAXPXWn2Hlv2z12nm1zCnrmvsf/en15aa9HO2d1WL3MHGTazdT15q7XL3jxoleOOTbTI0eq317D
+WybTvKCaaddzLm36kqRFdabkq/JLk2bbWYLPTy2/bMrZNCXXgpRbijTVpp1DNh7VZmZtWZtL+Ouv
+5qkXqh82bpsfga2vbT/TLnP0qu2oTWUD3jyo9jzdU3pSy04hbkyftrUuUzHFgTM7b//2yJat6/lQ
+JUcG0Rg8eRRGEsDsmFWe56dsn1Pk8Ahjxs575WHI2nmWvEyxfZbv+RgEeVk5sni92TnjDtlrD1Hd
+yHe36Rk51Dhs/WgMPWPuGVMkx5y5lgKMrps1jqhc1sGoPqYS94ggKmLG5FX5WSeo2sy21Ttn3mcv
+zeZ7QYLNn0d2WVueY8tAtZktq8pnZbdleuZ5ar9Ru1HdHv3MtJnVOW+tI/1SaV5ZJU+mjMpX9b22
+7T8Lz2ZYuYxskXxeOxmbj9q34+2JAcp3ZNbB9t27Lj1+NqNPrM9Idq8tJQvrp3cOpsql1iqj16d2
+rpHVS09OVZb10V732K0at1c3YyNen7Zs7/xk2mf50ZgWqlCblj3RVm1k22/zokGzMt4uRbW5IOWi
+fmo621kzpVKn1bbfZZNv27V/F6asZ8Dt7s7Ws3XZWrP+1Umw2nWqufHmx5OHfRNgy7V9WPQ4Wa8+
+68t+u2DTbRoro/QgGjNziKpfmDLUOYi2bfveWKyMtn2rx1FdW4eVZW3a/tu6djxTT+s9H5k90c3q
+OrBuO0p21Tb7y8qqtB5bVFDjitadrT/rW9m6Wvss2Hy3efazJ2fkj7PlFXpP7JitR+1mTi+ZrWZt
+Juq/XisdtX2e2jmXV8loy/fyQttPO4Zozm0dZUtqbO01W3tPBiYnm+9oLN4Y7dx7MV+NfzK8BZyS
+p5xGVlHm9JXpI+N4bH7PPHjEY0p6rzweIiexCXmi+YhkyGJOfY8kzunbztEUfR3RtycPyN+5soy2
+f1Y/S1C9v6p+zxpN8Q3tdY+OsuuedDW+zLpNndte3crOUaYfZW9z/Kdqz37usUtWLipj+/fa6o1R
+qn0vPatHXj/ZvFM7z9f1xjo6Fu0LIhv0rm0btkxkO+m1VpPvCZg1sIzSZCdoKnoUnjlWlcbqqv56
+x9JTPlIcFhAyQaIXvY6lZ56ySq7Wa9OIdILJEulUT18jMUeWyH/MCUhzMDXoZJ10lMfK9QRUW85r
+g9n5nH69ulPJhJeXWYusHCN9slfPW4deubx+evLntpGZ2ymcoAfZufbyT+28D9mY5aVl8uaiZ83m
+tt3T7zbi2UY6nKowmTbV9a7LnGJzGK2Xu2hntA5t0yHOrTtqvqagN6go27dBUgXKDIFjbWbk8+p5
+7SgZlLzsOlNv6rxMkUWtSyRzNIcqT/XvjQPiOpLL++u1k+kz00ek516fUT2LjD6NWGtWjl2/Huw8
+oxuqr951Ym1ldDvSzYw8XpmetpRcmTF6fXlzaOsq+SjCAjORcUqqjlffazNS2oxxeTJE/UaLE8mT
+XVyvbKYfT6aovnJwWYPKpGWdIJMvQtbovXSv7W5DJPV7+smks3LedSYtI6O9zvaT7SPqJ7sG2fnu
+Gb9qIyOHZ1dR+6zulPGP8NOj+lFj8WwgGzij+p6fzshiPzP9VHJk2vXqe2OZ45+YLFP9t2pX5c8Z
+y+vFzrPxzJMtk67mqnf927am+KypeuDZeBbMz2T7Sfc5Qrhs2al9Zfsd0U/WWcxtJ2o7s/hR+55T
+zcoTydHjELLGmw1+2cCY6dPDCH2a0obSN2/O2fpk51PJEJXLjLFnTUfZr3LeXtBX+p3RucgZqwCU
+DTiePDYv8ieZPiKZVZ9eWVXeWxOv/WhdorVhZVnbamxeP6qdbDlv7aN/TEYms1oXVjfqJ9JP1oaS
+MdIPT+ZovqO5tbKwdjP9RuNT/UXzGI0lI0+PLXm6w8r1yJiR25PN9pGRjfU3Zf09uXvTsu1JZIy+
+pmUMNapv60QKH7U9pX92nS3nGXFk6J7cTAm9OY/Ken1YOSJFjpS8V0k3YQg9Y8zI0NO3ksHT70gX
+e9N6dDlKs3UjvWP92ryMnU+RkfXjwbNJJZs3RpbvrYf9HM2JN89e+71tZvvdhDxemYzOqPKZz1Pl
+ifS/Z45V3SnyRHL02orXpyo7dX2nyqPKvt7tPFN/Tn81L9tvT7tTyntxqUfOqOwU3WV1ZZ0/Riqx
+x8VNwdy2svXb9PrZ/mXl27+YKesI2e21JwOTOeqrt33vEWaqDa99lZcpp8ab1YlaNzP+KXrm1WNo
+DdLTk5416pF7aluZsmpsHqbObe9aAet60crKHGU23Xv8G8vLpvWWzYD5v6gvdJTNzkPvnGcxZb7V
+Z699FWt653bqmmfmKVNn7jpkxp+dU+9zWxbonwuv3KmdT7dzz7+OmK9Mv7311VgzsmXs3Lbdo1+2
+7R7fdKxjVnCqMmXrLcTnqD0l60LkRe1lofrolT2q781LW99+VnVV+d5+lRyqTFSfXffojpW3RyZW
+l6VHMno6twn9ntqPqj91DbP9qHVVZbJ9sD6nrN2Uvyotc92mRzrojSGjv6wtry6TMXO9rTnNzkdP
+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
+"
+     preserveAspectRatio="none"
+     height="183"
+     width="750" />
+</svg>
diff --git a/update.sh b/update.sh
new file mode 100755
index 0000000..d91f37f
--- /dev/null
+++ b/update.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+set -eu
+
+export MKDOCS_MATERIAL_VERSION="7.0.0"
+export SURFER_VERSION="5.13.5-1"
+
+echo "=> Installing mkdocs-material"
+sudo pip3 install mkdocs-material==${MKDOCS_MATERIAL_VERSION}
+
+echo "=> Installing redoc-cli"
+npm install -g redoc-cli
+
+echo "=> Installing surfer"
+npm install -g cloudron-surfer@${SURFER_VERSION}
+
+echo "=> Updating Docker Image"
+docker build . -t cloudron/docs-ci --build-arg MKDOCS_MATERIAL_VERSION=$MKDOCS_MATERIAL_VERSION --build-arg SURFER_VERSION=$SURFER_VERSION
+docker push cloudron/docs-ci
+
+echo ""
+echo "=> Done."
+echo "=> To use the new docker image, change the sha in the .gitlab-ci.yml <="
+echo ""