diff --git a/src/Builder/CapsuleBuilder.php b/src/Builder/CapsuleBuilder.php
index ea2dca1beabf4beff755e34745592edb1aa0faba..30be954608b7f120dae3f01792278ddb7215845c 100644
--- a/src/Builder/CapsuleBuilder.php
+++ b/src/Builder/CapsuleBuilder.php
@@ -46,7 +46,7 @@ class CapsuleBuilder
 
     public function withPreviewLink(string $preview_link): CapsuleBuilder
     {
-        $this->capsule->setPreviewLink($preview_link);
+        $this->capsule->setPath($preview_link);
         $this->hasRequiredPreviewLink = true;
         return $this;
     }
@@ -63,7 +63,7 @@ class CapsuleBuilder
             "The call of CapsuleBuilder::withPassword should be " .
             "called before CapsuleBuilder::createEditionLink"
         );
-        $this->capsule->setEditionLink($this->capsule->getPreviewLink() .
+        $this->capsule->setEditionLink($this->capsule->getPath() .
             "/?p=" . $this->capsule->getPassword());
         $this->hasRequiredEditionLink = true;
     }
diff --git a/src/Controller/CapsuleController.php b/src/Controller/CapsuleController.php
index 551729f4f9b8e36f65c49f2f74177b4a908085a0..f07cd37a1f8a270f80d3712b1a64e6d3ab8158a6 100644
--- a/src/Controller/CapsuleController.php
+++ b/src/Controller/CapsuleController.php
@@ -12,6 +12,7 @@ use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\Routing\Annotation\Route;
 use Symfony\Component\Uid\Uuid;
+use Symfony\Contracts\Translation\TranslatorInterface;
 
 class CapsuleController extends AbstractController
 {
@@ -93,7 +94,37 @@ class CapsuleController extends AbstractController
         $url = $this->getParameter('app.legacy_external_prefix') . '/' . $path . "/?w=1";
 
         return $this->render(
-            'capsule/preview.html.twig',
+            'project/project_view.html.twig',
+            [ 'url' => $url ]
+        );
+    }
+
+    /**
+     * @Route("capsule/edit/{path}", name="edit_capsule")
+     */
+    public function edit(string $path, CapsuleRepository $capsuleRepository, TranslatorInterface $translator): Response
+    {
+        $current_user = $this->getUser();
+
+        if (! $current_user instanceof User) {
+            return $this->redirectToRoute('app_logout');
+        }
+
+        $capsule = $capsuleRepository->findOneBy(['link_path' => $path, 'creation_author' => $current_user]);
+        if (null === $capsule) {
+            $this->addFlash('warning', $translator->trans('capsule.edition_not_allowed'));
+            return $this->redirectToRoute('capsule_list');
+        }
+
+        $file_path = '../legacy/' . $path;
+        if (!file_exists($file_path)) {
+            return $this->render('capsule/capsule_not_found.html.twig');
+        }
+
+        $url = $this->getParameter('app.legacy_external_prefix') . '/' . $capsule->getEditionLink();
+
+        return $this->render(
+            'project/project_view.html.twig',
             [ 'url' => $url ]
         );
     }
diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php
index 3e089828a1f124c1c4e7e8fb1dc89ca6ed188744..6dcc988400a5e8798611f787d6782710c7db85c1 100644
--- a/src/Controller/ProjectController.php
+++ b/src/Controller/ProjectController.php
@@ -27,11 +27,11 @@ class ProjectController extends AbstractController
         chdir('../legacy/');
 
         $capsule_name = $capsule->getName();
