From 6917ea088f905ec57e16d8795ad0bcb191c38b52 Mon Sep 17 00:00:00 2001
From: Dan Brown <ssddanbrown@googlemail.com>
Date: Fri, 6 Sep 2019 23:36:16 +0100
Subject: [PATCH] Upgraded app to Laravel 5.7

---
 .env.example.complete                         |   2 +-
 .gitignore                                    |   3 +-
 app/Application.php                           |   7 +-
 app/Config/app.php                            |   3 +
 app/Config/cache.php                          |   2 +-
 app/Config/database.php                       |   8 +-
 app/Config/hashing.php                        |   5 +-
 app/Config/logging.php                        |   4 +-
 app/Config/mail.php                           |   6 +
 app/Config/queue.php                          |   2 +-
 app/Config/services.php                       |   5 +
 app/Config/session.php                        |   7 +-
 .../Auth/ResetPasswordController.php          |   6 +-
 app/Http/Middleware/VerifyCsrfToken.php       |   7 +
 app/helpers.php                               |   2 +-
 bootstrap/app.php                             |   4 +-
 composer.json                                 |  44 +-
 composer.lock                                 | 782 ++++++++++++++++--
 phpunit.xml                                   |   2 +-
 public/svg/403.svg                            |   1 +
 public/svg/404.svg                            |   1 +
 public/svg/500.svg                            |   1 +
 public/svg/503.svg                            |   1 +
 public/web.config                             |  28 +
 resources/{assets => }/icons/add-circle.svg   |   0
 resources/{assets => }/icons/add.svg          |   0
 resources/{assets => }/icons/attach.svg       |   0
 resources/{assets => }/icons/auth/azure.svg   |   0
 resources/{assets => }/icons/auth/discord.svg |   0
 .../{assets => }/icons/auth/facebook.svg      |   0
 resources/{assets => }/icons/auth/github.svg  |   0
 resources/{assets => }/icons/auth/gitlab.svg  |   0
 resources/{assets => }/icons/auth/google.svg  |   0
 resources/{assets => }/icons/auth/okta.svg    |   0
 resources/{assets => }/icons/auth/slack.svg   |   0
 resources/{assets => }/icons/auth/twitch.svg  |   0
 resources/{assets => }/icons/auth/twitter.svg |   0
 resources/{assets => }/icons/back.svg         |   0
 resources/{assets => }/icons/book.svg         |   0
 resources/{assets => }/icons/books.svg        |   0
 resources/{assets => }/icons/bookshelf.svg    |   0
 resources/{assets => }/icons/cancel.svg       |   0
 resources/{assets => }/icons/caret-down.svg   |   0
 .../{assets => }/icons/caret-left-circle.svg  |   0
 .../{assets => }/icons/caret-right-circle.svg |   0
 resources/{assets => }/icons/caret-right.svg  |   0
 resources/{assets => }/icons/chapter.svg      |   0
 resources/{assets => }/icons/check-circle.svg |   0
 resources/{assets => }/icons/check.svg        |   0
 resources/{assets => }/icons/chevron-down.svg |   0
 .../{assets => }/icons/chevron-right.svg      |   0
 resources/{assets => }/icons/chevron-up.svg   |   0
 resources/{assets => }/icons/close.svg        |   0
 resources/{assets => }/icons/comment.svg      |   0
 resources/{assets => }/icons/copy.svg         |   0
 resources/{assets => }/icons/danger.svg       |   0
 resources/{assets => }/icons/delete.svg       |   0
 resources/{assets => }/icons/drawing.svg      |   0
 resources/{assets => }/icons/edit.svg         |   0
 resources/{assets => }/icons/expand-text.svg  |   0
 resources/{assets => }/icons/export.svg       |   0
 resources/{assets => }/icons/file.svg         |   0
 resources/{assets => }/icons/folder.svg       |   0
 resources/{assets => }/icons/grid.svg         |   0
 resources/{assets => }/icons/grip.svg         |   0
 resources/{assets => }/icons/history.svg      |   0
 resources/{assets => }/icons/image.svg        |   0
 resources/{assets => }/icons/images.svg       |   0
 resources/{assets => }/icons/include.svg      |   0
 resources/{assets => }/icons/info-filled.svg  |   0
 resources/{assets => }/icons/info.svg         |   0
 resources/{assets => }/icons/link.svg         |   0
 resources/{assets => }/icons/list.svg         |   0
 resources/{assets => }/icons/lock-open.svg    |   0
 resources/{assets => }/icons/lock.svg         |   0
 resources/{assets => }/icons/login.svg        |   0
 resources/{assets => }/icons/logout.svg       |   0
 resources/{assets => }/icons/more.svg         |   0
 resources/{assets => }/icons/new-user.svg     |   0
 resources/{assets => }/icons/open-book.svg    |   0
 resources/{assets => }/icons/page.svg         |   0
 resources/{assets => }/icons/permission.svg   |   0
 resources/{assets => }/icons/popular.svg      |   0
 resources/{assets => }/icons/reply.svg        |   0
 resources/{assets => }/icons/save.svg         |   0
 resources/{assets => }/icons/search.svg       |   0
 resources/{assets => }/icons/settings.svg     |   0
 resources/{assets => }/icons/sort-down.svg    |   0
 resources/{assets => }/icons/sort-up.svg      |   0
 resources/{assets => }/icons/sort.svg         |   0
 resources/{assets => }/icons/spanner.svg      |   0
 resources/{assets => }/icons/star-circle.svg  |   0
 resources/{assets => }/icons/star.svg         |   0
 .../{assets => }/icons/swap-vertical.svg      |   0
 resources/{assets => }/icons/tag.svg          |   0
 resources/{assets => }/icons/template.svg     |   0
 resources/{assets => }/icons/time.svg         |   0
 resources/{assets => }/icons/user.svg         |   0
 resources/{assets => }/icons/users-add.svg    |   0
 resources/{assets => }/icons/users.svg        |   0
 resources/{assets => }/icons/view.svg         |   0
 resources/{assets => }/icons/warning.svg      |   0
 .../{assets => }/js/components/back-to-top.js |   0
 .../{assets => }/js/components/book-sort.js   |   0
 .../js/components/breadcrumb-listing.js       |   0
 .../js/components/chapter-toggle.js           |   0
 .../{assets => }/js/components/collapsible.js |   0
 .../js/components/custom-checkbox.js          |   0
 .../{assets => }/js/components/dropdown.js    |   0
 .../js/components/editor-toolbox.js           |   0
 .../components/entity-permissions-editor.js   |   0
 .../js/components/entity-selector-popup.js    |   0
 .../js/components/entity-selector.js          |   0
 .../js/components/expand-toggle.js            |   0
 .../js/components/header-mobile-toggle.js     |   0
 .../js/components/homepage-control.js         |   0
 .../js/components/image-picker.js             |   0
 resources/{assets => }/js/components/index.js |   0
 .../js/components/list-sort-control.js        |   0
 .../js/components/markdown-editor.js          |   0
 .../js/components/new-user-password.js        |   0
 .../js/components/notification.js             |   0
 .../{assets => }/js/components/overlay.js     |   0
 .../js/components/page-comments.js            |   0
 .../js/components/page-display.js             |   0
 .../{assets => }/js/components/page-picker.js |   0
 .../js/components/permissions-table.js        |   0
 .../js/components/setting-app-color-picker.js |   0
 .../{assets => }/js/components/shelf-sort.js  |   0
 .../{assets => }/js/components/sidebar.js     |   0
 .../js/components/template-manager.js         |   0
 .../js/components/toggle-switch.js            |   0
 .../{assets => }/js/components/tri-layout.js  |   0
 .../js/components/wysiwyg-editor.js           |   0
 resources/{assets => }/js/index.js            |   0
 .../{assets => }/js/services/animations.js    |   0
 resources/{assets => }/js/services/code.js    |   0
 resources/{assets => }/js/services/dates.js   |   0
 resources/{assets => }/js/services/dom.js     |   0
 resources/{assets => }/js/services/drawio.js  |   0
 resources/{assets => }/js/services/events.js  |   0
 resources/{assets => }/js/services/http.js    |   0
 .../{assets => }/js/services/translations.js  |   0
 resources/{assets => }/js/services/util.js    |   0
 .../js/vues/attachment-manager.js             |   0
 resources/{assets => }/js/vues/code-editor.js |   0
 .../js/vues/components/autosuggest.js         |   0
 .../js/vues/components/dropzone.js            |   0
 .../{assets => }/js/vues/entity-dashboard.js  |   0
 .../{assets => }/js/vues/image-manager.js     |   0
 resources/{assets => }/js/vues/page-editor.js |   0
 resources/{assets => }/js/vues/search.js      |   0
 resources/{assets => }/js/vues/tag-manager.js |   0
 resources/{assets => }/js/vues/vues.js        |   0
 resources/{assets => }/sass/_animations.scss  |   0
 resources/{assets => }/sass/_blocks.scss      |   0
 resources/{assets => }/sass/_buttons.scss     |   0
 resources/{assets => }/sass/_codemirror.scss  |   0
 resources/{assets => }/sass/_colors.scss      |   0
 resources/{assets => }/sass/_components.scss  |   0
 resources/{assets => }/sass/_forms.scss       |   0
 resources/{assets => }/sass/_header.scss      |   0
 resources/{assets => }/sass/_html.scss        |   0
 resources/{assets => }/sass/_layout.scss      |   0
 resources/{assets => }/sass/_lists.scss       |   0
 resources/{assets => }/sass/_mixins.scss      |   0
 resources/{assets => }/sass/_pages.scss       |   0
 resources/{assets => }/sass/_reset.scss       |   0
 resources/{assets => }/sass/_spacing.scss     |   0
 resources/{assets => }/sass/_tables.scss      |   0
 resources/{assets => }/sass/_text.scss        |   0
 resources/{assets => }/sass/_tinymce.scss     |   0
 resources/{assets => }/sass/_variables.scss   |   0
 .../{assets => }/sass/export-styles.scss      |   0
 resources/{assets => }/sass/print-styles.scss |   0
 resources/{assets => }/sass/styles.scss       |   0
 storage/framework/cache/.gitignore            |   1 +
 storage/framework/cache/data/.gitignore       |   2 +
 webpack.config.js                             |   8 +-
 179 files changed, 829 insertions(+), 115 deletions(-)
 create mode 100644 public/svg/403.svg
 create mode 100644 public/svg/404.svg
 create mode 100644 public/svg/500.svg
 create mode 100644 public/svg/503.svg
 create mode 100644 public/web.config
 rename resources/{assets => }/icons/add-circle.svg (100%)
 rename resources/{assets => }/icons/add.svg (100%)
 rename resources/{assets => }/icons/attach.svg (100%)
 rename resources/{assets => }/icons/auth/azure.svg (100%)
 rename resources/{assets => }/icons/auth/discord.svg (100%)
 rename resources/{assets => }/icons/auth/facebook.svg (100%)
 rename resources/{assets => }/icons/auth/github.svg (100%)
 rename resources/{assets => }/icons/auth/gitlab.svg (100%)
 rename resources/{assets => }/icons/auth/google.svg (100%)
 rename resources/{assets => }/icons/auth/okta.svg (100%)
 rename resources/{assets => }/icons/auth/slack.svg (100%)
 rename resources/{assets => }/icons/auth/twitch.svg (100%)
 rename resources/{assets => }/icons/auth/twitter.svg (100%)
 rename resources/{assets => }/icons/back.svg (100%)
 rename resources/{assets => }/icons/book.svg (100%)
 rename resources/{assets => }/icons/books.svg (100%)
 rename resources/{assets => }/icons/bookshelf.svg (100%)
 rename resources/{assets => }/icons/cancel.svg (100%)
 rename resources/{assets => }/icons/caret-down.svg (100%)
 rename resources/{assets => }/icons/caret-left-circle.svg (100%)
 rename resources/{assets => }/icons/caret-right-circle.svg (100%)
 rename resources/{assets => }/icons/caret-right.svg (100%)
 rename resources/{assets => }/icons/chapter.svg (100%)
 rename resources/{assets => }/icons/check-circle.svg (100%)
 rename resources/{assets => }/icons/check.svg (100%)
 rename resources/{assets => }/icons/chevron-down.svg (100%)
 rename resources/{assets => }/icons/chevron-right.svg (100%)
 rename resources/{assets => }/icons/chevron-up.svg (100%)
 rename resources/{assets => }/icons/close.svg (100%)
 rename resources/{assets => }/icons/comment.svg (100%)
 rename resources/{assets => }/icons/copy.svg (100%)
 rename resources/{assets => }/icons/danger.svg (100%)
 rename resources/{assets => }/icons/delete.svg (100%)
 rename resources/{assets => }/icons/drawing.svg (100%)
 rename resources/{assets => }/icons/edit.svg (100%)
 rename resources/{assets => }/icons/expand-text.svg (100%)
 rename resources/{assets => }/icons/export.svg (100%)
 rename resources/{assets => }/icons/file.svg (100%)
 rename resources/{assets => }/icons/folder.svg (100%)
 rename resources/{assets => }/icons/grid.svg (100%)
 rename resources/{assets => }/icons/grip.svg (100%)
 rename resources/{assets => }/icons/history.svg (100%)
 rename resources/{assets => }/icons/image.svg (100%)
 rename resources/{assets => }/icons/images.svg (100%)
 rename resources/{assets => }/icons/include.svg (100%)
 rename resources/{assets => }/icons/info-filled.svg (100%)
 rename resources/{assets => }/icons/info.svg (100%)
 rename resources/{assets => }/icons/link.svg (100%)
 rename resources/{assets => }/icons/list.svg (100%)
 rename resources/{assets => }/icons/lock-open.svg (100%)
 rename resources/{assets => }/icons/lock.svg (100%)
 rename resources/{assets => }/icons/login.svg (100%)
 rename resources/{assets => }/icons/logout.svg (100%)
 rename resources/{assets => }/icons/more.svg (100%)
 rename resources/{assets => }/icons/new-user.svg (100%)
 rename resources/{assets => }/icons/open-book.svg (100%)
 rename resources/{assets => }/icons/page.svg (100%)
 rename resources/{assets => }/icons/permission.svg (100%)
 rename resources/{assets => }/icons/popular.svg (100%)
 rename resources/{assets => }/icons/reply.svg (100%)
 rename resources/{assets => }/icons/save.svg (100%)
 rename resources/{assets => }/icons/search.svg (100%)
 rename resources/{assets => }/icons/settings.svg (100%)
 rename resources/{assets => }/icons/sort-down.svg (100%)
 rename resources/{assets => }/icons/sort-up.svg (100%)
 rename resources/{assets => }/icons/sort.svg (100%)
 rename resources/{assets => }/icons/spanner.svg (100%)
 rename resources/{assets => }/icons/star-circle.svg (100%)
 rename resources/{assets => }/icons/star.svg (100%)
 rename resources/{assets => }/icons/swap-vertical.svg (100%)
 rename resources/{assets => }/icons/tag.svg (100%)
 rename resources/{assets => }/icons/template.svg (100%)
 rename resources/{assets => }/icons/time.svg (100%)
 rename resources/{assets => }/icons/user.svg (100%)
 rename resources/{assets => }/icons/users-add.svg (100%)
 rename resources/{assets => }/icons/users.svg (100%)
 rename resources/{assets => }/icons/view.svg (100%)
 rename resources/{assets => }/icons/warning.svg (100%)
 rename resources/{assets => }/js/components/back-to-top.js (100%)
 rename resources/{assets => }/js/components/book-sort.js (100%)
 rename resources/{assets => }/js/components/breadcrumb-listing.js (100%)
 rename resources/{assets => }/js/components/chapter-toggle.js (100%)
 rename resources/{assets => }/js/components/collapsible.js (100%)
 rename resources/{assets => }/js/components/custom-checkbox.js (100%)
 rename resources/{assets => }/js/components/dropdown.js (100%)
 rename resources/{assets => }/js/components/editor-toolbox.js (100%)
 rename resources/{assets => }/js/components/entity-permissions-editor.js (100%)
 rename resources/{assets => }/js/components/entity-selector-popup.js (100%)
 rename resources/{assets => }/js/components/entity-selector.js (100%)
 rename resources/{assets => }/js/components/expand-toggle.js (100%)
 rename resources/{assets => }/js/components/header-mobile-toggle.js (100%)
 rename resources/{assets => }/js/components/homepage-control.js (100%)
 rename resources/{assets => }/js/components/image-picker.js (100%)
 rename resources/{assets => }/js/components/index.js (100%)
 rename resources/{assets => }/js/components/list-sort-control.js (100%)
 rename resources/{assets => }/js/components/markdown-editor.js (100%)
 rename resources/{assets => }/js/components/new-user-password.js (100%)
 rename resources/{assets => }/js/components/notification.js (100%)
 rename resources/{assets => }/js/components/overlay.js (100%)
 rename resources/{assets => }/js/components/page-comments.js (100%)
 rename resources/{assets => }/js/components/page-display.js (100%)
 rename resources/{assets => }/js/components/page-picker.js (100%)
 rename resources/{assets => }/js/components/permissions-table.js (100%)
 rename resources/{assets => }/js/components/setting-app-color-picker.js (100%)
 rename resources/{assets => }/js/components/shelf-sort.js (100%)
 rename resources/{assets => }/js/components/sidebar.js (100%)
 rename resources/{assets => }/js/components/template-manager.js (100%)
 rename resources/{assets => }/js/components/toggle-switch.js (100%)
 rename resources/{assets => }/js/components/tri-layout.js (100%)
 rename resources/{assets => }/js/components/wysiwyg-editor.js (100%)
 rename resources/{assets => }/js/index.js (100%)
 rename resources/{assets => }/js/services/animations.js (100%)
 rename resources/{assets => }/js/services/code.js (100%)
 rename resources/{assets => }/js/services/dates.js (100%)
 rename resources/{assets => }/js/services/dom.js (100%)
 rename resources/{assets => }/js/services/drawio.js (100%)
 rename resources/{assets => }/js/services/events.js (100%)
 rename resources/{assets => }/js/services/http.js (100%)
 rename resources/{assets => }/js/services/translations.js (100%)
 rename resources/{assets => }/js/services/util.js (100%)
 rename resources/{assets => }/js/vues/attachment-manager.js (100%)
 rename resources/{assets => }/js/vues/code-editor.js (100%)
 rename resources/{assets => }/js/vues/components/autosuggest.js (100%)
 rename resources/{assets => }/js/vues/components/dropzone.js (100%)
 rename resources/{assets => }/js/vues/entity-dashboard.js (100%)
 rename resources/{assets => }/js/vues/image-manager.js (100%)
 rename resources/{assets => }/js/vues/page-editor.js (100%)
 rename resources/{assets => }/js/vues/search.js (100%)
 rename resources/{assets => }/js/vues/tag-manager.js (100%)
 rename resources/{assets => }/js/vues/vues.js (100%)
 rename resources/{assets => }/sass/_animations.scss (100%)
 rename resources/{assets => }/sass/_blocks.scss (100%)
 rename resources/{assets => }/sass/_buttons.scss (100%)
 rename resources/{assets => }/sass/_codemirror.scss (100%)
 rename resources/{assets => }/sass/_colors.scss (100%)
 rename resources/{assets => }/sass/_components.scss (100%)
 rename resources/{assets => }/sass/_forms.scss (100%)
 rename resources/{assets => }/sass/_header.scss (100%)
 rename resources/{assets => }/sass/_html.scss (100%)
 rename resources/{assets => }/sass/_layout.scss (100%)
 rename resources/{assets => }/sass/_lists.scss (100%)
 rename resources/{assets => }/sass/_mixins.scss (100%)
 rename resources/{assets => }/sass/_pages.scss (100%)
 rename resources/{assets => }/sass/_reset.scss (100%)
 rename resources/{assets => }/sass/_spacing.scss (100%)
 rename resources/{assets => }/sass/_tables.scss (100%)
 rename resources/{assets => }/sass/_text.scss (100%)
 rename resources/{assets => }/sass/_tinymce.scss (100%)
 rename resources/{assets => }/sass/_variables.scss (100%)
 rename resources/{assets => }/sass/export-styles.scss (100%)
 rename resources/{assets => }/sass/print-styles.scss (100%)
 rename resources/{assets => }/sass/styles.scss (100%)
 create mode 100755 storage/framework/cache/data/.gitignore

