diff --git a/README.md b/README.md
index 53849d4..809e5f7 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,3 @@
-TODO: 
+A CMS based on symfony
 
-Make user work
-make quotes work
\ No newline at end of file
+WIP
\ No newline at end of file
diff --git a/TODO b/TODO
index b663457..7d3b7fd 100644
--- a/TODO
+++ b/TODO
@@ -1,10 +1,9 @@
 accent color #d43934
 
-merge RequestController/SecurityController
-don't use html in easyadmin / quotes
+add dates and author to pages
+
 use turbo
 make unit tests
 
 
-- harden Api-Platform
 
diff --git a/assets/app.js b/assets/app.js
index bb0a6aa..48617e4 100644
--- a/assets/app.js
+++ b/assets/app.js
@@ -6,7 +6,26 @@
  */
 
 // any CSS you import will output into a single css file (app.css in this case)
-import './styles/app.css';
+import 'fork-awesome/scss/fork-awesome.scss'
+import './styles/app.scss'
+import $ from 'jquery'
+import 'bootstrap'
+//import './js/index'
+// needed for legacy code
+//global.$ = $
 
+if (window.matchMedia('(prefers-color-scheme)').media !== 'not all') {
+	console.log('🎉 Dark mode is supported')
+}
+
+$(document).ready(() => {
+	console.log('ready')
+	$('#toggleSidebar').on('click', () => {
+		const toggleIcon = $('#toggleIcon')
+		toggleIcon.toggleClass('fa fa-lg fa-fw fa-caret-square-o-left')
+		toggleIcon.toggleClass('fa fa-lg fa-fw fa-caret-square-o-right')
+		$('#sidebar').toggleClass('active')
+	})
+})
 // start the Stimulus application
-import './bootstrap';
+//import './bootstrap'
diff --git a/assets/bootstrap.js b/assets/bootstrap.js
index 4ab2df6..8baa386 100644
--- a/assets/bootstrap.js
+++ b/assets/bootstrap.js
@@ -1,11 +1,11 @@
-import { startStimulusApp } from '@symfony/stimulus-bridge';
+import {startStimulusApp} from '@symfony/stimulus-bridge'
 
 // Registers Stimulus controllers from controllers.json and in the controllers/ directory
 export const app = startStimulusApp(require.context(
     '@symfony/stimulus-bridge/lazy-controller-loader!./controllers',
     true,
     /\.[jt]sx?$/
-));
+))
 
 // register any custom, 3rd party controllers here
 // app.register('some_controller_name', SomeImportedController);
diff --git a/assets/js/index.js b/assets/js/index.js
index 0956617..ac45951 100644
--- a/assets/js/index.js
+++ b/assets/js/index.js
@@ -1,17 +1,2 @@
 // assets/js/index.js
 
-import '../styles/app.scss'
-import 'fork-awesome/scss/fork-awesome.scss'
-
-require('bootstrap')
-import 'bootswatch/dist/slate/bootstrap.min.css'
-
-$(document).ready(function () {
-    console.log('ready')
-    $('#toggleSidebar').on('click', function () {
-        let toggleIcon = $('#toggleIcon')
-        toggleIcon.toggleClass('fa fa-lg fa-fw fa-caret-square-o-left')
-        toggleIcon.toggleClass('fa fa-lg fa-fw fa-caret-square-o-right')
-        $('#sidebar').toggleClass('active')
-    })
-})
diff --git a/assets/styles/app.scss b/assets/styles/app.scss
index da8b002..bf78d99 100644
--- a/assets/styles/app.scss
+++ b/assets/styles/app.scss
@@ -14,6 +14,15 @@
   //border: 1px solid gray;
 }
 
+// customize some Bootstrap variables
+$primary: #FF8040;
+$jet-black: #0e0e10;
+
+//$body-bg: red;
+$body-color: #8f8f8f;
+
+@import 'bootstrap-dark-5/dist/css/bootstrap-night.min.css';
+
 
 html, body {
   margin: 0;
@@ -23,10 +32,6 @@ html, body {
 }
 
 
-// customize some Bootstrap variables
-$primary: #FF8040;
-$jet-black: #0e0e10;
-//@import "bootstrap/scss/bootstrap";
 
 ///
 
@@ -40,6 +45,7 @@ $jet-black: #0e0e10;
   white-space: nowrap;
   overflow: hidden;
   float: left;
+  background-color: $jet-black;
   transition: min-width 0.5s, max-width 0.5s;
 }
 
@@ -57,7 +63,7 @@ $jet-black: #0e0e10;
 
 #main_content {
   overflow-y: auto;
-  height: calc(100vh - 160px)
+  height: calc(100vh - 180px); // 74px header, 64px header
 }
 
 .form-signin {
@@ -96,3 +102,13 @@ $jet-black: #0e0e10;
   margin-bottom: 10px;
   border-radius: 0 0 0.375rem 0.375rem;
 }
+
+.quote-box {
+  border-left: 1px solid #ff8844;
+  color: #ff8844;
+}
+
+.project-image {
+  width: 200px;
+  margin: 15px;
+}
\ No newline at end of file
diff --git a/package.json b/package.json
index 0e0ac3e..129362e 100644
--- a/package.json
+++ b/package.json
@@ -31,6 +31,7 @@
         "@typescript-eslint/eslint-plugin-tslint": "^5.26.0",
         "axios": "^0.27.1",
         "bootstrap": "^5.2.2",
+        "bootstrap-dark-5": "^1.1.3",
         "bootswatch": "^5.2.2",
         "eslint": "^8.15.0",
         "eslint-config-airbnb-base": "^15.0.0",
