From 72f5a9fb37a08efad43bcf6464a85713146dcd21 Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Sun, 23 Mar 2025 04:52:49 +0100 Subject: [PATCH] build: move backend-related files into backend dir; implement and connect services via docker-compose TODOs left: reimplement clean and help, sync static,well-known and assets between services --- .gitignore | 4 +- Makefile | 353 ++---------------- {frontend/assets => assets}/favicon.svg | 0 .../assets => assets}/fonts/fradrive/AUTHORS | 0 .../fonts/fradrive/ChangeLog | 0 .../fonts/fradrive/FRADriveMono-Bold.ttf | Bin .../fradrive/FRADriveMono-BoldItalic.ttf | Bin .../fonts/fradrive/FRADriveMono-Italic.ttf | Bin .../fonts/fradrive/FRADriveMono-Regular.ttf | Bin .../fonts/fradrive/FRADriveSans-Bold.ttf | Bin .../fradrive/FRADriveSans-BoldItalic.ttf | Bin .../fonts/fradrive/FRADriveSans-Italic.ttf | Bin .../fonts/fradrive/FRADriveSans-Regular.ttf | Bin .../fonts/fradrive/README.md | 0 .../assets => assets}/fonts/fradrive/TODO | 0 .../fraport_logo_2016_text.svg | 0 .../fraport_logo_2016_text.svg.license | 0 .../assets => assets}/fraport_logo_notext.svg | 0 .../fraport_logo_notext.svg.license | 0 .../assets => assets}/fraport_logo_text.svg | 0 .../fraport_logo_text.svg.license | 0 .../icons-src/fontawesome.json | 0 backend/.ghc/ghci_history | 0 .hlint.yaml => backend/.hlint.yaml | 0 {docker/backend => backend}/Dockerfile | 0 backend/Makefile | 52 +++ {app => backend/app}/DevelMain.hs | 0 {app => backend/app}/devel.hs | 0 {app => backend/app}/main.hs | 0 {config => backend/config}/archive-types | 0 {config => backend/config}/i18n.json | 0 {config => backend/config}/mimetypes | 0 .../config}/personalised-sheet-files-collate | 0 {config => backend/config}/robots.txt | 0 {config => backend/config}/robots.txt.license | 0 {config => backend/config}/settings.yml | 0 .../config}/submission-blacklist | 0 {config => backend/config}/test-settings.yml | 0 {config => backend/config}/video-types | 0 {config => backend/config}/wordlist.txt | 0 .../config}/wordlist.txt.license | 0 {hlint => backend/hlint}/Hlint.hs | 0 {load => backend/load}/Load.hs | 0 lpr => backend/lpr | 0 .../messages}/auth/campus/de.msg | 0 .../messages}/auth/campus/en.msg | 0 .../messages}/auth/dummy/de.msg | 0 .../messages}/auth/dummy/en.msg | 0 .../messages}/auth/pw-hash/de.msg | 0 .../messages}/auth/pw-hash/en.msg | 0 {messages => backend/messages}/button/de.msg | 0 {messages => backend/messages}/button/en.msg | 0 .../messages}/faq/de-de-formal.msg | 0 {messages => backend/messages}/faq/en-eu.msg | 0 .../messages}/frontend/de-de-formal.msg | 0 .../messages}/frontend/en.msg | 0 .../uniworx/categories/I18n/de-de-formal.msg | 0 .../uniworx/categories/I18n/en-eu.msg | 0 .../uniworx/categories/admin/de-de-formal.msg | 0 .../uniworx/categories/admin/en-eu.msg | 0 .../categories/authorization/de-de-formal.msg | 0 .../categories/authorization/en-eu.msg | 0 .../uniworx/categories/avs/de-de-formal.msg | 0 .../uniworx/categories/avs/en-eu.msg | 0 .../courses/courses/de-de-formal.msg | 0 .../categories/courses/courses/en-eu.msg | 0 .../courses/courses/event/de-de-formal.msg | 0 .../courses/courses/event/en-eu.msg | 0 .../courses/courses/news/de-de-formal.msg | 0 .../categories/courses/courses/news/en-eu.msg | 0 .../courses/exam/exam/de-de-formal.msg | 0 .../categories/courses/exam/exam/en-eu.msg | 0 .../courses/exam/exam_office/de-de-formal.msg | 0 .../courses/exam/exam_office/en-eu.msg | 0 .../exam/external_exam/de-de-formal.msg | 0 .../courses/exam/external_exam/en-eu.msg | 0 .../courses/material/de-de-formal.msg | 0 .../categories/courses/material/en-eu.msg | 0 .../courses/participants/de-de-formal.msg | 0 .../categories/courses/participants/en-eu.msg | 0 .../categories/courses/sheet/de-de-formal.msg | 0 .../categories/courses/sheet/en-eu.msg | 0 .../courses/submission/de-de-formal.msg | 0 .../categories/courses/submission/en-eu.msg | 0 .../courses/tutorial/de-de-formal.msg | 0 .../categories/courses/tutorial/en-eu.msg | 0 .../uniworx/categories/error/de-de-formal.msg | 0 .../uniworx/categories/error/en-eu.msg | 0 .../uniworx/categories/firm/de-de-formal.msg | 0 .../uniworx/categories/firm/en-eu.msg | 0 .../categories/health/de-de-formal.msg | 0 .../uniworx/categories/health/en-eu.msg | 0 .../uniworx/categories/help/de-de-formal.msg | 0 .../uniworx/categories/help/en-eu.msg | 0 .../uniworx/categories/info/de-de-formal.msg | 0 .../uniworx/categories/info/en-eu.msg | 0 .../categories/jobs_handler/de-de-formal.msg | 0 .../uniworx/categories/jobs_handler/en-eu.msg | 0 .../categories/metrics/de-de-formal.msg | 0 .../uniworx/categories/metrics/en-eu.msg | 0 .../categories/model_types/de-de-formal.msg | 0 .../uniworx/categories/model_types/en-eu.msg | 0 .../uniworx/categories/news/de-de-formal.msg | 0 .../uniworx/categories/news/en-eu.msg | 0 .../uniworx/categories/print/de-de-formal.msg | 0 .../uniworx/categories/print/en-eu.msg | 0 .../categories/qualification/de-de-formal.msg | 0 .../categories/qualification/en-eu.msg | 0 .../categories/school/de-de-formal.msg | 0 .../uniworx/categories/school/en-eu.msg | 0 .../send/send_notifications/de-de-formal.msg | 0 .../send/send_notifications/en-eu.msg | 0 .../settings/auth_settings/de-de-formal.msg | 0 .../settings/auth_settings/en-eu.msg | 0 .../settings/csv_options/de-de-formal.msg | 0 .../categories/settings/csv_options/en-eu.msg | 0 .../categories/settings/de-de-formal.msg | 0 .../uniworx/categories/settings/en-eu.msg | 0 .../personal_settings/de-de-formal.msg | 0 .../settings/personal_settings/en-eu.msg | 0 .../system_message/de-de-formal.msg | 0 .../categories/system_message/en-eu.msg | 0 .../uniworx/categories/term/de-de-formal.msg | 0 .../uniworx/categories/term/en-eu.msg | 0 .../uniworx/categories/user/de-de-formal.msg | 0 .../uniworx/categories/user/en-eu.msg | 0 .../yesod_middleware/de-de-formal.msg | 0 .../categories/yesod_middleware/en-eu.msg | 0 .../messages}/uniworx/misc/de-de-formal.msg | 0 .../messages}/uniworx/misc/en-eu.msg | 0 .../messages}/uniworx/test/de-de-formal.msg | 0 .../messages}/uniworx/test/en-eu.msg | 0 .../authorship_statement/de-de-formal.msg | 0 .../utils/authorship_statement/en-eu.msg | 0 .../uniworx/utils/buttons/de-de-formal.msg | 0 .../messages}/uniworx/utils/buttons/en-eu.msg | 0 .../utils/handler_form/de-de-formal.msg | 0 .../uniworx/utils/handler_form/en-eu.msg | 0 .../handler_form/massinput/de-de-formal.msg | 0 .../utils/handler_form/massinput/en-eu.msg | 0 .../handler_form/occurrences/de-de-formal.msg | 0 .../utils/handler_form/occurrences/en-eu.msg | 0 .../navigation/breadcrumbs/de-de-formal.msg | 0 .../utils/navigation/breadcrumbs/en-eu.msg | 0 .../utils/navigation/menu/de-de-formal.msg | 0 .../uniworx/utils/navigation/menu/en-eu.msg | 0 .../uniworx/utils/rating/de-de-formal.msg | 0 .../messages}/uniworx/utils/rating/en-eu.msg | 0 .../utils/site_layout/de-de-formal.msg | 0 .../uniworx/utils/site_layout/en-eu.msg | 0 .../utils/table_column/de-de-formal.msg | 0 .../uniworx/utils/table_column/en-eu.msg | 0 .../utils/table_pagination/de-de-formal.msg | 0 .../uniworx/utils/table_pagination/en-eu.msg | 0 .../uniworx/utils/utils/de-de-formal.msg | 0 .../messages}/uniworx/utils/utils/en-eu.msg | 0 .../missing-translations.sh | 0 {models => backend/models}/audit.model | 0 .../models}/authorship-statements.model | 0 {models => backend/models}/avs.model | 0 {models => backend/models}/changelog.model | 0 {models => backend/models}/company.model | 0 {models => backend/models}/config.model | 0 {models => backend/models}/courses.model | 0 .../models}/courses/favourite.model | 0 .../models}/courses/materials.model | 0 {models => backend/models}/courses/news.model | 0 {models => backend/models}/exam-office.model | 0 .../models}/exam-office/exam-labels.model | 0 {models => backend/models}/exams.model | 0 .../models}/external-apis.model | 0 .../models}/external-exams.model | 0 {models => backend/models}/files.model | 0 {models => backend/models}/invitations.model | 0 {models => backend/models}/jobs.model | 0 {models => backend/models}/lms.model | 0 {models => backend/models}/mail.model | 0 {models => backend/models}/print.model | 0 {models => backend/models}/schools.model | 0 {models => backend/models}/sheets.model | 0 .../models}/study-features.model | 0 {models => backend/models}/submissions.model | 0 .../models}/system-messages.model | 0 {models => backend/models}/terms.model | 0 {models => backend/models}/tutorials.model | 0 {models => backend/models}/users.model | 0 package.yaml => backend/package.yaml | 0 routes => backend/routes | 0 {src => backend/src}/Application.hs | 0 {src => backend/src}/Audit.hs | 0 {src => backend/src}/Audit/Types.hs | 0 {src => backend/src}/Auth/Dummy.hs | 0 {src => backend/src}/Auth/LDAP.hs | 0 {src => backend/src}/Auth/LDAP/AD.hs | 0 {src => backend/src}/Auth/PWHash.hs | 0 {src => backend/src}/Colonnade/Instances.hs | 0 .../src}/Control/Arrow/Instances.hs | 0 .../src}/Control/Monad/Catch/Instances.hs | 0 .../Control/Monad/Trans/Except/Instances.hs | 0 .../Monad/Trans/Memo/StateCache/Instances.hs | 0 .../Control/Monad/Trans/Random/Instances.hs | 0 {src => backend/src}/Cron.hs | 0 {src => backend/src}/Cron/Types.hs | 0 {src => backend/src}/Crypto/Hash/Instances.hs | 0 .../src}/Crypto/Random/Instances.hs | 0 .../src}/Crypto/Saltine/Instances.hs | 0 {src => backend/src}/CryptoID.hs | 0 {src => backend/src}/CryptoID/Cached.hs | 0 {src => backend/src}/CryptoID/TH.hs | 0 .../src}/Data/Aeson/Types/Instances.hs | 0 {src => backend/src}/Data/Bool/Instances.hs | 0 .../src}/Data/CaseInsensitive/Instances.hs | 0 .../src}/Data/CryptoID/Instances.hs | 0 .../src}/Data/Encoding/Instances.hs | 0 {src => backend/src}/Data/Fixed/Instances.hs | 0 .../src}/Data/HashSet/Instances.hs | 0 {src => backend/src}/Data/Maybe/Instances.hs | 0 .../src}/Data/MonoTraversable/Instances.hs | 0 {src => backend/src}/Data/Monoid/Instances.hs | 0 .../src}/Data/MultiSet/Instances.hs | 0 .../src}/Data/NonNull/Instances.hs | 0 .../src}/Data/Scientific/Instances.hs | 0 {src => backend/src}/Data/SemVer/Instances.hs | 0 {src => backend/src}/Data/Set/Instances.hs | 0 {src => backend/src}/Data/Sum/Instances.hs | 0 .../src}/Data/Time/Calendar/Instances.hs | 0 .../src}/Data/Time/Clock/Instances.hs | 0 .../src}/Data/Time/Clock/Instances/TH.hs | 0 .../src}/Data/Time/Format/Instances.hs | 0 .../src}/Data/Time/LocalTime/Instances.hs | 0 {src => backend/src}/Data/UUID/Instances.hs | 0 .../Universe/Instances/Reverse/Hashable.hs | 0 .../Data/Universe/Instances/Reverse/JSON.hs | 0 .../Instances/Reverse/MonoTraversable.hs | 0 .../Universe/Instances/Reverse/WithIndex.hs | 0 {src => backend/src}/Data/Universe/TH.hs | 0 {src => backend/src}/Data/Void/Instances.hs | 0 .../src}/Data/Word/Word24/Instances.hs | 0 .../src}/Database/Esqueleto/Instances.hs | 0 .../src}/Database/Esqueleto/Utils.hs | 0 .../src}/Database/Esqueleto/Utils/TH.hs | 0 .../src}/Database/Persist/Class/Instances.hs | 0 .../Database/Persist/Sql/Types/Instances.hs | 0 .../src}/Database/Persist/TH/Directory.hs | 0 .../src}/Database/Persist/Types/Instances.hs | 0 {src => backend/src}/Foundation.hs | 0 .../src}/Foundation/Authorization.hs | 0 {src => backend/src}/Foundation/DB.hs | 0 {src => backend/src}/Foundation/I18n.hs | 0 {src => backend/src}/Foundation/I18n/TH.hs | 0 {src => backend/src}/Foundation/Instances.hs | 0 .../src}/Foundation/Instances/ButtonClass.hs | 0 {src => backend/src}/Foundation/Navigation.hs | 0 {src => backend/src}/Foundation/Routes.hs | 0 .../src}/Foundation/Routes/Definitions.hs | 0 {src => backend/src}/Foundation/Servant.hs | 0 .../src}/Foundation/Servant/Types.hs | 0 {src => backend/src}/Foundation/SiteLayout.hs | 0 {src => backend/src}/Foundation/Type.hs | 0 {src => backend/src}/Foundation/Types.hs | 0 {src => backend/src}/Foundation/Yesod/Auth.hs | 0 .../src}/Foundation/Yesod/ErrorHandler.hs | 0 .../src}/Foundation/Yesod/Middleware.hs | 0 .../src}/Foundation/Yesod/Persist.hs | 0 .../src}/Foundation/Yesod/Session.hs | 0 .../src}/Foundation/Yesod/StaticContent.hs | 0 {src => backend/src}/Handler/Admin.hs | 0 {src => backend/src}/Handler/Admin/Avs.hs | 0 {src => backend/src}/Handler/Admin/Crontab.hs | 0 .../src}/Handler/Admin/ErrorMessage.hs | 0 {src => backend/src}/Handler/Admin/Ldap.hs | 0 {src => backend/src}/Handler/Admin/Test.hs | 0 .../src}/Handler/Admin/Test/Download.hs | 0 {src => backend/src}/Handler/Admin/Tokens.hs | 0 {src => backend/src}/Handler/ApiDocs.hs | 0 {src => backend/src}/Handler/Course.hs | 0 .../src}/Handler/Course/Communication.hs | 0 {src => backend/src}/Handler/Course/Delete.hs | 0 {src => backend/src}/Handler/Course/Edit.hs | 0 {src => backend/src}/Handler/Course/Events.hs | 0 .../src}/Handler/Course/Events/Delete.hs | 0 .../src}/Handler/Course/Events/Edit.hs | 0 .../src}/Handler/Course/Events/Form.hs | 0 .../src}/Handler/Course/Events/New.hs | 0 .../src}/Handler/Course/LecturerInvite.hs | 0 {src => backend/src}/Handler/Course/List.hs | 0 {src => backend/src}/Handler/Course/News.hs | 0 .../src}/Handler/Course/News/Delete.hs | 0 .../src}/Handler/Course/News/Download.hs | 0 .../src}/Handler/Course/News/Edit.hs | 0 .../src}/Handler/Course/News/Form.hs | 0 .../src}/Handler/Course/News/New.hs | 0 .../src}/Handler/Course/News/Show.hs | 0 .../src}/Handler/Course/ParticipantInvite.hs | 0 .../src}/Handler/Course/Register.hs | 0 {src => backend/src}/Handler/Course/Show.hs | 0 {src => backend/src}/Handler/Course/User.hs | 0 {src => backend/src}/Handler/Course/Users.hs | 0 .../src}/Handler/CryptoIDDispatch.hs | 0 {src => backend/src}/Handler/Error.hs | 0 {src => backend/src}/Handler/Exam.hs | 0 {src => backend/src}/Handler/Exam/AddUser.hs | 0 .../src}/Handler/Exam/AutoOccurrence.hs | 0 {src => backend/src}/Handler/Exam/Correct.hs | 0 .../src}/Handler/Exam/CorrectorInvite.hs | 0 {src => backend/src}/Handler/Exam/Edit.hs | 0 {src => backend/src}/Handler/Exam/Form.hs | 0 {src => backend/src}/Handler/Exam/List.hs | 0 {src => backend/src}/Handler/Exam/New.hs | 0 {src => backend/src}/Handler/Exam/Register.hs | 0 .../src}/Handler/Exam/RegistrationInvite.hs | 0 {src => backend/src}/Handler/Exam/Show.hs | 0 {src => backend/src}/Handler/Exam/Users.hs | 0 {src => backend/src}/Handler/ExamOffice.hs | 0 .../src}/Handler/ExamOffice/Course.hs | 0 .../src}/Handler/ExamOffice/Exam.hs | 0 .../src}/Handler/ExamOffice/Exams.hs | 0 .../src}/Handler/ExamOffice/ExternalExam.hs | 0 .../src}/Handler/ExamOffice/Fields.hs | 0 .../src}/Handler/ExamOffice/Users.hs | 0 {src => backend/src}/Handler/ExternalExam.hs | 0 .../src}/Handler/ExternalExam/Correct.hs | 0 .../src}/Handler/ExternalExam/Edit.hs | 0 .../src}/Handler/ExternalExam/Form.hs | 0 .../src}/Handler/ExternalExam/List.hs | 0 .../src}/Handler/ExternalExam/New.hs | 0 .../src}/Handler/ExternalExam/Show.hs | 0 .../src}/Handler/ExternalExam/StaffInvite.hs | 0 .../src}/Handler/ExternalExam/Users.hs | 0 {src => backend/src}/Handler/Firm.hs | 0 {src => backend/src}/Handler/Health.hs | 0 .../src}/Handler/Health/Interface.hs | 0 {src => backend/src}/Handler/Help.hs | 0 {src => backend/src}/Handler/Info.hs | 0 {src => backend/src}/Handler/Info/TH.hs | 0 {src => backend/src}/Handler/LMS.hs | 0 {src => backend/src}/Handler/LMS/Fake.hs | 0 {src => backend/src}/Handler/LMS/Learners.hs | 0 {src => backend/src}/Handler/LMS/Report.hs | 0 {src => backend/src}/Handler/LMS/Users.hs | 0 {src => backend/src}/Handler/Material.hs | 0 {src => backend/src}/Handler/Metrics.hs | 0 {src => backend/src}/Handler/News.hs | 0 {src => backend/src}/Handler/Participants.hs | 0 {src => backend/src}/Handler/PrintCenter.hs | 0 {src => backend/src}/Handler/Profile.hs | 0 {src => backend/src}/Handler/Qualification.hs | 0 {src => backend/src}/Handler/SAP.hs | 0 {src => backend/src}/Handler/School.hs | 0 {src => backend/src}/Handler/Sheet.hs | 0 .../src}/Handler/Sheet/CorrectorInvite.hs | 0 {src => backend/src}/Handler/Sheet/Current.hs | 0 {src => backend/src}/Handler/Sheet/Delete.hs | 0 .../src}/Handler/Sheet/Download.hs | 0 {src => backend/src}/Handler/Sheet/Edit.hs | 0 {src => backend/src}/Handler/Sheet/Form.hs | 0 {src => backend/src}/Handler/Sheet/List.hs | 0 {src => backend/src}/Handler/Sheet/New.hs | 0 .../src}/Handler/Sheet/PersonalisedFiles.hs | 0 .../Handler/Sheet/PersonalisedFiles/Meta.hs | 0 .../Handler/Sheet/PersonalisedFiles/Types.hs | 0 .../src}/Handler/Sheet/Pseudonym.hs | 0 {src => backend/src}/Handler/Sheet/Show.hs | 0 {src => backend/src}/Handler/StorageKey.hs | 0 {src => backend/src}/Handler/Submission.hs | 0 .../src}/Handler/Submission/Assign.hs | 0 .../Submission/AuthorshipStatements.hs | 0 .../src}/Handler/Submission/Correction.hs | 0 .../src}/Handler/Submission/Create.hs | 0 .../src}/Handler/Submission/Delete.hs | 0 .../src}/Handler/Submission/Download.hs | 0 .../src}/Handler/Submission/Grade.hs | 0 .../src}/Handler/Submission/Helper.hs | 0 .../Handler/Submission/Helper/ArchiveTable.hs | 0 .../src}/Handler/Submission/List.hs | 0 .../src}/Handler/Submission/New.hs | 0 .../src}/Handler/Submission/Show.hs | 0 .../Submission/SubmissionUserInvite.hs | 0 .../src}/Handler/Submission/Upload.hs | 0 {src => backend/src}/Handler/Swagger.hs | 0 {src => backend/src}/Handler/SystemMessage.hs | 0 {src => backend/src}/Handler/Term.hs | 0 {src => backend/src}/Handler/Tutorial.hs | 0 .../src}/Handler/Tutorial/Communication.hs | 0 .../src}/Handler/Tutorial/Delete.hs | 0 {src => backend/src}/Handler/Tutorial/Edit.hs | 0 {src => backend/src}/Handler/Tutorial/Form.hs | 0 {src => backend/src}/Handler/Tutorial/List.hs | 0 {src => backend/src}/Handler/Tutorial/New.hs | 0 .../src}/Handler/Tutorial/Register.hs | 0 .../src}/Handler/Tutorial/TutorInvite.hs | 0 .../src}/Handler/Tutorial/Users.hs | 0 {src => backend/src}/Handler/Upload.hs | 0 {src => backend/src}/Handler/Users.hs | 0 {src => backend/src}/Handler/Users/Add.hs | 0 {src => backend/src}/Handler/Utils.hs | 0 .../src}/Handler/Utils/AuthorshipStatement.hs | 0 {src => backend/src}/Handler/Utils/Avs.hs | 0 .../src}/Handler/Utils/Communication.hs | 0 {src => backend/src}/Handler/Utils/Company.hs | 0 .../src}/Handler/Utils/Concurrent.hs | 0 .../src}/Handler/Utils/ContentDisposition.hs | 0 .../src}/Handler/Utils/Corrections.hs | 0 {src => backend/src}/Handler/Utils/Course.hs | 0 {src => backend/src}/Handler/Utils/Csv.hs | 0 .../src}/Handler/Utils/Database.hs | 0 .../src}/Handler/Utils/DateTime.hs | 0 {src => backend/src}/Handler/Utils/Delete.hs | 0 .../src}/Handler/Utils/Download.hs | 0 {src => backend/src}/Handler/Utils/Exam.hs | 0 .../src}/Handler/Utils/ExamOffice/Course.hs | 0 .../src}/Handler/Utils/ExamOffice/Exam.hs | 0 .../Handler/Utils/ExamOffice/ExternalExam.hs | 0 .../src}/Handler/Utils/ExternalExam.hs | 0 .../src}/Handler/Utils/ExternalExam/Users.hs | 0 {src => backend/src}/Handler/Utils/Files.hs | 0 {src => backend/src}/Handler/Utils/Form.hs | 0 .../src}/Handler/Utils/Form/MassInput.hs | 0 .../Utils/Form/MassInput/Liveliness.hs | 0 .../src}/Handler/Utils/Form/MassInput/TH.hs | 0 .../src}/Handler/Utils/Form/Occurrences.hs | 0 .../src}/Handler/Utils/Form/Types.hs | 0 {src => backend/src}/Handler/Utils/I18n.hs | 0 .../src}/Handler/Utils/Invitations.hs | 0 {src => backend/src}/Handler/Utils/LMS.hs | 0 .../src}/Handler/Utils/LdapSystemFunctions.hs | 0 {src => backend/src}/Handler/Utils/Mail.hs | 0 .../src}/Handler/Utils/Memcached.hs | 0 {src => backend/src}/Handler/Utils/Minio.hs | 0 {src => backend/src}/Handler/Utils/News.hs | 0 .../src}/Handler/Utils/Occurrences.hs | 0 {src => backend/src}/Handler/Utils/Pandoc.hs | 0 {src => backend/src}/Handler/Utils/Profile.hs | 0 .../src}/Handler/Utils/Qualification.hs | 0 {src => backend/src}/Handler/Utils/Random.hs | 0 {src => backend/src}/Handler/Utils/Rating.hs | 0 .../src}/Handler/Utils/Rating/Format.hs | 0 .../Handler/Utils/Rating/Format/Legacy.hs | 0 {src => backend/src}/Handler/Utils/Routes.hs | 0 {src => backend/src}/Handler/Utils/Sheet.hs | 0 .../src}/Handler/Utils/SheetType.hs | 0 .../src}/Handler/Utils/StudyFeatures.hs | 0 .../src}/Handler/Utils/Submission.hs | 0 {src => backend/src}/Handler/Utils/Table.hs | 0 .../src}/Handler/Utils/Table/Cells.hs | 0 .../src}/Handler/Utils/Table/Columns.hs | 0 .../src}/Handler/Utils/Table/Pagination.hs | 0 .../Table/Pagination/CsvColumnExplanations.hs | 0 .../Handler/Utils/Table/Pagination/Types.hs | 0 {src => backend/src}/Handler/Utils/Term.hs | 0 .../src}/Handler/Utils/TermCandidates.hs | 0 .../src}/Handler/Utils/Tutorial.hs | 0 {src => backend/src}/Handler/Utils/Users.hs | 0 {src => backend/src}/Handler/Utils/Widgets.hs | 0 {src => backend/src}/Handler/Utils/Zip.hs | 0 {src => backend/src}/Import.hs | 0 {src => backend/src}/Import/NoFoundation.hs | 0 {src => backend/src}/Import/NoModel.hs | 0 {src => backend/src}/Import/Servant.hs | 0 .../src}/Import/Servant/NoFoundation.hs | 0 {src => backend/src}/Jobs.hs | 0 {src => backend/src}/Jobs/Crontab.hs | 0 .../Jobs/Handler/ChangeUserDisplayEmail.hs | 0 .../Jobs/Handler/DistributeCorrections.hs | 0 .../src}/Jobs/Handler/ExternalApis.hs | 0 {src => backend/src}/Jobs/Handler/Files.hs | 0 .../src}/Jobs/Handler/HelpRequest.hs | 0 .../src}/Jobs/Handler/Intervals/Utils.hs | 0 .../src}/Jobs/Handler/Invitation.hs | 0 {src => backend/src}/Jobs/Handler/LMS.hs | 0 .../Jobs/Handler/PersonalisedSheetFiles.hs | 0 {src => backend/src}/Jobs/Handler/Print.hs | 0 .../src}/Jobs/Handler/PruneInvitations.hs | 0 .../src}/Jobs/Handler/PruneOldSentMails.hs | 0 .../src}/Jobs/Handler/QueueNotification.hs | 0 .../Jobs/Handler/SendCourseCommunication.hs | 0 .../src}/Jobs/Handler/SendNotification.hs | 0 .../SendNotification/CorrectionsAssigned.hs | 0 .../CorrectionsNotDistributed.hs | 0 .../SendNotification/CourseRegistered.hs | 0 .../Handler/SendNotification/ExamActive.hs | 0 .../Handler/SendNotification/ExamOffice.hs | 0 .../Handler/SendNotification/ExamResult.hs | 0 .../Handler/SendNotification/Qualification.hs | 0 .../Handler/SendNotification/SheetActive.hs | 0 .../Handler/SendNotification/SheetInactive.hs | 0 .../SendNotification/SubmissionEdited.hs | 0 .../SendNotification/SubmissionRated.hs | 0 .../SendNotification/UserAuthModeUpdate.hs | 0 .../SendNotification/UserRightsUpdate.hs | 0 .../Jobs/Handler/SendNotification/Utils.hs | 0 .../src}/Jobs/Handler/SendPasswordReset.hs | 0 .../src}/Jobs/Handler/SendTestEmail.hs | 0 .../src}/Jobs/Handler/SetLogSettings.hs | 0 .../src}/Jobs/Handler/StudyFeatures.hs | 0 .../src}/Jobs/Handler/SynchroniseAvs.hs | 0 .../src}/Jobs/Handler/SynchroniseLdap.hs | 0 .../src}/Jobs/Handler/TransactionLog.hs | 0 {src => backend/src}/Jobs/HealthReport.hs | 0 {src => backend/src}/Jobs/Offload.hs | 0 {src => backend/src}/Jobs/Queue.hs | 0 {src => backend/src}/Jobs/Types.hs | 0 {src => backend/src}/Jose/Jwk/Instances.hs | 0 {src => backend/src}/Jose/Jwt/Instances.hs | 0 .../src}/Language/Haskell/TH/Instances.hs | 0 {src => backend/src}/Ldap/Client/Instances.hs | 0 {src => backend/src}/Ldap/Client/Pool.hs | 0 {src => backend/src}/Mail.hs | 0 {src => backend/src}/Model.hs | 0 {src => backend/src}/Model/Migration.hs | 0 .../src}/Model/Migration/Definitions.hs | 0 {src => backend/src}/Model/Migration/Types.hs | 0 .../src}/Model/Migration/Version.hs | 0 {src => backend/src}/Model/Rating.hs | 0 {src => backend/src}/Model/Submission.hs | 0 {src => backend/src}/Model/Tokens.hs | 0 {src => backend/src}/Model/Tokens/Bearer.hs | 0 {src => backend/src}/Model/Tokens/Lens.hs | 0 {src => backend/src}/Model/Tokens/Session.hs | 0 {src => backend/src}/Model/Tokens/Upload.hs | 0 {src => backend/src}/Model/Types.hs | 0 {src => backend/src}/Model/Types/Apis.hs | 0 {src => backend/src}/Model/Types/Avs.hs | 0 {src => backend/src}/Model/Types/Changelog.hs | 0 {src => backend/src}/Model/Types/Common.hs | 0 .../src}/Model/Types/Communication.hs | 0 {src => backend/src}/Model/Types/Course.hs | 0 {src => backend/src}/Model/Types/Csv.hs | 0 {src => backend/src}/Model/Types/DateTime.hs | 0 {src => backend/src}/Model/Types/Exam.hs | 0 .../src}/Model/Types/ExamOffice.hs | 0 {src => backend/src}/Model/Types/File.hs | 0 {src => backend/src}/Model/Types/Health.hs | 0 {src => backend/src}/Model/Types/Languages.hs | 0 {src => backend/src}/Model/Types/Lms.hs | 0 {src => backend/src}/Model/Types/Mail.hs | 0 {src => backend/src}/Model/Types/Markup.hs | 0 {src => backend/src}/Model/Types/Misc.hs | 0 {src => backend/src}/Model/Types/Room.hs | 0 {src => backend/src}/Model/Types/School.hs | 0 {src => backend/src}/Model/Types/Security.hs | 0 {src => backend/src}/Model/Types/Sheet.hs | 0 .../src}/Model/Types/Submission.hs | 0 .../src}/Model/Types/SystemMessage.hs | 0 {src => backend/src}/Model/Types/TH/Binary.hs | 0 {src => backend/src}/Model/Types/TH/JSON.hs | 0 .../src}/Model/Types/TH/PathPiece.hs | 0 .../src}/Model/Types/TH/Wordlist.hs | 0 {src => backend/src}/Model/Types/Upload.hs | 0 {src => backend/src}/Model/Types/User.hs | 0 .../Network/HTTP/Types/Method/Instances.hs | 0 .../src}/Network/IP/Addr/Instances.hs | 0 .../src}/Network/Mail/Mime/Instances.hs | 0 {src => backend/src}/Network/Mime/TH.hs | 0 .../src}/Network/Minio/Instances.hs | 0 {src => backend/src}/Network/URI/Instances.hs | 0 .../src}/Numeric/Natural/Instances.hs | 0 {src => backend/src}/Prometheus/Instances.hs | 0 .../Servant/Client/Core/BaseUrl/Instances.hs | 0 .../Servant/Docs/Internal/Pretty/Instances.hs | 0 .../src}/Servant/Server/Instances.hs | 0 {src => backend/src}/ServantApi.hs | 0 .../src}/ServantApi/ExternalApis.hs | 0 .../src}/ServantApi/ExternalApis/Type.hs | 0 {src => backend/src}/Settings.hs | 0 {src => backend/src}/Settings/Cluster.hs | 0 .../src}/Settings/Cluster/Volatile.hs | 0 {src => backend/src}/Settings/Cookies.hs | 0 {src => backend/src}/Settings/Locale.hs | 0 {src => backend/src}/Settings/Log.hs | 0 {src => backend/src}/Settings/Mime.hs | 0 {src => backend/src}/Settings/StaticFiles.hs | 0 .../src}/Settings/WellKnownFiles.hs | 0 .../src}/Settings/WellKnownFiles/TH.hs | 0 .../src}/System/Clock/Instances.hs | 0 .../src}/System/FilePath/Glob/TH.hs | 0 .../src}/System/FilePath/Instances.hs | 0 {src => backend/src}/Text/Blaze/Instances.hs | 0 .../src}/Text/Shakespeare/Text/Instances.hs | 0 {src => backend/src}/UnliftIO/Async/Utils.hs | 0 {src => backend/src}/Utils.hs | 0 {src => backend/src}/Utils/ARC.hs | 0 {src => backend/src}/Utils/Approot.hs | 0 {src => backend/src}/Utils/Auth.hs | 0 {src => backend/src}/Utils/Avs.hs | 0 {src => backend/src}/Utils/Cookies.hs | 0 .../src}/Utils/Cookies/Registered.hs | 0 {src => backend/src}/Utils/Course.hs | 0 {src => backend/src}/Utils/Csv.hs | 0 {src => backend/src}/Utils/Csv/Mail.hs | 0 {src => backend/src}/Utils/DB.hs | 0 {src => backend/src}/Utils/DateTime.hs | 0 {src => backend/src}/Utils/Exam/Correct.hs | 0 {src => backend/src}/Utils/Failover.hs | 0 {src => backend/src}/Utils/Files.hs | 0 {src => backend/src}/Utils/Form.hs | 0 {src => backend/src}/Utils/Frontend/I18n.hs | 0 {src => backend/src}/Utils/Frontend/Modal.hs | 0 .../src}/Utils/Frontend/Notification.hs | 0 {src => backend/src}/Utils/Holidays.hs | 0 {src => backend/src}/Utils/HttpConditional.hs | 0 {src => backend/src}/Utils/I18n.hs | 0 {src => backend/src}/Utils/Icon.hs | 0 {src => backend/src}/Utils/LRU.hs | 0 {src => backend/src}/Utils/Lang.hs | 0 {src => backend/src}/Utils/Lens.hs | 0 {src => backend/src}/Utils/Lens/TH.hs | 0 {src => backend/src}/Utils/Memo.hs | 0 {src => backend/src}/Utils/Message.hs | 0 {src => backend/src}/Utils/Metrics.hs | 0 {src => backend/src}/Utils/NTop.hs | 0 {src => backend/src}/Utils/Occurrences.hs | 0 {src => backend/src}/Utils/Parameters.hs | 0 {src => backend/src}/Utils/PathPiece.hs | 0 {src => backend/src}/Utils/Persist.hs | 0 .../src}/Utils/PersistentTokenBucket.hs | 0 {src => backend/src}/Utils/Pool.hs | 0 {src => backend/src}/Utils/Postgresql.hs | 0 {src => backend/src}/Utils/Print.hs | 0 .../src}/Utils/Print/CourseCertificate.hs | 0 .../src}/Utils/Print/ExpireQualification.hs | 0 {src => backend/src}/Utils/Print/Instances.hs | 0 {src => backend/src}/Utils/Print/Letters.hs | 0 .../src}/Utils/Print/RenewQualification.hs | 0 .../src}/Utils/Print/SomeLetter.hs | 0 {src => backend/src}/Utils/Room.hs | 0 {src => backend/src}/Utils/Route.hs | 0 {src => backend/src}/Utils/Session.hs | 0 {src => backend/src}/Utils/Set.hs | 0 {src => backend/src}/Utils/Sheet.hs | 0 {src => backend/src}/Utils/Sql.hs | 0 {src => backend/src}/Utils/SystemMessage.hs | 0 {src => backend/src}/Utils/TH.hs | 0 .../src}/Utils/TH/AlphaConversion.hs | 0 {src => backend/src}/Utils/TH/Routes.hs | 0 {src => backend/src}/Utils/Term.hs | 0 {src => backend/src}/Utils/Tokens.hs | 0 {src => backend/src}/Utils/Users.hs | 0 .../src}/Utils/VolatileClusterSettings.hs | 0 {src => backend/src}/Utils/Widgets.hs | 0 {src => backend/src}/Web/Cookie/Instances.hs | 0 .../src}/Web/PathPieces/Instances.hs | 0 .../Backend/Persistent/Memcached.hs | 0 .../Web/ServerSession/Frontend/Yesod/Jwt.hs | 0 {src => backend/src}/Yesod/Core/Instances.hs | 0 .../src}/Yesod/Core/Types/Instances.hs | 0 .../src}/Yesod/Core/Types/Instances/Catch.hs | 0 .../src}/Yesod/Form/Fields/Instances.hs | 0 .../src}/Yesod/Form/Types/Instances.hs | 0 {src => backend/src}/Yesod/Servant.hs | 0 .../Yesod/Servant/HttpApiDataInjective.hs | 0 {src => backend/src}/index.md | 0 {src => backend/src}/index.md.license | 0 stack-flake.yaml => backend/stack-flake.yaml | 0 stack.nix => backend/stack.nix | 0 stack.yaml => backend/stack.yaml | 0 stack.yaml.lock => backend/stack.yaml.lock | 0 .../stack.yaml.lock.license | 0 stackage.nix => backend/stackage.nix | 0 .../templates}/admin-problems.hamlet | 0 .../templates}/admin-tokens.hamlet | 0 .../templates}/adminFeatures.hamlet | 0 .../templates}/adminUser.hamlet | 0 .../templates}/approot.julius | 0 .../templates}/authpreds.hamlet | 0 {templates => backend/templates}/avs.hamlet | 0 .../templates}/changelog.hamlet | 0 .../templates}/correction-user.hamlet | 0 .../templates}/correction.hamlet | 0 .../templates}/corrections-assign.hamlet | 0 .../templates}/corrections-create.hamlet | 0 .../templates}/corrections-grade.hamlet | 0 .../templates}/corrections-overview.hamlet | 0 .../templates}/corrections-upload.hamlet | 0 .../templates}/corrections.hamlet | 0 .../templates}/course-news.hamlet | 0 .../templates}/course-participants.hamlet | 0 .../templates}/course.hamlet | 0 .../add-user/confirmation-wrapper.hamlet | 0 .../course/add-user/confirmation.hamlet | 0 .../course/add-user/confirmation.julius | 0 .../course/lecturerMassInput/add.hamlet | 0 .../lecturerMassInput/cellInvitation.hamlet | 0 .../course/lecturerMassInput/cellKnown.hamlet | 0 .../course/lecturerMassInput/layout.hamlet | 0 .../course/login-to-register.hamlet | 0 .../templates}/course/user/corrections.hamlet | 0 .../templates}/course/user/exams.hamlet | 0 .../templates}/course/user/note.hamlet | 0 .../templates}/course/user/profile.hamlet | 0 .../templates}/course/user/tutorials.hamlet | 0 .../templates}/courses.hamlet | 0 .../csv-import-confirmation-wrapper.hamlet | 0 .../templates}/csv-import-confirmation.hamlet | 0 .../templates}/csv-import-confirmation.julius | 0 .../templates}/current-route.julius | 0 .../templates}/default-layout-wrapper.hamlet | 0 .../templates}/default-layout.hamlet | 0 .../templates}/deletedUser.hamlet | 0 .../templates}/exam-correct.hamlet | 0 .../templates}/exam-edit.hamlet | 0 .../templates}/exam-list.hamlet | 0 .../templates}/exam-new.hamlet | 0 .../exam-office/exam-result-synced.hamlet | 0 .../exam-office/exam-results.hamlet | 0 .../exam-office/externalExamGrades.hamlet | 0 .../templates}/exam-show.hamlet | 0 .../templates}/exam-users.hamlet | 0 .../exam/auto-occurrence-confirm.hamlet | 0 .../exam/schoolMassInput/add.hamlet | 0 .../exam/schoolMassInput/cell.hamlet | 0 .../exam/schoolMassInput/layout.hamlet | 0 .../templates}/external-exam-show.hamlet | 0 .../external-exam/schoolMassInput/add.hamlet | 0 .../external-exam/schoolMassInput/cell.hamlet | 0 .../schoolMassInput/layout.hamlet | 0 .../external-exam/staffMassInput/add.hamlet | 0 .../staffMassInput/cellInvitation.hamlet | 0 .../staffMassInput/cellKnown.hamlet | 0 .../staffMassInput/layout.hamlet | 0 {templates => backend/templates}/faq.hamlet | 0 .../templates}/firm-contact-info.hamlet | 0 .../templates}/firm-users.hamlet | 0 .../templates}/glossary.hamlet | 0 {templates => backend/templates}/help.hamlet | 0 {templates => backend/templates}/i18n.julius | 0 .../templates}/i18n/README_i18n.txt | 0 .../templates}/i18n/README_i18n.txt.license | 0 .../i18n/admin-test/de-de-formal.hamlet | 0 .../templates}/i18n/admin-test/en-eu.hamlet | 0 .../de-de-formal.hamlet | 0 .../i18n/applications-list-info/en-eu.hamlet | 0 .../exists.de-de-formal.hamlet | 0 .../exists.en-eu.hamlet | 0 .../missing.de-de-formal.hamlet | 0 .../missing.en-eu.hamlet | 0 .../old-statement.de-de-formal.hamlet | 0 .../old-statement.en-eu.hamlet | 0 .../avs-synchronisation/de-de-formal.hamlet | 0 .../i18n/avs-synchronisation/en-eu.hamlet | 0 ...adrive-initial-release.de-de-formal.hamlet | 0 .../fradrive-initial-release.en-eu.hamlet | 0 ...rs-may-revoke-licences.de-de-formal.hamlet | 0 ...pervisors-may-revoke-licences.en-eu.hamlet | 0 .../i18n/comm-test-tip/de-de-formal.hamlet | 0 .../i18n/comm-test-tip/en-eu.hamlet | 0 .../i18n/copyright/de-de-formal.hamlet | 0 .../templates}/i18n/copyright/en.hamlet | 0 .../de-de-formal.hamlet | 0 .../en-eu.hamlet | 0 .../de-de-formal.hamlet | 0 .../en-eu.hamlet | 0 .../i18n/data-delete/de-de-formal.hamlet | 0 .../templates}/i18n/data-delete/en-eu.hamlet | 0 .../i18n/data-protection/de-de-formal.hamlet | 0 .../templates}/i18n/data-protection/en.hamlet | 0 .../de-de-formal.hamlet | 0 .../en-eu.hamlet | 0 .../de-de-formal.hamlet | 0 .../exam-correct-explanation/en-eu.hamlet | 0 .../i18n/exam-mode/aids/de-de-formal.hamlet | 0 .../i18n/exam-mode/aids/en-eu.hamlet | 0 .../i18n/exam-mode/online/de-de-formal.hamlet | 0 .../i18n/exam-mode/online/en-eu.hamlet | 0 .../requiredEquipment/de-de-formal.hamlet | 0 .../exam-mode/requiredEquipment/en-eu.hamlet | 0 .../synchronicity/de-de-formal.hamlet | 0 .../i18n/exam-mode/synchronicity/en-eu.hamlet | 0 .../de-de-formal.hamlet | 0 .../exam-grades-explanation/en-eu.hamlet | 0 .../computed-values-tip/de-de-formal.hamlet | 0 .../computed-values-tip/en-eu.hamlet | 0 .../de-de-formal.hamlet | 0 .../en-eu.hamlet | 0 .../faq/campus-cant-login.de-de-formal.hamlet | 0 .../i18n/faq/campus-cant-login.en-eu.hamlet | 0 .../forgotten-password.de-de-formal.hamlet | 0 .../i18n/faq/forgotten-password.en-eu.hamlet | 0 .../faq/login-expired.de-de-formal.hamlet | 0 .../i18n/faq/login-expired.en-eu.hamlet | 0 .../faq/no-campus-account.de-de-formal.hamlet | 0 .../i18n/faq/no-campus-account.en-eu.hamlet | 0 ...-how-to-create-courses.de-de-formal.hamlet | 0 ...ecturer-how-to-create-courses.en-eu.hamlet | 0 .../i18n/featureList/de-de-formal.hamlet | 0 .../templates}/i18n/featureList/en-eu.hamlet | 0 .../i18n/firm-all/de-de-formal.hamlet | 0 .../templates}/i18n/firm-all/en-eu.hamlet | 0 .../i18n/firm-supervisors/de-de-formal.hamlet | 0 .../i18n/firm-supervisors/en-eu.hamlet | 0 .../administrator.de-de-formal.hamlet | 0 .../i18n/glossary/administrator.en-eu.hamlet | 0 .../i18n/glossary/clone.de-de-formal.hamlet | 0 .../i18n/glossary/clone.en-eu.hamlet | 0 .../glossary/comm-course.de-de-formal.hamlet | 0 .../i18n/glossary/comm-course.en-eu.hamlet | 0 .../glossary/corrector.de-de-formal.hamlet | 0 .../i18n/glossary/corrector.en-eu.hamlet | 0 .../glossary/course-exams.de-de-formal.hamlet | 0 .../i18n/glossary/course-exams.en-eu.hamlet | 0 .../course-lecturers.de-de-formal.hamlet | 0 .../glossary/course-lecturers.en-eu.hamlet | 0 .../course-material.de-de-formal.hamlet | 0 .../glossary/course-material.en-eu.hamlet | 0 .../course-participant.de-de-formal.hamlet | 0 .../glossary/course-participant.en-eu.hamlet | 0 .../glossary/csv-format.de-de-formal.hamlet | 0 .../i18n/glossary/csv-format.en-eu.hamlet | 0 .../i18n/glossary/deficit.de-de-formal.hamlet | 0 .../i18n/glossary/deficit.en-eu.hamlet | 0 ...finition-course-events.de-de-formal.hamlet | 0 .../definition-course-events.en-eu.hamlet | 0 ...definition-course-news.de-de-formal.hamlet | 0 .../definition-course-news.en-eu.hamlet | 0 .../exercise-sheet.de-de-formal.hamlet | 0 .../i18n/glossary/exercise-sheet.en-eu.hamlet | 0 .../glossary/invitations.de-de-formal.hamlet | 0 .../i18n/glossary/invitations.en-eu.hamlet | 0 .../navigation-favourites.de-de-formal.hamlet | 0 .../navigation-favourites.en-eu.hamlet | 0 .../school-evaluation.de-de-formal.hamlet | 0 .../glossary/school-evaluation.en-eu.hamlet | 0 .../school-exam-office.de-de-formal.hamlet | 0 .../glossary/school-exam-office.en-eu.hamlet | 0 .../school-lecturer.de-de-formal.hamlet | 0 .../glossary/school-lecturer.en-eu.hamlet | 0 .../glossary/sheet-group.de-de-formal.hamlet | 0 .../i18n/glossary/sheet-group.en-eu.hamlet | 0 .../sheet-pseudonym.de-de-formal.hamlet | 0 .../glossary/sheet-pseudonym.en-eu.hamlet | 0 .../table-exam-result.de-de-formal.hamlet | 0 .../glossary/table-exam-result.en-eu.hamlet | 0 .../glossary/table-school.de-de-formal.hamlet | 0 .../i18n/glossary/table-school.en-eu.hamlet | 0 .../help-instructions/de-de-formal.hamlet | 0 .../i18n/help-instructions/en-eu.hamlet | 0 .../i18n/implementation/de-de-formal.hamlet | 0 .../i18n/implementation/en-eu.hamlet | 0 .../i18n/imprint/de-de-formal.hamlet | 0 .../templates}/i18n/imprint/en.hamlet | 0 .../i18n/info-lecturer/de-de-formal.hamlet | 0 .../i18n/info-lecturer/en-eu.hamlet | 0 .../i18n/knownBugs/de-de-formal.hamlet | 0 .../templates}/i18n/knownBugs/en-eu.hamlet | 0 .../i18n/lms-all/de-de-formal.hamlet | 0 .../templates}/i18n/lms-all/en-eu.hamlet | 0 .../markdown-explanation/de-de-formal.hamlet | 0 .../i18n/markdown-explanation/en-eu.hamlet | 0 .../de-de-formal.hamlet | 0 .../news/activeAllocations-info/en-eu.hamlet | 0 .../templates}/i18n/pitch/de-de-formal.hamlet | 0 .../templates}/i18n/pitch/en-eu.hamlet | 0 .../i18n/profile-remarks/de-de-formal.hamlet | 0 .../i18n/profile-remarks/en-eu.hamlet | 0 .../displayNameRules/de-de-formal.hamlet | 0 .../profile/displayNameRules/en-eu.hamlet | 0 .../tokenExplanation/de-de-formal.hamlet | 0 .../profile/tokenExplanation/en-eu.hamlet | 0 .../qualification/renewal/de-de-formal.hamlet | 0 .../i18n/qualification/renewal/en-eu.hamlet | 0 .../set-display-email/de-de-formal.hamlet | 0 .../i18n/set-display-email/en-eu.hamlet | 0 .../disabled/de-de-formal.hamlet | 0 .../disabled/en-eu.hamlet | 0 .../enabled/de-de-formal.hamlet | 0 .../enabled/en-eu.hamlet | 0 .../exam/de-de-formal.hamlet | 0 .../exam/en-eu.hamlet | 0 .../i18n/sheet-edit/de-de-formal.hamlet | 0 .../templates}/i18n/sheet-edit/en-eu.hamlet | 0 .../arbitrary/de-de-formal.hamlet | 0 .../arbitrary/en-eu.hamlet | 0 .../registered/de-de-formal.hamlet | 0 .../registered/en-eu.hamlet | 0 .../always/de-de-formal.hamlet | 0 .../submission-done-tip/always/en-eu.hamlet | 0 .../by-file/de-de-formal.hamlet | 0 .../submission-done-tip/by-file/en-eu.hamlet | 0 .../never/de-de-formal.hamlet | 0 .../submission-done-tip/never/en-eu.hamlet | 0 .../corrector/de-de-formal.hamlet | 0 .../corrector/en-eu.hamlet | 0 .../user/de-de-formal.hamlet | 0 .../user/en-eu.hamlet | 0 .../de-de-formal.hamlet | 0 .../table/csv-import-explanation/en-eu.hamlet | 0 .../i18n/terms-of-use/de-de-formal.hamlet | 0 .../templates}/i18n/terms-of-use/en.hamlet | 0 .../templates}/i18n/test/de-de-formal.hamlet | 0 .../templates}/i18n/test/en-eu.hamlet | 0 .../i18n/unauth-news/de-de-formal.hamlet | 0 .../templates}/i18n/unauth-news/en-eu.hamlet | 0 .../de-de-formal.hamlet | 0 .../en-eu.hamlet | 0 .../de-de-formal.hamlet | 0 .../en-eu.hamlet | 0 .../workflows-disabled/de-de-formal.hamlet | 0 .../i18n/workflows-disabled/en-eu.hamlet | 0 {templates => backend/templates}/ldap.hamlet | 0 {templates => backend/templates}/legal.hamlet | 0 .../templates}/letter/din5008.latex | 0 .../templates}/letter/din5008.latex.license | 0 .../templates}/letter/din5008with_pin.latex | 0 .../letter/din5008with_pin.latex.license | 0 .../templates}/letter/fraport_f_expiry.md | 0 .../letter/fraport_f_expiry.md.license | 0 .../letter/fraport_generic_expiry.md | 0 .../letter/fraport_generic_expiry.md.license | 0 .../letter/fraport_qualification.md | 0 .../letter/fraport_qualification.md.license | 0 .../templates}/letter/fraport_renewal.md | 0 .../letter/fraport_renewal.md.license | 0 .../templates}/letter/generic_template.html | 0 .../letter/generic_template.html.license | 0 .../templates}/letter/generic_template.latex | 0 .../letter/generic_template.latex.license | 0 .../templates}/letter/plain_article.latex | 0 .../letter/plain_article.latex.license | 0 .../templates}/lms-report.hamlet | 0 .../templates}/lms-result.hamlet | 0 .../templates}/lms-user.hamlet | 0 {templates => backend/templates}/lms.hamlet | 0 {templates => backend/templates}/login.hamlet | 0 .../mail/body/qualificationRenewal.hamlet | 0 .../mail/changeUserDisplayEmail.hamlet | 0 .../mail/correctionsAssigned.hamlet | 0 .../mail/correctionsUndistributed.hamlet | 0 .../mail/correctorInvitation.hamlet | 0 .../mail/courseCommunication.hamlet | 0 .../templates}/mail/courseRegistered.hamlet | 0 .../templates}/mail/editNotifications.hamlet | 0 .../examDeregistrationSoonInactive.hamlet | 0 .../mail/examOffice/examResults.hamlet | 0 .../mail/examOffice/examResultsChanged.hamlet | 0 .../examOffice/externalExamResults.hamlet | 0 .../mail/examRegistrationActive.hamlet | 0 .../mail/examRegistrationSoonInactive.hamlet | 0 .../templates}/mail/examResult.hamlet | 0 .../templates}/mail/genericMailLetter.hamlet | 0 .../templates}/mail/invitation.hamlet | 0 .../templates}/mail/lecturerInvitation.hamlet | 0 .../templates}/mail/passwordReset.hamlet | 0 .../mail/qualificationExpiry.hamlet | 0 .../templates}/mail/sheetActive.hamlet | 0 .../templates}/mail/sheetHint.hamlet | 0 .../templates}/mail/sheetInactive.hamlet | 0 .../templates}/mail/sheetSolution.hamlet | 0 .../templates}/mail/sheetSoonInactive.hamlet | 0 .../templates}/mail/submissionEdited.hamlet | 0 .../templates}/mail/submissionRated.hamlet | 0 .../templates}/mail/submissionRated.txt | 0 .../mail/submissionRated.txt.license | 0 .../mail/submissionUserCreated.hamlet | 0 .../mail/submissionUserDeleted.hamlet | 0 .../templates}/mail/support.hamlet | 0 .../templates}/mail/userAuthModeUpdate.hamlet | 0 .../templates}/mail/userRightsUpdate.hamlet | 0 .../mail/userSystemFunctionsUpdate.hamlet | 0 .../templates}/material-list.hamlet | 0 .../templates}/material-show.hamlet | 0 .../messages/correctionsUploaded.hamlet | 0 .../courseInvitationAlreadyRegistered.hamlet | 0 ...urseInvitationAlreadyTutorialMember.hamlet | 0 .../courseInvitationNotFoundInAvs.hamlet | 0 ...rseInvitationRegisteredWithoutField.hamlet | 0 ...nvitationNotRegisteredWithoutCourse.hamlet | 0 ...ionInvitationRegisteredWithoutField.hamlet | 0 .../messages/ignoredInvalidPseudonym.hamlet | 0 .../personalisedSheetFilesIgnored.hamlet | 0 .../submissionCreateDuplicates.hamlet | 0 .../messages/submissionCreateExisting.hamlet | 0 .../messages/submissionFilesIgnored.hamlet | 0 .../submissionsAlreadyAssigned.hamlet | 0 .../messages/submissionsAssignNotFound.hamlet | 0 .../submissionsAssignUnauthorized.hamlet | 0 .../submissionsNotAssignedAuto.hamlet | 0 .../messages/systemMessagesDeleted.hamlet | 0 .../messages/systemMessagesSetFrom.hamlet | 0 .../messages/systemMessagesSetTo.hamlet | 0 .../templates}/metrics.hamlet | 0 .../templates}/news/activeAllocations.hamlet | 0 .../templates}/news/openAllocations.hamlet | 0 .../templates}/news/system-messages.hamlet | 0 .../templates}/news/upcomingExams.hamlet | 0 .../templates}/news/upcomingSheets.hamlet | 0 .../templates}/participants-intersect.hamlet | 0 .../templates}/participants-list.hamlet | 0 .../templates}/print-center.hamlet | 0 .../templates}/print-send.hamlet | 0 .../profile/exam-office-labels/add.hamlet | 0 .../profile/exam-office-labels/cell.hamlet | 0 .../profile/exam-office-labels/layout.hamlet | 0 .../templates}/profile/profile.hamlet | 0 .../templates}/profile/profile.julius | 0 .../templates}/profileData.hamlet | 0 .../templates}/qualification-all.hamlet | 0 .../templates}/qualification.hamlet | 0 .../templates}/sheetCorrectors/add.hamlet | 0 .../templates}/sheetCorrectors/cell.hamlet | 0 .../templates}/sheetCorrectors/layout.hamlet | 0 .../templates}/sheetList.hamlet | 0 .../templates}/sheetShow.hamlet | 0 .../templates}/submission-assign.hamlet | 0 .../submission-correction-invisible.hamlet | 0 .../templates}/submission.hamlet | 0 .../templates}/system-message-list.hamlet | 0 .../templates}/system-message.hamlet | 0 .../templates}/table/cell/body.hamlet | 0 .../templates}/table/cell/header.hamlet | 0 .../templates}/table/cell/link.hamlet | 0 .../templates}/table/cell/list.hamlet | 0 .../table/cell/user-study-feature.hamlet | 0 .../templates}/table/colonnade.hamlet | 0 .../templates}/table/course/colonnade.hamlet | 0 .../table/course/course-teaser.hamlet | 0 .../templates}/table/course/header.hamlet | 0 .../table/csv-column-explanations.hamlet | 0 .../templates}/table/csv-example.hamlet | 0 .../templates}/table/csv-reimport.hamlet | 0 .../templates}/table/csv-transcode.hamlet | 0 .../templates}/table/header.hamlet | 0 .../table/layout-filter-default.hamlet | 0 .../templates}/table/layout-standalone.hamlet | 0 .../templates}/table/layout-wrapper.hamlet | 0 .../templates}/table/layout.hamlet | 0 .../templates}/table/sortable-header.hamlet | 0 .../term/active-mass-input/add.hamlet | 0 .../term/active-mass-input/cell.hamlet | 0 .../term/active-mass-input/layout.hamlet | 0 .../term/holiday-mass-input/add.hamlet | 0 .../term/holiday-mass-input/cell.hamlet | 0 .../term/holiday-mass-input/layout.hamlet | 0 {templates => backend/templates}/terms.hamlet | 0 .../templates}/tutorial-edit.hamlet | 0 .../templates}/tutorial-list.hamlet | 0 .../templates}/tutorial-new.hamlet | 0 .../templates}/tutorial-participants.hamlet | 0 .../tutorial/tutorMassInput/add.hamlet | 0 .../tutorMassInput/cellInvitation.hamlet | 0 .../tutorial/tutorMassInput/cellKnown.hamlet | 0 .../tutorial/tutorMassInput/layout.hamlet | 0 {templates => backend/templates}/users.hamlet | 0 .../templates}/versionHistory.hamlet | 0 .../templates}/widgets/aform/aform.hamlet | 0 .../templates}/widgets/alerts/alerts.hamlet | 0 .../authorship-statement-accept.hamlet | 0 ...ip-statement-submission-explanation.hamlet | 0 .../templates}/widgets/bonusRule.hamlet | 0 .../widgets/breadcrumbs/breadcrumbs.hamlet | 0 .../campus-login/campus-login-form.hamlet | 0 .../widgets/campus-login/campus-login.hamlet | 0 .../widgets/communication/recipientAdd.hamlet | 0 .../communication/recipientEmail.hamlet | 0 .../communication/recipientLayout.hamlet | 0 .../communication/recipientName.hamlet | 0 .../templates}/widgets/csvRendered.hamlet | 0 .../widgets/date-time/yet-invisible.hamlet | 0 .../delete-confirmation.hamlet | 0 .../dummy-login-form/dummy-login-form.hamlet | 0 .../templates}/widgets/email.hamlet | 0 .../widgets/exam-close-on-finished.hamlet | 0 .../templates}/widgets/exam-close.hamlet | 0 .../templates}/widgets/exam-finish.hamlet | 0 ...exam-occurrence-mapping-description.hamlet | 0 .../widgets/exam-occurrence-mapping.hamlet | 0 .../widgets/exam-office-label.hamlet | 0 .../widgets/explained-selection-field.hamlet | 0 .../widgets/field-view/field-view.hamlet | 0 .../widgets/fields/examOfficeFieldMode.hamlet | 0 .../widgets/fields/funcField.hamlet | 0 .../widgets/fields/labeled-checkbox.hamlet | 0 .../templates}/widgets/footer/footer.hamlet | 0 .../templates}/widgets/footer/link.hamlet | 0 .../templates}/widgets/form/form.hamlet | 0 .../widgets/genericFileField.hamlet | 0 .../grading-summary-row.hamlet | 0 .../grading-summary/grading-summary.hamlet | 0 .../templates}/widgets/gradingKey.hamlet | 0 .../hash-login-form/hash-login-form.hamlet | 0 .../templates}/widgets/html-field.hamlet | 0 .../templates}/widgets/i18n-form/add.hamlet | 0 .../templates}/widgets/i18n-form/cell.hamlet | 0 .../widgets/i18n-form/layout.hamlet | 0 .../templates}/widgets/invitation-site.hamlet | 0 .../templates}/widgets/link-email.hamlet | 0 .../templates}/widgets/massinput/cell.hamlet | 0 .../widgets/massinput/courses/add.hamlet | 0 .../widgets/massinput/courses/cell.hamlet | 0 .../widgets/massinput/courses/layout.hamlet | 0 .../massinput/examCorrectors/add.hamlet | 0 .../examCorrectors/cellInvitation.hamlet | 0 .../massinput/examCorrectors/cellKnown.hamlet | 0 .../massinput/examCorrectors/layout.hamlet | 0 .../massinput/examOfficeUsers/add.hamlet | 0 .../examOfficeUsers/cellInvitation.hamlet | 0 .../examOfficeUsers/cellKnown.hamlet | 0 .../massinput/examOfficeUsers/layout.hamlet | 0 .../widgets/massinput/examParts/add.hamlet | 0 .../widgets/massinput/examParts/form.hamlet | 0 .../widgets/massinput/examParts/layout.hamlet | 0 .../widgets/massinput/examRooms/add.hamlet | 0 .../widgets/massinput/examRooms/form.hamlet | 0 .../widgets/massinput/examRooms/layout.hamlet | 0 .../widgets/massinput/list/cell.hamlet | 0 .../widgets/massinput/list/layout.hamlet | 0 .../massinput-standalone-wrapper.hamlet | 0 .../massinput/massinput-standalone.hamlet | 0 .../widgets/massinput/massinput.hamlet | 0 .../templates}/widgets/massinput/row.hamlet | 0 .../massinput/submissionUsers/add.hamlet | 0 .../submissionUsers/cellInvitation.hamlet | 0 .../submissionUsers/cellKnown.hamlet | 0 .../massinput/submissionUsers/layout.hamlet | 0 .../volatileClusterSettings/add.hamlet | 0 .../volatileClusterSettings/form.hamlet | 0 .../volatileClusterSettings/layout.hamlet | 0 .../massinput/token-restrictions/add.hamlet | 0 .../massinput/token-restrictions/cell.hamlet | 0 .../token-restrictions/layout.hamlet | 0 .../massinput/uploadSpecificFiles/add.hamlet | 0 .../massinput/uploadSpecificFiles/form.hamlet | 0 .../uploadSpecificFiles/layout.hamlet | 0 .../add.hamlet | 0 .../cell.hamlet | 0 .../layout.hamlet | 0 .../workflowDefinitionFiles/add.hamlet | 0 .../workflowDefinitionFiles/form.hamlet | 0 .../workflowDefinitionFiles/layout.hamlet | 0 .../massinput/workflowDescriptions/add.hamlet | 0 .../workflowDescriptions/form.hamlet | 0 .../workflowDescriptions/layout.hamlet | 0 .../templates}/widgets/modal/modal.hamlet | 0 .../templates}/widgets/modal/trigger.hamlet | 0 .../widgets/multi-action/multi-action.hamlet | 0 .../multi-action/optional-action.hamlet | 0 .../templates}/widgets/multiFileField.hamlet | 0 .../widgets/navbar/container-radio.cassius | 0 .../navbar/container-radio.cassius.license | 0 .../widgets/navbar/container.hamlet | 0 .../templates}/widgets/navbar/item.hamlet | 0 .../navbar-container-item--button.hamlet | 0 .../navbar/navbar-container-item--link.hamlet | 0 .../templates}/widgets/navbar/navbar.hamlet | 0 .../templates}/widgets/notification.hamlet | 0 .../templates}/widgets/occurrence/cell.hamlet | 0 .../occurrence/cell/except-no-occur.hamlet | 0 .../occurrence/cell/except-no-occurr.hamlet | 0 .../occurrence/cell/except-occur.hamlet | 0 .../occurrence/cell/except-occurr.hamlet | 0 .../widgets/occurrence/cell/weekly.hamlet | 0 .../widgets/occurrence/form/except-add.hamlet | 0 .../occurrence/form/except-layout.hamlet | 0 .../occurrence/form/except-no-occur.hamlet | 0 .../occurrence/form/except-occur.hamlet | 0 .../occurrence/form/scheduled-add.hamlet | 0 .../occurrence/form/scheduled-layout.hamlet | 0 .../widgets/occurrence/form/weekly.hamlet | 0 .../widgets/pageaction/pageaction.hamlet | 0 .../widgets/pageaction/primary-wrapper.hamlet | 0 .../widgets/pageaction/primary.hamlet | 0 .../widgets/pageaction/secondary.hamlet | 0 .../widgets/permutation/permutation.hamlet | 0 .../templates}/widgets/rating/rating.hamlet | 0 .../register-form/register-form.hamlet | 0 .../link-instructions-modal.hamlet | 0 .../widgets/room-reference/link.hamlet | 0 .../templates}/widgets/sheetType.hamlet | 0 .../widgets/specificFileField.hamlet | 0 .../templates}/widgets/tooltip.hamlet | 0 .../widgets/tooltip_no-handle.hamlet | 0 .../user-rights-form/user-rights-form.hamlet | 0 .../templates}/widgets/zipFileField.hamlet | 0 .../workflows/instance-initiate.hamlet | 0 .../templates}/workflows/instances.hamlet | 0 .../templates}/workflows/top-instances.hamlet | 0 .../templates}/workflows/workflow-list.hamlet | 0 .../templates}/workflows/workflow.hamlet | 0 .../workflows/workflow/history-item.hamlet | 0 {test => backend/test}/Auth/LDAP/ADSpec.hs | 0 {test => backend/test}/CronSpec.hs | 0 .../test}/Crypto/Hash/TestInstances.hs | 0 .../test}/Data/NonNull/TestInstances.hs | 0 .../test}/Data/Scientific/InstancesSpec.hs | 0 {test => backend/test}/Database.hs | 0 {test => backend/test}/Database/Fill.hs | 0 .../Persist/Sql/Types/TestInstances.hs | 0 .../test}/Foundation/ServantSpec.hs | 0 {test => backend/test}/FoundationSpec.hs | 0 {test => backend/test}/Handler/CommonSpec.hs | 0 .../test}/Handler/CorrectionsSpec.hs | 0 .../test}/Handler/Exam/FormSpec.hs | 0 {test => backend/test}/Handler/HomeSpec.hs | 0 {test => backend/test}/Handler/ProfileSpec.hs | 0 {test => backend/test}/Handler/SAPSpec.hs | 0 .../Handler/Sheet/PersonalisedFilesSpec.hs | 0 .../test}/Handler/Utils/ExamSpec.hs | 0 .../test}/Handler/Utils/FilesSpec.hs | 0 .../test}/Handler/Utils/RatingSpec.hs | 0 .../test}/Handler/Utils/SubmissionSpec.hs | 0 .../Utils/Table/Pagination/TypesSpec.hs | 0 .../Handler/Utils/Table/PaginationSpec.hs | 0 .../test}/Handler/Utils/ZipSpec.hs | 0 .../test}/Jose/Jwk/TestInstances.hs | 0 {test => backend/test}/MailSpec.hs | 0 {test => backend/test}/Main.hs | 0 {test => backend/test}/Model/MigrationSpec.hs | 0 {test => backend/test}/Model/RatingSpec.hs | 0 .../test}/Model/Tokens/UploadSpec.hs | 0 .../test}/Model/Types/FileSpec.hs | 0 .../test}/Model/Types/LanguagesSpec.hs | 0 {test => backend/test}/Model/TypesSpec.hs | 0 {test => backend/test}/ModelSpec.hs | 0 {test => backend/test}/PandocSpec.hs | 0 .../Client/Core/BaseUrl/TestInstances.hs | 0 .../test}/ServantApi/ExternalApis/TypeSpec.hs | 0 .../test}/ServantApi/ExternalApisSpec.hs | 0 {test => backend/test}/ServantApiSpec.hs | 0 .../test}/Test/QuickCheck/Classes/Binary.hs | 0 .../test}/Test/QuickCheck/Classes/Csv.hs | 0 .../test}/Test/QuickCheck/Classes/Hashable.hs | 0 .../Test/QuickCheck/Classes/HttpApiData.hs | 0 .../test}/Test/QuickCheck/Classes/JSON.hs | 0 .../Test/QuickCheck/Classes/PathPiece.hs | 0 .../Test/QuickCheck/Classes/PersistField.hs | 0 .../test}/Test/QuickCheck/Classes/Universe.hs | 0 {test => backend/test}/TestImport.hs | 0 {test => backend/test}/TestInstances.hs | 0 .../test}/Text/Blaze/TestInstances.hs | 0 {test => backend/test}/User.hs | 0 {test => backend/test}/Utils/CsvSpec.hs | 0 {test => backend/test}/Utils/DateTimeSpec.hs | 0 {test => backend/test}/Utils/I18nSpec.hs | 0 {test => backend/test}/Utils/PathPieceSpec.hs | 0 {test => backend/test}/Utils/TypesSpec.hs | 0 {test => backend/test}/UtilsSpec.hs | 0 {testdata => backend/testdata}/AbgabeH10-1.hs | 0 {testdata => backend/testdata}/H10-2.hs | 0 {testdata => backend/testdata}/H10-3.hs | 0 .../testdata}/ProMo_Uebung10.pdf | Bin .../testdata}/ProMo_Uebung10.pdf.license | 0 {testdata => backend/testdata}/avs_json.hs | 0 .../fradrive_f_results_2022051910.csv | 0 .../fradrive_f_results_2022051910.csv.license | 0 {testdata => backend/testdata}/test.pdf | Bin .../testdata}/test.pdf.license | 0 .../testdata}/test_letters.hs | 0 .../testdata}/test_results.csv | 0 .../testdata}/test_results.csv.license | 0 translate.hs => backend/translate.hs | 0 compose.yaml | 44 ++- docker/postgres/initdb.sh | 14 - docker/postgres/pg_hba.conf | 3 - docker/postgres/pgconfig.sh | 6 - docker/postgres/postgresql.conf | 6 - docker/postgres/schema.sql | 5 - frontend/src/icons.scss | 2 +- utils/develop-status.pl | 200 ---------- 1257 files changed, 107 insertions(+), 582 deletions(-) rename {frontend/assets => assets}/favicon.svg (100%) rename {frontend/assets => assets}/fonts/fradrive/AUTHORS (100%) rename {frontend/assets => assets}/fonts/fradrive/ChangeLog (100%) rename {frontend/assets => assets}/fonts/fradrive/FRADriveMono-Bold.ttf (100%) rename {frontend/assets => assets}/fonts/fradrive/FRADriveMono-BoldItalic.ttf (100%) rename {frontend/assets => assets}/fonts/fradrive/FRADriveMono-Italic.ttf (100%) rename {frontend/assets => assets}/fonts/fradrive/FRADriveMono-Regular.ttf (100%) rename {frontend/assets => assets}/fonts/fradrive/FRADriveSans-Bold.ttf (100%) rename {frontend/assets => assets}/fonts/fradrive/FRADriveSans-BoldItalic.ttf (100%) rename {frontend/assets => assets}/fonts/fradrive/FRADriveSans-Italic.ttf (100%) rename {frontend/assets => assets}/fonts/fradrive/FRADriveSans-Regular.ttf (100%) rename {frontend/assets => assets}/fonts/fradrive/README.md (100%) rename {frontend/assets => assets}/fonts/fradrive/TODO (100%) rename {frontend/assets => assets}/fraport_logo_2016_text.svg (100%) rename {frontend/assets => assets}/fraport_logo_2016_text.svg.license (100%) rename {frontend/assets => assets}/fraport_logo_notext.svg (100%) rename {frontend/assets => assets}/fraport_logo_notext.svg.license (100%) rename {frontend/assets => assets}/fraport_logo_text.svg (100%) rename {frontend/assets => assets}/fraport_logo_text.svg.license (100%) rename {frontend/assets => assets}/icons-src/fontawesome.json (100%) create mode 100644 backend/.ghc/ghci_history rename .hlint.yaml => backend/.hlint.yaml (100%) rename {docker/backend => backend}/Dockerfile (100%) create mode 100644 backend/Makefile rename {app => backend/app}/DevelMain.hs (100%) rename {app => backend/app}/devel.hs (100%) rename {app => backend/app}/main.hs (100%) rename {config => backend/config}/archive-types (100%) rename {config => backend/config}/i18n.json (100%) rename {config => backend/config}/mimetypes (100%) rename {config => backend/config}/personalised-sheet-files-collate (100%) rename {config => backend/config}/robots.txt (100%) rename {config => backend/config}/robots.txt.license (100%) rename {config => backend/config}/settings.yml (100%) rename {config => backend/config}/submission-blacklist (100%) rename {config => backend/config}/test-settings.yml (100%) rename {config => backend/config}/video-types (100%) rename {config => backend/config}/wordlist.txt (100%) rename {config => backend/config}/wordlist.txt.license (100%) rename {hlint => backend/hlint}/Hlint.hs (100%) rename {load => backend/load}/Load.hs (100%) rename lpr => backend/lpr (100%) rename {messages => backend/messages}/auth/campus/de.msg (100%) rename {messages => backend/messages}/auth/campus/en.msg (100%) rename {messages => backend/messages}/auth/dummy/de.msg (100%) rename {messages => backend/messages}/auth/dummy/en.msg (100%) rename {messages => backend/messages}/auth/pw-hash/de.msg (100%) rename {messages => backend/messages}/auth/pw-hash/en.msg (100%) rename {messages => backend/messages}/button/de.msg (100%) rename {messages => backend/messages}/button/en.msg (100%) rename {messages => backend/messages}/faq/de-de-formal.msg (100%) rename {messages => backend/messages}/faq/en-eu.msg (100%) rename {messages => backend/messages}/frontend/de-de-formal.msg (100%) rename {messages => backend/messages}/frontend/en.msg (100%) rename {messages => backend/messages}/uniworx/categories/I18n/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/I18n/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/admin/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/admin/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/authorization/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/authorization/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/avs/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/avs/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/courses/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/courses/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/courses/event/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/courses/event/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/courses/news/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/courses/news/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/exam/exam/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/exam/exam/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/exam/exam_office/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/exam/exam_office/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/exam/external_exam/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/exam/external_exam/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/material/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/material/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/participants/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/participants/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/sheet/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/sheet/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/submission/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/submission/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/tutorial/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/courses/tutorial/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/error/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/error/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/firm/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/firm/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/health/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/health/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/help/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/help/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/info/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/info/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/jobs_handler/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/jobs_handler/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/metrics/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/metrics/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/model_types/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/model_types/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/news/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/news/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/print/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/print/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/qualification/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/qualification/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/school/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/school/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/send/send_notifications/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/send/send_notifications/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/settings/auth_settings/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/settings/auth_settings/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/settings/csv_options/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/settings/csv_options/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/settings/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/settings/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/settings/personal_settings/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/settings/personal_settings/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/system_message/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/system_message/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/term/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/term/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/user/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/user/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/categories/yesod_middleware/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/categories/yesod_middleware/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/misc/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/misc/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/test/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/test/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/utils/authorship_statement/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/utils/authorship_statement/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/utils/buttons/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/utils/buttons/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/utils/handler_form/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/utils/handler_form/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/utils/handler_form/massinput/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/utils/handler_form/massinput/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/utils/handler_form/occurrences/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/utils/handler_form/occurrences/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/utils/navigation/breadcrumbs/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/utils/navigation/menu/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/utils/navigation/menu/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/utils/rating/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/utils/rating/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/utils/site_layout/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/utils/site_layout/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/utils/table_column/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/utils/table_column/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/utils/table_pagination/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/utils/table_pagination/en-eu.msg (100%) rename {messages => backend/messages}/uniworx/utils/utils/de-de-formal.msg (100%) rename {messages => backend/messages}/uniworx/utils/utils/en-eu.msg (100%) rename missing-translations.sh => backend/missing-translations.sh (100%) rename {models => backend/models}/audit.model (100%) rename {models => backend/models}/authorship-statements.model (100%) rename {models => backend/models}/avs.model (100%) rename {models => backend/models}/changelog.model (100%) rename {models => backend/models}/company.model (100%) rename {models => backend/models}/config.model (100%) rename {models => backend/models}/courses.model (100%) rename {models => backend/models}/courses/favourite.model (100%) rename {models => backend/models}/courses/materials.model (100%) rename {models => backend/models}/courses/news.model (100%) rename {models => backend/models}/exam-office.model (100%) rename {models => backend/models}/exam-office/exam-labels.model (100%) rename {models => backend/models}/exams.model (100%) rename {models => backend/models}/external-apis.model (100%) rename {models => backend/models}/external-exams.model (100%) rename {models => backend/models}/files.model (100%) rename {models => backend/models}/invitations.model (100%) rename {models => backend/models}/jobs.model (100%) rename {models => backend/models}/lms.model (100%) rename {models => backend/models}/mail.model (100%) rename {models => backend/models}/print.model (100%) rename {models => backend/models}/schools.model (100%) rename {models => backend/models}/sheets.model (100%) rename {models => backend/models}/study-features.model (100%) rename {models => backend/models}/submissions.model (100%) rename {models => backend/models}/system-messages.model (100%) rename {models => backend/models}/terms.model (100%) rename {models => backend/models}/tutorials.model (100%) rename {models => backend/models}/users.model (100%) rename package.yaml => backend/package.yaml (100%) rename routes => backend/routes (100%) rename {src => backend/src}/Application.hs (100%) rename {src => backend/src}/Audit.hs (100%) rename {src => backend/src}/Audit/Types.hs (100%) rename {src => backend/src}/Auth/Dummy.hs (100%) rename {src => backend/src}/Auth/LDAP.hs (100%) rename {src => backend/src}/Auth/LDAP/AD.hs (100%) rename {src => backend/src}/Auth/PWHash.hs (100%) rename {src => backend/src}/Colonnade/Instances.hs (100%) rename {src => backend/src}/Control/Arrow/Instances.hs (100%) rename {src => backend/src}/Control/Monad/Catch/Instances.hs (100%) rename {src => backend/src}/Control/Monad/Trans/Except/Instances.hs (100%) rename {src => backend/src}/Control/Monad/Trans/Memo/StateCache/Instances.hs (100%) rename {src => backend/src}/Control/Monad/Trans/Random/Instances.hs (100%) rename {src => backend/src}/Cron.hs (100%) rename {src => backend/src}/Cron/Types.hs (100%) rename {src => backend/src}/Crypto/Hash/Instances.hs (100%) rename {src => backend/src}/Crypto/Random/Instances.hs (100%) rename {src => backend/src}/Crypto/Saltine/Instances.hs (100%) rename {src => backend/src}/CryptoID.hs (100%) rename {src => backend/src}/CryptoID/Cached.hs (100%) rename {src => backend/src}/CryptoID/TH.hs (100%) rename {src => backend/src}/Data/Aeson/Types/Instances.hs (100%) rename {src => backend/src}/Data/Bool/Instances.hs (100%) rename {src => backend/src}/Data/CaseInsensitive/Instances.hs (100%) rename {src => backend/src}/Data/CryptoID/Instances.hs (100%) rename {src => backend/src}/Data/Encoding/Instances.hs (100%) rename {src => backend/src}/Data/Fixed/Instances.hs (100%) rename {src => backend/src}/Data/HashSet/Instances.hs (100%) rename {src => backend/src}/Data/Maybe/Instances.hs (100%) rename {src => backend/src}/Data/MonoTraversable/Instances.hs (100%) rename {src => backend/src}/Data/Monoid/Instances.hs (100%) rename {src => backend/src}/Data/MultiSet/Instances.hs (100%) rename {src => backend/src}/Data/NonNull/Instances.hs (100%) rename {src => backend/src}/Data/Scientific/Instances.hs (100%) rename {src => backend/src}/Data/SemVer/Instances.hs (100%) rename {src => backend/src}/Data/Set/Instances.hs (100%) rename {src => backend/src}/Data/Sum/Instances.hs (100%) rename {src => backend/src}/Data/Time/Calendar/Instances.hs (100%) rename {src => backend/src}/Data/Time/Clock/Instances.hs (100%) rename {src => backend/src}/Data/Time/Clock/Instances/TH.hs (100%) rename {src => backend/src}/Data/Time/Format/Instances.hs (100%) rename {src => backend/src}/Data/Time/LocalTime/Instances.hs (100%) rename {src => backend/src}/Data/UUID/Instances.hs (100%) rename {src => backend/src}/Data/Universe/Instances/Reverse/Hashable.hs (100%) rename {src => backend/src}/Data/Universe/Instances/Reverse/JSON.hs (100%) rename {src => backend/src}/Data/Universe/Instances/Reverse/MonoTraversable.hs (100%) rename {src => backend/src}/Data/Universe/Instances/Reverse/WithIndex.hs (100%) rename {src => backend/src}/Data/Universe/TH.hs (100%) rename {src => backend/src}/Data/Void/Instances.hs (100%) rename {src => backend/src}/Data/Word/Word24/Instances.hs (100%) rename {src => backend/src}/Database/Esqueleto/Instances.hs (100%) rename {src => backend/src}/Database/Esqueleto/Utils.hs (100%) rename {src => backend/src}/Database/Esqueleto/Utils/TH.hs (100%) rename {src => backend/src}/Database/Persist/Class/Instances.hs (100%) rename {src => backend/src}/Database/Persist/Sql/Types/Instances.hs (100%) rename {src => backend/src}/Database/Persist/TH/Directory.hs (100%) rename {src => backend/src}/Database/Persist/Types/Instances.hs (100%) rename {src => backend/src}/Foundation.hs (100%) rename {src => backend/src}/Foundation/Authorization.hs (100%) rename {src => backend/src}/Foundation/DB.hs (100%) rename {src => backend/src}/Foundation/I18n.hs (100%) rename {src => backend/src}/Foundation/I18n/TH.hs (100%) rename {src => backend/src}/Foundation/Instances.hs (100%) rename {src => backend/src}/Foundation/Instances/ButtonClass.hs (100%) rename {src => backend/src}/Foundation/Navigation.hs (100%) rename {src => backend/src}/Foundation/Routes.hs (100%) rename {src => backend/src}/Foundation/Routes/Definitions.hs (100%) rename {src => backend/src}/Foundation/Servant.hs (100%) rename {src => backend/src}/Foundation/Servant/Types.hs (100%) rename {src => backend/src}/Foundation/SiteLayout.hs (100%) rename {src => backend/src}/Foundation/Type.hs (100%) rename {src => backend/src}/Foundation/Types.hs (100%) rename {src => backend/src}/Foundation/Yesod/Auth.hs (100%) rename {src => backend/src}/Foundation/Yesod/ErrorHandler.hs (100%) rename {src => backend/src}/Foundation/Yesod/Middleware.hs (100%) rename {src => backend/src}/Foundation/Yesod/Persist.hs (100%) rename {src => backend/src}/Foundation/Yesod/Session.hs (100%) rename {src => backend/src}/Foundation/Yesod/StaticContent.hs (100%) rename {src => backend/src}/Handler/Admin.hs (100%) rename {src => backend/src}/Handler/Admin/Avs.hs (100%) rename {src => backend/src}/Handler/Admin/Crontab.hs (100%) rename {src => backend/src}/Handler/Admin/ErrorMessage.hs (100%) rename {src => backend/src}/Handler/Admin/Ldap.hs (100%) rename {src => backend/src}/Handler/Admin/Test.hs (100%) rename {src => backend/src}/Handler/Admin/Test/Download.hs (100%) rename {src => backend/src}/Handler/Admin/Tokens.hs (100%) rename {src => backend/src}/Handler/ApiDocs.hs (100%) rename {src => backend/src}/Handler/Course.hs (100%) rename {src => backend/src}/Handler/Course/Communication.hs (100%) rename {src => backend/src}/Handler/Course/Delete.hs (100%) rename {src => backend/src}/Handler/Course/Edit.hs (100%) rename {src => backend/src}/Handler/Course/Events.hs (100%) rename {src => backend/src}/Handler/Course/Events/Delete.hs (100%) rename {src => backend/src}/Handler/Course/Events/Edit.hs (100%) rename {src => backend/src}/Handler/Course/Events/Form.hs (100%) rename {src => backend/src}/Handler/Course/Events/New.hs (100%) rename {src => backend/src}/Handler/Course/LecturerInvite.hs (100%) rename {src => backend/src}/Handler/Course/List.hs (100%) rename {src => backend/src}/Handler/Course/News.hs (100%) rename {src => backend/src}/Handler/Course/News/Delete.hs (100%) rename {src => backend/src}/Handler/Course/News/Download.hs (100%) rename {src => backend/src}/Handler/Course/News/Edit.hs (100%) rename {src => backend/src}/Handler/Course/News/Form.hs (100%) rename {src => backend/src}/Handler/Course/News/New.hs (100%) rename {src => backend/src}/Handler/Course/News/Show.hs (100%) rename {src => backend/src}/Handler/Course/ParticipantInvite.hs (100%) rename {src => backend/src}/Handler/Course/Register.hs (100%) rename {src => backend/src}/Handler/Course/Show.hs (100%) rename {src => backend/src}/Handler/Course/User.hs (100%) rename {src => backend/src}/Handler/Course/Users.hs (100%) rename {src => backend/src}/Handler/CryptoIDDispatch.hs (100%) rename {src => backend/src}/Handler/Error.hs (100%) rename {src => backend/src}/Handler/Exam.hs (100%) rename {src => backend/src}/Handler/Exam/AddUser.hs (100%) rename {src => backend/src}/Handler/Exam/AutoOccurrence.hs (100%) rename {src => backend/src}/Handler/Exam/Correct.hs (100%) rename {src => backend/src}/Handler/Exam/CorrectorInvite.hs (100%) rename {src => backend/src}/Handler/Exam/Edit.hs (100%) rename {src => backend/src}/Handler/Exam/Form.hs (100%) rename {src => backend/src}/Handler/Exam/List.hs (100%) rename {src => backend/src}/Handler/Exam/New.hs (100%) rename {src => backend/src}/Handler/Exam/Register.hs (100%) rename {src => backend/src}/Handler/Exam/RegistrationInvite.hs (100%) rename {src => backend/src}/Handler/Exam/Show.hs (100%) rename {src => backend/src}/Handler/Exam/Users.hs (100%) rename {src => backend/src}/Handler/ExamOffice.hs (100%) rename {src => backend/src}/Handler/ExamOffice/Course.hs (100%) rename {src => backend/src}/Handler/ExamOffice/Exam.hs (100%) rename {src => backend/src}/Handler/ExamOffice/Exams.hs (100%) rename {src => backend/src}/Handler/ExamOffice/ExternalExam.hs (100%) rename {src => backend/src}/Handler/ExamOffice/Fields.hs (100%) rename {src => backend/src}/Handler/ExamOffice/Users.hs (100%) rename {src => backend/src}/Handler/ExternalExam.hs (100%) rename {src => backend/src}/Handler/ExternalExam/Correct.hs (100%) rename {src => backend/src}/Handler/ExternalExam/Edit.hs (100%) rename {src => backend/src}/Handler/ExternalExam/Form.hs (100%) rename {src => backend/src}/Handler/ExternalExam/List.hs (100%) rename {src => backend/src}/Handler/ExternalExam/New.hs (100%) rename {src => backend/src}/Handler/ExternalExam/Show.hs (100%) rename {src => backend/src}/Handler/ExternalExam/StaffInvite.hs (100%) rename {src => backend/src}/Handler/ExternalExam/Users.hs (100%) rename {src => backend/src}/Handler/Firm.hs (100%) rename {src => backend/src}/Handler/Health.hs (100%) rename {src => backend/src}/Handler/Health/Interface.hs (100%) rename {src => backend/src}/Handler/Help.hs (100%) rename {src => backend/src}/Handler/Info.hs (100%) rename {src => backend/src}/Handler/Info/TH.hs (100%) rename {src => backend/src}/Handler/LMS.hs (100%) rename {src => backend/src}/Handler/LMS/Fake.hs (100%) rename {src => backend/src}/Handler/LMS/Learners.hs (100%) rename {src => backend/src}/Handler/LMS/Report.hs (100%) rename {src => backend/src}/Handler/LMS/Users.hs (100%) rename {src => backend/src}/Handler/Material.hs (100%) rename {src => backend/src}/Handler/Metrics.hs (100%) rename {src => backend/src}/Handler/News.hs (100%) rename {src => backend/src}/Handler/Participants.hs (100%) rename {src => backend/src}/Handler/PrintCenter.hs (100%) rename {src => backend/src}/Handler/Profile.hs (100%) rename {src => backend/src}/Handler/Qualification.hs (100%) rename {src => backend/src}/Handler/SAP.hs (100%) rename {src => backend/src}/Handler/School.hs (100%) rename {src => backend/src}/Handler/Sheet.hs (100%) rename {src => backend/src}/Handler/Sheet/CorrectorInvite.hs (100%) rename {src => backend/src}/Handler/Sheet/Current.hs (100%) rename {src => backend/src}/Handler/Sheet/Delete.hs (100%) rename {src => backend/src}/Handler/Sheet/Download.hs (100%) rename {src => backend/src}/Handler/Sheet/Edit.hs (100%) rename {src => backend/src}/Handler/Sheet/Form.hs (100%) rename {src => backend/src}/Handler/Sheet/List.hs (100%) rename {src => backend/src}/Handler/Sheet/New.hs (100%) rename {src => backend/src}/Handler/Sheet/PersonalisedFiles.hs (100%) rename {src => backend/src}/Handler/Sheet/PersonalisedFiles/Meta.hs (100%) rename {src => backend/src}/Handler/Sheet/PersonalisedFiles/Types.hs (100%) rename {src => backend/src}/Handler/Sheet/Pseudonym.hs (100%) rename {src => backend/src}/Handler/Sheet/Show.hs (100%) rename {src => backend/src}/Handler/StorageKey.hs (100%) rename {src => backend/src}/Handler/Submission.hs (100%) rename {src => backend/src}/Handler/Submission/Assign.hs (100%) rename {src => backend/src}/Handler/Submission/AuthorshipStatements.hs (100%) rename {src => backend/src}/Handler/Submission/Correction.hs (100%) rename {src => backend/src}/Handler/Submission/Create.hs (100%) rename {src => backend/src}/Handler/Submission/Delete.hs (100%) rename {src => backend/src}/Handler/Submission/Download.hs (100%) rename {src => backend/src}/Handler/Submission/Grade.hs (100%) rename {src => backend/src}/Handler/Submission/Helper.hs (100%) rename {src => backend/src}/Handler/Submission/Helper/ArchiveTable.hs (100%) rename {src => backend/src}/Handler/Submission/List.hs (100%) rename {src => backend/src}/Handler/Submission/New.hs (100%) rename {src => backend/src}/Handler/Submission/Show.hs (100%) rename {src => backend/src}/Handler/Submission/SubmissionUserInvite.hs (100%) rename {src => backend/src}/Handler/Submission/Upload.hs (100%) rename {src => backend/src}/Handler/Swagger.hs (100%) rename {src => backend/src}/Handler/SystemMessage.hs (100%) rename {src => backend/src}/Handler/Term.hs (100%) rename {src => backend/src}/Handler/Tutorial.hs (100%) rename {src => backend/src}/Handler/Tutorial/Communication.hs (100%) rename {src => backend/src}/Handler/Tutorial/Delete.hs (100%) rename {src => backend/src}/Handler/Tutorial/Edit.hs (100%) rename {src => backend/src}/Handler/Tutorial/Form.hs (100%) rename {src => backend/src}/Handler/Tutorial/List.hs (100%) rename {src => backend/src}/Handler/Tutorial/New.hs (100%) rename {src => backend/src}/Handler/Tutorial/Register.hs (100%) rename {src => backend/src}/Handler/Tutorial/TutorInvite.hs (100%) rename {src => backend/src}/Handler/Tutorial/Users.hs (100%) rename {src => backend/src}/Handler/Upload.hs (100%) rename {src => backend/src}/Handler/Users.hs (100%) rename {src => backend/src}/Handler/Users/Add.hs (100%) rename {src => backend/src}/Handler/Utils.hs (100%) rename {src => backend/src}/Handler/Utils/AuthorshipStatement.hs (100%) rename {src => backend/src}/Handler/Utils/Avs.hs (100%) rename {src => backend/src}/Handler/Utils/Communication.hs (100%) rename {src => backend/src}/Handler/Utils/Company.hs (100%) rename {src => backend/src}/Handler/Utils/Concurrent.hs (100%) rename {src => backend/src}/Handler/Utils/ContentDisposition.hs (100%) rename {src => backend/src}/Handler/Utils/Corrections.hs (100%) rename {src => backend/src}/Handler/Utils/Course.hs (100%) rename {src => backend/src}/Handler/Utils/Csv.hs (100%) rename {src => backend/src}/Handler/Utils/Database.hs (100%) rename {src => backend/src}/Handler/Utils/DateTime.hs (100%) rename {src => backend/src}/Handler/Utils/Delete.hs (100%) rename {src => backend/src}/Handler/Utils/Download.hs (100%) rename {src => backend/src}/Handler/Utils/Exam.hs (100%) rename {src => backend/src}/Handler/Utils/ExamOffice/Course.hs (100%) rename {src => backend/src}/Handler/Utils/ExamOffice/Exam.hs (100%) rename {src => backend/src}/Handler/Utils/ExamOffice/ExternalExam.hs (100%) rename {src => backend/src}/Handler/Utils/ExternalExam.hs (100%) rename {src => backend/src}/Handler/Utils/ExternalExam/Users.hs (100%) rename {src => backend/src}/Handler/Utils/Files.hs (100%) rename {src => backend/src}/Handler/Utils/Form.hs (100%) rename {src => backend/src}/Handler/Utils/Form/MassInput.hs (100%) rename {src => backend/src}/Handler/Utils/Form/MassInput/Liveliness.hs (100%) rename {src => backend/src}/Handler/Utils/Form/MassInput/TH.hs (100%) rename {src => backend/src}/Handler/Utils/Form/Occurrences.hs (100%) rename {src => backend/src}/Handler/Utils/Form/Types.hs (100%) rename {src => backend/src}/Handler/Utils/I18n.hs (100%) rename {src => backend/src}/Handler/Utils/Invitations.hs (100%) rename {src => backend/src}/Handler/Utils/LMS.hs (100%) rename {src => backend/src}/Handler/Utils/LdapSystemFunctions.hs (100%) rename {src => backend/src}/Handler/Utils/Mail.hs (100%) rename {src => backend/src}/Handler/Utils/Memcached.hs (100%) rename {src => backend/src}/Handler/Utils/Minio.hs (100%) rename {src => backend/src}/Handler/Utils/News.hs (100%) rename {src => backend/src}/Handler/Utils/Occurrences.hs (100%) rename {src => backend/src}/Handler/Utils/Pandoc.hs (100%) rename {src => backend/src}/Handler/Utils/Profile.hs (100%) rename {src => backend/src}/Handler/Utils/Qualification.hs (100%) rename {src => backend/src}/Handler/Utils/Random.hs (100%) rename {src => backend/src}/Handler/Utils/Rating.hs (100%) rename {src => backend/src}/Handler/Utils/Rating/Format.hs (100%) rename {src => backend/src}/Handler/Utils/Rating/Format/Legacy.hs (100%) rename {src => backend/src}/Handler/Utils/Routes.hs (100%) rename {src => backend/src}/Handler/Utils/Sheet.hs (100%) rename {src => backend/src}/Handler/Utils/SheetType.hs (100%) rename {src => backend/src}/Handler/Utils/StudyFeatures.hs (100%) rename {src => backend/src}/Handler/Utils/Submission.hs (100%) rename {src => backend/src}/Handler/Utils/Table.hs (100%) rename {src => backend/src}/Handler/Utils/Table/Cells.hs (100%) rename {src => backend/src}/Handler/Utils/Table/Columns.hs (100%) rename {src => backend/src}/Handler/Utils/Table/Pagination.hs (100%) rename {src => backend/src}/Handler/Utils/Table/Pagination/CsvColumnExplanations.hs (100%) rename {src => backend/src}/Handler/Utils/Table/Pagination/Types.hs (100%) rename {src => backend/src}/Handler/Utils/Term.hs (100%) rename {src => backend/src}/Handler/Utils/TermCandidates.hs (100%) rename {src => backend/src}/Handler/Utils/Tutorial.hs (100%) rename {src => backend/src}/Handler/Utils/Users.hs (100%) rename {src => backend/src}/Handler/Utils/Widgets.hs (100%) rename {src => backend/src}/Handler/Utils/Zip.hs (100%) rename {src => backend/src}/Import.hs (100%) rename {src => backend/src}/Import/NoFoundation.hs (100%) rename {src => backend/src}/Import/NoModel.hs (100%) rename {src => backend/src}/Import/Servant.hs (100%) rename {src => backend/src}/Import/Servant/NoFoundation.hs (100%) rename {src => backend/src}/Jobs.hs (100%) rename {src => backend/src}/Jobs/Crontab.hs (100%) rename {src => backend/src}/Jobs/Handler/ChangeUserDisplayEmail.hs (100%) rename {src => backend/src}/Jobs/Handler/DistributeCorrections.hs (100%) rename {src => backend/src}/Jobs/Handler/ExternalApis.hs (100%) rename {src => backend/src}/Jobs/Handler/Files.hs (100%) rename {src => backend/src}/Jobs/Handler/HelpRequest.hs (100%) rename {src => backend/src}/Jobs/Handler/Intervals/Utils.hs (100%) rename {src => backend/src}/Jobs/Handler/Invitation.hs (100%) rename {src => backend/src}/Jobs/Handler/LMS.hs (100%) rename {src => backend/src}/Jobs/Handler/PersonalisedSheetFiles.hs (100%) rename {src => backend/src}/Jobs/Handler/Print.hs (100%) rename {src => backend/src}/Jobs/Handler/PruneInvitations.hs (100%) rename {src => backend/src}/Jobs/Handler/PruneOldSentMails.hs (100%) rename {src => backend/src}/Jobs/Handler/QueueNotification.hs (100%) rename {src => backend/src}/Jobs/Handler/SendCourseCommunication.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification/CorrectionsAssigned.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification/CorrectionsNotDistributed.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification/CourseRegistered.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification/ExamActive.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification/ExamOffice.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification/ExamResult.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification/Qualification.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification/SheetActive.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification/SheetInactive.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification/SubmissionEdited.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification/SubmissionRated.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification/UserAuthModeUpdate.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification/UserRightsUpdate.hs (100%) rename {src => backend/src}/Jobs/Handler/SendNotification/Utils.hs (100%) rename {src => backend/src}/Jobs/Handler/SendPasswordReset.hs (100%) rename {src => backend/src}/Jobs/Handler/SendTestEmail.hs (100%) rename {src => backend/src}/Jobs/Handler/SetLogSettings.hs (100%) rename {src => backend/src}/Jobs/Handler/StudyFeatures.hs (100%) rename {src => backend/src}/Jobs/Handler/SynchroniseAvs.hs (100%) rename {src => backend/src}/Jobs/Handler/SynchroniseLdap.hs (100%) rename {src => backend/src}/Jobs/Handler/TransactionLog.hs (100%) rename {src => backend/src}/Jobs/HealthReport.hs (100%) rename {src => backend/src}/Jobs/Offload.hs (100%) rename {src => backend/src}/Jobs/Queue.hs (100%) rename {src => backend/src}/Jobs/Types.hs (100%) rename {src => backend/src}/Jose/Jwk/Instances.hs (100%) rename {src => backend/src}/Jose/Jwt/Instances.hs (100%) rename {src => backend/src}/Language/Haskell/TH/Instances.hs (100%) rename {src => backend/src}/Ldap/Client/Instances.hs (100%) rename {src => backend/src}/Ldap/Client/Pool.hs (100%) rename {src => backend/src}/Mail.hs (100%) rename {src => backend/src}/Model.hs (100%) rename {src => backend/src}/Model/Migration.hs (100%) rename {src => backend/src}/Model/Migration/Definitions.hs (100%) rename {src => backend/src}/Model/Migration/Types.hs (100%) rename {src => backend/src}/Model/Migration/Version.hs (100%) rename {src => backend/src}/Model/Rating.hs (100%) rename {src => backend/src}/Model/Submission.hs (100%) rename {src => backend/src}/Model/Tokens.hs (100%) rename {src => backend/src}/Model/Tokens/Bearer.hs (100%) rename {src => backend/src}/Model/Tokens/Lens.hs (100%) rename {src => backend/src}/Model/Tokens/Session.hs (100%) rename {src => backend/src}/Model/Tokens/Upload.hs (100%) rename {src => backend/src}/Model/Types.hs (100%) rename {src => backend/src}/Model/Types/Apis.hs (100%) rename {src => backend/src}/Model/Types/Avs.hs (100%) rename {src => backend/src}/Model/Types/Changelog.hs (100%) rename {src => backend/src}/Model/Types/Common.hs (100%) rename {src => backend/src}/Model/Types/Communication.hs (100%) rename {src => backend/src}/Model/Types/Course.hs (100%) rename {src => backend/src}/Model/Types/Csv.hs (100%) rename {src => backend/src}/Model/Types/DateTime.hs (100%) rename {src => backend/src}/Model/Types/Exam.hs (100%) rename {src => backend/src}/Model/Types/ExamOffice.hs (100%) rename {src => backend/src}/Model/Types/File.hs (100%) rename {src => backend/src}/Model/Types/Health.hs (100%) rename {src => backend/src}/Model/Types/Languages.hs (100%) rename {src => backend/src}/Model/Types/Lms.hs (100%) rename {src => backend/src}/Model/Types/Mail.hs (100%) rename {src => backend/src}/Model/Types/Markup.hs (100%) rename {src => backend/src}/Model/Types/Misc.hs (100%) rename {src => backend/src}/Model/Types/Room.hs (100%) rename {src => backend/src}/Model/Types/School.hs (100%) rename {src => backend/src}/Model/Types/Security.hs (100%) rename {src => backend/src}/Model/Types/Sheet.hs (100%) rename {src => backend/src}/Model/Types/Submission.hs (100%) rename {src => backend/src}/Model/Types/SystemMessage.hs (100%) rename {src => backend/src}/Model/Types/TH/Binary.hs (100%) rename {src => backend/src}/Model/Types/TH/JSON.hs (100%) rename {src => backend/src}/Model/Types/TH/PathPiece.hs (100%) rename {src => backend/src}/Model/Types/TH/Wordlist.hs (100%) rename {src => backend/src}/Model/Types/Upload.hs (100%) rename {src => backend/src}/Model/Types/User.hs (100%) rename {src => backend/src}/Network/HTTP/Types/Method/Instances.hs (100%) rename {src => backend/src}/Network/IP/Addr/Instances.hs (100%) rename {src => backend/src}/Network/Mail/Mime/Instances.hs (100%) rename {src => backend/src}/Network/Mime/TH.hs (100%) rename {src => backend/src}/Network/Minio/Instances.hs (100%) rename {src => backend/src}/Network/URI/Instances.hs (100%) rename {src => backend/src}/Numeric/Natural/Instances.hs (100%) rename {src => backend/src}/Prometheus/Instances.hs (100%) rename {src => backend/src}/Servant/Client/Core/BaseUrl/Instances.hs (100%) rename {src => backend/src}/Servant/Docs/Internal/Pretty/Instances.hs (100%) rename {src => backend/src}/Servant/Server/Instances.hs (100%) rename {src => backend/src}/ServantApi.hs (100%) rename {src => backend/src}/ServantApi/ExternalApis.hs (100%) rename {src => backend/src}/ServantApi/ExternalApis/Type.hs (100%) rename {src => backend/src}/Settings.hs (100%) rename {src => backend/src}/Settings/Cluster.hs (100%) rename {src => backend/src}/Settings/Cluster/Volatile.hs (100%) rename {src => backend/src}/Settings/Cookies.hs (100%) rename {src => backend/src}/Settings/Locale.hs (100%) rename {src => backend/src}/Settings/Log.hs (100%) rename {src => backend/src}/Settings/Mime.hs (100%) rename {src => backend/src}/Settings/StaticFiles.hs (100%) rename {src => backend/src}/Settings/WellKnownFiles.hs (100%) rename {src => backend/src}/Settings/WellKnownFiles/TH.hs (100%) rename {src => backend/src}/System/Clock/Instances.hs (100%) rename {src => backend/src}/System/FilePath/Glob/TH.hs (100%) rename {src => backend/src}/System/FilePath/Instances.hs (100%) rename {src => backend/src}/Text/Blaze/Instances.hs (100%) rename {src => backend/src}/Text/Shakespeare/Text/Instances.hs (100%) rename {src => backend/src}/UnliftIO/Async/Utils.hs (100%) rename {src => backend/src}/Utils.hs (100%) rename {src => backend/src}/Utils/ARC.hs (100%) rename {src => backend/src}/Utils/Approot.hs (100%) rename {src => backend/src}/Utils/Auth.hs (100%) rename {src => backend/src}/Utils/Avs.hs (100%) rename {src => backend/src}/Utils/Cookies.hs (100%) rename {src => backend/src}/Utils/Cookies/Registered.hs (100%) rename {src => backend/src}/Utils/Course.hs (100%) rename {src => backend/src}/Utils/Csv.hs (100%) rename {src => backend/src}/Utils/Csv/Mail.hs (100%) rename {src => backend/src}/Utils/DB.hs (100%) rename {src => backend/src}/Utils/DateTime.hs (100%) rename {src => backend/src}/Utils/Exam/Correct.hs (100%) rename {src => backend/src}/Utils/Failover.hs (100%) rename {src => backend/src}/Utils/Files.hs (100%) rename {src => backend/src}/Utils/Form.hs (100%) rename {src => backend/src}/Utils/Frontend/I18n.hs (100%) rename {src => backend/src}/Utils/Frontend/Modal.hs (100%) rename {src => backend/src}/Utils/Frontend/Notification.hs (100%) rename {src => backend/src}/Utils/Holidays.hs (100%) rename {src => backend/src}/Utils/HttpConditional.hs (100%) rename {src => backend/src}/Utils/I18n.hs (100%) rename {src => backend/src}/Utils/Icon.hs (100%) rename {src => backend/src}/Utils/LRU.hs (100%) rename {src => backend/src}/Utils/Lang.hs (100%) rename {src => backend/src}/Utils/Lens.hs (100%) rename {src => backend/src}/Utils/Lens/TH.hs (100%) rename {src => backend/src}/Utils/Memo.hs (100%) rename {src => backend/src}/Utils/Message.hs (100%) rename {src => backend/src}/Utils/Metrics.hs (100%) rename {src => backend/src}/Utils/NTop.hs (100%) rename {src => backend/src}/Utils/Occurrences.hs (100%) rename {src => backend/src}/Utils/Parameters.hs (100%) rename {src => backend/src}/Utils/PathPiece.hs (100%) rename {src => backend/src}/Utils/Persist.hs (100%) rename {src => backend/src}/Utils/PersistentTokenBucket.hs (100%) rename {src => backend/src}/Utils/Pool.hs (100%) rename {src => backend/src}/Utils/Postgresql.hs (100%) rename {src => backend/src}/Utils/Print.hs (100%) rename {src => backend/src}/Utils/Print/CourseCertificate.hs (100%) rename {src => backend/src}/Utils/Print/ExpireQualification.hs (100%) rename {src => backend/src}/Utils/Print/Instances.hs (100%) rename {src => backend/src}/Utils/Print/Letters.hs (100%) rename {src => backend/src}/Utils/Print/RenewQualification.hs (100%) rename {src => backend/src}/Utils/Print/SomeLetter.hs (100%) rename {src => backend/src}/Utils/Room.hs (100%) rename {src => backend/src}/Utils/Route.hs (100%) rename {src => backend/src}/Utils/Session.hs (100%) rename {src => backend/src}/Utils/Set.hs (100%) rename {src => backend/src}/Utils/Sheet.hs (100%) rename {src => backend/src}/Utils/Sql.hs (100%) rename {src => backend/src}/Utils/SystemMessage.hs (100%) rename {src => backend/src}/Utils/TH.hs (100%) rename {src => backend/src}/Utils/TH/AlphaConversion.hs (100%) rename {src => backend/src}/Utils/TH/Routes.hs (100%) rename {src => backend/src}/Utils/Term.hs (100%) rename {src => backend/src}/Utils/Tokens.hs (100%) rename {src => backend/src}/Utils/Users.hs (100%) rename {src => backend/src}/Utils/VolatileClusterSettings.hs (100%) rename {src => backend/src}/Utils/Widgets.hs (100%) rename {src => backend/src}/Web/Cookie/Instances.hs (100%) rename {src => backend/src}/Web/PathPieces/Instances.hs (100%) rename {src => backend/src}/Web/ServerSession/Backend/Persistent/Memcached.hs (100%) rename {src => backend/src}/Web/ServerSession/Frontend/Yesod/Jwt.hs (100%) rename {src => backend/src}/Yesod/Core/Instances.hs (100%) rename {src => backend/src}/Yesod/Core/Types/Instances.hs (100%) rename {src => backend/src}/Yesod/Core/Types/Instances/Catch.hs (100%) rename {src => backend/src}/Yesod/Form/Fields/Instances.hs (100%) rename {src => backend/src}/Yesod/Form/Types/Instances.hs (100%) rename {src => backend/src}/Yesod/Servant.hs (100%) rename {src => backend/src}/Yesod/Servant/HttpApiDataInjective.hs (100%) rename {src => backend/src}/index.md (100%) rename {src => backend/src}/index.md.license (100%) rename stack-flake.yaml => backend/stack-flake.yaml (100%) rename stack.nix => backend/stack.nix (100%) rename stack.yaml => backend/stack.yaml (100%) rename stack.yaml.lock => backend/stack.yaml.lock (100%) rename stack.yaml.lock.license => backend/stack.yaml.lock.license (100%) rename stackage.nix => backend/stackage.nix (100%) rename {templates => backend/templates}/admin-problems.hamlet (100%) rename {templates => backend/templates}/admin-tokens.hamlet (100%) rename {templates => backend/templates}/adminFeatures.hamlet (100%) rename {templates => backend/templates}/adminUser.hamlet (100%) rename {templates => backend/templates}/approot.julius (100%) rename {templates => backend/templates}/authpreds.hamlet (100%) rename {templates => backend/templates}/avs.hamlet (100%) rename {templates => backend/templates}/changelog.hamlet (100%) rename {templates => backend/templates}/correction-user.hamlet (100%) rename {templates => backend/templates}/correction.hamlet (100%) rename {templates => backend/templates}/corrections-assign.hamlet (100%) rename {templates => backend/templates}/corrections-create.hamlet (100%) rename {templates => backend/templates}/corrections-grade.hamlet (100%) rename {templates => backend/templates}/corrections-overview.hamlet (100%) rename {templates => backend/templates}/corrections-upload.hamlet (100%) rename {templates => backend/templates}/corrections.hamlet (100%) rename {templates => backend/templates}/course-news.hamlet (100%) rename {templates => backend/templates}/course-participants.hamlet (100%) rename {templates => backend/templates}/course.hamlet (100%) rename {templates => backend/templates}/course/add-user/confirmation-wrapper.hamlet (100%) rename {templates => backend/templates}/course/add-user/confirmation.hamlet (100%) rename {templates => backend/templates}/course/add-user/confirmation.julius (100%) rename {templates => backend/templates}/course/lecturerMassInput/add.hamlet (100%) rename {templates => backend/templates}/course/lecturerMassInput/cellInvitation.hamlet (100%) rename {templates => backend/templates}/course/lecturerMassInput/cellKnown.hamlet (100%) rename {templates => backend/templates}/course/lecturerMassInput/layout.hamlet (100%) rename {templates => backend/templates}/course/login-to-register.hamlet (100%) rename {templates => backend/templates}/course/user/corrections.hamlet (100%) rename {templates => backend/templates}/course/user/exams.hamlet (100%) rename {templates => backend/templates}/course/user/note.hamlet (100%) rename {templates => backend/templates}/course/user/profile.hamlet (100%) rename {templates => backend/templates}/course/user/tutorials.hamlet (100%) rename {templates => backend/templates}/courses.hamlet (100%) rename {templates => backend/templates}/csv-import-confirmation-wrapper.hamlet (100%) rename {templates => backend/templates}/csv-import-confirmation.hamlet (100%) rename {templates => backend/templates}/csv-import-confirmation.julius (100%) rename {templates => backend/templates}/current-route.julius (100%) rename {templates => backend/templates}/default-layout-wrapper.hamlet (100%) rename {templates => backend/templates}/default-layout.hamlet (100%) rename {templates => backend/templates}/deletedUser.hamlet (100%) rename {templates => backend/templates}/exam-correct.hamlet (100%) rename {templates => backend/templates}/exam-edit.hamlet (100%) rename {templates => backend/templates}/exam-list.hamlet (100%) rename {templates => backend/templates}/exam-new.hamlet (100%) rename {templates => backend/templates}/exam-office/exam-result-synced.hamlet (100%) rename {templates => backend/templates}/exam-office/exam-results.hamlet (100%) rename {templates => backend/templates}/exam-office/externalExamGrades.hamlet (100%) rename {templates => backend/templates}/exam-show.hamlet (100%) rename {templates => backend/templates}/exam-users.hamlet (100%) rename {templates => backend/templates}/exam/auto-occurrence-confirm.hamlet (100%) rename {templates => backend/templates}/exam/schoolMassInput/add.hamlet (100%) rename {templates => backend/templates}/exam/schoolMassInput/cell.hamlet (100%) rename {templates => backend/templates}/exam/schoolMassInput/layout.hamlet (100%) rename {templates => backend/templates}/external-exam-show.hamlet (100%) rename {templates => backend/templates}/external-exam/schoolMassInput/add.hamlet (100%) rename {templates => backend/templates}/external-exam/schoolMassInput/cell.hamlet (100%) rename {templates => backend/templates}/external-exam/schoolMassInput/layout.hamlet (100%) rename {templates => backend/templates}/external-exam/staffMassInput/add.hamlet (100%) rename {templates => backend/templates}/external-exam/staffMassInput/cellInvitation.hamlet (100%) rename {templates => backend/templates}/external-exam/staffMassInput/cellKnown.hamlet (100%) rename {templates => backend/templates}/external-exam/staffMassInput/layout.hamlet (100%) rename {templates => backend/templates}/faq.hamlet (100%) rename {templates => backend/templates}/firm-contact-info.hamlet (100%) rename {templates => backend/templates}/firm-users.hamlet (100%) rename {templates => backend/templates}/glossary.hamlet (100%) rename {templates => backend/templates}/help.hamlet (100%) rename {templates => backend/templates}/i18n.julius (100%) rename {templates => backend/templates}/i18n/README_i18n.txt (100%) rename {templates => backend/templates}/i18n/README_i18n.txt.license (100%) rename {templates => backend/templates}/i18n/admin-test/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/admin-test/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/applications-list-info/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/applications-list-info/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/authorship-statement-submission-explanation/exists.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/authorship-statement-submission-explanation/exists.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/authorship-statement-submission-explanation/missing.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/authorship-statement-submission-explanation/missing.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/authorship-statement-submission-explanation/old-statement.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/authorship-statement-submission-explanation/old-statement.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/avs-synchronisation/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/avs-synchronisation/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/changelog/fradrive-initial-release.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/changelog/fradrive-initial-release.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/changelog/supervisors-may-revoke-licences.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/changelog/supervisors-may-revoke-licences.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/comm-test-tip/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/comm-test-tip/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/copyright/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/copyright/en.hamlet (100%) rename {templates => backend/templates}/i18n/corrections-upload-instructions/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/corrections-upload-instructions/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/course-exam-office-explanation/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/course-exam-office-explanation/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/data-delete/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/data-delete/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/data-protection/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/data-protection/en.hamlet (100%) rename {templates => backend/templates}/i18n/exam-auto-occurrence-calculate/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/exam-auto-occurrence-calculate/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/exam-correct-explanation/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/exam-correct-explanation/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/exam-mode/aids/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/exam-mode/aids/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/exam-mode/online/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/exam-mode/online/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/exam-mode/requiredEquipment/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/exam-mode/requiredEquipment/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/exam-mode/synchronicity/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/exam-mode/synchronicity/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/exam-office/exam-grades-explanation/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/exam-office/exam-grades-explanation/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/exam-users/computed-values-tip/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/exam-users/computed-values-tip/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/external-exam-correct-explanation/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/external-exam-correct-explanation/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/faq/campus-cant-login.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/faq/campus-cant-login.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/faq/forgotten-password.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/faq/forgotten-password.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/faq/login-expired.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/faq/login-expired.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/faq/no-campus-account.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/faq/no-campus-account.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/faq/not-lecturer-how-to-create-courses.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/faq/not-lecturer-how-to-create-courses.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/featureList/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/featureList/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/firm-all/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/firm-all/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/firm-supervisors/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/firm-supervisors/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/administrator.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/administrator.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/clone.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/clone.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/comm-course.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/comm-course.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/corrector.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/corrector.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/course-exams.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/course-exams.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/course-lecturers.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/course-lecturers.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/course-material.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/course-material.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/course-participant.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/course-participant.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/csv-format.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/csv-format.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/deficit.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/deficit.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/definition-course-events.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/definition-course-events.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/definition-course-news.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/definition-course-news.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/exercise-sheet.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/exercise-sheet.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/invitations.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/invitations.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/navigation-favourites.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/navigation-favourites.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/school-evaluation.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/school-evaluation.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/school-exam-office.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/school-exam-office.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/school-lecturer.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/school-lecturer.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/sheet-group.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/sheet-group.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/sheet-pseudonym.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/sheet-pseudonym.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/table-exam-result.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/table-exam-result.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/table-school.de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/glossary/table-school.en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/help-instructions/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/help-instructions/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/implementation/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/implementation/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/imprint/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/imprint/en.hamlet (100%) rename {templates => backend/templates}/i18n/info-lecturer/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/info-lecturer/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/knownBugs/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/knownBugs/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/lms-all/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/lms-all/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/markdown-explanation/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/markdown-explanation/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/news/activeAllocations-info/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/news/activeAllocations-info/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/pitch/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/pitch/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/profile-remarks/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/profile-remarks/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/profile/displayNameRules/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/profile/displayNameRules/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/profile/tokenExplanation/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/profile/tokenExplanation/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/qualification/renewal/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/qualification/renewal/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/set-display-email/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/set-display-email/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/sheet-authorship-statement-mode-tip/disabled/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/sheet-authorship-statement-mode-tip/disabled/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/sheet-authorship-statement-mode-tip/enabled/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/sheet-authorship-statement-mode-tip/enabled/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/sheet-authorship-statement-mode-tip/exam/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/sheet-authorship-statement-mode-tip/exam/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/sheet-edit/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/sheet-edit/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/sheet-grouping-explanation/arbitrary/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/sheet-grouping-explanation/arbitrary/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/sheet-grouping-explanation/registered/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/sheet-grouping-explanation/registered/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/submission-done-tip/always/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/submission-done-tip/always/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/submission-done-tip/by-file/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/submission-done-tip/by-file/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/submission-done-tip/never/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/submission-done-tip/never/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/submission-mode-explanation/corrector/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/submission-mode-explanation/corrector/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/submission-mode-explanation/user/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/submission-mode-explanation/user/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/table/csv-import-explanation/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/table/csv-import-explanation/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/terms-of-use/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/terms-of-use/en.hamlet (100%) rename {templates => backend/templates}/i18n/test/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/test/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/unauth-news/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/unauth-news/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/workflow-archivation-scheduled/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/workflow-archivation-scheduled/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/workflow-instance-list-explanation/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/workflow-instance-list-explanation/en-eu.hamlet (100%) rename {templates => backend/templates}/i18n/workflows-disabled/de-de-formal.hamlet (100%) rename {templates => backend/templates}/i18n/workflows-disabled/en-eu.hamlet (100%) rename {templates => backend/templates}/ldap.hamlet (100%) rename {templates => backend/templates}/legal.hamlet (100%) rename {templates => backend/templates}/letter/din5008.latex (100%) rename {templates => backend/templates}/letter/din5008.latex.license (100%) rename {templates => backend/templates}/letter/din5008with_pin.latex (100%) rename {templates => backend/templates}/letter/din5008with_pin.latex.license (100%) rename {templates => backend/templates}/letter/fraport_f_expiry.md (100%) rename {templates => backend/templates}/letter/fraport_f_expiry.md.license (100%) rename {templates => backend/templates}/letter/fraport_generic_expiry.md (100%) rename {templates => backend/templates}/letter/fraport_generic_expiry.md.license (100%) rename {templates => backend/templates}/letter/fraport_qualification.md (100%) rename {templates => backend/templates}/letter/fraport_qualification.md.license (100%) rename {templates => backend/templates}/letter/fraport_renewal.md (100%) rename {templates => backend/templates}/letter/fraport_renewal.md.license (100%) rename {templates => backend/templates}/letter/generic_template.html (100%) rename {templates => backend/templates}/letter/generic_template.html.license (100%) rename {templates => backend/templates}/letter/generic_template.latex (100%) rename {templates => backend/templates}/letter/generic_template.latex.license (100%) rename {templates => backend/templates}/letter/plain_article.latex (100%) rename {templates => backend/templates}/letter/plain_article.latex.license (100%) rename {templates => backend/templates}/lms-report.hamlet (100%) rename {templates => backend/templates}/lms-result.hamlet (100%) rename {templates => backend/templates}/lms-user.hamlet (100%) rename {templates => backend/templates}/lms.hamlet (100%) rename {templates => backend/templates}/login.hamlet (100%) rename {templates => backend/templates}/mail/body/qualificationRenewal.hamlet (100%) rename {templates => backend/templates}/mail/changeUserDisplayEmail.hamlet (100%) rename {templates => backend/templates}/mail/correctionsAssigned.hamlet (100%) rename {templates => backend/templates}/mail/correctionsUndistributed.hamlet (100%) rename {templates => backend/templates}/mail/correctorInvitation.hamlet (100%) rename {templates => backend/templates}/mail/courseCommunication.hamlet (100%) rename {templates => backend/templates}/mail/courseRegistered.hamlet (100%) rename {templates => backend/templates}/mail/editNotifications.hamlet (100%) rename {templates => backend/templates}/mail/examDeregistrationSoonInactive.hamlet (100%) rename {templates => backend/templates}/mail/examOffice/examResults.hamlet (100%) rename {templates => backend/templates}/mail/examOffice/examResultsChanged.hamlet (100%) rename {templates => backend/templates}/mail/examOffice/externalExamResults.hamlet (100%) rename {templates => backend/templates}/mail/examRegistrationActive.hamlet (100%) rename {templates => backend/templates}/mail/examRegistrationSoonInactive.hamlet (100%) rename {templates => backend/templates}/mail/examResult.hamlet (100%) rename {templates => backend/templates}/mail/genericMailLetter.hamlet (100%) rename {templates => backend/templates}/mail/invitation.hamlet (100%) rename {templates => backend/templates}/mail/lecturerInvitation.hamlet (100%) rename {templates => backend/templates}/mail/passwordReset.hamlet (100%) rename {templates => backend/templates}/mail/qualificationExpiry.hamlet (100%) rename {templates => backend/templates}/mail/sheetActive.hamlet (100%) rename {templates => backend/templates}/mail/sheetHint.hamlet (100%) rename {templates => backend/templates}/mail/sheetInactive.hamlet (100%) rename {templates => backend/templates}/mail/sheetSolution.hamlet (100%) rename {templates => backend/templates}/mail/sheetSoonInactive.hamlet (100%) rename {templates => backend/templates}/mail/submissionEdited.hamlet (100%) rename {templates => backend/templates}/mail/submissionRated.hamlet (100%) rename {templates => backend/templates}/mail/submissionRated.txt (100%) rename {templates => backend/templates}/mail/submissionRated.txt.license (100%) rename {templates => backend/templates}/mail/submissionUserCreated.hamlet (100%) rename {templates => backend/templates}/mail/submissionUserDeleted.hamlet (100%) rename {templates => backend/templates}/mail/support.hamlet (100%) rename {templates => backend/templates}/mail/userAuthModeUpdate.hamlet (100%) rename {templates => backend/templates}/mail/userRightsUpdate.hamlet (100%) rename {templates => backend/templates}/mail/userSystemFunctionsUpdate.hamlet (100%) rename {templates => backend/templates}/material-list.hamlet (100%) rename {templates => backend/templates}/material-show.hamlet (100%) rename {templates => backend/templates}/messages/correctionsUploaded.hamlet (100%) rename {templates => backend/templates}/messages/courseInvitationAlreadyRegistered.hamlet (100%) rename {templates => backend/templates}/messages/courseInvitationAlreadyTutorialMember.hamlet (100%) rename {templates => backend/templates}/messages/courseInvitationNotFoundInAvs.hamlet (100%) rename {templates => backend/templates}/messages/courseInvitationRegisteredWithoutField.hamlet (100%) rename {templates => backend/templates}/messages/examRegistrationInvitationNotRegisteredWithoutCourse.hamlet (100%) rename {templates => backend/templates}/messages/examRegistrationInvitationRegisteredWithoutField.hamlet (100%) rename {templates => backend/templates}/messages/ignoredInvalidPseudonym.hamlet (100%) rename {templates => backend/templates}/messages/personalisedSheetFilesIgnored.hamlet (100%) rename {templates => backend/templates}/messages/submissionCreateDuplicates.hamlet (100%) rename {templates => backend/templates}/messages/submissionCreateExisting.hamlet (100%) rename {templates => backend/templates}/messages/submissionFilesIgnored.hamlet (100%) rename {templates => backend/templates}/messages/submissionsAlreadyAssigned.hamlet (100%) rename {templates => backend/templates}/messages/submissionsAssignNotFound.hamlet (100%) rename {templates => backend/templates}/messages/submissionsAssignUnauthorized.hamlet (100%) rename {templates => backend/templates}/messages/submissionsNotAssignedAuto.hamlet (100%) rename {templates => backend/templates}/messages/systemMessagesDeleted.hamlet (100%) rename {templates => backend/templates}/messages/systemMessagesSetFrom.hamlet (100%) rename {templates => backend/templates}/messages/systemMessagesSetTo.hamlet (100%) rename {templates => backend/templates}/metrics.hamlet (100%) rename {templates => backend/templates}/news/activeAllocations.hamlet (100%) rename {templates => backend/templates}/news/openAllocations.hamlet (100%) rename {templates => backend/templates}/news/system-messages.hamlet (100%) rename {templates => backend/templates}/news/upcomingExams.hamlet (100%) rename {templates => backend/templates}/news/upcomingSheets.hamlet (100%) rename {templates => backend/templates}/participants-intersect.hamlet (100%) rename {templates => backend/templates}/participants-list.hamlet (100%) rename {templates => backend/templates}/print-center.hamlet (100%) rename {templates => backend/templates}/print-send.hamlet (100%) rename {templates => backend/templates}/profile/exam-office-labels/add.hamlet (100%) rename {templates => backend/templates}/profile/exam-office-labels/cell.hamlet (100%) rename {templates => backend/templates}/profile/exam-office-labels/layout.hamlet (100%) rename {templates => backend/templates}/profile/profile.hamlet (100%) rename {templates => backend/templates}/profile/profile.julius (100%) rename {templates => backend/templates}/profileData.hamlet (100%) rename {templates => backend/templates}/qualification-all.hamlet (100%) rename {templates => backend/templates}/qualification.hamlet (100%) rename {templates => backend/templates}/sheetCorrectors/add.hamlet (100%) rename {templates => backend/templates}/sheetCorrectors/cell.hamlet (100%) rename {templates => backend/templates}/sheetCorrectors/layout.hamlet (100%) rename {templates => backend/templates}/sheetList.hamlet (100%) rename {templates => backend/templates}/sheetShow.hamlet (100%) rename {templates => backend/templates}/submission-assign.hamlet (100%) rename {templates => backend/templates}/submission-correction-invisible.hamlet (100%) rename {templates => backend/templates}/submission.hamlet (100%) rename {templates => backend/templates}/system-message-list.hamlet (100%) rename {templates => backend/templates}/system-message.hamlet (100%) rename {templates => backend/templates}/table/cell/body.hamlet (100%) rename {templates => backend/templates}/table/cell/header.hamlet (100%) rename {templates => backend/templates}/table/cell/link.hamlet (100%) rename {templates => backend/templates}/table/cell/list.hamlet (100%) rename {templates => backend/templates}/table/cell/user-study-feature.hamlet (100%) rename {templates => backend/templates}/table/colonnade.hamlet (100%) rename {templates => backend/templates}/table/course/colonnade.hamlet (100%) rename {templates => backend/templates}/table/course/course-teaser.hamlet (100%) rename {templates => backend/templates}/table/course/header.hamlet (100%) rename {templates => backend/templates}/table/csv-column-explanations.hamlet (100%) rename {templates => backend/templates}/table/csv-example.hamlet (100%) rename {templates => backend/templates}/table/csv-reimport.hamlet (100%) rename {templates => backend/templates}/table/csv-transcode.hamlet (100%) rename {templates => backend/templates}/table/header.hamlet (100%) rename {templates => backend/templates}/table/layout-filter-default.hamlet (100%) rename {templates => backend/templates}/table/layout-standalone.hamlet (100%) rename {templates => backend/templates}/table/layout-wrapper.hamlet (100%) rename {templates => backend/templates}/table/layout.hamlet (100%) rename {templates => backend/templates}/table/sortable-header.hamlet (100%) rename {templates => backend/templates}/term/active-mass-input/add.hamlet (100%) rename {templates => backend/templates}/term/active-mass-input/cell.hamlet (100%) rename {templates => backend/templates}/term/active-mass-input/layout.hamlet (100%) rename {templates => backend/templates}/term/holiday-mass-input/add.hamlet (100%) rename {templates => backend/templates}/term/holiday-mass-input/cell.hamlet (100%) rename {templates => backend/templates}/term/holiday-mass-input/layout.hamlet (100%) rename {templates => backend/templates}/terms.hamlet (100%) rename {templates => backend/templates}/tutorial-edit.hamlet (100%) rename {templates => backend/templates}/tutorial-list.hamlet (100%) rename {templates => backend/templates}/tutorial-new.hamlet (100%) rename {templates => backend/templates}/tutorial-participants.hamlet (100%) rename {templates => backend/templates}/tutorial/tutorMassInput/add.hamlet (100%) rename {templates => backend/templates}/tutorial/tutorMassInput/cellInvitation.hamlet (100%) rename {templates => backend/templates}/tutorial/tutorMassInput/cellKnown.hamlet (100%) rename {templates => backend/templates}/tutorial/tutorMassInput/layout.hamlet (100%) rename {templates => backend/templates}/users.hamlet (100%) rename {templates => backend/templates}/versionHistory.hamlet (100%) rename {templates => backend/templates}/widgets/aform/aform.hamlet (100%) rename {templates => backend/templates}/widgets/alerts/alerts.hamlet (100%) rename {templates => backend/templates}/widgets/authorship-statement-accept.hamlet (100%) rename {templates => backend/templates}/widgets/authorship-statement-submission-explanation.hamlet (100%) rename {templates => backend/templates}/widgets/bonusRule.hamlet (100%) rename {templates => backend/templates}/widgets/breadcrumbs/breadcrumbs.hamlet (100%) rename {templates => backend/templates}/widgets/campus-login/campus-login-form.hamlet (100%) rename {templates => backend/templates}/widgets/campus-login/campus-login.hamlet (100%) rename {templates => backend/templates}/widgets/communication/recipientAdd.hamlet (100%) rename {templates => backend/templates}/widgets/communication/recipientEmail.hamlet (100%) rename {templates => backend/templates}/widgets/communication/recipientLayout.hamlet (100%) rename {templates => backend/templates}/widgets/communication/recipientName.hamlet (100%) rename {templates => backend/templates}/widgets/csvRendered.hamlet (100%) rename {templates => backend/templates}/widgets/date-time/yet-invisible.hamlet (100%) rename {templates => backend/templates}/widgets/delete-confirmation/delete-confirmation.hamlet (100%) rename {templates => backend/templates}/widgets/dummy-login-form/dummy-login-form.hamlet (100%) rename {templates => backend/templates}/widgets/email.hamlet (100%) rename {templates => backend/templates}/widgets/exam-close-on-finished.hamlet (100%) rename {templates => backend/templates}/widgets/exam-close.hamlet (100%) rename {templates => backend/templates}/widgets/exam-finish.hamlet (100%) rename {templates => backend/templates}/widgets/exam-occurrence-mapping-description.hamlet (100%) rename {templates => backend/templates}/widgets/exam-occurrence-mapping.hamlet (100%) rename {templates => backend/templates}/widgets/exam-office-label.hamlet (100%) rename {templates => backend/templates}/widgets/explained-selection-field.hamlet (100%) rename {templates => backend/templates}/widgets/field-view/field-view.hamlet (100%) rename {templates => backend/templates}/widgets/fields/examOfficeFieldMode.hamlet (100%) rename {templates => backend/templates}/widgets/fields/funcField.hamlet (100%) rename {templates => backend/templates}/widgets/fields/labeled-checkbox.hamlet (100%) rename {templates => backend/templates}/widgets/footer/footer.hamlet (100%) rename {templates => backend/templates}/widgets/footer/link.hamlet (100%) rename {templates => backend/templates}/widgets/form/form.hamlet (100%) rename {templates => backend/templates}/widgets/genericFileField.hamlet (100%) rename {templates => backend/templates}/widgets/grading-summary/grading-summary-row.hamlet (100%) rename {templates => backend/templates}/widgets/grading-summary/grading-summary.hamlet (100%) rename {templates => backend/templates}/widgets/gradingKey.hamlet (100%) rename {templates => backend/templates}/widgets/hash-login-form/hash-login-form.hamlet (100%) rename {templates => backend/templates}/widgets/html-field.hamlet (100%) rename {templates => backend/templates}/widgets/i18n-form/add.hamlet (100%) rename {templates => backend/templates}/widgets/i18n-form/cell.hamlet (100%) rename {templates => backend/templates}/widgets/i18n-form/layout.hamlet (100%) rename {templates => backend/templates}/widgets/invitation-site.hamlet (100%) rename {templates => backend/templates}/widgets/link-email.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/cell.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/courses/add.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/courses/cell.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/courses/layout.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/examCorrectors/add.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/examCorrectors/cellInvitation.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/examCorrectors/cellKnown.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/examCorrectors/layout.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/examOfficeUsers/add.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/examOfficeUsers/cellInvitation.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/examOfficeUsers/cellKnown.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/examOfficeUsers/layout.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/examParts/add.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/examParts/form.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/examParts/layout.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/examRooms/add.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/examRooms/form.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/examRooms/layout.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/list/cell.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/list/layout.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/massinput-standalone-wrapper.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/massinput-standalone.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/massinput.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/row.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/submissionUsers/add.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/submissionUsers/cellInvitation.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/submissionUsers/cellKnown.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/submissionUsers/layout.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/systemMessage/volatileClusterSettings/add.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/systemMessage/volatileClusterSettings/form.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/systemMessage/volatileClusterSettings/layout.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/token-restrictions/add.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/token-restrictions/cell.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/token-restrictions/layout.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/uploadSpecificFiles/add.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/uploadSpecificFiles/form.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/uploadSpecificFiles/layout.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/workflow-payload-field-multiple/add.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/workflow-payload-field-multiple/cell.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/workflow-payload-field-multiple/layout.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/workflowDefinitionFiles/add.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/workflowDefinitionFiles/form.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/workflowDefinitionFiles/layout.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/workflowDescriptions/add.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/workflowDescriptions/form.hamlet (100%) rename {templates => backend/templates}/widgets/massinput/workflowDescriptions/layout.hamlet (100%) rename {templates => backend/templates}/widgets/modal/modal.hamlet (100%) rename {templates => backend/templates}/widgets/modal/trigger.hamlet (100%) rename {templates => backend/templates}/widgets/multi-action/multi-action.hamlet (100%) rename {templates => backend/templates}/widgets/multi-action/optional-action.hamlet (100%) rename {templates => backend/templates}/widgets/multiFileField.hamlet (100%) rename {templates => backend/templates}/widgets/navbar/container-radio.cassius (100%) rename {templates => backend/templates}/widgets/navbar/container-radio.cassius.license (100%) rename {templates => backend/templates}/widgets/navbar/container.hamlet (100%) rename {templates => backend/templates}/widgets/navbar/item.hamlet (100%) rename {templates => backend/templates}/widgets/navbar/navbar-container-item--button.hamlet (100%) rename {templates => backend/templates}/widgets/navbar/navbar-container-item--link.hamlet (100%) rename {templates => backend/templates}/widgets/navbar/navbar.hamlet (100%) rename {templates => backend/templates}/widgets/notification.hamlet (100%) rename {templates => backend/templates}/widgets/occurrence/cell.hamlet (100%) rename {templates => backend/templates}/widgets/occurrence/cell/except-no-occur.hamlet (100%) rename {templates => backend/templates}/widgets/occurrence/cell/except-no-occurr.hamlet (100%) rename {templates => backend/templates}/widgets/occurrence/cell/except-occur.hamlet (100%) rename {templates => backend/templates}/widgets/occurrence/cell/except-occurr.hamlet (100%) rename {templates => backend/templates}/widgets/occurrence/cell/weekly.hamlet (100%) rename {templates => backend/templates}/widgets/occurrence/form/except-add.hamlet (100%) rename {templates => backend/templates}/widgets/occurrence/form/except-layout.hamlet (100%) rename {templates => backend/templates}/widgets/occurrence/form/except-no-occur.hamlet (100%) rename {templates => backend/templates}/widgets/occurrence/form/except-occur.hamlet (100%) rename {templates => backend/templates}/widgets/occurrence/form/scheduled-add.hamlet (100%) rename {templates => backend/templates}/widgets/occurrence/form/scheduled-layout.hamlet (100%) rename {templates => backend/templates}/widgets/occurrence/form/weekly.hamlet (100%) rename {templates => backend/templates}/widgets/pageaction/pageaction.hamlet (100%) rename {templates => backend/templates}/widgets/pageaction/primary-wrapper.hamlet (100%) rename {templates => backend/templates}/widgets/pageaction/primary.hamlet (100%) rename {templates => backend/templates}/widgets/pageaction/secondary.hamlet (100%) rename {templates => backend/templates}/widgets/permutation/permutation.hamlet (100%) rename {templates => backend/templates}/widgets/rating/rating.hamlet (100%) rename {templates => backend/templates}/widgets/register-form/register-form.hamlet (100%) rename {templates => backend/templates}/widgets/room-reference/link-instructions-modal.hamlet (100%) rename {templates => backend/templates}/widgets/room-reference/link.hamlet (100%) rename {templates => backend/templates}/widgets/sheetType.hamlet (100%) rename {templates => backend/templates}/widgets/specificFileField.hamlet (100%) rename {templates => backend/templates}/widgets/tooltip.hamlet (100%) rename {templates => backend/templates}/widgets/tooltip_no-handle.hamlet (100%) rename {templates => backend/templates}/widgets/user-rights-form/user-rights-form.hamlet (100%) rename {templates => backend/templates}/widgets/zipFileField.hamlet (100%) rename {templates => backend/templates}/workflows/instance-initiate.hamlet (100%) rename {templates => backend/templates}/workflows/instances.hamlet (100%) rename {templates => backend/templates}/workflows/top-instances.hamlet (100%) rename {templates => backend/templates}/workflows/workflow-list.hamlet (100%) rename {templates => backend/templates}/workflows/workflow.hamlet (100%) rename {templates => backend/templates}/workflows/workflow/history-item.hamlet (100%) rename {test => backend/test}/Auth/LDAP/ADSpec.hs (100%) rename {test => backend/test}/CronSpec.hs (100%) rename {test => backend/test}/Crypto/Hash/TestInstances.hs (100%) rename {test => backend/test}/Data/NonNull/TestInstances.hs (100%) rename {test => backend/test}/Data/Scientific/InstancesSpec.hs (100%) rename {test => backend/test}/Database.hs (100%) rename {test => backend/test}/Database/Fill.hs (100%) rename {test => backend/test}/Database/Persist/Sql/Types/TestInstances.hs (100%) rename {test => backend/test}/Foundation/ServantSpec.hs (100%) rename {test => backend/test}/FoundationSpec.hs (100%) rename {test => backend/test}/Handler/CommonSpec.hs (100%) rename {test => backend/test}/Handler/CorrectionsSpec.hs (100%) rename {test => backend/test}/Handler/Exam/FormSpec.hs (100%) rename {test => backend/test}/Handler/HomeSpec.hs (100%) rename {test => backend/test}/Handler/ProfileSpec.hs (100%) rename {test => backend/test}/Handler/SAPSpec.hs (100%) rename {test => backend/test}/Handler/Sheet/PersonalisedFilesSpec.hs (100%) rename {test => backend/test}/Handler/Utils/ExamSpec.hs (100%) rename {test => backend/test}/Handler/Utils/FilesSpec.hs (100%) rename {test => backend/test}/Handler/Utils/RatingSpec.hs (100%) rename {test => backend/test}/Handler/Utils/SubmissionSpec.hs (100%) rename {test => backend/test}/Handler/Utils/Table/Pagination/TypesSpec.hs (100%) rename {test => backend/test}/Handler/Utils/Table/PaginationSpec.hs (100%) rename {test => backend/test}/Handler/Utils/ZipSpec.hs (100%) rename {test => backend/test}/Jose/Jwk/TestInstances.hs (100%) rename {test => backend/test}/MailSpec.hs (100%) rename {test => backend/test}/Main.hs (100%) rename {test => backend/test}/Model/MigrationSpec.hs (100%) rename {test => backend/test}/Model/RatingSpec.hs (100%) rename {test => backend/test}/Model/Tokens/UploadSpec.hs (100%) rename {test => backend/test}/Model/Types/FileSpec.hs (100%) rename {test => backend/test}/Model/Types/LanguagesSpec.hs (100%) rename {test => backend/test}/Model/TypesSpec.hs (100%) rename {test => backend/test}/ModelSpec.hs (100%) rename {test => backend/test}/PandocSpec.hs (100%) rename {test => backend/test}/Servant/Client/Core/BaseUrl/TestInstances.hs (100%) rename {test => backend/test}/ServantApi/ExternalApis/TypeSpec.hs (100%) rename {test => backend/test}/ServantApi/ExternalApisSpec.hs (100%) rename {test => backend/test}/ServantApiSpec.hs (100%) rename {test => backend/test}/Test/QuickCheck/Classes/Binary.hs (100%) rename {test => backend/test}/Test/QuickCheck/Classes/Csv.hs (100%) rename {test => backend/test}/Test/QuickCheck/Classes/Hashable.hs (100%) rename {test => backend/test}/Test/QuickCheck/Classes/HttpApiData.hs (100%) rename {test => backend/test}/Test/QuickCheck/Classes/JSON.hs (100%) rename {test => backend/test}/Test/QuickCheck/Classes/PathPiece.hs (100%) rename {test => backend/test}/Test/QuickCheck/Classes/PersistField.hs (100%) rename {test => backend/test}/Test/QuickCheck/Classes/Universe.hs (100%) rename {test => backend/test}/TestImport.hs (100%) rename {test => backend/test}/TestInstances.hs (100%) rename {test => backend/test}/Text/Blaze/TestInstances.hs (100%) rename {test => backend/test}/User.hs (100%) rename {test => backend/test}/Utils/CsvSpec.hs (100%) rename {test => backend/test}/Utils/DateTimeSpec.hs (100%) rename {test => backend/test}/Utils/I18nSpec.hs (100%) rename {test => backend/test}/Utils/PathPieceSpec.hs (100%) rename {test => backend/test}/Utils/TypesSpec.hs (100%) rename {test => backend/test}/UtilsSpec.hs (100%) rename {testdata => backend/testdata}/AbgabeH10-1.hs (100%) rename {testdata => backend/testdata}/H10-2.hs (100%) rename {testdata => backend/testdata}/H10-3.hs (100%) rename {testdata => backend/testdata}/ProMo_Uebung10.pdf (100%) rename {testdata => backend/testdata}/ProMo_Uebung10.pdf.license (100%) rename {testdata => backend/testdata}/avs_json.hs (100%) rename {testdata => backend/testdata}/fradrive_f_results_2022051910.csv (100%) rename {testdata => backend/testdata}/fradrive_f_results_2022051910.csv.license (100%) rename {testdata => backend/testdata}/test.pdf (100%) rename {testdata => backend/testdata}/test.pdf.license (100%) rename {testdata => backend/testdata}/test_letters.hs (100%) rename {testdata => backend/testdata}/test_results.csv (100%) rename {testdata => backend/testdata}/test_results.csv.license (100%) rename translate.hs => backend/translate.hs (100%) delete mode 100644 docker/postgres/initdb.sh delete mode 100644 docker/postgres/pg_hba.conf delete mode 100755 docker/postgres/pgconfig.sh delete mode 100644 docker/postgres/postgresql.conf delete mode 100644 docker/postgres/schema.sql delete mode 100755 utils/develop-status.pl diff --git a/.gitignore b/.gitignore index ad45363b1..9c207a919 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,8 @@ develop node_modules/ .npm/ .node_repl_history -frontend/assets/icons -frontend/assets/favicons +**/assets/icons +**/assets/favicons bin/ *.hi *.o diff --git a/Makefile b/Makefile index 04465322e..ac48c2800 100644 --- a/Makefile +++ b/Makefile @@ -1,61 +1,5 @@ - export SHELL=bash -# MAKE=make -f Makefile-loggingsymbols -# MAKE=make -d - -# System information -export CPU_CORES = $(shell cat /proc/cpuinfo | grep '^processor' | wc -l) - -export CONTAINER_COMMAND ?= podman -export CONTAINER_BGRUN ?= $(CONTAINER_COMMAND) run -dit --network=host --replace -export CONTAINER_FGRUN ?= $(CONTAINER_COMMAND) run -it --network=host --replace - -export IMAGE_REGISTRY = docker.io -export MEMCACHED_IMAGE = $(IMAGE_REGISTRY)/memcached:latest -export MINIO_IMAGE = $(IMAGE_REGISTRY)/minio/minio:latest -export MAILDEV_IMAGE = $(IMAGE_REGISTRY)/maildev/maildev:latest # TODO: needs different port than 1025 to avoid conflicts -export POSTGRES_IMAGE = $(IMAGE_REGISTRY)/library/postgres:12 -export LOCAL_CONTAINERFILE - -export IN_CONTAINER ?= false -export IN_CI ?= false -export CONTAINER_FILE -export CONTAINER_IDENT -export CF_PREFIX -export DEVELOP -export CONTAINER_ATTACHED -export CONTAINER_INIT -export CONTAINER_CLEANUP -export PROJECT_DIR=/fradrive - -export SERVICE -export SERVICE_VARIANT ?= $(SERVICE) -export JOB -export IMAGE -export MAKECALL -export ENTRYPOINT -export EXEC_OPTS - -export STACK_CORES = $(shell echo $(($(CPU_CORES)/2))) -export BASE_PORTS -export UNIWORXDB_OPTS ?= -cf -export PROD ?= false -export SRC - -ifeq ($(PROD),true) -export --DEVELOPMENT=--flag uniworx:-dev -else -export --DEVELOPMENT=--flag uniworx:dev -endif - -export DATE := $(shell date +'%Y-%m-%dT%H-%M-%S') - -export CURR_DEV = $(shell cat develop/.current 2>/dev/null) -export SET_DEVELOP = $(eval DEVELOP=develop/$$(CURR_DEV)) -export NEW_DEVELOP = $(eval DEVELOP=develop/$$(DATE)) - - .PHONY: help # HELP: print out this help message help: @@ -68,7 +12,6 @@ help: .PHONY: clean # HELP: stop all running containers and remove all compilation results in the directory (but leave images including dependencies unharmed) clean: - rm -rf develop -rm -rf frontend/node_modules .npm .cache frontend/assets/icons frontend/assets/favicons frontend/static well-known config/manifest.json frontend/src/env.sass -rm -rf .stack-work .stack-work.lock -rm -rf bin .Dockerfile develop @@ -100,287 +43,39 @@ release: .PHONY: compile # HELP: perform full compilation (frontend and backend) -compile: - $(MAKE) compile-frontend - $(MAKE) compile-backend +compile: compile-frontend compile-backend ; +.PHONY: compile-% +compile-%: + docker compose run --remove-orphans --build --no-deps $* make compile .PHONY: start # HELP: start complete development environment with a fresh test database -start: - $(MAKE) start-postgres - $(MAKE) start-memcached - $(MAKE) start-minio - $(MAKE) compile-frontend - $(MAKE) compile-uniworxdb - $(MAKE) start-backend - -.PHONY: %-backend -%-backend: SERVICE=backend -%-backend: SERVICE_VARIANT=backend -%-backend: LOCAL_CONTAINERFILE=true -%-backend: IMAGE=localhost/fradrive/backend -%-backend: BASE_PORTS = "DEV_PORT_HTTP=3000" "DEV_PORT_HTTPS=3443" - -.PHONY: %-uniworxdb -%-uniworxdb: SERVICE=backend -%-uniworxdb: SERVICE_VARIANT=uniworxdb -%-uniworxdb: IMAGE=localhost/fradrive/backend -%-uniworxdb: LOCAL_CONTAINERFILE=true - -.PHONY: %-ghci -%-ghci: SERVICE=backend -%-ghci: SERVICE_VARIANT=ghci -%-ghci: IMAGE=localhost/fradrive/backend -%-ghci: LOCAL_CONTAINERFILE=true - -.PHONY: %-hoogle -%-hoogle: SERVICE=backend -%-hoogle: SERVICE_VARIANT=hoogle -%-hoogle: BASE_PORTS = "HOOGLE_PORT=8081" -%-hoogle: IMAGE=localhost/fradrive/backend -%-hoogle: LOCAL_CONTAINERFILE=true ---start-hoogle: - HOOGLE_PORT=`cat $(CONTAINER_FILE) | grep 'HOOGLE_PORT=' | sed 's/HOOGLE_PORT=//'` ; \ - stack $(STACK_CORES) hoogle -- server --local --port $${HOOGLE_PORT} - -.PHONY: %-frontend -%-frontend: SERVICE=frontend -%-frontend: SERVICE_VARIANT=frontend -%-frontend: LOCAL_CONTAINERFILE=true -%-frontend: IMAGE=localhost/fradrive/frontend - -.PHONY: %-postgres -%-postgres: SERVICE=postgres -%-postgres: SERVICE_VARIANT=postgres -%-postgres: BASE_PORTS = "PGPORT=5432" -%-postgres: IMAGE=--env POSTGRES_HOST_AUTH_METHOD=trust -v ./docker/postgres/pg_hba.conf:/tmp/pg_hba.conf -v ./docker/postgres/postgresql.conf:/tmp/postgresql.conf -v ./docker/postgres/pgconfig.sh:/docker-entrypoint-initdb.d/_pgconfig.sh -v ./docker/postgres/schema.sql:/docker-entrypoint-initdb.d/schema.sql $$(POSTGRES_IMAGE) -%-postgres: LOCAL_CONTAINERFILE=false - -.PHONY: %-memcached -%-memcached: SERVICE=memcached -%-memcached: SERVICE_VARIANT=memcached -%-memcached: IMAGE=$$(MEMCACHED_IMAGE) --port=11211 -%-memcached: LOCAL_CONTAINERFILE=false -%-memcached: BASE_PORTS = "MEMCACHED_PORT=11211" - -.PHONY: %-maildev -%-maildev: SERVICE=maildev -%-maildev: SERVICE_VARIANT=maildev -%-maildev: IMAGE=$$(MAILDEV_IMAGE) --port=1025 -%-maildev: LOCAL_CONTAINERFILE=false -%-maildev: BASE_PORTS = "MAILDEV_PORT=1025" - -.PHONY: %-release -%-release: PROD=true -%-release: SERVICE=fradrive -%-release: SERVICE_VARIANT=fradrive -%-release: IMAGE=localhost/fradrive/fradrive -%-release: LOCAL_CONTAINERFILE=true - -.PHONY: %-minio -%-minio: SERVICE=minio -%-minio: SERVICE_VARIANT=minio -%-minio: IMAGE=$$(MINIO_IMAGE) -- server /tmp/minio -%-minio: LOCAL_CONTAINERFILE=false -%-minio: BASE_PORTS = "UPLOAD_S3_PORT=9000" - +start: start-postgres start-maildev start-memcached start-minio start-backend + docker compose run backend make start .PHONY: start-% -start-%: JOB=start -start-%: CF_PREFIX = start- -start-%: CONTAINER_ATTACHED = false -start-%: --act ; - -.PHONY: compile-% -compile-%: JOB=compile -compile-%: CF_PREFIX = compile- -compile-%: CONTAINER_ATTACHED = true -compile-%: --act ; - -.PHONY: dependencies-% -dependencies-%: JOB=dependencies -dependencies-%: CF_PREFIX = dependencies- -dependencies-%: CONTAINER_ATTACHED = true -dependencies-%: --act ; - -.PHONY: test-% -test-%: JOB=test -test-%: CF_PREFIX = test- -test-%: CONTAINER_ATTACHED = true -test-%: --act ; - -.PHONY: lint-% -lint-%: JOB=lint -lint-%: CF_PREFIX = lint- -lint-%: CONTAINER_ATTACHED = true -lint-%: --act ; - -.PHONY: shell-% -# HELP(shell-$SERVICE): launch (bash) shell inside a new $SERVICE container -shell-%: JOB=shell -shell-%: CF_PREFIX=shell- -shell-%: CONTAINER_ATTACHED=true -shell-%: --act ; -.PHONY: ghci -# HELP(ghci): launch new backend instance and enter interactive ghci shell -ghci: shell-ghci; - - -.PHONY: rebuild-% -# HELP(rebuild-{backend,frontend,database,memcached,minio}): force-rebuild a given container image -rebuild-%: - echo "TODO rebuild to be reimplemented" - ---act: - echo "TODO new act is currently WIP" - docker compose run --remove-orphans $(SERVICE) make -- --$(JOB)-$(SERVICE_VARIANT) - -# For Reverse Proxy Problem see: https://groups.google.com/g/yesodweb/c/2EO53kSOuy0/m/Lw6tq2VYat4J -# HELP(start-backend): start development instance ---start-backend: --dependencies-backend - export YESOD_IP_FROM_HEADER=true; \ - export DEV_PORT_HTTP=`cat $(CONTAINER_FILE) | grep 'DEV_PORT_HTTP=' | sed 's/DEV_PORT_HTTP=//'`; \ - export DEV_PORT_HTTPS=`cat $(CONTAINER_FILE) | grep 'DEV_PORT_HTTPS=' | sed 's/DEV_PORT_HTTPS=//'`; \ - export HOST=127.0.0.1 ; \ - export PORT=$${PORT:-$${DEV_PORT_HTTP}} ; \ - export DETAILED_LOGGING=$${DETAILED_LOGGING:-true} ; \ - export LOG_ALL=$${LOG_ALL:-false} ; \ - export LOGLEVEL=$${LOGLEVEL:-info} ; \ - export DUMMY_LOGIN=$${DUMMY_LOGIN:-true} ; \ - export SERVER_SESSION_ACID_FALLBACK=$${SERVER_SESSION_ACID_FALLBACK:-true} ; \ - export SERVER_SESSION_COOKIES_SECURE=$${SERVER_SESSION_COOKIES_SECURE:-false} ; \ - export COOKIES_SECURE=$${COOKIES_SECURE:-false} ; \ - export ALLOW_DEPRECATED=$${ALLOW_DEPRECATED:-true} ; \ - export ENCRYPT_ERRORS=$${ENCRYPT_ERRORS:-false} ; \ - export RIBBON=$${RIBBON:-$${HOST:-localhost}} ; \ - export APPROOT=$${APPROOT:-http://localhost:$${DEV_PORT_HTTP}} ; \ - export AVSPASS=$${AVSPASS:-nopasswordset} ; \ - stack $(STACK_CORES) exec --local-bin-path $$(pwd)/bin --copy-bins -- yesod devel -p "$${DEV_PORT_HTTP}" -q "$${DEV_PORT_HTTPS}" -# HELP(compile-backend): compile backend binaries ---compile-backend: --dependencies-backend - stack build $(STACK_CORES) --fast --profile --library-profiling --executable-profiling --flag uniworx:-library-only $(--DEVELOPMENT) --local-bin-path $$(pwd)/bin --copy-bins -# HELP(dependencies-backend): (re-)build backend dependencies ---dependencies-backend: #uniworx.cabal - chown -R `id -un`:`id -gn` "$(PROJECT_DIR)"; \ - stack install hpack; stack install yesod-bin; \ - stack build -j2 --only-dependencies -# HELP(lint-backend): lint backend ---lint-backend: - stack build $(STACK_CORES) --test --fast --flag uniworx:library-only $(--DEVELOPMENT) uniworx:test:hlint -# HELP(test-backend): test backend ---test-backend: - stack build $(STACK_CORES) --test --coverage --fast --flag uniworx:library-only $(--DEVELOPMENT) -# uniworx.cabal: -# stack exec -- hpack --force - -# HELP(compile-frontend): compile frontend frontend/assets ---%-frontend: - cd ./frontend && make $* ---start-frontend: --compile-frontend; -frontend/%: - cd ./frontend && $(MAKE) $* -# --lint-frontend: --compile-frontend -# npm run lint -# --test-frontend: --compile-frontend -# npm run test - -# HELP(compile-uniworxdb): clear and fill database. requires running postgres instance (use "make start-postgres" to start one) -# TODO (db-m-$MIGRATION-backend): apply migration (see src/Model/Migration/Definition.hs for list of available migrations) ---compile-uniworxdb: --compile-backend - SERVER_SESSION_ACID_FALLBACK=${SERVER_SESSION_ACID_FALLBACK:-true} ; \ - AVSPASS=${AVSPASS:-nopasswordset} ; \ - ./bin/uniworxdb $(UNIWORXDB_OPTS) - -# HELP(shell-ghci): enter ghci shell. Use "make ghci SRC=" to load specific source modules." ---shell-ghci: - stack ghci -- $(SRC) -# --main-is uniworx:exe:uniworx - -# HELP(shell-{backend,frontend,memcached,minio,postgres}): enter (bash) shell inside a new container of a given service ---shell-%: - /bin/bash - -# HELP(start-minio): start minio service - -.PHONY: status -# HELP: print develop status: running containers, used ports -status: - @./utils/develop-status.pl -a - -.PHONY: log-% -# HELP(log-$(JOB)-$(SERVICE)): inspect output of a given service. The service must be currently running When a service supports multiple running instances in one develop (i.e. backend), you need to specify the exact instance by its associated file (e.g. backend-1, backend-2, etc.), please check the contents of the develop/ directory for a list of running instances. -log-%: - DEVELOP=develop/`cat develop/.current` ; \ - SEARCH_FILE="$${DEVELOP}/$*" ; \ - if [[ ! -e "$${SEARCH_FILE}" ]] ; then \ - SEARCH_FILE="$${DEVELOP}/.exited.$*" ; \ - fi ; \ - if [[ -e "$${SEARCH_FILE}" ]] ; then \ - $(CONTAINER_COMMAND) logs --follow `cat "$${SEARCH_FILE}" | grep CONTAINER_ID= | sed 's/^CONTAINER_ID=//'` ; \ - else \ - >&2 echo "Cannot show log: No develop file found for '$*'" ; \ - exit 1 ; \ - fi - -.PHONY: enter -# HELP: launch (bash) shell inside a currently running container. Use ./enter shell wrapper for more convenient usage, possibly with tab-completion in the future -enter: --ensure-develop - $(MAKE) -- --enter - -.PHONY: psql -# HELP: enter psql (postgresql) cli inside a currently running database container -psql: ENTRYPOINT=/usr/bin/psql -d uniworx -psql: EXEC_OPTS=--user postgres -psql: --ensure-develop - $(MAKE) -- --enter CONTAINER_FILE=develop/`cat develop/.current`/start-postgres - ---enter: - CONTAINER_ID=`cat $(CONTAINER_FILE) | grep 'CONTAINER_ID=' | sed 's/CONTAINER_ID=//'` ; \ - $(CONTAINER_COMMAND) exec -it $(EXEC_OPTS) $${CONTAINER_ID} $(if $(ENTRYPOINT),$(ENTRYPOINT),/bin/bash) +start-%: + docker compose up -d --build $* .PHONY: stop -# HELP: stop all currently running develop instances stop: - rm -rf develop + docker compose down .PHONY: stop-% -# HELP(stop-SERVICE): stop all currently running develop instances of a given service (i.e. backend,frontend,uniworxdb,hoogle,postgres,...) -# HELP(stop-JOB): stop all currently running develop instances of a given job (i.e. compile,start,test,lint) -stop-compile: CF_PREFIX=compile- -stop-start: CF_PREFIX=start- -stop-test: CF_PREFIX=test- -stop-lint: CF_PREFIX=lint- -stop-%: --stop; ---stop: - $(SET_DEVELOP) -ifdef CF_PREFIX - rm -rf $(DEVELOP)/$(CF_PREFIX)* -endif -ifdef SERVICE_VARIANT - rm -rf $(DEVELOP)/*-$(SERVICE_VARIANT) -endif +stop-%: + docker compose down $* +.PHONY: kill-% +kill-%: + docker compose kill $* -.PHONY: new-develop -# HELP: instantiate new development bundle, i.e. create new directory under develop/ -new-develop: - $(NEW_DEVELOP) - mkdir -p $(DEVELOP) - $(MAKE) develop/.current -.PHONY: switch-develop -# HELP: switch current develop instance to DEVELOP=... -switch-develop: - if ! [ -e develop/$(DEVELOP) ]; then \ - echo "Specified develop $(DEVELOP) does not exist! Not switching." ; \ - exit 1 ; \ - fi ; \ - echo "$(DEVELOP)" > develop/.current ---ensure-develop: - if ! [[ -e develop ]]; then \ - $(MAKE) new-develop; \ - fi - $(MAKE) develop/.current - $(SET_DEVELOP) -.PHONY: develop/.current -develop/.current: - ls -1 develop | tail -n1 > develop/.current +.PHONY: status +status: + docker compose ps +.PHONY: top +top: + docker compose stats + +.PHONY: log-% +log-%: + docker compose logs --follow --timestamps $* .PHONY: --% .SUFFIXES: # Delete all default suffixes diff --git a/frontend/assets/favicon.svg b/assets/favicon.svg similarity index 100% rename from frontend/assets/favicon.svg rename to assets/favicon.svg diff --git a/frontend/assets/fonts/fradrive/AUTHORS b/assets/fonts/fradrive/AUTHORS similarity index 100% rename from frontend/assets/fonts/fradrive/AUTHORS rename to assets/fonts/fradrive/AUTHORS diff --git a/frontend/assets/fonts/fradrive/ChangeLog b/assets/fonts/fradrive/ChangeLog similarity index 100% rename from frontend/assets/fonts/fradrive/ChangeLog rename to assets/fonts/fradrive/ChangeLog diff --git a/frontend/assets/fonts/fradrive/FRADriveMono-Bold.ttf b/assets/fonts/fradrive/FRADriveMono-Bold.ttf similarity index 100% rename from frontend/assets/fonts/fradrive/FRADriveMono-Bold.ttf rename to assets/fonts/fradrive/FRADriveMono-Bold.ttf diff --git a/frontend/assets/fonts/fradrive/FRADriveMono-BoldItalic.ttf b/assets/fonts/fradrive/FRADriveMono-BoldItalic.ttf similarity index 100% rename from frontend/assets/fonts/fradrive/FRADriveMono-BoldItalic.ttf rename to assets/fonts/fradrive/FRADriveMono-BoldItalic.ttf diff --git a/frontend/assets/fonts/fradrive/FRADriveMono-Italic.ttf b/assets/fonts/fradrive/FRADriveMono-Italic.ttf similarity index 100% rename from frontend/assets/fonts/fradrive/FRADriveMono-Italic.ttf rename to assets/fonts/fradrive/FRADriveMono-Italic.ttf diff --git a/frontend/assets/fonts/fradrive/FRADriveMono-Regular.ttf b/assets/fonts/fradrive/FRADriveMono-Regular.ttf similarity index 100% rename from frontend/assets/fonts/fradrive/FRADriveMono-Regular.ttf rename to assets/fonts/fradrive/FRADriveMono-Regular.ttf diff --git a/frontend/assets/fonts/fradrive/FRADriveSans-Bold.ttf b/assets/fonts/fradrive/FRADriveSans-Bold.ttf similarity index 100% rename from frontend/assets/fonts/fradrive/FRADriveSans-Bold.ttf rename to assets/fonts/fradrive/FRADriveSans-Bold.ttf diff --git a/frontend/assets/fonts/fradrive/FRADriveSans-BoldItalic.ttf b/assets/fonts/fradrive/FRADriveSans-BoldItalic.ttf similarity index 100% rename from frontend/assets/fonts/fradrive/FRADriveSans-BoldItalic.ttf rename to assets/fonts/fradrive/FRADriveSans-BoldItalic.ttf diff --git a/frontend/assets/fonts/fradrive/FRADriveSans-Italic.ttf b/assets/fonts/fradrive/FRADriveSans-Italic.ttf similarity index 100% rename from frontend/assets/fonts/fradrive/FRADriveSans-Italic.ttf rename to assets/fonts/fradrive/FRADriveSans-Italic.ttf diff --git a/frontend/assets/fonts/fradrive/FRADriveSans-Regular.ttf b/assets/fonts/fradrive/FRADriveSans-Regular.ttf similarity index 100% rename from frontend/assets/fonts/fradrive/FRADriveSans-Regular.ttf rename to assets/fonts/fradrive/FRADriveSans-Regular.ttf diff --git a/frontend/assets/fonts/fradrive/README.md b/assets/fonts/fradrive/README.md similarity index 100% rename from frontend/assets/fonts/fradrive/README.md rename to assets/fonts/fradrive/README.md diff --git a/frontend/assets/fonts/fradrive/TODO b/assets/fonts/fradrive/TODO similarity index 100% rename from frontend/assets/fonts/fradrive/TODO rename to assets/fonts/fradrive/TODO diff --git a/frontend/assets/fraport_logo_2016_text.svg b/assets/fraport_logo_2016_text.svg similarity index 100% rename from frontend/assets/fraport_logo_2016_text.svg rename to assets/fraport_logo_2016_text.svg diff --git a/frontend/assets/fraport_logo_2016_text.svg.license b/assets/fraport_logo_2016_text.svg.license similarity index 100% rename from frontend/assets/fraport_logo_2016_text.svg.license rename to assets/fraport_logo_2016_text.svg.license diff --git a/frontend/assets/fraport_logo_notext.svg b/assets/fraport_logo_notext.svg similarity index 100% rename from frontend/assets/fraport_logo_notext.svg rename to assets/fraport_logo_notext.svg diff --git a/frontend/assets/fraport_logo_notext.svg.license b/assets/fraport_logo_notext.svg.license similarity index 100% rename from frontend/assets/fraport_logo_notext.svg.license rename to assets/fraport_logo_notext.svg.license diff --git a/frontend/assets/fraport_logo_text.svg b/assets/fraport_logo_text.svg similarity index 100% rename from frontend/assets/fraport_logo_text.svg rename to assets/fraport_logo_text.svg diff --git a/frontend/assets/fraport_logo_text.svg.license b/assets/fraport_logo_text.svg.license similarity index 100% rename from frontend/assets/fraport_logo_text.svg.license rename to assets/fraport_logo_text.svg.license diff --git a/frontend/assets/icons-src/fontawesome.json b/assets/icons-src/fontawesome.json similarity index 100% rename from frontend/assets/icons-src/fontawesome.json rename to assets/icons-src/fontawesome.json diff --git a/backend/.ghc/ghci_history b/backend/.ghc/ghci_history new file mode 100644 index 000000000..e69de29bb diff --git a/.hlint.yaml b/backend/.hlint.yaml similarity index 100% rename from .hlint.yaml rename to backend/.hlint.yaml diff --git a/docker/backend/Dockerfile b/backend/Dockerfile similarity index 100% rename from docker/backend/Dockerfile rename to backend/Dockerfile diff --git a/backend/Makefile b/backend/Makefile new file mode 100644 index 000000000..5915ecea4 --- /dev/null +++ b/backend/Makefile @@ -0,0 +1,52 @@ +export CPU_CORES = $(shell cat /proc/cpuinfo | grep '^processor' | wc -l) +export STACK_CORES = $(shell echo $(($(CPU_CORES)/2))) + +ifeq ($(PROD),true) +export --DEVELOPMENT=--flag uniworx:-dev +else +export --DEVELOPMENT=--flag uniworx:dev +endif + +.PHONY: dependencies +dependencies: + chown -R `id -un`:`id -gn` "$(PROJECT_DIR)"; \ + stack install hpack; stack install yesod-bin; \ + stack build -j2 --only-dependencies + +.PHONY: compile +compile: dependencies + stack build $(STACK_CORES) --fast --profile --library-profiling --executable-profiling --flag uniworx:-library-only $(--DEVELOPMENT) --local-bin-path $$(pwd)/bin --copy-bins + +.PHONY: lint +lint: + stack build $(STACK_CORES) --test --fast --flag uniworx:library-only $(--DEVELOPMENT) uniworx:test:hlint + +.PHONY: test +test: + stack build $(STACK_CORES) --test --coverage --fast --flag uniworx:library-only $(--DEVELOPMENT) + +# For Reverse Proxy Problem see: https://groups.google.com/g/yesodweb/c/2EO53kSOuy0/m/Lw6tq2VYat4J +.PHONY: start +start: dependencies + export YESOD_IP_FROM_HEADER=true; \ + export DEV_PORT_HTTP=3000; \ + export DEV_PORT_HTTPS=3443; \ + export HOST=127.0.0.1 ; \ + export PORT=$${PORT:-$${DEV_PORT_HTTP}} ; \ + export DETAILED_LOGGING=$${DETAILED_LOGGING:-true} ; \ + export LOG_ALL=$${LOG_ALL:-false} ; \ + export LOGLEVEL=$${LOGLEVEL:-info} ; \ + export DUMMY_LOGIN=$${DUMMY_LOGIN:-true} ; \ + export SERVER_SESSION_ACID_FALLBACK=$${SERVER_SESSION_ACID_FALLBACK:-true} ; \ + export SERVER_SESSION_COOKIES_SECURE=$${SERVER_SESSION_COOKIES_SECURE:-false} ; \ + export COOKIES_SECURE=$${COOKIES_SECURE:-false} ; \ + export ALLOW_DEPRECATED=$${ALLOW_DEPRECATED:-true} ; \ + export ENCRYPT_ERRORS=$${ENCRYPT_ERRORS:-false} ; \ + export RIBBON=$${RIBBON:-$${HOST:-localhost}} ; \ + export APPROOT=$${APPROOT:-http://localhost:$${DEV_PORT_HTTP}} ; \ + export AVSPASS=$${AVSPASS:-nopasswordset} ; \ + stack $(STACK_CORES) exec --local-bin-path $$(pwd)/bin --copy-bins -- yesod devel -p "$${DEV_PORT_HTTP}" -q "$${DEV_PORT_HTTPS}" + +.PHONY: clean +clean: + rm -rf .stack-work .stack uniworx.cabal .ghc \ No newline at end of file diff --git a/app/DevelMain.hs b/backend/app/DevelMain.hs similarity index 100% rename from app/DevelMain.hs rename to backend/app/DevelMain.hs diff --git a/app/devel.hs b/backend/app/devel.hs similarity index 100% rename from app/devel.hs rename to backend/app/devel.hs diff --git a/app/main.hs b/backend/app/main.hs similarity index 100% rename from app/main.hs rename to backend/app/main.hs diff --git a/config/archive-types b/backend/config/archive-types similarity index 100% rename from config/archive-types rename to backend/config/archive-types diff --git a/config/i18n.json b/backend/config/i18n.json similarity index 100% rename from config/i18n.json rename to backend/config/i18n.json diff --git a/config/mimetypes b/backend/config/mimetypes similarity index 100% rename from config/mimetypes rename to backend/config/mimetypes diff --git a/config/personalised-sheet-files-collate b/backend/config/personalised-sheet-files-collate similarity index 100% rename from config/personalised-sheet-files-collate rename to backend/config/personalised-sheet-files-collate diff --git a/config/robots.txt b/backend/config/robots.txt similarity index 100% rename from config/robots.txt rename to backend/config/robots.txt diff --git a/config/robots.txt.license b/backend/config/robots.txt.license similarity index 100% rename from config/robots.txt.license rename to backend/config/robots.txt.license diff --git a/config/settings.yml b/backend/config/settings.yml similarity index 100% rename from config/settings.yml rename to backend/config/settings.yml diff --git a/config/submission-blacklist b/backend/config/submission-blacklist similarity index 100% rename from config/submission-blacklist rename to backend/config/submission-blacklist diff --git a/config/test-settings.yml b/backend/config/test-settings.yml similarity index 100% rename from config/test-settings.yml rename to backend/config/test-settings.yml diff --git a/config/video-types b/backend/config/video-types similarity index 100% rename from config/video-types rename to backend/config/video-types diff --git a/config/wordlist.txt b/backend/config/wordlist.txt similarity index 100% rename from config/wordlist.txt rename to backend/config/wordlist.txt diff --git a/config/wordlist.txt.license b/backend/config/wordlist.txt.license similarity index 100% rename from config/wordlist.txt.license rename to backend/config/wordlist.txt.license diff --git a/hlint/Hlint.hs b/backend/hlint/Hlint.hs similarity index 100% rename from hlint/Hlint.hs rename to backend/hlint/Hlint.hs diff --git a/load/Load.hs b/backend/load/Load.hs similarity index 100% rename from load/Load.hs rename to backend/load/Load.hs diff --git a/lpr b/backend/lpr similarity index 100% rename from lpr rename to backend/lpr diff --git a/messages/auth/campus/de.msg b/backend/messages/auth/campus/de.msg similarity index 100% rename from messages/auth/campus/de.msg rename to backend/messages/auth/campus/de.msg diff --git a/messages/auth/campus/en.msg b/backend/messages/auth/campus/en.msg similarity index 100% rename from messages/auth/campus/en.msg rename to backend/messages/auth/campus/en.msg diff --git a/messages/auth/dummy/de.msg b/backend/messages/auth/dummy/de.msg similarity index 100% rename from messages/auth/dummy/de.msg rename to backend/messages/auth/dummy/de.msg diff --git a/messages/auth/dummy/en.msg b/backend/messages/auth/dummy/en.msg similarity index 100% rename from messages/auth/dummy/en.msg rename to backend/messages/auth/dummy/en.msg diff --git a/messages/auth/pw-hash/de.msg b/backend/messages/auth/pw-hash/de.msg similarity index 100% rename from messages/auth/pw-hash/de.msg rename to backend/messages/auth/pw-hash/de.msg diff --git a/messages/auth/pw-hash/en.msg b/backend/messages/auth/pw-hash/en.msg similarity index 100% rename from messages/auth/pw-hash/en.msg rename to backend/messages/auth/pw-hash/en.msg diff --git a/messages/button/de.msg b/backend/messages/button/de.msg similarity index 100% rename from messages/button/de.msg rename to backend/messages/button/de.msg diff --git a/messages/button/en.msg b/backend/messages/button/en.msg similarity index 100% rename from messages/button/en.msg rename to backend/messages/button/en.msg diff --git a/messages/faq/de-de-formal.msg b/backend/messages/faq/de-de-formal.msg similarity index 100% rename from messages/faq/de-de-formal.msg rename to backend/messages/faq/de-de-formal.msg diff --git a/messages/faq/en-eu.msg b/backend/messages/faq/en-eu.msg similarity index 100% rename from messages/faq/en-eu.msg rename to backend/messages/faq/en-eu.msg diff --git a/messages/frontend/de-de-formal.msg b/backend/messages/frontend/de-de-formal.msg similarity index 100% rename from messages/frontend/de-de-formal.msg rename to backend/messages/frontend/de-de-formal.msg diff --git a/messages/frontend/en.msg b/backend/messages/frontend/en.msg similarity index 100% rename from messages/frontend/en.msg rename to backend/messages/frontend/en.msg diff --git a/messages/uniworx/categories/I18n/de-de-formal.msg b/backend/messages/uniworx/categories/I18n/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/I18n/de-de-formal.msg rename to backend/messages/uniworx/categories/I18n/de-de-formal.msg diff --git a/messages/uniworx/categories/I18n/en-eu.msg b/backend/messages/uniworx/categories/I18n/en-eu.msg similarity index 100% rename from messages/uniworx/categories/I18n/en-eu.msg rename to backend/messages/uniworx/categories/I18n/en-eu.msg diff --git a/messages/uniworx/categories/admin/de-de-formal.msg b/backend/messages/uniworx/categories/admin/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/admin/de-de-formal.msg rename to backend/messages/uniworx/categories/admin/de-de-formal.msg diff --git a/messages/uniworx/categories/admin/en-eu.msg b/backend/messages/uniworx/categories/admin/en-eu.msg similarity index 100% rename from messages/uniworx/categories/admin/en-eu.msg rename to backend/messages/uniworx/categories/admin/en-eu.msg diff --git a/messages/uniworx/categories/authorization/de-de-formal.msg b/backend/messages/uniworx/categories/authorization/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/authorization/de-de-formal.msg rename to backend/messages/uniworx/categories/authorization/de-de-formal.msg diff --git a/messages/uniworx/categories/authorization/en-eu.msg b/backend/messages/uniworx/categories/authorization/en-eu.msg similarity index 100% rename from messages/uniworx/categories/authorization/en-eu.msg rename to backend/messages/uniworx/categories/authorization/en-eu.msg diff --git a/messages/uniworx/categories/avs/de-de-formal.msg b/backend/messages/uniworx/categories/avs/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/avs/de-de-formal.msg rename to backend/messages/uniworx/categories/avs/de-de-formal.msg diff --git a/messages/uniworx/categories/avs/en-eu.msg b/backend/messages/uniworx/categories/avs/en-eu.msg similarity index 100% rename from messages/uniworx/categories/avs/en-eu.msg rename to backend/messages/uniworx/categories/avs/en-eu.msg diff --git a/messages/uniworx/categories/courses/courses/de-de-formal.msg b/backend/messages/uniworx/categories/courses/courses/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/courses/courses/de-de-formal.msg rename to backend/messages/uniworx/categories/courses/courses/de-de-formal.msg diff --git a/messages/uniworx/categories/courses/courses/en-eu.msg b/backend/messages/uniworx/categories/courses/courses/en-eu.msg similarity index 100% rename from messages/uniworx/categories/courses/courses/en-eu.msg rename to backend/messages/uniworx/categories/courses/courses/en-eu.msg diff --git a/messages/uniworx/categories/courses/courses/event/de-de-formal.msg b/backend/messages/uniworx/categories/courses/courses/event/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/courses/courses/event/de-de-formal.msg rename to backend/messages/uniworx/categories/courses/courses/event/de-de-formal.msg diff --git a/messages/uniworx/categories/courses/courses/event/en-eu.msg b/backend/messages/uniworx/categories/courses/courses/event/en-eu.msg similarity index 100% rename from messages/uniworx/categories/courses/courses/event/en-eu.msg rename to backend/messages/uniworx/categories/courses/courses/event/en-eu.msg diff --git a/messages/uniworx/categories/courses/courses/news/de-de-formal.msg b/backend/messages/uniworx/categories/courses/courses/news/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/courses/courses/news/de-de-formal.msg rename to backend/messages/uniworx/categories/courses/courses/news/de-de-formal.msg diff --git a/messages/uniworx/categories/courses/courses/news/en-eu.msg b/backend/messages/uniworx/categories/courses/courses/news/en-eu.msg similarity index 100% rename from messages/uniworx/categories/courses/courses/news/en-eu.msg rename to backend/messages/uniworx/categories/courses/courses/news/en-eu.msg diff --git a/messages/uniworx/categories/courses/exam/exam/de-de-formal.msg b/backend/messages/uniworx/categories/courses/exam/exam/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/courses/exam/exam/de-de-formal.msg rename to backend/messages/uniworx/categories/courses/exam/exam/de-de-formal.msg diff --git a/messages/uniworx/categories/courses/exam/exam/en-eu.msg b/backend/messages/uniworx/categories/courses/exam/exam/en-eu.msg similarity index 100% rename from messages/uniworx/categories/courses/exam/exam/en-eu.msg rename to backend/messages/uniworx/categories/courses/exam/exam/en-eu.msg diff --git a/messages/uniworx/categories/courses/exam/exam_office/de-de-formal.msg b/backend/messages/uniworx/categories/courses/exam/exam_office/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/courses/exam/exam_office/de-de-formal.msg rename to backend/messages/uniworx/categories/courses/exam/exam_office/de-de-formal.msg diff --git a/messages/uniworx/categories/courses/exam/exam_office/en-eu.msg b/backend/messages/uniworx/categories/courses/exam/exam_office/en-eu.msg similarity index 100% rename from messages/uniworx/categories/courses/exam/exam_office/en-eu.msg rename to backend/messages/uniworx/categories/courses/exam/exam_office/en-eu.msg diff --git a/messages/uniworx/categories/courses/exam/external_exam/de-de-formal.msg b/backend/messages/uniworx/categories/courses/exam/external_exam/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/courses/exam/external_exam/de-de-formal.msg rename to backend/messages/uniworx/categories/courses/exam/external_exam/de-de-formal.msg diff --git a/messages/uniworx/categories/courses/exam/external_exam/en-eu.msg b/backend/messages/uniworx/categories/courses/exam/external_exam/en-eu.msg similarity index 100% rename from messages/uniworx/categories/courses/exam/external_exam/en-eu.msg rename to backend/messages/uniworx/categories/courses/exam/external_exam/en-eu.msg diff --git a/messages/uniworx/categories/courses/material/de-de-formal.msg b/backend/messages/uniworx/categories/courses/material/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/courses/material/de-de-formal.msg rename to backend/messages/uniworx/categories/courses/material/de-de-formal.msg diff --git a/messages/uniworx/categories/courses/material/en-eu.msg b/backend/messages/uniworx/categories/courses/material/en-eu.msg similarity index 100% rename from messages/uniworx/categories/courses/material/en-eu.msg rename to backend/messages/uniworx/categories/courses/material/en-eu.msg diff --git a/messages/uniworx/categories/courses/participants/de-de-formal.msg b/backend/messages/uniworx/categories/courses/participants/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/courses/participants/de-de-formal.msg rename to backend/messages/uniworx/categories/courses/participants/de-de-formal.msg diff --git a/messages/uniworx/categories/courses/participants/en-eu.msg b/backend/messages/uniworx/categories/courses/participants/en-eu.msg similarity index 100% rename from messages/uniworx/categories/courses/participants/en-eu.msg rename to backend/messages/uniworx/categories/courses/participants/en-eu.msg diff --git a/messages/uniworx/categories/courses/sheet/de-de-formal.msg b/backend/messages/uniworx/categories/courses/sheet/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/courses/sheet/de-de-formal.msg rename to backend/messages/uniworx/categories/courses/sheet/de-de-formal.msg diff --git a/messages/uniworx/categories/courses/sheet/en-eu.msg b/backend/messages/uniworx/categories/courses/sheet/en-eu.msg similarity index 100% rename from messages/uniworx/categories/courses/sheet/en-eu.msg rename to backend/messages/uniworx/categories/courses/sheet/en-eu.msg diff --git a/messages/uniworx/categories/courses/submission/de-de-formal.msg b/backend/messages/uniworx/categories/courses/submission/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/courses/submission/de-de-formal.msg rename to backend/messages/uniworx/categories/courses/submission/de-de-formal.msg diff --git a/messages/uniworx/categories/courses/submission/en-eu.msg b/backend/messages/uniworx/categories/courses/submission/en-eu.msg similarity index 100% rename from messages/uniworx/categories/courses/submission/en-eu.msg rename to backend/messages/uniworx/categories/courses/submission/en-eu.msg diff --git a/messages/uniworx/categories/courses/tutorial/de-de-formal.msg b/backend/messages/uniworx/categories/courses/tutorial/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/courses/tutorial/de-de-formal.msg rename to backend/messages/uniworx/categories/courses/tutorial/de-de-formal.msg diff --git a/messages/uniworx/categories/courses/tutorial/en-eu.msg b/backend/messages/uniworx/categories/courses/tutorial/en-eu.msg similarity index 100% rename from messages/uniworx/categories/courses/tutorial/en-eu.msg rename to backend/messages/uniworx/categories/courses/tutorial/en-eu.msg diff --git a/messages/uniworx/categories/error/de-de-formal.msg b/backend/messages/uniworx/categories/error/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/error/de-de-formal.msg rename to backend/messages/uniworx/categories/error/de-de-formal.msg diff --git a/messages/uniworx/categories/error/en-eu.msg b/backend/messages/uniworx/categories/error/en-eu.msg similarity index 100% rename from messages/uniworx/categories/error/en-eu.msg rename to backend/messages/uniworx/categories/error/en-eu.msg diff --git a/messages/uniworx/categories/firm/de-de-formal.msg b/backend/messages/uniworx/categories/firm/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/firm/de-de-formal.msg rename to backend/messages/uniworx/categories/firm/de-de-formal.msg diff --git a/messages/uniworx/categories/firm/en-eu.msg b/backend/messages/uniworx/categories/firm/en-eu.msg similarity index 100% rename from messages/uniworx/categories/firm/en-eu.msg rename to backend/messages/uniworx/categories/firm/en-eu.msg diff --git a/messages/uniworx/categories/health/de-de-formal.msg b/backend/messages/uniworx/categories/health/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/health/de-de-formal.msg rename to backend/messages/uniworx/categories/health/de-de-formal.msg diff --git a/messages/uniworx/categories/health/en-eu.msg b/backend/messages/uniworx/categories/health/en-eu.msg similarity index 100% rename from messages/uniworx/categories/health/en-eu.msg rename to backend/messages/uniworx/categories/health/en-eu.msg diff --git a/messages/uniworx/categories/help/de-de-formal.msg b/backend/messages/uniworx/categories/help/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/help/de-de-formal.msg rename to backend/messages/uniworx/categories/help/de-de-formal.msg diff --git a/messages/uniworx/categories/help/en-eu.msg b/backend/messages/uniworx/categories/help/en-eu.msg similarity index 100% rename from messages/uniworx/categories/help/en-eu.msg rename to backend/messages/uniworx/categories/help/en-eu.msg diff --git a/messages/uniworx/categories/info/de-de-formal.msg b/backend/messages/uniworx/categories/info/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/info/de-de-formal.msg rename to backend/messages/uniworx/categories/info/de-de-formal.msg diff --git a/messages/uniworx/categories/info/en-eu.msg b/backend/messages/uniworx/categories/info/en-eu.msg similarity index 100% rename from messages/uniworx/categories/info/en-eu.msg rename to backend/messages/uniworx/categories/info/en-eu.msg diff --git a/messages/uniworx/categories/jobs_handler/de-de-formal.msg b/backend/messages/uniworx/categories/jobs_handler/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/jobs_handler/de-de-formal.msg rename to backend/messages/uniworx/categories/jobs_handler/de-de-formal.msg diff --git a/messages/uniworx/categories/jobs_handler/en-eu.msg b/backend/messages/uniworx/categories/jobs_handler/en-eu.msg similarity index 100% rename from messages/uniworx/categories/jobs_handler/en-eu.msg rename to backend/messages/uniworx/categories/jobs_handler/en-eu.msg diff --git a/messages/uniworx/categories/metrics/de-de-formal.msg b/backend/messages/uniworx/categories/metrics/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/metrics/de-de-formal.msg rename to backend/messages/uniworx/categories/metrics/de-de-formal.msg diff --git a/messages/uniworx/categories/metrics/en-eu.msg b/backend/messages/uniworx/categories/metrics/en-eu.msg similarity index 100% rename from messages/uniworx/categories/metrics/en-eu.msg rename to backend/messages/uniworx/categories/metrics/en-eu.msg diff --git a/messages/uniworx/categories/model_types/de-de-formal.msg b/backend/messages/uniworx/categories/model_types/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/model_types/de-de-formal.msg rename to backend/messages/uniworx/categories/model_types/de-de-formal.msg diff --git a/messages/uniworx/categories/model_types/en-eu.msg b/backend/messages/uniworx/categories/model_types/en-eu.msg similarity index 100% rename from messages/uniworx/categories/model_types/en-eu.msg rename to backend/messages/uniworx/categories/model_types/en-eu.msg diff --git a/messages/uniworx/categories/news/de-de-formal.msg b/backend/messages/uniworx/categories/news/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/news/de-de-formal.msg rename to backend/messages/uniworx/categories/news/de-de-formal.msg diff --git a/messages/uniworx/categories/news/en-eu.msg b/backend/messages/uniworx/categories/news/en-eu.msg similarity index 100% rename from messages/uniworx/categories/news/en-eu.msg rename to backend/messages/uniworx/categories/news/en-eu.msg diff --git a/messages/uniworx/categories/print/de-de-formal.msg b/backend/messages/uniworx/categories/print/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/print/de-de-formal.msg rename to backend/messages/uniworx/categories/print/de-de-formal.msg diff --git a/messages/uniworx/categories/print/en-eu.msg b/backend/messages/uniworx/categories/print/en-eu.msg similarity index 100% rename from messages/uniworx/categories/print/en-eu.msg rename to backend/messages/uniworx/categories/print/en-eu.msg diff --git a/messages/uniworx/categories/qualification/de-de-formal.msg b/backend/messages/uniworx/categories/qualification/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/qualification/de-de-formal.msg rename to backend/messages/uniworx/categories/qualification/de-de-formal.msg diff --git a/messages/uniworx/categories/qualification/en-eu.msg b/backend/messages/uniworx/categories/qualification/en-eu.msg similarity index 100% rename from messages/uniworx/categories/qualification/en-eu.msg rename to backend/messages/uniworx/categories/qualification/en-eu.msg diff --git a/messages/uniworx/categories/school/de-de-formal.msg b/backend/messages/uniworx/categories/school/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/school/de-de-formal.msg rename to backend/messages/uniworx/categories/school/de-de-formal.msg diff --git a/messages/uniworx/categories/school/en-eu.msg b/backend/messages/uniworx/categories/school/en-eu.msg similarity index 100% rename from messages/uniworx/categories/school/en-eu.msg rename to backend/messages/uniworx/categories/school/en-eu.msg diff --git a/messages/uniworx/categories/send/send_notifications/de-de-formal.msg b/backend/messages/uniworx/categories/send/send_notifications/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/send/send_notifications/de-de-formal.msg rename to backend/messages/uniworx/categories/send/send_notifications/de-de-formal.msg diff --git a/messages/uniworx/categories/send/send_notifications/en-eu.msg b/backend/messages/uniworx/categories/send/send_notifications/en-eu.msg similarity index 100% rename from messages/uniworx/categories/send/send_notifications/en-eu.msg rename to backend/messages/uniworx/categories/send/send_notifications/en-eu.msg diff --git a/messages/uniworx/categories/settings/auth_settings/de-de-formal.msg b/backend/messages/uniworx/categories/settings/auth_settings/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/settings/auth_settings/de-de-formal.msg rename to backend/messages/uniworx/categories/settings/auth_settings/de-de-formal.msg diff --git a/messages/uniworx/categories/settings/auth_settings/en-eu.msg b/backend/messages/uniworx/categories/settings/auth_settings/en-eu.msg similarity index 100% rename from messages/uniworx/categories/settings/auth_settings/en-eu.msg rename to backend/messages/uniworx/categories/settings/auth_settings/en-eu.msg diff --git a/messages/uniworx/categories/settings/csv_options/de-de-formal.msg b/backend/messages/uniworx/categories/settings/csv_options/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/settings/csv_options/de-de-formal.msg rename to backend/messages/uniworx/categories/settings/csv_options/de-de-formal.msg diff --git a/messages/uniworx/categories/settings/csv_options/en-eu.msg b/backend/messages/uniworx/categories/settings/csv_options/en-eu.msg similarity index 100% rename from messages/uniworx/categories/settings/csv_options/en-eu.msg rename to backend/messages/uniworx/categories/settings/csv_options/en-eu.msg diff --git a/messages/uniworx/categories/settings/de-de-formal.msg b/backend/messages/uniworx/categories/settings/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/settings/de-de-formal.msg rename to backend/messages/uniworx/categories/settings/de-de-formal.msg diff --git a/messages/uniworx/categories/settings/en-eu.msg b/backend/messages/uniworx/categories/settings/en-eu.msg similarity index 100% rename from messages/uniworx/categories/settings/en-eu.msg rename to backend/messages/uniworx/categories/settings/en-eu.msg diff --git a/messages/uniworx/categories/settings/personal_settings/de-de-formal.msg b/backend/messages/uniworx/categories/settings/personal_settings/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/settings/personal_settings/de-de-formal.msg rename to backend/messages/uniworx/categories/settings/personal_settings/de-de-formal.msg diff --git a/messages/uniworx/categories/settings/personal_settings/en-eu.msg b/backend/messages/uniworx/categories/settings/personal_settings/en-eu.msg similarity index 100% rename from messages/uniworx/categories/settings/personal_settings/en-eu.msg rename to backend/messages/uniworx/categories/settings/personal_settings/en-eu.msg diff --git a/messages/uniworx/categories/system_message/de-de-formal.msg b/backend/messages/uniworx/categories/system_message/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/system_message/de-de-formal.msg rename to backend/messages/uniworx/categories/system_message/de-de-formal.msg diff --git a/messages/uniworx/categories/system_message/en-eu.msg b/backend/messages/uniworx/categories/system_message/en-eu.msg similarity index 100% rename from messages/uniworx/categories/system_message/en-eu.msg rename to backend/messages/uniworx/categories/system_message/en-eu.msg diff --git a/messages/uniworx/categories/term/de-de-formal.msg b/backend/messages/uniworx/categories/term/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/term/de-de-formal.msg rename to backend/messages/uniworx/categories/term/de-de-formal.msg diff --git a/messages/uniworx/categories/term/en-eu.msg b/backend/messages/uniworx/categories/term/en-eu.msg similarity index 100% rename from messages/uniworx/categories/term/en-eu.msg rename to backend/messages/uniworx/categories/term/en-eu.msg diff --git a/messages/uniworx/categories/user/de-de-formal.msg b/backend/messages/uniworx/categories/user/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/user/de-de-formal.msg rename to backend/messages/uniworx/categories/user/de-de-formal.msg diff --git a/messages/uniworx/categories/user/en-eu.msg b/backend/messages/uniworx/categories/user/en-eu.msg similarity index 100% rename from messages/uniworx/categories/user/en-eu.msg rename to backend/messages/uniworx/categories/user/en-eu.msg diff --git a/messages/uniworx/categories/yesod_middleware/de-de-formal.msg b/backend/messages/uniworx/categories/yesod_middleware/de-de-formal.msg similarity index 100% rename from messages/uniworx/categories/yesod_middleware/de-de-formal.msg rename to backend/messages/uniworx/categories/yesod_middleware/de-de-formal.msg diff --git a/messages/uniworx/categories/yesod_middleware/en-eu.msg b/backend/messages/uniworx/categories/yesod_middleware/en-eu.msg similarity index 100% rename from messages/uniworx/categories/yesod_middleware/en-eu.msg rename to backend/messages/uniworx/categories/yesod_middleware/en-eu.msg diff --git a/messages/uniworx/misc/de-de-formal.msg b/backend/messages/uniworx/misc/de-de-formal.msg similarity index 100% rename from messages/uniworx/misc/de-de-formal.msg rename to backend/messages/uniworx/misc/de-de-formal.msg diff --git a/messages/uniworx/misc/en-eu.msg b/backend/messages/uniworx/misc/en-eu.msg similarity index 100% rename from messages/uniworx/misc/en-eu.msg rename to backend/messages/uniworx/misc/en-eu.msg diff --git a/messages/uniworx/test/de-de-formal.msg b/backend/messages/uniworx/test/de-de-formal.msg similarity index 100% rename from messages/uniworx/test/de-de-formal.msg rename to backend/messages/uniworx/test/de-de-formal.msg diff --git a/messages/uniworx/test/en-eu.msg b/backend/messages/uniworx/test/en-eu.msg similarity index 100% rename from messages/uniworx/test/en-eu.msg rename to backend/messages/uniworx/test/en-eu.msg diff --git a/messages/uniworx/utils/authorship_statement/de-de-formal.msg b/backend/messages/uniworx/utils/authorship_statement/de-de-formal.msg similarity index 100% rename from messages/uniworx/utils/authorship_statement/de-de-formal.msg rename to backend/messages/uniworx/utils/authorship_statement/de-de-formal.msg diff --git a/messages/uniworx/utils/authorship_statement/en-eu.msg b/backend/messages/uniworx/utils/authorship_statement/en-eu.msg similarity index 100% rename from messages/uniworx/utils/authorship_statement/en-eu.msg rename to backend/messages/uniworx/utils/authorship_statement/en-eu.msg diff --git a/messages/uniworx/utils/buttons/de-de-formal.msg b/backend/messages/uniworx/utils/buttons/de-de-formal.msg similarity index 100% rename from messages/uniworx/utils/buttons/de-de-formal.msg rename to backend/messages/uniworx/utils/buttons/de-de-formal.msg diff --git a/messages/uniworx/utils/buttons/en-eu.msg b/backend/messages/uniworx/utils/buttons/en-eu.msg similarity index 100% rename from messages/uniworx/utils/buttons/en-eu.msg rename to backend/messages/uniworx/utils/buttons/en-eu.msg diff --git a/messages/uniworx/utils/handler_form/de-de-formal.msg b/backend/messages/uniworx/utils/handler_form/de-de-formal.msg similarity index 100% rename from messages/uniworx/utils/handler_form/de-de-formal.msg rename to backend/messages/uniworx/utils/handler_form/de-de-formal.msg diff --git a/messages/uniworx/utils/handler_form/en-eu.msg b/backend/messages/uniworx/utils/handler_form/en-eu.msg similarity index 100% rename from messages/uniworx/utils/handler_form/en-eu.msg rename to backend/messages/uniworx/utils/handler_form/en-eu.msg diff --git a/messages/uniworx/utils/handler_form/massinput/de-de-formal.msg b/backend/messages/uniworx/utils/handler_form/massinput/de-de-formal.msg similarity index 100% rename from messages/uniworx/utils/handler_form/massinput/de-de-formal.msg rename to backend/messages/uniworx/utils/handler_form/massinput/de-de-formal.msg diff --git a/messages/uniworx/utils/handler_form/massinput/en-eu.msg b/backend/messages/uniworx/utils/handler_form/massinput/en-eu.msg similarity index 100% rename from messages/uniworx/utils/handler_form/massinput/en-eu.msg rename to backend/messages/uniworx/utils/handler_form/massinput/en-eu.msg diff --git a/messages/uniworx/utils/handler_form/occurrences/de-de-formal.msg b/backend/messages/uniworx/utils/handler_form/occurrences/de-de-formal.msg similarity index 100% rename from messages/uniworx/utils/handler_form/occurrences/de-de-formal.msg rename to backend/messages/uniworx/utils/handler_form/occurrences/de-de-formal.msg diff --git a/messages/uniworx/utils/handler_form/occurrences/en-eu.msg b/backend/messages/uniworx/utils/handler_form/occurrences/en-eu.msg similarity index 100% rename from messages/uniworx/utils/handler_form/occurrences/en-eu.msg rename to backend/messages/uniworx/utils/handler_form/occurrences/en-eu.msg diff --git a/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg b/backend/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg similarity index 100% rename from messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg rename to backend/messages/uniworx/utils/navigation/breadcrumbs/de-de-formal.msg diff --git a/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg b/backend/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg similarity index 100% rename from messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg rename to backend/messages/uniworx/utils/navigation/breadcrumbs/en-eu.msg diff --git a/messages/uniworx/utils/navigation/menu/de-de-formal.msg b/backend/messages/uniworx/utils/navigation/menu/de-de-formal.msg similarity index 100% rename from messages/uniworx/utils/navigation/menu/de-de-formal.msg rename to backend/messages/uniworx/utils/navigation/menu/de-de-formal.msg diff --git a/messages/uniworx/utils/navigation/menu/en-eu.msg b/backend/messages/uniworx/utils/navigation/menu/en-eu.msg similarity index 100% rename from messages/uniworx/utils/navigation/menu/en-eu.msg rename to backend/messages/uniworx/utils/navigation/menu/en-eu.msg diff --git a/messages/uniworx/utils/rating/de-de-formal.msg b/backend/messages/uniworx/utils/rating/de-de-formal.msg similarity index 100% rename from messages/uniworx/utils/rating/de-de-formal.msg rename to backend/messages/uniworx/utils/rating/de-de-formal.msg diff --git a/messages/uniworx/utils/rating/en-eu.msg b/backend/messages/uniworx/utils/rating/en-eu.msg similarity index 100% rename from messages/uniworx/utils/rating/en-eu.msg rename to backend/messages/uniworx/utils/rating/en-eu.msg diff --git a/messages/uniworx/utils/site_layout/de-de-formal.msg b/backend/messages/uniworx/utils/site_layout/de-de-formal.msg similarity index 100% rename from messages/uniworx/utils/site_layout/de-de-formal.msg rename to backend/messages/uniworx/utils/site_layout/de-de-formal.msg diff --git a/messages/uniworx/utils/site_layout/en-eu.msg b/backend/messages/uniworx/utils/site_layout/en-eu.msg similarity index 100% rename from messages/uniworx/utils/site_layout/en-eu.msg rename to backend/messages/uniworx/utils/site_layout/en-eu.msg diff --git a/messages/uniworx/utils/table_column/de-de-formal.msg b/backend/messages/uniworx/utils/table_column/de-de-formal.msg similarity index 100% rename from messages/uniworx/utils/table_column/de-de-formal.msg rename to backend/messages/uniworx/utils/table_column/de-de-formal.msg diff --git a/messages/uniworx/utils/table_column/en-eu.msg b/backend/messages/uniworx/utils/table_column/en-eu.msg similarity index 100% rename from messages/uniworx/utils/table_column/en-eu.msg rename to backend/messages/uniworx/utils/table_column/en-eu.msg diff --git a/messages/uniworx/utils/table_pagination/de-de-formal.msg b/backend/messages/uniworx/utils/table_pagination/de-de-formal.msg similarity index 100% rename from messages/uniworx/utils/table_pagination/de-de-formal.msg rename to backend/messages/uniworx/utils/table_pagination/de-de-formal.msg diff --git a/messages/uniworx/utils/table_pagination/en-eu.msg b/backend/messages/uniworx/utils/table_pagination/en-eu.msg similarity index 100% rename from messages/uniworx/utils/table_pagination/en-eu.msg rename to backend/messages/uniworx/utils/table_pagination/en-eu.msg diff --git a/messages/uniworx/utils/utils/de-de-formal.msg b/backend/messages/uniworx/utils/utils/de-de-formal.msg similarity index 100% rename from messages/uniworx/utils/utils/de-de-formal.msg rename to backend/messages/uniworx/utils/utils/de-de-formal.msg diff --git a/messages/uniworx/utils/utils/en-eu.msg b/backend/messages/uniworx/utils/utils/en-eu.msg similarity index 100% rename from messages/uniworx/utils/utils/en-eu.msg rename to backend/messages/uniworx/utils/utils/en-eu.msg diff --git a/missing-translations.sh b/backend/missing-translations.sh similarity index 100% rename from missing-translations.sh rename to backend/missing-translations.sh diff --git a/models/audit.model b/backend/models/audit.model similarity index 100% rename from models/audit.model rename to backend/models/audit.model diff --git a/models/authorship-statements.model b/backend/models/authorship-statements.model similarity index 100% rename from models/authorship-statements.model rename to backend/models/authorship-statements.model diff --git a/models/avs.model b/backend/models/avs.model similarity index 100% rename from models/avs.model rename to backend/models/avs.model diff --git a/models/changelog.model b/backend/models/changelog.model similarity index 100% rename from models/changelog.model rename to backend/models/changelog.model diff --git a/models/company.model b/backend/models/company.model similarity index 100% rename from models/company.model rename to backend/models/company.model diff --git a/models/config.model b/backend/models/config.model similarity index 100% rename from models/config.model rename to backend/models/config.model diff --git a/models/courses.model b/backend/models/courses.model similarity index 100% rename from models/courses.model rename to backend/models/courses.model diff --git a/models/courses/favourite.model b/backend/models/courses/favourite.model similarity index 100% rename from models/courses/favourite.model rename to backend/models/courses/favourite.model diff --git a/models/courses/materials.model b/backend/models/courses/materials.model similarity index 100% rename from models/courses/materials.model rename to backend/models/courses/materials.model diff --git a/models/courses/news.model b/backend/models/courses/news.model similarity index 100% rename from models/courses/news.model rename to backend/models/courses/news.model diff --git a/models/exam-office.model b/backend/models/exam-office.model similarity index 100% rename from models/exam-office.model rename to backend/models/exam-office.model diff --git a/models/exam-office/exam-labels.model b/backend/models/exam-office/exam-labels.model similarity index 100% rename from models/exam-office/exam-labels.model rename to backend/models/exam-office/exam-labels.model diff --git a/models/exams.model b/backend/models/exams.model similarity index 100% rename from models/exams.model rename to backend/models/exams.model diff --git a/models/external-apis.model b/backend/models/external-apis.model similarity index 100% rename from models/external-apis.model rename to backend/models/external-apis.model diff --git a/models/external-exams.model b/backend/models/external-exams.model similarity index 100% rename from models/external-exams.model rename to backend/models/external-exams.model diff --git a/models/files.model b/backend/models/files.model similarity index 100% rename from models/files.model rename to backend/models/files.model diff --git a/models/invitations.model b/backend/models/invitations.model similarity index 100% rename from models/invitations.model rename to backend/models/invitations.model diff --git a/models/jobs.model b/backend/models/jobs.model similarity index 100% rename from models/jobs.model rename to backend/models/jobs.model diff --git a/models/lms.model b/backend/models/lms.model similarity index 100% rename from models/lms.model rename to backend/models/lms.model diff --git a/models/mail.model b/backend/models/mail.model similarity index 100% rename from models/mail.model rename to backend/models/mail.model diff --git a/models/print.model b/backend/models/print.model similarity index 100% rename from models/print.model rename to backend/models/print.model diff --git a/models/schools.model b/backend/models/schools.model similarity index 100% rename from models/schools.model rename to backend/models/schools.model diff --git a/models/sheets.model b/backend/models/sheets.model similarity index 100% rename from models/sheets.model rename to backend/models/sheets.model diff --git a/models/study-features.model b/backend/models/study-features.model similarity index 100% rename from models/study-features.model rename to backend/models/study-features.model diff --git a/models/submissions.model b/backend/models/submissions.model similarity index 100% rename from models/submissions.model rename to backend/models/submissions.model diff --git a/models/system-messages.model b/backend/models/system-messages.model similarity index 100% rename from models/system-messages.model rename to backend/models/system-messages.model diff --git a/models/terms.model b/backend/models/terms.model similarity index 100% rename from models/terms.model rename to backend/models/terms.model diff --git a/models/tutorials.model b/backend/models/tutorials.model similarity index 100% rename from models/tutorials.model rename to backend/models/tutorials.model diff --git a/models/users.model b/backend/models/users.model similarity index 100% rename from models/users.model rename to backend/models/users.model diff --git a/package.yaml b/backend/package.yaml similarity index 100% rename from package.yaml rename to backend/package.yaml diff --git a/routes b/backend/routes similarity index 100% rename from routes rename to backend/routes diff --git a/src/Application.hs b/backend/src/Application.hs similarity index 100% rename from src/Application.hs rename to backend/src/Application.hs diff --git a/src/Audit.hs b/backend/src/Audit.hs similarity index 100% rename from src/Audit.hs rename to backend/src/Audit.hs diff --git a/src/Audit/Types.hs b/backend/src/Audit/Types.hs similarity index 100% rename from src/Audit/Types.hs rename to backend/src/Audit/Types.hs diff --git a/src/Auth/Dummy.hs b/backend/src/Auth/Dummy.hs similarity index 100% rename from src/Auth/Dummy.hs rename to backend/src/Auth/Dummy.hs diff --git a/src/Auth/LDAP.hs b/backend/src/Auth/LDAP.hs similarity index 100% rename from src/Auth/LDAP.hs rename to backend/src/Auth/LDAP.hs diff --git a/src/Auth/LDAP/AD.hs b/backend/src/Auth/LDAP/AD.hs similarity index 100% rename from src/Auth/LDAP/AD.hs rename to backend/src/Auth/LDAP/AD.hs diff --git a/src/Auth/PWHash.hs b/backend/src/Auth/PWHash.hs similarity index 100% rename from src/Auth/PWHash.hs rename to backend/src/Auth/PWHash.hs diff --git a/src/Colonnade/Instances.hs b/backend/src/Colonnade/Instances.hs similarity index 100% rename from src/Colonnade/Instances.hs rename to backend/src/Colonnade/Instances.hs diff --git a/src/Control/Arrow/Instances.hs b/backend/src/Control/Arrow/Instances.hs similarity index 100% rename from src/Control/Arrow/Instances.hs rename to backend/src/Control/Arrow/Instances.hs diff --git a/src/Control/Monad/Catch/Instances.hs b/backend/src/Control/Monad/Catch/Instances.hs similarity index 100% rename from src/Control/Monad/Catch/Instances.hs rename to backend/src/Control/Monad/Catch/Instances.hs diff --git a/src/Control/Monad/Trans/Except/Instances.hs b/backend/src/Control/Monad/Trans/Except/Instances.hs similarity index 100% rename from src/Control/Monad/Trans/Except/Instances.hs rename to backend/src/Control/Monad/Trans/Except/Instances.hs diff --git a/src/Control/Monad/Trans/Memo/StateCache/Instances.hs b/backend/src/Control/Monad/Trans/Memo/StateCache/Instances.hs similarity index 100% rename from src/Control/Monad/Trans/Memo/StateCache/Instances.hs rename to backend/src/Control/Monad/Trans/Memo/StateCache/Instances.hs diff --git a/src/Control/Monad/Trans/Random/Instances.hs b/backend/src/Control/Monad/Trans/Random/Instances.hs similarity index 100% rename from src/Control/Monad/Trans/Random/Instances.hs rename to backend/src/Control/Monad/Trans/Random/Instances.hs diff --git a/src/Cron.hs b/backend/src/Cron.hs similarity index 100% rename from src/Cron.hs rename to backend/src/Cron.hs diff --git a/src/Cron/Types.hs b/backend/src/Cron/Types.hs similarity index 100% rename from src/Cron/Types.hs rename to backend/src/Cron/Types.hs diff --git a/src/Crypto/Hash/Instances.hs b/backend/src/Crypto/Hash/Instances.hs similarity index 100% rename from src/Crypto/Hash/Instances.hs rename to backend/src/Crypto/Hash/Instances.hs diff --git a/src/Crypto/Random/Instances.hs b/backend/src/Crypto/Random/Instances.hs similarity index 100% rename from src/Crypto/Random/Instances.hs rename to backend/src/Crypto/Random/Instances.hs diff --git a/src/Crypto/Saltine/Instances.hs b/backend/src/Crypto/Saltine/Instances.hs similarity index 100% rename from src/Crypto/Saltine/Instances.hs rename to backend/src/Crypto/Saltine/Instances.hs diff --git a/src/CryptoID.hs b/backend/src/CryptoID.hs similarity index 100% rename from src/CryptoID.hs rename to backend/src/CryptoID.hs diff --git a/src/CryptoID/Cached.hs b/backend/src/CryptoID/Cached.hs similarity index 100% rename from src/CryptoID/Cached.hs rename to backend/src/CryptoID/Cached.hs diff --git a/src/CryptoID/TH.hs b/backend/src/CryptoID/TH.hs similarity index 100% rename from src/CryptoID/TH.hs rename to backend/src/CryptoID/TH.hs diff --git a/src/Data/Aeson/Types/Instances.hs b/backend/src/Data/Aeson/Types/Instances.hs similarity index 100% rename from src/Data/Aeson/Types/Instances.hs rename to backend/src/Data/Aeson/Types/Instances.hs diff --git a/src/Data/Bool/Instances.hs b/backend/src/Data/Bool/Instances.hs similarity index 100% rename from src/Data/Bool/Instances.hs rename to backend/src/Data/Bool/Instances.hs diff --git a/src/Data/CaseInsensitive/Instances.hs b/backend/src/Data/CaseInsensitive/Instances.hs similarity index 100% rename from src/Data/CaseInsensitive/Instances.hs rename to backend/src/Data/CaseInsensitive/Instances.hs diff --git a/src/Data/CryptoID/Instances.hs b/backend/src/Data/CryptoID/Instances.hs similarity index 100% rename from src/Data/CryptoID/Instances.hs rename to backend/src/Data/CryptoID/Instances.hs diff --git a/src/Data/Encoding/Instances.hs b/backend/src/Data/Encoding/Instances.hs similarity index 100% rename from src/Data/Encoding/Instances.hs rename to backend/src/Data/Encoding/Instances.hs diff --git a/src/Data/Fixed/Instances.hs b/backend/src/Data/Fixed/Instances.hs similarity index 100% rename from src/Data/Fixed/Instances.hs rename to backend/src/Data/Fixed/Instances.hs diff --git a/src/Data/HashSet/Instances.hs b/backend/src/Data/HashSet/Instances.hs similarity index 100% rename from src/Data/HashSet/Instances.hs rename to backend/src/Data/HashSet/Instances.hs diff --git a/src/Data/Maybe/Instances.hs b/backend/src/Data/Maybe/Instances.hs similarity index 100% rename from src/Data/Maybe/Instances.hs rename to backend/src/Data/Maybe/Instances.hs diff --git a/src/Data/MonoTraversable/Instances.hs b/backend/src/Data/MonoTraversable/Instances.hs similarity index 100% rename from src/Data/MonoTraversable/Instances.hs rename to backend/src/Data/MonoTraversable/Instances.hs diff --git a/src/Data/Monoid/Instances.hs b/backend/src/Data/Monoid/Instances.hs similarity index 100% rename from src/Data/Monoid/Instances.hs rename to backend/src/Data/Monoid/Instances.hs diff --git a/src/Data/MultiSet/Instances.hs b/backend/src/Data/MultiSet/Instances.hs similarity index 100% rename from src/Data/MultiSet/Instances.hs rename to backend/src/Data/MultiSet/Instances.hs diff --git a/src/Data/NonNull/Instances.hs b/backend/src/Data/NonNull/Instances.hs similarity index 100% rename from src/Data/NonNull/Instances.hs rename to backend/src/Data/NonNull/Instances.hs diff --git a/src/Data/Scientific/Instances.hs b/backend/src/Data/Scientific/Instances.hs similarity index 100% rename from src/Data/Scientific/Instances.hs rename to backend/src/Data/Scientific/Instances.hs diff --git a/src/Data/SemVer/Instances.hs b/backend/src/Data/SemVer/Instances.hs similarity index 100% rename from src/Data/SemVer/Instances.hs rename to backend/src/Data/SemVer/Instances.hs diff --git a/src/Data/Set/Instances.hs b/backend/src/Data/Set/Instances.hs similarity index 100% rename from src/Data/Set/Instances.hs rename to backend/src/Data/Set/Instances.hs diff --git a/src/Data/Sum/Instances.hs b/backend/src/Data/Sum/Instances.hs similarity index 100% rename from src/Data/Sum/Instances.hs rename to backend/src/Data/Sum/Instances.hs diff --git a/src/Data/Time/Calendar/Instances.hs b/backend/src/Data/Time/Calendar/Instances.hs similarity index 100% rename from src/Data/Time/Calendar/Instances.hs rename to backend/src/Data/Time/Calendar/Instances.hs diff --git a/src/Data/Time/Clock/Instances.hs b/backend/src/Data/Time/Clock/Instances.hs similarity index 100% rename from src/Data/Time/Clock/Instances.hs rename to backend/src/Data/Time/Clock/Instances.hs diff --git a/src/Data/Time/Clock/Instances/TH.hs b/backend/src/Data/Time/Clock/Instances/TH.hs similarity index 100% rename from src/Data/Time/Clock/Instances/TH.hs rename to backend/src/Data/Time/Clock/Instances/TH.hs diff --git a/src/Data/Time/Format/Instances.hs b/backend/src/Data/Time/Format/Instances.hs similarity index 100% rename from src/Data/Time/Format/Instances.hs rename to backend/src/Data/Time/Format/Instances.hs diff --git a/src/Data/Time/LocalTime/Instances.hs b/backend/src/Data/Time/LocalTime/Instances.hs similarity index 100% rename from src/Data/Time/LocalTime/Instances.hs rename to backend/src/Data/Time/LocalTime/Instances.hs diff --git a/src/Data/UUID/Instances.hs b/backend/src/Data/UUID/Instances.hs similarity index 100% rename from src/Data/UUID/Instances.hs rename to backend/src/Data/UUID/Instances.hs diff --git a/src/Data/Universe/Instances/Reverse/Hashable.hs b/backend/src/Data/Universe/Instances/Reverse/Hashable.hs similarity index 100% rename from src/Data/Universe/Instances/Reverse/Hashable.hs rename to backend/src/Data/Universe/Instances/Reverse/Hashable.hs diff --git a/src/Data/Universe/Instances/Reverse/JSON.hs b/backend/src/Data/Universe/Instances/Reverse/JSON.hs similarity index 100% rename from src/Data/Universe/Instances/Reverse/JSON.hs rename to backend/src/Data/Universe/Instances/Reverse/JSON.hs diff --git a/src/Data/Universe/Instances/Reverse/MonoTraversable.hs b/backend/src/Data/Universe/Instances/Reverse/MonoTraversable.hs similarity index 100% rename from src/Data/Universe/Instances/Reverse/MonoTraversable.hs rename to backend/src/Data/Universe/Instances/Reverse/MonoTraversable.hs diff --git a/src/Data/Universe/Instances/Reverse/WithIndex.hs b/backend/src/Data/Universe/Instances/Reverse/WithIndex.hs similarity index 100% rename from src/Data/Universe/Instances/Reverse/WithIndex.hs rename to backend/src/Data/Universe/Instances/Reverse/WithIndex.hs diff --git a/src/Data/Universe/TH.hs b/backend/src/Data/Universe/TH.hs similarity index 100% rename from src/Data/Universe/TH.hs rename to backend/src/Data/Universe/TH.hs diff --git a/src/Data/Void/Instances.hs b/backend/src/Data/Void/Instances.hs similarity index 100% rename from src/Data/Void/Instances.hs rename to backend/src/Data/Void/Instances.hs diff --git a/src/Data/Word/Word24/Instances.hs b/backend/src/Data/Word/Word24/Instances.hs similarity index 100% rename from src/Data/Word/Word24/Instances.hs rename to backend/src/Data/Word/Word24/Instances.hs diff --git a/src/Database/Esqueleto/Instances.hs b/backend/src/Database/Esqueleto/Instances.hs similarity index 100% rename from src/Database/Esqueleto/Instances.hs rename to backend/src/Database/Esqueleto/Instances.hs diff --git a/src/Database/Esqueleto/Utils.hs b/backend/src/Database/Esqueleto/Utils.hs similarity index 100% rename from src/Database/Esqueleto/Utils.hs rename to backend/src/Database/Esqueleto/Utils.hs diff --git a/src/Database/Esqueleto/Utils/TH.hs b/backend/src/Database/Esqueleto/Utils/TH.hs similarity index 100% rename from src/Database/Esqueleto/Utils/TH.hs rename to backend/src/Database/Esqueleto/Utils/TH.hs diff --git a/src/Database/Persist/Class/Instances.hs b/backend/src/Database/Persist/Class/Instances.hs similarity index 100% rename from src/Database/Persist/Class/Instances.hs rename to backend/src/Database/Persist/Class/Instances.hs diff --git a/src/Database/Persist/Sql/Types/Instances.hs b/backend/src/Database/Persist/Sql/Types/Instances.hs similarity index 100% rename from src/Database/Persist/Sql/Types/Instances.hs rename to backend/src/Database/Persist/Sql/Types/Instances.hs diff --git a/src/Database/Persist/TH/Directory.hs b/backend/src/Database/Persist/TH/Directory.hs similarity index 100% rename from src/Database/Persist/TH/Directory.hs rename to backend/src/Database/Persist/TH/Directory.hs diff --git a/src/Database/Persist/Types/Instances.hs b/backend/src/Database/Persist/Types/Instances.hs similarity index 100% rename from src/Database/Persist/Types/Instances.hs rename to backend/src/Database/Persist/Types/Instances.hs diff --git a/src/Foundation.hs b/backend/src/Foundation.hs similarity index 100% rename from src/Foundation.hs rename to backend/src/Foundation.hs diff --git a/src/Foundation/Authorization.hs b/backend/src/Foundation/Authorization.hs similarity index 100% rename from src/Foundation/Authorization.hs rename to backend/src/Foundation/Authorization.hs diff --git a/src/Foundation/DB.hs b/backend/src/Foundation/DB.hs similarity index 100% rename from src/Foundation/DB.hs rename to backend/src/Foundation/DB.hs diff --git a/src/Foundation/I18n.hs b/backend/src/Foundation/I18n.hs similarity index 100% rename from src/Foundation/I18n.hs rename to backend/src/Foundation/I18n.hs diff --git a/src/Foundation/I18n/TH.hs b/backend/src/Foundation/I18n/TH.hs similarity index 100% rename from src/Foundation/I18n/TH.hs rename to backend/src/Foundation/I18n/TH.hs diff --git a/src/Foundation/Instances.hs b/backend/src/Foundation/Instances.hs similarity index 100% rename from src/Foundation/Instances.hs rename to backend/src/Foundation/Instances.hs diff --git a/src/Foundation/Instances/ButtonClass.hs b/backend/src/Foundation/Instances/ButtonClass.hs similarity index 100% rename from src/Foundation/Instances/ButtonClass.hs rename to backend/src/Foundation/Instances/ButtonClass.hs diff --git a/src/Foundation/Navigation.hs b/backend/src/Foundation/Navigation.hs similarity index 100% rename from src/Foundation/Navigation.hs rename to backend/src/Foundation/Navigation.hs diff --git a/src/Foundation/Routes.hs b/backend/src/Foundation/Routes.hs similarity index 100% rename from src/Foundation/Routes.hs rename to backend/src/Foundation/Routes.hs diff --git a/src/Foundation/Routes/Definitions.hs b/backend/src/Foundation/Routes/Definitions.hs similarity index 100% rename from src/Foundation/Routes/Definitions.hs rename to backend/src/Foundation/Routes/Definitions.hs diff --git a/src/Foundation/Servant.hs b/backend/src/Foundation/Servant.hs similarity index 100% rename from src/Foundation/Servant.hs rename to backend/src/Foundation/Servant.hs diff --git a/src/Foundation/Servant/Types.hs b/backend/src/Foundation/Servant/Types.hs similarity index 100% rename from src/Foundation/Servant/Types.hs rename to backend/src/Foundation/Servant/Types.hs diff --git a/src/Foundation/SiteLayout.hs b/backend/src/Foundation/SiteLayout.hs similarity index 100% rename from src/Foundation/SiteLayout.hs rename to backend/src/Foundation/SiteLayout.hs diff --git a/src/Foundation/Type.hs b/backend/src/Foundation/Type.hs similarity index 100% rename from src/Foundation/Type.hs rename to backend/src/Foundation/Type.hs diff --git a/src/Foundation/Types.hs b/backend/src/Foundation/Types.hs similarity index 100% rename from src/Foundation/Types.hs rename to backend/src/Foundation/Types.hs diff --git a/src/Foundation/Yesod/Auth.hs b/backend/src/Foundation/Yesod/Auth.hs similarity index 100% rename from src/Foundation/Yesod/Auth.hs rename to backend/src/Foundation/Yesod/Auth.hs diff --git a/src/Foundation/Yesod/ErrorHandler.hs b/backend/src/Foundation/Yesod/ErrorHandler.hs similarity index 100% rename from src/Foundation/Yesod/ErrorHandler.hs rename to backend/src/Foundation/Yesod/ErrorHandler.hs diff --git a/src/Foundation/Yesod/Middleware.hs b/backend/src/Foundation/Yesod/Middleware.hs similarity index 100% rename from src/Foundation/Yesod/Middleware.hs rename to backend/src/Foundation/Yesod/Middleware.hs diff --git a/src/Foundation/Yesod/Persist.hs b/backend/src/Foundation/Yesod/Persist.hs similarity index 100% rename from src/Foundation/Yesod/Persist.hs rename to backend/src/Foundation/Yesod/Persist.hs diff --git a/src/Foundation/Yesod/Session.hs b/backend/src/Foundation/Yesod/Session.hs similarity index 100% rename from src/Foundation/Yesod/Session.hs rename to backend/src/Foundation/Yesod/Session.hs diff --git a/src/Foundation/Yesod/StaticContent.hs b/backend/src/Foundation/Yesod/StaticContent.hs similarity index 100% rename from src/Foundation/Yesod/StaticContent.hs rename to backend/src/Foundation/Yesod/StaticContent.hs diff --git a/src/Handler/Admin.hs b/backend/src/Handler/Admin.hs similarity index 100% rename from src/Handler/Admin.hs rename to backend/src/Handler/Admin.hs diff --git a/src/Handler/Admin/Avs.hs b/backend/src/Handler/Admin/Avs.hs similarity index 100% rename from src/Handler/Admin/Avs.hs rename to backend/src/Handler/Admin/Avs.hs diff --git a/src/Handler/Admin/Crontab.hs b/backend/src/Handler/Admin/Crontab.hs similarity index 100% rename from src/Handler/Admin/Crontab.hs rename to backend/src/Handler/Admin/Crontab.hs diff --git a/src/Handler/Admin/ErrorMessage.hs b/backend/src/Handler/Admin/ErrorMessage.hs similarity index 100% rename from src/Handler/Admin/ErrorMessage.hs rename to backend/src/Handler/Admin/ErrorMessage.hs diff --git a/src/Handler/Admin/Ldap.hs b/backend/src/Handler/Admin/Ldap.hs similarity index 100% rename from src/Handler/Admin/Ldap.hs rename to backend/src/Handler/Admin/Ldap.hs diff --git a/src/Handler/Admin/Test.hs b/backend/src/Handler/Admin/Test.hs similarity index 100% rename from src/Handler/Admin/Test.hs rename to backend/src/Handler/Admin/Test.hs diff --git a/src/Handler/Admin/Test/Download.hs b/backend/src/Handler/Admin/Test/Download.hs similarity index 100% rename from src/Handler/Admin/Test/Download.hs rename to backend/src/Handler/Admin/Test/Download.hs diff --git a/src/Handler/Admin/Tokens.hs b/backend/src/Handler/Admin/Tokens.hs similarity index 100% rename from src/Handler/Admin/Tokens.hs rename to backend/src/Handler/Admin/Tokens.hs diff --git a/src/Handler/ApiDocs.hs b/backend/src/Handler/ApiDocs.hs similarity index 100% rename from src/Handler/ApiDocs.hs rename to backend/src/Handler/ApiDocs.hs diff --git a/src/Handler/Course.hs b/backend/src/Handler/Course.hs similarity index 100% rename from src/Handler/Course.hs rename to backend/src/Handler/Course.hs diff --git a/src/Handler/Course/Communication.hs b/backend/src/Handler/Course/Communication.hs similarity index 100% rename from src/Handler/Course/Communication.hs rename to backend/src/Handler/Course/Communication.hs diff --git a/src/Handler/Course/Delete.hs b/backend/src/Handler/Course/Delete.hs similarity index 100% rename from src/Handler/Course/Delete.hs rename to backend/src/Handler/Course/Delete.hs diff --git a/src/Handler/Course/Edit.hs b/backend/src/Handler/Course/Edit.hs similarity index 100% rename from src/Handler/Course/Edit.hs rename to backend/src/Handler/Course/Edit.hs diff --git a/src/Handler/Course/Events.hs b/backend/src/Handler/Course/Events.hs similarity index 100% rename from src/Handler/Course/Events.hs rename to backend/src/Handler/Course/Events.hs diff --git a/src/Handler/Course/Events/Delete.hs b/backend/src/Handler/Course/Events/Delete.hs similarity index 100% rename from src/Handler/Course/Events/Delete.hs rename to backend/src/Handler/Course/Events/Delete.hs diff --git a/src/Handler/Course/Events/Edit.hs b/backend/src/Handler/Course/Events/Edit.hs similarity index 100% rename from src/Handler/Course/Events/Edit.hs rename to backend/src/Handler/Course/Events/Edit.hs diff --git a/src/Handler/Course/Events/Form.hs b/backend/src/Handler/Course/Events/Form.hs similarity index 100% rename from src/Handler/Course/Events/Form.hs rename to backend/src/Handler/Course/Events/Form.hs diff --git a/src/Handler/Course/Events/New.hs b/backend/src/Handler/Course/Events/New.hs similarity index 100% rename from src/Handler/Course/Events/New.hs rename to backend/src/Handler/Course/Events/New.hs diff --git a/src/Handler/Course/LecturerInvite.hs b/backend/src/Handler/Course/LecturerInvite.hs similarity index 100% rename from src/Handler/Course/LecturerInvite.hs rename to backend/src/Handler/Course/LecturerInvite.hs diff --git a/src/Handler/Course/List.hs b/backend/src/Handler/Course/List.hs similarity index 100% rename from src/Handler/Course/List.hs rename to backend/src/Handler/Course/List.hs diff --git a/src/Handler/Course/News.hs b/backend/src/Handler/Course/News.hs similarity index 100% rename from src/Handler/Course/News.hs rename to backend/src/Handler/Course/News.hs diff --git a/src/Handler/Course/News/Delete.hs b/backend/src/Handler/Course/News/Delete.hs similarity index 100% rename from src/Handler/Course/News/Delete.hs rename to backend/src/Handler/Course/News/Delete.hs diff --git a/src/Handler/Course/News/Download.hs b/backend/src/Handler/Course/News/Download.hs similarity index 100% rename from src/Handler/Course/News/Download.hs rename to backend/src/Handler/Course/News/Download.hs diff --git a/src/Handler/Course/News/Edit.hs b/backend/src/Handler/Course/News/Edit.hs similarity index 100% rename from src/Handler/Course/News/Edit.hs rename to backend/src/Handler/Course/News/Edit.hs diff --git a/src/Handler/Course/News/Form.hs b/backend/src/Handler/Course/News/Form.hs similarity index 100% rename from src/Handler/Course/News/Form.hs rename to backend/src/Handler/Course/News/Form.hs diff --git a/src/Handler/Course/News/New.hs b/backend/src/Handler/Course/News/New.hs similarity index 100% rename from src/Handler/Course/News/New.hs rename to backend/src/Handler/Course/News/New.hs diff --git a/src/Handler/Course/News/Show.hs b/backend/src/Handler/Course/News/Show.hs similarity index 100% rename from src/Handler/Course/News/Show.hs rename to backend/src/Handler/Course/News/Show.hs diff --git a/src/Handler/Course/ParticipantInvite.hs b/backend/src/Handler/Course/ParticipantInvite.hs similarity index 100% rename from src/Handler/Course/ParticipantInvite.hs rename to backend/src/Handler/Course/ParticipantInvite.hs diff --git a/src/Handler/Course/Register.hs b/backend/src/Handler/Course/Register.hs similarity index 100% rename from src/Handler/Course/Register.hs rename to backend/src/Handler/Course/Register.hs diff --git a/src/Handler/Course/Show.hs b/backend/src/Handler/Course/Show.hs similarity index 100% rename from src/Handler/Course/Show.hs rename to backend/src/Handler/Course/Show.hs diff --git a/src/Handler/Course/User.hs b/backend/src/Handler/Course/User.hs similarity index 100% rename from src/Handler/Course/User.hs rename to backend/src/Handler/Course/User.hs diff --git a/src/Handler/Course/Users.hs b/backend/src/Handler/Course/Users.hs similarity index 100% rename from src/Handler/Course/Users.hs rename to backend/src/Handler/Course/Users.hs diff --git a/src/Handler/CryptoIDDispatch.hs b/backend/src/Handler/CryptoIDDispatch.hs similarity index 100% rename from src/Handler/CryptoIDDispatch.hs rename to backend/src/Handler/CryptoIDDispatch.hs diff --git a/src/Handler/Error.hs b/backend/src/Handler/Error.hs similarity index 100% rename from src/Handler/Error.hs rename to backend/src/Handler/Error.hs diff --git a/src/Handler/Exam.hs b/backend/src/Handler/Exam.hs similarity index 100% rename from src/Handler/Exam.hs rename to backend/src/Handler/Exam.hs diff --git a/src/Handler/Exam/AddUser.hs b/backend/src/Handler/Exam/AddUser.hs similarity index 100% rename from src/Handler/Exam/AddUser.hs rename to backend/src/Handler/Exam/AddUser.hs diff --git a/src/Handler/Exam/AutoOccurrence.hs b/backend/src/Handler/Exam/AutoOccurrence.hs similarity index 100% rename from src/Handler/Exam/AutoOccurrence.hs rename to backend/src/Handler/Exam/AutoOccurrence.hs diff --git a/src/Handler/Exam/Correct.hs b/backend/src/Handler/Exam/Correct.hs similarity index 100% rename from src/Handler/Exam/Correct.hs rename to backend/src/Handler/Exam/Correct.hs diff --git a/src/Handler/Exam/CorrectorInvite.hs b/backend/src/Handler/Exam/CorrectorInvite.hs similarity index 100% rename from src/Handler/Exam/CorrectorInvite.hs rename to backend/src/Handler/Exam/CorrectorInvite.hs diff --git a/src/Handler/Exam/Edit.hs b/backend/src/Handler/Exam/Edit.hs similarity index 100% rename from src/Handler/Exam/Edit.hs rename to backend/src/Handler/Exam/Edit.hs diff --git a/src/Handler/Exam/Form.hs b/backend/src/Handler/Exam/Form.hs similarity index 100% rename from src/Handler/Exam/Form.hs rename to backend/src/Handler/Exam/Form.hs diff --git a/src/Handler/Exam/List.hs b/backend/src/Handler/Exam/List.hs similarity index 100% rename from src/Handler/Exam/List.hs rename to backend/src/Handler/Exam/List.hs diff --git a/src/Handler/Exam/New.hs b/backend/src/Handler/Exam/New.hs similarity index 100% rename from src/Handler/Exam/New.hs rename to backend/src/Handler/Exam/New.hs diff --git a/src/Handler/Exam/Register.hs b/backend/src/Handler/Exam/Register.hs similarity index 100% rename from src/Handler/Exam/Register.hs rename to backend/src/Handler/Exam/Register.hs diff --git a/src/Handler/Exam/RegistrationInvite.hs b/backend/src/Handler/Exam/RegistrationInvite.hs similarity index 100% rename from src/Handler/Exam/RegistrationInvite.hs rename to backend/src/Handler/Exam/RegistrationInvite.hs diff --git a/src/Handler/Exam/Show.hs b/backend/src/Handler/Exam/Show.hs similarity index 100% rename from src/Handler/Exam/Show.hs rename to backend/src/Handler/Exam/Show.hs diff --git a/src/Handler/Exam/Users.hs b/backend/src/Handler/Exam/Users.hs similarity index 100% rename from src/Handler/Exam/Users.hs rename to backend/src/Handler/Exam/Users.hs diff --git a/src/Handler/ExamOffice.hs b/backend/src/Handler/ExamOffice.hs similarity index 100% rename from src/Handler/ExamOffice.hs rename to backend/src/Handler/ExamOffice.hs diff --git a/src/Handler/ExamOffice/Course.hs b/backend/src/Handler/ExamOffice/Course.hs similarity index 100% rename from src/Handler/ExamOffice/Course.hs rename to backend/src/Handler/ExamOffice/Course.hs diff --git a/src/Handler/ExamOffice/Exam.hs b/backend/src/Handler/ExamOffice/Exam.hs similarity index 100% rename from src/Handler/ExamOffice/Exam.hs rename to backend/src/Handler/ExamOffice/Exam.hs diff --git a/src/Handler/ExamOffice/Exams.hs b/backend/src/Handler/ExamOffice/Exams.hs similarity index 100% rename from src/Handler/ExamOffice/Exams.hs rename to backend/src/Handler/ExamOffice/Exams.hs diff --git a/src/Handler/ExamOffice/ExternalExam.hs b/backend/src/Handler/ExamOffice/ExternalExam.hs similarity index 100% rename from src/Handler/ExamOffice/ExternalExam.hs rename to backend/src/Handler/ExamOffice/ExternalExam.hs diff --git a/src/Handler/ExamOffice/Fields.hs b/backend/src/Handler/ExamOffice/Fields.hs similarity index 100% rename from src/Handler/ExamOffice/Fields.hs rename to backend/src/Handler/ExamOffice/Fields.hs diff --git a/src/Handler/ExamOffice/Users.hs b/backend/src/Handler/ExamOffice/Users.hs similarity index 100% rename from src/Handler/ExamOffice/Users.hs rename to backend/src/Handler/ExamOffice/Users.hs diff --git a/src/Handler/ExternalExam.hs b/backend/src/Handler/ExternalExam.hs similarity index 100% rename from src/Handler/ExternalExam.hs rename to backend/src/Handler/ExternalExam.hs diff --git a/src/Handler/ExternalExam/Correct.hs b/backend/src/Handler/ExternalExam/Correct.hs similarity index 100% rename from src/Handler/ExternalExam/Correct.hs rename to backend/src/Handler/ExternalExam/Correct.hs diff --git a/src/Handler/ExternalExam/Edit.hs b/backend/src/Handler/ExternalExam/Edit.hs similarity index 100% rename from src/Handler/ExternalExam/Edit.hs rename to backend/src/Handler/ExternalExam/Edit.hs diff --git a/src/Handler/ExternalExam/Form.hs b/backend/src/Handler/ExternalExam/Form.hs similarity index 100% rename from src/Handler/ExternalExam/Form.hs rename to backend/src/Handler/ExternalExam/Form.hs diff --git a/src/Handler/ExternalExam/List.hs b/backend/src/Handler/ExternalExam/List.hs similarity index 100% rename from src/Handler/ExternalExam/List.hs rename to backend/src/Handler/ExternalExam/List.hs diff --git a/src/Handler/ExternalExam/New.hs b/backend/src/Handler/ExternalExam/New.hs similarity index 100% rename from src/Handler/ExternalExam/New.hs rename to backend/src/Handler/ExternalExam/New.hs diff --git a/src/Handler/ExternalExam/Show.hs b/backend/src/Handler/ExternalExam/Show.hs similarity index 100% rename from src/Handler/ExternalExam/Show.hs rename to backend/src/Handler/ExternalExam/Show.hs diff --git a/src/Handler/ExternalExam/StaffInvite.hs b/backend/src/Handler/ExternalExam/StaffInvite.hs similarity index 100% rename from src/Handler/ExternalExam/StaffInvite.hs rename to backend/src/Handler/ExternalExam/StaffInvite.hs diff --git a/src/Handler/ExternalExam/Users.hs b/backend/src/Handler/ExternalExam/Users.hs similarity index 100% rename from src/Handler/ExternalExam/Users.hs rename to backend/src/Handler/ExternalExam/Users.hs diff --git a/src/Handler/Firm.hs b/backend/src/Handler/Firm.hs similarity index 100% rename from src/Handler/Firm.hs rename to backend/src/Handler/Firm.hs diff --git a/src/Handler/Health.hs b/backend/src/Handler/Health.hs similarity index 100% rename from src/Handler/Health.hs rename to backend/src/Handler/Health.hs diff --git a/src/Handler/Health/Interface.hs b/backend/src/Handler/Health/Interface.hs similarity index 100% rename from src/Handler/Health/Interface.hs rename to backend/src/Handler/Health/Interface.hs diff --git a/src/Handler/Help.hs b/backend/src/Handler/Help.hs similarity index 100% rename from src/Handler/Help.hs rename to backend/src/Handler/Help.hs diff --git a/src/Handler/Info.hs b/backend/src/Handler/Info.hs similarity index 100% rename from src/Handler/Info.hs rename to backend/src/Handler/Info.hs diff --git a/src/Handler/Info/TH.hs b/backend/src/Handler/Info/TH.hs similarity index 100% rename from src/Handler/Info/TH.hs rename to backend/src/Handler/Info/TH.hs diff --git a/src/Handler/LMS.hs b/backend/src/Handler/LMS.hs similarity index 100% rename from src/Handler/LMS.hs rename to backend/src/Handler/LMS.hs diff --git a/src/Handler/LMS/Fake.hs b/backend/src/Handler/LMS/Fake.hs similarity index 100% rename from src/Handler/LMS/Fake.hs rename to backend/src/Handler/LMS/Fake.hs diff --git a/src/Handler/LMS/Learners.hs b/backend/src/Handler/LMS/Learners.hs similarity index 100% rename from src/Handler/LMS/Learners.hs rename to backend/src/Handler/LMS/Learners.hs diff --git a/src/Handler/LMS/Report.hs b/backend/src/Handler/LMS/Report.hs similarity index 100% rename from src/Handler/LMS/Report.hs rename to backend/src/Handler/LMS/Report.hs diff --git a/src/Handler/LMS/Users.hs b/backend/src/Handler/LMS/Users.hs similarity index 100% rename from src/Handler/LMS/Users.hs rename to backend/src/Handler/LMS/Users.hs diff --git a/src/Handler/Material.hs b/backend/src/Handler/Material.hs similarity index 100% rename from src/Handler/Material.hs rename to backend/src/Handler/Material.hs diff --git a/src/Handler/Metrics.hs b/backend/src/Handler/Metrics.hs similarity index 100% rename from src/Handler/Metrics.hs rename to backend/src/Handler/Metrics.hs diff --git a/src/Handler/News.hs b/backend/src/Handler/News.hs similarity index 100% rename from src/Handler/News.hs rename to backend/src/Handler/News.hs diff --git a/src/Handler/Participants.hs b/backend/src/Handler/Participants.hs similarity index 100% rename from src/Handler/Participants.hs rename to backend/src/Handler/Participants.hs diff --git a/src/Handler/PrintCenter.hs b/backend/src/Handler/PrintCenter.hs similarity index 100% rename from src/Handler/PrintCenter.hs rename to backend/src/Handler/PrintCenter.hs diff --git a/src/Handler/Profile.hs b/backend/src/Handler/Profile.hs similarity index 100% rename from src/Handler/Profile.hs rename to backend/src/Handler/Profile.hs diff --git a/src/Handler/Qualification.hs b/backend/src/Handler/Qualification.hs similarity index 100% rename from src/Handler/Qualification.hs rename to backend/src/Handler/Qualification.hs diff --git a/src/Handler/SAP.hs b/backend/src/Handler/SAP.hs similarity index 100% rename from src/Handler/SAP.hs rename to backend/src/Handler/SAP.hs diff --git a/src/Handler/School.hs b/backend/src/Handler/School.hs similarity index 100% rename from src/Handler/School.hs rename to backend/src/Handler/School.hs diff --git a/src/Handler/Sheet.hs b/backend/src/Handler/Sheet.hs similarity index 100% rename from src/Handler/Sheet.hs rename to backend/src/Handler/Sheet.hs diff --git a/src/Handler/Sheet/CorrectorInvite.hs b/backend/src/Handler/Sheet/CorrectorInvite.hs similarity index 100% rename from src/Handler/Sheet/CorrectorInvite.hs rename to backend/src/Handler/Sheet/CorrectorInvite.hs diff --git a/src/Handler/Sheet/Current.hs b/backend/src/Handler/Sheet/Current.hs similarity index 100% rename from src/Handler/Sheet/Current.hs rename to backend/src/Handler/Sheet/Current.hs diff --git a/src/Handler/Sheet/Delete.hs b/backend/src/Handler/Sheet/Delete.hs similarity index 100% rename from src/Handler/Sheet/Delete.hs rename to backend/src/Handler/Sheet/Delete.hs diff --git a/src/Handler/Sheet/Download.hs b/backend/src/Handler/Sheet/Download.hs similarity index 100% rename from src/Handler/Sheet/Download.hs rename to backend/src/Handler/Sheet/Download.hs diff --git a/src/Handler/Sheet/Edit.hs b/backend/src/Handler/Sheet/Edit.hs similarity index 100% rename from src/Handler/Sheet/Edit.hs rename to backend/src/Handler/Sheet/Edit.hs diff --git a/src/Handler/Sheet/Form.hs b/backend/src/Handler/Sheet/Form.hs similarity index 100% rename from src/Handler/Sheet/Form.hs rename to backend/src/Handler/Sheet/Form.hs diff --git a/src/Handler/Sheet/List.hs b/backend/src/Handler/Sheet/List.hs similarity index 100% rename from src/Handler/Sheet/List.hs rename to backend/src/Handler/Sheet/List.hs diff --git a/src/Handler/Sheet/New.hs b/backend/src/Handler/Sheet/New.hs similarity index 100% rename from src/Handler/Sheet/New.hs rename to backend/src/Handler/Sheet/New.hs diff --git a/src/Handler/Sheet/PersonalisedFiles.hs b/backend/src/Handler/Sheet/PersonalisedFiles.hs similarity index 100% rename from src/Handler/Sheet/PersonalisedFiles.hs rename to backend/src/Handler/Sheet/PersonalisedFiles.hs diff --git a/src/Handler/Sheet/PersonalisedFiles/Meta.hs b/backend/src/Handler/Sheet/PersonalisedFiles/Meta.hs similarity index 100% rename from src/Handler/Sheet/PersonalisedFiles/Meta.hs rename to backend/src/Handler/Sheet/PersonalisedFiles/Meta.hs diff --git a/src/Handler/Sheet/PersonalisedFiles/Types.hs b/backend/src/Handler/Sheet/PersonalisedFiles/Types.hs similarity index 100% rename from src/Handler/Sheet/PersonalisedFiles/Types.hs rename to backend/src/Handler/Sheet/PersonalisedFiles/Types.hs diff --git a/src/Handler/Sheet/Pseudonym.hs b/backend/src/Handler/Sheet/Pseudonym.hs similarity index 100% rename from src/Handler/Sheet/Pseudonym.hs rename to backend/src/Handler/Sheet/Pseudonym.hs diff --git a/src/Handler/Sheet/Show.hs b/backend/src/Handler/Sheet/Show.hs similarity index 100% rename from src/Handler/Sheet/Show.hs rename to backend/src/Handler/Sheet/Show.hs diff --git a/src/Handler/StorageKey.hs b/backend/src/Handler/StorageKey.hs similarity index 100% rename from src/Handler/StorageKey.hs rename to backend/src/Handler/StorageKey.hs diff --git a/src/Handler/Submission.hs b/backend/src/Handler/Submission.hs similarity index 100% rename from src/Handler/Submission.hs rename to backend/src/Handler/Submission.hs diff --git a/src/Handler/Submission/Assign.hs b/backend/src/Handler/Submission/Assign.hs similarity index 100% rename from src/Handler/Submission/Assign.hs rename to backend/src/Handler/Submission/Assign.hs diff --git a/src/Handler/Submission/AuthorshipStatements.hs b/backend/src/Handler/Submission/AuthorshipStatements.hs similarity index 100% rename from src/Handler/Submission/AuthorshipStatements.hs rename to backend/src/Handler/Submission/AuthorshipStatements.hs diff --git a/src/Handler/Submission/Correction.hs b/backend/src/Handler/Submission/Correction.hs similarity index 100% rename from src/Handler/Submission/Correction.hs rename to backend/src/Handler/Submission/Correction.hs diff --git a/src/Handler/Submission/Create.hs b/backend/src/Handler/Submission/Create.hs similarity index 100% rename from src/Handler/Submission/Create.hs rename to backend/src/Handler/Submission/Create.hs diff --git a/src/Handler/Submission/Delete.hs b/backend/src/Handler/Submission/Delete.hs similarity index 100% rename from src/Handler/Submission/Delete.hs rename to backend/src/Handler/Submission/Delete.hs diff --git a/src/Handler/Submission/Download.hs b/backend/src/Handler/Submission/Download.hs similarity index 100% rename from src/Handler/Submission/Download.hs rename to backend/src/Handler/Submission/Download.hs diff --git a/src/Handler/Submission/Grade.hs b/backend/src/Handler/Submission/Grade.hs similarity index 100% rename from src/Handler/Submission/Grade.hs rename to backend/src/Handler/Submission/Grade.hs diff --git a/src/Handler/Submission/Helper.hs b/backend/src/Handler/Submission/Helper.hs similarity index 100% rename from src/Handler/Submission/Helper.hs rename to backend/src/Handler/Submission/Helper.hs diff --git a/src/Handler/Submission/Helper/ArchiveTable.hs b/backend/src/Handler/Submission/Helper/ArchiveTable.hs similarity index 100% rename from src/Handler/Submission/Helper/ArchiveTable.hs rename to backend/src/Handler/Submission/Helper/ArchiveTable.hs diff --git a/src/Handler/Submission/List.hs b/backend/src/Handler/Submission/List.hs similarity index 100% rename from src/Handler/Submission/List.hs rename to backend/src/Handler/Submission/List.hs diff --git a/src/Handler/Submission/New.hs b/backend/src/Handler/Submission/New.hs similarity index 100% rename from src/Handler/Submission/New.hs rename to backend/src/Handler/Submission/New.hs diff --git a/src/Handler/Submission/Show.hs b/backend/src/Handler/Submission/Show.hs similarity index 100% rename from src/Handler/Submission/Show.hs rename to backend/src/Handler/Submission/Show.hs diff --git a/src/Handler/Submission/SubmissionUserInvite.hs b/backend/src/Handler/Submission/SubmissionUserInvite.hs similarity index 100% rename from src/Handler/Submission/SubmissionUserInvite.hs rename to backend/src/Handler/Submission/SubmissionUserInvite.hs diff --git a/src/Handler/Submission/Upload.hs b/backend/src/Handler/Submission/Upload.hs similarity index 100% rename from src/Handler/Submission/Upload.hs rename to backend/src/Handler/Submission/Upload.hs diff --git a/src/Handler/Swagger.hs b/backend/src/Handler/Swagger.hs similarity index 100% rename from src/Handler/Swagger.hs rename to backend/src/Handler/Swagger.hs diff --git a/src/Handler/SystemMessage.hs b/backend/src/Handler/SystemMessage.hs similarity index 100% rename from src/Handler/SystemMessage.hs rename to backend/src/Handler/SystemMessage.hs diff --git a/src/Handler/Term.hs b/backend/src/Handler/Term.hs similarity index 100% rename from src/Handler/Term.hs rename to backend/src/Handler/Term.hs diff --git a/src/Handler/Tutorial.hs b/backend/src/Handler/Tutorial.hs similarity index 100% rename from src/Handler/Tutorial.hs rename to backend/src/Handler/Tutorial.hs diff --git a/src/Handler/Tutorial/Communication.hs b/backend/src/Handler/Tutorial/Communication.hs similarity index 100% rename from src/Handler/Tutorial/Communication.hs rename to backend/src/Handler/Tutorial/Communication.hs diff --git a/src/Handler/Tutorial/Delete.hs b/backend/src/Handler/Tutorial/Delete.hs similarity index 100% rename from src/Handler/Tutorial/Delete.hs rename to backend/src/Handler/Tutorial/Delete.hs diff --git a/src/Handler/Tutorial/Edit.hs b/backend/src/Handler/Tutorial/Edit.hs similarity index 100% rename from src/Handler/Tutorial/Edit.hs rename to backend/src/Handler/Tutorial/Edit.hs diff --git a/src/Handler/Tutorial/Form.hs b/backend/src/Handler/Tutorial/Form.hs similarity index 100% rename from src/Handler/Tutorial/Form.hs rename to backend/src/Handler/Tutorial/Form.hs diff --git a/src/Handler/Tutorial/List.hs b/backend/src/Handler/Tutorial/List.hs similarity index 100% rename from src/Handler/Tutorial/List.hs rename to backend/src/Handler/Tutorial/List.hs diff --git a/src/Handler/Tutorial/New.hs b/backend/src/Handler/Tutorial/New.hs similarity index 100% rename from src/Handler/Tutorial/New.hs rename to backend/src/Handler/Tutorial/New.hs diff --git a/src/Handler/Tutorial/Register.hs b/backend/src/Handler/Tutorial/Register.hs similarity index 100% rename from src/Handler/Tutorial/Register.hs rename to backend/src/Handler/Tutorial/Register.hs diff --git a/src/Handler/Tutorial/TutorInvite.hs b/backend/src/Handler/Tutorial/TutorInvite.hs similarity index 100% rename from src/Handler/Tutorial/TutorInvite.hs rename to backend/src/Handler/Tutorial/TutorInvite.hs diff --git a/src/Handler/Tutorial/Users.hs b/backend/src/Handler/Tutorial/Users.hs similarity index 100% rename from src/Handler/Tutorial/Users.hs rename to backend/src/Handler/Tutorial/Users.hs diff --git a/src/Handler/Upload.hs b/backend/src/Handler/Upload.hs similarity index 100% rename from src/Handler/Upload.hs rename to backend/src/Handler/Upload.hs diff --git a/src/Handler/Users.hs b/backend/src/Handler/Users.hs similarity index 100% rename from src/Handler/Users.hs rename to backend/src/Handler/Users.hs diff --git a/src/Handler/Users/Add.hs b/backend/src/Handler/Users/Add.hs similarity index 100% rename from src/Handler/Users/Add.hs rename to backend/src/Handler/Users/Add.hs diff --git a/src/Handler/Utils.hs b/backend/src/Handler/Utils.hs similarity index 100% rename from src/Handler/Utils.hs rename to backend/src/Handler/Utils.hs diff --git a/src/Handler/Utils/AuthorshipStatement.hs b/backend/src/Handler/Utils/AuthorshipStatement.hs similarity index 100% rename from src/Handler/Utils/AuthorshipStatement.hs rename to backend/src/Handler/Utils/AuthorshipStatement.hs diff --git a/src/Handler/Utils/Avs.hs b/backend/src/Handler/Utils/Avs.hs similarity index 100% rename from src/Handler/Utils/Avs.hs rename to backend/src/Handler/Utils/Avs.hs diff --git a/src/Handler/Utils/Communication.hs b/backend/src/Handler/Utils/Communication.hs similarity index 100% rename from src/Handler/Utils/Communication.hs rename to backend/src/Handler/Utils/Communication.hs diff --git a/src/Handler/Utils/Company.hs b/backend/src/Handler/Utils/Company.hs similarity index 100% rename from src/Handler/Utils/Company.hs rename to backend/src/Handler/Utils/Company.hs diff --git a/src/Handler/Utils/Concurrent.hs b/backend/src/Handler/Utils/Concurrent.hs similarity index 100% rename from src/Handler/Utils/Concurrent.hs rename to backend/src/Handler/Utils/Concurrent.hs diff --git a/src/Handler/Utils/ContentDisposition.hs b/backend/src/Handler/Utils/ContentDisposition.hs similarity index 100% rename from src/Handler/Utils/ContentDisposition.hs rename to backend/src/Handler/Utils/ContentDisposition.hs diff --git a/src/Handler/Utils/Corrections.hs b/backend/src/Handler/Utils/Corrections.hs similarity index 100% rename from src/Handler/Utils/Corrections.hs rename to backend/src/Handler/Utils/Corrections.hs diff --git a/src/Handler/Utils/Course.hs b/backend/src/Handler/Utils/Course.hs similarity index 100% rename from src/Handler/Utils/Course.hs rename to backend/src/Handler/Utils/Course.hs diff --git a/src/Handler/Utils/Csv.hs b/backend/src/Handler/Utils/Csv.hs similarity index 100% rename from src/Handler/Utils/Csv.hs rename to backend/src/Handler/Utils/Csv.hs diff --git a/src/Handler/Utils/Database.hs b/backend/src/Handler/Utils/Database.hs similarity index 100% rename from src/Handler/Utils/Database.hs rename to backend/src/Handler/Utils/Database.hs diff --git a/src/Handler/Utils/DateTime.hs b/backend/src/Handler/Utils/DateTime.hs similarity index 100% rename from src/Handler/Utils/DateTime.hs rename to backend/src/Handler/Utils/DateTime.hs diff --git a/src/Handler/Utils/Delete.hs b/backend/src/Handler/Utils/Delete.hs similarity index 100% rename from src/Handler/Utils/Delete.hs rename to backend/src/Handler/Utils/Delete.hs diff --git a/src/Handler/Utils/Download.hs b/backend/src/Handler/Utils/Download.hs similarity index 100% rename from src/Handler/Utils/Download.hs rename to backend/src/Handler/Utils/Download.hs diff --git a/src/Handler/Utils/Exam.hs b/backend/src/Handler/Utils/Exam.hs similarity index 100% rename from src/Handler/Utils/Exam.hs rename to backend/src/Handler/Utils/Exam.hs diff --git a/src/Handler/Utils/ExamOffice/Course.hs b/backend/src/Handler/Utils/ExamOffice/Course.hs similarity index 100% rename from src/Handler/Utils/ExamOffice/Course.hs rename to backend/src/Handler/Utils/ExamOffice/Course.hs diff --git a/src/Handler/Utils/ExamOffice/Exam.hs b/backend/src/Handler/Utils/ExamOffice/Exam.hs similarity index 100% rename from src/Handler/Utils/ExamOffice/Exam.hs rename to backend/src/Handler/Utils/ExamOffice/Exam.hs diff --git a/src/Handler/Utils/ExamOffice/ExternalExam.hs b/backend/src/Handler/Utils/ExamOffice/ExternalExam.hs similarity index 100% rename from src/Handler/Utils/ExamOffice/ExternalExam.hs rename to backend/src/Handler/Utils/ExamOffice/ExternalExam.hs diff --git a/src/Handler/Utils/ExternalExam.hs b/backend/src/Handler/Utils/ExternalExam.hs similarity index 100% rename from src/Handler/Utils/ExternalExam.hs rename to backend/src/Handler/Utils/ExternalExam.hs diff --git a/src/Handler/Utils/ExternalExam/Users.hs b/backend/src/Handler/Utils/ExternalExam/Users.hs similarity index 100% rename from src/Handler/Utils/ExternalExam/Users.hs rename to backend/src/Handler/Utils/ExternalExam/Users.hs diff --git a/src/Handler/Utils/Files.hs b/backend/src/Handler/Utils/Files.hs similarity index 100% rename from src/Handler/Utils/Files.hs rename to backend/src/Handler/Utils/Files.hs diff --git a/src/Handler/Utils/Form.hs b/backend/src/Handler/Utils/Form.hs similarity index 100% rename from src/Handler/Utils/Form.hs rename to backend/src/Handler/Utils/Form.hs diff --git a/src/Handler/Utils/Form/MassInput.hs b/backend/src/Handler/Utils/Form/MassInput.hs similarity index 100% rename from src/Handler/Utils/Form/MassInput.hs rename to backend/src/Handler/Utils/Form/MassInput.hs diff --git a/src/Handler/Utils/Form/MassInput/Liveliness.hs b/backend/src/Handler/Utils/Form/MassInput/Liveliness.hs similarity index 100% rename from src/Handler/Utils/Form/MassInput/Liveliness.hs rename to backend/src/Handler/Utils/Form/MassInput/Liveliness.hs diff --git a/src/Handler/Utils/Form/MassInput/TH.hs b/backend/src/Handler/Utils/Form/MassInput/TH.hs similarity index 100% rename from src/Handler/Utils/Form/MassInput/TH.hs rename to backend/src/Handler/Utils/Form/MassInput/TH.hs diff --git a/src/Handler/Utils/Form/Occurrences.hs b/backend/src/Handler/Utils/Form/Occurrences.hs similarity index 100% rename from src/Handler/Utils/Form/Occurrences.hs rename to backend/src/Handler/Utils/Form/Occurrences.hs diff --git a/src/Handler/Utils/Form/Types.hs b/backend/src/Handler/Utils/Form/Types.hs similarity index 100% rename from src/Handler/Utils/Form/Types.hs rename to backend/src/Handler/Utils/Form/Types.hs diff --git a/src/Handler/Utils/I18n.hs b/backend/src/Handler/Utils/I18n.hs similarity index 100% rename from src/Handler/Utils/I18n.hs rename to backend/src/Handler/Utils/I18n.hs diff --git a/src/Handler/Utils/Invitations.hs b/backend/src/Handler/Utils/Invitations.hs similarity index 100% rename from src/Handler/Utils/Invitations.hs rename to backend/src/Handler/Utils/Invitations.hs diff --git a/src/Handler/Utils/LMS.hs b/backend/src/Handler/Utils/LMS.hs similarity index 100% rename from src/Handler/Utils/LMS.hs rename to backend/src/Handler/Utils/LMS.hs diff --git a/src/Handler/Utils/LdapSystemFunctions.hs b/backend/src/Handler/Utils/LdapSystemFunctions.hs similarity index 100% rename from src/Handler/Utils/LdapSystemFunctions.hs rename to backend/src/Handler/Utils/LdapSystemFunctions.hs diff --git a/src/Handler/Utils/Mail.hs b/backend/src/Handler/Utils/Mail.hs similarity index 100% rename from src/Handler/Utils/Mail.hs rename to backend/src/Handler/Utils/Mail.hs diff --git a/src/Handler/Utils/Memcached.hs b/backend/src/Handler/Utils/Memcached.hs similarity index 100% rename from src/Handler/Utils/Memcached.hs rename to backend/src/Handler/Utils/Memcached.hs diff --git a/src/Handler/Utils/Minio.hs b/backend/src/Handler/Utils/Minio.hs similarity index 100% rename from src/Handler/Utils/Minio.hs rename to backend/src/Handler/Utils/Minio.hs diff --git a/src/Handler/Utils/News.hs b/backend/src/Handler/Utils/News.hs similarity index 100% rename from src/Handler/Utils/News.hs rename to backend/src/Handler/Utils/News.hs diff --git a/src/Handler/Utils/Occurrences.hs b/backend/src/Handler/Utils/Occurrences.hs similarity index 100% rename from src/Handler/Utils/Occurrences.hs rename to backend/src/Handler/Utils/Occurrences.hs diff --git a/src/Handler/Utils/Pandoc.hs b/backend/src/Handler/Utils/Pandoc.hs similarity index 100% rename from src/Handler/Utils/Pandoc.hs rename to backend/src/Handler/Utils/Pandoc.hs diff --git a/src/Handler/Utils/Profile.hs b/backend/src/Handler/Utils/Profile.hs similarity index 100% rename from src/Handler/Utils/Profile.hs rename to backend/src/Handler/Utils/Profile.hs diff --git a/src/Handler/Utils/Qualification.hs b/backend/src/Handler/Utils/Qualification.hs similarity index 100% rename from src/Handler/Utils/Qualification.hs rename to backend/src/Handler/Utils/Qualification.hs diff --git a/src/Handler/Utils/Random.hs b/backend/src/Handler/Utils/Random.hs similarity index 100% rename from src/Handler/Utils/Random.hs rename to backend/src/Handler/Utils/Random.hs diff --git a/src/Handler/Utils/Rating.hs b/backend/src/Handler/Utils/Rating.hs similarity index 100% rename from src/Handler/Utils/Rating.hs rename to backend/src/Handler/Utils/Rating.hs diff --git a/src/Handler/Utils/Rating/Format.hs b/backend/src/Handler/Utils/Rating/Format.hs similarity index 100% rename from src/Handler/Utils/Rating/Format.hs rename to backend/src/Handler/Utils/Rating/Format.hs diff --git a/src/Handler/Utils/Rating/Format/Legacy.hs b/backend/src/Handler/Utils/Rating/Format/Legacy.hs similarity index 100% rename from src/Handler/Utils/Rating/Format/Legacy.hs rename to backend/src/Handler/Utils/Rating/Format/Legacy.hs diff --git a/src/Handler/Utils/Routes.hs b/backend/src/Handler/Utils/Routes.hs similarity index 100% rename from src/Handler/Utils/Routes.hs rename to backend/src/Handler/Utils/Routes.hs diff --git a/src/Handler/Utils/Sheet.hs b/backend/src/Handler/Utils/Sheet.hs similarity index 100% rename from src/Handler/Utils/Sheet.hs rename to backend/src/Handler/Utils/Sheet.hs diff --git a/src/Handler/Utils/SheetType.hs b/backend/src/Handler/Utils/SheetType.hs similarity index 100% rename from src/Handler/Utils/SheetType.hs rename to backend/src/Handler/Utils/SheetType.hs diff --git a/src/Handler/Utils/StudyFeatures.hs b/backend/src/Handler/Utils/StudyFeatures.hs similarity index 100% rename from src/Handler/Utils/StudyFeatures.hs rename to backend/src/Handler/Utils/StudyFeatures.hs diff --git a/src/Handler/Utils/Submission.hs b/backend/src/Handler/Utils/Submission.hs similarity index 100% rename from src/Handler/Utils/Submission.hs rename to backend/src/Handler/Utils/Submission.hs diff --git a/src/Handler/Utils/Table.hs b/backend/src/Handler/Utils/Table.hs similarity index 100% rename from src/Handler/Utils/Table.hs rename to backend/src/Handler/Utils/Table.hs diff --git a/src/Handler/Utils/Table/Cells.hs b/backend/src/Handler/Utils/Table/Cells.hs similarity index 100% rename from src/Handler/Utils/Table/Cells.hs rename to backend/src/Handler/Utils/Table/Cells.hs diff --git a/src/Handler/Utils/Table/Columns.hs b/backend/src/Handler/Utils/Table/Columns.hs similarity index 100% rename from src/Handler/Utils/Table/Columns.hs rename to backend/src/Handler/Utils/Table/Columns.hs diff --git a/src/Handler/Utils/Table/Pagination.hs b/backend/src/Handler/Utils/Table/Pagination.hs similarity index 100% rename from src/Handler/Utils/Table/Pagination.hs rename to backend/src/Handler/Utils/Table/Pagination.hs diff --git a/src/Handler/Utils/Table/Pagination/CsvColumnExplanations.hs b/backend/src/Handler/Utils/Table/Pagination/CsvColumnExplanations.hs similarity index 100% rename from src/Handler/Utils/Table/Pagination/CsvColumnExplanations.hs rename to backend/src/Handler/Utils/Table/Pagination/CsvColumnExplanations.hs diff --git a/src/Handler/Utils/Table/Pagination/Types.hs b/backend/src/Handler/Utils/Table/Pagination/Types.hs similarity index 100% rename from src/Handler/Utils/Table/Pagination/Types.hs rename to backend/src/Handler/Utils/Table/Pagination/Types.hs diff --git a/src/Handler/Utils/Term.hs b/backend/src/Handler/Utils/Term.hs similarity index 100% rename from src/Handler/Utils/Term.hs rename to backend/src/Handler/Utils/Term.hs diff --git a/src/Handler/Utils/TermCandidates.hs b/backend/src/Handler/Utils/TermCandidates.hs similarity index 100% rename from src/Handler/Utils/TermCandidates.hs rename to backend/src/Handler/Utils/TermCandidates.hs diff --git a/src/Handler/Utils/Tutorial.hs b/backend/src/Handler/Utils/Tutorial.hs similarity index 100% rename from src/Handler/Utils/Tutorial.hs rename to backend/src/Handler/Utils/Tutorial.hs diff --git a/src/Handler/Utils/Users.hs b/backend/src/Handler/Utils/Users.hs similarity index 100% rename from src/Handler/Utils/Users.hs rename to backend/src/Handler/Utils/Users.hs diff --git a/src/Handler/Utils/Widgets.hs b/backend/src/Handler/Utils/Widgets.hs similarity index 100% rename from src/Handler/Utils/Widgets.hs rename to backend/src/Handler/Utils/Widgets.hs diff --git a/src/Handler/Utils/Zip.hs b/backend/src/Handler/Utils/Zip.hs similarity index 100% rename from src/Handler/Utils/Zip.hs rename to backend/src/Handler/Utils/Zip.hs diff --git a/src/Import.hs b/backend/src/Import.hs similarity index 100% rename from src/Import.hs rename to backend/src/Import.hs diff --git a/src/Import/NoFoundation.hs b/backend/src/Import/NoFoundation.hs similarity index 100% rename from src/Import/NoFoundation.hs rename to backend/src/Import/NoFoundation.hs diff --git a/src/Import/NoModel.hs b/backend/src/Import/NoModel.hs similarity index 100% rename from src/Import/NoModel.hs rename to backend/src/Import/NoModel.hs diff --git a/src/Import/Servant.hs b/backend/src/Import/Servant.hs similarity index 100% rename from src/Import/Servant.hs rename to backend/src/Import/Servant.hs diff --git a/src/Import/Servant/NoFoundation.hs b/backend/src/Import/Servant/NoFoundation.hs similarity index 100% rename from src/Import/Servant/NoFoundation.hs rename to backend/src/Import/Servant/NoFoundation.hs diff --git a/src/Jobs.hs b/backend/src/Jobs.hs similarity index 100% rename from src/Jobs.hs rename to backend/src/Jobs.hs diff --git a/src/Jobs/Crontab.hs b/backend/src/Jobs/Crontab.hs similarity index 100% rename from src/Jobs/Crontab.hs rename to backend/src/Jobs/Crontab.hs diff --git a/src/Jobs/Handler/ChangeUserDisplayEmail.hs b/backend/src/Jobs/Handler/ChangeUserDisplayEmail.hs similarity index 100% rename from src/Jobs/Handler/ChangeUserDisplayEmail.hs rename to backend/src/Jobs/Handler/ChangeUserDisplayEmail.hs diff --git a/src/Jobs/Handler/DistributeCorrections.hs b/backend/src/Jobs/Handler/DistributeCorrections.hs similarity index 100% rename from src/Jobs/Handler/DistributeCorrections.hs rename to backend/src/Jobs/Handler/DistributeCorrections.hs diff --git a/src/Jobs/Handler/ExternalApis.hs b/backend/src/Jobs/Handler/ExternalApis.hs similarity index 100% rename from src/Jobs/Handler/ExternalApis.hs rename to backend/src/Jobs/Handler/ExternalApis.hs diff --git a/src/Jobs/Handler/Files.hs b/backend/src/Jobs/Handler/Files.hs similarity index 100% rename from src/Jobs/Handler/Files.hs rename to backend/src/Jobs/Handler/Files.hs diff --git a/src/Jobs/Handler/HelpRequest.hs b/backend/src/Jobs/Handler/HelpRequest.hs similarity index 100% rename from src/Jobs/Handler/HelpRequest.hs rename to backend/src/Jobs/Handler/HelpRequest.hs diff --git a/src/Jobs/Handler/Intervals/Utils.hs b/backend/src/Jobs/Handler/Intervals/Utils.hs similarity index 100% rename from src/Jobs/Handler/Intervals/Utils.hs rename to backend/src/Jobs/Handler/Intervals/Utils.hs diff --git a/src/Jobs/Handler/Invitation.hs b/backend/src/Jobs/Handler/Invitation.hs similarity index 100% rename from src/Jobs/Handler/Invitation.hs rename to backend/src/Jobs/Handler/Invitation.hs diff --git a/src/Jobs/Handler/LMS.hs b/backend/src/Jobs/Handler/LMS.hs similarity index 100% rename from src/Jobs/Handler/LMS.hs rename to backend/src/Jobs/Handler/LMS.hs diff --git a/src/Jobs/Handler/PersonalisedSheetFiles.hs b/backend/src/Jobs/Handler/PersonalisedSheetFiles.hs similarity index 100% rename from src/Jobs/Handler/PersonalisedSheetFiles.hs rename to backend/src/Jobs/Handler/PersonalisedSheetFiles.hs diff --git a/src/Jobs/Handler/Print.hs b/backend/src/Jobs/Handler/Print.hs similarity index 100% rename from src/Jobs/Handler/Print.hs rename to backend/src/Jobs/Handler/Print.hs diff --git a/src/Jobs/Handler/PruneInvitations.hs b/backend/src/Jobs/Handler/PruneInvitations.hs similarity index 100% rename from src/Jobs/Handler/PruneInvitations.hs rename to backend/src/Jobs/Handler/PruneInvitations.hs diff --git a/src/Jobs/Handler/PruneOldSentMails.hs b/backend/src/Jobs/Handler/PruneOldSentMails.hs similarity index 100% rename from src/Jobs/Handler/PruneOldSentMails.hs rename to backend/src/Jobs/Handler/PruneOldSentMails.hs diff --git a/src/Jobs/Handler/QueueNotification.hs b/backend/src/Jobs/Handler/QueueNotification.hs similarity index 100% rename from src/Jobs/Handler/QueueNotification.hs rename to backend/src/Jobs/Handler/QueueNotification.hs diff --git a/src/Jobs/Handler/SendCourseCommunication.hs b/backend/src/Jobs/Handler/SendCourseCommunication.hs similarity index 100% rename from src/Jobs/Handler/SendCourseCommunication.hs rename to backend/src/Jobs/Handler/SendCourseCommunication.hs diff --git a/src/Jobs/Handler/SendNotification.hs b/backend/src/Jobs/Handler/SendNotification.hs similarity index 100% rename from src/Jobs/Handler/SendNotification.hs rename to backend/src/Jobs/Handler/SendNotification.hs diff --git a/src/Jobs/Handler/SendNotification/CorrectionsAssigned.hs b/backend/src/Jobs/Handler/SendNotification/CorrectionsAssigned.hs similarity index 100% rename from src/Jobs/Handler/SendNotification/CorrectionsAssigned.hs rename to backend/src/Jobs/Handler/SendNotification/CorrectionsAssigned.hs diff --git a/src/Jobs/Handler/SendNotification/CorrectionsNotDistributed.hs b/backend/src/Jobs/Handler/SendNotification/CorrectionsNotDistributed.hs similarity index 100% rename from src/Jobs/Handler/SendNotification/CorrectionsNotDistributed.hs rename to backend/src/Jobs/Handler/SendNotification/CorrectionsNotDistributed.hs diff --git a/src/Jobs/Handler/SendNotification/CourseRegistered.hs b/backend/src/Jobs/Handler/SendNotification/CourseRegistered.hs similarity index 100% rename from src/Jobs/Handler/SendNotification/CourseRegistered.hs rename to backend/src/Jobs/Handler/SendNotification/CourseRegistered.hs diff --git a/src/Jobs/Handler/SendNotification/ExamActive.hs b/backend/src/Jobs/Handler/SendNotification/ExamActive.hs similarity index 100% rename from src/Jobs/Handler/SendNotification/ExamActive.hs rename to backend/src/Jobs/Handler/SendNotification/ExamActive.hs diff --git a/src/Jobs/Handler/SendNotification/ExamOffice.hs b/backend/src/Jobs/Handler/SendNotification/ExamOffice.hs similarity index 100% rename from src/Jobs/Handler/SendNotification/ExamOffice.hs rename to backend/src/Jobs/Handler/SendNotification/ExamOffice.hs diff --git a/src/Jobs/Handler/SendNotification/ExamResult.hs b/backend/src/Jobs/Handler/SendNotification/ExamResult.hs similarity index 100% rename from src/Jobs/Handler/SendNotification/ExamResult.hs rename to backend/src/Jobs/Handler/SendNotification/ExamResult.hs diff --git a/src/Jobs/Handler/SendNotification/Qualification.hs b/backend/src/Jobs/Handler/SendNotification/Qualification.hs similarity index 100% rename from src/Jobs/Handler/SendNotification/Qualification.hs rename to backend/src/Jobs/Handler/SendNotification/Qualification.hs diff --git a/src/Jobs/Handler/SendNotification/SheetActive.hs b/backend/src/Jobs/Handler/SendNotification/SheetActive.hs similarity index 100% rename from src/Jobs/Handler/SendNotification/SheetActive.hs rename to backend/src/Jobs/Handler/SendNotification/SheetActive.hs diff --git a/src/Jobs/Handler/SendNotification/SheetInactive.hs b/backend/src/Jobs/Handler/SendNotification/SheetInactive.hs similarity index 100% rename from src/Jobs/Handler/SendNotification/SheetInactive.hs rename to backend/src/Jobs/Handler/SendNotification/SheetInactive.hs diff --git a/src/Jobs/Handler/SendNotification/SubmissionEdited.hs b/backend/src/Jobs/Handler/SendNotification/SubmissionEdited.hs similarity index 100% rename from src/Jobs/Handler/SendNotification/SubmissionEdited.hs rename to backend/src/Jobs/Handler/SendNotification/SubmissionEdited.hs diff --git a/src/Jobs/Handler/SendNotification/SubmissionRated.hs b/backend/src/Jobs/Handler/SendNotification/SubmissionRated.hs similarity index 100% rename from src/Jobs/Handler/SendNotification/SubmissionRated.hs rename to backend/src/Jobs/Handler/SendNotification/SubmissionRated.hs diff --git a/src/Jobs/Handler/SendNotification/UserAuthModeUpdate.hs b/backend/src/Jobs/Handler/SendNotification/UserAuthModeUpdate.hs similarity index 100% rename from src/Jobs/Handler/SendNotification/UserAuthModeUpdate.hs rename to backend/src/Jobs/Handler/SendNotification/UserAuthModeUpdate.hs diff --git a/src/Jobs/Handler/SendNotification/UserRightsUpdate.hs b/backend/src/Jobs/Handler/SendNotification/UserRightsUpdate.hs similarity index 100% rename from src/Jobs/Handler/SendNotification/UserRightsUpdate.hs rename to backend/src/Jobs/Handler/SendNotification/UserRightsUpdate.hs diff --git a/src/Jobs/Handler/SendNotification/Utils.hs b/backend/src/Jobs/Handler/SendNotification/Utils.hs similarity index 100% rename from src/Jobs/Handler/SendNotification/Utils.hs rename to backend/src/Jobs/Handler/SendNotification/Utils.hs diff --git a/src/Jobs/Handler/SendPasswordReset.hs b/backend/src/Jobs/Handler/SendPasswordReset.hs similarity index 100% rename from src/Jobs/Handler/SendPasswordReset.hs rename to backend/src/Jobs/Handler/SendPasswordReset.hs diff --git a/src/Jobs/Handler/SendTestEmail.hs b/backend/src/Jobs/Handler/SendTestEmail.hs similarity index 100% rename from src/Jobs/Handler/SendTestEmail.hs rename to backend/src/Jobs/Handler/SendTestEmail.hs diff --git a/src/Jobs/Handler/SetLogSettings.hs b/backend/src/Jobs/Handler/SetLogSettings.hs similarity index 100% rename from src/Jobs/Handler/SetLogSettings.hs rename to backend/src/Jobs/Handler/SetLogSettings.hs diff --git a/src/Jobs/Handler/StudyFeatures.hs b/backend/src/Jobs/Handler/StudyFeatures.hs similarity index 100% rename from src/Jobs/Handler/StudyFeatures.hs rename to backend/src/Jobs/Handler/StudyFeatures.hs diff --git a/src/Jobs/Handler/SynchroniseAvs.hs b/backend/src/Jobs/Handler/SynchroniseAvs.hs similarity index 100% rename from src/Jobs/Handler/SynchroniseAvs.hs rename to backend/src/Jobs/Handler/SynchroniseAvs.hs diff --git a/src/Jobs/Handler/SynchroniseLdap.hs b/backend/src/Jobs/Handler/SynchroniseLdap.hs similarity index 100% rename from src/Jobs/Handler/SynchroniseLdap.hs rename to backend/src/Jobs/Handler/SynchroniseLdap.hs diff --git a/src/Jobs/Handler/TransactionLog.hs b/backend/src/Jobs/Handler/TransactionLog.hs similarity index 100% rename from src/Jobs/Handler/TransactionLog.hs rename to backend/src/Jobs/Handler/TransactionLog.hs diff --git a/src/Jobs/HealthReport.hs b/backend/src/Jobs/HealthReport.hs similarity index 100% rename from src/Jobs/HealthReport.hs rename to backend/src/Jobs/HealthReport.hs diff --git a/src/Jobs/Offload.hs b/backend/src/Jobs/Offload.hs similarity index 100% rename from src/Jobs/Offload.hs rename to backend/src/Jobs/Offload.hs diff --git a/src/Jobs/Queue.hs b/backend/src/Jobs/Queue.hs similarity index 100% rename from src/Jobs/Queue.hs rename to backend/src/Jobs/Queue.hs diff --git a/src/Jobs/Types.hs b/backend/src/Jobs/Types.hs similarity index 100% rename from src/Jobs/Types.hs rename to backend/src/Jobs/Types.hs diff --git a/src/Jose/Jwk/Instances.hs b/backend/src/Jose/Jwk/Instances.hs similarity index 100% rename from src/Jose/Jwk/Instances.hs rename to backend/src/Jose/Jwk/Instances.hs diff --git a/src/Jose/Jwt/Instances.hs b/backend/src/Jose/Jwt/Instances.hs similarity index 100% rename from src/Jose/Jwt/Instances.hs rename to backend/src/Jose/Jwt/Instances.hs diff --git a/src/Language/Haskell/TH/Instances.hs b/backend/src/Language/Haskell/TH/Instances.hs similarity index 100% rename from src/Language/Haskell/TH/Instances.hs rename to backend/src/Language/Haskell/TH/Instances.hs diff --git a/src/Ldap/Client/Instances.hs b/backend/src/Ldap/Client/Instances.hs similarity index 100% rename from src/Ldap/Client/Instances.hs rename to backend/src/Ldap/Client/Instances.hs diff --git a/src/Ldap/Client/Pool.hs b/backend/src/Ldap/Client/Pool.hs similarity index 100% rename from src/Ldap/Client/Pool.hs rename to backend/src/Ldap/Client/Pool.hs diff --git a/src/Mail.hs b/backend/src/Mail.hs similarity index 100% rename from src/Mail.hs rename to backend/src/Mail.hs diff --git a/src/Model.hs b/backend/src/Model.hs similarity index 100% rename from src/Model.hs rename to backend/src/Model.hs diff --git a/src/Model/Migration.hs b/backend/src/Model/Migration.hs similarity index 100% rename from src/Model/Migration.hs rename to backend/src/Model/Migration.hs diff --git a/src/Model/Migration/Definitions.hs b/backend/src/Model/Migration/Definitions.hs similarity index 100% rename from src/Model/Migration/Definitions.hs rename to backend/src/Model/Migration/Definitions.hs diff --git a/src/Model/Migration/Types.hs b/backend/src/Model/Migration/Types.hs similarity index 100% rename from src/Model/Migration/Types.hs rename to backend/src/Model/Migration/Types.hs diff --git a/src/Model/Migration/Version.hs b/backend/src/Model/Migration/Version.hs similarity index 100% rename from src/Model/Migration/Version.hs rename to backend/src/Model/Migration/Version.hs diff --git a/src/Model/Rating.hs b/backend/src/Model/Rating.hs similarity index 100% rename from src/Model/Rating.hs rename to backend/src/Model/Rating.hs diff --git a/src/Model/Submission.hs b/backend/src/Model/Submission.hs similarity index 100% rename from src/Model/Submission.hs rename to backend/src/Model/Submission.hs diff --git a/src/Model/Tokens.hs b/backend/src/Model/Tokens.hs similarity index 100% rename from src/Model/Tokens.hs rename to backend/src/Model/Tokens.hs diff --git a/src/Model/Tokens/Bearer.hs b/backend/src/Model/Tokens/Bearer.hs similarity index 100% rename from src/Model/Tokens/Bearer.hs rename to backend/src/Model/Tokens/Bearer.hs diff --git a/src/Model/Tokens/Lens.hs b/backend/src/Model/Tokens/Lens.hs similarity index 100% rename from src/Model/Tokens/Lens.hs rename to backend/src/Model/Tokens/Lens.hs diff --git a/src/Model/Tokens/Session.hs b/backend/src/Model/Tokens/Session.hs similarity index 100% rename from src/Model/Tokens/Session.hs rename to backend/src/Model/Tokens/Session.hs diff --git a/src/Model/Tokens/Upload.hs b/backend/src/Model/Tokens/Upload.hs similarity index 100% rename from src/Model/Tokens/Upload.hs rename to backend/src/Model/Tokens/Upload.hs diff --git a/src/Model/Types.hs b/backend/src/Model/Types.hs similarity index 100% rename from src/Model/Types.hs rename to backend/src/Model/Types.hs diff --git a/src/Model/Types/Apis.hs b/backend/src/Model/Types/Apis.hs similarity index 100% rename from src/Model/Types/Apis.hs rename to backend/src/Model/Types/Apis.hs diff --git a/src/Model/Types/Avs.hs b/backend/src/Model/Types/Avs.hs similarity index 100% rename from src/Model/Types/Avs.hs rename to backend/src/Model/Types/Avs.hs diff --git a/src/Model/Types/Changelog.hs b/backend/src/Model/Types/Changelog.hs similarity index 100% rename from src/Model/Types/Changelog.hs rename to backend/src/Model/Types/Changelog.hs diff --git a/src/Model/Types/Common.hs b/backend/src/Model/Types/Common.hs similarity index 100% rename from src/Model/Types/Common.hs rename to backend/src/Model/Types/Common.hs diff --git a/src/Model/Types/Communication.hs b/backend/src/Model/Types/Communication.hs similarity index 100% rename from src/Model/Types/Communication.hs rename to backend/src/Model/Types/Communication.hs diff --git a/src/Model/Types/Course.hs b/backend/src/Model/Types/Course.hs similarity index 100% rename from src/Model/Types/Course.hs rename to backend/src/Model/Types/Course.hs diff --git a/src/Model/Types/Csv.hs b/backend/src/Model/Types/Csv.hs similarity index 100% rename from src/Model/Types/Csv.hs rename to backend/src/Model/Types/Csv.hs diff --git a/src/Model/Types/DateTime.hs b/backend/src/Model/Types/DateTime.hs similarity index 100% rename from src/Model/Types/DateTime.hs rename to backend/src/Model/Types/DateTime.hs diff --git a/src/Model/Types/Exam.hs b/backend/src/Model/Types/Exam.hs similarity index 100% rename from src/Model/Types/Exam.hs rename to backend/src/Model/Types/Exam.hs diff --git a/src/Model/Types/ExamOffice.hs b/backend/src/Model/Types/ExamOffice.hs similarity index 100% rename from src/Model/Types/ExamOffice.hs rename to backend/src/Model/Types/ExamOffice.hs diff --git a/src/Model/Types/File.hs b/backend/src/Model/Types/File.hs similarity index 100% rename from src/Model/Types/File.hs rename to backend/src/Model/Types/File.hs diff --git a/src/Model/Types/Health.hs b/backend/src/Model/Types/Health.hs similarity index 100% rename from src/Model/Types/Health.hs rename to backend/src/Model/Types/Health.hs diff --git a/src/Model/Types/Languages.hs b/backend/src/Model/Types/Languages.hs similarity index 100% rename from src/Model/Types/Languages.hs rename to backend/src/Model/Types/Languages.hs diff --git a/src/Model/Types/Lms.hs b/backend/src/Model/Types/Lms.hs similarity index 100% rename from src/Model/Types/Lms.hs rename to backend/src/Model/Types/Lms.hs diff --git a/src/Model/Types/Mail.hs b/backend/src/Model/Types/Mail.hs similarity index 100% rename from src/Model/Types/Mail.hs rename to backend/src/Model/Types/Mail.hs diff --git a/src/Model/Types/Markup.hs b/backend/src/Model/Types/Markup.hs similarity index 100% rename from src/Model/Types/Markup.hs rename to backend/src/Model/Types/Markup.hs diff --git a/src/Model/Types/Misc.hs b/backend/src/Model/Types/Misc.hs similarity index 100% rename from src/Model/Types/Misc.hs rename to backend/src/Model/Types/Misc.hs diff --git a/src/Model/Types/Room.hs b/backend/src/Model/Types/Room.hs similarity index 100% rename from src/Model/Types/Room.hs rename to backend/src/Model/Types/Room.hs diff --git a/src/Model/Types/School.hs b/backend/src/Model/Types/School.hs similarity index 100% rename from src/Model/Types/School.hs rename to backend/src/Model/Types/School.hs diff --git a/src/Model/Types/Security.hs b/backend/src/Model/Types/Security.hs similarity index 100% rename from src/Model/Types/Security.hs rename to backend/src/Model/Types/Security.hs diff --git a/src/Model/Types/Sheet.hs b/backend/src/Model/Types/Sheet.hs similarity index 100% rename from src/Model/Types/Sheet.hs rename to backend/src/Model/Types/Sheet.hs diff --git a/src/Model/Types/Submission.hs b/backend/src/Model/Types/Submission.hs similarity index 100% rename from src/Model/Types/Submission.hs rename to backend/src/Model/Types/Submission.hs diff --git a/src/Model/Types/SystemMessage.hs b/backend/src/Model/Types/SystemMessage.hs similarity index 100% rename from src/Model/Types/SystemMessage.hs rename to backend/src/Model/Types/SystemMessage.hs diff --git a/src/Model/Types/TH/Binary.hs b/backend/src/Model/Types/TH/Binary.hs similarity index 100% rename from src/Model/Types/TH/Binary.hs rename to backend/src/Model/Types/TH/Binary.hs diff --git a/src/Model/Types/TH/JSON.hs b/backend/src/Model/Types/TH/JSON.hs similarity index 100% rename from src/Model/Types/TH/JSON.hs rename to backend/src/Model/Types/TH/JSON.hs diff --git a/src/Model/Types/TH/PathPiece.hs b/backend/src/Model/Types/TH/PathPiece.hs similarity index 100% rename from src/Model/Types/TH/PathPiece.hs rename to backend/src/Model/Types/TH/PathPiece.hs diff --git a/src/Model/Types/TH/Wordlist.hs b/backend/src/Model/Types/TH/Wordlist.hs similarity index 100% rename from src/Model/Types/TH/Wordlist.hs rename to backend/src/Model/Types/TH/Wordlist.hs diff --git a/src/Model/Types/Upload.hs b/backend/src/Model/Types/Upload.hs similarity index 100% rename from src/Model/Types/Upload.hs rename to backend/src/Model/Types/Upload.hs diff --git a/src/Model/Types/User.hs b/backend/src/Model/Types/User.hs similarity index 100% rename from src/Model/Types/User.hs rename to backend/src/Model/Types/User.hs diff --git a/src/Network/HTTP/Types/Method/Instances.hs b/backend/src/Network/HTTP/Types/Method/Instances.hs similarity index 100% rename from src/Network/HTTP/Types/Method/Instances.hs rename to backend/src/Network/HTTP/Types/Method/Instances.hs diff --git a/src/Network/IP/Addr/Instances.hs b/backend/src/Network/IP/Addr/Instances.hs similarity index 100% rename from src/Network/IP/Addr/Instances.hs rename to backend/src/Network/IP/Addr/Instances.hs diff --git a/src/Network/Mail/Mime/Instances.hs b/backend/src/Network/Mail/Mime/Instances.hs similarity index 100% rename from src/Network/Mail/Mime/Instances.hs rename to backend/src/Network/Mail/Mime/Instances.hs diff --git a/src/Network/Mime/TH.hs b/backend/src/Network/Mime/TH.hs similarity index 100% rename from src/Network/Mime/TH.hs rename to backend/src/Network/Mime/TH.hs diff --git a/src/Network/Minio/Instances.hs b/backend/src/Network/Minio/Instances.hs similarity index 100% rename from src/Network/Minio/Instances.hs rename to backend/src/Network/Minio/Instances.hs diff --git a/src/Network/URI/Instances.hs b/backend/src/Network/URI/Instances.hs similarity index 100% rename from src/Network/URI/Instances.hs rename to backend/src/Network/URI/Instances.hs diff --git a/src/Numeric/Natural/Instances.hs b/backend/src/Numeric/Natural/Instances.hs similarity index 100% rename from src/Numeric/Natural/Instances.hs rename to backend/src/Numeric/Natural/Instances.hs diff --git a/src/Prometheus/Instances.hs b/backend/src/Prometheus/Instances.hs similarity index 100% rename from src/Prometheus/Instances.hs rename to backend/src/Prometheus/Instances.hs diff --git a/src/Servant/Client/Core/BaseUrl/Instances.hs b/backend/src/Servant/Client/Core/BaseUrl/Instances.hs similarity index 100% rename from src/Servant/Client/Core/BaseUrl/Instances.hs rename to backend/src/Servant/Client/Core/BaseUrl/Instances.hs diff --git a/src/Servant/Docs/Internal/Pretty/Instances.hs b/backend/src/Servant/Docs/Internal/Pretty/Instances.hs similarity index 100% rename from src/Servant/Docs/Internal/Pretty/Instances.hs rename to backend/src/Servant/Docs/Internal/Pretty/Instances.hs diff --git a/src/Servant/Server/Instances.hs b/backend/src/Servant/Server/Instances.hs similarity index 100% rename from src/Servant/Server/Instances.hs rename to backend/src/Servant/Server/Instances.hs diff --git a/src/ServantApi.hs b/backend/src/ServantApi.hs similarity index 100% rename from src/ServantApi.hs rename to backend/src/ServantApi.hs diff --git a/src/ServantApi/ExternalApis.hs b/backend/src/ServantApi/ExternalApis.hs similarity index 100% rename from src/ServantApi/ExternalApis.hs rename to backend/src/ServantApi/ExternalApis.hs diff --git a/src/ServantApi/ExternalApis/Type.hs b/backend/src/ServantApi/ExternalApis/Type.hs similarity index 100% rename from src/ServantApi/ExternalApis/Type.hs rename to backend/src/ServantApi/ExternalApis/Type.hs diff --git a/src/Settings.hs b/backend/src/Settings.hs similarity index 100% rename from src/Settings.hs rename to backend/src/Settings.hs diff --git a/src/Settings/Cluster.hs b/backend/src/Settings/Cluster.hs similarity index 100% rename from src/Settings/Cluster.hs rename to backend/src/Settings/Cluster.hs diff --git a/src/Settings/Cluster/Volatile.hs b/backend/src/Settings/Cluster/Volatile.hs similarity index 100% rename from src/Settings/Cluster/Volatile.hs rename to backend/src/Settings/Cluster/Volatile.hs diff --git a/src/Settings/Cookies.hs b/backend/src/Settings/Cookies.hs similarity index 100% rename from src/Settings/Cookies.hs rename to backend/src/Settings/Cookies.hs diff --git a/src/Settings/Locale.hs b/backend/src/Settings/Locale.hs similarity index 100% rename from src/Settings/Locale.hs rename to backend/src/Settings/Locale.hs diff --git a/src/Settings/Log.hs b/backend/src/Settings/Log.hs similarity index 100% rename from src/Settings/Log.hs rename to backend/src/Settings/Log.hs diff --git a/src/Settings/Mime.hs b/backend/src/Settings/Mime.hs similarity index 100% rename from src/Settings/Mime.hs rename to backend/src/Settings/Mime.hs diff --git a/src/Settings/StaticFiles.hs b/backend/src/Settings/StaticFiles.hs similarity index 100% rename from src/Settings/StaticFiles.hs rename to backend/src/Settings/StaticFiles.hs diff --git a/src/Settings/WellKnownFiles.hs b/backend/src/Settings/WellKnownFiles.hs similarity index 100% rename from src/Settings/WellKnownFiles.hs rename to backend/src/Settings/WellKnownFiles.hs diff --git a/src/Settings/WellKnownFiles/TH.hs b/backend/src/Settings/WellKnownFiles/TH.hs similarity index 100% rename from src/Settings/WellKnownFiles/TH.hs rename to backend/src/Settings/WellKnownFiles/TH.hs diff --git a/src/System/Clock/Instances.hs b/backend/src/System/Clock/Instances.hs similarity index 100% rename from src/System/Clock/Instances.hs rename to backend/src/System/Clock/Instances.hs diff --git a/src/System/FilePath/Glob/TH.hs b/backend/src/System/FilePath/Glob/TH.hs similarity index 100% rename from src/System/FilePath/Glob/TH.hs rename to backend/src/System/FilePath/Glob/TH.hs diff --git a/src/System/FilePath/Instances.hs b/backend/src/System/FilePath/Instances.hs similarity index 100% rename from src/System/FilePath/Instances.hs rename to backend/src/System/FilePath/Instances.hs diff --git a/src/Text/Blaze/Instances.hs b/backend/src/Text/Blaze/Instances.hs similarity index 100% rename from src/Text/Blaze/Instances.hs rename to backend/src/Text/Blaze/Instances.hs diff --git a/src/Text/Shakespeare/Text/Instances.hs b/backend/src/Text/Shakespeare/Text/Instances.hs similarity index 100% rename from src/Text/Shakespeare/Text/Instances.hs rename to backend/src/Text/Shakespeare/Text/Instances.hs diff --git a/src/UnliftIO/Async/Utils.hs b/backend/src/UnliftIO/Async/Utils.hs similarity index 100% rename from src/UnliftIO/Async/Utils.hs rename to backend/src/UnliftIO/Async/Utils.hs diff --git a/src/Utils.hs b/backend/src/Utils.hs similarity index 100% rename from src/Utils.hs rename to backend/src/Utils.hs diff --git a/src/Utils/ARC.hs b/backend/src/Utils/ARC.hs similarity index 100% rename from src/Utils/ARC.hs rename to backend/src/Utils/ARC.hs diff --git a/src/Utils/Approot.hs b/backend/src/Utils/Approot.hs similarity index 100% rename from src/Utils/Approot.hs rename to backend/src/Utils/Approot.hs diff --git a/src/Utils/Auth.hs b/backend/src/Utils/Auth.hs similarity index 100% rename from src/Utils/Auth.hs rename to backend/src/Utils/Auth.hs diff --git a/src/Utils/Avs.hs b/backend/src/Utils/Avs.hs similarity index 100% rename from src/Utils/Avs.hs rename to backend/src/Utils/Avs.hs diff --git a/src/Utils/Cookies.hs b/backend/src/Utils/Cookies.hs similarity index 100% rename from src/Utils/Cookies.hs rename to backend/src/Utils/Cookies.hs diff --git a/src/Utils/Cookies/Registered.hs b/backend/src/Utils/Cookies/Registered.hs similarity index 100% rename from src/Utils/Cookies/Registered.hs rename to backend/src/Utils/Cookies/Registered.hs diff --git a/src/Utils/Course.hs b/backend/src/Utils/Course.hs similarity index 100% rename from src/Utils/Course.hs rename to backend/src/Utils/Course.hs diff --git a/src/Utils/Csv.hs b/backend/src/Utils/Csv.hs similarity index 100% rename from src/Utils/Csv.hs rename to backend/src/Utils/Csv.hs diff --git a/src/Utils/Csv/Mail.hs b/backend/src/Utils/Csv/Mail.hs similarity index 100% rename from src/Utils/Csv/Mail.hs rename to backend/src/Utils/Csv/Mail.hs diff --git a/src/Utils/DB.hs b/backend/src/Utils/DB.hs similarity index 100% rename from src/Utils/DB.hs rename to backend/src/Utils/DB.hs diff --git a/src/Utils/DateTime.hs b/backend/src/Utils/DateTime.hs similarity index 100% rename from src/Utils/DateTime.hs rename to backend/src/Utils/DateTime.hs diff --git a/src/Utils/Exam/Correct.hs b/backend/src/Utils/Exam/Correct.hs similarity index 100% rename from src/Utils/Exam/Correct.hs rename to backend/src/Utils/Exam/Correct.hs diff --git a/src/Utils/Failover.hs b/backend/src/Utils/Failover.hs similarity index 100% rename from src/Utils/Failover.hs rename to backend/src/Utils/Failover.hs diff --git a/src/Utils/Files.hs b/backend/src/Utils/Files.hs similarity index 100% rename from src/Utils/Files.hs rename to backend/src/Utils/Files.hs diff --git a/src/Utils/Form.hs b/backend/src/Utils/Form.hs similarity index 100% rename from src/Utils/Form.hs rename to backend/src/Utils/Form.hs diff --git a/src/Utils/Frontend/I18n.hs b/backend/src/Utils/Frontend/I18n.hs similarity index 100% rename from src/Utils/Frontend/I18n.hs rename to backend/src/Utils/Frontend/I18n.hs diff --git a/src/Utils/Frontend/Modal.hs b/backend/src/Utils/Frontend/Modal.hs similarity index 100% rename from src/Utils/Frontend/Modal.hs rename to backend/src/Utils/Frontend/Modal.hs diff --git a/src/Utils/Frontend/Notification.hs b/backend/src/Utils/Frontend/Notification.hs similarity index 100% rename from src/Utils/Frontend/Notification.hs rename to backend/src/Utils/Frontend/Notification.hs diff --git a/src/Utils/Holidays.hs b/backend/src/Utils/Holidays.hs similarity index 100% rename from src/Utils/Holidays.hs rename to backend/src/Utils/Holidays.hs diff --git a/src/Utils/HttpConditional.hs b/backend/src/Utils/HttpConditional.hs similarity index 100% rename from src/Utils/HttpConditional.hs rename to backend/src/Utils/HttpConditional.hs diff --git a/src/Utils/I18n.hs b/backend/src/Utils/I18n.hs similarity index 100% rename from src/Utils/I18n.hs rename to backend/src/Utils/I18n.hs diff --git a/src/Utils/Icon.hs b/backend/src/Utils/Icon.hs similarity index 100% rename from src/Utils/Icon.hs rename to backend/src/Utils/Icon.hs diff --git a/src/Utils/LRU.hs b/backend/src/Utils/LRU.hs similarity index 100% rename from src/Utils/LRU.hs rename to backend/src/Utils/LRU.hs diff --git a/src/Utils/Lang.hs b/backend/src/Utils/Lang.hs similarity index 100% rename from src/Utils/Lang.hs rename to backend/src/Utils/Lang.hs diff --git a/src/Utils/Lens.hs b/backend/src/Utils/Lens.hs similarity index 100% rename from src/Utils/Lens.hs rename to backend/src/Utils/Lens.hs diff --git a/src/Utils/Lens/TH.hs b/backend/src/Utils/Lens/TH.hs similarity index 100% rename from src/Utils/Lens/TH.hs rename to backend/src/Utils/Lens/TH.hs diff --git a/src/Utils/Memo.hs b/backend/src/Utils/Memo.hs similarity index 100% rename from src/Utils/Memo.hs rename to backend/src/Utils/Memo.hs diff --git a/src/Utils/Message.hs b/backend/src/Utils/Message.hs similarity index 100% rename from src/Utils/Message.hs rename to backend/src/Utils/Message.hs diff --git a/src/Utils/Metrics.hs b/backend/src/Utils/Metrics.hs similarity index 100% rename from src/Utils/Metrics.hs rename to backend/src/Utils/Metrics.hs diff --git a/src/Utils/NTop.hs b/backend/src/Utils/NTop.hs similarity index 100% rename from src/Utils/NTop.hs rename to backend/src/Utils/NTop.hs diff --git a/src/Utils/Occurrences.hs b/backend/src/Utils/Occurrences.hs similarity index 100% rename from src/Utils/Occurrences.hs rename to backend/src/Utils/Occurrences.hs diff --git a/src/Utils/Parameters.hs b/backend/src/Utils/Parameters.hs similarity index 100% rename from src/Utils/Parameters.hs rename to backend/src/Utils/Parameters.hs diff --git a/src/Utils/PathPiece.hs b/backend/src/Utils/PathPiece.hs similarity index 100% rename from src/Utils/PathPiece.hs rename to backend/src/Utils/PathPiece.hs diff --git a/src/Utils/Persist.hs b/backend/src/Utils/Persist.hs similarity index 100% rename from src/Utils/Persist.hs rename to backend/src/Utils/Persist.hs diff --git a/src/Utils/PersistentTokenBucket.hs b/backend/src/Utils/PersistentTokenBucket.hs similarity index 100% rename from src/Utils/PersistentTokenBucket.hs rename to backend/src/Utils/PersistentTokenBucket.hs diff --git a/src/Utils/Pool.hs b/backend/src/Utils/Pool.hs similarity index 100% rename from src/Utils/Pool.hs rename to backend/src/Utils/Pool.hs diff --git a/src/Utils/Postgresql.hs b/backend/src/Utils/Postgresql.hs similarity index 100% rename from src/Utils/Postgresql.hs rename to backend/src/Utils/Postgresql.hs diff --git a/src/Utils/Print.hs b/backend/src/Utils/Print.hs similarity index 100% rename from src/Utils/Print.hs rename to backend/src/Utils/Print.hs diff --git a/src/Utils/Print/CourseCertificate.hs b/backend/src/Utils/Print/CourseCertificate.hs similarity index 100% rename from src/Utils/Print/CourseCertificate.hs rename to backend/src/Utils/Print/CourseCertificate.hs diff --git a/src/Utils/Print/ExpireQualification.hs b/backend/src/Utils/Print/ExpireQualification.hs similarity index 100% rename from src/Utils/Print/ExpireQualification.hs rename to backend/src/Utils/Print/ExpireQualification.hs diff --git a/src/Utils/Print/Instances.hs b/backend/src/Utils/Print/Instances.hs similarity index 100% rename from src/Utils/Print/Instances.hs rename to backend/src/Utils/Print/Instances.hs diff --git a/src/Utils/Print/Letters.hs b/backend/src/Utils/Print/Letters.hs similarity index 100% rename from src/Utils/Print/Letters.hs rename to backend/src/Utils/Print/Letters.hs diff --git a/src/Utils/Print/RenewQualification.hs b/backend/src/Utils/Print/RenewQualification.hs similarity index 100% rename from src/Utils/Print/RenewQualification.hs rename to backend/src/Utils/Print/RenewQualification.hs diff --git a/src/Utils/Print/SomeLetter.hs b/backend/src/Utils/Print/SomeLetter.hs similarity index 100% rename from src/Utils/Print/SomeLetter.hs rename to backend/src/Utils/Print/SomeLetter.hs diff --git a/src/Utils/Room.hs b/backend/src/Utils/Room.hs similarity index 100% rename from src/Utils/Room.hs rename to backend/src/Utils/Room.hs diff --git a/src/Utils/Route.hs b/backend/src/Utils/Route.hs similarity index 100% rename from src/Utils/Route.hs rename to backend/src/Utils/Route.hs diff --git a/src/Utils/Session.hs b/backend/src/Utils/Session.hs similarity index 100% rename from src/Utils/Session.hs rename to backend/src/Utils/Session.hs diff --git a/src/Utils/Set.hs b/backend/src/Utils/Set.hs similarity index 100% rename from src/Utils/Set.hs rename to backend/src/Utils/Set.hs diff --git a/src/Utils/Sheet.hs b/backend/src/Utils/Sheet.hs similarity index 100% rename from src/Utils/Sheet.hs rename to backend/src/Utils/Sheet.hs diff --git a/src/Utils/Sql.hs b/backend/src/Utils/Sql.hs similarity index 100% rename from src/Utils/Sql.hs rename to backend/src/Utils/Sql.hs diff --git a/src/Utils/SystemMessage.hs b/backend/src/Utils/SystemMessage.hs similarity index 100% rename from src/Utils/SystemMessage.hs rename to backend/src/Utils/SystemMessage.hs diff --git a/src/Utils/TH.hs b/backend/src/Utils/TH.hs similarity index 100% rename from src/Utils/TH.hs rename to backend/src/Utils/TH.hs diff --git a/src/Utils/TH/AlphaConversion.hs b/backend/src/Utils/TH/AlphaConversion.hs similarity index 100% rename from src/Utils/TH/AlphaConversion.hs rename to backend/src/Utils/TH/AlphaConversion.hs diff --git a/src/Utils/TH/Routes.hs b/backend/src/Utils/TH/Routes.hs similarity index 100% rename from src/Utils/TH/Routes.hs rename to backend/src/Utils/TH/Routes.hs diff --git a/src/Utils/Term.hs b/backend/src/Utils/Term.hs similarity index 100% rename from src/Utils/Term.hs rename to backend/src/Utils/Term.hs diff --git a/src/Utils/Tokens.hs b/backend/src/Utils/Tokens.hs similarity index 100% rename from src/Utils/Tokens.hs rename to backend/src/Utils/Tokens.hs diff --git a/src/Utils/Users.hs b/backend/src/Utils/Users.hs similarity index 100% rename from src/Utils/Users.hs rename to backend/src/Utils/Users.hs diff --git a/src/Utils/VolatileClusterSettings.hs b/backend/src/Utils/VolatileClusterSettings.hs similarity index 100% rename from src/Utils/VolatileClusterSettings.hs rename to backend/src/Utils/VolatileClusterSettings.hs diff --git a/src/Utils/Widgets.hs b/backend/src/Utils/Widgets.hs similarity index 100% rename from src/Utils/Widgets.hs rename to backend/src/Utils/Widgets.hs diff --git a/src/Web/Cookie/Instances.hs b/backend/src/Web/Cookie/Instances.hs similarity index 100% rename from src/Web/Cookie/Instances.hs rename to backend/src/Web/Cookie/Instances.hs diff --git a/src/Web/PathPieces/Instances.hs b/backend/src/Web/PathPieces/Instances.hs similarity index 100% rename from src/Web/PathPieces/Instances.hs rename to backend/src/Web/PathPieces/Instances.hs diff --git a/src/Web/ServerSession/Backend/Persistent/Memcached.hs b/backend/src/Web/ServerSession/Backend/Persistent/Memcached.hs similarity index 100% rename from src/Web/ServerSession/Backend/Persistent/Memcached.hs rename to backend/src/Web/ServerSession/Backend/Persistent/Memcached.hs diff --git a/src/Web/ServerSession/Frontend/Yesod/Jwt.hs b/backend/src/Web/ServerSession/Frontend/Yesod/Jwt.hs similarity index 100% rename from src/Web/ServerSession/Frontend/Yesod/Jwt.hs rename to backend/src/Web/ServerSession/Frontend/Yesod/Jwt.hs diff --git a/src/Yesod/Core/Instances.hs b/backend/src/Yesod/Core/Instances.hs similarity index 100% rename from src/Yesod/Core/Instances.hs rename to backend/src/Yesod/Core/Instances.hs diff --git a/src/Yesod/Core/Types/Instances.hs b/backend/src/Yesod/Core/Types/Instances.hs similarity index 100% rename from src/Yesod/Core/Types/Instances.hs rename to backend/src/Yesod/Core/Types/Instances.hs diff --git a/src/Yesod/Core/Types/Instances/Catch.hs b/backend/src/Yesod/Core/Types/Instances/Catch.hs similarity index 100% rename from src/Yesod/Core/Types/Instances/Catch.hs rename to backend/src/Yesod/Core/Types/Instances/Catch.hs diff --git a/src/Yesod/Form/Fields/Instances.hs b/backend/src/Yesod/Form/Fields/Instances.hs similarity index 100% rename from src/Yesod/Form/Fields/Instances.hs rename to backend/src/Yesod/Form/Fields/Instances.hs diff --git a/src/Yesod/Form/Types/Instances.hs b/backend/src/Yesod/Form/Types/Instances.hs similarity index 100% rename from src/Yesod/Form/Types/Instances.hs rename to backend/src/Yesod/Form/Types/Instances.hs diff --git a/src/Yesod/Servant.hs b/backend/src/Yesod/Servant.hs similarity index 100% rename from src/Yesod/Servant.hs rename to backend/src/Yesod/Servant.hs diff --git a/src/Yesod/Servant/HttpApiDataInjective.hs b/backend/src/Yesod/Servant/HttpApiDataInjective.hs similarity index 100% rename from src/Yesod/Servant/HttpApiDataInjective.hs rename to backend/src/Yesod/Servant/HttpApiDataInjective.hs diff --git a/src/index.md b/backend/src/index.md similarity index 100% rename from src/index.md rename to backend/src/index.md diff --git a/src/index.md.license b/backend/src/index.md.license similarity index 100% rename from src/index.md.license rename to backend/src/index.md.license diff --git a/stack-flake.yaml b/backend/stack-flake.yaml similarity index 100% rename from stack-flake.yaml rename to backend/stack-flake.yaml diff --git a/stack.nix b/backend/stack.nix similarity index 100% rename from stack.nix rename to backend/stack.nix diff --git a/stack.yaml b/backend/stack.yaml similarity index 100% rename from stack.yaml rename to backend/stack.yaml diff --git a/stack.yaml.lock b/backend/stack.yaml.lock similarity index 100% rename from stack.yaml.lock rename to backend/stack.yaml.lock diff --git a/stack.yaml.lock.license b/backend/stack.yaml.lock.license similarity index 100% rename from stack.yaml.lock.license rename to backend/stack.yaml.lock.license diff --git a/stackage.nix b/backend/stackage.nix similarity index 100% rename from stackage.nix rename to backend/stackage.nix diff --git a/templates/admin-problems.hamlet b/backend/templates/admin-problems.hamlet similarity index 100% rename from templates/admin-problems.hamlet rename to backend/templates/admin-problems.hamlet diff --git a/templates/admin-tokens.hamlet b/backend/templates/admin-tokens.hamlet similarity index 100% rename from templates/admin-tokens.hamlet rename to backend/templates/admin-tokens.hamlet diff --git a/templates/adminFeatures.hamlet b/backend/templates/adminFeatures.hamlet similarity index 100% rename from templates/adminFeatures.hamlet rename to backend/templates/adminFeatures.hamlet diff --git a/templates/adminUser.hamlet b/backend/templates/adminUser.hamlet similarity index 100% rename from templates/adminUser.hamlet rename to backend/templates/adminUser.hamlet diff --git a/templates/approot.julius b/backend/templates/approot.julius similarity index 100% rename from templates/approot.julius rename to backend/templates/approot.julius diff --git a/templates/authpreds.hamlet b/backend/templates/authpreds.hamlet similarity index 100% rename from templates/authpreds.hamlet rename to backend/templates/authpreds.hamlet diff --git a/templates/avs.hamlet b/backend/templates/avs.hamlet similarity index 100% rename from templates/avs.hamlet rename to backend/templates/avs.hamlet diff --git a/templates/changelog.hamlet b/backend/templates/changelog.hamlet similarity index 100% rename from templates/changelog.hamlet rename to backend/templates/changelog.hamlet diff --git a/templates/correction-user.hamlet b/backend/templates/correction-user.hamlet similarity index 100% rename from templates/correction-user.hamlet rename to backend/templates/correction-user.hamlet diff --git a/templates/correction.hamlet b/backend/templates/correction.hamlet similarity index 100% rename from templates/correction.hamlet rename to backend/templates/correction.hamlet diff --git a/templates/corrections-assign.hamlet b/backend/templates/corrections-assign.hamlet similarity index 100% rename from templates/corrections-assign.hamlet rename to backend/templates/corrections-assign.hamlet diff --git a/templates/corrections-create.hamlet b/backend/templates/corrections-create.hamlet similarity index 100% rename from templates/corrections-create.hamlet rename to backend/templates/corrections-create.hamlet diff --git a/templates/corrections-grade.hamlet b/backend/templates/corrections-grade.hamlet similarity index 100% rename from templates/corrections-grade.hamlet rename to backend/templates/corrections-grade.hamlet diff --git a/templates/corrections-overview.hamlet b/backend/templates/corrections-overview.hamlet similarity index 100% rename from templates/corrections-overview.hamlet rename to backend/templates/corrections-overview.hamlet diff --git a/templates/corrections-upload.hamlet b/backend/templates/corrections-upload.hamlet similarity index 100% rename from templates/corrections-upload.hamlet rename to backend/templates/corrections-upload.hamlet diff --git a/templates/corrections.hamlet b/backend/templates/corrections.hamlet similarity index 100% rename from templates/corrections.hamlet rename to backend/templates/corrections.hamlet diff --git a/templates/course-news.hamlet b/backend/templates/course-news.hamlet similarity index 100% rename from templates/course-news.hamlet rename to backend/templates/course-news.hamlet diff --git a/templates/course-participants.hamlet b/backend/templates/course-participants.hamlet similarity index 100% rename from templates/course-participants.hamlet rename to backend/templates/course-participants.hamlet diff --git a/templates/course.hamlet b/backend/templates/course.hamlet similarity index 100% rename from templates/course.hamlet rename to backend/templates/course.hamlet diff --git a/templates/course/add-user/confirmation-wrapper.hamlet b/backend/templates/course/add-user/confirmation-wrapper.hamlet similarity index 100% rename from templates/course/add-user/confirmation-wrapper.hamlet rename to backend/templates/course/add-user/confirmation-wrapper.hamlet diff --git a/templates/course/add-user/confirmation.hamlet b/backend/templates/course/add-user/confirmation.hamlet similarity index 100% rename from templates/course/add-user/confirmation.hamlet rename to backend/templates/course/add-user/confirmation.hamlet diff --git a/templates/course/add-user/confirmation.julius b/backend/templates/course/add-user/confirmation.julius similarity index 100% rename from templates/course/add-user/confirmation.julius rename to backend/templates/course/add-user/confirmation.julius diff --git a/templates/course/lecturerMassInput/add.hamlet b/backend/templates/course/lecturerMassInput/add.hamlet similarity index 100% rename from templates/course/lecturerMassInput/add.hamlet rename to backend/templates/course/lecturerMassInput/add.hamlet diff --git a/templates/course/lecturerMassInput/cellInvitation.hamlet b/backend/templates/course/lecturerMassInput/cellInvitation.hamlet similarity index 100% rename from templates/course/lecturerMassInput/cellInvitation.hamlet rename to backend/templates/course/lecturerMassInput/cellInvitation.hamlet diff --git a/templates/course/lecturerMassInput/cellKnown.hamlet b/backend/templates/course/lecturerMassInput/cellKnown.hamlet similarity index 100% rename from templates/course/lecturerMassInput/cellKnown.hamlet rename to backend/templates/course/lecturerMassInput/cellKnown.hamlet diff --git a/templates/course/lecturerMassInput/layout.hamlet b/backend/templates/course/lecturerMassInput/layout.hamlet similarity index 100% rename from templates/course/lecturerMassInput/layout.hamlet rename to backend/templates/course/lecturerMassInput/layout.hamlet diff --git a/templates/course/login-to-register.hamlet b/backend/templates/course/login-to-register.hamlet similarity index 100% rename from templates/course/login-to-register.hamlet rename to backend/templates/course/login-to-register.hamlet diff --git a/templates/course/user/corrections.hamlet b/backend/templates/course/user/corrections.hamlet similarity index 100% rename from templates/course/user/corrections.hamlet rename to backend/templates/course/user/corrections.hamlet diff --git a/templates/course/user/exams.hamlet b/backend/templates/course/user/exams.hamlet similarity index 100% rename from templates/course/user/exams.hamlet rename to backend/templates/course/user/exams.hamlet diff --git a/templates/course/user/note.hamlet b/backend/templates/course/user/note.hamlet similarity index 100% rename from templates/course/user/note.hamlet rename to backend/templates/course/user/note.hamlet diff --git a/templates/course/user/profile.hamlet b/backend/templates/course/user/profile.hamlet similarity index 100% rename from templates/course/user/profile.hamlet rename to backend/templates/course/user/profile.hamlet diff --git a/templates/course/user/tutorials.hamlet b/backend/templates/course/user/tutorials.hamlet similarity index 100% rename from templates/course/user/tutorials.hamlet rename to backend/templates/course/user/tutorials.hamlet diff --git a/templates/courses.hamlet b/backend/templates/courses.hamlet similarity index 100% rename from templates/courses.hamlet rename to backend/templates/courses.hamlet diff --git a/templates/csv-import-confirmation-wrapper.hamlet b/backend/templates/csv-import-confirmation-wrapper.hamlet similarity index 100% rename from templates/csv-import-confirmation-wrapper.hamlet rename to backend/templates/csv-import-confirmation-wrapper.hamlet diff --git a/templates/csv-import-confirmation.hamlet b/backend/templates/csv-import-confirmation.hamlet similarity index 100% rename from templates/csv-import-confirmation.hamlet rename to backend/templates/csv-import-confirmation.hamlet diff --git a/templates/csv-import-confirmation.julius b/backend/templates/csv-import-confirmation.julius similarity index 100% rename from templates/csv-import-confirmation.julius rename to backend/templates/csv-import-confirmation.julius diff --git a/templates/current-route.julius b/backend/templates/current-route.julius similarity index 100% rename from templates/current-route.julius rename to backend/templates/current-route.julius diff --git a/templates/default-layout-wrapper.hamlet b/backend/templates/default-layout-wrapper.hamlet similarity index 100% rename from templates/default-layout-wrapper.hamlet rename to backend/templates/default-layout-wrapper.hamlet diff --git a/templates/default-layout.hamlet b/backend/templates/default-layout.hamlet similarity index 100% rename from templates/default-layout.hamlet rename to backend/templates/default-layout.hamlet diff --git a/templates/deletedUser.hamlet b/backend/templates/deletedUser.hamlet similarity index 100% rename from templates/deletedUser.hamlet rename to backend/templates/deletedUser.hamlet diff --git a/templates/exam-correct.hamlet b/backend/templates/exam-correct.hamlet similarity index 100% rename from templates/exam-correct.hamlet rename to backend/templates/exam-correct.hamlet diff --git a/templates/exam-edit.hamlet b/backend/templates/exam-edit.hamlet similarity index 100% rename from templates/exam-edit.hamlet rename to backend/templates/exam-edit.hamlet diff --git a/templates/exam-list.hamlet b/backend/templates/exam-list.hamlet similarity index 100% rename from templates/exam-list.hamlet rename to backend/templates/exam-list.hamlet diff --git a/templates/exam-new.hamlet b/backend/templates/exam-new.hamlet similarity index 100% rename from templates/exam-new.hamlet rename to backend/templates/exam-new.hamlet diff --git a/templates/exam-office/exam-result-synced.hamlet b/backend/templates/exam-office/exam-result-synced.hamlet similarity index 100% rename from templates/exam-office/exam-result-synced.hamlet rename to backend/templates/exam-office/exam-result-synced.hamlet diff --git a/templates/exam-office/exam-results.hamlet b/backend/templates/exam-office/exam-results.hamlet similarity index 100% rename from templates/exam-office/exam-results.hamlet rename to backend/templates/exam-office/exam-results.hamlet diff --git a/templates/exam-office/externalExamGrades.hamlet b/backend/templates/exam-office/externalExamGrades.hamlet similarity index 100% rename from templates/exam-office/externalExamGrades.hamlet rename to backend/templates/exam-office/externalExamGrades.hamlet diff --git a/templates/exam-show.hamlet b/backend/templates/exam-show.hamlet similarity index 100% rename from templates/exam-show.hamlet rename to backend/templates/exam-show.hamlet diff --git a/templates/exam-users.hamlet b/backend/templates/exam-users.hamlet similarity index 100% rename from templates/exam-users.hamlet rename to backend/templates/exam-users.hamlet diff --git a/templates/exam/auto-occurrence-confirm.hamlet b/backend/templates/exam/auto-occurrence-confirm.hamlet similarity index 100% rename from templates/exam/auto-occurrence-confirm.hamlet rename to backend/templates/exam/auto-occurrence-confirm.hamlet diff --git a/templates/exam/schoolMassInput/add.hamlet b/backend/templates/exam/schoolMassInput/add.hamlet similarity index 100% rename from templates/exam/schoolMassInput/add.hamlet rename to backend/templates/exam/schoolMassInput/add.hamlet diff --git a/templates/exam/schoolMassInput/cell.hamlet b/backend/templates/exam/schoolMassInput/cell.hamlet similarity index 100% rename from templates/exam/schoolMassInput/cell.hamlet rename to backend/templates/exam/schoolMassInput/cell.hamlet diff --git a/templates/exam/schoolMassInput/layout.hamlet b/backend/templates/exam/schoolMassInput/layout.hamlet similarity index 100% rename from templates/exam/schoolMassInput/layout.hamlet rename to backend/templates/exam/schoolMassInput/layout.hamlet diff --git a/templates/external-exam-show.hamlet b/backend/templates/external-exam-show.hamlet similarity index 100% rename from templates/external-exam-show.hamlet rename to backend/templates/external-exam-show.hamlet diff --git a/templates/external-exam/schoolMassInput/add.hamlet b/backend/templates/external-exam/schoolMassInput/add.hamlet similarity index 100% rename from templates/external-exam/schoolMassInput/add.hamlet rename to backend/templates/external-exam/schoolMassInput/add.hamlet diff --git a/templates/external-exam/schoolMassInput/cell.hamlet b/backend/templates/external-exam/schoolMassInput/cell.hamlet similarity index 100% rename from templates/external-exam/schoolMassInput/cell.hamlet rename to backend/templates/external-exam/schoolMassInput/cell.hamlet diff --git a/templates/external-exam/schoolMassInput/layout.hamlet b/backend/templates/external-exam/schoolMassInput/layout.hamlet similarity index 100% rename from templates/external-exam/schoolMassInput/layout.hamlet rename to backend/templates/external-exam/schoolMassInput/layout.hamlet diff --git a/templates/external-exam/staffMassInput/add.hamlet b/backend/templates/external-exam/staffMassInput/add.hamlet similarity index 100% rename from templates/external-exam/staffMassInput/add.hamlet rename to backend/templates/external-exam/staffMassInput/add.hamlet diff --git a/templates/external-exam/staffMassInput/cellInvitation.hamlet b/backend/templates/external-exam/staffMassInput/cellInvitation.hamlet similarity index 100% rename from templates/external-exam/staffMassInput/cellInvitation.hamlet rename to backend/templates/external-exam/staffMassInput/cellInvitation.hamlet diff --git a/templates/external-exam/staffMassInput/cellKnown.hamlet b/backend/templates/external-exam/staffMassInput/cellKnown.hamlet similarity index 100% rename from templates/external-exam/staffMassInput/cellKnown.hamlet rename to backend/templates/external-exam/staffMassInput/cellKnown.hamlet diff --git a/templates/external-exam/staffMassInput/layout.hamlet b/backend/templates/external-exam/staffMassInput/layout.hamlet similarity index 100% rename from templates/external-exam/staffMassInput/layout.hamlet rename to backend/templates/external-exam/staffMassInput/layout.hamlet diff --git a/templates/faq.hamlet b/backend/templates/faq.hamlet similarity index 100% rename from templates/faq.hamlet rename to backend/templates/faq.hamlet diff --git a/templates/firm-contact-info.hamlet b/backend/templates/firm-contact-info.hamlet similarity index 100% rename from templates/firm-contact-info.hamlet rename to backend/templates/firm-contact-info.hamlet diff --git a/templates/firm-users.hamlet b/backend/templates/firm-users.hamlet similarity index 100% rename from templates/firm-users.hamlet rename to backend/templates/firm-users.hamlet diff --git a/templates/glossary.hamlet b/backend/templates/glossary.hamlet similarity index 100% rename from templates/glossary.hamlet rename to backend/templates/glossary.hamlet diff --git a/templates/help.hamlet b/backend/templates/help.hamlet similarity index 100% rename from templates/help.hamlet rename to backend/templates/help.hamlet diff --git a/templates/i18n.julius b/backend/templates/i18n.julius similarity index 100% rename from templates/i18n.julius rename to backend/templates/i18n.julius diff --git a/templates/i18n/README_i18n.txt b/backend/templates/i18n/README_i18n.txt similarity index 100% rename from templates/i18n/README_i18n.txt rename to backend/templates/i18n/README_i18n.txt diff --git a/templates/i18n/README_i18n.txt.license b/backend/templates/i18n/README_i18n.txt.license similarity index 100% rename from templates/i18n/README_i18n.txt.license rename to backend/templates/i18n/README_i18n.txt.license diff --git a/templates/i18n/admin-test/de-de-formal.hamlet b/backend/templates/i18n/admin-test/de-de-formal.hamlet similarity index 100% rename from templates/i18n/admin-test/de-de-formal.hamlet rename to backend/templates/i18n/admin-test/de-de-formal.hamlet diff --git a/templates/i18n/admin-test/en-eu.hamlet b/backend/templates/i18n/admin-test/en-eu.hamlet similarity index 100% rename from templates/i18n/admin-test/en-eu.hamlet rename to backend/templates/i18n/admin-test/en-eu.hamlet diff --git a/templates/i18n/applications-list-info/de-de-formal.hamlet b/backend/templates/i18n/applications-list-info/de-de-formal.hamlet similarity index 100% rename from templates/i18n/applications-list-info/de-de-formal.hamlet rename to backend/templates/i18n/applications-list-info/de-de-formal.hamlet diff --git a/templates/i18n/applications-list-info/en-eu.hamlet b/backend/templates/i18n/applications-list-info/en-eu.hamlet similarity index 100% rename from templates/i18n/applications-list-info/en-eu.hamlet rename to backend/templates/i18n/applications-list-info/en-eu.hamlet diff --git a/templates/i18n/authorship-statement-submission-explanation/exists.de-de-formal.hamlet b/backend/templates/i18n/authorship-statement-submission-explanation/exists.de-de-formal.hamlet similarity index 100% rename from templates/i18n/authorship-statement-submission-explanation/exists.de-de-formal.hamlet rename to backend/templates/i18n/authorship-statement-submission-explanation/exists.de-de-formal.hamlet diff --git a/templates/i18n/authorship-statement-submission-explanation/exists.en-eu.hamlet b/backend/templates/i18n/authorship-statement-submission-explanation/exists.en-eu.hamlet similarity index 100% rename from templates/i18n/authorship-statement-submission-explanation/exists.en-eu.hamlet rename to backend/templates/i18n/authorship-statement-submission-explanation/exists.en-eu.hamlet diff --git a/templates/i18n/authorship-statement-submission-explanation/missing.de-de-formal.hamlet b/backend/templates/i18n/authorship-statement-submission-explanation/missing.de-de-formal.hamlet similarity index 100% rename from templates/i18n/authorship-statement-submission-explanation/missing.de-de-formal.hamlet rename to backend/templates/i18n/authorship-statement-submission-explanation/missing.de-de-formal.hamlet diff --git a/templates/i18n/authorship-statement-submission-explanation/missing.en-eu.hamlet b/backend/templates/i18n/authorship-statement-submission-explanation/missing.en-eu.hamlet similarity index 100% rename from templates/i18n/authorship-statement-submission-explanation/missing.en-eu.hamlet rename to backend/templates/i18n/authorship-statement-submission-explanation/missing.en-eu.hamlet diff --git a/templates/i18n/authorship-statement-submission-explanation/old-statement.de-de-formal.hamlet b/backend/templates/i18n/authorship-statement-submission-explanation/old-statement.de-de-formal.hamlet similarity index 100% rename from templates/i18n/authorship-statement-submission-explanation/old-statement.de-de-formal.hamlet rename to backend/templates/i18n/authorship-statement-submission-explanation/old-statement.de-de-formal.hamlet diff --git a/templates/i18n/authorship-statement-submission-explanation/old-statement.en-eu.hamlet b/backend/templates/i18n/authorship-statement-submission-explanation/old-statement.en-eu.hamlet similarity index 100% rename from templates/i18n/authorship-statement-submission-explanation/old-statement.en-eu.hamlet rename to backend/templates/i18n/authorship-statement-submission-explanation/old-statement.en-eu.hamlet diff --git a/templates/i18n/avs-synchronisation/de-de-formal.hamlet b/backend/templates/i18n/avs-synchronisation/de-de-formal.hamlet similarity index 100% rename from templates/i18n/avs-synchronisation/de-de-formal.hamlet rename to backend/templates/i18n/avs-synchronisation/de-de-formal.hamlet diff --git a/templates/i18n/avs-synchronisation/en-eu.hamlet b/backend/templates/i18n/avs-synchronisation/en-eu.hamlet similarity index 100% rename from templates/i18n/avs-synchronisation/en-eu.hamlet rename to backend/templates/i18n/avs-synchronisation/en-eu.hamlet diff --git a/templates/i18n/changelog/fradrive-initial-release.de-de-formal.hamlet b/backend/templates/i18n/changelog/fradrive-initial-release.de-de-formal.hamlet similarity index 100% rename from templates/i18n/changelog/fradrive-initial-release.de-de-formal.hamlet rename to backend/templates/i18n/changelog/fradrive-initial-release.de-de-formal.hamlet diff --git a/templates/i18n/changelog/fradrive-initial-release.en-eu.hamlet b/backend/templates/i18n/changelog/fradrive-initial-release.en-eu.hamlet similarity index 100% rename from templates/i18n/changelog/fradrive-initial-release.en-eu.hamlet rename to backend/templates/i18n/changelog/fradrive-initial-release.en-eu.hamlet diff --git a/templates/i18n/changelog/supervisors-may-revoke-licences.de-de-formal.hamlet b/backend/templates/i18n/changelog/supervisors-may-revoke-licences.de-de-formal.hamlet similarity index 100% rename from templates/i18n/changelog/supervisors-may-revoke-licences.de-de-formal.hamlet rename to backend/templates/i18n/changelog/supervisors-may-revoke-licences.de-de-formal.hamlet diff --git a/templates/i18n/changelog/supervisors-may-revoke-licences.en-eu.hamlet b/backend/templates/i18n/changelog/supervisors-may-revoke-licences.en-eu.hamlet similarity index 100% rename from templates/i18n/changelog/supervisors-may-revoke-licences.en-eu.hamlet rename to backend/templates/i18n/changelog/supervisors-may-revoke-licences.en-eu.hamlet diff --git a/templates/i18n/comm-test-tip/de-de-formal.hamlet b/backend/templates/i18n/comm-test-tip/de-de-formal.hamlet similarity index 100% rename from templates/i18n/comm-test-tip/de-de-formal.hamlet rename to backend/templates/i18n/comm-test-tip/de-de-formal.hamlet diff --git a/templates/i18n/comm-test-tip/en-eu.hamlet b/backend/templates/i18n/comm-test-tip/en-eu.hamlet similarity index 100% rename from templates/i18n/comm-test-tip/en-eu.hamlet rename to backend/templates/i18n/comm-test-tip/en-eu.hamlet diff --git a/templates/i18n/copyright/de-de-formal.hamlet b/backend/templates/i18n/copyright/de-de-formal.hamlet similarity index 100% rename from templates/i18n/copyright/de-de-formal.hamlet rename to backend/templates/i18n/copyright/de-de-formal.hamlet diff --git a/templates/i18n/copyright/en.hamlet b/backend/templates/i18n/copyright/en.hamlet similarity index 100% rename from templates/i18n/copyright/en.hamlet rename to backend/templates/i18n/copyright/en.hamlet diff --git a/templates/i18n/corrections-upload-instructions/de-de-formal.hamlet b/backend/templates/i18n/corrections-upload-instructions/de-de-formal.hamlet similarity index 100% rename from templates/i18n/corrections-upload-instructions/de-de-formal.hamlet rename to backend/templates/i18n/corrections-upload-instructions/de-de-formal.hamlet diff --git a/templates/i18n/corrections-upload-instructions/en-eu.hamlet b/backend/templates/i18n/corrections-upload-instructions/en-eu.hamlet similarity index 100% rename from templates/i18n/corrections-upload-instructions/en-eu.hamlet rename to backend/templates/i18n/corrections-upload-instructions/en-eu.hamlet diff --git a/templates/i18n/course-exam-office-explanation/de-de-formal.hamlet b/backend/templates/i18n/course-exam-office-explanation/de-de-formal.hamlet similarity index 100% rename from templates/i18n/course-exam-office-explanation/de-de-formal.hamlet rename to backend/templates/i18n/course-exam-office-explanation/de-de-formal.hamlet diff --git a/templates/i18n/course-exam-office-explanation/en-eu.hamlet b/backend/templates/i18n/course-exam-office-explanation/en-eu.hamlet similarity index 100% rename from templates/i18n/course-exam-office-explanation/en-eu.hamlet rename to backend/templates/i18n/course-exam-office-explanation/en-eu.hamlet diff --git a/templates/i18n/data-delete/de-de-formal.hamlet b/backend/templates/i18n/data-delete/de-de-formal.hamlet similarity index 100% rename from templates/i18n/data-delete/de-de-formal.hamlet rename to backend/templates/i18n/data-delete/de-de-formal.hamlet diff --git a/templates/i18n/data-delete/en-eu.hamlet b/backend/templates/i18n/data-delete/en-eu.hamlet similarity index 100% rename from templates/i18n/data-delete/en-eu.hamlet rename to backend/templates/i18n/data-delete/en-eu.hamlet diff --git a/templates/i18n/data-protection/de-de-formal.hamlet b/backend/templates/i18n/data-protection/de-de-formal.hamlet similarity index 100% rename from templates/i18n/data-protection/de-de-formal.hamlet rename to backend/templates/i18n/data-protection/de-de-formal.hamlet diff --git a/templates/i18n/data-protection/en.hamlet b/backend/templates/i18n/data-protection/en.hamlet similarity index 100% rename from templates/i18n/data-protection/en.hamlet rename to backend/templates/i18n/data-protection/en.hamlet diff --git a/templates/i18n/exam-auto-occurrence-calculate/de-de-formal.hamlet b/backend/templates/i18n/exam-auto-occurrence-calculate/de-de-formal.hamlet similarity index 100% rename from templates/i18n/exam-auto-occurrence-calculate/de-de-formal.hamlet rename to backend/templates/i18n/exam-auto-occurrence-calculate/de-de-formal.hamlet diff --git a/templates/i18n/exam-auto-occurrence-calculate/en-eu.hamlet b/backend/templates/i18n/exam-auto-occurrence-calculate/en-eu.hamlet similarity index 100% rename from templates/i18n/exam-auto-occurrence-calculate/en-eu.hamlet rename to backend/templates/i18n/exam-auto-occurrence-calculate/en-eu.hamlet diff --git a/templates/i18n/exam-correct-explanation/de-de-formal.hamlet b/backend/templates/i18n/exam-correct-explanation/de-de-formal.hamlet similarity index 100% rename from templates/i18n/exam-correct-explanation/de-de-formal.hamlet rename to backend/templates/i18n/exam-correct-explanation/de-de-formal.hamlet diff --git a/templates/i18n/exam-correct-explanation/en-eu.hamlet b/backend/templates/i18n/exam-correct-explanation/en-eu.hamlet similarity index 100% rename from templates/i18n/exam-correct-explanation/en-eu.hamlet rename to backend/templates/i18n/exam-correct-explanation/en-eu.hamlet diff --git a/templates/i18n/exam-mode/aids/de-de-formal.hamlet b/backend/templates/i18n/exam-mode/aids/de-de-formal.hamlet similarity index 100% rename from templates/i18n/exam-mode/aids/de-de-formal.hamlet rename to backend/templates/i18n/exam-mode/aids/de-de-formal.hamlet diff --git a/templates/i18n/exam-mode/aids/en-eu.hamlet b/backend/templates/i18n/exam-mode/aids/en-eu.hamlet similarity index 100% rename from templates/i18n/exam-mode/aids/en-eu.hamlet rename to backend/templates/i18n/exam-mode/aids/en-eu.hamlet diff --git a/templates/i18n/exam-mode/online/de-de-formal.hamlet b/backend/templates/i18n/exam-mode/online/de-de-formal.hamlet similarity index 100% rename from templates/i18n/exam-mode/online/de-de-formal.hamlet rename to backend/templates/i18n/exam-mode/online/de-de-formal.hamlet diff --git a/templates/i18n/exam-mode/online/en-eu.hamlet b/backend/templates/i18n/exam-mode/online/en-eu.hamlet similarity index 100% rename from templates/i18n/exam-mode/online/en-eu.hamlet rename to backend/templates/i18n/exam-mode/online/en-eu.hamlet diff --git a/templates/i18n/exam-mode/requiredEquipment/de-de-formal.hamlet b/backend/templates/i18n/exam-mode/requiredEquipment/de-de-formal.hamlet similarity index 100% rename from templates/i18n/exam-mode/requiredEquipment/de-de-formal.hamlet rename to backend/templates/i18n/exam-mode/requiredEquipment/de-de-formal.hamlet diff --git a/templates/i18n/exam-mode/requiredEquipment/en-eu.hamlet b/backend/templates/i18n/exam-mode/requiredEquipment/en-eu.hamlet similarity index 100% rename from templates/i18n/exam-mode/requiredEquipment/en-eu.hamlet rename to backend/templates/i18n/exam-mode/requiredEquipment/en-eu.hamlet diff --git a/templates/i18n/exam-mode/synchronicity/de-de-formal.hamlet b/backend/templates/i18n/exam-mode/synchronicity/de-de-formal.hamlet similarity index 100% rename from templates/i18n/exam-mode/synchronicity/de-de-formal.hamlet rename to backend/templates/i18n/exam-mode/synchronicity/de-de-formal.hamlet diff --git a/templates/i18n/exam-mode/synchronicity/en-eu.hamlet b/backend/templates/i18n/exam-mode/synchronicity/en-eu.hamlet similarity index 100% rename from templates/i18n/exam-mode/synchronicity/en-eu.hamlet rename to backend/templates/i18n/exam-mode/synchronicity/en-eu.hamlet diff --git a/templates/i18n/exam-office/exam-grades-explanation/de-de-formal.hamlet b/backend/templates/i18n/exam-office/exam-grades-explanation/de-de-formal.hamlet similarity index 100% rename from templates/i18n/exam-office/exam-grades-explanation/de-de-formal.hamlet rename to backend/templates/i18n/exam-office/exam-grades-explanation/de-de-formal.hamlet diff --git a/templates/i18n/exam-office/exam-grades-explanation/en-eu.hamlet b/backend/templates/i18n/exam-office/exam-grades-explanation/en-eu.hamlet similarity index 100% rename from templates/i18n/exam-office/exam-grades-explanation/en-eu.hamlet rename to backend/templates/i18n/exam-office/exam-grades-explanation/en-eu.hamlet diff --git a/templates/i18n/exam-users/computed-values-tip/de-de-formal.hamlet b/backend/templates/i18n/exam-users/computed-values-tip/de-de-formal.hamlet similarity index 100% rename from templates/i18n/exam-users/computed-values-tip/de-de-formal.hamlet rename to backend/templates/i18n/exam-users/computed-values-tip/de-de-formal.hamlet diff --git a/templates/i18n/exam-users/computed-values-tip/en-eu.hamlet b/backend/templates/i18n/exam-users/computed-values-tip/en-eu.hamlet similarity index 100% rename from templates/i18n/exam-users/computed-values-tip/en-eu.hamlet rename to backend/templates/i18n/exam-users/computed-values-tip/en-eu.hamlet diff --git a/templates/i18n/external-exam-correct-explanation/de-de-formal.hamlet b/backend/templates/i18n/external-exam-correct-explanation/de-de-formal.hamlet similarity index 100% rename from templates/i18n/external-exam-correct-explanation/de-de-formal.hamlet rename to backend/templates/i18n/external-exam-correct-explanation/de-de-formal.hamlet diff --git a/templates/i18n/external-exam-correct-explanation/en-eu.hamlet b/backend/templates/i18n/external-exam-correct-explanation/en-eu.hamlet similarity index 100% rename from templates/i18n/external-exam-correct-explanation/en-eu.hamlet rename to backend/templates/i18n/external-exam-correct-explanation/en-eu.hamlet diff --git a/templates/i18n/faq/campus-cant-login.de-de-formal.hamlet b/backend/templates/i18n/faq/campus-cant-login.de-de-formal.hamlet similarity index 100% rename from templates/i18n/faq/campus-cant-login.de-de-formal.hamlet rename to backend/templates/i18n/faq/campus-cant-login.de-de-formal.hamlet diff --git a/templates/i18n/faq/campus-cant-login.en-eu.hamlet b/backend/templates/i18n/faq/campus-cant-login.en-eu.hamlet similarity index 100% rename from templates/i18n/faq/campus-cant-login.en-eu.hamlet rename to backend/templates/i18n/faq/campus-cant-login.en-eu.hamlet diff --git a/templates/i18n/faq/forgotten-password.de-de-formal.hamlet b/backend/templates/i18n/faq/forgotten-password.de-de-formal.hamlet similarity index 100% rename from templates/i18n/faq/forgotten-password.de-de-formal.hamlet rename to backend/templates/i18n/faq/forgotten-password.de-de-formal.hamlet diff --git a/templates/i18n/faq/forgotten-password.en-eu.hamlet b/backend/templates/i18n/faq/forgotten-password.en-eu.hamlet similarity index 100% rename from templates/i18n/faq/forgotten-password.en-eu.hamlet rename to backend/templates/i18n/faq/forgotten-password.en-eu.hamlet diff --git a/templates/i18n/faq/login-expired.de-de-formal.hamlet b/backend/templates/i18n/faq/login-expired.de-de-formal.hamlet similarity index 100% rename from templates/i18n/faq/login-expired.de-de-formal.hamlet rename to backend/templates/i18n/faq/login-expired.de-de-formal.hamlet diff --git a/templates/i18n/faq/login-expired.en-eu.hamlet b/backend/templates/i18n/faq/login-expired.en-eu.hamlet similarity index 100% rename from templates/i18n/faq/login-expired.en-eu.hamlet rename to backend/templates/i18n/faq/login-expired.en-eu.hamlet diff --git a/templates/i18n/faq/no-campus-account.de-de-formal.hamlet b/backend/templates/i18n/faq/no-campus-account.de-de-formal.hamlet similarity index 100% rename from templates/i18n/faq/no-campus-account.de-de-formal.hamlet rename to backend/templates/i18n/faq/no-campus-account.de-de-formal.hamlet diff --git a/templates/i18n/faq/no-campus-account.en-eu.hamlet b/backend/templates/i18n/faq/no-campus-account.en-eu.hamlet similarity index 100% rename from templates/i18n/faq/no-campus-account.en-eu.hamlet rename to backend/templates/i18n/faq/no-campus-account.en-eu.hamlet diff --git a/templates/i18n/faq/not-lecturer-how-to-create-courses.de-de-formal.hamlet b/backend/templates/i18n/faq/not-lecturer-how-to-create-courses.de-de-formal.hamlet similarity index 100% rename from templates/i18n/faq/not-lecturer-how-to-create-courses.de-de-formal.hamlet rename to backend/templates/i18n/faq/not-lecturer-how-to-create-courses.de-de-formal.hamlet diff --git a/templates/i18n/faq/not-lecturer-how-to-create-courses.en-eu.hamlet b/backend/templates/i18n/faq/not-lecturer-how-to-create-courses.en-eu.hamlet similarity index 100% rename from templates/i18n/faq/not-lecturer-how-to-create-courses.en-eu.hamlet rename to backend/templates/i18n/faq/not-lecturer-how-to-create-courses.en-eu.hamlet diff --git a/templates/i18n/featureList/de-de-formal.hamlet b/backend/templates/i18n/featureList/de-de-formal.hamlet similarity index 100% rename from templates/i18n/featureList/de-de-formal.hamlet rename to backend/templates/i18n/featureList/de-de-formal.hamlet diff --git a/templates/i18n/featureList/en-eu.hamlet b/backend/templates/i18n/featureList/en-eu.hamlet similarity index 100% rename from templates/i18n/featureList/en-eu.hamlet rename to backend/templates/i18n/featureList/en-eu.hamlet diff --git a/templates/i18n/firm-all/de-de-formal.hamlet b/backend/templates/i18n/firm-all/de-de-formal.hamlet similarity index 100% rename from templates/i18n/firm-all/de-de-formal.hamlet rename to backend/templates/i18n/firm-all/de-de-formal.hamlet diff --git a/templates/i18n/firm-all/en-eu.hamlet b/backend/templates/i18n/firm-all/en-eu.hamlet similarity index 100% rename from templates/i18n/firm-all/en-eu.hamlet rename to backend/templates/i18n/firm-all/en-eu.hamlet diff --git a/templates/i18n/firm-supervisors/de-de-formal.hamlet b/backend/templates/i18n/firm-supervisors/de-de-formal.hamlet similarity index 100% rename from templates/i18n/firm-supervisors/de-de-formal.hamlet rename to backend/templates/i18n/firm-supervisors/de-de-formal.hamlet diff --git a/templates/i18n/firm-supervisors/en-eu.hamlet b/backend/templates/i18n/firm-supervisors/en-eu.hamlet similarity index 100% rename from templates/i18n/firm-supervisors/en-eu.hamlet rename to backend/templates/i18n/firm-supervisors/en-eu.hamlet diff --git a/templates/i18n/glossary/administrator.de-de-formal.hamlet b/backend/templates/i18n/glossary/administrator.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/administrator.de-de-formal.hamlet rename to backend/templates/i18n/glossary/administrator.de-de-formal.hamlet diff --git a/templates/i18n/glossary/administrator.en-eu.hamlet b/backend/templates/i18n/glossary/administrator.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/administrator.en-eu.hamlet rename to backend/templates/i18n/glossary/administrator.en-eu.hamlet diff --git a/templates/i18n/glossary/clone.de-de-formal.hamlet b/backend/templates/i18n/glossary/clone.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/clone.de-de-formal.hamlet rename to backend/templates/i18n/glossary/clone.de-de-formal.hamlet diff --git a/templates/i18n/glossary/clone.en-eu.hamlet b/backend/templates/i18n/glossary/clone.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/clone.en-eu.hamlet rename to backend/templates/i18n/glossary/clone.en-eu.hamlet diff --git a/templates/i18n/glossary/comm-course.de-de-formal.hamlet b/backend/templates/i18n/glossary/comm-course.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/comm-course.de-de-formal.hamlet rename to backend/templates/i18n/glossary/comm-course.de-de-formal.hamlet diff --git a/templates/i18n/glossary/comm-course.en-eu.hamlet b/backend/templates/i18n/glossary/comm-course.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/comm-course.en-eu.hamlet rename to backend/templates/i18n/glossary/comm-course.en-eu.hamlet diff --git a/templates/i18n/glossary/corrector.de-de-formal.hamlet b/backend/templates/i18n/glossary/corrector.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/corrector.de-de-formal.hamlet rename to backend/templates/i18n/glossary/corrector.de-de-formal.hamlet diff --git a/templates/i18n/glossary/corrector.en-eu.hamlet b/backend/templates/i18n/glossary/corrector.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/corrector.en-eu.hamlet rename to backend/templates/i18n/glossary/corrector.en-eu.hamlet diff --git a/templates/i18n/glossary/course-exams.de-de-formal.hamlet b/backend/templates/i18n/glossary/course-exams.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/course-exams.de-de-formal.hamlet rename to backend/templates/i18n/glossary/course-exams.de-de-formal.hamlet diff --git a/templates/i18n/glossary/course-exams.en-eu.hamlet b/backend/templates/i18n/glossary/course-exams.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/course-exams.en-eu.hamlet rename to backend/templates/i18n/glossary/course-exams.en-eu.hamlet diff --git a/templates/i18n/glossary/course-lecturers.de-de-formal.hamlet b/backend/templates/i18n/glossary/course-lecturers.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/course-lecturers.de-de-formal.hamlet rename to backend/templates/i18n/glossary/course-lecturers.de-de-formal.hamlet diff --git a/templates/i18n/glossary/course-lecturers.en-eu.hamlet b/backend/templates/i18n/glossary/course-lecturers.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/course-lecturers.en-eu.hamlet rename to backend/templates/i18n/glossary/course-lecturers.en-eu.hamlet diff --git a/templates/i18n/glossary/course-material.de-de-formal.hamlet b/backend/templates/i18n/glossary/course-material.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/course-material.de-de-formal.hamlet rename to backend/templates/i18n/glossary/course-material.de-de-formal.hamlet diff --git a/templates/i18n/glossary/course-material.en-eu.hamlet b/backend/templates/i18n/glossary/course-material.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/course-material.en-eu.hamlet rename to backend/templates/i18n/glossary/course-material.en-eu.hamlet diff --git a/templates/i18n/glossary/course-participant.de-de-formal.hamlet b/backend/templates/i18n/glossary/course-participant.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/course-participant.de-de-formal.hamlet rename to backend/templates/i18n/glossary/course-participant.de-de-formal.hamlet diff --git a/templates/i18n/glossary/course-participant.en-eu.hamlet b/backend/templates/i18n/glossary/course-participant.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/course-participant.en-eu.hamlet rename to backend/templates/i18n/glossary/course-participant.en-eu.hamlet diff --git a/templates/i18n/glossary/csv-format.de-de-formal.hamlet b/backend/templates/i18n/glossary/csv-format.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/csv-format.de-de-formal.hamlet rename to backend/templates/i18n/glossary/csv-format.de-de-formal.hamlet diff --git a/templates/i18n/glossary/csv-format.en-eu.hamlet b/backend/templates/i18n/glossary/csv-format.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/csv-format.en-eu.hamlet rename to backend/templates/i18n/glossary/csv-format.en-eu.hamlet diff --git a/templates/i18n/glossary/deficit.de-de-formal.hamlet b/backend/templates/i18n/glossary/deficit.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/deficit.de-de-formal.hamlet rename to backend/templates/i18n/glossary/deficit.de-de-formal.hamlet diff --git a/templates/i18n/glossary/deficit.en-eu.hamlet b/backend/templates/i18n/glossary/deficit.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/deficit.en-eu.hamlet rename to backend/templates/i18n/glossary/deficit.en-eu.hamlet diff --git a/templates/i18n/glossary/definition-course-events.de-de-formal.hamlet b/backend/templates/i18n/glossary/definition-course-events.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/definition-course-events.de-de-formal.hamlet rename to backend/templates/i18n/glossary/definition-course-events.de-de-formal.hamlet diff --git a/templates/i18n/glossary/definition-course-events.en-eu.hamlet b/backend/templates/i18n/glossary/definition-course-events.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/definition-course-events.en-eu.hamlet rename to backend/templates/i18n/glossary/definition-course-events.en-eu.hamlet diff --git a/templates/i18n/glossary/definition-course-news.de-de-formal.hamlet b/backend/templates/i18n/glossary/definition-course-news.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/definition-course-news.de-de-formal.hamlet rename to backend/templates/i18n/glossary/definition-course-news.de-de-formal.hamlet diff --git a/templates/i18n/glossary/definition-course-news.en-eu.hamlet b/backend/templates/i18n/glossary/definition-course-news.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/definition-course-news.en-eu.hamlet rename to backend/templates/i18n/glossary/definition-course-news.en-eu.hamlet diff --git a/templates/i18n/glossary/exercise-sheet.de-de-formal.hamlet b/backend/templates/i18n/glossary/exercise-sheet.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/exercise-sheet.de-de-formal.hamlet rename to backend/templates/i18n/glossary/exercise-sheet.de-de-formal.hamlet diff --git a/templates/i18n/glossary/exercise-sheet.en-eu.hamlet b/backend/templates/i18n/glossary/exercise-sheet.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/exercise-sheet.en-eu.hamlet rename to backend/templates/i18n/glossary/exercise-sheet.en-eu.hamlet diff --git a/templates/i18n/glossary/invitations.de-de-formal.hamlet b/backend/templates/i18n/glossary/invitations.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/invitations.de-de-formal.hamlet rename to backend/templates/i18n/glossary/invitations.de-de-formal.hamlet diff --git a/templates/i18n/glossary/invitations.en-eu.hamlet b/backend/templates/i18n/glossary/invitations.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/invitations.en-eu.hamlet rename to backend/templates/i18n/glossary/invitations.en-eu.hamlet diff --git a/templates/i18n/glossary/navigation-favourites.de-de-formal.hamlet b/backend/templates/i18n/glossary/navigation-favourites.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/navigation-favourites.de-de-formal.hamlet rename to backend/templates/i18n/glossary/navigation-favourites.de-de-formal.hamlet diff --git a/templates/i18n/glossary/navigation-favourites.en-eu.hamlet b/backend/templates/i18n/glossary/navigation-favourites.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/navigation-favourites.en-eu.hamlet rename to backend/templates/i18n/glossary/navigation-favourites.en-eu.hamlet diff --git a/templates/i18n/glossary/school-evaluation.de-de-formal.hamlet b/backend/templates/i18n/glossary/school-evaluation.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/school-evaluation.de-de-formal.hamlet rename to backend/templates/i18n/glossary/school-evaluation.de-de-formal.hamlet diff --git a/templates/i18n/glossary/school-evaluation.en-eu.hamlet b/backend/templates/i18n/glossary/school-evaluation.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/school-evaluation.en-eu.hamlet rename to backend/templates/i18n/glossary/school-evaluation.en-eu.hamlet diff --git a/templates/i18n/glossary/school-exam-office.de-de-formal.hamlet b/backend/templates/i18n/glossary/school-exam-office.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/school-exam-office.de-de-formal.hamlet rename to backend/templates/i18n/glossary/school-exam-office.de-de-formal.hamlet diff --git a/templates/i18n/glossary/school-exam-office.en-eu.hamlet b/backend/templates/i18n/glossary/school-exam-office.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/school-exam-office.en-eu.hamlet rename to backend/templates/i18n/glossary/school-exam-office.en-eu.hamlet diff --git a/templates/i18n/glossary/school-lecturer.de-de-formal.hamlet b/backend/templates/i18n/glossary/school-lecturer.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/school-lecturer.de-de-formal.hamlet rename to backend/templates/i18n/glossary/school-lecturer.de-de-formal.hamlet diff --git a/templates/i18n/glossary/school-lecturer.en-eu.hamlet b/backend/templates/i18n/glossary/school-lecturer.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/school-lecturer.en-eu.hamlet rename to backend/templates/i18n/glossary/school-lecturer.en-eu.hamlet diff --git a/templates/i18n/glossary/sheet-group.de-de-formal.hamlet b/backend/templates/i18n/glossary/sheet-group.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/sheet-group.de-de-formal.hamlet rename to backend/templates/i18n/glossary/sheet-group.de-de-formal.hamlet diff --git a/templates/i18n/glossary/sheet-group.en-eu.hamlet b/backend/templates/i18n/glossary/sheet-group.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/sheet-group.en-eu.hamlet rename to backend/templates/i18n/glossary/sheet-group.en-eu.hamlet diff --git a/templates/i18n/glossary/sheet-pseudonym.de-de-formal.hamlet b/backend/templates/i18n/glossary/sheet-pseudonym.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/sheet-pseudonym.de-de-formal.hamlet rename to backend/templates/i18n/glossary/sheet-pseudonym.de-de-formal.hamlet diff --git a/templates/i18n/glossary/sheet-pseudonym.en-eu.hamlet b/backend/templates/i18n/glossary/sheet-pseudonym.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/sheet-pseudonym.en-eu.hamlet rename to backend/templates/i18n/glossary/sheet-pseudonym.en-eu.hamlet diff --git a/templates/i18n/glossary/table-exam-result.de-de-formal.hamlet b/backend/templates/i18n/glossary/table-exam-result.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/table-exam-result.de-de-formal.hamlet rename to backend/templates/i18n/glossary/table-exam-result.de-de-formal.hamlet diff --git a/templates/i18n/glossary/table-exam-result.en-eu.hamlet b/backend/templates/i18n/glossary/table-exam-result.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/table-exam-result.en-eu.hamlet rename to backend/templates/i18n/glossary/table-exam-result.en-eu.hamlet diff --git a/templates/i18n/glossary/table-school.de-de-formal.hamlet b/backend/templates/i18n/glossary/table-school.de-de-formal.hamlet similarity index 100% rename from templates/i18n/glossary/table-school.de-de-formal.hamlet rename to backend/templates/i18n/glossary/table-school.de-de-formal.hamlet diff --git a/templates/i18n/glossary/table-school.en-eu.hamlet b/backend/templates/i18n/glossary/table-school.en-eu.hamlet similarity index 100% rename from templates/i18n/glossary/table-school.en-eu.hamlet rename to backend/templates/i18n/glossary/table-school.en-eu.hamlet diff --git a/templates/i18n/help-instructions/de-de-formal.hamlet b/backend/templates/i18n/help-instructions/de-de-formal.hamlet similarity index 100% rename from templates/i18n/help-instructions/de-de-formal.hamlet rename to backend/templates/i18n/help-instructions/de-de-formal.hamlet diff --git a/templates/i18n/help-instructions/en-eu.hamlet b/backend/templates/i18n/help-instructions/en-eu.hamlet similarity index 100% rename from templates/i18n/help-instructions/en-eu.hamlet rename to backend/templates/i18n/help-instructions/en-eu.hamlet diff --git a/templates/i18n/implementation/de-de-formal.hamlet b/backend/templates/i18n/implementation/de-de-formal.hamlet similarity index 100% rename from templates/i18n/implementation/de-de-formal.hamlet rename to backend/templates/i18n/implementation/de-de-formal.hamlet diff --git a/templates/i18n/implementation/en-eu.hamlet b/backend/templates/i18n/implementation/en-eu.hamlet similarity index 100% rename from templates/i18n/implementation/en-eu.hamlet rename to backend/templates/i18n/implementation/en-eu.hamlet diff --git a/templates/i18n/imprint/de-de-formal.hamlet b/backend/templates/i18n/imprint/de-de-formal.hamlet similarity index 100% rename from templates/i18n/imprint/de-de-formal.hamlet rename to backend/templates/i18n/imprint/de-de-formal.hamlet diff --git a/templates/i18n/imprint/en.hamlet b/backend/templates/i18n/imprint/en.hamlet similarity index 100% rename from templates/i18n/imprint/en.hamlet rename to backend/templates/i18n/imprint/en.hamlet diff --git a/templates/i18n/info-lecturer/de-de-formal.hamlet b/backend/templates/i18n/info-lecturer/de-de-formal.hamlet similarity index 100% rename from templates/i18n/info-lecturer/de-de-formal.hamlet rename to backend/templates/i18n/info-lecturer/de-de-formal.hamlet diff --git a/templates/i18n/info-lecturer/en-eu.hamlet b/backend/templates/i18n/info-lecturer/en-eu.hamlet similarity index 100% rename from templates/i18n/info-lecturer/en-eu.hamlet rename to backend/templates/i18n/info-lecturer/en-eu.hamlet diff --git a/templates/i18n/knownBugs/de-de-formal.hamlet b/backend/templates/i18n/knownBugs/de-de-formal.hamlet similarity index 100% rename from templates/i18n/knownBugs/de-de-formal.hamlet rename to backend/templates/i18n/knownBugs/de-de-formal.hamlet diff --git a/templates/i18n/knownBugs/en-eu.hamlet b/backend/templates/i18n/knownBugs/en-eu.hamlet similarity index 100% rename from templates/i18n/knownBugs/en-eu.hamlet rename to backend/templates/i18n/knownBugs/en-eu.hamlet diff --git a/templates/i18n/lms-all/de-de-formal.hamlet b/backend/templates/i18n/lms-all/de-de-formal.hamlet similarity index 100% rename from templates/i18n/lms-all/de-de-formal.hamlet rename to backend/templates/i18n/lms-all/de-de-formal.hamlet diff --git a/templates/i18n/lms-all/en-eu.hamlet b/backend/templates/i18n/lms-all/en-eu.hamlet similarity index 100% rename from templates/i18n/lms-all/en-eu.hamlet rename to backend/templates/i18n/lms-all/en-eu.hamlet diff --git a/templates/i18n/markdown-explanation/de-de-formal.hamlet b/backend/templates/i18n/markdown-explanation/de-de-formal.hamlet similarity index 100% rename from templates/i18n/markdown-explanation/de-de-formal.hamlet rename to backend/templates/i18n/markdown-explanation/de-de-formal.hamlet diff --git a/templates/i18n/markdown-explanation/en-eu.hamlet b/backend/templates/i18n/markdown-explanation/en-eu.hamlet similarity index 100% rename from templates/i18n/markdown-explanation/en-eu.hamlet rename to backend/templates/i18n/markdown-explanation/en-eu.hamlet diff --git a/templates/i18n/news/activeAllocations-info/de-de-formal.hamlet b/backend/templates/i18n/news/activeAllocations-info/de-de-formal.hamlet similarity index 100% rename from templates/i18n/news/activeAllocations-info/de-de-formal.hamlet rename to backend/templates/i18n/news/activeAllocations-info/de-de-formal.hamlet diff --git a/templates/i18n/news/activeAllocations-info/en-eu.hamlet b/backend/templates/i18n/news/activeAllocations-info/en-eu.hamlet similarity index 100% rename from templates/i18n/news/activeAllocations-info/en-eu.hamlet rename to backend/templates/i18n/news/activeAllocations-info/en-eu.hamlet diff --git a/templates/i18n/pitch/de-de-formal.hamlet b/backend/templates/i18n/pitch/de-de-formal.hamlet similarity index 100% rename from templates/i18n/pitch/de-de-formal.hamlet rename to backend/templates/i18n/pitch/de-de-formal.hamlet diff --git a/templates/i18n/pitch/en-eu.hamlet b/backend/templates/i18n/pitch/en-eu.hamlet similarity index 100% rename from templates/i18n/pitch/en-eu.hamlet rename to backend/templates/i18n/pitch/en-eu.hamlet diff --git a/templates/i18n/profile-remarks/de-de-formal.hamlet b/backend/templates/i18n/profile-remarks/de-de-formal.hamlet similarity index 100% rename from templates/i18n/profile-remarks/de-de-formal.hamlet rename to backend/templates/i18n/profile-remarks/de-de-formal.hamlet diff --git a/templates/i18n/profile-remarks/en-eu.hamlet b/backend/templates/i18n/profile-remarks/en-eu.hamlet similarity index 100% rename from templates/i18n/profile-remarks/en-eu.hamlet rename to backend/templates/i18n/profile-remarks/en-eu.hamlet diff --git a/templates/i18n/profile/displayNameRules/de-de-formal.hamlet b/backend/templates/i18n/profile/displayNameRules/de-de-formal.hamlet similarity index 100% rename from templates/i18n/profile/displayNameRules/de-de-formal.hamlet rename to backend/templates/i18n/profile/displayNameRules/de-de-formal.hamlet diff --git a/templates/i18n/profile/displayNameRules/en-eu.hamlet b/backend/templates/i18n/profile/displayNameRules/en-eu.hamlet similarity index 100% rename from templates/i18n/profile/displayNameRules/en-eu.hamlet rename to backend/templates/i18n/profile/displayNameRules/en-eu.hamlet diff --git a/templates/i18n/profile/tokenExplanation/de-de-formal.hamlet b/backend/templates/i18n/profile/tokenExplanation/de-de-formal.hamlet similarity index 100% rename from templates/i18n/profile/tokenExplanation/de-de-formal.hamlet rename to backend/templates/i18n/profile/tokenExplanation/de-de-formal.hamlet diff --git a/templates/i18n/profile/tokenExplanation/en-eu.hamlet b/backend/templates/i18n/profile/tokenExplanation/en-eu.hamlet similarity index 100% rename from templates/i18n/profile/tokenExplanation/en-eu.hamlet rename to backend/templates/i18n/profile/tokenExplanation/en-eu.hamlet diff --git a/templates/i18n/qualification/renewal/de-de-formal.hamlet b/backend/templates/i18n/qualification/renewal/de-de-formal.hamlet similarity index 100% rename from templates/i18n/qualification/renewal/de-de-formal.hamlet rename to backend/templates/i18n/qualification/renewal/de-de-formal.hamlet diff --git a/templates/i18n/qualification/renewal/en-eu.hamlet b/backend/templates/i18n/qualification/renewal/en-eu.hamlet similarity index 100% rename from templates/i18n/qualification/renewal/en-eu.hamlet rename to backend/templates/i18n/qualification/renewal/en-eu.hamlet diff --git a/templates/i18n/set-display-email/de-de-formal.hamlet b/backend/templates/i18n/set-display-email/de-de-formal.hamlet similarity index 100% rename from templates/i18n/set-display-email/de-de-formal.hamlet rename to backend/templates/i18n/set-display-email/de-de-formal.hamlet diff --git a/templates/i18n/set-display-email/en-eu.hamlet b/backend/templates/i18n/set-display-email/en-eu.hamlet similarity index 100% rename from templates/i18n/set-display-email/en-eu.hamlet rename to backend/templates/i18n/set-display-email/en-eu.hamlet diff --git a/templates/i18n/sheet-authorship-statement-mode-tip/disabled/de-de-formal.hamlet b/backend/templates/i18n/sheet-authorship-statement-mode-tip/disabled/de-de-formal.hamlet similarity index 100% rename from templates/i18n/sheet-authorship-statement-mode-tip/disabled/de-de-formal.hamlet rename to backend/templates/i18n/sheet-authorship-statement-mode-tip/disabled/de-de-formal.hamlet diff --git a/templates/i18n/sheet-authorship-statement-mode-tip/disabled/en-eu.hamlet b/backend/templates/i18n/sheet-authorship-statement-mode-tip/disabled/en-eu.hamlet similarity index 100% rename from templates/i18n/sheet-authorship-statement-mode-tip/disabled/en-eu.hamlet rename to backend/templates/i18n/sheet-authorship-statement-mode-tip/disabled/en-eu.hamlet diff --git a/templates/i18n/sheet-authorship-statement-mode-tip/enabled/de-de-formal.hamlet b/backend/templates/i18n/sheet-authorship-statement-mode-tip/enabled/de-de-formal.hamlet similarity index 100% rename from templates/i18n/sheet-authorship-statement-mode-tip/enabled/de-de-formal.hamlet rename to backend/templates/i18n/sheet-authorship-statement-mode-tip/enabled/de-de-formal.hamlet diff --git a/templates/i18n/sheet-authorship-statement-mode-tip/enabled/en-eu.hamlet b/backend/templates/i18n/sheet-authorship-statement-mode-tip/enabled/en-eu.hamlet similarity index 100% rename from templates/i18n/sheet-authorship-statement-mode-tip/enabled/en-eu.hamlet rename to backend/templates/i18n/sheet-authorship-statement-mode-tip/enabled/en-eu.hamlet diff --git a/templates/i18n/sheet-authorship-statement-mode-tip/exam/de-de-formal.hamlet b/backend/templates/i18n/sheet-authorship-statement-mode-tip/exam/de-de-formal.hamlet similarity index 100% rename from templates/i18n/sheet-authorship-statement-mode-tip/exam/de-de-formal.hamlet rename to backend/templates/i18n/sheet-authorship-statement-mode-tip/exam/de-de-formal.hamlet diff --git a/templates/i18n/sheet-authorship-statement-mode-tip/exam/en-eu.hamlet b/backend/templates/i18n/sheet-authorship-statement-mode-tip/exam/en-eu.hamlet similarity index 100% rename from templates/i18n/sheet-authorship-statement-mode-tip/exam/en-eu.hamlet rename to backend/templates/i18n/sheet-authorship-statement-mode-tip/exam/en-eu.hamlet diff --git a/templates/i18n/sheet-edit/de-de-formal.hamlet b/backend/templates/i18n/sheet-edit/de-de-formal.hamlet similarity index 100% rename from templates/i18n/sheet-edit/de-de-formal.hamlet rename to backend/templates/i18n/sheet-edit/de-de-formal.hamlet diff --git a/templates/i18n/sheet-edit/en-eu.hamlet b/backend/templates/i18n/sheet-edit/en-eu.hamlet similarity index 100% rename from templates/i18n/sheet-edit/en-eu.hamlet rename to backend/templates/i18n/sheet-edit/en-eu.hamlet diff --git a/templates/i18n/sheet-grouping-explanation/arbitrary/de-de-formal.hamlet b/backend/templates/i18n/sheet-grouping-explanation/arbitrary/de-de-formal.hamlet similarity index 100% rename from templates/i18n/sheet-grouping-explanation/arbitrary/de-de-formal.hamlet rename to backend/templates/i18n/sheet-grouping-explanation/arbitrary/de-de-formal.hamlet diff --git a/templates/i18n/sheet-grouping-explanation/arbitrary/en-eu.hamlet b/backend/templates/i18n/sheet-grouping-explanation/arbitrary/en-eu.hamlet similarity index 100% rename from templates/i18n/sheet-grouping-explanation/arbitrary/en-eu.hamlet rename to backend/templates/i18n/sheet-grouping-explanation/arbitrary/en-eu.hamlet diff --git a/templates/i18n/sheet-grouping-explanation/registered/de-de-formal.hamlet b/backend/templates/i18n/sheet-grouping-explanation/registered/de-de-formal.hamlet similarity index 100% rename from templates/i18n/sheet-grouping-explanation/registered/de-de-formal.hamlet rename to backend/templates/i18n/sheet-grouping-explanation/registered/de-de-formal.hamlet diff --git a/templates/i18n/sheet-grouping-explanation/registered/en-eu.hamlet b/backend/templates/i18n/sheet-grouping-explanation/registered/en-eu.hamlet similarity index 100% rename from templates/i18n/sheet-grouping-explanation/registered/en-eu.hamlet rename to backend/templates/i18n/sheet-grouping-explanation/registered/en-eu.hamlet diff --git a/templates/i18n/submission-done-tip/always/de-de-formal.hamlet b/backend/templates/i18n/submission-done-tip/always/de-de-formal.hamlet similarity index 100% rename from templates/i18n/submission-done-tip/always/de-de-formal.hamlet rename to backend/templates/i18n/submission-done-tip/always/de-de-formal.hamlet diff --git a/templates/i18n/submission-done-tip/always/en-eu.hamlet b/backend/templates/i18n/submission-done-tip/always/en-eu.hamlet similarity index 100% rename from templates/i18n/submission-done-tip/always/en-eu.hamlet rename to backend/templates/i18n/submission-done-tip/always/en-eu.hamlet diff --git a/templates/i18n/submission-done-tip/by-file/de-de-formal.hamlet b/backend/templates/i18n/submission-done-tip/by-file/de-de-formal.hamlet similarity index 100% rename from templates/i18n/submission-done-tip/by-file/de-de-formal.hamlet rename to backend/templates/i18n/submission-done-tip/by-file/de-de-formal.hamlet diff --git a/templates/i18n/submission-done-tip/by-file/en-eu.hamlet b/backend/templates/i18n/submission-done-tip/by-file/en-eu.hamlet similarity index 100% rename from templates/i18n/submission-done-tip/by-file/en-eu.hamlet rename to backend/templates/i18n/submission-done-tip/by-file/en-eu.hamlet diff --git a/templates/i18n/submission-done-tip/never/de-de-formal.hamlet b/backend/templates/i18n/submission-done-tip/never/de-de-formal.hamlet similarity index 100% rename from templates/i18n/submission-done-tip/never/de-de-formal.hamlet rename to backend/templates/i18n/submission-done-tip/never/de-de-formal.hamlet diff --git a/templates/i18n/submission-done-tip/never/en-eu.hamlet b/backend/templates/i18n/submission-done-tip/never/en-eu.hamlet similarity index 100% rename from templates/i18n/submission-done-tip/never/en-eu.hamlet rename to backend/templates/i18n/submission-done-tip/never/en-eu.hamlet diff --git a/templates/i18n/submission-mode-explanation/corrector/de-de-formal.hamlet b/backend/templates/i18n/submission-mode-explanation/corrector/de-de-formal.hamlet similarity index 100% rename from templates/i18n/submission-mode-explanation/corrector/de-de-formal.hamlet rename to backend/templates/i18n/submission-mode-explanation/corrector/de-de-formal.hamlet diff --git a/templates/i18n/submission-mode-explanation/corrector/en-eu.hamlet b/backend/templates/i18n/submission-mode-explanation/corrector/en-eu.hamlet similarity index 100% rename from templates/i18n/submission-mode-explanation/corrector/en-eu.hamlet rename to backend/templates/i18n/submission-mode-explanation/corrector/en-eu.hamlet diff --git a/templates/i18n/submission-mode-explanation/user/de-de-formal.hamlet b/backend/templates/i18n/submission-mode-explanation/user/de-de-formal.hamlet similarity index 100% rename from templates/i18n/submission-mode-explanation/user/de-de-formal.hamlet rename to backend/templates/i18n/submission-mode-explanation/user/de-de-formal.hamlet diff --git a/templates/i18n/submission-mode-explanation/user/en-eu.hamlet b/backend/templates/i18n/submission-mode-explanation/user/en-eu.hamlet similarity index 100% rename from templates/i18n/submission-mode-explanation/user/en-eu.hamlet rename to backend/templates/i18n/submission-mode-explanation/user/en-eu.hamlet diff --git a/templates/i18n/table/csv-import-explanation/de-de-formal.hamlet b/backend/templates/i18n/table/csv-import-explanation/de-de-formal.hamlet similarity index 100% rename from templates/i18n/table/csv-import-explanation/de-de-formal.hamlet rename to backend/templates/i18n/table/csv-import-explanation/de-de-formal.hamlet diff --git a/templates/i18n/table/csv-import-explanation/en-eu.hamlet b/backend/templates/i18n/table/csv-import-explanation/en-eu.hamlet similarity index 100% rename from templates/i18n/table/csv-import-explanation/en-eu.hamlet rename to backend/templates/i18n/table/csv-import-explanation/en-eu.hamlet diff --git a/templates/i18n/terms-of-use/de-de-formal.hamlet b/backend/templates/i18n/terms-of-use/de-de-formal.hamlet similarity index 100% rename from templates/i18n/terms-of-use/de-de-formal.hamlet rename to backend/templates/i18n/terms-of-use/de-de-formal.hamlet diff --git a/templates/i18n/terms-of-use/en.hamlet b/backend/templates/i18n/terms-of-use/en.hamlet similarity index 100% rename from templates/i18n/terms-of-use/en.hamlet rename to backend/templates/i18n/terms-of-use/en.hamlet diff --git a/templates/i18n/test/de-de-formal.hamlet b/backend/templates/i18n/test/de-de-formal.hamlet similarity index 100% rename from templates/i18n/test/de-de-formal.hamlet rename to backend/templates/i18n/test/de-de-formal.hamlet diff --git a/templates/i18n/test/en-eu.hamlet b/backend/templates/i18n/test/en-eu.hamlet similarity index 100% rename from templates/i18n/test/en-eu.hamlet rename to backend/templates/i18n/test/en-eu.hamlet diff --git a/templates/i18n/unauth-news/de-de-formal.hamlet b/backend/templates/i18n/unauth-news/de-de-formal.hamlet similarity index 100% rename from templates/i18n/unauth-news/de-de-formal.hamlet rename to backend/templates/i18n/unauth-news/de-de-formal.hamlet diff --git a/templates/i18n/unauth-news/en-eu.hamlet b/backend/templates/i18n/unauth-news/en-eu.hamlet similarity index 100% rename from templates/i18n/unauth-news/en-eu.hamlet rename to backend/templates/i18n/unauth-news/en-eu.hamlet diff --git a/templates/i18n/workflow-archivation-scheduled/de-de-formal.hamlet b/backend/templates/i18n/workflow-archivation-scheduled/de-de-formal.hamlet similarity index 100% rename from templates/i18n/workflow-archivation-scheduled/de-de-formal.hamlet rename to backend/templates/i18n/workflow-archivation-scheduled/de-de-formal.hamlet diff --git a/templates/i18n/workflow-archivation-scheduled/en-eu.hamlet b/backend/templates/i18n/workflow-archivation-scheduled/en-eu.hamlet similarity index 100% rename from templates/i18n/workflow-archivation-scheduled/en-eu.hamlet rename to backend/templates/i18n/workflow-archivation-scheduled/en-eu.hamlet diff --git a/templates/i18n/workflow-instance-list-explanation/de-de-formal.hamlet b/backend/templates/i18n/workflow-instance-list-explanation/de-de-formal.hamlet similarity index 100% rename from templates/i18n/workflow-instance-list-explanation/de-de-formal.hamlet rename to backend/templates/i18n/workflow-instance-list-explanation/de-de-formal.hamlet diff --git a/templates/i18n/workflow-instance-list-explanation/en-eu.hamlet b/backend/templates/i18n/workflow-instance-list-explanation/en-eu.hamlet similarity index 100% rename from templates/i18n/workflow-instance-list-explanation/en-eu.hamlet rename to backend/templates/i18n/workflow-instance-list-explanation/en-eu.hamlet diff --git a/templates/i18n/workflows-disabled/de-de-formal.hamlet b/backend/templates/i18n/workflows-disabled/de-de-formal.hamlet similarity index 100% rename from templates/i18n/workflows-disabled/de-de-formal.hamlet rename to backend/templates/i18n/workflows-disabled/de-de-formal.hamlet diff --git a/templates/i18n/workflows-disabled/en-eu.hamlet b/backend/templates/i18n/workflows-disabled/en-eu.hamlet similarity index 100% rename from templates/i18n/workflows-disabled/en-eu.hamlet rename to backend/templates/i18n/workflows-disabled/en-eu.hamlet diff --git a/templates/ldap.hamlet b/backend/templates/ldap.hamlet similarity index 100% rename from templates/ldap.hamlet rename to backend/templates/ldap.hamlet diff --git a/templates/legal.hamlet b/backend/templates/legal.hamlet similarity index 100% rename from templates/legal.hamlet rename to backend/templates/legal.hamlet diff --git a/templates/letter/din5008.latex b/backend/templates/letter/din5008.latex similarity index 100% rename from templates/letter/din5008.latex rename to backend/templates/letter/din5008.latex diff --git a/templates/letter/din5008.latex.license b/backend/templates/letter/din5008.latex.license similarity index 100% rename from templates/letter/din5008.latex.license rename to backend/templates/letter/din5008.latex.license diff --git a/templates/letter/din5008with_pin.latex b/backend/templates/letter/din5008with_pin.latex similarity index 100% rename from templates/letter/din5008with_pin.latex rename to backend/templates/letter/din5008with_pin.latex diff --git a/templates/letter/din5008with_pin.latex.license b/backend/templates/letter/din5008with_pin.latex.license similarity index 100% rename from templates/letter/din5008with_pin.latex.license rename to backend/templates/letter/din5008with_pin.latex.license diff --git a/templates/letter/fraport_f_expiry.md b/backend/templates/letter/fraport_f_expiry.md similarity index 100% rename from templates/letter/fraport_f_expiry.md rename to backend/templates/letter/fraport_f_expiry.md diff --git a/templates/letter/fraport_f_expiry.md.license b/backend/templates/letter/fraport_f_expiry.md.license similarity index 100% rename from templates/letter/fraport_f_expiry.md.license rename to backend/templates/letter/fraport_f_expiry.md.license diff --git a/templates/letter/fraport_generic_expiry.md b/backend/templates/letter/fraport_generic_expiry.md similarity index 100% rename from templates/letter/fraport_generic_expiry.md rename to backend/templates/letter/fraport_generic_expiry.md diff --git a/templates/letter/fraport_generic_expiry.md.license b/backend/templates/letter/fraport_generic_expiry.md.license similarity index 100% rename from templates/letter/fraport_generic_expiry.md.license rename to backend/templates/letter/fraport_generic_expiry.md.license diff --git a/templates/letter/fraport_qualification.md b/backend/templates/letter/fraport_qualification.md similarity index 100% rename from templates/letter/fraport_qualification.md rename to backend/templates/letter/fraport_qualification.md diff --git a/templates/letter/fraport_qualification.md.license b/backend/templates/letter/fraport_qualification.md.license similarity index 100% rename from templates/letter/fraport_qualification.md.license rename to backend/templates/letter/fraport_qualification.md.license diff --git a/templates/letter/fraport_renewal.md b/backend/templates/letter/fraport_renewal.md similarity index 100% rename from templates/letter/fraport_renewal.md rename to backend/templates/letter/fraport_renewal.md diff --git a/templates/letter/fraport_renewal.md.license b/backend/templates/letter/fraport_renewal.md.license similarity index 100% rename from templates/letter/fraport_renewal.md.license rename to backend/templates/letter/fraport_renewal.md.license diff --git a/templates/letter/generic_template.html b/backend/templates/letter/generic_template.html similarity index 100% rename from templates/letter/generic_template.html rename to backend/templates/letter/generic_template.html diff --git a/templates/letter/generic_template.html.license b/backend/templates/letter/generic_template.html.license similarity index 100% rename from templates/letter/generic_template.html.license rename to backend/templates/letter/generic_template.html.license diff --git a/templates/letter/generic_template.latex b/backend/templates/letter/generic_template.latex similarity index 100% rename from templates/letter/generic_template.latex rename to backend/templates/letter/generic_template.latex diff --git a/templates/letter/generic_template.latex.license b/backend/templates/letter/generic_template.latex.license similarity index 100% rename from templates/letter/generic_template.latex.license rename to backend/templates/letter/generic_template.latex.license diff --git a/templates/letter/plain_article.latex b/backend/templates/letter/plain_article.latex similarity index 100% rename from templates/letter/plain_article.latex rename to backend/templates/letter/plain_article.latex diff --git a/templates/letter/plain_article.latex.license b/backend/templates/letter/plain_article.latex.license similarity index 100% rename from templates/letter/plain_article.latex.license rename to backend/templates/letter/plain_article.latex.license diff --git a/templates/lms-report.hamlet b/backend/templates/lms-report.hamlet similarity index 100% rename from templates/lms-report.hamlet rename to backend/templates/lms-report.hamlet diff --git a/templates/lms-result.hamlet b/backend/templates/lms-result.hamlet similarity index 100% rename from templates/lms-result.hamlet rename to backend/templates/lms-result.hamlet diff --git a/templates/lms-user.hamlet b/backend/templates/lms-user.hamlet similarity index 100% rename from templates/lms-user.hamlet rename to backend/templates/lms-user.hamlet diff --git a/templates/lms.hamlet b/backend/templates/lms.hamlet similarity index 100% rename from templates/lms.hamlet rename to backend/templates/lms.hamlet diff --git a/templates/login.hamlet b/backend/templates/login.hamlet similarity index 100% rename from templates/login.hamlet rename to backend/templates/login.hamlet diff --git a/templates/mail/body/qualificationRenewal.hamlet b/backend/templates/mail/body/qualificationRenewal.hamlet similarity index 100% rename from templates/mail/body/qualificationRenewal.hamlet rename to backend/templates/mail/body/qualificationRenewal.hamlet diff --git a/templates/mail/changeUserDisplayEmail.hamlet b/backend/templates/mail/changeUserDisplayEmail.hamlet similarity index 100% rename from templates/mail/changeUserDisplayEmail.hamlet rename to backend/templates/mail/changeUserDisplayEmail.hamlet diff --git a/templates/mail/correctionsAssigned.hamlet b/backend/templates/mail/correctionsAssigned.hamlet similarity index 100% rename from templates/mail/correctionsAssigned.hamlet rename to backend/templates/mail/correctionsAssigned.hamlet diff --git a/templates/mail/correctionsUndistributed.hamlet b/backend/templates/mail/correctionsUndistributed.hamlet similarity index 100% rename from templates/mail/correctionsUndistributed.hamlet rename to backend/templates/mail/correctionsUndistributed.hamlet diff --git a/templates/mail/correctorInvitation.hamlet b/backend/templates/mail/correctorInvitation.hamlet similarity index 100% rename from templates/mail/correctorInvitation.hamlet rename to backend/templates/mail/correctorInvitation.hamlet diff --git a/templates/mail/courseCommunication.hamlet b/backend/templates/mail/courseCommunication.hamlet similarity index 100% rename from templates/mail/courseCommunication.hamlet rename to backend/templates/mail/courseCommunication.hamlet diff --git a/templates/mail/courseRegistered.hamlet b/backend/templates/mail/courseRegistered.hamlet similarity index 100% rename from templates/mail/courseRegistered.hamlet rename to backend/templates/mail/courseRegistered.hamlet diff --git a/templates/mail/editNotifications.hamlet b/backend/templates/mail/editNotifications.hamlet similarity index 100% rename from templates/mail/editNotifications.hamlet rename to backend/templates/mail/editNotifications.hamlet diff --git a/templates/mail/examDeregistrationSoonInactive.hamlet b/backend/templates/mail/examDeregistrationSoonInactive.hamlet similarity index 100% rename from templates/mail/examDeregistrationSoonInactive.hamlet rename to backend/templates/mail/examDeregistrationSoonInactive.hamlet diff --git a/templates/mail/examOffice/examResults.hamlet b/backend/templates/mail/examOffice/examResults.hamlet similarity index 100% rename from templates/mail/examOffice/examResults.hamlet rename to backend/templates/mail/examOffice/examResults.hamlet diff --git a/templates/mail/examOffice/examResultsChanged.hamlet b/backend/templates/mail/examOffice/examResultsChanged.hamlet similarity index 100% rename from templates/mail/examOffice/examResultsChanged.hamlet rename to backend/templates/mail/examOffice/examResultsChanged.hamlet diff --git a/templates/mail/examOffice/externalExamResults.hamlet b/backend/templates/mail/examOffice/externalExamResults.hamlet similarity index 100% rename from templates/mail/examOffice/externalExamResults.hamlet rename to backend/templates/mail/examOffice/externalExamResults.hamlet diff --git a/templates/mail/examRegistrationActive.hamlet b/backend/templates/mail/examRegistrationActive.hamlet similarity index 100% rename from templates/mail/examRegistrationActive.hamlet rename to backend/templates/mail/examRegistrationActive.hamlet diff --git a/templates/mail/examRegistrationSoonInactive.hamlet b/backend/templates/mail/examRegistrationSoonInactive.hamlet similarity index 100% rename from templates/mail/examRegistrationSoonInactive.hamlet rename to backend/templates/mail/examRegistrationSoonInactive.hamlet diff --git a/templates/mail/examResult.hamlet b/backend/templates/mail/examResult.hamlet similarity index 100% rename from templates/mail/examResult.hamlet rename to backend/templates/mail/examResult.hamlet diff --git a/templates/mail/genericMailLetter.hamlet b/backend/templates/mail/genericMailLetter.hamlet similarity index 100% rename from templates/mail/genericMailLetter.hamlet rename to backend/templates/mail/genericMailLetter.hamlet diff --git a/templates/mail/invitation.hamlet b/backend/templates/mail/invitation.hamlet similarity index 100% rename from templates/mail/invitation.hamlet rename to backend/templates/mail/invitation.hamlet diff --git a/templates/mail/lecturerInvitation.hamlet b/backend/templates/mail/lecturerInvitation.hamlet similarity index 100% rename from templates/mail/lecturerInvitation.hamlet rename to backend/templates/mail/lecturerInvitation.hamlet diff --git a/templates/mail/passwordReset.hamlet b/backend/templates/mail/passwordReset.hamlet similarity index 100% rename from templates/mail/passwordReset.hamlet rename to backend/templates/mail/passwordReset.hamlet diff --git a/templates/mail/qualificationExpiry.hamlet b/backend/templates/mail/qualificationExpiry.hamlet similarity index 100% rename from templates/mail/qualificationExpiry.hamlet rename to backend/templates/mail/qualificationExpiry.hamlet diff --git a/templates/mail/sheetActive.hamlet b/backend/templates/mail/sheetActive.hamlet similarity index 100% rename from templates/mail/sheetActive.hamlet rename to backend/templates/mail/sheetActive.hamlet diff --git a/templates/mail/sheetHint.hamlet b/backend/templates/mail/sheetHint.hamlet similarity index 100% rename from templates/mail/sheetHint.hamlet rename to backend/templates/mail/sheetHint.hamlet diff --git a/templates/mail/sheetInactive.hamlet b/backend/templates/mail/sheetInactive.hamlet similarity index 100% rename from templates/mail/sheetInactive.hamlet rename to backend/templates/mail/sheetInactive.hamlet diff --git a/templates/mail/sheetSolution.hamlet b/backend/templates/mail/sheetSolution.hamlet similarity index 100% rename from templates/mail/sheetSolution.hamlet rename to backend/templates/mail/sheetSolution.hamlet diff --git a/templates/mail/sheetSoonInactive.hamlet b/backend/templates/mail/sheetSoonInactive.hamlet similarity index 100% rename from templates/mail/sheetSoonInactive.hamlet rename to backend/templates/mail/sheetSoonInactive.hamlet diff --git a/templates/mail/submissionEdited.hamlet b/backend/templates/mail/submissionEdited.hamlet similarity index 100% rename from templates/mail/submissionEdited.hamlet rename to backend/templates/mail/submissionEdited.hamlet diff --git a/templates/mail/submissionRated.hamlet b/backend/templates/mail/submissionRated.hamlet similarity index 100% rename from templates/mail/submissionRated.hamlet rename to backend/templates/mail/submissionRated.hamlet diff --git a/templates/mail/submissionRated.txt b/backend/templates/mail/submissionRated.txt similarity index 100% rename from templates/mail/submissionRated.txt rename to backend/templates/mail/submissionRated.txt diff --git a/templates/mail/submissionRated.txt.license b/backend/templates/mail/submissionRated.txt.license similarity index 100% rename from templates/mail/submissionRated.txt.license rename to backend/templates/mail/submissionRated.txt.license diff --git a/templates/mail/submissionUserCreated.hamlet b/backend/templates/mail/submissionUserCreated.hamlet similarity index 100% rename from templates/mail/submissionUserCreated.hamlet rename to backend/templates/mail/submissionUserCreated.hamlet diff --git a/templates/mail/submissionUserDeleted.hamlet b/backend/templates/mail/submissionUserDeleted.hamlet similarity index 100% rename from templates/mail/submissionUserDeleted.hamlet rename to backend/templates/mail/submissionUserDeleted.hamlet diff --git a/templates/mail/support.hamlet b/backend/templates/mail/support.hamlet similarity index 100% rename from templates/mail/support.hamlet rename to backend/templates/mail/support.hamlet diff --git a/templates/mail/userAuthModeUpdate.hamlet b/backend/templates/mail/userAuthModeUpdate.hamlet similarity index 100% rename from templates/mail/userAuthModeUpdate.hamlet rename to backend/templates/mail/userAuthModeUpdate.hamlet diff --git a/templates/mail/userRightsUpdate.hamlet b/backend/templates/mail/userRightsUpdate.hamlet similarity index 100% rename from templates/mail/userRightsUpdate.hamlet rename to backend/templates/mail/userRightsUpdate.hamlet diff --git a/templates/mail/userSystemFunctionsUpdate.hamlet b/backend/templates/mail/userSystemFunctionsUpdate.hamlet similarity index 100% rename from templates/mail/userSystemFunctionsUpdate.hamlet rename to backend/templates/mail/userSystemFunctionsUpdate.hamlet diff --git a/templates/material-list.hamlet b/backend/templates/material-list.hamlet similarity index 100% rename from templates/material-list.hamlet rename to backend/templates/material-list.hamlet diff --git a/templates/material-show.hamlet b/backend/templates/material-show.hamlet similarity index 100% rename from templates/material-show.hamlet rename to backend/templates/material-show.hamlet diff --git a/templates/messages/correctionsUploaded.hamlet b/backend/templates/messages/correctionsUploaded.hamlet similarity index 100% rename from templates/messages/correctionsUploaded.hamlet rename to backend/templates/messages/correctionsUploaded.hamlet diff --git a/templates/messages/courseInvitationAlreadyRegistered.hamlet b/backend/templates/messages/courseInvitationAlreadyRegistered.hamlet similarity index 100% rename from templates/messages/courseInvitationAlreadyRegistered.hamlet rename to backend/templates/messages/courseInvitationAlreadyRegistered.hamlet diff --git a/templates/messages/courseInvitationAlreadyTutorialMember.hamlet b/backend/templates/messages/courseInvitationAlreadyTutorialMember.hamlet similarity index 100% rename from templates/messages/courseInvitationAlreadyTutorialMember.hamlet rename to backend/templates/messages/courseInvitationAlreadyTutorialMember.hamlet diff --git a/templates/messages/courseInvitationNotFoundInAvs.hamlet b/backend/templates/messages/courseInvitationNotFoundInAvs.hamlet similarity index 100% rename from templates/messages/courseInvitationNotFoundInAvs.hamlet rename to backend/templates/messages/courseInvitationNotFoundInAvs.hamlet diff --git a/templates/messages/courseInvitationRegisteredWithoutField.hamlet b/backend/templates/messages/courseInvitationRegisteredWithoutField.hamlet similarity index 100% rename from templates/messages/courseInvitationRegisteredWithoutField.hamlet rename to backend/templates/messages/courseInvitationRegisteredWithoutField.hamlet diff --git a/templates/messages/examRegistrationInvitationNotRegisteredWithoutCourse.hamlet b/backend/templates/messages/examRegistrationInvitationNotRegisteredWithoutCourse.hamlet similarity index 100% rename from templates/messages/examRegistrationInvitationNotRegisteredWithoutCourse.hamlet rename to backend/templates/messages/examRegistrationInvitationNotRegisteredWithoutCourse.hamlet diff --git a/templates/messages/examRegistrationInvitationRegisteredWithoutField.hamlet b/backend/templates/messages/examRegistrationInvitationRegisteredWithoutField.hamlet similarity index 100% rename from templates/messages/examRegistrationInvitationRegisteredWithoutField.hamlet rename to backend/templates/messages/examRegistrationInvitationRegisteredWithoutField.hamlet diff --git a/templates/messages/ignoredInvalidPseudonym.hamlet b/backend/templates/messages/ignoredInvalidPseudonym.hamlet similarity index 100% rename from templates/messages/ignoredInvalidPseudonym.hamlet rename to backend/templates/messages/ignoredInvalidPseudonym.hamlet diff --git a/templates/messages/personalisedSheetFilesIgnored.hamlet b/backend/templates/messages/personalisedSheetFilesIgnored.hamlet similarity index 100% rename from templates/messages/personalisedSheetFilesIgnored.hamlet rename to backend/templates/messages/personalisedSheetFilesIgnored.hamlet diff --git a/templates/messages/submissionCreateDuplicates.hamlet b/backend/templates/messages/submissionCreateDuplicates.hamlet similarity index 100% rename from templates/messages/submissionCreateDuplicates.hamlet rename to backend/templates/messages/submissionCreateDuplicates.hamlet diff --git a/templates/messages/submissionCreateExisting.hamlet b/backend/templates/messages/submissionCreateExisting.hamlet similarity index 100% rename from templates/messages/submissionCreateExisting.hamlet rename to backend/templates/messages/submissionCreateExisting.hamlet diff --git a/templates/messages/submissionFilesIgnored.hamlet b/backend/templates/messages/submissionFilesIgnored.hamlet similarity index 100% rename from templates/messages/submissionFilesIgnored.hamlet rename to backend/templates/messages/submissionFilesIgnored.hamlet diff --git a/templates/messages/submissionsAlreadyAssigned.hamlet b/backend/templates/messages/submissionsAlreadyAssigned.hamlet similarity index 100% rename from templates/messages/submissionsAlreadyAssigned.hamlet rename to backend/templates/messages/submissionsAlreadyAssigned.hamlet diff --git a/templates/messages/submissionsAssignNotFound.hamlet b/backend/templates/messages/submissionsAssignNotFound.hamlet similarity index 100% rename from templates/messages/submissionsAssignNotFound.hamlet rename to backend/templates/messages/submissionsAssignNotFound.hamlet diff --git a/templates/messages/submissionsAssignUnauthorized.hamlet b/backend/templates/messages/submissionsAssignUnauthorized.hamlet similarity index 100% rename from templates/messages/submissionsAssignUnauthorized.hamlet rename to backend/templates/messages/submissionsAssignUnauthorized.hamlet diff --git a/templates/messages/submissionsNotAssignedAuto.hamlet b/backend/templates/messages/submissionsNotAssignedAuto.hamlet similarity index 100% rename from templates/messages/submissionsNotAssignedAuto.hamlet rename to backend/templates/messages/submissionsNotAssignedAuto.hamlet diff --git a/templates/messages/systemMessagesDeleted.hamlet b/backend/templates/messages/systemMessagesDeleted.hamlet similarity index 100% rename from templates/messages/systemMessagesDeleted.hamlet rename to backend/templates/messages/systemMessagesDeleted.hamlet diff --git a/templates/messages/systemMessagesSetFrom.hamlet b/backend/templates/messages/systemMessagesSetFrom.hamlet similarity index 100% rename from templates/messages/systemMessagesSetFrom.hamlet rename to backend/templates/messages/systemMessagesSetFrom.hamlet diff --git a/templates/messages/systemMessagesSetTo.hamlet b/backend/templates/messages/systemMessagesSetTo.hamlet similarity index 100% rename from templates/messages/systemMessagesSetTo.hamlet rename to backend/templates/messages/systemMessagesSetTo.hamlet diff --git a/templates/metrics.hamlet b/backend/templates/metrics.hamlet similarity index 100% rename from templates/metrics.hamlet rename to backend/templates/metrics.hamlet diff --git a/templates/news/activeAllocations.hamlet b/backend/templates/news/activeAllocations.hamlet similarity index 100% rename from templates/news/activeAllocations.hamlet rename to backend/templates/news/activeAllocations.hamlet diff --git a/templates/news/openAllocations.hamlet b/backend/templates/news/openAllocations.hamlet similarity index 100% rename from templates/news/openAllocations.hamlet rename to backend/templates/news/openAllocations.hamlet diff --git a/templates/news/system-messages.hamlet b/backend/templates/news/system-messages.hamlet similarity index 100% rename from templates/news/system-messages.hamlet rename to backend/templates/news/system-messages.hamlet diff --git a/templates/news/upcomingExams.hamlet b/backend/templates/news/upcomingExams.hamlet similarity index 100% rename from templates/news/upcomingExams.hamlet rename to backend/templates/news/upcomingExams.hamlet diff --git a/templates/news/upcomingSheets.hamlet b/backend/templates/news/upcomingSheets.hamlet similarity index 100% rename from templates/news/upcomingSheets.hamlet rename to backend/templates/news/upcomingSheets.hamlet diff --git a/templates/participants-intersect.hamlet b/backend/templates/participants-intersect.hamlet similarity index 100% rename from templates/participants-intersect.hamlet rename to backend/templates/participants-intersect.hamlet diff --git a/templates/participants-list.hamlet b/backend/templates/participants-list.hamlet similarity index 100% rename from templates/participants-list.hamlet rename to backend/templates/participants-list.hamlet diff --git a/templates/print-center.hamlet b/backend/templates/print-center.hamlet similarity index 100% rename from templates/print-center.hamlet rename to backend/templates/print-center.hamlet diff --git a/templates/print-send.hamlet b/backend/templates/print-send.hamlet similarity index 100% rename from templates/print-send.hamlet rename to backend/templates/print-send.hamlet diff --git a/templates/profile/exam-office-labels/add.hamlet b/backend/templates/profile/exam-office-labels/add.hamlet similarity index 100% rename from templates/profile/exam-office-labels/add.hamlet rename to backend/templates/profile/exam-office-labels/add.hamlet diff --git a/templates/profile/exam-office-labels/cell.hamlet b/backend/templates/profile/exam-office-labels/cell.hamlet similarity index 100% rename from templates/profile/exam-office-labels/cell.hamlet rename to backend/templates/profile/exam-office-labels/cell.hamlet diff --git a/templates/profile/exam-office-labels/layout.hamlet b/backend/templates/profile/exam-office-labels/layout.hamlet similarity index 100% rename from templates/profile/exam-office-labels/layout.hamlet rename to backend/templates/profile/exam-office-labels/layout.hamlet diff --git a/templates/profile/profile.hamlet b/backend/templates/profile/profile.hamlet similarity index 100% rename from templates/profile/profile.hamlet rename to backend/templates/profile/profile.hamlet diff --git a/templates/profile/profile.julius b/backend/templates/profile/profile.julius similarity index 100% rename from templates/profile/profile.julius rename to backend/templates/profile/profile.julius diff --git a/templates/profileData.hamlet b/backend/templates/profileData.hamlet similarity index 100% rename from templates/profileData.hamlet rename to backend/templates/profileData.hamlet diff --git a/templates/qualification-all.hamlet b/backend/templates/qualification-all.hamlet similarity index 100% rename from templates/qualification-all.hamlet rename to backend/templates/qualification-all.hamlet diff --git a/templates/qualification.hamlet b/backend/templates/qualification.hamlet similarity index 100% rename from templates/qualification.hamlet rename to backend/templates/qualification.hamlet diff --git a/templates/sheetCorrectors/add.hamlet b/backend/templates/sheetCorrectors/add.hamlet similarity index 100% rename from templates/sheetCorrectors/add.hamlet rename to backend/templates/sheetCorrectors/add.hamlet diff --git a/templates/sheetCorrectors/cell.hamlet b/backend/templates/sheetCorrectors/cell.hamlet similarity index 100% rename from templates/sheetCorrectors/cell.hamlet rename to backend/templates/sheetCorrectors/cell.hamlet diff --git a/templates/sheetCorrectors/layout.hamlet b/backend/templates/sheetCorrectors/layout.hamlet similarity index 100% rename from templates/sheetCorrectors/layout.hamlet rename to backend/templates/sheetCorrectors/layout.hamlet diff --git a/templates/sheetList.hamlet b/backend/templates/sheetList.hamlet similarity index 100% rename from templates/sheetList.hamlet rename to backend/templates/sheetList.hamlet diff --git a/templates/sheetShow.hamlet b/backend/templates/sheetShow.hamlet similarity index 100% rename from templates/sheetShow.hamlet rename to backend/templates/sheetShow.hamlet diff --git a/templates/submission-assign.hamlet b/backend/templates/submission-assign.hamlet similarity index 100% rename from templates/submission-assign.hamlet rename to backend/templates/submission-assign.hamlet diff --git a/templates/submission-correction-invisible.hamlet b/backend/templates/submission-correction-invisible.hamlet similarity index 100% rename from templates/submission-correction-invisible.hamlet rename to backend/templates/submission-correction-invisible.hamlet diff --git a/templates/submission.hamlet b/backend/templates/submission.hamlet similarity index 100% rename from templates/submission.hamlet rename to backend/templates/submission.hamlet diff --git a/templates/system-message-list.hamlet b/backend/templates/system-message-list.hamlet similarity index 100% rename from templates/system-message-list.hamlet rename to backend/templates/system-message-list.hamlet diff --git a/templates/system-message.hamlet b/backend/templates/system-message.hamlet similarity index 100% rename from templates/system-message.hamlet rename to backend/templates/system-message.hamlet diff --git a/templates/table/cell/body.hamlet b/backend/templates/table/cell/body.hamlet similarity index 100% rename from templates/table/cell/body.hamlet rename to backend/templates/table/cell/body.hamlet diff --git a/templates/table/cell/header.hamlet b/backend/templates/table/cell/header.hamlet similarity index 100% rename from templates/table/cell/header.hamlet rename to backend/templates/table/cell/header.hamlet diff --git a/templates/table/cell/link.hamlet b/backend/templates/table/cell/link.hamlet similarity index 100% rename from templates/table/cell/link.hamlet rename to backend/templates/table/cell/link.hamlet diff --git a/templates/table/cell/list.hamlet b/backend/templates/table/cell/list.hamlet similarity index 100% rename from templates/table/cell/list.hamlet rename to backend/templates/table/cell/list.hamlet diff --git a/templates/table/cell/user-study-feature.hamlet b/backend/templates/table/cell/user-study-feature.hamlet similarity index 100% rename from templates/table/cell/user-study-feature.hamlet rename to backend/templates/table/cell/user-study-feature.hamlet diff --git a/templates/table/colonnade.hamlet b/backend/templates/table/colonnade.hamlet similarity index 100% rename from templates/table/colonnade.hamlet rename to backend/templates/table/colonnade.hamlet diff --git a/templates/table/course/colonnade.hamlet b/backend/templates/table/course/colonnade.hamlet similarity index 100% rename from templates/table/course/colonnade.hamlet rename to backend/templates/table/course/colonnade.hamlet diff --git a/templates/table/course/course-teaser.hamlet b/backend/templates/table/course/course-teaser.hamlet similarity index 100% rename from templates/table/course/course-teaser.hamlet rename to backend/templates/table/course/course-teaser.hamlet diff --git a/templates/table/course/header.hamlet b/backend/templates/table/course/header.hamlet similarity index 100% rename from templates/table/course/header.hamlet rename to backend/templates/table/course/header.hamlet diff --git a/templates/table/csv-column-explanations.hamlet b/backend/templates/table/csv-column-explanations.hamlet similarity index 100% rename from templates/table/csv-column-explanations.hamlet rename to backend/templates/table/csv-column-explanations.hamlet diff --git a/templates/table/csv-example.hamlet b/backend/templates/table/csv-example.hamlet similarity index 100% rename from templates/table/csv-example.hamlet rename to backend/templates/table/csv-example.hamlet diff --git a/templates/table/csv-reimport.hamlet b/backend/templates/table/csv-reimport.hamlet similarity index 100% rename from templates/table/csv-reimport.hamlet rename to backend/templates/table/csv-reimport.hamlet diff --git a/templates/table/csv-transcode.hamlet b/backend/templates/table/csv-transcode.hamlet similarity index 100% rename from templates/table/csv-transcode.hamlet rename to backend/templates/table/csv-transcode.hamlet diff --git a/templates/table/header.hamlet b/backend/templates/table/header.hamlet similarity index 100% rename from templates/table/header.hamlet rename to backend/templates/table/header.hamlet diff --git a/templates/table/layout-filter-default.hamlet b/backend/templates/table/layout-filter-default.hamlet similarity index 100% rename from templates/table/layout-filter-default.hamlet rename to backend/templates/table/layout-filter-default.hamlet diff --git a/templates/table/layout-standalone.hamlet b/backend/templates/table/layout-standalone.hamlet similarity index 100% rename from templates/table/layout-standalone.hamlet rename to backend/templates/table/layout-standalone.hamlet diff --git a/templates/table/layout-wrapper.hamlet b/backend/templates/table/layout-wrapper.hamlet similarity index 100% rename from templates/table/layout-wrapper.hamlet rename to backend/templates/table/layout-wrapper.hamlet diff --git a/templates/table/layout.hamlet b/backend/templates/table/layout.hamlet similarity index 100% rename from templates/table/layout.hamlet rename to backend/templates/table/layout.hamlet diff --git a/templates/table/sortable-header.hamlet b/backend/templates/table/sortable-header.hamlet similarity index 100% rename from templates/table/sortable-header.hamlet rename to backend/templates/table/sortable-header.hamlet diff --git a/templates/term/active-mass-input/add.hamlet b/backend/templates/term/active-mass-input/add.hamlet similarity index 100% rename from templates/term/active-mass-input/add.hamlet rename to backend/templates/term/active-mass-input/add.hamlet diff --git a/templates/term/active-mass-input/cell.hamlet b/backend/templates/term/active-mass-input/cell.hamlet similarity index 100% rename from templates/term/active-mass-input/cell.hamlet rename to backend/templates/term/active-mass-input/cell.hamlet diff --git a/templates/term/active-mass-input/layout.hamlet b/backend/templates/term/active-mass-input/layout.hamlet similarity index 100% rename from templates/term/active-mass-input/layout.hamlet rename to backend/templates/term/active-mass-input/layout.hamlet diff --git a/templates/term/holiday-mass-input/add.hamlet b/backend/templates/term/holiday-mass-input/add.hamlet similarity index 100% rename from templates/term/holiday-mass-input/add.hamlet rename to backend/templates/term/holiday-mass-input/add.hamlet diff --git a/templates/term/holiday-mass-input/cell.hamlet b/backend/templates/term/holiday-mass-input/cell.hamlet similarity index 100% rename from templates/term/holiday-mass-input/cell.hamlet rename to backend/templates/term/holiday-mass-input/cell.hamlet diff --git a/templates/term/holiday-mass-input/layout.hamlet b/backend/templates/term/holiday-mass-input/layout.hamlet similarity index 100% rename from templates/term/holiday-mass-input/layout.hamlet rename to backend/templates/term/holiday-mass-input/layout.hamlet diff --git a/templates/terms.hamlet b/backend/templates/terms.hamlet similarity index 100% rename from templates/terms.hamlet rename to backend/templates/terms.hamlet diff --git a/templates/tutorial-edit.hamlet b/backend/templates/tutorial-edit.hamlet similarity index 100% rename from templates/tutorial-edit.hamlet rename to backend/templates/tutorial-edit.hamlet diff --git a/templates/tutorial-list.hamlet b/backend/templates/tutorial-list.hamlet similarity index 100% rename from templates/tutorial-list.hamlet rename to backend/templates/tutorial-list.hamlet diff --git a/templates/tutorial-new.hamlet b/backend/templates/tutorial-new.hamlet similarity index 100% rename from templates/tutorial-new.hamlet rename to backend/templates/tutorial-new.hamlet diff --git a/templates/tutorial-participants.hamlet b/backend/templates/tutorial-participants.hamlet similarity index 100% rename from templates/tutorial-participants.hamlet rename to backend/templates/tutorial-participants.hamlet diff --git a/templates/tutorial/tutorMassInput/add.hamlet b/backend/templates/tutorial/tutorMassInput/add.hamlet similarity index 100% rename from templates/tutorial/tutorMassInput/add.hamlet rename to backend/templates/tutorial/tutorMassInput/add.hamlet diff --git a/templates/tutorial/tutorMassInput/cellInvitation.hamlet b/backend/templates/tutorial/tutorMassInput/cellInvitation.hamlet similarity index 100% rename from templates/tutorial/tutorMassInput/cellInvitation.hamlet rename to backend/templates/tutorial/tutorMassInput/cellInvitation.hamlet diff --git a/templates/tutorial/tutorMassInput/cellKnown.hamlet b/backend/templates/tutorial/tutorMassInput/cellKnown.hamlet similarity index 100% rename from templates/tutorial/tutorMassInput/cellKnown.hamlet rename to backend/templates/tutorial/tutorMassInput/cellKnown.hamlet diff --git a/templates/tutorial/tutorMassInput/layout.hamlet b/backend/templates/tutorial/tutorMassInput/layout.hamlet similarity index 100% rename from templates/tutorial/tutorMassInput/layout.hamlet rename to backend/templates/tutorial/tutorMassInput/layout.hamlet diff --git a/templates/users.hamlet b/backend/templates/users.hamlet similarity index 100% rename from templates/users.hamlet rename to backend/templates/users.hamlet diff --git a/templates/versionHistory.hamlet b/backend/templates/versionHistory.hamlet similarity index 100% rename from templates/versionHistory.hamlet rename to backend/templates/versionHistory.hamlet diff --git a/templates/widgets/aform/aform.hamlet b/backend/templates/widgets/aform/aform.hamlet similarity index 100% rename from templates/widgets/aform/aform.hamlet rename to backend/templates/widgets/aform/aform.hamlet diff --git a/templates/widgets/alerts/alerts.hamlet b/backend/templates/widgets/alerts/alerts.hamlet similarity index 100% rename from templates/widgets/alerts/alerts.hamlet rename to backend/templates/widgets/alerts/alerts.hamlet diff --git a/templates/widgets/authorship-statement-accept.hamlet b/backend/templates/widgets/authorship-statement-accept.hamlet similarity index 100% rename from templates/widgets/authorship-statement-accept.hamlet rename to backend/templates/widgets/authorship-statement-accept.hamlet diff --git a/templates/widgets/authorship-statement-submission-explanation.hamlet b/backend/templates/widgets/authorship-statement-submission-explanation.hamlet similarity index 100% rename from templates/widgets/authorship-statement-submission-explanation.hamlet rename to backend/templates/widgets/authorship-statement-submission-explanation.hamlet diff --git a/templates/widgets/bonusRule.hamlet b/backend/templates/widgets/bonusRule.hamlet similarity index 100% rename from templates/widgets/bonusRule.hamlet rename to backend/templates/widgets/bonusRule.hamlet diff --git a/templates/widgets/breadcrumbs/breadcrumbs.hamlet b/backend/templates/widgets/breadcrumbs/breadcrumbs.hamlet similarity index 100% rename from templates/widgets/breadcrumbs/breadcrumbs.hamlet rename to backend/templates/widgets/breadcrumbs/breadcrumbs.hamlet diff --git a/templates/widgets/campus-login/campus-login-form.hamlet b/backend/templates/widgets/campus-login/campus-login-form.hamlet similarity index 100% rename from templates/widgets/campus-login/campus-login-form.hamlet rename to backend/templates/widgets/campus-login/campus-login-form.hamlet diff --git a/templates/widgets/campus-login/campus-login.hamlet b/backend/templates/widgets/campus-login/campus-login.hamlet similarity index 100% rename from templates/widgets/campus-login/campus-login.hamlet rename to backend/templates/widgets/campus-login/campus-login.hamlet diff --git a/templates/widgets/communication/recipientAdd.hamlet b/backend/templates/widgets/communication/recipientAdd.hamlet similarity index 100% rename from templates/widgets/communication/recipientAdd.hamlet rename to backend/templates/widgets/communication/recipientAdd.hamlet diff --git a/templates/widgets/communication/recipientEmail.hamlet b/backend/templates/widgets/communication/recipientEmail.hamlet similarity index 100% rename from templates/widgets/communication/recipientEmail.hamlet rename to backend/templates/widgets/communication/recipientEmail.hamlet diff --git a/templates/widgets/communication/recipientLayout.hamlet b/backend/templates/widgets/communication/recipientLayout.hamlet similarity index 100% rename from templates/widgets/communication/recipientLayout.hamlet rename to backend/templates/widgets/communication/recipientLayout.hamlet diff --git a/templates/widgets/communication/recipientName.hamlet b/backend/templates/widgets/communication/recipientName.hamlet similarity index 100% rename from templates/widgets/communication/recipientName.hamlet rename to backend/templates/widgets/communication/recipientName.hamlet diff --git a/templates/widgets/csvRendered.hamlet b/backend/templates/widgets/csvRendered.hamlet similarity index 100% rename from templates/widgets/csvRendered.hamlet rename to backend/templates/widgets/csvRendered.hamlet diff --git a/templates/widgets/date-time/yet-invisible.hamlet b/backend/templates/widgets/date-time/yet-invisible.hamlet similarity index 100% rename from templates/widgets/date-time/yet-invisible.hamlet rename to backend/templates/widgets/date-time/yet-invisible.hamlet diff --git a/templates/widgets/delete-confirmation/delete-confirmation.hamlet b/backend/templates/widgets/delete-confirmation/delete-confirmation.hamlet similarity index 100% rename from templates/widgets/delete-confirmation/delete-confirmation.hamlet rename to backend/templates/widgets/delete-confirmation/delete-confirmation.hamlet diff --git a/templates/widgets/dummy-login-form/dummy-login-form.hamlet b/backend/templates/widgets/dummy-login-form/dummy-login-form.hamlet similarity index 100% rename from templates/widgets/dummy-login-form/dummy-login-form.hamlet rename to backend/templates/widgets/dummy-login-form/dummy-login-form.hamlet diff --git a/templates/widgets/email.hamlet b/backend/templates/widgets/email.hamlet similarity index 100% rename from templates/widgets/email.hamlet rename to backend/templates/widgets/email.hamlet diff --git a/templates/widgets/exam-close-on-finished.hamlet b/backend/templates/widgets/exam-close-on-finished.hamlet similarity index 100% rename from templates/widgets/exam-close-on-finished.hamlet rename to backend/templates/widgets/exam-close-on-finished.hamlet diff --git a/templates/widgets/exam-close.hamlet b/backend/templates/widgets/exam-close.hamlet similarity index 100% rename from templates/widgets/exam-close.hamlet rename to backend/templates/widgets/exam-close.hamlet diff --git a/templates/widgets/exam-finish.hamlet b/backend/templates/widgets/exam-finish.hamlet similarity index 100% rename from templates/widgets/exam-finish.hamlet rename to backend/templates/widgets/exam-finish.hamlet diff --git a/templates/widgets/exam-occurrence-mapping-description.hamlet b/backend/templates/widgets/exam-occurrence-mapping-description.hamlet similarity index 100% rename from templates/widgets/exam-occurrence-mapping-description.hamlet rename to backend/templates/widgets/exam-occurrence-mapping-description.hamlet diff --git a/templates/widgets/exam-occurrence-mapping.hamlet b/backend/templates/widgets/exam-occurrence-mapping.hamlet similarity index 100% rename from templates/widgets/exam-occurrence-mapping.hamlet rename to backend/templates/widgets/exam-occurrence-mapping.hamlet diff --git a/templates/widgets/exam-office-label.hamlet b/backend/templates/widgets/exam-office-label.hamlet similarity index 100% rename from templates/widgets/exam-office-label.hamlet rename to backend/templates/widgets/exam-office-label.hamlet diff --git a/templates/widgets/explained-selection-field.hamlet b/backend/templates/widgets/explained-selection-field.hamlet similarity index 100% rename from templates/widgets/explained-selection-field.hamlet rename to backend/templates/widgets/explained-selection-field.hamlet diff --git a/templates/widgets/field-view/field-view.hamlet b/backend/templates/widgets/field-view/field-view.hamlet similarity index 100% rename from templates/widgets/field-view/field-view.hamlet rename to backend/templates/widgets/field-view/field-view.hamlet diff --git a/templates/widgets/fields/examOfficeFieldMode.hamlet b/backend/templates/widgets/fields/examOfficeFieldMode.hamlet similarity index 100% rename from templates/widgets/fields/examOfficeFieldMode.hamlet rename to backend/templates/widgets/fields/examOfficeFieldMode.hamlet diff --git a/templates/widgets/fields/funcField.hamlet b/backend/templates/widgets/fields/funcField.hamlet similarity index 100% rename from templates/widgets/fields/funcField.hamlet rename to backend/templates/widgets/fields/funcField.hamlet diff --git a/templates/widgets/fields/labeled-checkbox.hamlet b/backend/templates/widgets/fields/labeled-checkbox.hamlet similarity index 100% rename from templates/widgets/fields/labeled-checkbox.hamlet rename to backend/templates/widgets/fields/labeled-checkbox.hamlet diff --git a/templates/widgets/footer/footer.hamlet b/backend/templates/widgets/footer/footer.hamlet similarity index 100% rename from templates/widgets/footer/footer.hamlet rename to backend/templates/widgets/footer/footer.hamlet diff --git a/templates/widgets/footer/link.hamlet b/backend/templates/widgets/footer/link.hamlet similarity index 100% rename from templates/widgets/footer/link.hamlet rename to backend/templates/widgets/footer/link.hamlet diff --git a/templates/widgets/form/form.hamlet b/backend/templates/widgets/form/form.hamlet similarity index 100% rename from templates/widgets/form/form.hamlet rename to backend/templates/widgets/form/form.hamlet diff --git a/templates/widgets/genericFileField.hamlet b/backend/templates/widgets/genericFileField.hamlet similarity index 100% rename from templates/widgets/genericFileField.hamlet rename to backend/templates/widgets/genericFileField.hamlet diff --git a/templates/widgets/grading-summary/grading-summary-row.hamlet b/backend/templates/widgets/grading-summary/grading-summary-row.hamlet similarity index 100% rename from templates/widgets/grading-summary/grading-summary-row.hamlet rename to backend/templates/widgets/grading-summary/grading-summary-row.hamlet diff --git a/templates/widgets/grading-summary/grading-summary.hamlet b/backend/templates/widgets/grading-summary/grading-summary.hamlet similarity index 100% rename from templates/widgets/grading-summary/grading-summary.hamlet rename to backend/templates/widgets/grading-summary/grading-summary.hamlet diff --git a/templates/widgets/gradingKey.hamlet b/backend/templates/widgets/gradingKey.hamlet similarity index 100% rename from templates/widgets/gradingKey.hamlet rename to backend/templates/widgets/gradingKey.hamlet diff --git a/templates/widgets/hash-login-form/hash-login-form.hamlet b/backend/templates/widgets/hash-login-form/hash-login-form.hamlet similarity index 100% rename from templates/widgets/hash-login-form/hash-login-form.hamlet rename to backend/templates/widgets/hash-login-form/hash-login-form.hamlet diff --git a/templates/widgets/html-field.hamlet b/backend/templates/widgets/html-field.hamlet similarity index 100% rename from templates/widgets/html-field.hamlet rename to backend/templates/widgets/html-field.hamlet diff --git a/templates/widgets/i18n-form/add.hamlet b/backend/templates/widgets/i18n-form/add.hamlet similarity index 100% rename from templates/widgets/i18n-form/add.hamlet rename to backend/templates/widgets/i18n-form/add.hamlet diff --git a/templates/widgets/i18n-form/cell.hamlet b/backend/templates/widgets/i18n-form/cell.hamlet similarity index 100% rename from templates/widgets/i18n-form/cell.hamlet rename to backend/templates/widgets/i18n-form/cell.hamlet diff --git a/templates/widgets/i18n-form/layout.hamlet b/backend/templates/widgets/i18n-form/layout.hamlet similarity index 100% rename from templates/widgets/i18n-form/layout.hamlet rename to backend/templates/widgets/i18n-form/layout.hamlet diff --git a/templates/widgets/invitation-site.hamlet b/backend/templates/widgets/invitation-site.hamlet similarity index 100% rename from templates/widgets/invitation-site.hamlet rename to backend/templates/widgets/invitation-site.hamlet diff --git a/templates/widgets/link-email.hamlet b/backend/templates/widgets/link-email.hamlet similarity index 100% rename from templates/widgets/link-email.hamlet rename to backend/templates/widgets/link-email.hamlet diff --git a/templates/widgets/massinput/cell.hamlet b/backend/templates/widgets/massinput/cell.hamlet similarity index 100% rename from templates/widgets/massinput/cell.hamlet rename to backend/templates/widgets/massinput/cell.hamlet diff --git a/templates/widgets/massinput/courses/add.hamlet b/backend/templates/widgets/massinput/courses/add.hamlet similarity index 100% rename from templates/widgets/massinput/courses/add.hamlet rename to backend/templates/widgets/massinput/courses/add.hamlet diff --git a/templates/widgets/massinput/courses/cell.hamlet b/backend/templates/widgets/massinput/courses/cell.hamlet similarity index 100% rename from templates/widgets/massinput/courses/cell.hamlet rename to backend/templates/widgets/massinput/courses/cell.hamlet diff --git a/templates/widgets/massinput/courses/layout.hamlet b/backend/templates/widgets/massinput/courses/layout.hamlet similarity index 100% rename from templates/widgets/massinput/courses/layout.hamlet rename to backend/templates/widgets/massinput/courses/layout.hamlet diff --git a/templates/widgets/massinput/examCorrectors/add.hamlet b/backend/templates/widgets/massinput/examCorrectors/add.hamlet similarity index 100% rename from templates/widgets/massinput/examCorrectors/add.hamlet rename to backend/templates/widgets/massinput/examCorrectors/add.hamlet diff --git a/templates/widgets/massinput/examCorrectors/cellInvitation.hamlet b/backend/templates/widgets/massinput/examCorrectors/cellInvitation.hamlet similarity index 100% rename from templates/widgets/massinput/examCorrectors/cellInvitation.hamlet rename to backend/templates/widgets/massinput/examCorrectors/cellInvitation.hamlet diff --git a/templates/widgets/massinput/examCorrectors/cellKnown.hamlet b/backend/templates/widgets/massinput/examCorrectors/cellKnown.hamlet similarity index 100% rename from templates/widgets/massinput/examCorrectors/cellKnown.hamlet rename to backend/templates/widgets/massinput/examCorrectors/cellKnown.hamlet diff --git a/templates/widgets/massinput/examCorrectors/layout.hamlet b/backend/templates/widgets/massinput/examCorrectors/layout.hamlet similarity index 100% rename from templates/widgets/massinput/examCorrectors/layout.hamlet rename to backend/templates/widgets/massinput/examCorrectors/layout.hamlet diff --git a/templates/widgets/massinput/examOfficeUsers/add.hamlet b/backend/templates/widgets/massinput/examOfficeUsers/add.hamlet similarity index 100% rename from templates/widgets/massinput/examOfficeUsers/add.hamlet rename to backend/templates/widgets/massinput/examOfficeUsers/add.hamlet diff --git a/templates/widgets/massinput/examOfficeUsers/cellInvitation.hamlet b/backend/templates/widgets/massinput/examOfficeUsers/cellInvitation.hamlet similarity index 100% rename from templates/widgets/massinput/examOfficeUsers/cellInvitation.hamlet rename to backend/templates/widgets/massinput/examOfficeUsers/cellInvitation.hamlet diff --git a/templates/widgets/massinput/examOfficeUsers/cellKnown.hamlet b/backend/templates/widgets/massinput/examOfficeUsers/cellKnown.hamlet similarity index 100% rename from templates/widgets/massinput/examOfficeUsers/cellKnown.hamlet rename to backend/templates/widgets/massinput/examOfficeUsers/cellKnown.hamlet diff --git a/templates/widgets/massinput/examOfficeUsers/layout.hamlet b/backend/templates/widgets/massinput/examOfficeUsers/layout.hamlet similarity index 100% rename from templates/widgets/massinput/examOfficeUsers/layout.hamlet rename to backend/templates/widgets/massinput/examOfficeUsers/layout.hamlet diff --git a/templates/widgets/massinput/examParts/add.hamlet b/backend/templates/widgets/massinput/examParts/add.hamlet similarity index 100% rename from templates/widgets/massinput/examParts/add.hamlet rename to backend/templates/widgets/massinput/examParts/add.hamlet diff --git a/templates/widgets/massinput/examParts/form.hamlet b/backend/templates/widgets/massinput/examParts/form.hamlet similarity index 100% rename from templates/widgets/massinput/examParts/form.hamlet rename to backend/templates/widgets/massinput/examParts/form.hamlet diff --git a/templates/widgets/massinput/examParts/layout.hamlet b/backend/templates/widgets/massinput/examParts/layout.hamlet similarity index 100% rename from templates/widgets/massinput/examParts/layout.hamlet rename to backend/templates/widgets/massinput/examParts/layout.hamlet diff --git a/templates/widgets/massinput/examRooms/add.hamlet b/backend/templates/widgets/massinput/examRooms/add.hamlet similarity index 100% rename from templates/widgets/massinput/examRooms/add.hamlet rename to backend/templates/widgets/massinput/examRooms/add.hamlet diff --git a/templates/widgets/massinput/examRooms/form.hamlet b/backend/templates/widgets/massinput/examRooms/form.hamlet similarity index 100% rename from templates/widgets/massinput/examRooms/form.hamlet rename to backend/templates/widgets/massinput/examRooms/form.hamlet diff --git a/templates/widgets/massinput/examRooms/layout.hamlet b/backend/templates/widgets/massinput/examRooms/layout.hamlet similarity index 100% rename from templates/widgets/massinput/examRooms/layout.hamlet rename to backend/templates/widgets/massinput/examRooms/layout.hamlet diff --git a/templates/widgets/massinput/list/cell.hamlet b/backend/templates/widgets/massinput/list/cell.hamlet similarity index 100% rename from templates/widgets/massinput/list/cell.hamlet rename to backend/templates/widgets/massinput/list/cell.hamlet diff --git a/templates/widgets/massinput/list/layout.hamlet b/backend/templates/widgets/massinput/list/layout.hamlet similarity index 100% rename from templates/widgets/massinput/list/layout.hamlet rename to backend/templates/widgets/massinput/list/layout.hamlet diff --git a/templates/widgets/massinput/massinput-standalone-wrapper.hamlet b/backend/templates/widgets/massinput/massinput-standalone-wrapper.hamlet similarity index 100% rename from templates/widgets/massinput/massinput-standalone-wrapper.hamlet rename to backend/templates/widgets/massinput/massinput-standalone-wrapper.hamlet diff --git a/templates/widgets/massinput/massinput-standalone.hamlet b/backend/templates/widgets/massinput/massinput-standalone.hamlet similarity index 100% rename from templates/widgets/massinput/massinput-standalone.hamlet rename to backend/templates/widgets/massinput/massinput-standalone.hamlet diff --git a/templates/widgets/massinput/massinput.hamlet b/backend/templates/widgets/massinput/massinput.hamlet similarity index 100% rename from templates/widgets/massinput/massinput.hamlet rename to backend/templates/widgets/massinput/massinput.hamlet diff --git a/templates/widgets/massinput/row.hamlet b/backend/templates/widgets/massinput/row.hamlet similarity index 100% rename from templates/widgets/massinput/row.hamlet rename to backend/templates/widgets/massinput/row.hamlet diff --git a/templates/widgets/massinput/submissionUsers/add.hamlet b/backend/templates/widgets/massinput/submissionUsers/add.hamlet similarity index 100% rename from templates/widgets/massinput/submissionUsers/add.hamlet rename to backend/templates/widgets/massinput/submissionUsers/add.hamlet diff --git a/templates/widgets/massinput/submissionUsers/cellInvitation.hamlet b/backend/templates/widgets/massinput/submissionUsers/cellInvitation.hamlet similarity index 100% rename from templates/widgets/massinput/submissionUsers/cellInvitation.hamlet rename to backend/templates/widgets/massinput/submissionUsers/cellInvitation.hamlet diff --git a/templates/widgets/massinput/submissionUsers/cellKnown.hamlet b/backend/templates/widgets/massinput/submissionUsers/cellKnown.hamlet similarity index 100% rename from templates/widgets/massinput/submissionUsers/cellKnown.hamlet rename to backend/templates/widgets/massinput/submissionUsers/cellKnown.hamlet diff --git a/templates/widgets/massinput/submissionUsers/layout.hamlet b/backend/templates/widgets/massinput/submissionUsers/layout.hamlet similarity index 100% rename from templates/widgets/massinput/submissionUsers/layout.hamlet rename to backend/templates/widgets/massinput/submissionUsers/layout.hamlet diff --git a/templates/widgets/massinput/systemMessage/volatileClusterSettings/add.hamlet b/backend/templates/widgets/massinput/systemMessage/volatileClusterSettings/add.hamlet similarity index 100% rename from templates/widgets/massinput/systemMessage/volatileClusterSettings/add.hamlet rename to backend/templates/widgets/massinput/systemMessage/volatileClusterSettings/add.hamlet diff --git a/templates/widgets/massinput/systemMessage/volatileClusterSettings/form.hamlet b/backend/templates/widgets/massinput/systemMessage/volatileClusterSettings/form.hamlet similarity index 100% rename from templates/widgets/massinput/systemMessage/volatileClusterSettings/form.hamlet rename to backend/templates/widgets/massinput/systemMessage/volatileClusterSettings/form.hamlet diff --git a/templates/widgets/massinput/systemMessage/volatileClusterSettings/layout.hamlet b/backend/templates/widgets/massinput/systemMessage/volatileClusterSettings/layout.hamlet similarity index 100% rename from templates/widgets/massinput/systemMessage/volatileClusterSettings/layout.hamlet rename to backend/templates/widgets/massinput/systemMessage/volatileClusterSettings/layout.hamlet diff --git a/templates/widgets/massinput/token-restrictions/add.hamlet b/backend/templates/widgets/massinput/token-restrictions/add.hamlet similarity index 100% rename from templates/widgets/massinput/token-restrictions/add.hamlet rename to backend/templates/widgets/massinput/token-restrictions/add.hamlet diff --git a/templates/widgets/massinput/token-restrictions/cell.hamlet b/backend/templates/widgets/massinput/token-restrictions/cell.hamlet similarity index 100% rename from templates/widgets/massinput/token-restrictions/cell.hamlet rename to backend/templates/widgets/massinput/token-restrictions/cell.hamlet diff --git a/templates/widgets/massinput/token-restrictions/layout.hamlet b/backend/templates/widgets/massinput/token-restrictions/layout.hamlet similarity index 100% rename from templates/widgets/massinput/token-restrictions/layout.hamlet rename to backend/templates/widgets/massinput/token-restrictions/layout.hamlet diff --git a/templates/widgets/massinput/uploadSpecificFiles/add.hamlet b/backend/templates/widgets/massinput/uploadSpecificFiles/add.hamlet similarity index 100% rename from templates/widgets/massinput/uploadSpecificFiles/add.hamlet rename to backend/templates/widgets/massinput/uploadSpecificFiles/add.hamlet diff --git a/templates/widgets/massinput/uploadSpecificFiles/form.hamlet b/backend/templates/widgets/massinput/uploadSpecificFiles/form.hamlet similarity index 100% rename from templates/widgets/massinput/uploadSpecificFiles/form.hamlet rename to backend/templates/widgets/massinput/uploadSpecificFiles/form.hamlet diff --git a/templates/widgets/massinput/uploadSpecificFiles/layout.hamlet b/backend/templates/widgets/massinput/uploadSpecificFiles/layout.hamlet similarity index 100% rename from templates/widgets/massinput/uploadSpecificFiles/layout.hamlet rename to backend/templates/widgets/massinput/uploadSpecificFiles/layout.hamlet diff --git a/templates/widgets/massinput/workflow-payload-field-multiple/add.hamlet b/backend/templates/widgets/massinput/workflow-payload-field-multiple/add.hamlet similarity index 100% rename from templates/widgets/massinput/workflow-payload-field-multiple/add.hamlet rename to backend/templates/widgets/massinput/workflow-payload-field-multiple/add.hamlet diff --git a/templates/widgets/massinput/workflow-payload-field-multiple/cell.hamlet b/backend/templates/widgets/massinput/workflow-payload-field-multiple/cell.hamlet similarity index 100% rename from templates/widgets/massinput/workflow-payload-field-multiple/cell.hamlet rename to backend/templates/widgets/massinput/workflow-payload-field-multiple/cell.hamlet diff --git a/templates/widgets/massinput/workflow-payload-field-multiple/layout.hamlet b/backend/templates/widgets/massinput/workflow-payload-field-multiple/layout.hamlet similarity index 100% rename from templates/widgets/massinput/workflow-payload-field-multiple/layout.hamlet rename to backend/templates/widgets/massinput/workflow-payload-field-multiple/layout.hamlet diff --git a/templates/widgets/massinput/workflowDefinitionFiles/add.hamlet b/backend/templates/widgets/massinput/workflowDefinitionFiles/add.hamlet similarity index 100% rename from templates/widgets/massinput/workflowDefinitionFiles/add.hamlet rename to backend/templates/widgets/massinput/workflowDefinitionFiles/add.hamlet diff --git a/templates/widgets/massinput/workflowDefinitionFiles/form.hamlet b/backend/templates/widgets/massinput/workflowDefinitionFiles/form.hamlet similarity index 100% rename from templates/widgets/massinput/workflowDefinitionFiles/form.hamlet rename to backend/templates/widgets/massinput/workflowDefinitionFiles/form.hamlet diff --git a/templates/widgets/massinput/workflowDefinitionFiles/layout.hamlet b/backend/templates/widgets/massinput/workflowDefinitionFiles/layout.hamlet similarity index 100% rename from templates/widgets/massinput/workflowDefinitionFiles/layout.hamlet rename to backend/templates/widgets/massinput/workflowDefinitionFiles/layout.hamlet diff --git a/templates/widgets/massinput/workflowDescriptions/add.hamlet b/backend/templates/widgets/massinput/workflowDescriptions/add.hamlet similarity index 100% rename from templates/widgets/massinput/workflowDescriptions/add.hamlet rename to backend/templates/widgets/massinput/workflowDescriptions/add.hamlet diff --git a/templates/widgets/massinput/workflowDescriptions/form.hamlet b/backend/templates/widgets/massinput/workflowDescriptions/form.hamlet similarity index 100% rename from templates/widgets/massinput/workflowDescriptions/form.hamlet rename to backend/templates/widgets/massinput/workflowDescriptions/form.hamlet diff --git a/templates/widgets/massinput/workflowDescriptions/layout.hamlet b/backend/templates/widgets/massinput/workflowDescriptions/layout.hamlet similarity index 100% rename from templates/widgets/massinput/workflowDescriptions/layout.hamlet rename to backend/templates/widgets/massinput/workflowDescriptions/layout.hamlet diff --git a/templates/widgets/modal/modal.hamlet b/backend/templates/widgets/modal/modal.hamlet similarity index 100% rename from templates/widgets/modal/modal.hamlet rename to backend/templates/widgets/modal/modal.hamlet diff --git a/templates/widgets/modal/trigger.hamlet b/backend/templates/widgets/modal/trigger.hamlet similarity index 100% rename from templates/widgets/modal/trigger.hamlet rename to backend/templates/widgets/modal/trigger.hamlet diff --git a/templates/widgets/multi-action/multi-action.hamlet b/backend/templates/widgets/multi-action/multi-action.hamlet similarity index 100% rename from templates/widgets/multi-action/multi-action.hamlet rename to backend/templates/widgets/multi-action/multi-action.hamlet diff --git a/templates/widgets/multi-action/optional-action.hamlet b/backend/templates/widgets/multi-action/optional-action.hamlet similarity index 100% rename from templates/widgets/multi-action/optional-action.hamlet rename to backend/templates/widgets/multi-action/optional-action.hamlet diff --git a/templates/widgets/multiFileField.hamlet b/backend/templates/widgets/multiFileField.hamlet similarity index 100% rename from templates/widgets/multiFileField.hamlet rename to backend/templates/widgets/multiFileField.hamlet diff --git a/templates/widgets/navbar/container-radio.cassius b/backend/templates/widgets/navbar/container-radio.cassius similarity index 100% rename from templates/widgets/navbar/container-radio.cassius rename to backend/templates/widgets/navbar/container-radio.cassius diff --git a/templates/widgets/navbar/container-radio.cassius.license b/backend/templates/widgets/navbar/container-radio.cassius.license similarity index 100% rename from templates/widgets/navbar/container-radio.cassius.license rename to backend/templates/widgets/navbar/container-radio.cassius.license diff --git a/templates/widgets/navbar/container.hamlet b/backend/templates/widgets/navbar/container.hamlet similarity index 100% rename from templates/widgets/navbar/container.hamlet rename to backend/templates/widgets/navbar/container.hamlet diff --git a/templates/widgets/navbar/item.hamlet b/backend/templates/widgets/navbar/item.hamlet similarity index 100% rename from templates/widgets/navbar/item.hamlet rename to backend/templates/widgets/navbar/item.hamlet diff --git a/templates/widgets/navbar/navbar-container-item--button.hamlet b/backend/templates/widgets/navbar/navbar-container-item--button.hamlet similarity index 100% rename from templates/widgets/navbar/navbar-container-item--button.hamlet rename to backend/templates/widgets/navbar/navbar-container-item--button.hamlet diff --git a/templates/widgets/navbar/navbar-container-item--link.hamlet b/backend/templates/widgets/navbar/navbar-container-item--link.hamlet similarity index 100% rename from templates/widgets/navbar/navbar-container-item--link.hamlet rename to backend/templates/widgets/navbar/navbar-container-item--link.hamlet diff --git a/templates/widgets/navbar/navbar.hamlet b/backend/templates/widgets/navbar/navbar.hamlet similarity index 100% rename from templates/widgets/navbar/navbar.hamlet rename to backend/templates/widgets/navbar/navbar.hamlet diff --git a/templates/widgets/notification.hamlet b/backend/templates/widgets/notification.hamlet similarity index 100% rename from templates/widgets/notification.hamlet rename to backend/templates/widgets/notification.hamlet diff --git a/templates/widgets/occurrence/cell.hamlet b/backend/templates/widgets/occurrence/cell.hamlet similarity index 100% rename from templates/widgets/occurrence/cell.hamlet rename to backend/templates/widgets/occurrence/cell.hamlet diff --git a/templates/widgets/occurrence/cell/except-no-occur.hamlet b/backend/templates/widgets/occurrence/cell/except-no-occur.hamlet similarity index 100% rename from templates/widgets/occurrence/cell/except-no-occur.hamlet rename to backend/templates/widgets/occurrence/cell/except-no-occur.hamlet diff --git a/templates/widgets/occurrence/cell/except-no-occurr.hamlet b/backend/templates/widgets/occurrence/cell/except-no-occurr.hamlet similarity index 100% rename from templates/widgets/occurrence/cell/except-no-occurr.hamlet rename to backend/templates/widgets/occurrence/cell/except-no-occurr.hamlet diff --git a/templates/widgets/occurrence/cell/except-occur.hamlet b/backend/templates/widgets/occurrence/cell/except-occur.hamlet similarity index 100% rename from templates/widgets/occurrence/cell/except-occur.hamlet rename to backend/templates/widgets/occurrence/cell/except-occur.hamlet diff --git a/templates/widgets/occurrence/cell/except-occurr.hamlet b/backend/templates/widgets/occurrence/cell/except-occurr.hamlet similarity index 100% rename from templates/widgets/occurrence/cell/except-occurr.hamlet rename to backend/templates/widgets/occurrence/cell/except-occurr.hamlet diff --git a/templates/widgets/occurrence/cell/weekly.hamlet b/backend/templates/widgets/occurrence/cell/weekly.hamlet similarity index 100% rename from templates/widgets/occurrence/cell/weekly.hamlet rename to backend/templates/widgets/occurrence/cell/weekly.hamlet diff --git a/templates/widgets/occurrence/form/except-add.hamlet b/backend/templates/widgets/occurrence/form/except-add.hamlet similarity index 100% rename from templates/widgets/occurrence/form/except-add.hamlet rename to backend/templates/widgets/occurrence/form/except-add.hamlet diff --git a/templates/widgets/occurrence/form/except-layout.hamlet b/backend/templates/widgets/occurrence/form/except-layout.hamlet similarity index 100% rename from templates/widgets/occurrence/form/except-layout.hamlet rename to backend/templates/widgets/occurrence/form/except-layout.hamlet diff --git a/templates/widgets/occurrence/form/except-no-occur.hamlet b/backend/templates/widgets/occurrence/form/except-no-occur.hamlet similarity index 100% rename from templates/widgets/occurrence/form/except-no-occur.hamlet rename to backend/templates/widgets/occurrence/form/except-no-occur.hamlet diff --git a/templates/widgets/occurrence/form/except-occur.hamlet b/backend/templates/widgets/occurrence/form/except-occur.hamlet similarity index 100% rename from templates/widgets/occurrence/form/except-occur.hamlet rename to backend/templates/widgets/occurrence/form/except-occur.hamlet diff --git a/templates/widgets/occurrence/form/scheduled-add.hamlet b/backend/templates/widgets/occurrence/form/scheduled-add.hamlet similarity index 100% rename from templates/widgets/occurrence/form/scheduled-add.hamlet rename to backend/templates/widgets/occurrence/form/scheduled-add.hamlet diff --git a/templates/widgets/occurrence/form/scheduled-layout.hamlet b/backend/templates/widgets/occurrence/form/scheduled-layout.hamlet similarity index 100% rename from templates/widgets/occurrence/form/scheduled-layout.hamlet rename to backend/templates/widgets/occurrence/form/scheduled-layout.hamlet diff --git a/templates/widgets/occurrence/form/weekly.hamlet b/backend/templates/widgets/occurrence/form/weekly.hamlet similarity index 100% rename from templates/widgets/occurrence/form/weekly.hamlet rename to backend/templates/widgets/occurrence/form/weekly.hamlet diff --git a/templates/widgets/pageaction/pageaction.hamlet b/backend/templates/widgets/pageaction/pageaction.hamlet similarity index 100% rename from templates/widgets/pageaction/pageaction.hamlet rename to backend/templates/widgets/pageaction/pageaction.hamlet diff --git a/templates/widgets/pageaction/primary-wrapper.hamlet b/backend/templates/widgets/pageaction/primary-wrapper.hamlet similarity index 100% rename from templates/widgets/pageaction/primary-wrapper.hamlet rename to backend/templates/widgets/pageaction/primary-wrapper.hamlet diff --git a/templates/widgets/pageaction/primary.hamlet b/backend/templates/widgets/pageaction/primary.hamlet similarity index 100% rename from templates/widgets/pageaction/primary.hamlet rename to backend/templates/widgets/pageaction/primary.hamlet diff --git a/templates/widgets/pageaction/secondary.hamlet b/backend/templates/widgets/pageaction/secondary.hamlet similarity index 100% rename from templates/widgets/pageaction/secondary.hamlet rename to backend/templates/widgets/pageaction/secondary.hamlet diff --git a/templates/widgets/permutation/permutation.hamlet b/backend/templates/widgets/permutation/permutation.hamlet similarity index 100% rename from templates/widgets/permutation/permutation.hamlet rename to backend/templates/widgets/permutation/permutation.hamlet diff --git a/templates/widgets/rating/rating.hamlet b/backend/templates/widgets/rating/rating.hamlet similarity index 100% rename from templates/widgets/rating/rating.hamlet rename to backend/templates/widgets/rating/rating.hamlet diff --git a/templates/widgets/register-form/register-form.hamlet b/backend/templates/widgets/register-form/register-form.hamlet similarity index 100% rename from templates/widgets/register-form/register-form.hamlet rename to backend/templates/widgets/register-form/register-form.hamlet diff --git a/templates/widgets/room-reference/link-instructions-modal.hamlet b/backend/templates/widgets/room-reference/link-instructions-modal.hamlet similarity index 100% rename from templates/widgets/room-reference/link-instructions-modal.hamlet rename to backend/templates/widgets/room-reference/link-instructions-modal.hamlet diff --git a/templates/widgets/room-reference/link.hamlet b/backend/templates/widgets/room-reference/link.hamlet similarity index 100% rename from templates/widgets/room-reference/link.hamlet rename to backend/templates/widgets/room-reference/link.hamlet diff --git a/templates/widgets/sheetType.hamlet b/backend/templates/widgets/sheetType.hamlet similarity index 100% rename from templates/widgets/sheetType.hamlet rename to backend/templates/widgets/sheetType.hamlet diff --git a/templates/widgets/specificFileField.hamlet b/backend/templates/widgets/specificFileField.hamlet similarity index 100% rename from templates/widgets/specificFileField.hamlet rename to backend/templates/widgets/specificFileField.hamlet diff --git a/templates/widgets/tooltip.hamlet b/backend/templates/widgets/tooltip.hamlet similarity index 100% rename from templates/widgets/tooltip.hamlet rename to backend/templates/widgets/tooltip.hamlet diff --git a/templates/widgets/tooltip_no-handle.hamlet b/backend/templates/widgets/tooltip_no-handle.hamlet similarity index 100% rename from templates/widgets/tooltip_no-handle.hamlet rename to backend/templates/widgets/tooltip_no-handle.hamlet diff --git a/templates/widgets/user-rights-form/user-rights-form.hamlet b/backend/templates/widgets/user-rights-form/user-rights-form.hamlet similarity index 100% rename from templates/widgets/user-rights-form/user-rights-form.hamlet rename to backend/templates/widgets/user-rights-form/user-rights-form.hamlet diff --git a/templates/widgets/zipFileField.hamlet b/backend/templates/widgets/zipFileField.hamlet similarity index 100% rename from templates/widgets/zipFileField.hamlet rename to backend/templates/widgets/zipFileField.hamlet diff --git a/templates/workflows/instance-initiate.hamlet b/backend/templates/workflows/instance-initiate.hamlet similarity index 100% rename from templates/workflows/instance-initiate.hamlet rename to backend/templates/workflows/instance-initiate.hamlet diff --git a/templates/workflows/instances.hamlet b/backend/templates/workflows/instances.hamlet similarity index 100% rename from templates/workflows/instances.hamlet rename to backend/templates/workflows/instances.hamlet diff --git a/templates/workflows/top-instances.hamlet b/backend/templates/workflows/top-instances.hamlet similarity index 100% rename from templates/workflows/top-instances.hamlet rename to backend/templates/workflows/top-instances.hamlet diff --git a/templates/workflows/workflow-list.hamlet b/backend/templates/workflows/workflow-list.hamlet similarity index 100% rename from templates/workflows/workflow-list.hamlet rename to backend/templates/workflows/workflow-list.hamlet diff --git a/templates/workflows/workflow.hamlet b/backend/templates/workflows/workflow.hamlet similarity index 100% rename from templates/workflows/workflow.hamlet rename to backend/templates/workflows/workflow.hamlet diff --git a/templates/workflows/workflow/history-item.hamlet b/backend/templates/workflows/workflow/history-item.hamlet similarity index 100% rename from templates/workflows/workflow/history-item.hamlet rename to backend/templates/workflows/workflow/history-item.hamlet diff --git a/test/Auth/LDAP/ADSpec.hs b/backend/test/Auth/LDAP/ADSpec.hs similarity index 100% rename from test/Auth/LDAP/ADSpec.hs rename to backend/test/Auth/LDAP/ADSpec.hs diff --git a/test/CronSpec.hs b/backend/test/CronSpec.hs similarity index 100% rename from test/CronSpec.hs rename to backend/test/CronSpec.hs diff --git a/test/Crypto/Hash/TestInstances.hs b/backend/test/Crypto/Hash/TestInstances.hs similarity index 100% rename from test/Crypto/Hash/TestInstances.hs rename to backend/test/Crypto/Hash/TestInstances.hs diff --git a/test/Data/NonNull/TestInstances.hs b/backend/test/Data/NonNull/TestInstances.hs similarity index 100% rename from test/Data/NonNull/TestInstances.hs rename to backend/test/Data/NonNull/TestInstances.hs diff --git a/test/Data/Scientific/InstancesSpec.hs b/backend/test/Data/Scientific/InstancesSpec.hs similarity index 100% rename from test/Data/Scientific/InstancesSpec.hs rename to backend/test/Data/Scientific/InstancesSpec.hs diff --git a/test/Database.hs b/backend/test/Database.hs similarity index 100% rename from test/Database.hs rename to backend/test/Database.hs diff --git a/test/Database/Fill.hs b/backend/test/Database/Fill.hs similarity index 100% rename from test/Database/Fill.hs rename to backend/test/Database/Fill.hs diff --git a/test/Database/Persist/Sql/Types/TestInstances.hs b/backend/test/Database/Persist/Sql/Types/TestInstances.hs similarity index 100% rename from test/Database/Persist/Sql/Types/TestInstances.hs rename to backend/test/Database/Persist/Sql/Types/TestInstances.hs diff --git a/test/Foundation/ServantSpec.hs b/backend/test/Foundation/ServantSpec.hs similarity index 100% rename from test/Foundation/ServantSpec.hs rename to backend/test/Foundation/ServantSpec.hs diff --git a/test/FoundationSpec.hs b/backend/test/FoundationSpec.hs similarity index 100% rename from test/FoundationSpec.hs rename to backend/test/FoundationSpec.hs diff --git a/test/Handler/CommonSpec.hs b/backend/test/Handler/CommonSpec.hs similarity index 100% rename from test/Handler/CommonSpec.hs rename to backend/test/Handler/CommonSpec.hs diff --git a/test/Handler/CorrectionsSpec.hs b/backend/test/Handler/CorrectionsSpec.hs similarity index 100% rename from test/Handler/CorrectionsSpec.hs rename to backend/test/Handler/CorrectionsSpec.hs diff --git a/test/Handler/Exam/FormSpec.hs b/backend/test/Handler/Exam/FormSpec.hs similarity index 100% rename from test/Handler/Exam/FormSpec.hs rename to backend/test/Handler/Exam/FormSpec.hs diff --git a/test/Handler/HomeSpec.hs b/backend/test/Handler/HomeSpec.hs similarity index 100% rename from test/Handler/HomeSpec.hs rename to backend/test/Handler/HomeSpec.hs diff --git a/test/Handler/ProfileSpec.hs b/backend/test/Handler/ProfileSpec.hs similarity index 100% rename from test/Handler/ProfileSpec.hs rename to backend/test/Handler/ProfileSpec.hs diff --git a/test/Handler/SAPSpec.hs b/backend/test/Handler/SAPSpec.hs similarity index 100% rename from test/Handler/SAPSpec.hs rename to backend/test/Handler/SAPSpec.hs diff --git a/test/Handler/Sheet/PersonalisedFilesSpec.hs b/backend/test/Handler/Sheet/PersonalisedFilesSpec.hs similarity index 100% rename from test/Handler/Sheet/PersonalisedFilesSpec.hs rename to backend/test/Handler/Sheet/PersonalisedFilesSpec.hs diff --git a/test/Handler/Utils/ExamSpec.hs b/backend/test/Handler/Utils/ExamSpec.hs similarity index 100% rename from test/Handler/Utils/ExamSpec.hs rename to backend/test/Handler/Utils/ExamSpec.hs diff --git a/test/Handler/Utils/FilesSpec.hs b/backend/test/Handler/Utils/FilesSpec.hs similarity index 100% rename from test/Handler/Utils/FilesSpec.hs rename to backend/test/Handler/Utils/FilesSpec.hs diff --git a/test/Handler/Utils/RatingSpec.hs b/backend/test/Handler/Utils/RatingSpec.hs similarity index 100% rename from test/Handler/Utils/RatingSpec.hs rename to backend/test/Handler/Utils/RatingSpec.hs diff --git a/test/Handler/Utils/SubmissionSpec.hs b/backend/test/Handler/Utils/SubmissionSpec.hs similarity index 100% rename from test/Handler/Utils/SubmissionSpec.hs rename to backend/test/Handler/Utils/SubmissionSpec.hs diff --git a/test/Handler/Utils/Table/Pagination/TypesSpec.hs b/backend/test/Handler/Utils/Table/Pagination/TypesSpec.hs similarity index 100% rename from test/Handler/Utils/Table/Pagination/TypesSpec.hs rename to backend/test/Handler/Utils/Table/Pagination/TypesSpec.hs diff --git a/test/Handler/Utils/Table/PaginationSpec.hs b/backend/test/Handler/Utils/Table/PaginationSpec.hs similarity index 100% rename from test/Handler/Utils/Table/PaginationSpec.hs rename to backend/test/Handler/Utils/Table/PaginationSpec.hs diff --git a/test/Handler/Utils/ZipSpec.hs b/backend/test/Handler/Utils/ZipSpec.hs similarity index 100% rename from test/Handler/Utils/ZipSpec.hs rename to backend/test/Handler/Utils/ZipSpec.hs diff --git a/test/Jose/Jwk/TestInstances.hs b/backend/test/Jose/Jwk/TestInstances.hs similarity index 100% rename from test/Jose/Jwk/TestInstances.hs rename to backend/test/Jose/Jwk/TestInstances.hs diff --git a/test/MailSpec.hs b/backend/test/MailSpec.hs similarity index 100% rename from test/MailSpec.hs rename to backend/test/MailSpec.hs diff --git a/test/Main.hs b/backend/test/Main.hs similarity index 100% rename from test/Main.hs rename to backend/test/Main.hs diff --git a/test/Model/MigrationSpec.hs b/backend/test/Model/MigrationSpec.hs similarity index 100% rename from test/Model/MigrationSpec.hs rename to backend/test/Model/MigrationSpec.hs diff --git a/test/Model/RatingSpec.hs b/backend/test/Model/RatingSpec.hs similarity index 100% rename from test/Model/RatingSpec.hs rename to backend/test/Model/RatingSpec.hs diff --git a/test/Model/Tokens/UploadSpec.hs b/backend/test/Model/Tokens/UploadSpec.hs similarity index 100% rename from test/Model/Tokens/UploadSpec.hs rename to backend/test/Model/Tokens/UploadSpec.hs diff --git a/test/Model/Types/FileSpec.hs b/backend/test/Model/Types/FileSpec.hs similarity index 100% rename from test/Model/Types/FileSpec.hs rename to backend/test/Model/Types/FileSpec.hs diff --git a/test/Model/Types/LanguagesSpec.hs b/backend/test/Model/Types/LanguagesSpec.hs similarity index 100% rename from test/Model/Types/LanguagesSpec.hs rename to backend/test/Model/Types/LanguagesSpec.hs diff --git a/test/Model/TypesSpec.hs b/backend/test/Model/TypesSpec.hs similarity index 100% rename from test/Model/TypesSpec.hs rename to backend/test/Model/TypesSpec.hs diff --git a/test/ModelSpec.hs b/backend/test/ModelSpec.hs similarity index 100% rename from test/ModelSpec.hs rename to backend/test/ModelSpec.hs diff --git a/test/PandocSpec.hs b/backend/test/PandocSpec.hs similarity index 100% rename from test/PandocSpec.hs rename to backend/test/PandocSpec.hs diff --git a/test/Servant/Client/Core/BaseUrl/TestInstances.hs b/backend/test/Servant/Client/Core/BaseUrl/TestInstances.hs similarity index 100% rename from test/Servant/Client/Core/BaseUrl/TestInstances.hs rename to backend/test/Servant/Client/Core/BaseUrl/TestInstances.hs diff --git a/test/ServantApi/ExternalApis/TypeSpec.hs b/backend/test/ServantApi/ExternalApis/TypeSpec.hs similarity index 100% rename from test/ServantApi/ExternalApis/TypeSpec.hs rename to backend/test/ServantApi/ExternalApis/TypeSpec.hs diff --git a/test/ServantApi/ExternalApisSpec.hs b/backend/test/ServantApi/ExternalApisSpec.hs similarity index 100% rename from test/ServantApi/ExternalApisSpec.hs rename to backend/test/ServantApi/ExternalApisSpec.hs diff --git a/test/ServantApiSpec.hs b/backend/test/ServantApiSpec.hs similarity index 100% rename from test/ServantApiSpec.hs rename to backend/test/ServantApiSpec.hs diff --git a/test/Test/QuickCheck/Classes/Binary.hs b/backend/test/Test/QuickCheck/Classes/Binary.hs similarity index 100% rename from test/Test/QuickCheck/Classes/Binary.hs rename to backend/test/Test/QuickCheck/Classes/Binary.hs diff --git a/test/Test/QuickCheck/Classes/Csv.hs b/backend/test/Test/QuickCheck/Classes/Csv.hs similarity index 100% rename from test/Test/QuickCheck/Classes/Csv.hs rename to backend/test/Test/QuickCheck/Classes/Csv.hs diff --git a/test/Test/QuickCheck/Classes/Hashable.hs b/backend/test/Test/QuickCheck/Classes/Hashable.hs similarity index 100% rename from test/Test/QuickCheck/Classes/Hashable.hs rename to backend/test/Test/QuickCheck/Classes/Hashable.hs diff --git a/test/Test/QuickCheck/Classes/HttpApiData.hs b/backend/test/Test/QuickCheck/Classes/HttpApiData.hs similarity index 100% rename from test/Test/QuickCheck/Classes/HttpApiData.hs rename to backend/test/Test/QuickCheck/Classes/HttpApiData.hs diff --git a/test/Test/QuickCheck/Classes/JSON.hs b/backend/test/Test/QuickCheck/Classes/JSON.hs similarity index 100% rename from test/Test/QuickCheck/Classes/JSON.hs rename to backend/test/Test/QuickCheck/Classes/JSON.hs diff --git a/test/Test/QuickCheck/Classes/PathPiece.hs b/backend/test/Test/QuickCheck/Classes/PathPiece.hs similarity index 100% rename from test/Test/QuickCheck/Classes/PathPiece.hs rename to backend/test/Test/QuickCheck/Classes/PathPiece.hs diff --git a/test/Test/QuickCheck/Classes/PersistField.hs b/backend/test/Test/QuickCheck/Classes/PersistField.hs similarity index 100% rename from test/Test/QuickCheck/Classes/PersistField.hs rename to backend/test/Test/QuickCheck/Classes/PersistField.hs diff --git a/test/Test/QuickCheck/Classes/Universe.hs b/backend/test/Test/QuickCheck/Classes/Universe.hs similarity index 100% rename from test/Test/QuickCheck/Classes/Universe.hs rename to backend/test/Test/QuickCheck/Classes/Universe.hs diff --git a/test/TestImport.hs b/backend/test/TestImport.hs similarity index 100% rename from test/TestImport.hs rename to backend/test/TestImport.hs diff --git a/test/TestInstances.hs b/backend/test/TestInstances.hs similarity index 100% rename from test/TestInstances.hs rename to backend/test/TestInstances.hs diff --git a/test/Text/Blaze/TestInstances.hs b/backend/test/Text/Blaze/TestInstances.hs similarity index 100% rename from test/Text/Blaze/TestInstances.hs rename to backend/test/Text/Blaze/TestInstances.hs diff --git a/test/User.hs b/backend/test/User.hs similarity index 100% rename from test/User.hs rename to backend/test/User.hs diff --git a/test/Utils/CsvSpec.hs b/backend/test/Utils/CsvSpec.hs similarity index 100% rename from test/Utils/CsvSpec.hs rename to backend/test/Utils/CsvSpec.hs diff --git a/test/Utils/DateTimeSpec.hs b/backend/test/Utils/DateTimeSpec.hs similarity index 100% rename from test/Utils/DateTimeSpec.hs rename to backend/test/Utils/DateTimeSpec.hs diff --git a/test/Utils/I18nSpec.hs b/backend/test/Utils/I18nSpec.hs similarity index 100% rename from test/Utils/I18nSpec.hs rename to backend/test/Utils/I18nSpec.hs diff --git a/test/Utils/PathPieceSpec.hs b/backend/test/Utils/PathPieceSpec.hs similarity index 100% rename from test/Utils/PathPieceSpec.hs rename to backend/test/Utils/PathPieceSpec.hs diff --git a/test/Utils/TypesSpec.hs b/backend/test/Utils/TypesSpec.hs similarity index 100% rename from test/Utils/TypesSpec.hs rename to backend/test/Utils/TypesSpec.hs diff --git a/test/UtilsSpec.hs b/backend/test/UtilsSpec.hs similarity index 100% rename from test/UtilsSpec.hs rename to backend/test/UtilsSpec.hs diff --git a/testdata/AbgabeH10-1.hs b/backend/testdata/AbgabeH10-1.hs similarity index 100% rename from testdata/AbgabeH10-1.hs rename to backend/testdata/AbgabeH10-1.hs diff --git a/testdata/H10-2.hs b/backend/testdata/H10-2.hs similarity index 100% rename from testdata/H10-2.hs rename to backend/testdata/H10-2.hs diff --git a/testdata/H10-3.hs b/backend/testdata/H10-3.hs similarity index 100% rename from testdata/H10-3.hs rename to backend/testdata/H10-3.hs diff --git a/testdata/ProMo_Uebung10.pdf b/backend/testdata/ProMo_Uebung10.pdf similarity index 100% rename from testdata/ProMo_Uebung10.pdf rename to backend/testdata/ProMo_Uebung10.pdf diff --git a/testdata/ProMo_Uebung10.pdf.license b/backend/testdata/ProMo_Uebung10.pdf.license similarity index 100% rename from testdata/ProMo_Uebung10.pdf.license rename to backend/testdata/ProMo_Uebung10.pdf.license diff --git a/testdata/avs_json.hs b/backend/testdata/avs_json.hs similarity index 100% rename from testdata/avs_json.hs rename to backend/testdata/avs_json.hs diff --git a/testdata/fradrive_f_results_2022051910.csv b/backend/testdata/fradrive_f_results_2022051910.csv similarity index 100% rename from testdata/fradrive_f_results_2022051910.csv rename to backend/testdata/fradrive_f_results_2022051910.csv diff --git a/testdata/fradrive_f_results_2022051910.csv.license b/backend/testdata/fradrive_f_results_2022051910.csv.license similarity index 100% rename from testdata/fradrive_f_results_2022051910.csv.license rename to backend/testdata/fradrive_f_results_2022051910.csv.license diff --git a/testdata/test.pdf b/backend/testdata/test.pdf similarity index 100% rename from testdata/test.pdf rename to backend/testdata/test.pdf diff --git a/testdata/test.pdf.license b/backend/testdata/test.pdf.license similarity index 100% rename from testdata/test.pdf.license rename to backend/testdata/test.pdf.license diff --git a/testdata/test_letters.hs b/backend/testdata/test_letters.hs similarity index 100% rename from testdata/test_letters.hs rename to backend/testdata/test_letters.hs diff --git a/testdata/test_results.csv b/backend/testdata/test_results.csv similarity index 100% rename from testdata/test_results.csv rename to backend/testdata/test_results.csv diff --git a/testdata/test_results.csv.license b/backend/testdata/test_results.csv.license similarity index 100% rename from testdata/test_results.csv.license rename to backend/testdata/test_results.csv.license diff --git a/translate.hs b/backend/translate.hs similarity index 100% rename from translate.hs rename to backend/translate.hs diff --git a/compose.yaml b/compose.yaml index 6f542990d..0ab141b0d 100644 --- a/compose.yaml +++ b/compose.yaml @@ -4,22 +4,27 @@ services: context: ./frontend dockerfile: ./Dockerfile environment: - - PROJECT_DIR=/fradrive/frontend + - PROJECT_DIR=/fradrive volumes: - - type: bind - source: ./Makefile - target: /fradrive/Makefile - type: bind source: ./frontend - target: /fradrive/frontend + target: /fradrive + - ./assets:/fradrive/assets:rw + - ./static:/fradrive/static:rw + - ./well-known:/fradrive/well-known:rw backend: # image: registry.uniworx.de/fradrive/fradrive/backend # pull_policy: if_not_present build: - dockerfile: ./docker/backend/Dockerfile - context: ./ - volumes: [] + context: ./backend + dockerfile: ./Dockerfile + userns_mode: host + volumes: + - ./backend:/fradrive + - ./assets:/fradrive/assets:ro + - ./static:/fradrive/static:ro + - ./well-known:/fradrive/well-known:ro depends_on: - frontend - postgres @@ -30,20 +35,26 @@ services: - "3000:3000" # dev http - "3443:3443" # dev https - "8081:8081" # hoogle - links: - - postgres - - memcached - - minio - - maildev + # links: + # - postgres + # - memcached + # - minio + # - maildev stdin_open: true + network_mode: host postgres: image: docker.io/library/postgres:12 pull_policy: if_not_present - build: ./docker/database ports: - "5432:5432" - # privileged: true + environment: + - POSTGRES_HOST_AUTH_METHOD=trust + volumes: + - ./docker/postgres/pg_hba.conf:/tmp/pg_hba.conf:ro + - ./docker/postgres/postgresql.conf:/tmp/postgresql.conf:ro + - ./docker/postgres/pgconfig.sh:/docker-entrypoint-initdb.d/_pgconfig.sh:ro + - ./docker/postgres/schema.sql:/docker-entrypoint-initdb.d/schema.sql:ro memcached: image: docker.io/library/memcached:latest @@ -54,6 +65,7 @@ services: minio: image: docker.io/minio/minio:latest pull_policy: if_not_present + command: server `mktemp` ports: - "9000:9000" @@ -61,4 +73,4 @@ services: image: docker.io/maildev/maildev:latest pull_policy: if_not_present ports: - - "1025:1025" \ No newline at end of file + - "1025-1026:1025" \ No newline at end of file diff --git a/docker/postgres/initdb.sh b/docker/postgres/initdb.sh deleted file mode 100644 index ec081483c..000000000 --- a/docker/postgres/initdb.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -# Init and start the postgres daemon -initdb --no-locale -pg_ctl start -w -o "-c listen_addresses='*' -c unix_socket_permissions=0700 -c max_connections=9990 -c shared_preload_libraries=pg_stat_statements -c session_preload_libraries=auto_explain -c auto_explain.log_min_duration=100ms" -POSTGRID=`cat /var/lib/postgresql/data/postmaster.pid | perl -le '<>=~m#(\d+)# and print $1'` - -# Create uniworx and uniworx_test database -psql -f /schema.sql postgres - -# Wait for postgres daemon to terminate -while [ -e /proc/$POSTGRID ]; do - sleep 0.5; -done \ No newline at end of file diff --git a/docker/postgres/pg_hba.conf b/docker/postgres/pg_hba.conf deleted file mode 100644 index b826e433d..000000000 --- a/docker/postgres/pg_hba.conf +++ /dev/null @@ -1,3 +0,0 @@ -local all all trust -host all all 0.0.0.0/0 trust -host all all ::1/128 trust \ No newline at end of file diff --git a/docker/postgres/pgconfig.sh b/docker/postgres/pgconfig.sh deleted file mode 100755 index fbed96fe0..000000000 --- a/docker/postgres/pgconfig.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -cat /tmp/pg_hba.conf > /var/lib/postgresql/data/pg_hba.conf -cat /tmp/postgresql.conf > /var/lib/postgresql/data/postgresql.conf - -echo "Custom pg_hba.conf and postgresql.conf successfully deployed." \ No newline at end of file diff --git a/docker/postgres/postgresql.conf b/docker/postgres/postgresql.conf deleted file mode 100644 index a2f917845..000000000 --- a/docker/postgres/postgresql.conf +++ /dev/null @@ -1,6 +0,0 @@ -listen_addresses='*' -unix_socket_permissions=0700 -max_connections=9990 -shared_preload_libraries=pg_stat_statements -session_preload_libraries=auto_explain -auto_explain.log_min_duration=100ms \ No newline at end of file diff --git a/docker/postgres/schema.sql b/docker/postgres/schema.sql deleted file mode 100644 index 9eb024aca..000000000 --- a/docker/postgres/schema.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE USER uniworx WITH SUPERUSER PASSWORD 'uniworx'; -CREATE DATABASE uniworx_test; -GRANT ALL ON DATABASE uniworx_test TO uniworx; -CREATE DATABASE uniworx; -GRANT ALL ON DATABASE uniworx TO uniworx; \ No newline at end of file diff --git a/frontend/src/icons.scss b/frontend/src/icons.scss index 43bdd8b3d..0ae54d5b4 100644 --- a/frontend/src/icons.scss +++ b/frontend/src/icons.scss @@ -103,7 +103,7 @@ $icons: new, @each $name in $icons { .ico-#{$name} { - background-image: url('/fradrive/frontend/assets/icons/fradrive/#{$name}.svg'); + background-image: url('/fradrive/assets/icons/fradrive/#{$name}.svg'); background-size: contain; background-repeat: no-repeat; background-position: center; diff --git a/utils/develop-status.pl b/utils/develop-status.pl deleted file mode 100755 index 9e19ad3c1..000000000 --- a/utils/develop-status.pl +++ /dev/null @@ -1,200 +0,0 @@ -#!/usr/bin/env perl - -use strict; -use warnings; - -my $develop = 'develop'; -my $runner = 'podman'; - -if($ENV{PWD}=~m#/utils$#) { - chdir(".."); -} - -my %listOutside=( - running=>1, - _default=>0, # everything for which no key exists -); - -for my $arg(@ARGV) { - if('-a' eq $arg) { - %listOutside=(_default=>1); - next - } - if('-h' eq $arg) { - usage() - } - usage("Invalid argument: '$arg'"); -} - -sub usage { - my $msg = shift; - print "$msg\n\n" if $msg; - print "$0 [args] - - -h display this help text - - -a show all containers with fitting names even when without containerfile -"; - exit 1 if $msg; - exit 0 -} - -print "== Development status ==\n"; - -# Find out container status -#my @cont = split /\R/, qx($runner ps --no-trunc); -#shift @cont; # remove title row -# -#my %cont = (); -#for(@cont) { -# m#^([0-9a-f]+)\s# || do { warn "cannot parse output of container runner ($_); status incomplete!"; next }; -# $cont{$1} = 1; -#} - -my @cont = split /\R/, qx($runner ps -a --no-trunc -f name='^fradrive.' --format='{{.State}} ::: {{.ID}} ::: {{.Names}}'); -my %cont = (); -for(@cont) { - m#(.*) ::: (.*) ::: (.*)# || next; - $cont{$2} = { - state=>$1, - id=>$2, - name=>$3, - used=>0, - } -} - - -if(not -e $develop) { - print "No develop directory, seems to be nothing active.\n"; - exit -} - -my @devs = filesFromDir($develop, - [ - qr((?:^\.)), - [qr((?:[0-9]{4}-[0-9]{2}-[0-9]{2}T)), 1, "File '%fn' does not look like a development dir, skip"], - ]); - -#my $devDir = undef; -#opendir($devDir, "$develop") or die "Cannot open develop directory, because: $!"; -#while(my $devStamp = readdir($devDir)) { -# next if $devStamp=~m#^\.#; -# print "+ Development $devStamp found\n"; -# if($devStamp!~m#[0-9]{4}-[0-9]{2}-[0-9]{2}T#) { -# warn "$0: Does not look like a development dir, skip" -# } -# devdirInfo($devStamp, "$develop/$devStamp") -#} - -for my $k(sort { - $cont{$a}{state} cmp $cont{$b}{state} || - $cont{$a}{name} cmp $cont{$b}{name} -} grep { !$cont{$_}{used} } keys %cont) { - my $c = $cont{$k}; - my $show = $listOutside{$c->{state}} // $listOutside{_default}; - print "Fradrive container outside develop file: ($c->{state}) $c->{name} $c->{id}\n" if $show -} - -for my $devStamp(@devs) { - print "+ Development $devStamp found\n"; - devdirInfo($devStamp, "$develop/$devStamp") -} - -exit 0; - -sub devdirInfo { - my ($name, $path) = @_; - my @fns = filesFromDir($path, [qr((?:^\.))]); - for my $fn(@fns) { - print " + Containerfile $fn found\n"; - checkContainerFile("$path/$fn"); - } -} - -sub checkContainerFile { - my $fn = shift; - my $fh = undef; - my %h = (); - open($fh, '<', $fn) or do { - warn "$0: Can not read $fn, because: $!\n"; - return - }; - for(<$fh>) { - next if m#^\s*$#; - m#(.*)=(.*)# or do { warn "$0: Bad row in containerfile '$fn': $_" }; - my ($k, $v) = ($1, $2); - if(exists $h{$k}) { - warn "$0: In containerfile '$fn': Key '$k' is set multiple times!\n" - } - $h{$k} = $v; - } - print " $_=$h{$_}\n" for sort keys %h; - my $id = $h{CONTAINER_ID}; - $cont{$id}{used} = 1; - if(not defined $id) { - warn "$0: In containerfile '$fn': No CONTAINER_ID set\n"; - return - } - my $stateLine = qx($runner container inspect -f='{{.State.Status}} ::: {{.Name}}' "$id"); - if($stateLine=~m#^(.*?) ::: (.*)$#) { - # print " Container is running\n" - my ($state, $name) = ($1, $2); - print " Containername: $name\n"; - if('running' eq $state) { - print " Container is running\n"; - } else { - print " !!! Container is not running but instead in state '$state'\n"; - } - } else { - print " !!! Container is not in the memory anymore !!!\n"; - print "STATE: $stateLine\n" - } - #if($cont{$id}) { - # print " Container is running\n" - #} else { - # print " !!! Container is NOT running\n" - #} - #$RUNNER ps --no-trunc -} - -#my @find = split /\R/, qx(find $develop); -# -# -#print "FIND\n"; -#print " --- $_\n" for @find; -#print "CONT\n"; -#print " --- $_\n" for @cont; - -#print "CONT $_\n" for sort keys %cont; - - -sub filesFromDir { - my ($path, $exclude) = @_; - my $dirh = undef; - my @ret = (); - my @warn = (); - opendir($dirh, $path); - DIR: while(my $fn = readdir($dirh)) { - for(@$exclude) { - my ($re, $negate, $msg) = ($_); - ($re, $negate, $msg) = @$_ if 'ARRAY' eq ref $_; - if($negate xor $fn=~m#$re#) { - if(defined $msg) { - $msg=~s#%fn#$fn#; - push @warn, [$fn, $msg] - } - next DIR - } - } - push @ret, $fn - } - @ret = sort @ret; - @warn = sort {$a->[0] cmp $b->[0]} @warn; - for(@warn) { - warn "$0: $_\n"; - } - return @ret -} - - -