diff --git a/.env.example.complete b/.env.example.complete
index 829a7509b..c4c3f0b85 100644
--- a/.env.example.complete
+++ b/.env.example.complete
@@ -89,7 +89,7 @@ REDIS_SERVERS=127.0.0.1:6379:0
 # Queue driver to use
 # Queue not really currently used but may be configurable in the future.
 # Would advise not to change this for now.
-QUEUE_DRIVER=sync
+QUEUE_CONNECTION=sync
 
 # Storage system to use
 # Can be 'local', 'local_secure' or 's3'
diff --git a/.gitignore b/.gitignore
index 1b53cbe7a..e5579e4a6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,4 +21,5 @@ nbproject
 .buildpath
 .project
 .settings/
-webpack-stats.json
\ No newline at end of file
+webpack-stats.json
+.phpunit.result.cache
\ No newline at end of file
diff --git a/app/Application.php b/app/Application.php
index 8c56e9dac..97105e479 100644
--- a/app/Application.php
+++ b/app/Application.php
@@ -13,7 +13,12 @@ class Application extends \Illuminate\Foundation\Application
      */
     public function configPath($path = '')
     {
-        return $this->basePath.DIRECTORY_SEPARATOR.'app'.DIRECTORY_SEPARATOR.'Config'.($path ? DIRECTORY_SEPARATOR.$path : $path);
+        return $this->basePath
+            . DIRECTORY_SEPARATOR
+            . 'app'
+            . DIRECTORY_SEPARATOR
+            . 'Config'
+            . ($path ? DIRECTORY_SEPARATOR.$path : $path);
     }
 
 }