diff --git a/src/Controller/Admin/DashboardController.php b/src/Controller/Admin/DashboardController.php
index 2f00865..b50af3f 100644
--- a/src/Controller/Admin/DashboardController.php
+++ b/src/Controller/Admin/DashboardController.php
@@ -52,7 +52,7 @@ class DashboardController extends AbstractDashboardController
         }
 
         return parent::configureUserMenu(user: $user)
-            ->setAvatarUrl(url: 'build/images/'.$user->getAvatar());
+            ->setAvatarUrl(url: 'uploads/avatars/' . $user->getAvatar());
     }
 
     public function configureActions(): Actions
diff --git a/src/Controller/Admin/PagesCrudController.php b/src/Controller/Admin/PagesCrudController.php
index 36a8d1d..8aad8fb 100644
--- a/src/Controller/Admin/PagesCrudController.php
+++ b/src/Controller/Admin/PagesCrudController.php
@@ -8,6 +8,7 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
 use EasyCorp\Bundle\EasyAdminBundle\Field\CodeEditorField;
 use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
 use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
+use EasyCorp\Bundle\EasyAdminBundle\Field\TextEditorField;
 use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
 
 class PagesCrudController extends AbstractCrudController
@@ -24,7 +25,7 @@ class PagesCrudController extends AbstractCrudController
         yield TextField::new(propertyName: 'name');
         yield AssociationField::new(propertyName: 'owner');
         //		yield CodeEditorField::new(propertyName: 'content')
-        yield TextareaField::new(propertyName: 'content')
+        yield TextEditorField::new(propertyName: 'content')
             ->onlyOnForms();
     }
 }
diff --git a/src/Controller/Admin/QuotesCrudController.php b/src/Controller/Admin/QuotesCrudController.php
index d371584..db59240 100644
--- a/src/Controller/Admin/QuotesCrudController.php
+++ b/src/Controller/Admin/QuotesCrudController.php
@@ -5,7 +5,7 @@ namespace App\Controller\Admin;
 use App\Entity\Quotes;
 use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
 use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
-use EasyCorp\Bundle\EasyAdminBundle\Field\TextEditorField;
+use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
 use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
 
 class QuotesCrudController extends AbstractCrudController
@@ -21,7 +21,7 @@ class QuotesCrudController extends AbstractCrudController
             ->onlyOnIndex();
         yield TextField::new(propertyName: 'quote')
             ->onlyOnIndex();
-        yield TextEditorField::new(propertyName: 'quote')
+        yield TextAreaField::new(propertyName: 'quote')
             ->onlyOnForms();
     }
 }
diff --git a/src/Controller/Admin/UserCrudController.php b/src/Controller/Admin/UserCrudController.php
index 75e0c3c..4efae24 100644
--- a/src/Controller/Admin/UserCrudController.php
+++ b/src/Controller/Admin/UserCrudController.php
@@ -27,7 +27,7 @@ class UserCrudController extends AbstractCrudController
         yield ImageField::new(propertyName: 'avatar')
             ->setBasePath(path: 'uploads/avatars')
             ->setUploadDir(uploadDirPath: 'public/uploads/avatars')
-            ->setUploadedFileNamePattern(patternOrCallable: '[timestamp]-[slug].[extension]');
+            ->setUploadedFileNamePattern(patternOrCallable: '[slug]-[timestamp].[extension]');
         $roles = ['ROLE_FOUNDER', 'ROLE_ADMIN', 'ROLE_MODERATOR', 'ROLE_USER'];
         yield ChoiceField::new(propertyName: 'roles')
             ->setChoices(choiceGenerator: array_combine(keys: $roles, values: $roles))
diff --git a/src/Controller/FrontendController.php b/src/Controller/FrontendController.php
index 50f07f8..9064422 100644
--- a/src/Controller/FrontendController.php
+++ b/src/Controller/FrontendController.php
@@ -23,7 +23,7 @@ class FrontendController extends AbstractController
 
         return $this->render(view: '@default/base.html.twig', parameters: [
 	        'user' => $user,
-	        'quote' => json_encode(value: $quote->getQuote())
+	        'quote' => $quote->getQuote()
         ]);
     }
 }
diff --git a/src/Controller/PagesController.php b/src/Controller/PagesController.php
index 6638c81..bab1948 100644
--- a/src/Controller/PagesController.php
+++ b/src/Controller/PagesController.php
@@ -4,39 +4,37 @@ namespace App\Controller;
 
 use App\Entity\Pages;
 use App\Repository\PagesRepository;
