diff --git a/Dockerfile b/Dockerfile index e2de2b4..e8edc22 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,7 +40,7 @@ RUN pip install --upgrade pip \ # 4. Collect static assets # ============================================= WORKDIR /app -COPY . . +COPY ./app . RUN python manage.py collectstatic --noinput diff --git a/apps/accounts/__init__.py b/app/apps/accounts/__init__.py similarity index 100% rename from apps/accounts/__init__.py rename to app/apps/accounts/__init__.py diff --git a/apps/accounts/admin.py b/app/apps/accounts/admin.py similarity index 100% rename from apps/accounts/admin.py rename to app/apps/accounts/admin.py diff --git a/apps/accounts/forms.py b/app/apps/accounts/forms.py similarity index 100% rename from apps/accounts/forms.py rename to app/apps/accounts/forms.py diff --git a/apps/accounts/models.py b/app/apps/accounts/models.py similarity index 100% rename from apps/accounts/models.py rename to app/apps/accounts/models.py diff --git a/apps/accounts/serialisers.py b/app/apps/accounts/serialisers.py similarity index 100% rename from apps/accounts/serialisers.py rename to app/apps/accounts/serialisers.py diff --git a/apps/accounts/templates/accounts/login.html b/app/apps/accounts/templates/accounts/login.html similarity index 100% rename from apps/accounts/templates/accounts/login.html rename to app/apps/accounts/templates/accounts/login.html diff --git a/apps/accounts/templates/accounts/profile.html b/app/apps/accounts/templates/accounts/profile.html similarity index 100% rename from apps/accounts/templates/accounts/profile.html rename to app/apps/accounts/templates/accounts/profile.html diff --git a/apps/accounts/tests/test_auth.py b/app/apps/accounts/tests/test_auth.py similarity index 100% rename from apps/accounts/tests/test_auth.py rename to app/apps/accounts/tests/test_auth.py diff --git a/apps/accounts/urls.py b/app/apps/accounts/urls.py similarity index 100% rename from apps/accounts/urls.py rename to app/apps/accounts/urls.py diff --git a/apps/accounts/views.py b/app/apps/accounts/views.py similarity index 100% rename from apps/accounts/views.py rename to app/apps/accounts/views.py diff --git a/apps/core/__init.py b/app/apps/core/__init.py similarity index 100% rename from apps/core/__init.py rename to app/apps/core/__init.py diff --git a/apps/core/models.py b/app/apps/core/models.py similarity index 100% rename from apps/core/models.py rename to app/apps/core/models.py diff --git a/apps/core/utils.py b/app/apps/core/utils.py similarity index 100% rename from apps/core/utils.py rename to app/apps/core/utils.py diff --git a/apps/dashboard/admin.py b/app/apps/dashboard/admin.py similarity index 81% rename from apps/dashboard/admin.py rename to app/apps/dashboard/admin.py index 068e40c..aafcab2 100644 --- a/apps/dashboard/admin.py +++ b/app/apps/dashboard/admin.py @@ -22,6 +22,15 @@ class UserAdmin(BaseUserAdmin, ModelAdmin): form = UserChangeForm add_form = UserCreationForm change_password_form = AdminPasswordChangeForm + + # Set to False, to enable filter as "sidebar" + list_filter_sheet = True + + # Display fields in changeform in compressed mode + compressed_fields = True # Default: False + + # Warn before leaving unsaved changes in changeform + warn_unsaved_form = True # Default: False @admin.register(Group) diff --git a/keywarden/__init__.py b/app/keywarden/__init__.py similarity index 100% rename from keywarden/__init__.py rename to app/keywarden/__init__.py diff --git a/keywarden/asgi.py b/app/keywarden/asgi.py similarity index 100% rename from keywarden/asgi.py rename to app/keywarden/asgi.py diff --git a/keywarden/settings/__init__.py b/app/keywarden/settings/__init__.py similarity index 100% rename from keywarden/settings/__init__.py rename to app/keywarden/settings/__init__.py diff --git a/keywarden/settings/base.py b/app/keywarden/settings/base.py similarity index 82% rename from keywarden/settings/base.py rename to app/keywarden/settings/base.py index 477a113..0536357 100644 --- a/keywarden/settings/base.py +++ b/app/keywarden/settings/base.py @@ -2,6 +2,9 @@ import os from pathlib import Path from dotenv import load_dotenv +from django.urls import reverse_lazy +from django.utils.translation import gettext_lazy as _ + load_dotenv() BASE_DIR = Path(__file__).resolve().parent.parent.parent @@ -21,6 +24,8 @@ CSRF_COOKIE_SECURE = True SESSION_COOKIE_SECURE = True INSTALLED_APPS = [ + "unfold", # Admin UI + "unfold.contrib.filters", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", @@ -31,8 +36,6 @@ INSTALLED_APPS = [ "apps.core", "apps.dashboard", "ninja", # Django Ninja API - "unfold", # Admin UI - "unfold.contrib.filters", "mozilla_django_oidc", # OIDC Client "tailwind", "theme" @@ -113,6 +116,8 @@ UNFOLD = { "LOGIN_REDIRECT_URL": "/admin/", "ENVIRONMENT": "Keywarden", "ENVIRONMENT_COLOR": "#7C3AED", + "SHOW_VIEW_ON_SITE": True, + "THEME": "dark", # Force theme: "dark" or "light". Will disable theme switcher "SIDEBAR": { "show_search": True, "show_all_applications": True, @@ -138,6 +143,31 @@ UNFOLD = { "/static/unfold/js/simplebar.js", "/static/unfold/js/alpine.js", ], + "SITE_DROPDOWN": [ + { + "icon": "diamond", + "title": _("Keywarden"), + "link": "https://keywarden.dev.ntbx.io", + "attrs": { + "target": "_blank", + }, + }, + + ], + # "TABS": [ + # { + # "models": [ + # "app_label.Accounts", + # ], + # "items": [ + # { + # "title": _("Accounts"), + # "link": reverse_lazy("admin:app_label_model_name_changelist"), + # "permission": "keywarden.settings.permission_callback", + # }, + # ], + # }, + # ], } OIDC_RP_CLIENT_ID = os.getenv("KEYWARDEN_OIDC_CLIENT_ID") @@ -150,4 +180,7 @@ OIDC_OP_JWKS_ENDPOINT = os.getenv("KEYWARDEN_OIDC_JWKS_ENDPOINT") LOGIN_URL = "/oidc/authenticate/" LOGOUT_URL = "/oidc/logout/" LOGIN_REDIRECT_URL = "/" -LOGOUT_REDIRECT_URL = "/" \ No newline at end of file +LOGOUT_REDIRECT_URL = "/" + +def permission_callback(request): + return request.user.has_perm("keywarden.change_model") \ No newline at end of file diff --git a/keywarden/settings/dev.py b/app/keywarden/settings/dev.py similarity index 100% rename from keywarden/settings/dev.py rename to app/keywarden/settings/dev.py diff --git a/keywarden/settings/prod.py b/app/keywarden/settings/prod.py similarity index 100% rename from keywarden/settings/prod.py rename to app/keywarden/settings/prod.py diff --git a/keywarden/urls.py b/app/keywarden/urls.py similarity index 100% rename from keywarden/urls.py rename to app/keywarden/urls.py diff --git a/keywarden/wsgi.py b/app/keywarden/wsgi.py similarity index 100% rename from keywarden/wsgi.py rename to app/keywarden/wsgi.py diff --git a/manage.py b/app/manage.py similarity index 100% rename from manage.py rename to app/manage.py diff --git a/static/admin/css/autocomplete.css b/app/static/admin/css/autocomplete.css similarity index 100% rename from static/admin/css/autocomplete.css rename to app/static/admin/css/autocomplete.css diff --git a/static/admin/css/base.css b/app/static/admin/css/base.css similarity index 100% rename from static/admin/css/base.css rename to app/static/admin/css/base.css diff --git a/static/admin/css/changelists.css b/app/static/admin/css/changelists.css similarity index 100% rename from static/admin/css/changelists.css rename to app/static/admin/css/changelists.css diff --git a/static/admin/css/dark_mode.css b/app/static/admin/css/dark_mode.css similarity index 100% rename from static/admin/css/dark_mode.css rename to app/static/admin/css/dark_mode.css diff --git a/static/admin/css/dashboard.css b/app/static/admin/css/dashboard.css similarity index 100% rename from static/admin/css/dashboard.css rename to app/static/admin/css/dashboard.css diff --git a/static/admin/css/forms.css b/app/static/admin/css/forms.css similarity index 100% rename from static/admin/css/forms.css rename to app/static/admin/css/forms.css diff --git a/static/admin/css/login.css b/app/static/admin/css/login.css similarity index 100% rename from static/admin/css/login.css rename to app/static/admin/css/login.css diff --git a/static/admin/css/nav_sidebar.css b/app/static/admin/css/nav_sidebar.css similarity index 100% rename from static/admin/css/nav_sidebar.css rename to app/static/admin/css/nav_sidebar.css diff --git a/static/admin/css/responsive.css b/app/static/admin/css/responsive.css similarity index 100% rename from static/admin/css/responsive.css rename to app/static/admin/css/responsive.css diff --git a/static/admin/css/responsive_rtl.css b/app/static/admin/css/responsive_rtl.css similarity index 100% rename from static/admin/css/responsive_rtl.css rename to app/static/admin/css/responsive_rtl.css diff --git a/static/admin/css/rtl.css b/app/static/admin/css/rtl.css similarity index 100% rename from static/admin/css/rtl.css rename to app/static/admin/css/rtl.css diff --git a/static/admin/css/unusable_password_field.css b/app/static/admin/css/unusable_password_field.css similarity index 100% rename from static/admin/css/unusable_password_field.css rename to app/static/admin/css/unusable_password_field.css diff --git a/static/admin/css/vendor/select2/LICENSE-SELECT2.md b/app/static/admin/css/vendor/select2/LICENSE-SELECT2.md similarity index 100% rename from static/admin/css/vendor/select2/LICENSE-SELECT2.md rename to app/static/admin/css/vendor/select2/LICENSE-SELECT2.md diff --git a/static/admin/css/vendor/select2/select2.css b/app/static/admin/css/vendor/select2/select2.css similarity index 100% rename from static/admin/css/vendor/select2/select2.css rename to app/static/admin/css/vendor/select2/select2.css diff --git a/static/admin/css/vendor/select2/select2.min.css b/app/static/admin/css/vendor/select2/select2.min.css similarity index 100% rename from static/admin/css/vendor/select2/select2.min.css rename to app/static/admin/css/vendor/select2/select2.min.css diff --git a/static/admin/css/widgets.css b/app/static/admin/css/widgets.css similarity index 100% rename from static/admin/css/widgets.css rename to app/static/admin/css/widgets.css diff --git a/static/admin/img/LICENSE b/app/static/admin/img/LICENSE similarity index 100% rename from static/admin/img/LICENSE rename to app/static/admin/img/LICENSE diff --git a/static/admin/img/README.txt b/app/static/admin/img/README.txt similarity index 100% rename from static/admin/img/README.txt rename to app/static/admin/img/README.txt diff --git a/static/admin/img/calendar-icons.svg b/app/static/admin/img/calendar-icons.svg similarity index 100% rename from static/admin/img/calendar-icons.svg rename to app/static/admin/img/calendar-icons.svg diff --git a/static/admin/img/gis/move_vertex_off.svg b/app/static/admin/img/gis/move_vertex_off.svg similarity index 100% rename from static/admin/img/gis/move_vertex_off.svg rename to app/static/admin/img/gis/move_vertex_off.svg diff --git a/static/admin/img/gis/move_vertex_on.svg b/app/static/admin/img/gis/move_vertex_on.svg similarity index 100% rename from static/admin/img/gis/move_vertex_on.svg rename to app/static/admin/img/gis/move_vertex_on.svg diff --git a/static/admin/img/icon-addlink.svg b/app/static/admin/img/icon-addlink.svg similarity index 100% rename from static/admin/img/icon-addlink.svg rename to app/static/admin/img/icon-addlink.svg diff --git a/static/admin/img/icon-alert.svg b/app/static/admin/img/icon-alert.svg similarity index 100% rename from static/admin/img/icon-alert.svg rename to app/static/admin/img/icon-alert.svg diff --git a/static/admin/img/icon-calendar.svg b/app/static/admin/img/icon-calendar.svg similarity index 100% rename from static/admin/img/icon-calendar.svg rename to app/static/admin/img/icon-calendar.svg diff --git a/static/admin/img/icon-changelink.svg b/app/static/admin/img/icon-changelink.svg similarity index 100% rename from static/admin/img/icon-changelink.svg rename to app/static/admin/img/icon-changelink.svg diff --git a/static/admin/img/icon-clock.svg b/app/static/admin/img/icon-clock.svg similarity index 100% rename from static/admin/img/icon-clock.svg rename to app/static/admin/img/icon-clock.svg diff --git a/static/admin/img/icon-deletelink.svg b/app/static/admin/img/icon-deletelink.svg similarity index 100% rename from static/admin/img/icon-deletelink.svg rename to app/static/admin/img/icon-deletelink.svg diff --git a/static/admin/img/icon-hidelink.svg b/app/static/admin/img/icon-hidelink.svg similarity index 100% rename from static/admin/img/icon-hidelink.svg rename to app/static/admin/img/icon-hidelink.svg diff --git a/static/admin/img/icon-no.svg b/app/static/admin/img/icon-no.svg similarity index 100% rename from static/admin/img/icon-no.svg rename to app/static/admin/img/icon-no.svg diff --git a/static/admin/img/icon-unknown-alt.svg b/app/static/admin/img/icon-unknown-alt.svg similarity index 100% rename from static/admin/img/icon-unknown-alt.svg rename to app/static/admin/img/icon-unknown-alt.svg diff --git a/static/admin/img/icon-unknown.svg b/app/static/admin/img/icon-unknown.svg similarity index 100% rename from static/admin/img/icon-unknown.svg rename to app/static/admin/img/icon-unknown.svg diff --git a/static/admin/img/icon-viewlink.svg b/app/static/admin/img/icon-viewlink.svg similarity index 100% rename from static/admin/img/icon-viewlink.svg rename to app/static/admin/img/icon-viewlink.svg diff --git a/static/admin/img/icon-yes.svg b/app/static/admin/img/icon-yes.svg similarity index 100% rename from static/admin/img/icon-yes.svg rename to app/static/admin/img/icon-yes.svg diff --git a/static/admin/img/inline-delete.svg b/app/static/admin/img/inline-delete.svg similarity index 100% rename from static/admin/img/inline-delete.svg rename to app/static/admin/img/inline-delete.svg diff --git a/static/admin/img/search.svg b/app/static/admin/img/search.svg similarity index 100% rename from static/admin/img/search.svg rename to app/static/admin/img/search.svg diff --git a/static/admin/img/selector-icons.svg b/app/static/admin/img/selector-icons.svg similarity index 100% rename from static/admin/img/selector-icons.svg rename to app/static/admin/img/selector-icons.svg diff --git a/static/admin/img/sorting-icons.svg b/app/static/admin/img/sorting-icons.svg similarity index 100% rename from static/admin/img/sorting-icons.svg rename to app/static/admin/img/sorting-icons.svg diff --git a/static/admin/img/tooltag-add.svg b/app/static/admin/img/tooltag-add.svg similarity index 100% rename from static/admin/img/tooltag-add.svg rename to app/static/admin/img/tooltag-add.svg diff --git a/static/admin/img/tooltag-arrowright.svg b/app/static/admin/img/tooltag-arrowright.svg similarity index 100% rename from static/admin/img/tooltag-arrowright.svg rename to app/static/admin/img/tooltag-arrowright.svg diff --git a/static/admin/js/SelectBox.js b/app/static/admin/js/SelectBox.js similarity index 100% rename from static/admin/js/SelectBox.js rename to app/static/admin/js/SelectBox.js diff --git a/static/admin/js/SelectFilter2.js b/app/static/admin/js/SelectFilter2.js similarity index 100% rename from static/admin/js/SelectFilter2.js rename to app/static/admin/js/SelectFilter2.js diff --git a/static/admin/js/actions.js b/app/static/admin/js/actions.js similarity index 100% rename from static/admin/js/actions.js rename to app/static/admin/js/actions.js diff --git a/static/admin/js/admin/DateTimeShortcuts.js b/app/static/admin/js/admin/DateTimeShortcuts.js similarity index 100% rename from static/admin/js/admin/DateTimeShortcuts.js rename to app/static/admin/js/admin/DateTimeShortcuts.js diff --git a/static/admin/js/admin/RelatedObjectLookups.js b/app/static/admin/js/admin/RelatedObjectLookups.js similarity index 100% rename from static/admin/js/admin/RelatedObjectLookups.js rename to app/static/admin/js/admin/RelatedObjectLookups.js diff --git a/static/admin/js/autocomplete.js b/app/static/admin/js/autocomplete.js similarity index 100% rename from static/admin/js/autocomplete.js rename to app/static/admin/js/autocomplete.js diff --git a/static/admin/js/calendar.js b/app/static/admin/js/calendar.js similarity index 100% rename from static/admin/js/calendar.js rename to app/static/admin/js/calendar.js diff --git a/static/admin/js/cancel.js b/app/static/admin/js/cancel.js similarity index 100% rename from static/admin/js/cancel.js rename to app/static/admin/js/cancel.js diff --git a/static/admin/js/change_form.js b/app/static/admin/js/change_form.js similarity index 100% rename from static/admin/js/change_form.js rename to app/static/admin/js/change_form.js diff --git a/static/admin/js/core.js b/app/static/admin/js/core.js similarity index 100% rename from static/admin/js/core.js rename to app/static/admin/js/core.js diff --git a/static/admin/js/filters.js b/app/static/admin/js/filters.js similarity index 100% rename from static/admin/js/filters.js rename to app/static/admin/js/filters.js diff --git a/static/admin/js/inlines.js b/app/static/admin/js/inlines.js similarity index 100% rename from static/admin/js/inlines.js rename to app/static/admin/js/inlines.js diff --git a/static/admin/js/jquery.init.js b/app/static/admin/js/jquery.init.js similarity index 100% rename from static/admin/js/jquery.init.js rename to app/static/admin/js/jquery.init.js diff --git a/static/admin/js/nav_sidebar.js b/app/static/admin/js/nav_sidebar.js similarity index 100% rename from static/admin/js/nav_sidebar.js rename to app/static/admin/js/nav_sidebar.js diff --git a/static/admin/js/popup_response.js b/app/static/admin/js/popup_response.js similarity index 100% rename from static/admin/js/popup_response.js rename to app/static/admin/js/popup_response.js diff --git a/static/admin/js/prepopulate.js b/app/static/admin/js/prepopulate.js similarity index 100% rename from static/admin/js/prepopulate.js rename to app/static/admin/js/prepopulate.js diff --git a/static/admin/js/prepopulate_init.js b/app/static/admin/js/prepopulate_init.js similarity index 100% rename from static/admin/js/prepopulate_init.js rename to app/static/admin/js/prepopulate_init.js diff --git a/static/admin/js/theme.js b/app/static/admin/js/theme.js similarity index 100% rename from static/admin/js/theme.js rename to app/static/admin/js/theme.js diff --git a/static/admin/js/unusable_password_field.js b/app/static/admin/js/unusable_password_field.js similarity index 100% rename from static/admin/js/unusable_password_field.js rename to app/static/admin/js/unusable_password_field.js diff --git a/static/admin/js/urlify.js b/app/static/admin/js/urlify.js similarity index 100% rename from static/admin/js/urlify.js rename to app/static/admin/js/urlify.js diff --git a/static/admin/js/vendor/jquery/LICENSE.txt b/app/static/admin/js/vendor/jquery/LICENSE.txt similarity index 100% rename from static/admin/js/vendor/jquery/LICENSE.txt rename to app/static/admin/js/vendor/jquery/LICENSE.txt diff --git a/static/admin/js/vendor/jquery/jquery.js b/app/static/admin/js/vendor/jquery/jquery.js similarity index 100% rename from static/admin/js/vendor/jquery/jquery.js rename to app/static/admin/js/vendor/jquery/jquery.js diff --git a/static/admin/js/vendor/jquery/jquery.min.js b/app/static/admin/js/vendor/jquery/jquery.min.js similarity index 100% rename from static/admin/js/vendor/jquery/jquery.min.js rename to app/static/admin/js/vendor/jquery/jquery.min.js diff --git a/static/admin/js/vendor/select2/LICENSE.md b/app/static/admin/js/vendor/select2/LICENSE.md similarity index 100% rename from static/admin/js/vendor/select2/LICENSE.md rename to app/static/admin/js/vendor/select2/LICENSE.md diff --git a/static/admin/js/vendor/select2/i18n/af.js b/app/static/admin/js/vendor/select2/i18n/af.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/af.js rename to app/static/admin/js/vendor/select2/i18n/af.js diff --git a/static/admin/js/vendor/select2/i18n/ar.js b/app/static/admin/js/vendor/select2/i18n/ar.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ar.js rename to app/static/admin/js/vendor/select2/i18n/ar.js diff --git a/static/admin/js/vendor/select2/i18n/az.js b/app/static/admin/js/vendor/select2/i18n/az.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/az.js rename to app/static/admin/js/vendor/select2/i18n/az.js diff --git a/static/admin/js/vendor/select2/i18n/bg.js b/app/static/admin/js/vendor/select2/i18n/bg.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/bg.js rename to app/static/admin/js/vendor/select2/i18n/bg.js diff --git a/static/admin/js/vendor/select2/i18n/bn.js b/app/static/admin/js/vendor/select2/i18n/bn.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/bn.js rename to app/static/admin/js/vendor/select2/i18n/bn.js diff --git a/static/admin/js/vendor/select2/i18n/bs.js b/app/static/admin/js/vendor/select2/i18n/bs.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/bs.js rename to app/static/admin/js/vendor/select2/i18n/bs.js diff --git a/static/admin/js/vendor/select2/i18n/ca.js b/app/static/admin/js/vendor/select2/i18n/ca.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ca.js rename to app/static/admin/js/vendor/select2/i18n/ca.js diff --git a/static/admin/js/vendor/select2/i18n/cs.js b/app/static/admin/js/vendor/select2/i18n/cs.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/cs.js rename to app/static/admin/js/vendor/select2/i18n/cs.js diff --git a/static/admin/js/vendor/select2/i18n/da.js b/app/static/admin/js/vendor/select2/i18n/da.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/da.js rename to app/static/admin/js/vendor/select2/i18n/da.js diff --git a/static/admin/js/vendor/select2/i18n/de.js b/app/static/admin/js/vendor/select2/i18n/de.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/de.js rename to app/static/admin/js/vendor/select2/i18n/de.js diff --git a/static/admin/js/vendor/select2/i18n/dsb.js b/app/static/admin/js/vendor/select2/i18n/dsb.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/dsb.js rename to app/static/admin/js/vendor/select2/i18n/dsb.js diff --git a/static/admin/js/vendor/select2/i18n/el.js b/app/static/admin/js/vendor/select2/i18n/el.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/el.js rename to app/static/admin/js/vendor/select2/i18n/el.js diff --git a/static/admin/js/vendor/select2/i18n/en.js b/app/static/admin/js/vendor/select2/i18n/en.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/en.js rename to app/static/admin/js/vendor/select2/i18n/en.js diff --git a/static/admin/js/vendor/select2/i18n/es.js b/app/static/admin/js/vendor/select2/i18n/es.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/es.js rename to app/static/admin/js/vendor/select2/i18n/es.js diff --git a/static/admin/js/vendor/select2/i18n/et.js b/app/static/admin/js/vendor/select2/i18n/et.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/et.js rename to app/static/admin/js/vendor/select2/i18n/et.js diff --git a/static/admin/js/vendor/select2/i18n/eu.js b/app/static/admin/js/vendor/select2/i18n/eu.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/eu.js rename to app/static/admin/js/vendor/select2/i18n/eu.js diff --git a/static/admin/js/vendor/select2/i18n/fa.js b/app/static/admin/js/vendor/select2/i18n/fa.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/fa.js rename to app/static/admin/js/vendor/select2/i18n/fa.js diff --git a/static/admin/js/vendor/select2/i18n/fi.js b/app/static/admin/js/vendor/select2/i18n/fi.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/fi.js rename to app/static/admin/js/vendor/select2/i18n/fi.js diff --git a/static/admin/js/vendor/select2/i18n/fr.js b/app/static/admin/js/vendor/select2/i18n/fr.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/fr.js rename to app/static/admin/js/vendor/select2/i18n/fr.js diff --git a/static/admin/js/vendor/select2/i18n/gl.js b/app/static/admin/js/vendor/select2/i18n/gl.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/gl.js rename to app/static/admin/js/vendor/select2/i18n/gl.js diff --git a/static/admin/js/vendor/select2/i18n/he.js b/app/static/admin/js/vendor/select2/i18n/he.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/he.js rename to app/static/admin/js/vendor/select2/i18n/he.js diff --git a/static/admin/js/vendor/select2/i18n/hi.js b/app/static/admin/js/vendor/select2/i18n/hi.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/hi.js rename to app/static/admin/js/vendor/select2/i18n/hi.js diff --git a/static/admin/js/vendor/select2/i18n/hr.js b/app/static/admin/js/vendor/select2/i18n/hr.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/hr.js rename to app/static/admin/js/vendor/select2/i18n/hr.js diff --git a/static/admin/js/vendor/select2/i18n/hsb.js b/app/static/admin/js/vendor/select2/i18n/hsb.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/hsb.js rename to app/static/admin/js/vendor/select2/i18n/hsb.js diff --git a/static/admin/js/vendor/select2/i18n/hu.js b/app/static/admin/js/vendor/select2/i18n/hu.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/hu.js rename to app/static/admin/js/vendor/select2/i18n/hu.js diff --git a/static/admin/js/vendor/select2/i18n/hy.js b/app/static/admin/js/vendor/select2/i18n/hy.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/hy.js rename to app/static/admin/js/vendor/select2/i18n/hy.js diff --git a/static/admin/js/vendor/select2/i18n/id.js b/app/static/admin/js/vendor/select2/i18n/id.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/id.js rename to app/static/admin/js/vendor/select2/i18n/id.js diff --git a/static/admin/js/vendor/select2/i18n/is.js b/app/static/admin/js/vendor/select2/i18n/is.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/is.js rename to app/static/admin/js/vendor/select2/i18n/is.js diff --git a/static/admin/js/vendor/select2/i18n/it.js b/app/static/admin/js/vendor/select2/i18n/it.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/it.js rename to app/static/admin/js/vendor/select2/i18n/it.js diff --git a/static/admin/js/vendor/select2/i18n/ja.js b/app/static/admin/js/vendor/select2/i18n/ja.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ja.js rename to app/static/admin/js/vendor/select2/i18n/ja.js diff --git a/static/admin/js/vendor/select2/i18n/ka.js b/app/static/admin/js/vendor/select2/i18n/ka.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ka.js rename to app/static/admin/js/vendor/select2/i18n/ka.js diff --git a/static/admin/js/vendor/select2/i18n/km.js b/app/static/admin/js/vendor/select2/i18n/km.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/km.js rename to app/static/admin/js/vendor/select2/i18n/km.js diff --git a/static/admin/js/vendor/select2/i18n/ko.js b/app/static/admin/js/vendor/select2/i18n/ko.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ko.js rename to app/static/admin/js/vendor/select2/i18n/ko.js diff --git a/static/admin/js/vendor/select2/i18n/lt.js b/app/static/admin/js/vendor/select2/i18n/lt.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/lt.js rename to app/static/admin/js/vendor/select2/i18n/lt.js diff --git a/static/admin/js/vendor/select2/i18n/lv.js b/app/static/admin/js/vendor/select2/i18n/lv.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/lv.js rename to app/static/admin/js/vendor/select2/i18n/lv.js diff --git a/static/admin/js/vendor/select2/i18n/mk.js b/app/static/admin/js/vendor/select2/i18n/mk.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/mk.js rename to app/static/admin/js/vendor/select2/i18n/mk.js diff --git a/static/admin/js/vendor/select2/i18n/ms.js b/app/static/admin/js/vendor/select2/i18n/ms.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ms.js rename to app/static/admin/js/vendor/select2/i18n/ms.js diff --git a/static/admin/js/vendor/select2/i18n/nb.js b/app/static/admin/js/vendor/select2/i18n/nb.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/nb.js rename to app/static/admin/js/vendor/select2/i18n/nb.js diff --git a/static/admin/js/vendor/select2/i18n/ne.js b/app/static/admin/js/vendor/select2/i18n/ne.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ne.js rename to app/static/admin/js/vendor/select2/i18n/ne.js diff --git a/static/admin/js/vendor/select2/i18n/nl.js b/app/static/admin/js/vendor/select2/i18n/nl.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/nl.js rename to app/static/admin/js/vendor/select2/i18n/nl.js diff --git a/static/admin/js/vendor/select2/i18n/pl.js b/app/static/admin/js/vendor/select2/i18n/pl.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/pl.js rename to app/static/admin/js/vendor/select2/i18n/pl.js diff --git a/static/admin/js/vendor/select2/i18n/ps.js b/app/static/admin/js/vendor/select2/i18n/ps.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ps.js rename to app/static/admin/js/vendor/select2/i18n/ps.js diff --git a/static/admin/js/vendor/select2/i18n/pt-BR.js b/app/static/admin/js/vendor/select2/i18n/pt-BR.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/pt-BR.js rename to app/static/admin/js/vendor/select2/i18n/pt-BR.js diff --git a/static/admin/js/vendor/select2/i18n/pt.js b/app/static/admin/js/vendor/select2/i18n/pt.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/pt.js rename to app/static/admin/js/vendor/select2/i18n/pt.js diff --git a/static/admin/js/vendor/select2/i18n/ro.js b/app/static/admin/js/vendor/select2/i18n/ro.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ro.js rename to app/static/admin/js/vendor/select2/i18n/ro.js diff --git a/static/admin/js/vendor/select2/i18n/ru.js b/app/static/admin/js/vendor/select2/i18n/ru.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/ru.js rename to app/static/admin/js/vendor/select2/i18n/ru.js diff --git a/static/admin/js/vendor/select2/i18n/sk.js b/app/static/admin/js/vendor/select2/i18n/sk.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/sk.js rename to app/static/admin/js/vendor/select2/i18n/sk.js diff --git a/static/admin/js/vendor/select2/i18n/sl.js b/app/static/admin/js/vendor/select2/i18n/sl.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/sl.js rename to app/static/admin/js/vendor/select2/i18n/sl.js diff --git a/static/admin/js/vendor/select2/i18n/sq.js b/app/static/admin/js/vendor/select2/i18n/sq.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/sq.js rename to app/static/admin/js/vendor/select2/i18n/sq.js diff --git a/static/admin/js/vendor/select2/i18n/sr-Cyrl.js b/app/static/admin/js/vendor/select2/i18n/sr-Cyrl.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/sr-Cyrl.js rename to app/static/admin/js/vendor/select2/i18n/sr-Cyrl.js diff --git a/static/admin/js/vendor/select2/i18n/sr.js b/app/static/admin/js/vendor/select2/i18n/sr.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/sr.js rename to app/static/admin/js/vendor/select2/i18n/sr.js diff --git a/static/admin/js/vendor/select2/i18n/sv.js b/app/static/admin/js/vendor/select2/i18n/sv.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/sv.js rename to app/static/admin/js/vendor/select2/i18n/sv.js diff --git a/static/admin/js/vendor/select2/i18n/th.js b/app/static/admin/js/vendor/select2/i18n/th.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/th.js rename to app/static/admin/js/vendor/select2/i18n/th.js diff --git a/static/admin/js/vendor/select2/i18n/tk.js b/app/static/admin/js/vendor/select2/i18n/tk.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/tk.js rename to app/static/admin/js/vendor/select2/i18n/tk.js diff --git a/static/admin/js/vendor/select2/i18n/tr.js b/app/static/admin/js/vendor/select2/i18n/tr.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/tr.js rename to app/static/admin/js/vendor/select2/i18n/tr.js diff --git a/static/admin/js/vendor/select2/i18n/uk.js b/app/static/admin/js/vendor/select2/i18n/uk.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/uk.js rename to app/static/admin/js/vendor/select2/i18n/uk.js diff --git a/static/admin/js/vendor/select2/i18n/vi.js b/app/static/admin/js/vendor/select2/i18n/vi.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/vi.js rename to app/static/admin/js/vendor/select2/i18n/vi.js diff --git a/static/admin/js/vendor/select2/i18n/zh-CN.js b/app/static/admin/js/vendor/select2/i18n/zh-CN.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/zh-CN.js rename to app/static/admin/js/vendor/select2/i18n/zh-CN.js diff --git a/static/admin/js/vendor/select2/i18n/zh-TW.js b/app/static/admin/js/vendor/select2/i18n/zh-TW.js similarity index 100% rename from static/admin/js/vendor/select2/i18n/zh-TW.js rename to app/static/admin/js/vendor/select2/i18n/zh-TW.js diff --git a/static/admin/js/vendor/select2/select2.full.js b/app/static/admin/js/vendor/select2/select2.full.js similarity index 100% rename from static/admin/js/vendor/select2/select2.full.js rename to app/static/admin/js/vendor/select2/select2.full.js diff --git a/static/admin/js/vendor/select2/select2.full.min.js b/app/static/admin/js/vendor/select2/select2.full.min.js similarity index 100% rename from static/admin/js/vendor/select2/select2.full.min.js rename to app/static/admin/js/vendor/select2/select2.full.min.js diff --git a/static/admin/js/vendor/xregexp/LICENSE.txt b/app/static/admin/js/vendor/xregexp/LICENSE.txt similarity index 100% rename from static/admin/js/vendor/xregexp/LICENSE.txt rename to app/static/admin/js/vendor/xregexp/LICENSE.txt diff --git a/static/admin/js/vendor/xregexp/xregexp.js b/app/static/admin/js/vendor/xregexp/xregexp.js similarity index 100% rename from static/admin/js/vendor/xregexp/xregexp.js rename to app/static/admin/js/vendor/xregexp/xregexp.js diff --git a/static/admin/js/vendor/xregexp/xregexp.min.js b/app/static/admin/js/vendor/xregexp/xregexp.min.js similarity index 100% rename from static/admin/js/vendor/xregexp/xregexp.min.js rename to app/static/admin/js/vendor/xregexp/xregexp.min.js diff --git a/static/ninja/favicon.png b/app/static/ninja/favicon.png similarity index 100% rename from static/ninja/favicon.png rename to app/static/ninja/favicon.png diff --git a/static/ninja/redoc.standalone.js b/app/static/ninja/redoc.standalone.js similarity index 100% rename from static/ninja/redoc.standalone.js rename to app/static/ninja/redoc.standalone.js diff --git a/static/ninja/redoc.standalone.js.map b/app/static/ninja/redoc.standalone.js.map similarity index 100% rename from static/ninja/redoc.standalone.js.map rename to app/static/ninja/redoc.standalone.js.map diff --git a/static/ninja/swagger-ui-bundle.js b/app/static/ninja/swagger-ui-bundle.js similarity index 100% rename from static/ninja/swagger-ui-bundle.js rename to app/static/ninja/swagger-ui-bundle.js diff --git a/static/ninja/swagger-ui-bundle.js.map b/app/static/ninja/swagger-ui-bundle.js.map similarity index 100% rename from static/ninja/swagger-ui-bundle.js.map rename to app/static/ninja/swagger-ui-bundle.js.map diff --git a/static/ninja/swagger-ui-init.js b/app/static/ninja/swagger-ui-init.js similarity index 100% rename from static/ninja/swagger-ui-init.js rename to app/static/ninja/swagger-ui-init.js diff --git a/static/ninja/swagger-ui.css b/app/static/ninja/swagger-ui.css similarity index 100% rename from static/ninja/swagger-ui.css rename to app/static/ninja/swagger-ui.css diff --git a/static/ninja/swagger-ui.css.map b/app/static/ninja/swagger-ui.css.map similarity index 100% rename from static/ninja/swagger-ui.css.map rename to app/static/ninja/swagger-ui.css.map diff --git a/static/unfold/css/simplebar.css b/app/static/unfold/css/simplebar.css similarity index 100% rename from static/unfold/css/simplebar.css rename to app/static/unfold/css/simplebar.css diff --git a/static/unfold/css/styles.css b/app/static/unfold/css/styles.css similarity index 100% rename from static/unfold/css/styles.css rename to app/static/unfold/css/styles.css diff --git a/static/unfold/filters/css/nouislider.min.css b/app/static/unfold/filters/css/nouislider.min.css similarity index 100% rename from static/unfold/filters/css/nouislider.min.css rename to app/static/unfold/filters/css/nouislider.min.css diff --git a/static/unfold/filters/js/DateTimeShortcuts.js b/app/static/unfold/filters/js/DateTimeShortcuts.js similarity index 100% rename from static/unfold/filters/js/DateTimeShortcuts.js rename to app/static/unfold/filters/js/DateTimeShortcuts.js diff --git a/static/unfold/filters/js/admin-numeric-filter.js b/app/static/unfold/filters/js/admin-numeric-filter.js similarity index 100% rename from static/unfold/filters/js/admin-numeric-filter.js rename to app/static/unfold/filters/js/admin-numeric-filter.js diff --git a/static/unfold/filters/js/nouislider.min.js b/app/static/unfold/filters/js/nouislider.min.js similarity index 100% rename from static/unfold/filters/js/nouislider.min.js rename to app/static/unfold/filters/js/nouislider.min.js diff --git a/static/unfold/filters/js/wNumb.min.js b/app/static/unfold/filters/js/wNumb.min.js similarity index 100% rename from static/unfold/filters/js/wNumb.min.js rename to app/static/unfold/filters/js/wNumb.min.js diff --git a/static/unfold/js/alpine.js b/app/static/unfold/js/alpine.js similarity index 100% rename from static/unfold/js/alpine.js rename to app/static/unfold/js/alpine.js diff --git a/static/unfold/js/app.js b/app/static/unfold/js/app.js similarity index 100% rename from static/unfold/js/app.js rename to app/static/unfold/js/app.js diff --git a/static/unfold/js/htmx.js b/app/static/unfold/js/htmx.js similarity index 100% rename from static/unfold/js/htmx.js rename to app/static/unfold/js/htmx.js diff --git a/static/unfold/js/simplebar.js b/app/static/unfold/js/simplebar.js similarity index 100% rename from static/unfold/js/simplebar.js rename to app/static/unfold/js/simplebar.js diff --git a/templates/base.html b/app/templates/base.html similarity index 100% rename from templates/base.html rename to app/templates/base.html diff --git a/theme/__init__.py b/app/theme/__init__.py similarity index 100% rename from theme/__init__.py rename to app/theme/__init__.py diff --git a/theme/apps.py b/app/theme/apps.py similarity index 100% rename from theme/apps.py rename to app/theme/apps.py diff --git a/theme/static_src/.gitignore b/app/theme/static_src/.gitignore similarity index 100% rename from theme/static_src/.gitignore rename to app/theme/static_src/.gitignore diff --git a/theme/static_src/package-lock.json b/app/theme/static_src/package-lock.json similarity index 100% rename from theme/static_src/package-lock.json rename to app/theme/static_src/package-lock.json diff --git a/theme/static_src/package.json b/app/theme/static_src/package.json similarity index 100% rename from theme/static_src/package.json rename to app/theme/static_src/package.json diff --git a/theme/static_src/postcss.config.js b/app/theme/static_src/postcss.config.js similarity index 100% rename from theme/static_src/postcss.config.js rename to app/theme/static_src/postcss.config.js diff --git a/theme/static_src/src/styles.css b/app/theme/static_src/src/styles.css similarity index 100% rename from theme/static_src/src/styles.css rename to app/theme/static_src/src/styles.css diff --git a/theme/static_src/tailwind.config.js b/app/theme/static_src/tailwind.config.js similarity index 100% rename from theme/static_src/tailwind.config.js rename to app/theme/static_src/tailwind.config.js diff --git a/theme/templates/base.html b/app/theme/templates/base.html similarity index 100% rename from theme/templates/base.html rename to app/theme/templates/base.html diff --git a/theme/templates/unfold/dashboard.html b/app/theme/templates/unfold/dashboard.html similarity index 100% rename from theme/templates/unfold/dashboard.html rename to app/theme/templates/unfold/dashboard.html