\ No newline at end of file
diff --git a/app/Config/app.php b/app/Config/app.php
index ec78e828b..d4ef8fe25 100755
--- a/app/Config/app.php
+++ b/app/Config/app.php
@@ -57,6 +57,9 @@ return [
     //  Application Fallback Locale
     'fallback_locale' => 'en',
 
+    // Faker Locale
+    'faker_locale' => 'en_GB',
+
     // Enable right-to-left text control.
     'rtl' => false,
 
diff --git a/app/Config/cache.php b/app/Config/cache.php
index 43f420457..6d8fa7ad7 100644
--- a/app/Config/cache.php
+++ b/app/Config/cache.php
@@ -62,6 +62,6 @@ return [
 
     // Cache key prefix
     // Used to prevent collisions in shared cache systems.
-    'prefix' => env('CACHE_PREFIX', 'bookstack'),
+    'prefix' => env('CACHE_PREFIX', 'bookstack_cache'),
 
 ];
diff --git a/app/Config/database.php b/app/Config/database.php
index 93a44854f..82156bd9d 100644
--- a/app/Config/database.php
+++ b/app/Config/database.php
@@ -14,7 +14,7 @@ if (env('REDIS_SERVERS', false)) {
 
     $redisDefaults = ['host' => '127.0.0.1', 'port' => '6379', 'database' => '0', 'password' => null];
     $redisServers = explode(',', trim(env('REDIS_SERVERS', '127.0.0.1:6379:0'), ','));
-    $redisConfig = [];
+    $redisConfig = ['client' => 'predis'];
     $cluster = count($redisServers) > 1;
 
     if ($cluster) {
@@ -76,6 +76,7 @@ return [
             'charset'   => 'utf8mb4',
             'collation' => 'utf8mb4_unicode_ci',
             'prefix'    => '',
+            'prefix_indexes' => true,
             'strict'    => false,
             'engine' => null,
         ],
@@ -86,9 +87,10 @@ return [
             'database'  => 'bookstack-test',
             'username'  => env('MYSQL_USER', 'bookstack-test'),
             'password'  => env('MYSQL_PASSWORD', 'bookstack-test'),
-            'charset'   => 'utf8',
-            'collation' => 'utf8_unicode_ci',
+            'charset'   => 'utf8mb4',
+            'collation' => 'utf8mb4_unicode_ci',
             'prefix'    => '',
+            'prefix_indexes' => true,
             'strict'    => false,
         ],
 
diff --git a/app/Config/hashing.php b/app/Config/hashing.php
index ca73c5586..edcc7c1da 100644
--- a/app/Config/hashing.php
+++ b/app/Config/hashing.php
@@ -12,9 +12,8 @@ return [
 
     // Default Hash Driver
     // This option controls the default hash driver that will be used to hash
-    // passwords for your application. By default, the bcrypt algorithm is
-    // used; however, you remain free to modify this option if you wish.
-    // Supported: "bcrypt", "argon"
+    // passwords for your application. By default, the bcrypt algorithm is used.
+    // Supported: "bcrypt", "argon", "argon2id"
     'driver' => 'bcrypt',
 
     // Bcrypt Options
diff --git a/app/Config/logging.php b/app/Config/logging.php
index 880b35453..c952ac02f 100644
--- a/app/Config/logging.php
+++ b/app/Config/logging.php
@@ -28,13 +28,15 @@ return [
     'channels' => [
         'stack' => [
             'driver' => 'stack',
-            'channels' => ['single'],
+            'channels' => ['daily'],
+            'ignore_exceptions' => false,
         ],
 
         'single' => [
             'driver' => 'single',
             'path' => storage_path('logs/laravel.log'),
             'level' => 'debug',
+            'days' => 14,
         ],
 
         'daily' => [
diff --git a/app/Config/mail.php b/app/Config/mail.php
index 49407bd8e..dfb41e7e6 100644
--- a/app/Config/mail.php
+++ b/app/Config/mail.php
@@ -46,4 +46,10 @@ return [
         ],
     ],
 
+    // Log Channel
+    // If you are using the "log" driver, you may specify the logging channel
+    // if you prefer to keep mail messages separate from other log entries
+    // for simpler reading. Otherwise, the default channel will be used.
+    'log_channel' => env('MAIL_LOG_CHANNEL'),
+
 ];
diff --git a/app/Config/queue.php b/app/Config/queue.php
index 721eac136..f0dd24fd3 100644
--- a/app/Config/queue.php
+++ b/app/Config/queue.php
@@ -12,7 +12,7 @@ return [
 
     // Default driver to use for the queue
     // Options: null, sync, redis
-    'default' => env('QUEUE_DRIVER', 'sync'),
+    'default' => env('QUEUE_CONNECTION', 'sync'),
 
     // Queue connection configuration
     'connections' => [
diff --git a/app/Config/services.php b/app/Config/services.php
index 97cb71ddc..569c0fb48 100644
--- a/app/Config/services.php
+++ b/app/Config/services.php
@@ -25,6 +25,7 @@ return [
     'mailgun'  => [
         'domain' => '',
         'secret' => '',
+        'endpoint' => '',
     ],
 
     'ses'      => [
@@ -37,6 +38,10 @@ return [
         'model'  => \BookStack\Auth\User::class,
         'key'    => '',
         'secret' => '',
+        'webhook' => [
+            'secret' => '',
+            'tolerance' => 300,
+        ],
     ],
 
     'github'   => [
diff --git a/app/Config/session.php b/app/Config/session.php
index bdb5e554b..37f1627bb 100644
--- a/app/Config/session.php
+++ b/app/Config/session.php
@@ -35,13 +35,18 @@ return [
     // Session database table, if database driver is in use
     'table' => 'sessions',
 
+    // Session Cache Store
+    // When using the "apc" or "memcached" session drivers, you may specify a
+    // cache store that should be used for these sessions. This value must
+    // correspond with one of the application's configured cache stores.
+    'store' => null,
+
     // Session Sweeping Lottery
     // Some session drivers must manually sweep their storage location to get
     // rid of old sessions from storage. Here are the chances that it will
     // happen on a given request. By default, the odds are 2 out of 100.
     'lottery' => [2, 100],
 
-
     // Session Cookie Name
     // Here you may change the name of the cookie used to identify a session
     // instance by ID. The name specified here will get used every time a
diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php
index 56f1cf026..d7005b739 100644
--- a/app/Http/Controllers/Auth/ResetPasswordController.php
+++ b/app/Http/Controllers/Auth/ResetPasswordController.php
@@ -4,6 +4,7 @@ namespace BookStack\Http\Controllers\Auth;
 
 use BookStack\Http\Controllers\Controller;
 use Illuminate\Foundation\Auth\ResetsPasswords;
+use Illuminate\Http\Request;
 
 class ResetPasswordController extends Controller
 {
@@ -36,10 +37,11 @@ class ResetPasswordController extends Controller
     /**
      * Get the response for a successful password reset.
      *
-     * @param  string  $response
+     * @param Request $request
+     * @param string $response
      * @return \Illuminate\Http\Response
      */
-    protected function sendResetResponse($response)
+    protected function sendResetResponse(Request $request, $response)
     {
         $message = trans('auth.reset_password_success');
         session()->flash('success', $message);
diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php
index 291b8326f..1a29a2b1d 100644
--- a/app/Http/Middleware/VerifyCsrfToken.php
+++ b/app/Http/Middleware/VerifyCsrfToken.php
@@ -6,6 +6,13 @@ use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
 
 class VerifyCsrfToken extends Middleware
 {
+    /**
+     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
+     *
+     * @var bool
+     */
+    protected $addHttpCookie = true;
+
     /**
      * The URIs that should be excluded from CSRF verification.
      *
diff --git a/app/helpers.php b/app/helpers.php
index f36f2e59d..59b9104f8 100644
--- a/app/helpers.php
+++ b/app/helpers.php
@@ -142,7 +142,7 @@ function icon($name, $attrs = [])
         $attrString .=  $attrName . '="' . $attr . '" ';
     }
 
-    $iconPath = resource_path('assets/icons/' . $name . '.svg');
+    $iconPath = resource_path('icons/' . $name . '.svg');
     $themeIconPath = theme_path('icons/' . $name . '.svg');
     if ($themeIconPath && file_exists($themeIconPath)) {
         $iconPath = $themeIconPath;
diff --git a/bootstrap/app.php b/bootstrap/app.php
index 516980cc1..6538aa81c 100644
--- a/bootstrap/app.php
+++ b/bootstrap/app.php
@@ -11,8 +11,8 @@
 |
 */
 
-$app = new \BookStack\Application(
-    realpath(__DIR__.'/../')
+$app = new BookStack\Application(
+    dirname(__DIR__)
 );
 
 /*
diff --git a/composer.json b/composer.json
index 49ec185cb..4741d4d7e 100644
--- a/composer.json
+++ b/composer.json
@@ -13,24 +13,25 @@
         "ext-mbstring": "*",
         "ext-gd": "*",
         "ext-curl": "*",
-        "laravel/framework": "5.6.*",
+        "laravel/framework": "5.7.*",
         "fideloper/proxy": "^4.0",
-        "intervention/image": "^2.4",
-        "laravel/socialite": "3.0.x-dev",
+        "intervention/image": "^2.5",
+        "laravel/socialite": "^4.2",
         "league/flysystem-aws-s3-v3": "^1.0",
-        "barryvdh/laravel-dompdf": "^0.8.1",
+        "barryvdh/laravel-dompdf": "^0.8.5",
+        "barryvdh/laravel-snappy": "^0.4.5",
         "predis/predis": "^1.1",
         "gathercontent/htmldiff": "^0.2.1",
-        "barryvdh/laravel-snappy": "^0.4.0",
         "socialiteproviders/slack": "^3.0",
         "socialiteproviders/microsoft-azure": "^3.0",
         "socialiteproviders/okta": "^1.0",
         "socialiteproviders/gitlab": "^3.0",
         "socialiteproviders/twitch": "^3.0",
         "socialiteproviders/discord": "^2.0",
-        "doctrine/dbal": "^2.5"
+        "doctrine/dbal": "^2.9"
     },
     "require-dev": {
+        "beyondcode/laravel-dump-server": "^1.0",
         "filp/whoops": "^2.0",
         "fzaninotto/faker": "^1.4",
         "mockery/mockery": "^1.0",
@@ -43,7 +44,8 @@
     },
     "autoload": {
         "classmap": [
-            "database"
+            "database/seeds",
+            "database/factories"
         ],
         "psr-4": {
             "BookStack\\": "app/"
@@ -56,39 +58,45 @@
     },
     "scripts": {
         "post-root-package-install": [
-            "php -r \"file_exists('.env') || copy('.env.example', '.env');\""
+            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
         ],
         "post-create-project-cmd": [
-            "php artisan key:generate"
+            "@php artisan key:generate --ansi"
         ],
         "pre-update-cmd": [
-            "php -r \"!file_exists('bootstrap/cache/services.php') || @unlink('bootstrap/cache/services.php');\"",
-            "php -r \"!file_exists('bootstrap/cache/compiled.php') || @unlink('bootstrap/cache/compiled.php');\""
+            "@php -r \"!file_exists('bootstrap/cache/services.php') || @unlink('bootstrap/cache/services.php');\"",
+            "@php -r \"!file_exists('bootstrap/cache/compiled.php') || @unlink('bootstrap/cache/compiled.php');\""
         ],
         "pre-install-cmd": [
-            "php -r \"!file_exists('bootstrap/cache/services.php') || @unlink('bootstrap/cache/services.php');\"",
-            "php -r \"!file_exists('bootstrap/cache/compiled.php') || @unlink('bootstrap/cache/compiled.php');\""
+            "@php -r \"!file_exists('bootstrap/cache/services.php') || @unlink('bootstrap/cache/services.php');\"",
+            "@php -r \"!file_exists('bootstrap/cache/compiled.php') || @unlink('bootstrap/cache/compiled.php');\""
         ],
         "post-install-cmd": [
-            "php artisan cache:clear",
-            "php artisan view:clear"
+            "@php artisan cache:clear",
+            "@php artisan view:clear"
         ],
         "post-autoload-dump": [
             "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
-            "@php artisan package:discover"
+            "@php artisan package:discover --ansi"
         ],
         "refresh-test-database": [
-            "php artisan migrate:refresh --database=mysql_testing",
-            "php artisan db:seed --class=DummyContentSeeder --database=mysql_testing"
+            "@php artisan migrate:refresh --database=mysql_testing",
+            "@php artisan db:seed --class=DummyContentSeeder --database=mysql_testing"
         ]
     },
     "config": {
         "optimize-autoloader": true,
         "preferred-install": "dist",
+        "sort-packages": true,
         "platform": {
             "php": "7.1.3"
         }
     },
+    "extra": {
+        "laravel": {
+            "dont-discover": []
+        }
+    },
     "minimum-stability": "dev",
     "prefer-stable": true
 }
diff --git a/composer.lock b/composer.lock
index fe9bc4578..b3838ecf8 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "content-hash": "ce7b23f15edb5a2dd6bdaf23ce1c8b5d",
+    "content-hash": "a007281b1a87cb6fc78975c49f20b3e8",
     "packages": [
         {
             "name": "aws/aws-sdk-php",
@@ -1312,42 +1312,45 @@
         },
         {
             "name": "laravel/framework",
-            "version": "v5.6.39",
+            "version": "v5.7.28",
             "source": {
                 "type": "git",
                 "url": "https://github.com/laravel/framework.git",
-                "reference": "37bb306f516669ab4f888c16003f694313ab299e"
+                "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/framework/zipball/37bb306f516669ab4f888c16003f694313ab299e",
-                "reference": "37bb306f516669ab4f888c16003f694313ab299e",
+                "url": "https://api.github.com/repos/laravel/framework/zipball/8e69728f1c80a024588adbd24c65c4fcf9aa9192",
+                "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192",
                 "shasum": ""
             },
             "require": {
-                "doctrine/inflector": "~1.1",
-                "dragonmantank/cron-expression": "~2.0",
-                "erusev/parsedown": "~1.7",
+                "doctrine/inflector": "^1.1",
+                "dragonmantank/cron-expression": "^2.0",
+                "erusev/parsedown": "^1.7",
                 "ext-mbstring": "*",
                 "ext-openssl": "*",
+                "laravel/nexmo-notification-channel": "^1.0",
+                "laravel/slack-notification-channel": "^1.0",
                 "league/flysystem": "^1.0.8",
-                "monolog/monolog": "~1.12",
-                "nesbot/carbon": "1.25.*",
+                "monolog/monolog": "^1.12",
+                "nesbot/carbon": "^1.26.3",
+                "opis/closure": "^3.1",
                 "php": "^7.1.3",
-                "psr/container": "~1.0",
+                "psr/container": "^1.0",
                 "psr/simple-cache": "^1.0",
                 "ramsey/uuid": "^3.7",
-                "swiftmailer/swiftmailer": "~6.0",
-                "symfony/console": "~4.0",
-                "symfony/debug": "~4.0",
-                "symfony/finder": "~4.0",
-                "symfony/http-foundation": "~4.0",
-                "symfony/http-kernel": "~4.0",
-                "symfony/process": "~4.0",
-                "symfony/routing": "~4.0",
-                "symfony/var-dumper": "~4.0",
+                "swiftmailer/swiftmailer": "^6.0",
+                "symfony/console": "^4.1",
+                "symfony/debug": "^4.1",
+                "symfony/finder": "^4.1",
+                "symfony/http-foundation": "^4.1",
+                "symfony/http-kernel": "^4.1",
+                "symfony/process": "^4.1",
+                "symfony/routing": "^4.1",
+                "symfony/var-dumper": "^4.1",
                 "tijsverkoyen/css-to-inline-styles": "^2.2.1",
-                "vlucas/phpdotenv": "~2.2"
+                "vlucas/phpdotenv": "^2.2"
             },
             "conflict": {
                 "tightenco/collect": "<5.5.33"
@@ -1383,43 +1386,47 @@
                 "illuminate/view": "self.version"
             },
             "require-dev": {
-                "aws/aws-sdk-php": "~3.0",
-                "doctrine/dbal": "~2.6",
+                "aws/aws-sdk-php": "^3.0",
+                "doctrine/dbal": "^2.6",
                 "filp/whoops": "^2.1.4",
-                "league/flysystem-cached-adapter": "~1.0",
-                "mockery/mockery": "~1.0",
+                "guzzlehttp/guzzle": "^6.3",
+                "league/flysystem-cached-adapter": "^1.0",
+                "mockery/mockery": "^1.0",
                 "moontoast/math": "^1.1",
-                "orchestra/testbench-core": "3.6.*",
-                "pda/pheanstalk": "~3.0",
-                "phpunit/phpunit": "~7.0",
+                "orchestra/testbench-core": "3.7.*",
+                "pda/pheanstalk": "^3.0|^4.0",
+                "phpunit/phpunit": "^7.5",
                 "predis/predis": "^1.1.1",
-                "symfony/css-selector": "~4.0",
-                "symfony/dom-crawler": "~4.0"
+                "symfony/css-selector": "^4.1",
+                "symfony/dom-crawler": "^4.1",
+                "true/punycode": "^2.1"
             },
             "suggest": {
-                "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).",
-                "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.6).",
+                "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).",
+                "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).",
                 "ext-pcntl": "Required to use all features of the queue worker.",
                 "ext-posix": "Required to use all features of the queue worker.",
-                "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).",
-                "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).",
-                "laravel/tinker": "Required to use the tinker console command (~1.0).",
-                "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).",
-                "league/flysystem-cached-adapter": "Required to use the Flysystem cache (~1.0).",
-                "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).",
-                "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (~1.0).",
-                "nexmo/client": "Required to use the Nexmo transport (~1.0).",
-                "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).",
-                "predis/predis": "Required to use the redis cache and queue drivers (~1.0).",
-                "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).",
-                "symfony/css-selector": "Required to use some of the crawler integration testing tools (~4.0).",
-                "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~4.0).",
-                "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)."
+                "filp/whoops": "Required for friendly error pages in development (^2.1.4).",
+                "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).",
+                "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).",
+                "laravel/tinker": "Required to use the tinker console command (^1.0).",
+                "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).",
+                "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).",
+                "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).",
+                "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).",
+                "moontoast/math": "Required to use ordered UUIDs (^1.1).",
+                "nexmo/client": "Required to use the Nexmo transport (^1.0).",
+                "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0|^4.0).",
+                "predis/predis": "Required to use the redis cache and queue drivers (^1.0).",
+                "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).",
+                "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).",
+                "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).",
+                "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)."
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "5.6-dev"
+                    "dev-master": "5.7-dev"
                 }
             },
             "autoload": {
@@ -1447,38 +1454,153 @@
                 "framework",
                 "laravel"
             ],
-            "time": "2018-10-04T14:50:41+00:00"
+            "time": "2019-02-26T15:41:34+00:00"
         },
         {
-            "name": "laravel/socialite",
-            "version": "3.0.x-dev",
+            "name": "laravel/nexmo-notification-channel",
+            "version": "v1.0.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/laravel/socialite.git",
-                "reference": "79316f36641f1916a50ab14d368acdf1d97e46de"
+                "url": "https://github.com/laravel/nexmo-notification-channel.git",
+                "reference": "03edd42a55b306ff980c9950899d5a2b03260d48"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/laravel/socialite/zipball/79316f36641f1916a50ab14d368acdf1d97e46de",
-                "reference": "79316f36641f1916a50ab14d368acdf1d97e46de",
+                "url": "https://api.github.com/repos/laravel/nexmo-notification-channel/zipball/03edd42a55b306ff980c9950899d5a2b03260d48",
+                "reference": "03edd42a55b306ff980c9950899d5a2b03260d48",
                 "shasum": ""
             },
             "require": {
-                "guzzlehttp/guzzle": "~6.0",
-                "illuminate/contracts": "~5.4",
-                "illuminate/http": "~5.4",
-                "illuminate/support": "~5.4",
-                "league/oauth1-client": "~1.0",
-                "php": ">=5.6.4"
+                "nexmo/client": "^1.0",
+                "php": "^7.1.3"
             },
             "require-dev": {
-                "mockery/mockery": "~0.9",
-                "phpunit/phpunit": "~4.0|~5.0"
+                "illuminate/notifications": "~5.7",
+                "mockery/mockery": "^1.0",
+                "phpunit/phpunit": "^7.0"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "3.0-dev"
+                    "dev-master": "1.0-dev"
+                },
+                "laravel": {
+                    "providers": [
+                        "Illuminate\\Notifications\\NexmoChannelServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Illuminate\\Notifications\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "Nexmo Notification Channel for laravel.",
+            "keywords": [
+                "laravel",
+                "nexmo",
+                "notifications"
+            ],
+            "time": "2018-12-04T12:57:08+00:00"
+        },
+        {
+            "name": "laravel/slack-notification-channel",
+            "version": "v1.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laravel/slack-notification-channel.git",
+                "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/6e164293b754a95f246faf50ab2bbea3e4923cc9",
+                "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9",
+                "shasum": ""
+            },
+            "require": {
+                "guzzlehttp/guzzle": "^6.0",
+                "php": "^7.1.3"
+            },
+            "require-dev": {
+                "illuminate/notifications": "~5.7",
+                "mockery/mockery": "^1.0",
+                "phpunit/phpunit": "^7.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                },
+                "laravel": {
+                    "providers": [
+                        "Illuminate\\Notifications\\SlackChannelServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Illuminate\\Notifications\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "Slack Notification Channel for laravel.",
+            "keywords": [
+                "laravel",
+                "notifications",
+                "slack"
+            ],
+            "time": "2018-12-12T13:12:06+00:00"
+        },
+        {
+            "name": "laravel/socialite",
+            "version": "v4.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laravel/socialite.git",
+                "reference": "f509d06e1e7323997b804c5152874f8aad4508e9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/socialite/zipball/f509d06e1e7323997b804c5152874f8aad4508e9",
+                "reference": "f509d06e1e7323997b804c5152874f8aad4508e9",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "guzzlehttp/guzzle": "~6.0",
+                "illuminate/http": "~5.7.0|~5.8.0|^6.0|^7.0",
+                "illuminate/support": "~5.7.0|~5.8.0|^6.0|^7.0",
+                "league/oauth1-client": "~1.0",
+                "php": "^7.1.3"
+            },
+            "require-dev": {
+                "illuminate/contracts": "~5.7.0|~5.8.0|^6.0|^7.0",
+                "mockery/mockery": "^1.0",
+                "phpunit/phpunit": "^7.0|^8.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
                 },
                 "laravel": {
                     "providers": [
@@ -1510,7 +1632,62 @@
                 "laravel",
                 "oauth"
             ],
-            "time": "2018-12-21T14:06:32+00:00"
+            "time": "2019-09-03T15:27:17+00:00"
+        },
+        {
+            "name": "lcobucci/jwt",
+            "version": "3.3.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/lcobucci/jwt.git",
+                "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18",
+                "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18",
+                "shasum": ""
+            },
+            "require": {
+                "ext-mbstring": "*",
+                "ext-openssl": "*",
+                "php": "^5.6 || ^7.0"
+            },
+            "require-dev": {
+                "mikey179/vfsstream": "~1.5",
+                "phpmd/phpmd": "~2.2",
+                "phpunit/php-invoker": "~1.1",
+                "phpunit/phpunit": "^5.7 || ^7.3",
+                "squizlabs/php_codesniffer": "~2.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Lcobucci\\JWT\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Luís Otávio Cobucci Oblonczyk",
+                    "role": "Developer",
+                    "email": "lcobucci@gmail.com"
+                }
+            ],
+            "description": "A simple library to work with JSON Web Token and JSON Web Signature",
+            "keywords": [
+                "JWS",
+                "jwt"
+            ],
+            "time": "2019-05-24T18:30:49+00:00"
         },
         {
             "name": "league/flysystem",
@@ -1841,16 +2018,16 @@
         },
         {
             "name": "nesbot/carbon",
-            "version": "1.25.3",
+            "version": "1.39.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/briannesbitt/Carbon.git",
-                "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8"
+                "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8",
-                "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8",
+                "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0",
+                "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0",
                 "shasum": ""
             },
             "require": {
@@ -1868,11 +2045,16 @@
             ],
             "type": "library",
             "extra": {
-                "update-helper": "Carbon\\Upgrade"
+                "update-helper": "Carbon\\Upgrade",
+                "laravel": {
+                    "providers": [
+                        "Carbon\\Laravel\\ServiceProvider"
+                    ]
+                }
             },
             "autoload": {
                 "psr-4": {
-                    "Carbon\\": "src/Carbon/"
+                    "": "src/"
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1893,7 +2075,116 @@
                 "datetime",
                 "time"
             ],
-            "time": "2019-06-03T17:56:44+00:00"
+            "time": "2019-06-11T09:07:59+00:00"
+        },
+        {
+            "name": "nexmo/client",
+            "version": "1.8.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Nexmo/nexmo-php.git",
+                "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/182d41a02ebd3e4be147baea45458ccfe2f528c4",
+                "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4",
+                "shasum": ""
+            },
+            "require": {
+                "lcobucci/jwt": "^3.2",
+                "php": ">=5.6",
+                "php-http/client-implementation": "^1.0",
+                "php-http/guzzle6-adapter": "^1.0",
+                "zendframework/zend-diactoros": "^1.8.4 || ^2.0"
+            },
+            "require-dev": {
+                "estahn/phpunit-json-assertions": "^1.0.0",
+                "php-http/mock-client": "^0.3.0",
+                "phpunit/phpunit": "^5.7",
+                "squizlabs/php_codesniffer": "^3.1"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Nexmo\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Tim Lytle",
+                    "email": "tim@nexmo.com",
+                    "homepage": "http://twitter.com/tjlytle",
+                    "role": "Developer"
+                }
+            ],
+            "description": "PHP Client for using Nexmo's API.",
+            "time": "2019-05-13T20:27:43+00:00"
+        },
+        {
+            "name": "opis/closure",
+            "version": "3.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/opis/closure.git",
+                "reference": "60a97fff133b1669a5b1776aa8ab06db3f3962b7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/opis/closure/zipball/60a97fff133b1669a5b1776aa8ab06db3f3962b7",
+                "reference": "60a97fff133b1669a5b1776aa8ab06db3f3962b7",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.4 || ^7.0"
+            },
+            "require-dev": {
+                "jeremeamia/superclosure": "^2.0",
+                "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.3.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Opis\\Closure\\": "src/"
+                },
+                "files": [
+                    "functions.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marius Sarca",
+                    "email": "marius.sarca@gmail.com"
+                },
+                {
+                    "name": "Sorin Sarca",
+                    "email": "sarca_sorin@hotmail.com"
+                }
+            ],
+            "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.",
+            "homepage": "https://opis.io/closure",
+            "keywords": [
+                "anonymous functions",
+                "closure",
+                "function",
+                "serializable",
+                "serialization",
+                "serialize"
+            ],
+            "time": "2019-09-02T21:07:33+00:00"
         },
         {
             "name": "paragonie/random_compat",
@@ -2017,6 +2308,172 @@
             "homepage": "https://github.com/PhenX/php-svg-lib",
             "time": "2018-06-03T10:10:03+00:00"
         },
+        {
+            "name": "php-http/guzzle6-adapter",
+            "version": "v1.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-http/guzzle6-adapter.git",
+                "reference": "a56941f9dc6110409cfcddc91546ee97039277ab"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab",
+                "reference": "a56941f9dc6110409cfcddc91546ee97039277ab",
+                "shasum": ""
+            },
+            "require": {
+                "guzzlehttp/guzzle": "^6.0",
+                "php": ">=5.5.0",
+                "php-http/httplug": "^1.0"
+            },
+            "provide": {
+                "php-http/async-client-implementation": "1.0",
+                "php-http/client-implementation": "1.0"
+            },
+            "require-dev": {
+                "ext-curl": "*",
+                "php-http/adapter-integration-tests": "^0.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.2-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Http\\Adapter\\Guzzle6\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Márk Sági-Kazár",
+                    "email": "mark.sagikazar@gmail.com"
+                },
+                {
+                    "name": "David de Boer",
+                    "email": "david@ddeboer.nl"
+                }
+            ],
+            "description": "Guzzle 6 HTTP Adapter",
+            "homepage": "http://httplug.io",
+            "keywords": [
+                "Guzzle",
+                "http"
+            ],
+            "time": "2016-05-10T06:13:32+00:00"
+        },
+        {
+            "name": "php-http/httplug",
+            "version": "v1.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-http/httplug.git",
+                "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018",
+                "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4",
+                "php-http/promise": "^1.0",
+                "psr/http-message": "^1.0"
+            },
+            "require-dev": {
+                "henrikbjorn/phpspec-code-coverage": "^1.0",
+                "phpspec/phpspec": "^2.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Http\\Client\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Eric GELOEN",
+                    "email": "geloen.eric@gmail.com"
+                },
+                {
+                    "name": "Márk Sági-Kazár",
+                    "email": "mark.sagikazar@gmail.com"
+                }
+            ],
+            "description": "HTTPlug, the HTTP client abstraction for PHP",
+            "homepage": "http://httplug.io",
+            "keywords": [
+                "client",
+                "http"
+            ],
+            "time": "2016-08-31T08:30:17+00:00"
+        },
+        {
+            "name": "php-http/promise",
+            "version": "v1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-http/promise.git",
+                "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980",
+                "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980",
+                "shasum": ""
+            },
+            "require-dev": {
+                "henrikbjorn/phpspec-code-coverage": "^1.0",
+                "phpspec/phpspec": "^2.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Http\\Promise\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Márk Sági-Kazár",
+                    "email": "mark.sagikazar@gmail.com"
+                },
+                {
+                    "name": "Joel Wurtz",
+                    "email": "joel.wurtz@gmail.com"
+                }
+            ],
+            "description": "Promise used for asynchronous HTTP requests",
+            "homepage": "http://httplug.io",
+            "keywords": [
+                "promise"
+            ],
+            "time": "2016-01-26T13:27:02+00:00"
+        },
         {
             "name": "predis/predis",
             "version": "v1.1.1",
@@ -2116,6 +2573,58 @@
             ],
             "time": "2017-02-14T16:28:37+00:00"
         },
+        {
+            "name": "psr/http-factory",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-factory.git",
+                "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+                "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.0.0",
+                "psr/http-message": "^1.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interfaces for PSR-7 HTTP message factories",
+            "keywords": [
+                "factory",
+                "http",
+                "message",
+                "psr",
+                "psr-17",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "time": "2019-04-30T12:38:16+00:00"
+        },
         {
             "name": "psr/http-message",
             "version": "1.0.1",
@@ -4175,6 +4684,72 @@
                 "environment"
             ],
             "time": "2019-01-29T11:11:52+00:00"
+        },
+        {
+            "name": "zendframework/zend-diactoros",
+            "version": "2.1.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/zendframework/zend-diactoros.git",
+                "reference": "279723778c40164bcf984a2df12ff2c6ec5e61c1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/279723778c40164bcf984a2df12ff2c6ec5e61c1",
+                "reference": "279723778c40164bcf984a2df12ff2c6ec5e61c1",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1",
+                "psr/http-factory": "^1.0",
+                "psr/http-message": "^1.0"
+            },
+            "provide": {
+                "psr/http-factory-implementation": "1.0",
+                "psr/http-message-implementation": "1.0"
+            },
+            "require-dev": {
+                "ext-dom": "*",
+                "ext-libxml": "*",
+                "http-interop/http-factory-tests": "^0.5.0",
+                "php-http/psr7-integration-tests": "dev-master",
+                "phpunit/phpunit": "^7.0.2",
+                "zendframework/zend-coding-standard": "~1.0.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.1.x-dev",
+                    "dev-develop": "2.2.x-dev",
+                    "dev-release-1.8": "1.8.x-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/functions/create_uploaded_file.php",
+                    "src/functions/marshal_headers_from_sapi.php",
+                    "src/functions/marshal_method_from_sapi.php",
+                    "src/functions/marshal_protocol_version_from_sapi.php",
+                    "src/functions/marshal_uri_from_sapi.php",
+                    "src/functions/normalize_server.php",
+                    "src/functions/normalize_uploaded_files.php",
+                    "src/functions/parse_cookie_header.php"
+                ],
+                "psr-4": {
+                    "Zend\\Diactoros\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "PSR HTTP Message implementations",
+            "keywords": [
+                "http",
+                "psr",
+                "psr-7"
+            ],
+            "time": "2019-07-10T16:13:25+00:00"
         }
     ],
     "packages-dev": [
@@ -4369,6 +4944,67 @@
             ],
             "time": "2018-12-13T10:34:14+00:00"
         },
+        {
+            "name": "beyondcode/laravel-dump-server",
+            "version": "1.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/beyondcode/laravel-dump-server.git",
+                "reference": "fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a",
+                "reference": "fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a",
+                "shasum": ""
+            },
+            "require": {
+                "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0",
+                "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0",
+                "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0",
+                "php": "^7.1",
+                "symfony/var-dumper": "^4.1.1"
+            },
+            "require-dev": {
+                "larapack/dd": "^1.0",
+                "phpunit/phpunit": "^7.0"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "BeyondCode\\DumpServer\\DumpServerServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "BeyondCode\\DumpServer\\": "src"
+                },
+                "files": [
+                    "helpers.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marcel Pociot",
+                    "email": "marcel@beyondco.de",
+                    "homepage": "https://beyondco.de",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Symfony Var-Dump Server for Laravel",
+            "homepage": "https://github.com/beyondcode/laravel-dump-server",
+            "keywords": [
+                "beyondcode",
+                "laravel-dump-server"
+            ],
+            "time": "2019-08-11T13:17:40+00:00"
+        },
         {
             "name": "composer/ca-bundle",
             "version": "1.2.4",
@@ -6895,9 +7531,7 @@
     ],
     "aliases": [],
     "minimum-stability": "dev",
-    "stability-flags": {
-        "laravel/socialite": 20
-    },
+    "stability-flags": [],
     "prefer-stable": true,
     "prefer-lowest": false,
     "platform": {
diff --git a/phpunit.xml b/phpunit.xml
index 06f702bd5..1f88f897b 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -25,7 +25,7 @@
         <env name="APP_AUTO_LANG_PUBLIC" value="true"/>
         <env name="CACHE_DRIVER" value="array"/>
         <env name="SESSION_DRIVER" value="array"/>
-        <env name="QUEUE_DRIVER" value="sync"/>
+        <env name="QUEUE_CONNECTION" value="sync"/>
         <env name="DB_CONNECTION" value="mysql_testing"/>
         <env name="BCRYPT_ROUNDS" value="4"/>
         <env name="MAIL_DRIVER" value="log"/>
diff --git a/public/svg/403.svg b/public/svg/403.svg
new file mode 100644
index 000000000..682aa9827
--- /dev/null
+++ b/public/svg/403.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1024 1024"><defs><linearGradient id="a" x1="50%" x2="50%" y1="100%" y2="0%"><stop offset="0%" stop-color="#76C3C3"/><stop offset="100%" stop-color="#183468"/></linearGradient><linearGradient id="b" x1="100%" x2="0%" y1="50%" y2="50%"><stop offset="0%" stop-color="#486587"/><stop offset="33.23%" stop-color="#183352"/><stop offset="66.67%" stop-color="#264A6E"/><stop offset="100%" stop-color="#183352"/></linearGradient><linearGradient id="c" x1="49.87%" x2="48.5%" y1="3.62%" y2="100%"><stop offset="0%" stop-color="#E0F2FA"/><stop offset="8.98%" stop-color="#89BED6"/><stop offset="32.98%" stop-color="#1E3C6E"/><stop offset="100%" stop-color="#1B376B"/></linearGradient><linearGradient id="d" x1="49.87%" x2="49.87%" y1="3.62%" y2="77.75%"><stop offset="0%" stop-color="#B0DDF1"/><stop offset="100%" stop-color="#325C82"/></linearGradient><linearGradient id="e" x1="91.59%" x2="66.97%" y1="5.89%" y2="100%"><stop offset="0%" stop-color="#1D3A6D"/><stop offset="100%" stop-color="#467994"/></linearGradient><linearGradient id="f" x1="97.27%" x2="52.53%" y1="6.88%" y2="100%"><stop offset="0%" stop-color="#1D3A6D"/><stop offset="100%" stop-color="#467994"/></linearGradient><linearGradient id="g" x1="82.73%" x2="41.46%" y1="41.06%" y2="167.23%"><stop offset="0%" stop-color="#1D3A6D"/><stop offset="100%" stop-color="#467994"/></linearGradient><linearGradient id="h" x1="49.87%" x2="49.87%" y1="3.62%" y2="100.77%"><stop offset="0%" stop-color="#B0DDF1"/><stop offset="100%" stop-color="#325C82"/></linearGradient><linearGradient id="i" x1="100%" x2="72.45%" y1="0%" y2="85.2%"><stop offset="0%" stop-color="#1D3A6D"/><stop offset="100%" stop-color="#467994"/></linearGradient><linearGradient id="j" x1="100%" x2="62.1%" y1="0%" y2="68.86%"><stop offset="0%" stop-color="#163055"/><stop offset="100%" stop-color="#2F587F"/></linearGradient><circle id="l" cx="180" cy="102" r="40"/><filter id="k" width="340%" height="340%" x="-120%" y="-120%" filterUnits="objectBoundingBox"><feOffset in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="32"/><feColorMatrix in="shadowBlurOuter1" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.696473053 0"/></filter><linearGradient id="m" x1="0%" y1="50%" y2="50%"><stop offset="0%" stop-color="#FFFFFF" stop-opacity="0"/><stop offset="100%" stop-color="#FFFFFF"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><rect width="1024" height="1024" fill="url(#a)"/><g transform="translate(761 481)"><polygon fill="#8DBCD2" points="96 27 100 26 100 37 96 37"/><polygon fill="#8DBCD2" points="76 23 80 22 80 37 76 37"/><polygon fill="#183352" points="40 22 44 23 44 37 40 37"/><polygon fill="#183352" points="20 26 24 27 24 41 20 41"/><rect width="2" height="20" x="59" fill="#183352" opacity=".5"/><path fill="url(#b)" d="M61 0c3 0 3 2 6 2s3-2 6-2 3 2 6 2v8c-3 0-3-2-6-2s-3 2-6 2-3-2-6-2V0z"/><path fill="#8DBCD2" d="M50 20l10-2v110H0L10 28l10-2v10.92l10-.98V24l10-2v12.96l10-.98V20z"/><path fill="#183352" d="M100 26l10 2 10 100H60V18l10 2v13.98l10 .98V22l10 2v11.94l10 .98V26z"/></g><g transform="translate(0 565)"><path fill="url(#c)" d="M1024 385H0V106.86c118.4 21.09 185.14 57.03 327.4 48.14 198.54-12.4 250-125 500-125 90.18 0 147.92 16.3 196.6 37.12V385z"/><path fill="url(#d)" d="M1024 355H0V79.56C76.46 43.81 137.14 0 285 0c250 0 301.46 112.6 500 125 103.24 6.45 166.7-10.7 239-28.66V355z"/><path fill="url(#d)" d="M344.12 130.57C367.22 144.04 318.85 212.52 199 336h649C503.94 194.3 335.98 125.83 344.12 130.57z"/><path fill="url(#e)" d="M0 336V79.56C76.46 43.81 137.14 0 285 0c71.14 0 86.22 26.04 32.5 82-48 50 147.33 58.02 36 136.5-40.67 28.67 21.17 67.83 185.5 117.5H0z"/><path fill="url(#f)" d="M317.5 82c-48 50 147.33 58.02 36 136.5-40.67 28.67 21.17 67.83 185.5 117.5H55L317.5 82z"/><path fill="url(#g)" d="M353.5 218.5C312.83 247.17 374.67 286.33 539 336H175l178.5-117.5z"/><path fill="url(#h)" d="M0 459V264.54c100.25 21.2 167.18 50.29 296.67 42.19 198.57-12.43 250.04-125.15 500.07-125.15 109.75 0 171.47 24.16 227.26 51.25V459H0z"/><path fill="url(#i)" d="M1024 459H846.16c51.95-58.9 48.86-97.16-9.28-114.78-186.64-56.58-101.76-162.64-39.97-162.64 109.64 0 171.34 24.12 227.09 51.19V459z"/><path fill="url(#j)" d="M1024 459H846.19c52.01-59.01 48.94-97.34-9.22-115L1024 397.48V459z"/></g><g transform="translate(94 23)"><use fill="black" filter="url(#k)" xlink:href="#l"/><use fill="#D2F1FE" xlink:href="#l"/><circle cx="123" cy="255" r="3" fill="#FFFFFF" fill-opacity=".4"/><circle cx="2" cy="234" r="2" fill="#FFFFFF"/><circle cx="33" cy="65" r="3" fill="#FFFFFF"/><circle cx="122" cy="2" r="2" fill="#FFFFFF"/><circle cx="72" cy="144" r="2" fill="#FFFFFF"/><circle cx="282" cy="224" r="2" fill="#FFFFFF"/><circle cx="373" cy="65" r="3" fill="#FFFFFF" opacity=".4"/><circle cx="433" cy="255" r="3" fill="#FFFFFF"/><path fill="url(#m)" d="M373.25 325.25a5 5 0 0 0 0-10h-75v10h75z" opacity=".4" transform="rotate(45 338.251 320.251)"/><circle cx="363" cy="345" r="3" fill="#FFFFFF"/><circle cx="513" cy="115" r="3" fill="#FFFFFF"/><circle cx="723" cy="5" r="3" fill="#FFFFFF" opacity=".4"/><circle cx="422" cy="134" r="2" fill="#FFFFFF"/><circle cx="752" cy="204" r="2" fill="#FFFFFF"/><circle cx="672" cy="114" r="2" fill="#FFFFFF"/><circle cx="853" cy="255" r="3" fill="#FFFFFF" opacity=".4"/><circle cx="623" cy="225" r="3" fill="#FFFFFF"/><circle cx="823" cy="55" r="3" fill="#FFFFFF"/><circle cx="902" cy="144" r="2" fill="#FFFFFF"/><circle cx="552" cy="14" r="2" fill="#FFFFFF"/></g><path fill="#486587" d="M796 535a4 4 0 0 1 4 4v20h-8v-20a4 4 0 0 1 4-4z"/><path fill="#071423" d="M798 535.54a4 4 0 0 0-2 3.46v20h-4v-20a4 4 0 0 1 6-3.46zm48-.54a4 4 0 0 1 4 4v20h-8v-20a4 4 0 0 1 4-4z"/><path fill="#8DBCD2" d="M846 559v-20a4 4 0 0 0-2-3.46 4 4 0 0 1 6 3.46v20h-4z"/><g fill="#FFFFFF" opacity=".07" transform="translate(54 301)"><path d="M554.67 131.48a9.46 9.46 0 0 1 13.33 0 9.46 9.46 0 0 0 13.33 0l13.33-13.24a28.39 28.39 0 0 1 40 0l10 9.93a14.2 14.2 0 0 0 20 0 14.2 14.2 0 0 1 20 0l.6.6a31.8 31.8 0 0 1 9.4 22.56H548v-3.84c0-6.01 2.4-11.78 6.67-16.01zM751 8.25c11.07-11 28.93-11 40 0l10 9.94a14.19 14.19 0 0 0 20 0 14.19 14.19 0 0 1 20 0 16.36 16.36 0 0 0 21.3 1.5l8.7-6.47a33.47 33.47 0 0 1 40 0l4.06 3.03A39.6 39.6 0 0 1 931 48H731c0-12.72 8.93-28.75 20-39.75zM14.1 75.14l.9-.9a21.29 21.29 0 0 1 30 0 21.29 21.29 0 0 0 30 0l10-9.93a35.48 35.48 0 0 1 50 0l15 14.9a14.2 14.2 0 0 0 20 0 14.2 14.2 0 0 1 20 0c6.4 6.35 10 15 10 24.02V109H0c0-12.71 5.07-24.9 14.1-33.86z"/></g></g></svg>
\ No newline at end of file
diff --git a/public/svg/404.svg b/public/svg/404.svg
new file mode 100644
index 000000000..b6cd6f237
--- /dev/null
+++ b/public/svg/404.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1024 1024"><defs><linearGradient id="a" x1="50.31%" x2="50%" y1="74.74%" y2="0%"><stop offset="0%" stop-color="#FFE98A"/><stop offset="67.7%" stop-color="#B63E59"/><stop offset="100%" stop-color="#68126F"/></linearGradient><circle id="c" cx="603" cy="682" r="93"/><filter id="b" width="203.2%" height="203.2%" x="-51.6%" y="-51.6%" filterUnits="objectBoundingBox"><feOffset in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="32"/><feColorMatrix in="shadowBlurOuter1" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><linearGradient id="d" x1="49.48%" x2="49.87%" y1="11.66%" y2="77.75%"><stop offset="0%" stop-color="#F7EAB9"/><stop offset="100%" stop-color="#E5765E"/></linearGradient><linearGradient id="e" x1="91.59%" x2="66.97%" y1="5.89%" y2="100%"><stop offset="0%" stop-color="#A22A50"/><stop offset="100%" stop-color="#EE7566"/></linearGradient><linearGradient id="f" x1="49.48%" x2="49.61%" y1="11.66%" y2="98.34%"><stop offset="0%" stop-color="#F7EAB9"/><stop offset="100%" stop-color="#E5765E"/></linearGradient><linearGradient id="g" x1="78.5%" x2="36.4%" y1="106.76%" y2="26.41%"><stop offset="0%" stop-color="#A22A50"/><stop offset="100%" stop-color="#EE7566"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><rect width="1024" height="1024" fill="url(#a)"/><use fill="black" filter="url(#b)" xlink:href="#c"/><use fill="#FFF6CB" xlink:href="#c"/><g fill="#FFFFFF" opacity=".3" transform="translate(14 23)"><circle cx="203" cy="255" r="3" fill-opacity=".4"/><circle cx="82" cy="234" r="2"/><circle cx="22" cy="264" r="2" opacity=".4"/><circle cx="113" cy="65" r="3"/><circle cx="202" cy="2" r="2"/><circle cx="2" cy="114" r="2"/><circle cx="152" cy="144" r="2"/><circle cx="362" cy="224" r="2"/><circle cx="453" cy="65" r="3" opacity=".4"/><circle cx="513" cy="255" r="3"/><circle cx="593" cy="115" r="3"/><circle cx="803" cy="5" r="3" opacity=".4"/><circle cx="502" cy="134" r="2"/><circle cx="832" cy="204" r="2"/><circle cx="752" cy="114" r="2"/><circle cx="933" cy="255" r="3" opacity=".4"/><circle cx="703" cy="225" r="3"/><circle cx="903" cy="55" r="3"/><circle cx="982" cy="144" r="2"/><circle cx="632" cy="14" r="2"/></g><g transform="translate(0 550)"><path fill="#8E2C15" d="M259 5.47c0 5.33 3.33 9.5 10 12.5s9.67 9.16 9 18.5h1c.67-6.31 1-11.8 1-16.47 8.67 0 13.33-1.33 14-4 .67 4.98 1.67 8.3 3 9.97 1.33 1.66 2 5.16 2 10.5h1c0-5.65.33-9.64 1-11.97 1-3.5 4-10.03-1-14.53S295 7 290 3c-5-4-10-3-13 2s-5 7-9 7-5-3.53-5-5.53c0-2 2-5-1.5-5s-7.5 0-7.5 2c0 1.33 1.67 2 5 2z"/><path fill="url(#d)" d="M1024 390H0V105.08C77.3 71.4 155.26 35 297.4 35c250 0 250.76 125.25 500 125 84.03-.08 160.02-18.2 226.6-40.93V390z"/><path fill="url(#d)" d="M1024 442H0V271.82c137.51-15.4 203.1-50.49 356.67-60.1C555.24 199.3 606.71 86.59 856.74 86.59c72.78 0 124.44 10.62 167.26 25.68V442z"/><path fill="url(#e)" d="M1024 112.21V412H856.91c99.31-86.5 112.63-140.75 39.97-162.78C710.24 192.64 795.12 86.58 856.9 86.58c72.7 0 124.3 10.6 167.09 25.63z"/><path fill="url(#e)" d="M1024 285.32V412H857c99.31-86.6 112.63-140.94 39.97-163L1024 285.32z"/><path fill="url(#f)" d="M0 474V223.93C67.12 190.69 129.55 155 263 155c250 0 331.46 162.6 530 175 107.42 6.71 163-26.77 231-58.92V474H0z"/><path fill="url(#e)" d="M353.02 474H0V223.93C67.12 190.69 129.55 155 263 155c71.14 0 151.5 12.76 151.5 70.5 0 54.5-45.5 79.72-112.5 109-82.26 35.95-54.57 111.68 51.02 139.5z"/><path fill="url(#g)" d="M353.02 474H0v-14.8l302-124.7c-82.26 35.95-54.57 111.68 51.02 139.5z"/></g><g fill="#FFFFFF" opacity=".2" transform="translate(288 523)"><circle cx="250" cy="110" r="110"/><circle cx="420" cy="78" r="60"/><circle cx="70" cy="220" r="70"/></g><g fill="#FFFFFF" fill-rule="nonzero" opacity=".08" transform="translate(135 316)"><path d="M10 80.22a14.2 14.2 0 0 1 20 0 14.2 14.2 0 0 0 20 0l20-19.86a42.58 42.58 0 0 1 60 0l15 14.9a21.3 21.3 0 0 0 30 0 21.3 21.3 0 0 1 30 0l.9.9A47.69 47.69 0 0 1 220 110H0v-5.76c0-9.02 3.6-17.67 10-24.02zm559.1-66.11l5.9-5.86c11.07-11 28.93-11 40 0l10 9.94a14.19 14.19 0 0 0 20 0 14.19 14.19 0 0 1 20 0 16.36 16.36 0 0 0 21.3 1.5l8.7-6.47a33.47 33.47 0 0 1 40 0l4.06 3.03A39.6 39.6 0 0 1 755 48H555a47.77 47.77 0 0 1 14.1-33.89z"/></g></g></svg>
\ No newline at end of file
diff --git a/public/svg/500.svg b/public/svg/500.svg
new file mode 100644
index 000000000..9927e8d75
--- /dev/null
+++ b/public/svg/500.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1024 1024"><defs><linearGradient id="a" x1="50%" x2="50%" y1="100%" y2="0%"><stop offset="0%" stop-color="#F6EDAE"/><stop offset="100%" stop-color="#91D4D7"/></linearGradient><linearGradient id="b" x1="49.87%" x2="49.87%" y1="3.62%" y2="77.75%"><stop offset="0%" stop-color="#B0DDF1"/><stop offset="100%" stop-color="#325C82"/></linearGradient><linearGradient id="c" x1="100%" x2="72.45%" y1="0%" y2="85.2%"><stop offset="0%" stop-color="#1D3A6D"/><stop offset="100%" stop-color="#467994"/></linearGradient><linearGradient id="d" x1="54.81%" x2="50%" y1="-18.48%" y2="59.98%"><stop offset="0%" stop-color="#FFFFFF"/><stop offset="28.15%" stop-color="#F8E6B3"/><stop offset="100%" stop-color="#D5812F"/></linearGradient><linearGradient id="e" x1="52.84%" x2="49.87%" y1="2.8%" y2="77.75%"><stop offset="0%" stop-color="#FFFFFF"/><stop offset="22.15%" stop-color="#F8E6B3"/><stop offset="100%" stop-color="#F9D989"/></linearGradient><linearGradient id="f" x1="91.59%" x2="66.97%" y1="5.89%" y2="100%"><stop offset="0%" stop-color="#CE4014"/><stop offset="100%" stop-color="#FFD56E"/></linearGradient><linearGradient id="g" x1="40.28%" x2="66.37%" y1="30.88%" y2="108.51%"><stop offset="0%" stop-color="#A2491E"/><stop offset="100%" stop-color="#F4B35A"/></linearGradient><circle id="i" cx="825" cy="235" r="70"/><filter id="h" width="237.1%" height="237.1%" x="-68.6%" y="-68.6%" filterUnits="objectBoundingBox"><feOffset in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="32"/><feColorMatrix in="shadowBlurOuter1" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><linearGradient id="j" x1="50%" x2="50%" y1="0%" y2="100%"><stop offset="0%" stop-color="#B29959"/><stop offset="100%" stop-color="#CEAD5B"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><rect width="1024" height="1024" fill="url(#a)"/><path fill="#FFFFFF" d="M1024 378.13v39.37H790a71.59 71.59 0 0 1 21.14-50.8l1.36-1.34a31.93 31.93 0 0 1 45 0 31.93 31.93 0 0 0 45 0l15-14.9a53.21 53.21 0 0 1 75 0l22.5 22.35a21.2 21.2 0 0 0 9 5.32z" opacity=".15"/><g transform="translate(26 245)"><path fill="url(#b)" d="M289.12 450.57C312.22 464.04 263.85 532.52 144 656h649C448.94 514.3 280.98 445.83 289.12 450.57z"/><path fill="url(#c)" d="M262.5 402c-48 50 147.33 58.02 36 136.5-40.67 28.67 21.17 67.83 185.5 117.5H0l262.5-254z"/><path fill="url(#c)" d="M298.5 538.5C257.83 567.17 319.67 606.33 484 656H120l178.5-117.5z"/></g><path fill="#134F4E" d="M783 593.73a29.95 29.95 0 0 1-12-24c0-9.8 4.72-18.52 12-24-5.02 6.69-8 15-8 24 0 9.01 2.98 17.32 8 24z"/><g fill="#134F4E" transform="matrix(-1 0 0 1 876 532)"><path d="M24 66.73a29.95 29.95 0 0 1-12-24c0-9.8 4.72-18.52 12-24-5.02 6.69-8 15-8 24 0 9.01 2.98 17.32 8 24z"/><path d="M36 22.4l-3.96-3.98a5 5 0 0 0-6.5-.5 3 3 0 0 1 3.7-3.55l8.7 2.33a8 8 0 0 1 5.66 9.8l-1-1.73a2 2 0 0 0-1.21-.93L36 22.4zm-5.38-2.56L37 26.2a8 8 0 0 1 0 11.32v-2a2 2 0 0 0-.6-1.42L26.39 24.08a3 3 0 0 1 4.24-4.24zM14.21 9.8l-3.94-3.94a2 2 0 0 0-1.42-.59h-2a8 8 0 0 1 11.32 0l6.36 6.37a3 3 0 0 1-1.22 4.98 5 5 0 0 0-3.68-5.37l-5.42-1.45zm4.9 3.39a3 3 0 1 1-1.55 5.8L3.87 15.31a2 2 0 0 0-1.52.2l-1.73 1a8 8 0 0 1 9.8-5.65l8.7 2.33z"/></g><g transform="translate(0 245)"><path fill="url(#d)" d="M1024 423.16V645H58.09c-32.12-75.17-32.12-123.84 0-146 48.17-33.24 127.17-64.25 293.33-64 166.17.25 246.67-105 413.33-105 117.33 0 183.93 55.8 259.25 93.16z"/><path fill="url(#e)" d="M1024 778H0V398.62C75.53 363.05 136.43 320 283 320c111.86 0 358.86 69.82 741 209.47V778z"/><path fill="url(#f)" d="M0 778V398.62C75.53 363.05 136.43 320 283 320c71.14 0 85.96 26.04 32.5 82-79.5 83.22 279.7 2.01 336 131.5 26 59.8-69.83 141.3-287.48 244.5H0z"/><path fill="url(#g)" d="M364.02 778H0V638.4L315.5 402c-79.5 83.22 279.7 2.01 336 131.5 26 59.8-69.83 141.3-287.48 244.5z"/></g><path fill="#134F4E" d="M795 549.4l-3.96-3.98a5 5 0 0 0-6.5-.5 3 3 0 0 1 3.7-3.55l8.7 2.33a8 8 0 0 1 5.66 9.8l-1-1.73a2 2 0 0 0-1.21-.93L795 549.4zm-5.38-2.56l6.37 6.36a8 8 0 0 1 0 11.32v-2a2 2 0 0 0-.6-1.42l-10.01-10.02a3 3 0 0 1 4.24-4.24zm-16.41-10.03l-3.94-3.94a2 2 0 0 0-1.42-.59h-2a8 8 0 0 1 11.32 0l6.36 6.37a3 3 0 0 1-1.22 4.98 5 5 0 0 0-3.68-5.37l-5.42-1.45zm4.9 3.39a3 3 0 1 1-1.55 5.8l-13.69-3.68a2 2 0 0 0-1.52.2l-1.73 1a8 8 0 0 1 9.8-5.65l8.7 2.33z"/><path fill="#FFFFFF" d="M395.67 116.48a9.46 9.46 0 0 1 13.33 0 9.46 9.46 0 0 0 13.33 0l13.33-13.24a28.39 28.39 0 0 1 40 0l10 9.93a14.2 14.2 0 0 0 20 0 14.2 14.2 0 0 1 20 0l.6.6a31.8 31.8 0 0 1 9.4 22.56H389v-3.84c0-6.01 2.4-11.78 6.67-16.01zM98.1 249.1l5.9-5.86c11.07-11 28.93-11 40 0l10 9.94a14.19 14.19 0 0 0 20 0 14.19 14.19 0 0 1 20 0 16.36 16.36 0 0 0 21.3 1.5l8.7-6.47a33.47 33.47 0 0 1 40 0l4.06 3.03A39.6 39.6 0 0 1 284 283H84a47.77 47.77 0 0 1 14.1-33.89z" opacity=".15"/><use fill="black" filter="url(#h)" xlink:href="#i"/><use fill="#FFFFFF" xlink:href="#i"/><path fill="#FFFFFF" d="M702.69 960.64a4.32 4.32 0 0 1-1.04 6.87c-2.26 1.2-3.69 2.1-4.27 2.67-.51.52-1.17 1.4-1.97 2.62a3.53 3.53 0 0 1-5.45.56 3.53 3.53 0 0 1 .56-5.44c1.23-.8 2.1-1.46 2.62-1.98.58-.58 1.47-2 2.67-4.27a4.32 4.32 0 0 1 6.88-1.03z" opacity=".6"/><path fill="url(#j)" d="M700.32 962a4.32 4.32 0 0 1 4.13 5.6c-.75 2.45-1.13 4.08-1.13 4.9 0 .73.15 1.81.45 3.25a3.53 3.53 0 0 1-3.45 4.25 3.53 3.53 0 0 1-3.45-4.25c.3-1.44.45-2.52.45-3.25 0-.82-.37-2.45-1.13-4.9a4.32 4.32 0 0 1 4.13-5.6z" transform="rotate(45 700.323 971)"/><g transform="rotate(-15 3943.802 -2244.376)"><path fill="#FFFFFF" d="M16.65 3.9a4.32 4.32 0 0 1-1.03 6.87c-2.27 1.2-3.7 2.1-4.27 2.67-.52.52-1.18 1.4-1.98 2.62a3.53 3.53 0 0 1-5.44.56 3.53 3.53 0 0 1 .56-5.44c1.23-.8 2.1-1.46 2.62-1.98.58-.58 1.47-2 2.67-4.27a4.32 4.32 0 0 1 6.87-1.03z" opacity=".6"/><path fill="url(#j)" d="M13.32 5a4.32 4.32 0 0 1 4.13 5.6c-.75 2.45-1.13 4.08-1.13 4.9 0 .73.15 1.81.45 3.25A3.53 3.53 0 0 1 13.32 23a3.53 3.53 0 0 1-3.45-4.25c.3-1.44.45-2.52.45-3.25 0-.82-.37-2.45-1.13-4.9A4.32 4.32 0 0 1 13.32 5z" transform="rotate(45 13.323 14)"/></g><g transform="rotate(-15 4117.1 -2152.014)"><path fill="#FFFFFF" d="M16.65 3.9a4.32 4.32 0 0 1-1.03 6.87c-2.27 1.2-3.7 2.1-4.27 2.67-.52.52-1.18 1.4-1.98 2.62a3.53 3.53 0 0 1-5.44.56 3.53 3.53 0 0 1 .56-5.44c1.23-.8 2.1-1.46 2.62-1.98.58-.58 1.47-2 2.67-4.27a4.32 4.32 0 0 1 6.87-1.03z" opacity=".6"/><path fill="url(#j)" d="M13.32 5a4.32 4.32 0 0 1 4.13 5.6c-.75 2.45-1.13 4.08-1.13 4.9 0 .73.15 1.81.45 3.25A3.53 3.53 0 0 1 13.32 23a3.53 3.53 0 0 1-3.45-4.25c.3-1.44.45-2.52.45-3.25 0-.82-.37-2.45-1.13-4.9A4.32 4.32 0 0 1 13.32 5z" transform="rotate(45 13.323 14)"/></g><g transform="rotate(-15 4127.186 -2023.184)"><path fill="#FFFFFF" d="M16.65 3.9a4.32 4.32 0 0 1-1.03 6.87c-2.27 1.2-3.7 2.1-4.27 2.67-.52.52-1.18 1.4-1.98 2.62a3.53 3.53 0 0 1-5.44.56 3.53 3.53 0 0 1 .56-5.44c1.23-.8 2.1-1.46 2.62-1.98.58-.58 1.47-2 2.67-4.27a4.32 4.32 0 0 1 6.87-1.03z" opacity=".6"/><path fill="url(#j)" d="M13.32 5a4.32 4.32 0 0 1 4.13 5.6c-.75 2.45-1.13 4.08-1.13 4.9 0 .73.15 1.81.45 3.25A3.53 3.53 0 0 1 13.32 23a3.53 3.53 0 0 1-3.45-4.25c.3-1.44.45-2.52.45-3.25 0-.82-.37-2.45-1.13-4.9A4.32 4.32 0 0 1 13.32 5z" transform="rotate(45 13.323 14)"/></g><g transform="rotate(-30 2055.753 -866.842)"><path fill="#FFFFFF" d="M16.55 3.4a4.32 4.32 0 0 1-1.03 6.88c-2.27 1.2-3.7 2.1-4.27 2.67-.52.52-1.18 1.39-1.98 2.62a3.53 3.53 0 0 1-5.44.56 3.53 3.53 0 0 1 .56-5.44c1.23-.8 2.1-1.46 2.62-1.98.58-.58 1.47-2 2.67-4.27a4.32 4.32 0 0 1 6.87-1.04z" opacity=".6"/><path fill="url(#j)" d="M12.32 6a4.32 4.32 0 0 1 4.13 5.6c-.75 2.45-1.13 4.08-1.13 4.9 0 .73.15 1.81.45 3.25A3.53 3.53 0 0 1 12.32 24a3.53 3.53 0 0 1-3.45-4.25c.3-1.44.45-2.52.45-3.25 0-.82-.37-2.45-1.13-4.9A4.32 4.32 0 0 1 12.32 6z" transform="rotate(45 12.323 15)"/></g><g transform="rotate(-30 2046.995 -931.189)"><path fill="#FFFFFF" d="M16.55 3.4a4.32 4.32 0 0 1-1.03 6.88c-2.27 1.2-3.7 2.1-4.27 2.67-.52.52-1.18 1.39-1.98 2.62a3.53 3.53 0 0 1-5.44.56 3.53 3.53 0 0 1 .56-5.44c1.23-.8 2.1-1.46 2.62-1.98.58-.58 1.47-2 2.67-4.27a4.32 4.32 0 0 1 6.87-1.04z" opacity=".6"/><path fill="url(#j)" d="M12.32 6a4.32 4.32 0 0 1 4.13 5.6c-.75 2.45-1.13 4.08-1.13 4.9 0 .73.15 1.81.45 3.25A3.53 3.53 0 0 1 12.32 24a3.53 3.53 0 0 1-3.45-4.25c.3-1.44.45-2.52.45-3.25 0-.82-.37-2.45-1.13-4.9A4.32 4.32 0 0 1 12.32 6z" transform="rotate(45 12.323 15)"/></g><g transform="rotate(-45 1406.147 -409.132)"><path fill="#FFFFFF" d="M16.93 3.22a4.32 4.32 0 0 1-1.03 6.88c-2.27 1.2-3.7 2.09-4.27 2.67-.52.52-1.18 1.39-1.98 2.61a3.53 3.53 0 0 1-5.45.57 3.53 3.53 0 0 1 .57-5.45c1.22-.8 2.1-1.46 2.61-1.97.58-.58 1.47-2 2.67-4.27a4.32 4.32 0 0 1 6.88-1.04z" opacity=".6"/><path fill="url(#j)" d="M10.32 6a4.32 4.32 0 0 1 4.13 5.6c-.75 2.45-1.13 4.08-1.13 4.9 0 .73.15 1.81.45 3.25A3.53 3.53 0 0 1 10.32 24a3.53 3.53 0 0 1-3.45-4.25c.3-1.44.45-2.52.45-3.25 0-.82-.37-2.45-1.13-4.9A4.32 4.32 0 0 1 10.32 6z" transform="rotate(45 10.323 15)"/></g><g transform="rotate(-24 2389.63 -1296.285)"><path fill="#FFFFFF" d="M16.93 3.22a4.32 4.32 0 0 1-1.03 6.88c-2.27 1.2-3.7 2.09-4.27 2.67-.52.52-1.18 1.39-1.98 2.61a3.53 3.53 0 0 1-5.45.57 3.53 3.53 0 0 1 .57-5.45c1.22-.8 2.1-1.46 2.61-1.97.58-.58 1.47-2 2.67-4.27a4.32 4.32 0 0 1 6.88-1.04z" opacity=".6"/><path fill="url(#j)" d="M10.32 6a4.32 4.32 0 0 1 4.13 5.6c-.75 2.45-1.13 4.08-1.13 4.9 0 .73.15 1.81.45 3.25A3.53 3.53 0 0 1 10.32 24a3.53 3.53 0 0 1-3.45-4.25c.3-1.44.45-2.52.45-3.25 0-.82-.37-2.45-1.13-4.9A4.32 4.32 0 0 1 10.32 6z" transform="rotate(45 10.323 15)"/></g><g transform="rotate(-50 1258.425 -353.155)"><path fill="#FFFFFF" d="M16.93 3.22a4.32 4.32 0 0 1-1.03 6.88c-2.27 1.2-3.7 2.09-4.27 2.67-.52.52-1.18 1.39-1.98 2.61a3.53 3.53 0 0 1-5.45.57 3.53 3.53 0 0 1 .57-5.45c1.22-.8 2.1-1.46 2.61-1.97.58-.58 1.47-2 2.67-4.27a4.32 4.32 0 0 1 6.88-1.04z" opacity=".6"/><path fill="url(#j)" d="M10.32 6a4.32 4.32 0 0 1 4.13 5.6c-.75 2.45-1.13 4.08-1.13 4.9 0 .73.15 1.81.45 3.25A3.53 3.53 0 0 1 10.32 24a3.53 3.53 0 0 1-3.45-4.25c.3-1.44.45-2.52.45-3.25 0-.82-.37-2.45-1.13-4.9A4.32 4.32 0 0 1 10.32 6z" transform="rotate(45 10.323 15)"/></g><g transform="rotate(-35 1652.744 -777.703)"><path fill="#FFFFFF" d="M16.08 3.06a4.1 4.1 0 0 1-.98 6.53c-2.15 1.14-3.5 1.99-4.05 2.54-.5.5-1.12 1.32-1.88 2.49a3.35 3.35 0 0 1-5.18.53 3.35 3.35 0 0 1 .54-5.17c1.16-.76 2-1.39 2.48-1.88.55-.55 1.4-1.9 2.54-4.06a4.1 4.1 0 0 1 6.53-.98z" opacity=".6"/><path fill="url(#j)" d="M9.8 5.7a4.1 4.1 0 0 1 3.93 5.31c-.71 2.33-1.07 3.89-1.07 4.67 0 .69.14 1.72.43 3.08A3.35 3.35 0 0 1 9.8 22.8a3.35 3.35 0 0 1-3.28-4.04c.28-1.36.43-2.39.43-3.09 0-.77-.36-2.33-1.08-4.66A4.1 4.1 0 0 1 9.81 5.7z" transform="rotate(45 9.807 14.25)"/></g><g transform="rotate(-35 1605.77 -758.112)"><path fill="#FFFFFF" d="M15.24 2.9a3.89 3.89 0 0 1-.93 6.19c-2.04 1.08-3.33 1.88-3.85 2.4a15.6 15.6 0 0 0-1.78 2.36 3.17 3.17 0 0 1-4.9.5 3.17 3.17 0 0 1 .51-4.9 15.6 15.6 0 0 0 2.36-1.78c.52-.52 1.32-1.8 2.4-3.84a3.89 3.89 0 0 1 6.19-.93z" opacity=".6"/><path fill="url(#j)" d="M9.3 5.4a3.89 3.89 0 0 1 3.7 5.03c-.67 2.21-1 3.68-1 4.42 0 .66.13 1.63.4 2.92a3.17 3.17 0 0 1-3.1 3.83 3.17 3.17 0 0 1-3.12-3.83c.28-1.29.41-2.26.41-2.92 0-.74-.34-2.2-1.02-4.42A3.89 3.89 0 0 1 9.3 5.4z" transform="rotate(45 9.29 13.5)"/></g><g transform="rotate(-35 1591.812 -807.843)"><path fill="#FFFFFF" d="M15.24 2.9a3.89 3.89 0 0 1-.93 6.19c-2.04 1.08-3.33 1.88-3.85 2.4a15.6 15.6 0 0 0-1.78 2.36 3.17 3.17 0 0 1-4.9.5 3.17 3.17 0 0 1 .51-4.9 15.6 15.6 0 0 0 2.36-1.78c.52-.52 1.32-1.8 2.4-3.84a3.89 3.89 0 0 1 6.19-.93z" opacity=".6"/><path fill="url(#j)" d="M9.3 5.4a3.89 3.89 0 0 1 3.7 5.03c-.67 2.21-1 3.68-1 4.42 0 .66.13 1.63.4 2.92a3.17 3.17 0 0 1-3.1 3.83 3.17 3.17 0 0 1-3.12-3.83c.28-1.29.41-2.26.41-2.92 0-.74-.34-2.2-1.02-4.42A3.89 3.89 0 0 1 9.3 5.4z" transform="rotate(45 9.29 13.5)"/></g><g transform="rotate(-44 1287.793 -536.004)"><path fill="#FFFFFF" d="M15.24 2.9a3.89 3.89 0 0 1-.93 6.19c-2.04 1.08-3.33 1.88-3.85 2.4a15.6 15.6 0 0 0-1.78 2.36 3.17 3.17 0 0 1-4.9.5 3.17 3.17 0 0 1 .51-4.9 15.6 15.6 0 0 0 2.36-1.78c.52-.52 1.32-1.8 2.4-3.84a3.89 3.89 0 0 1 6.19-.93z" opacity=".6"/><path fill="url(#j)" d="M9.3 5.4a3.89 3.89 0 0 1 3.7 5.03c-.67 2.21-1 3.68-1 4.42 0 .66.13 1.63.4 2.92a3.17 3.17 0 0 1-3.1 3.83 3.17 3.17 0 0 1-3.12-3.83c.28-1.29.41-2.26.41-2.92 0-.74-.34-2.2-1.02-4.42A3.89 3.89 0 0 1 9.3 5.4z" transform="rotate(45 9.29 13.5)"/></g><g transform="rotate(-28 1831.874 -1151.097)"><path fill="#FFFFFF" d="M15.24 2.9a3.89 3.89 0 0 1-.93 6.19c-2.04 1.08-3.33 1.88-3.85 2.4a15.6 15.6 0 0 0-1.78 2.36 3.17 3.17 0 0 1-4.9.5 3.17 3.17 0 0 1 .51-4.9 15.6 15.6 0 0 0 2.36-1.78c.52-.52 1.32-1.8 2.4-3.84a3.89 3.89 0 0 1 6.19-.93z" opacity=".6"/><path fill="url(#j)" d="M9.3 5.4a3.89 3.89 0 0 1 3.7 5.03c-.67 2.21-1 3.68-1 4.42 0 .66.13 1.63.4 2.92a3.17 3.17 0 0 1-3.1 3.83 3.17 3.17 0 0 1-3.12-3.83c.28-1.29.41-2.26.41-2.92 0-.74-.34-2.2-1.02-4.42A3.89 3.89 0 0 1 9.3 5.4z" transform="rotate(45 9.29 13.5)"/></g><g transform="rotate(-41 1316.639 -621.138)"><path fill="#FFFFFF" d="M13.54 2.58a3.46 3.46 0 0 1-.82 5.5A17.18 17.18 0 0 0 9.3 10.2c-.41.42-.94 1.12-1.58 2.1a2.82 2.82 0 0 1-4.36.45 2.82 2.82 0 0 1 .45-4.36c.99-.64 1.68-1.17 2.1-1.58.46-.46 1.17-1.6 2.13-3.42a3.46 3.46 0 0 1 5.5-.82z" opacity=".6"/><path fill="url(#j)" d="M8.26 4.8a3.46 3.46 0 0 1 3.3 4.47c-.6 1.97-.9 3.27-.9 3.93 0 .59.12 1.45.36 2.6a2.82 2.82 0 0 1-2.76 3.4 2.82 2.82 0 0 1-2.76-3.4c.24-1.15.36-2.01.36-2.6 0-.66-.3-1.96-.9-3.93a3.46 3.46 0 0 1 3.3-4.47z" transform="rotate(45 8.258 12)"/></g><g transform="rotate(-41 1286.706 -646.924)"><path fill="#FFFFFF" d="M11.85 2.26a3.03 3.03 0 0 1-.72 4.8 15.04 15.04 0 0 0-3 1.88c-.35.36-.82.97-1.38 1.83a2.47 2.47 0 0 1-3.8.4 2.47 2.47 0 0 1 .39-3.82C4.2 6.8 4.8 6.33 5.17 5.97c.4-.4 1.03-1.4 1.87-3a3.03 3.03 0 0 1 4.81-.71z" opacity=".6"/><path fill="url(#j)" d="M7.23 4.2a3.03 3.03 0 0 1 2.89 3.91c-.53 1.72-.8 2.87-.8 3.44 0 .51.11 1.27.32 2.27a2.47 2.47 0 0 1-2.41 2.98 2.47 2.47 0 0 1-2.42-2.98c.21-1 .32-1.76.32-2.27 0-.57-.27-1.72-.8-3.44a3.03 3.03 0 0 1 2.9-3.91z" transform="rotate(45 7.226 10.5)"/></g><g transform="rotate(-24 2011.85 -1427.831)"><path fill="#FFFFFF" d="M13.54 2.58a3.46 3.46 0 0 1-.82 5.5A17.18 17.18 0 0 0 9.3 10.2c-.41.42-.94 1.12-1.58 2.1a2.82 2.82 0 0 1-4.36.45 2.82 2.82 0 0 1 .45-4.36c.99-.64 1.68-1.17 2.1-1.58.46-.46 1.17-1.6 2.13-3.42a3.46 3.46 0 0 1 5.5-.82z" opacity=".6"/><path fill="url(#j)" d="M8.26 4.8a3.46 3.46 0 0 1 3.3 4.47c-.6 1.97-.9 3.27-.9 3.93 0 .59.12 1.45.36 2.6a2.82 2.82 0 0 1-2.76 3.4 2.82 2.82 0 0 1-2.76-3.4c.24-1.15.36-2.01.36-2.6 0-.66-.3-1.96-.9-3.93a3.46 3.46 0 0 1 3.3-4.47z" transform="rotate(45 8.258 12)"/></g><circle cx="756" cy="209" r="110" fill="#FFFFFF" opacity=".2"/><circle cx="859" cy="139" r="40" fill="#FFFFFF" opacity=".2"/><circle cx="551" cy="383" r="70" fill="#FFFFFF" opacity=".2"/><circle cx="666" cy="359" r="30" fill="#FFFFFF" opacity=".2"/><rect width="60" height="6" x="722" y="547" fill="#FFFFFF" opacity=".4" rx="3"/><rect width="60" height="6" x="842" y="565" fill="#FFFFFF" opacity=".4" rx="3"/><rect width="40" height="6" x="762" y="559" fill="#FFFFFF" opacity=".4" rx="3"/><rect width="40" height="6" x="872" y="553" fill="#FFFFFF" opacity=".4" rx="3"/><rect width="40" height="6" x="811" y="547" fill="#FFFFFF" opacity=".4" rx="3"/></g></svg>
\ No newline at end of file
diff --git a/public/svg/503.svg b/public/svg/503.svg
new file mode 100644
index 000000000..6ad109336
--- /dev/null
+++ b/public/svg/503.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1024 1024"><defs><linearGradient id="a" x1="50.31%" x2="50%" y1="74.74%" y2="0%"><stop offset="0%" stop-color="#E26B6B"/><stop offset="50.28%" stop-color="#F5BCF4"/><stop offset="100%" stop-color="#8690E1"/></linearGradient><linearGradient id="b" x1="50%" x2="50%" y1="0%" y2="100%"><stop offset="0%" stop-color="#8C9CE7"/><stop offset="100%" stop-color="#4353A4"/></linearGradient><linearGradient id="c" x1="50%" x2="50%" y1="0%" y2="100%"><stop offset="0%" stop-color="#D1D9FF"/><stop offset="100%" stop-color="#8395EB"/></linearGradient><circle id="e" cx="622" cy="663" r="60"/><filter id="d" width="260%" height="260%" x="-80%" y="-80%" filterUnits="objectBoundingBox"><feOffset in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="32"/><feColorMatrix in="shadowBlurOuter1" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><linearGradient id="f" x1="49.87%" x2="49.87%" y1="3.62%" y2="77.75%"><stop offset="0%" stop-color="#B0DDF1"/><stop offset="100%" stop-color="#325C82"/></linearGradient><linearGradient id="g" x1="100%" x2="72.45%" y1="0%" y2="85.2%"><stop offset="0%" stop-color="#1D3A6D"/><stop offset="100%" stop-color="#467994"/></linearGradient><linearGradient id="h" x1="49.48%" x2="49.87%" y1="11.66%" y2="77.75%"><stop offset="0%" stop-color="#B9C9F7"/><stop offset="100%" stop-color="#301863"/></linearGradient><linearGradient id="i" x1="91.59%" x2="70.98%" y1="5.89%" y2="88%"><stop offset="0%" stop-color="#2D3173"/><stop offset="100%" stop-color="#7F90E0"/></linearGradient><linearGradient id="j" x1="70.98%" x2="70.98%" y1="9.88%" y2="88%"><stop offset="0%" stop-color="#2D3173"/><stop offset="100%" stop-color="#7F90E0"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><rect width="1024" height="1024" fill="url(#a)"/><g transform="translate(211 420)"><path fill="#8C9CE7" d="M65 0a2 2 0 0 1 2 2v23h-4V2c0-1.1.9-2 2-2z"/><path fill="#5263B8" d="M64 24h2a3 3 0 0 1 3 3v2h-8v-2a3 3 0 0 1 3-3z"/><path fill="url(#b)" d="M65 108h40V68a40 40 0 1 0-80 0v40h40z"/><polygon fill="#2E3D87" points="0 118 30 112 30 218 0 218"/><polygon fill="#301862" points="60 118 30 112 30 218 60 218"/><path fill="url(#c)" d="M45 107V68a40.02 40.02 0 0 1 30.03-38.75C92.27 33.65 105 49.11 105 67.5V107H45z"/><polygon fill="#4353A4" points="15 78 65 68 67 70 67 178 15 178"/><polygon fill="#8C9CE7" points="115 78 65 68 65 70 65 178 115 178"/><polygon fill="#4353A4" points="75 118 105 112 105 218 75 218"/><polygon fill="#8C9CE7" points="135 118 105 112 105 218 135 218"/></g><use fill="black" filter="url(#d)" xlink:href="#e"/><use fill="#FFFFFF" xlink:href="#e"/><g transform="translate(146 245)"><path fill="url(#f)" d="M169.12 450.57C192.22 464.04 143.85 532.52 24 656h649C328.94 514.3 160.98 445.83 169.12 450.57z"/><path fill="url(#g)" d="M178.5 538.5C137.83 567.17 199.67 606.33 364 656H0l178.5-117.5z"/></g><g transform="translate(0 255)"><path fill="url(#h)" d="M1024 685H0V400.08C77.3 366.4 155.26 330 297.4 330c250 0 250.76 125.25 500 125 84.03-.08 160.02-18.2 226.6-40.93V685z"/></g><path fill="#1F2A68" d="M251 506a8 8 0 0 1 8 8v15l-16 1v-16a8 8 0 0 1 8-8z"/><path fill="#7C8CDA" d="M253 506.25a8 8 0 0 0-6 7.75v15.75l-4 .25v-16a8 8 0 0 1 10-7.75z"/><path fill="#1F2A68" d="M251 546a8 8 0 0 1 8 8v15l-16 1v-16a8 8 0 0 1 8-8z"/><path fill="#7C8CDA" d="M253 546.25a8 8 0 0 0-6 7.75v15.75l-4 .25v-16a8 8 0 0 1 10-7.75z"/><path fill="#5263B8" d="M301 506a8 8 0 0 1 8 8v16l-16-1v-15a8 8 0 0 1 8-8z"/><path fill="#293781" d="M305 529.75V514a8 8 0 0 0-6-7.75 8.01 8.01 0 0 1 10 7.75v16l-4-.25z"/><g transform="translate(0 636)"><path fill="url(#h)" d="M1024 356H0V185.82c137.51-15.4 203.1-50.49 356.67-60.1C555.24 113.3 606.71.59 856.74.59 929.52.58 981.18 11.2 1024 26.26V356z"/><path fill="url(#i)" d="M1024 26.21V326H856.91c99.31-86.5 112.63-140.75 39.97-162.78C710.24 106.64 795.12.58 856.9.58c72.7 0 124.3 10.6 167.09 25.63z"/><path fill="url(#i)" d="M1024 199.32V326H857c99.31-86.6 112.63-140.94 39.97-163L1024 199.32z"/></g><circle cx="566" cy="599" r="110" fill="#FFFFFF" opacity=".1"/><circle cx="669" cy="539" r="60" fill="#FFFFFF" opacity=".1"/><g transform="translate(0 705)"><path fill="url(#h)" d="M0 319V68.93C67.12 35.69 129.55 0 263 0c250 0 331.46 162.6 530 175 107.42 6.71 163-26.77 231-58.92V319H0z"/><path fill="url(#i)" d="M353.02 319H0V68.93C67.12 35.69 129.55 0 263 0c71.14 0 151.5 12.76 151.5 70.5 0 54.5-45.5 79.72-112.5 109-82.26 35.95-54.57 111.68 51.02 139.5z"/><path fill="url(#j)" d="M353.02 319H0v-14.8l302-124.7c-82.26 35.95-54.57 111.68 51.02 139.5z"/></g><circle cx="414" cy="799" r="70" fill="#FFFFFF" opacity=".1"/><circle cx="479" cy="745" r="30" fill="#FFFFFF" opacity=".1"/><g fill="#FFFFFF" opacity=".15" transform="translate(49 214)"><path d="M554.67 131.48a9.46 9.46 0 0 1 13.33 0 9.46 9.46 0 0 0 13.33 0l13.33-13.24a28.39 28.39 0 0 1 40 0l10 9.93a14.2 14.2 0 0 0 20 0 14.2 14.2 0 0 1 20 0l.6.6a31.8 31.8 0 0 1 9.4 22.56H548v-3.84c0-6.01 2.4-11.78 6.67-16.01zM751 8.25c11.07-11 28.93-11 40 0l10 9.94a14.19 14.19 0 0 0 20 0 14.19 14.19 0 0 1 20 0 16.36 16.36 0 0 0 21.3 1.5l8.7-6.47a33.47 33.47 0 0 1 40 0l4.06 3.03A39.6 39.6 0 0 1 931 48H731c0-12.72 8.93-28.75 20-39.75zM14.1 75.14l.9-.9a21.29 21.29 0 0 1 30 0 21.29 21.29 0 0 0 30 0l10-9.93a35.48 35.48 0 0 1 50 0l15 14.9a14.2 14.2 0 0 0 20 0 14.2 14.2 0 0 1 20 0c6.4 6.35 10 15 10 24.02V109H0c0-12.71 5.07-24.9 14.1-33.86z"/></g></g></svg>
\ No newline at end of file
diff --git a/public/web.config b/public/web.config
new file mode 100644
index 000000000..474eb6898
--- /dev/null
+++ b/public/web.config
@@ -0,0 +1,28 @@
+<!--
+    Rewrites requires Microsoft URL Rewrite Module for IIS
+    Download: https://www.microsoft.com/en-us/download/details.aspx?id=47337
+    Debug Help: https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules
+-->
+<configuration>
+  <system.webServer>
+    <rewrite>
+      <rules>
+        <rule name="Imported Rule 1" stopProcessing="true">
+          <match url="^(.*)/$" ignoreCase="false" />
+          <conditions>
+            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
+          </conditions>
+          <action type="Redirect" redirectType="Permanent" url="/{R:1}" />
+        </rule>
+        <rule name="Imported Rule 2" stopProcessing="true">
+          <match url="^" ignoreCase="false" />
+          <conditions>
+            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
+            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
+          </conditions>
+          <action type="Rewrite" url="index.php" />
+        </rule>
+      </rules>
+    </rewrite>
+  </system.webServer>
+</configuration>
\ No newline at end of file
diff --git a/resources/assets/icons/add-circle.svg b/resources/icons/add-circle.svg
similarity index 100%
rename from resources/assets/icons/add-circle.svg
rename to resources/icons/add-circle.svg
diff --git a/resources/assets/icons/add.svg b/resources/icons/add.svg
similarity index 100%
rename from resources/assets/icons/add.svg
rename to resources/icons/add.svg
diff --git a/resources/assets/icons/attach.svg b/resources/icons/attach.svg
similarity index 100%
rename from resources/assets/icons/attach.svg
rename to resources/icons/attach.svg
diff --git a/resources/assets/icons/auth/azure.svg b/resources/icons/auth/azure.svg
similarity index 100%
rename from resources/assets/icons/auth/azure.svg
rename to resources/icons/auth/azure.svg
diff --git a/resources/assets/icons/auth/discord.svg b/resources/icons/auth/discord.svg
similarity index 100%
rename from resources/assets/icons/auth/discord.svg
rename to resources/icons/auth/discord.svg
diff --git a/resources/assets/icons/auth/facebook.svg b/resources/icons/auth/facebook.svg
similarity index 100%
rename from resources/assets/icons/auth/facebook.svg
rename to resources/icons/auth/facebook.svg
diff --git a/resources/assets/icons/auth/github.svg b/resources/icons/auth/github.svg
similarity index 100%
rename from resources/assets/icons/auth/github.svg
rename to resources/icons/auth/github.svg
diff --git a/resources/assets/icons/auth/gitlab.svg b/resources/icons/auth/gitlab.svg
similarity index 100%
rename from resources/assets/icons/auth/gitlab.svg
rename to resources/icons/auth/gitlab.svg
diff --git a/resources/assets/icons/auth/google.svg b/resources/icons/auth/google.svg
similarity index 100%
rename from resources/assets/icons/auth/google.svg
rename to resources/icons/auth/google.svg
diff --git a/resources/assets/icons/auth/okta.svg b/resources/icons/auth/okta.svg
similarity index 100%
rename from resources/assets/icons/auth/okta.svg
rename to resources/icons/auth/okta.svg
diff --git a/resources/assets/icons/auth/slack.svg b/resources/icons/auth/slack.svg
similarity index 100%
rename from resources/assets/icons/auth/slack.svg
rename to resources/icons/auth/slack.svg
diff --git a/resources/assets/icons/auth/twitch.svg b/resources/icons/auth/twitch.svg
similarity index 100%
rename from resources/assets/icons/auth/twitch.svg
rename to resources/icons/auth/twitch.svg
diff --git a/resources/assets/icons/auth/twitter.svg b/resources/icons/auth/twitter.svg
similarity index 100%
rename from resources/assets/icons/auth/twitter.svg
rename to resources/icons/auth/twitter.svg
diff --git a/resources/assets/icons/back.svg b/resources/icons/back.svg
similarity index 100%
rename from resources/assets/icons/back.svg
rename to resources/icons/back.svg
diff --git a/resources/assets/icons/book.svg b/resources/icons/book.svg
similarity index 100%
rename from resources/assets/icons/book.svg
rename to resources/icons/book.svg
diff --git a/resources/assets/icons/books.svg b/resources/icons/books.svg
similarity index 100%
rename from resources/assets/icons/books.svg
rename to resources/icons/books.svg
diff --git a/resources/assets/icons/bookshelf.svg b/resources/icons/bookshelf.svg
similarity index 100%
rename from resources/assets/icons/bookshelf.svg
rename to resources/icons/bookshelf.svg
diff --git a/resources/assets/icons/cancel.svg b/resources/icons/cancel.svg
similarity index 100%
rename from resources/assets/icons/cancel.svg
rename to resources/icons/cancel.svg
diff --git a/resources/assets/icons/caret-down.svg b/resources/icons/caret-down.svg
similarity index 100%
rename from resources/assets/icons/caret-down.svg
rename to resources/icons/caret-down.svg
diff --git a/resources/assets/icons/caret-left-circle.svg b/resources/icons/caret-left-circle.svg
similarity index 100%
rename from resources/assets/icons/caret-left-circle.svg
rename to resources/icons/caret-left-circle.svg
diff --git a/resources/assets/icons/caret-right-circle.svg b/resources/icons/caret-right-circle.svg
similarity index 100%
rename from resources/assets/icons/caret-right-circle.svg
rename to resources/icons/caret-right-circle.svg
diff --git a/resources/assets/icons/caret-right.svg b/resources/icons/caret-right.svg
similarity index 100%
rename from resources/assets/icons/caret-right.svg
rename to resources/icons/caret-right.svg
diff --git a/resources/assets/icons/chapter.svg b/resources/icons/chapter.svg
similarity index 100%
rename from resources/assets/icons/chapter.svg
rename to resources/icons/chapter.svg
diff --git a/resources/assets/icons/check-circle.svg b/resources/icons/check-circle.svg
similarity index 100%
rename from resources/assets/icons/check-circle.svg
rename to resources/icons/check-circle.svg
diff --git a/resources/assets/icons/check.svg b/resources/icons/check.svg
similarity index 100%
rename from resources/assets/icons/check.svg
rename to resources/icons/check.svg
diff --git a/resources/assets/icons/chevron-down.svg b/resources/icons/chevron-down.svg
similarity index 100%
rename from resources/assets/icons/chevron-down.svg
rename to resources/icons/chevron-down.svg
diff --git a/resources/assets/icons/chevron-right.svg b/resources/icons/chevron-right.svg
similarity index 100%
rename from resources/assets/icons/chevron-right.svg
rename to resources/icons/chevron-right.svg
diff --git a/resources/assets/icons/chevron-up.svg b/resources/icons/chevron-up.svg
similarity index 100%
rename from resources/assets/icons/chevron-up.svg
rename to resources/icons/chevron-up.svg
diff --git a/resources/assets/icons/close.svg b/resources/icons/close.svg
similarity index 100%
rename from resources/assets/icons/close.svg
rename to resources/icons/close.svg
diff --git a/resources/assets/icons/comment.svg b/resources/icons/comment.svg
similarity index 100%
rename from resources/assets/icons/comment.svg
rename to resources/icons/comment.svg
diff --git a/resources/assets/icons/copy.svg b/resources/icons/copy.svg
similarity index 100%
rename from resources/assets/icons/copy.svg
rename to resources/icons/copy.svg
diff --git a/resources/assets/icons/danger.svg b/resources/icons/danger.svg
similarity index 100%
rename from resources/assets/icons/danger.svg
rename to resources/icons/danger.svg
diff --git a/resources/assets/icons/delete.svg b/resources/icons/delete.svg
similarity index 100%
rename from resources/assets/icons/delete.svg
rename to resources/icons/delete.svg
diff --git a/resources/assets/icons/drawing.svg b/resources/icons/drawing.svg
similarity index 100%
rename from resources/assets/icons/drawing.svg
rename to resources/icons/drawing.svg
diff --git a/resources/assets/icons/edit.svg b/resources/icons/edit.svg
similarity index 100%
rename from resources/assets/icons/edit.svg
rename to resources/icons/edit.svg
diff --git a/resources/assets/icons/expand-text.svg b/resources/icons/expand-text.svg
similarity index 100%
rename from resources/assets/icons/expand-text.svg
rename to resources/icons/expand-text.svg
diff --git a/resources/assets/icons/export.svg b/resources/icons/export.svg
similarity index 100%
rename from resources/assets/icons/export.svg
rename to resources/icons/export.svg
diff --git a/resources/assets/icons/file.svg b/resources/icons/file.svg
similarity index 100%
rename from resources/assets/icons/file.svg
rename to resources/icons/file.svg
diff --git a/resources/assets/icons/folder.svg b/resources/icons/folder.svg
similarity index 100%
rename from resources/assets/icons/folder.svg
rename to resources/icons/folder.svg
diff --git a/resources/assets/icons/grid.svg b/resources/icons/grid.svg
similarity index 100%
rename from resources/assets/icons/grid.svg
rename to resources/icons/grid.svg
diff --git a/resources/assets/icons/grip.svg b/resources/icons/grip.svg
similarity index 100%
rename from resources/assets/icons/grip.svg
rename to resources/icons/grip.svg
diff --git a/resources/assets/icons/history.svg b/resources/icons/history.svg
similarity index 100%
rename from resources/assets/icons/history.svg
rename to resources/icons/history.svg
diff --git a/resources/assets/icons/image.svg b/resources/icons/image.svg
similarity index 100%
rename from resources/assets/icons/image.svg
rename to resources/icons/image.svg
diff --git a/resources/assets/icons/images.svg b/resources/icons/images.svg
similarity index 100%
rename from resources/assets/icons/images.svg
rename to resources/icons/images.svg
diff --git a/resources/assets/icons/include.svg b/resources/icons/include.svg
similarity index 100%
rename from resources/assets/icons/include.svg
rename to resources/icons/include.svg
diff --git a/resources/assets/icons/info-filled.svg b/resources/icons/info-filled.svg
similarity index 100%
rename from resources/assets/icons/info-filled.svg
rename to resources/icons/info-filled.svg
diff --git a/resources/assets/icons/info.svg b/resources/icons/info.svg
similarity index 100%
rename from resources/assets/icons/info.svg
rename to resources/icons/info.svg
diff --git a/resources/assets/icons/link.svg b/resources/icons/link.svg
similarity index 100%
rename from resources/assets/icons/link.svg
rename to resources/icons/link.svg
diff --git a/resources/assets/icons/list.svg b/resources/icons/list.svg
similarity index 100%
rename from resources/assets/icons/list.svg
rename to resources/icons/list.svg
diff --git a/resources/assets/icons/lock-open.svg b/resources/icons/lock-open.svg
similarity index 100%
rename from resources/assets/icons/lock-open.svg
rename to resources/icons/lock-open.svg
diff --git a/resources/assets/icons/lock.svg b/resources/icons/lock.svg
similarity index 100%
rename from resources/assets/icons/lock.svg
rename to resources/icons/lock.svg
diff --git a/resources/assets/icons/login.svg b/resources/icons/login.svg
similarity index 100%
rename from resources/assets/icons/login.svg
rename to resources/icons/login.svg
diff --git a/resources/assets/icons/logout.svg b/resources/icons/logout.svg
similarity index 100%
rename from resources/assets/icons/logout.svg
rename to resources/icons/logout.svg
diff --git a/resources/assets/icons/more.svg b/resources/icons/more.svg
similarity index 100%
rename from resources/assets/icons/more.svg
rename to resources/icons/more.svg
diff --git a/resources/assets/icons/new-user.svg b/resources/icons/new-user.svg
similarity index 100%
rename from resources/assets/icons/new-user.svg
rename to resources/icons/new-user.svg
diff --git a/resources/assets/icons/open-book.svg b/resources/icons/open-book.svg
similarity index 100%
rename from resources/assets/icons/open-book.svg
rename to resources/icons/open-book.svg
diff --git a/resources/assets/icons/page.svg b/resources/icons/page.svg
similarity index 100%
rename from resources/assets/icons/page.svg
rename to resources/icons/page.svg
diff --git a/resources/assets/icons/permission.svg b/resources/icons/permission.svg
similarity index 100%
rename from resources/assets/icons/permission.svg
rename to resources/icons/permission.svg
diff --git a/resources/assets/icons/popular.svg b/resources/icons/popular.svg
similarity index 100%
rename from resources/assets/icons/popular.svg
rename to resources/icons/popular.svg
diff --git a/resources/assets/icons/reply.svg b/resources/icons/reply.svg
similarity index 100%
rename from resources/assets/icons/reply.svg
rename to resources/icons/reply.svg
diff --git a/resources/assets/icons/save.svg b/resources/icons/save.svg
similarity index 100%
rename from resources/assets/icons/save.svg
rename to resources/icons/save.svg
diff --git a/resources/assets/icons/search.svg b/resources/icons/search.svg
similarity index 100%
rename from resources/assets/icons/search.svg
rename to resources/icons/search.svg
diff --git a/resources/assets/icons/settings.svg b/resources/icons/settings.svg
similarity index 100%
rename from resources/assets/icons/settings.svg
rename to resources/icons/settings.svg
diff --git a/resources/assets/icons/sort-down.svg b/resources/icons/sort-down.svg
similarity index 100%
rename from resources/assets/icons/sort-down.svg
rename to resources/icons/sort-down.svg
diff --git a/resources/assets/icons/sort-up.svg b/resources/icons/sort-up.svg
similarity index 100%
rename from resources/assets/icons/sort-up.svg
rename to resources/icons/sort-up.svg
diff --git a/resources/assets/icons/sort.svg b/resources/icons/sort.svg
similarity index 100%
rename from resources/assets/icons/sort.svg
rename to resources/icons/sort.svg
diff --git a/resources/assets/icons/spanner.svg b/resources/icons/spanner.svg
similarity index 100%
rename from resources/assets/icons/spanner.svg
rename to resources/icons/spanner.svg
diff --git a/resources/assets/icons/star-circle.svg b/resources/icons/star-circle.svg
similarity index 100%
rename from resources/assets/icons/star-circle.svg
rename to resources/icons/star-circle.svg
diff --git a/resources/assets/icons/star.svg b/resources/icons/star.svg
similarity index 100%
rename from resources/assets/icons/star.svg
rename to resources/icons/star.svg
diff --git a/resources/assets/icons/swap-vertical.svg b/resources/icons/swap-vertical.svg
similarity index 100%
rename from resources/assets/icons/swap-vertical.svg
rename to resources/icons/swap-vertical.svg
diff --git a/resources/assets/icons/tag.svg b/resources/icons/tag.svg
similarity index 100%
rename from resources/assets/icons/tag.svg
rename to resources/icons/tag.svg
diff --git a/resources/assets/icons/template.svg b/resources/icons/template.svg
similarity index 100%
rename from resources/assets/icons/template.svg
rename to resources/icons/template.svg
diff --git a/resources/assets/icons/time.svg b/resources/icons/time.svg
similarity index 100%
rename from resources/assets/icons/time.svg
rename to resources/icons/time.svg
diff --git a/resources/assets/icons/user.svg b/resources/icons/user.svg
similarity index 100%
rename from resources/assets/icons/user.svg
rename to resources/icons/user.svg
diff --git a/resources/assets/icons/users-add.svg b/resources/icons/users-add.svg
similarity index 100%
rename from resources/assets/icons/users-add.svg
rename to resources/icons/users-add.svg
diff --git a/resources/assets/icons/users.svg b/resources/icons/users.svg
similarity index 100%
rename from resources/assets/icons/users.svg
rename to resources/icons/users.svg
diff --git a/resources/assets/icons/view.svg b/resources/icons/view.svg
similarity index 100%
rename from resources/assets/icons/view.svg
rename to resources/icons/view.svg
diff --git a/resources/assets/icons/warning.svg b/resources/icons/warning.svg
similarity index 100%
rename from resources/assets/icons/warning.svg
rename to resources/icons/warning.svg
diff --git a/resources/assets/js/components/back-to-top.js b/resources/js/components/back-to-top.js
similarity index 100%
rename from resources/assets/js/components/back-to-top.js
rename to resources/js/components/back-to-top.js
diff --git a/resources/assets/js/components/book-sort.js b/resources/js/components/book-sort.js
similarity index 100%
rename from resources/assets/js/components/book-sort.js
rename to resources/js/components/book-sort.js
diff --git a/resources/assets/js/components/breadcrumb-listing.js b/resources/js/components/breadcrumb-listing.js
similarity index 100%
rename from resources/assets/js/components/breadcrumb-listing.js
rename to resources/js/components/breadcrumb-listing.js
diff --git a/resources/assets/js/components/chapter-toggle.js b/resources/js/components/chapter-toggle.js
similarity index 100%
rename from resources/assets/js/components/chapter-toggle.js
rename to resources/js/components/chapter-toggle.js
diff --git a/resources/assets/js/components/collapsible.js b/resources/js/components/collapsible.js
similarity index 100%
rename from resources/assets/js/components/collapsible.js
rename to resources/js/components/collapsible.js
diff --git a/resources/assets/js/components/custom-checkbox.js b/resources/js/components/custom-checkbox.js
similarity index 100%
rename from resources/assets/js/components/custom-checkbox.js
rename to resources/js/components/custom-checkbox.js
diff --git a/resources/assets/js/components/dropdown.js b/resources/js/components/dropdown.js
similarity index 100%
rename from resources/assets/js/components/dropdown.js
rename to resources/js/components/dropdown.js
diff --git a/resources/assets/js/components/editor-toolbox.js b/resources/js/components/editor-toolbox.js
similarity index 100%
rename from resources/assets/js/components/editor-toolbox.js
rename to resources/js/components/editor-toolbox.js
diff --git a/resources/assets/js/components/entity-permissions-editor.js b/resources/js/components/entity-permissions-editor.js
similarity index 100%
rename from resources/assets/js/components/entity-permissions-editor.js
rename to resources/js/components/entity-permissions-editor.js
diff --git a/resources/assets/js/components/entity-selector-popup.js b/resources/js/components/entity-selector-popup.js
similarity index 100%
rename from resources/assets/js/components/entity-selector-popup.js
rename to resources/js/components/entity-selector-popup.js
diff --git a/resources/assets/js/components/entity-selector.js b/resources/js/components/entity-selector.js
similarity index 100%
rename from resources/assets/js/components/entity-selector.js
rename to resources/js/components/entity-selector.js
diff --git a/resources/assets/js/components/expand-toggle.js b/resources/js/components/expand-toggle.js
similarity index 100%
rename from resources/assets/js/components/expand-toggle.js
rename to resources/js/components/expand-toggle.js
diff --git a/resources/assets/js/components/header-mobile-toggle.js b/resources/js/components/header-mobile-toggle.js
similarity index 100%
rename from resources/assets/js/components/header-mobile-toggle.js
rename to resources/js/components/header-mobile-toggle.js
diff --git a/resources/assets/js/components/homepage-control.js b/resources/js/components/homepage-control.js
similarity index 100%
rename from resources/assets/js/components/homepage-control.js
rename to resources/js/components/homepage-control.js
diff --git a/resources/assets/js/components/image-picker.js b/resources/js/components/image-picker.js
similarity index 100%
rename from resources/assets/js/components/image-picker.js
rename to resources/js/components/image-picker.js
diff --git a/resources/assets/js/components/index.js b/resources/js/components/index.js
similarity index 100%
rename from resources/assets/js/components/index.js
rename to resources/js/components/index.js
diff --git a/resources/assets/js/components/list-sort-control.js b/resources/js/components/list-sort-control.js
similarity index 100%
rename from resources/assets/js/components/list-sort-control.js
rename to resources/js/components/list-sort-control.js
diff --git a/resources/assets/js/components/markdown-editor.js b/resources/js/components/markdown-editor.js
similarity index 100%
rename from resources/assets/js/components/markdown-editor.js
rename to resources/js/components/markdown-editor.js
diff --git a/resources/assets/js/components/new-user-password.js b/resources/js/components/new-user-password.js
similarity index 100%
rename from resources/assets/js/components/new-user-password.js
rename to resources/js/components/new-user-password.js
diff --git a/resources/assets/js/components/notification.js b/resources/js/components/notification.js
similarity index 100%
rename from resources/assets/js/components/notification.js
rename to resources/js/components/notification.js
diff --git a/resources/assets/js/components/overlay.js b/resources/js/components/overlay.js
similarity index 100%
rename from resources/assets/js/components/overlay.js
rename to resources/js/components/overlay.js
diff --git a/resources/assets/js/components/page-comments.js b/resources/js/components/page-comments.js
similarity index 100%
rename from resources/assets/js/components/page-comments.js
rename to resources/js/components/page-comments.js
diff --git a/resources/assets/js/components/page-display.js b/resources/js/components/page-display.js
similarity index 100%
rename from resources/assets/js/components/page-display.js
rename to resources/js/components/page-display.js
diff --git a/resources/assets/js/components/page-picker.js b/resources/js/components/page-picker.js
similarity index 100%
rename from resources/assets/js/components/page-picker.js
rename to resources/js/components/page-picker.js
diff --git a/resources/assets/js/components/permissions-table.js b/resources/js/components/permissions-table.js
similarity index 100%
rename from resources/assets/js/components/permissions-table.js
rename to resources/js/components/permissions-table.js
diff --git a/resources/assets/js/components/setting-app-color-picker.js b/resources/js/components/setting-app-color-picker.js
similarity index 100%
rename from resources/assets/js/components/setting-app-color-picker.js
rename to resources/js/components/setting-app-color-picker.js
diff --git a/resources/assets/js/components/shelf-sort.js b/resources/js/components/shelf-sort.js
similarity index 100%
rename from resources/assets/js/components/shelf-sort.js
rename to resources/js/components/shelf-sort.js
diff --git a/resources/assets/js/components/sidebar.js b/resources/js/components/sidebar.js
similarity index 100%
rename from resources/assets/js/components/sidebar.js
rename to resources/js/components/sidebar.js
diff --git a/resources/assets/js/components/template-manager.js b/resources/js/components/template-manager.js
similarity index 100%
rename from resources/assets/js/components/template-manager.js
rename to resources/js/components/template-manager.js
diff --git a/resources/assets/js/components/toggle-switch.js b/resources/js/components/toggle-switch.js
similarity index 100%
rename from resources/assets/js/components/toggle-switch.js
rename to resources/js/components/toggle-switch.js
diff --git a/resources/assets/js/components/tri-layout.js b/resources/js/components/tri-layout.js
similarity index 100%
rename from resources/assets/js/components/tri-layout.js
rename to resources/js/components/tri-layout.js
diff --git a/resources/assets/js/components/wysiwyg-editor.js b/resources/js/components/wysiwyg-editor.js
similarity index 100%
rename from resources/assets/js/components/wysiwyg-editor.js
rename to resources/js/components/wysiwyg-editor.js
diff --git a/resources/assets/js/index.js b/resources/js/index.js
similarity index 100%
rename from resources/assets/js/index.js
rename to resources/js/index.js
diff --git a/resources/assets/js/services/animations.js b/resources/js/services/animations.js
similarity index 100%
rename from resources/assets/js/services/animations.js
rename to resources/js/services/animations.js
diff --git a/resources/assets/js/services/code.js b/resources/js/services/code.js
similarity index 100%
rename from resources/assets/js/services/code.js
rename to resources/js/services/code.js
diff --git a/resources/assets/js/services/dates.js b/resources/js/services/dates.js
similarity index 100%
rename from resources/assets/js/services/dates.js
rename to resources/js/services/dates.js
diff --git a/resources/assets/js/services/dom.js b/resources/js/services/dom.js
similarity index 100%
rename from resources/assets/js/services/dom.js
rename to resources/js/services/dom.js
diff --git a/resources/assets/js/services/drawio.js b/resources/js/services/drawio.js
similarity index 100%
rename from resources/assets/js/services/drawio.js
rename to resources/js/services/drawio.js
diff --git a/resources/assets/js/services/events.js b/resources/js/services/events.js
similarity index 100%
rename from resources/assets/js/services/events.js
rename to resources/js/services/events.js
diff --git a/resources/assets/js/services/http.js b/resources/js/services/http.js
similarity index 100%
rename from resources/assets/js/services/http.js
rename to resources/js/services/http.js
diff --git a/resources/assets/js/services/translations.js b/resources/js/services/translations.js
similarity index 100%
rename from resources/assets/js/services/translations.js
rename to resources/js/services/translations.js
diff --git a/resources/assets/js/services/util.js b/resources/js/services/util.js
similarity index 100%
rename from resources/assets/js/services/util.js
rename to resources/js/services/util.js
diff --git a/resources/assets/js/vues/attachment-manager.js b/resources/js/vues/attachment-manager.js
similarity index 100%
rename from resources/assets/js/vues/attachment-manager.js
rename to resources/js/vues/attachment-manager.js
diff --git a/resources/assets/js/vues/code-editor.js b/resources/js/vues/code-editor.js
similarity index 100%
rename from resources/assets/js/vues/code-editor.js
rename to resources/js/vues/code-editor.js
diff --git a/resources/assets/js/vues/components/autosuggest.js b/resources/js/vues/components/autosuggest.js
similarity index 100%
rename from resources/assets/js/vues/components/autosuggest.js
rename to resources/js/vues/components/autosuggest.js
diff --git a/resources/assets/js/vues/components/dropzone.js b/resources/js/vues/components/dropzone.js
similarity index 100%
rename from resources/assets/js/vues/components/dropzone.js
rename to resources/js/vues/components/dropzone.js
diff --git a/resources/assets/js/vues/entity-dashboard.js b/resources/js/vues/entity-dashboard.js
similarity index 100%
rename from resources/assets/js/vues/entity-dashboard.js
rename to resources/js/vues/entity-dashboard.js
diff --git a/resources/assets/js/vues/image-manager.js b/resources/js/vues/image-manager.js
similarity index 100%
rename from resources/assets/js/vues/image-manager.js
rename to resources/js/vues/image-manager.js
diff --git a/resources/assets/js/vues/page-editor.js b/resources/js/vues/page-editor.js
similarity index 100%
rename from resources/assets/js/vues/page-editor.js
rename to resources/js/vues/page-editor.js
diff --git a/resources/assets/js/vues/search.js b/resources/js/vues/search.js
similarity index 100%
rename from resources/assets/js/vues/search.js
rename to resources/js/vues/search.js
diff --git a/resources/assets/js/vues/tag-manager.js b/resources/js/vues/tag-manager.js
similarity index 100%
rename from resources/assets/js/vues/tag-manager.js
rename to resources/js/vues/tag-manager.js
diff --git a/resources/assets/js/vues/vues.js b/resources/js/vues/vues.js
similarity index 100%
rename from resources/assets/js/vues/vues.js
rename to resources/js/vues/vues.js
diff --git a/resources/assets/sass/_animations.scss b/resources/sass/_animations.scss
similarity index 100%
rename from resources/assets/sass/_animations.scss
rename to resources/sass/_animations.scss
diff --git a/resources/assets/sass/_blocks.scss b/resources/sass/_blocks.scss
similarity index 100%
rename from resources/assets/sass/_blocks.scss
rename to resources/sass/_blocks.scss
diff --git a/resources/assets/sass/_buttons.scss b/resources/sass/_buttons.scss
similarity index 100%
rename from resources/assets/sass/_buttons.scss
rename to resources/sass/_buttons.scss
diff --git a/resources/assets/sass/_codemirror.scss b/resources/sass/_codemirror.scss
similarity index 100%
rename from resources/assets/sass/_codemirror.scss
rename to resources/sass/_codemirror.scss
diff --git a/resources/assets/sass/_colors.scss b/resources/sass/_colors.scss
similarity index 100%
rename from resources/assets/sass/_colors.scss
rename to resources/sass/_colors.scss
diff --git a/resources/assets/sass/_components.scss b/resources/sass/_components.scss
similarity index 100%
rename from resources/assets/sass/_components.scss
rename to resources/sass/_components.scss
diff --git a/resources/assets/sass/_forms.scss b/resources/sass/_forms.scss
similarity index 100%
rename from resources/assets/sass/_forms.scss
rename to resources/sass/_forms.scss
diff --git a/resources/assets/sass/_header.scss b/resources/sass/_header.scss
similarity index 100%
rename from resources/assets/sass/_header.scss
rename to resources/sass/_header.scss
diff --git a/resources/assets/sass/_html.scss b/resources/sass/_html.scss
similarity index 100%
rename from resources/assets/sass/_html.scss
rename to resources/sass/_html.scss
diff --git a/resources/assets/sass/_layout.scss b/resources/sass/_layout.scss
similarity index 100%
rename from resources/assets/sass/_layout.scss
rename to resources/sass/_layout.scss
diff --git a/resources/assets/sass/_lists.scss b/resources/sass/_lists.scss
similarity index 100%
rename from resources/assets/sass/_lists.scss
rename to resources/sass/_lists.scss
diff --git a/resources/assets/sass/_mixins.scss b/resources/sass/_mixins.scss
similarity index 100%
rename from resources/assets/sass/_mixins.scss
rename to resources/sass/_mixins.scss
diff --git a/resources/assets/sass/_pages.scss b/resources/sass/_pages.scss
similarity index 100%
rename from resources/assets/sass/_pages.scss
rename to resources/sass/_pages.scss
diff --git a/resources/assets/sass/_reset.scss b/resources/sass/_reset.scss
similarity index 100%
rename from resources/assets/sass/_reset.scss
rename to resources/sass/_reset.scss
diff --git a/resources/assets/sass/_spacing.scss b/resources/sass/_spacing.scss
similarity index 100%
rename from resources/assets/sass/_spacing.scss
rename to resources/sass/_spacing.scss
diff --git a/resources/assets/sass/_tables.scss b/resources/sass/_tables.scss
similarity index 100%
rename from resources/assets/sass/_tables.scss
rename to resources/sass/_tables.scss
diff --git a/resources/assets/sass/_text.scss b/resources/sass/_text.scss
similarity index 100%
rename from resources/assets/sass/_text.scss
rename to resources/sass/_text.scss
diff --git a/resources/assets/sass/_tinymce.scss b/resources/sass/_tinymce.scss
similarity index 100%
rename from resources/assets/sass/_tinymce.scss
rename to resources/sass/_tinymce.scss
diff --git a/resources/assets/sass/_variables.scss b/resources/sass/_variables.scss
similarity index 100%
rename from resources/assets/sass/_variables.scss
rename to resources/sass/_variables.scss
diff --git a/resources/assets/sass/export-styles.scss b/resources/sass/export-styles.scss
similarity index 100%
rename from resources/assets/sass/export-styles.scss
rename to resources/sass/export-styles.scss
diff --git a/resources/assets/sass/print-styles.scss b/resources/sass/print-styles.scss
similarity index 100%
rename from resources/assets/sass/print-styles.scss
rename to resources/sass/print-styles.scss
diff --git a/resources/assets/sass/styles.scss b/resources/sass/styles.scss
similarity index 100%
rename from resources/assets/sass/styles.scss
rename to resources/sass/styles.scss
diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore
index c96a04f00..869804c2a 100755
--- a/storage/framework/cache/.gitignore
+++ b/storage/framework/cache/.gitignore
@@ -1,2 +1,3 @@
 *
+!data/
 !.gitignore
\ No newline at end of file
diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore
new file mode 100755
index 000000000..d6b7ef32c
--- /dev/null
+++ b/storage/framework/cache/data/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/webpack.config.js b/webpack.config.js
index 78b679a0a..e496340c4 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -7,10 +7,10 @@ const config = {
     target: 'web',
     mode: dev? 'development' : 'production',
     entry: {
-        app: './resources/assets/js/index.js',
-        styles: './resources/assets/sass/styles.scss',
-        "export-styles": './resources/assets/sass/export-styles.scss',
-        "print-styles": './resources/assets/sass/print-styles.scss',
+        app: './resources/js/index.js',
+        styles: './resources/sass/styles.scss',
+        "export-styles": './resources/sass/export-styles.scss',
+        "print-styles": './resources/sass/print-styles.scss',
     },
     output: {
         filename: '[name].js',