-        $capsule_directory = $capsule->getPreviewLink();
+        $capsule_directory = $capsule->getPath();
 
         if (file_exists($capsule_directory)) {
             $this->addFlash(
-                'project_already_exists',
+                'warning',
                 $translator->trans(
                     'project.already_exists',
                     [
diff --git a/src/Entity/Capsule.php b/src/Entity/Capsule.php
index 3b4a39d34504ce6550bee9852cb9c451d13c6d4b..6fbe87cb1764e160b242ed4a88a5fb377b438db1 100644
--- a/src/Entity/Capsule.php
+++ b/src/Entity/Capsule.php
@@ -62,7 +62,7 @@ class Capsule
      *
      * @ORM\Column(name="link", type="string", length=255, nullable=false)
      */
-    private string $preview_link;
+    private string $link_path;
 
     /**
      *
@@ -121,14 +121,14 @@ class Capsule
         return $this;
     }
 
-    public function getPreviewLink(): string
+    public function getPath(): string
     {
-        return $this->preview_link;
+        return $this->link_path;
     }
 
-    public function setPreviewLink(string $preview_link): Capsule
+    public function setPath(string $preview_link): Capsule
     {
-        $this->preview_link = $preview_link;
+        $this->link_path = $preview_link;
         return $this;
     }
 
diff --git a/templates/capsule/index.html.twig b/templates/capsule/index.html.twig
index 251d356396dc893d90fc8e5346e5688025fff920..37abbc1311ac905d4d5611331394af6c56967034 100644
--- a/templates/capsule/index.html.twig
+++ b/templates/capsule/index.html.twig
@@ -21,7 +21,7 @@
         </form>
     </div>
 
-    {% for flashWarning in app.flashes('project_already_exists') %}
+    {% for flashWarning in app.flashes('warning') %}
         <div class="text-center alert alert-warning col-5 mx-auto my-5" role="alert">
             {{ flashWarning }}
         </div>
@@ -39,7 +39,7 @@
         <div class="capsule-item pb-4 m-5">
             <div class="d-flex flex-column flex-md-row justify-content-center align-items-center mt-sm-4">
                 <div class="list-item">
-                    <a href="/capsule/preview/{{ capsule.getPreviewLink() }}" class="capsule-title">
+                    <a href="/capsule/preview/{{ capsule.getPath() }}" class="capsule-title">
                         {{ capsule.getName() }}
                     </a>
                 </div>
@@ -51,7 +51,7 @@
                 <div class="d-flex flex-column flex-md-row justify-content-center align-items-center">
                     <div class="m-4 ratio ratio-16x9">
                         <iframe
-                                src="/capsule/preview/{{ capsule.getPreviewLink() }}"
+                                src="/capsule/preview/{{ capsule.getPath() }}"
                                 allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
                                 allowfullscreen>
                         </iframe>
@@ -74,7 +74,7 @@
                             Delete capsule
                         </a>
                     </div>
-                    <a href="{{ capsule.getEditionLink() }}" class="list-item lh-md">
+                    <a href="capsule/edit/{{ capsule.getPath() }}" class="list-item lh-md">
                         <button class="standard-button p-2">
                             Edit capsule
                         </button>
diff --git a/templates/capsule/preview.html.twig b/templates/project/project_view.html.twig
similarity index 100%
rename from templates/capsule/preview.html.twig
rename to templates/project/project_view.html.twig
diff --git a/tests/functional/ProjectControllerTest.php b/tests/functional/ProjectControllerTest.php
index 8687740c2ca4321febcc4f93b38d65e5ac6b2753..7160a29d91798910189639cb9cab74a6afc3ef74 100644
--- a/tests/functional/ProjectControllerTest.php
+++ b/tests/functional/ProjectControllerTest.php
@@ -117,7 +117,7 @@ class ProjectControllerTest extends WebTestCase
         }
 
         $capsule_name_in_db = $capsule_in_db->getName();
-        $capsule_directory = $capsule_in_db->getPreviewLink();
+        $capsule_directory = $capsule_in_db->getPath();
 
         $this->assertDirectoryExists($capsule_directory);
         $this->assertDirectoryIsReadable($capsule_directory);
@@ -160,7 +160,7 @@ class ProjectControllerTest extends WebTestCase
         }
 
         $capsule_name_in_db = $capsule_in_db->getName();
-        $capsule_directory = $capsule_in_db->getPreviewLink();
+        $capsule_directory = $capsule_in_db->getPath();
 
         $this->assertDirectoryExists($capsule_directory);
         $this->assertDirectoryIsReadable($capsule_directory);