+use App\Repository\UserRepository;
 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\Routing\Annotation\Route;
 
 class PagesController extends AbstractController
 {
-    #[Route(path: '/pages/{name}', name: 'pages_display')]
-    public function display(PagesRepository $pagesRepository, string $name): Response
+    #[Route(path: '/pages/{slug}', name: 'pages_display')]
+    public function display(PagesRepository $pagesRepository, UserRepository $userRepository, string $slug): Response
     {
         $page = $pagesRepository->findOneBy([
-            'slug' => $name,
+            'slug' => $slug,
         ]);
 
         if (!$page) {
             $page = new Pages();
             $page->setName(name: 'Not Found');
-            $page->setContent(content: 'The requested page was not found.');
+            $page->setContent(content: '404 - The requested page was not found.');
         }
 
-        return $this->render(view: '@default/pages/display.html.twig', parameters: [
-            'page' => $page,
+        dump($page);
+        dump($page->getOwner());
+        $user = $userRepository->findOneBy(['id' => $page->getOwner()->getId()]);
+        dd($user);
+
+        return $this->render(view: '@default/pages/index.html.twig', parameters: [
+            'page_name' => $page->getName(),
+            'page_content' => $page->getContent(),
+            'created_at' => $page->getCreatedAt(),
+            'modified_at' => $page->getModifiedAt(),
+            'owner' => $page->getOwner()
         ]);
     }
-
-    #[Route(path: '/imprint', name: 'app_imprint')]
-    public function imprint(): Response
-    {
-        return $this->render(view: '@default/pages/imprint.html.twig');
-    }
-
-    #[Route(path: '/privacy', name: 'app_privacy')]
-    public function privacy(): Response
-    {
-        return $this->render(view: '@default/pages/privacy.html.twig');
-    }
 }
diff --git a/src/Entity/Pages.php b/src/Entity/Pages.php
index dbff5bb..4956c17 100644
--- a/src/Entity/Pages.php
+++ b/src/Entity/Pages.php
@@ -2,56 +2,38 @@
 
 namespace App\Entity;
 
-use ApiPlatform\Core\Annotation\ApiFilter;
-use ApiPlatform\Core\Annotation\ApiResource;
-use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
 use App\Repository\PagesRepository;
 use DateTimeImmutable;
 use Doctrine\ORM\Mapping as ORM;
 use Sunrise\Slugger\Slugger;
 
 #[ORM\Entity(repositoryClass: PagesRepository::class), ORM\HasLifecycleCallbacks]
-#[ApiResource]
-#[ApiFilter(filterClass: SearchFilter::class, properties: ['slug' => 'exact'])]
 
 class Pages
 {
     #[ORM\Id]
     #[ORM\GeneratedValue]
     #[ORM\Column(type: 'integer')]
-    private $id;
+    private ?int $id;
 
     #[ORM\Column(type: 'string', length: 255)]
-    private $name;
+    private string $name;
 
     #[ORM\Column(type: 'text')]
-    private $content;
+    private string $content;
 
     #[ORM\Column(type: 'datetime_immutable')]
-    private $createdAt;
+    private ?DateTimeImmutable $createdAt;
 
     #[ORM\Column(type: 'datetime_immutable', nullable: true)]
-    private $modifiedAt;
+    private ?DateTimeImmutable $modifiedAt;
 
     #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'pages')]
     #[ORM\JoinColumn(nullable: false)]
-    private $owner;
+    private User $owner;
 
     #[ORM\Column(type: 'string', length: 255)]
-    private $slug;
-
-    /**
-     * @param $id
-     */
-
-    /*	public function __construct(String $name = '', String $content = '')
-        {
-            $this->name = $name;
-            $this->content = $content;
-            $owner = $userRepository->findOneBy(['username' => 'tracer']);
-            $this->owner = $owner;
-        }
-    */
+    private string $slug;
 
     public function getId(): ?int
     {
diff --git a/src/Entity/Quotes.php b/src/Entity/Quotes.php
index 7910b25..a1e03be 100644
--- a/src/Entity/Quotes.php
+++ b/src/Entity/Quotes.php
@@ -2,21 +2,19 @@
 
 namespace App\Entity;
 
-use ApiPlatform\Core\Annotation\ApiResource;
 use App\Repository\QuotesRepository;
 use Doctrine\ORM\Mapping as ORM;
 
 #[ORM\Entity(repositoryClass: QuotesRepository::class)]
-#[ApiResource]
 class Quotes
 {
     #[ORM\Id]
     #[ORM\GeneratedValue]
     #[ORM\Column(type: 'integer')]
-    private $id;
+    private int $id;
 
     #[ORM\Column(type: 'text')]
-    private $quote;
+    private string $quote;
 
     public function getId(): ?int
     {
diff --git a/src/Entity/User.php b/src/Entity/User.php
index e8b05fc..8540453 100644
--- a/src/Entity/User.php
+++ b/src/Entity/User.php
@@ -3,11 +3,11 @@
 namespace App\Entity;
 
 use App\Repository\UserRepository;
+use DateTime;
 use DateTimeImmutable;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
 use Doctrine\ORM\Mapping as ORM;
-use Stringable;
 use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
 use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
 use Symfony\Component\Security\Core\User\UserInterface;
@@ -15,7 +15,6 @@ use Symfony\Component\Validator\Constraints as Assert;
 
 #[ORM\Entity(repositoryClass: UserRepository::class), ORM\HasLifecycleCallbacks]
 #[UniqueEntity(fields: ['username', 'email'], message: 'There is already an account with this username or email.')]
-
 class User implements UserInterface, PasswordAuthenticatedUserInterface
 {
     #[ORM\Id]
@@ -45,22 +44,22 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
     private ?string $lastName = '';
 
     #[ORM\ManyToMany(targetEntity: Projects::class, mappedBy: 'developer')]
-    private $projects;
+    private Collection $projects;
 
     #[ORM\Column(type: 'string', length: 255, nullable: true)]
-    private string $avatar;
+    private ?string $avatar;
 
     #[ORM\OneToMany(mappedBy: 'owner', targetEntity: Pages::class)]
-    private $pages;
+    private Collection $pages;
 
     #[ORM\Column(type: 'datetime_immutable')]
-    private $createdAt;
+    private DateTimeImmutable $createdAt;
 
     #[ORM\Column(type: 'datetime_immutable', nullable: true)]
-    private $modifiedAt;
+    private DateTimeImmutable $modifiedAt;
 
     #[ORM\Column(type: 'boolean')]
-    private $isVerified = false;
+    private bool $isVerified = false;
 
     #[ORM\Column]
     private ?DateTimeImmutable $agreedTermsAt = null;
@@ -137,13 +136,6 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
         return $this;
     }
 
-    /**
-     * @see UserInterface
-     */
-    public function eraseCredentials()
-    {
-        $this->plainPassword = '';
-    }
 
     public function getEmail(): ?string
     {
@@ -157,10 +149,6 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
         return $this;
     }
 
-    public function setPlainPassword(string $plainPassword): void
-    {
-        $this->plainPassword = $plainPassword;
-    }
 
     public function getFirstName(): ?string
     {
@@ -278,14 +266,14 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
 
         return $this;
     }
-	
-	/**
-	 * @return string
-	 */
-	public function getAvatarUri()
-                            {
-                                return 'avatar';
-                            }
+
+    /**
+     * @return string
+     */
+    public function getAvatarUri(): string
+    {
+        return 'avatar';
+    }
 
     #[ORM\PrePersist]
     public function onPrePersist(): void
@@ -322,4 +310,9 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
 
         return $this;
     }
+
+    public function eraseCredentials()
+    {
+        // TODO: Implement eraseCredentials() method.
+    }
 }
diff --git a/src/Repository/PagesRepository.php b/src/Repository/PagesRepository.php
index 933342f..db741c6 100644
--- a/src/Repository/PagesRepository.php
+++ b/src/Repository/PagesRepository.php
@@ -23,7 +23,7 @@ class PagesRepository extends ServiceEntityRepository
 
     public function add(Pages $entity, bool $flush = true): void
     {
-        $this->_em->persist($entity);
+        $this->_em->persist(entity: $entity);
         if ($flush) {
             $this->_em->flush();
         }
@@ -31,7 +31,7 @@ class PagesRepository extends ServiceEntityRepository
 
     public function remove(Pages $entity, bool $flush = true): void
     {
-        $this->_em->remove($entity);
+        $this->_em->remove(entity: $entity);
         if ($flush) {
             $this->_em->flush();
         }
diff --git a/templates/themes/default/_footer.html.twig b/templates/themes/default/_footer.html.twig
index b1cc8e1..a7208df 100644
--- a/templates/themes/default/_footer.html.twig
+++ b/templates/themes/default/_footer.html.twig
@@ -1,12 +1,14 @@
 <footer class="footer">
     <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-bottom navbar-bottom">
         <div class="d-flex justify-content-xl-around">
-            <div>powered by
-                <a href="#"><img src="{{ asset('build/images/Spookie/spookie_64x64.png') }}" alt="Spookie"></a>
+            <div class="ms-5">powered by
+                <a href="#">
+                    <img class="mx-1" src="{{ asset('build/images/Spookie/spookie_64x64.png') }}" alt="Spookie">
+                </a>
             </div>
             <div id="legal">
-                <a href="{{  path('app_imprint') }}">Imprint</a>
-                <a href="{{  path('app_privacy') }}">Privacy Policy</a>
+                <a href="{{ path('pages_display', { 'slug': 'imprint' }) }}">Imprint</a>
+                <a href="{{ path('pages_display', { 'slug': 'privacy' }) }}">Privacy Policy</a>
             </div>
         </div>
     </nav>
diff --git a/templates/themes/default/base.html.twig b/templates/themes/default/base.html.twig
index 3d6e4c6..745287b 100644
--- a/templates/themes/default/base.html.twig
+++ b/templates/themes/default/base.html.twig
@@ -82,14 +82,14 @@
         </div>
     {% endfor %}
 
+
     <div class="col m-3" id="main_content">
         {% block body %}
-            <h1 class="q-title-show">Quote of the Moment</h1>
-            <div class="q-display p-3">
-                {#  <i class="fa fa-quote-left"></i> #}
-                <p class="d-inline">
-                    {{ quote | raw }}
-                </p>
+
+            <h1 class="title-show">Quote of the Moment</h1>
+            <div class="quote-box p-3">
+                <i class="fa fa-quote-left"></i><br>
+                {{ quote | raw | nl2br }}
             </div>
         {% endblock %}
     </div>
diff --git a/templates/themes/default/pages/imprint.html.twig b/templates/themes/default/pages/imprint.html.twig
deleted file mode 100644
index a957045..0000000
--- a/templates/themes/default/pages/imprint.html.twig
+++ /dev/null
@@ -1,23 +0,0 @@
-{% extends '@default/base.html.twig' %}
-
-{% block title %}Imprint{% endblock %}
-
-{% block body %}
-    <div class="imprint-wrapper">
-        <h2>This page is only available in German, as the server is located in Germany.</h2>
-
-
-        <p>Inhaltlich Verantwortlicher gemäß § 55 Abs. 2RStV:<br><br>
-            Michael Espey<br>
-            Große Kirchreihe 27<br>
-            25377 Kollmar</p>
-
-        <p>eMail: webmaster (AT) 24unix.net</p>
-
-        <p>Für den Inhalt des Internetauftritts ist allein der Inhaber zuständig. Der Inhaber bemüht sich, sein Internetangebot aktuell, korrekt und vollständig zu halten. Dessen ungeachtet kann eine Garantie für die Vollständigkeit, Richtigkeit und letzte Aktualität der Angaben nicht übernommen werden. Daher kann der Inhaber keinerlei Verantwortung oder Haftung weder auf den redaktionellen Inhalt noch für die angebotenen Leistungen auf dieser Website übernehmen. Bei den bereitgestellten Informationen handelt es sich um solche allgemeiner Art, die nicht auf die Bedürfnisse bestimmter Personen oder Unternehmen zugeschnitten sind. Insbesondere soll durch sie keine rechtliche Beratung erfolgen. Trotz sorgfältiger inhaltlicher Kontrolle übernehme ich keine Haftung für die Inhalte externer Links. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich.</p>
-
-
-        <p>Umsatzsteuer-Identifikationsnummer gemäß § 27a Umsatzsteuergesetz: DE245057708</p>
-
-    </div>
-{% endblock %}
\ No newline at end of file
diff --git a/templates/themes/default/pages/index.html.twig b/templates/themes/default/pages/index.html.twig
new file mode 100644
index 0000000..fd8f47d
--- /dev/null
+++ b/templates/themes/default/pages/index.html.twig
@@ -0,0 +1,9 @@
+{% extends '@default/base.html.twig' %}
+
+{% block title %}page_name{% endblock %}
+
+{% block body %}
+    {{ page_content | raw }}
+    <br>
+    Page created by: {{ owner }} at {{ created_at }}
+{% endblock %}
\ No newline at end of file
diff --git a/templates/themes/default/pages/privacy.html.twig b/templates/themes/default/pages/privacy.html.twig
deleted file mode 100644
index a485919..0000000
--- a/templates/themes/default/pages/privacy.html.twig
+++ /dev/null
@@ -1,289 +0,0 @@
-{% extends '@default/base.html.twig' %}
-
-{% block title %}Privacy{% endblock %}
-
-{% block body %}
-    <p class="privacy-wrapper">
-    <h2>This page is only available in German, as the server is located in Germany.</h2>
-
-    <p style="text-align:left;">Der Betreiber der Internetseite 24unix.net nimmt den Schutz Deiner persönlichen Daten
-        sehr ernst.
-        Er behandelt Deine Daten vertraulich und entsprechend der gesetzlichen Datenschutzvorschriften sowie dieser
-        Datenschutzerklärung.
-        Die Kontaktdaten des Ansprechpartners kannst Du dem Impressum entnehmen.
-        Zusätzlich stehen Dir die Administratoren gerne unter webmaster@24unix.net zur Verfügung.<p>
-
-
-    <b>Behandlung personenbezogener Daten</b>
-
-    <p style="text-align:left;">Die Nutzung von 24unix.net zum Lesen und Suchen ist ohne Angabe von personenbezogenen
-        Daten möglich.
-        Die Nutzung der Angebote zur Diskussion (z.B. Schreiben von Beiträgen, private Nachrichten empfangen und
-        verfassen) benötigt eine vorherige Registrierung.
-        Die im Zuge dieser Registrierung eingegebenen Daten, die aus der Eingabemaske des Registrierungsformulars
-        ersichtlich sind, umfassen u.a. E-Mailadresse, Benutzername (Nutzung eines Pseudonyms möglich) und Passwort.
-        Diese Daten werden ausschließlich für die Verwendung des Angebots seitens 24unix.net erhoben und gespeichert.
-        Mit der Registrierung werden zudem das Datum sowie die Uhrzeit der Registrierung gespeichert.
-        Dies dient dem Fall, dass ein Dritter deine Daten missbraucht und sich mit diesen Daten ohne dein Wissen auf
-        24unix.net registriert sowie zur Absicherung des Betreibers.
-        Zugriff auf deine Registrierungsdaten haben ausschließlich der Betreiber (siehe Impressum) sowie die berufenen
-        Forenadministratoren (siehe Admin-Team).
-        Alle diese Parteien sind dieser Datenschutzrichtlinie verpflichtet. Eine Weitergabe deiner Daten an Dritte
-        erfolgt nicht.
-        Ein Abgleich der so erhobenen Daten mit Daten, die möglicherweise durch andere Komponenten (z.B. in
-        Server-Log-Dateien) erhoben werden, erfolgt ebenfalls nicht.
-        24unix.net anonymisiert sämtliche IP-Adressen seiner Nutzer automatisch nach drei Wochen.
-        Der Betreiber weist darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail)
-        Sicherheitslücken aufweist.
-        Einen lückenlosen Schutz deiner Daten vor dem Zugriff durch Dritte kann der Betreiber daher nicht
-        gewährleisten.</p>
-
-
-    <b>Speicherung des Passworts</b>
-
-    <p style="text-align:left">Dein Passwort wird mit einer Einwegeverschlüsselung (Hash) gespeichert, sodass der
-        originale Inhalt nicht rekonstruiert werden kann.
-        Jedoch ist zu empfehlen, dieses Passwort nicht auf einer Vielzahl von Webseiten zu verwenden.
-        Insbesondere wird dich kein Vertreter seitens 24unix.net (Betreiber oder Administratoren) nach deinem Passwort
-        fragen.
-        Solltest du dein Passwort vergessen haben, so nutze die Funktion „Ich habe mein Passwort vergessen“.
-        Die Forensoftware fragt dich daraufhin nach deinem Benutzernamen sowie eMailadresse und sendet anschließend ein
-        neu generiertes Passwort an deine hinterlegte Adresse.</p>
-
-
-    <b>Hinweis zur TLS-Verschlüsselung</b>
-
-    <p style="text-align:left">24unix.net wird über das Secure-http-Protokoll ausgeliefert. Diese TLS (früher:
-        SSL)-Verschlüsselung stellt nach derzeitigem technischen Stand sicher,
-        dass kein Dritter übertragene Daten mitlesen bzw. verändern kann. Dies gilt sowohl für die Inhalte der Seite als
-        auch für Daten,
-        die Ihr durch die Nutzung von Formularen an uns sendet.</p>
-
-
-    <b>Kommentarmöglichkeit</b>
-
-    <p style="text-align:left">24unix.net bietet Dir die Möglichkeit, Kommentare zu den einzelnen Beiträgen zu
-        hinterlassen.
-        Hierbei wird die IP-Adresse des Verfassers/Anschlussinhabers für drei Wochen gespeichert, um sie ggf. an
-        Strafermittlungsbehörden weiterleiten zu können wenn wir dazu verpflichtet werden sollten.
-        Eine Weitergabe von Daten an Dritte erfolgt nicht. Ein Abgleich der so erhobenen Daten mit Daten, die
-        möglicherweise durch andere Komponenten seitens 24unix.net erhoben werden,
-        erfolgt ebenfalls nicht.</p>
-
-
-    <b>Nutzung von Cookies</b>
-
-    <p style="text-align:left">24unix.net verwendet sogenannte Cookies. Dies sind kleine Textdateien, die auf Deinem
-        Rechner lokal abgelegt werden und die Dein Browser speichert.
-        Cookies dienen dazu, das Forum nutzerfreundlicher, effektiver und sicherer zu machen.
-        <!-- Alle Cookies werden standardmäßig für ein Jahr angelegt, können jedoch jederzeit über einen am Ende der Seite
-        [url="https://rc-heli-fan.org/ucp.php?mode=delete_cookies"]auffindbaren Link[/url] gelöscht werden.-->
-        Cookies werden im 24unix.net für folgende Funktionen genutzt:</p>
-    <ul style="text-align:left">
-        <li>Speichern der persönlichen Einstellung der User, über ein- oder ausgeklappte Kategorien
-        <li>Den automatischen Login-Dienst zu nutzen
-        <li>Die Sitzungs-ID. Mit diesem Cookie wird in Verbindung mit der Benutzer-ID der Nutzer identifiziert.
-        <li>Die User ID des Benutzers
-        <li>Speichern, ob der User den Hinweis des Forums, dass Cookies genutzt werden, bestätigt hat.
-        <li>Markieren von gelesenen/ungelesenen Beiträgen für Gäste
-    </ul>
-    <p style="text-align:left">Du kannst den Umgang mit Cookies in Deinem Browser konfigurieren, z.B. das du über das
-        Speichern neuer Cookies
-        informiert wirst.
-        Bei der Deaktivierung von Cookies im Browser kann die Funktionalität des 24unix.nets eingeschränkt sein.</p>
-
-
-
-    <b>Zugriffsdaten in Server-Log-Dateien</b>
-
-    <p style="text-align:left">24unix.net erhebt und speichert Informationen in sogenannten Server-Log-Dateien, die Dein
-        Browser automatisch übermittelt.
-        Diese Daten werden bis zu zehn Wochen gespeichert. Sie umfassen:</p>
-
-    <ul style="text-align:left">
-        <li>Browsertyp und -version</li>
-        <li>verwendetes Betriebssystem</li>
-        <li>Webseite, von der aus du uns besuchst (Referrer URL)</li>
-        <li>die aufgerufene Seite</li>
-        <li>Datum und Uhrzeit des Zugriffs</li>
-        <li>die Internet Protokoll (IP)-Adresse</li>
-    </ul>
-    <p style="text-align:left">Die Verarbeitung erfolgt gemäß Art. 6 Abs. 1 lit. f DSGVO auf Basis unseres berechtigten Interesses an
-        der Verbesserung der Stabilität
-        und Funktionalität unserer Website. Eine Weitergabe oder anderweitige Verwendung der Daten findet nicht statt.
-        Wir behalten uns allerdings vor, die Server-Logfiles nachträglich zu überprüfen, sollten konkrete Anhaltspunkte
-        auf eine rechtswidrige Nutzung hinweisen.</p>
-
-
-    <b>Gestattung der Kontaktaufnahme</b>
-
-    <p style="text-align:left">Du gestattest dem Betreiber und den Administratoren, dich unter den von dir angegebenen
-        Kontaktdaten zu kontaktieren,
-        sofern dies zur Übermittlung zentraler Informationen über das Forum erforderlich ist. Darüber hinaus dürfen der
-        Betreiber,
-        Administratoren und andere registrierte Benutzer des Forums dich kontaktieren, sofern du dies an entsprechender
-        Stelle erlaubt hast.
-
-        Im Rahmen der Kontaktaufnahme mit uns (z.B. per eMail) werden personenbezogene Daten (IP Adressen) erhoben.
-        Diese Daten werden ausschließlich zum Zweck der Beantwortung deines Anliegens bzw. für die Kontaktaufnahme und
-        die damit verbundene technische Administration gespeichert und verwendet. Rechtsgrundlage für die Verarbeitung
-        der Daten ist unser berechtigtes Interesse an der Beantwortung deines Anliegens gemäß Art. 6 Abs. 1 lit. f
-        DSGVO.
-        Zielt Deine Kontaktierung auf den Abschluss eines Vertrages ab, so ist zusätzliche Rechtsgrundlage für die
-        Verarbeitung Art. 6 Abs. 1 lit. b DSGVO.
-        Deine Daten werden nach abschließender Bearbeitung der Anfrage gelöscht, dies ist der Fall, wenn sich aus den
-        Umständen entnehmen lässt,
-        dass der betroffene Sachverhalt abschließend geklärt ist und sofern keine gesetzlichen Aufbewahrungspflichten
-        entgegenstehen.</p>
-
-
-    <b>Rechte des Betroffenen</b>
-
-    <p style="text-align:left">Das geltende Datenschutzrecht gewährt dir gegenüber dem Verantwortlichen hinsichtlich der
-        Verarbeitung deiner personenbezogenen Daten
-        umfassende Betroffenenrechte (Auskunfts- und Interventionsrechte), über die wir dich nachstehend
-        informieren:</p>
-
-    <ul style="text-align:left">
-        <li>Auskunftsrecht gemäß Art. 15 DSGVO: Du hast insbesondere ein Recht auf Auskunft über Deine von uns
-            verarbeiteten personenbezogenen Daten,
-            die Verarbeitungszwecke, die Kategorien der verarbeiteten personenbezogenen Daten, die Empfänger oder
-            Kategorien
-            von Empfängern,
-            gegenüber denen Deine Daten offengelegt wurden oder werden, die geplante Speicherdauer bzw. die Kriterien
-            für
-            die Festlegung der Speicherdauer,
-            das Bestehen eines Rechts auf Berichtigung, Löschung, Einschränkung der Verarbeitung, Widerspruch gegen die
-            Verarbeitung,
-            Beschwerde bei einer Aufsichtsbehörde, die Herkunft Deiner Daten, wenn diese nicht durch uns bei dir erhoben
-            wurden,
-            das Bestehen einer automatisierten Entscheidungsfindung einschließlich Profiling und ggf. aussagekräftige
-            Informationen
-            über die involvierte Logik und die Dich betreffende Tragweite und die angestrebten Auswirkungen einer
-            solchen
-            Verarbeitung,
-            sowie dein Recht auf Unterrichtung, welche Garantien gemäß Art. 46 DSGVO bei Weiterleitung deiner Daten in
-            Drittländer bestehen.
-        </li>
-        <li>Recht auf Berichtigung gemäß Art. 16 DSGVO: Du hast ein Recht auf unverzügliche Berichtigung dich
-            betreffender unrichtiger Daten
-            und/oder Vervollständigung deiner bei uns gespeicherten unvollständigen Daten.
-        </li>
-        <li>Recht auf Löschung gemäß Art. 17 DSGVO: Du hast das Recht, die Löschung Deiner personenbezogenen Daten bei
-            Vorliegen
-            der Voraussetzungen des Art. 17 Abs. 1 DSGVO zu verlangen. Dieses Recht besteht jedoch insbesondere dann
-            nicht,
-            wenn die Verarbeitung zur Ausübung des Rechts auf freie Meinungsäußerung und Information, zur Erfüllung
-            einer
-            rechtlichen
-            Verpflichtung, aus Gründen des öffentlichen Interesses oder zur Geltendmachung, Ausübung oder Verteidigung
-            von
-            Rechtsansprüchen erforderlich ist.
-        </li>
-        <li>Recht auf Einschränkung der Verarbeitung gemäß Art. 18 DSGVO: Du hast das Recht, die Einschränkung der
-            Verarbeitung Deiner personenbezogenen
-            Daten zu verlangen, solange die von dir bestrittene Richtigkeit Deiner Daten überprüft wird, wenn du eine
-            Löschung Deiner Daten wegen unzulässiger
-            Datenverarbeitung ablehnst und stattdessen die Einschränkung der Verarbeitung Deiner Daten verlangen, wenn
-            du
-            Deine Daten zur Geltendmachung,
-            Ausübung oder Verteidigung von Rechtsansprüchen benötigst, nachdem wir diese Daten nach Zweckerreichung
-            nicht
-            mehr benötigen oder wenn du Widerspruch
-            aus Gründen deiner besonderen Situation eingelegt hast, solange noch nicht feststeht, ob unsere berechtigten
-            Gründe überwiegen.
-        </li>
-        <li>Recht auf Unterrichtung gemäß Art. 19 DSGVO: Hast Du das Recht auf Berichtigung, Löschung oder Einschränkung
-            der Verarbeitung gegenüber
-            dem Verantwortlichen geltend gemacht, ist dieser verpflichtet, allen Empfängern, denen die dich betreffenden
-            personenbezogenen Daten
-            offengelegt wurden, diese Berichtigung oder Löschung der Daten oder Einschränkung der Verarbeitung
-            mitzuteilen,
-            es sei denn, dies erweist
-            sich als unmöglich oder ist mit einem unverhältnismäßigen Aufwand verbunden. Dir steht das Recht zu, über
-            diese
-            Empfänger unterrichtet zu werden.
-        </li>
-        <li>Recht auf Datenübertragbarkeit gemäß Art. 20 DSGVO: Du hast das Recht, Deine personenbezogenen Daten, die du
-            uns bereitgestellt hast,
-            in einem strukturierten, gängigen und maschinenlesebaren Format zu erhalten oder die Übermittlung an einen
-            anderen Verantwortlichen
-            zu verlangen, soweit dies technisch machbar ist.
-        </li>
-        <li>Recht auf Widerruf erteilter Einwilligungen gemäß Art. 7 Abs. 3 DSGVO: Du hast das Recht, eine einmal
-            erteilte Einwilligung
-            in die Verarbeitung von Daten jederzeit mit Wirkung für die Zukunft zu widerrufen. Im Falle des Widerrufs
-            werden
-            wir die betroffenen
-            Daten unverzüglich löschen, sofern eine weitere Verarbeitung nicht auf eine Rechtsgrundlage zur
-            einwilligungslosen Verarbeitung gestützt
-            werden kann. Durch den Widerruf der Einwilligung wird die Rechtmäßigkeit der aufgrund der Einwilligung bis
-            zum
-            Widerruf erfolgten Verarbeitung nicht berührt.
-        </li>
-        <li>Recht auf Beschwerde gemäß Art. 77 DSGVO: Wenn du der Ansicht bist, dass die Verarbeitung der Dich
-            betreffenden personenbezogenen Daten gegen die DSGVO
-            verstößt, hast du - unbeschadet eines anderweitigen verwaltungsrechtlichen oder gerichtlichen Rechtsbehelfs
-            -
-            das Recht auf Beschwerde
-            bei einer Aufsichtsbehörde, insbesondere in dem Mitgliedstaat deines Aufenthaltsortes, deines Arbeitsplatzes
-            oder des Ortes des mutmaßlichen Verstoßes.
-        </li>
-    </ul>
-
-
-
-    <b>Widerspruchsrecht</b>
-
-    <p style="text-align:left">Du hast das Recht, aus Gründen, die sich aus Deiner besonderen Situation ergibt,
-        jederzeit gegen die Verarbeitung der Dich betreffenden
-        personenbezogenen Daten, die aufgrund von Art. 6 Abs. 1 lit. e oder f DSGVO erfolgt, Widerspruch einzulegen;
-        dies gilt auch für ein auf diese Bestimmungen gestütztes Profiling.
-
-        Der Verantwortliche verarbeitet die Dich betreffenden personenbezogenen Daten nicht mehr, es sei denn, er kann
-        zwingende schutzwürdige Gründe
-        für die Verarbeitung nachweisen, die deine Interessen, Rechte und Freiheiten überwiegen, oder die Verarbeitung
-        dient der Geltendmachung,
-        Ausübung oder Verteidigung von Rechtsansprüchen.
-
-        Werden die Dich betreffenden personenbezogenen Daten verarbeitet, um Direktwerbung zu betreiben, hast du das
-        Recht,
-        jederzeit Widerspruch gegen die Verarbeitung der Dich betreffenden personenbezogenen Daten zum Zwecke derartiger
-        Werbung einzulegen;
-        dies gilt auch für das Profiling, soweit es mit solcher Direktwerbung in Verbindung steht.
-
-        Widersprichst du der Verarbeitung für Zwecke der Direktwerbung, so werden die dich betreffenden
-        personenbezogenen Daten nicht mehr für diese Zwecke verarbeitet.
-
-        Du hast die Möglichkeit, im Zusammenhang mit der Nutzung von Diensten der Informationsgesellschaft – ungeachtet
-        der Richtlinie 2002/58/EG – Dein
-        Widerspruchsrecht mittels automatisierter Verfahren auszuüben, bei denen technische Spezifikationen verwendet
-        werden.
-
-        Du hast auch das Recht, aus Gründen, die sich aus Deiner besonderen Situation ergeben, bei der Verarbeitung Dich
-        betreffender personenbezogener Daten,
-        die zu wissenschaftlichen oder historischen Forschungszwecken oder zu statistischen Zwecken gem. Art. 89 Abs. 1
-        DSGVO erfolgt, dieser zu widersprechen.
-        Dein Widerspruchsrecht kann insoweit beschränkt werden, als es voraussichtlich die Verwirklichung der
-        Forschungs- oder Statistikzwecke unmöglich
-        macht oder ernsthaft beeinträchtigt und die Beschränkung für die Erfüllung der Forschungs- oder Statistikzwecke
-        notwendig ist.</p>
-
-
-    <b>Geltungsbereich dieser Richtlinie</b>
-    <p>Diese Richtlinie umfasst alle Seiten, die unter 24unix.net gespeichert sind.
-        Ergeben sich Änderungen an dieser Richtlinie, werden die Benutzer des Forums hierüber informiert und es besteht
-        ein Widerspruchsrecht.
-        Explizit keinen Einfluss hat der Betreiber auf externe, verlinkte Webseiten, auf denen diese Richtlinie nicht
-        gilt.</p>
-
-
-    Quellen:
-    <ul style="text-align:left;padding-bottom: 200px">
-        <li><a href="https://www.ratgeberrecht.eu">Muster-Datenschutzerklärung der Anwaltskanzlei Weiß & Partner</a>
-        </li>
-        <li><a href="https://www.e-recht24.de">e-recht24.de</a></li>
-        <li><a href="https://dsaforum.de/app.php/datenschutz">Datenschutzerklärung des DSA-Forums</a></li>
-        <li>eigene Ergänzungen</li>
-    </ul>
-{% endblock %}
\ No newline at end of file
diff --git a/templates/themes/default/projects/index.html.twig b/templates/themes/default/projects/index.html.twig
index bf72b99..d4e1945 100644
--- a/templates/themes/default/projects/index.html.twig
+++ b/templates/themes/default/projects/index.html.twig
@@ -17,12 +17,12 @@
                                 <a href="{{ path('app_projects', { name: project.name }) }}">
                                     {% if project.teaserImage %}
                                         <img
-                                                class="blog-img"
+                                                class="project-image"
                                                 src="/uploads/projects/{{  project.teaserImage  }}"
                                                 alt="Teaser">
                                     {% else %}
                                         <img
-                                                class="blog-img"
+                                                class="project-image"
                                                 src="{{ asset('build/images/24unix/24_logo_bg_96x96.png') }}"
                                                 alt="Teaser">
                                     {% endif %}
diff --git a/webpack.config.js b/webpack.config.js
index f48a18f..50d207a 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -13,7 +13,7 @@ Encore
 		from: './assets/images',
 		to: 'images/[path][name].[ext]'
 	})
-	.addEntry('app', './assets/js/index.js')
+	.addEntry('app', './assets/app.js')
 	.splitEntryChunks()
 	// will require an extra script tag for runtime.js
 	// but, you probably want this, unless you're building a single-page app
diff --git a/yarn.lock b/yarn.lock
index c8d4e2c..017b345 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1717,7 +1717,14 @@ boolbase@^1.0.0:
   resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
   integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
 
-bootstrap@^5.2.2:
+bootstrap-dark-5@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/bootstrap-dark-5/-/bootstrap-dark-5-1.1.3.tgz#a40c42083f2ee1f05ca0423f334d5edf52c35f9e"
+  integrity sha512-3Paopsp8wyOM1oeaLWLFuUZThhRc3tBYKUnoF+uwrU/xN4G47MCLZlALBJNqYqAecg7dSln9vgaYK1CwPnTeBw==
+  dependencies:
+    bootstrap "^5.1.3"
+
+bootstrap@^5.1.3, bootstrap@^5.2.2:
   version "5.2.2"
   resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.2.2.tgz#834e053eed584a65e244d8aa112a6959f56e27a0"
   integrity sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ==