From 4956e1a33f2ac75b09583cee6ba045ebb5b74452 Mon Sep 17 00:00:00 2001
From: pabois <pierreandre.boissinot@noesya.coop>
Date: Thu, 17 Feb 2022 18:22:48 +0100
Subject: [PATCH] refonte structure

---
 .../communication/website/home_controller.rb  |  37 ------
 .../website/index_pages_controller.rb         |  10 +-
 .../website/structure_controller.rb           |  45 -------
 app/models/ability.rb                         |   3 -
 app/models/communication/website.rb           |  26 +++-
 app/models/communication/website/git_file.rb  |   2 +-
 app/models/communication/website/home.rb      |  60 ---------
 .../communication/website/index_page.rb       |  37 +++++-
 .../website/index_page/administrators.rb      |  14 ++
 .../website/index_page/authors.rb             |  14 ++
 .../website/index_page/communication_posts.rb |  14 ++
 .../website/index_page/education_programs.rb  |  18 +++
 .../communication/website/index_page/home.rb  |  10 ++
 .../website/index_page/persons.rb             |  14 ++
 .../website/index_page/research_articles.rb   |  14 ++
 .../website/index_page/research_volumes.rb    |  14 ++
 .../website/index_page/researchers.rb         |  14 ++
 .../website/index_page/teachers.rb            |  14 ++
 .../website/menu/item/with_targets.rb         |  28 ++--
 app/models/communication/website/structure.rb |  94 --------------
 .../website/structure/administrators.rb       |  59 ---------
 .../website/structure/authors.rb              |  59 ---------
 .../website/structure/communication_posts.rb  |  59 ---------
 .../website/structure/education_programs.rb   |  59 ---------
 .../website/structure/persons.rb              |  59 ---------
 .../website/structure/research_articles.rb    |  59 ---------
 .../website/structure/research_volumes.rb     |  59 ---------
 .../website/structure/researchers.rb          |  59 ---------
 .../website/structure/teachers.rb             |  59 ---------
 app/models/communication/website/with_home.rb |  18 ---
 .../communication/website/with_index_pages.rb |  10 +-
 .../communication/website/with_structure.rb   |  18 ---
 .../website/categories/static.html.erb        |   8 +-
 .../communication/website/homes/edit.html.erb |  39 ------
 .../website/homes/static.html.erb             |  12 --
 .../website/index_page/_static.html.erb       |  12 ++
 .../index_page/administrators/static.html.erb |   1 +
 .../index_page/authors/static.html.erb        |   1 +
 .../communication_posts/static.html.erb       |   1 +
 .../education_programs/static.html.erb        |   1 +
 .../website/index_page/homes/static.html.erb  |  12 ++
 .../index_page/persons/static.html.erb        |   1 +
 .../research_articles/static.html.erb         |   1 +
 .../research_volumes/static.html.erb          |   1 +
 .../index_page/researchers/static.html.erb    |   1 +
 .../index_page/teachers/static.html.erb       |   1 +
 .../website/index_pages/edit.html.erb         |  14 +-
 .../website/menus/static.html.erb             |   2 +-
 .../website/pages/static.html.erb             |  22 ++--
 .../website/posts/static.html.erb             |  26 ++--
 .../structure/administrators/static.html.erb  |   7 -
 .../website/structure/authors/static.html.erb |   7 -
 .../communication_posts/static.html.erb       |   7 -
 .../education_programs/static.html.erb        |   7 -
 .../website/structure/persons/static.html.erb |   7 -
 .../research_articles/static.html.erb         |   7 -
 .../research_volumes/static.html.erb          |   7 -
 .../structure/researchers/static.html.erb     |   7 -
 .../structure/teachers/static.html.erb        |   7 -
 .../website/structures/edit.html.erb          | 121 ------------------
 .../communication/websites/_sidebar.html.erb  |  10 --
 .../communication/websites/show.html.erb      |  13 +-
 .../websites/show/_home.html.erb              |  26 ----
 .../communication/websites/static.html.erb    |   2 +-
 .../admin/education/programs/static.html.erb  |  30 ++---
 .../admin/education/schools/static.html.erb   |  16 +--
 .../research/journal/articles/static.html.erb |  28 ++--
 .../research/journal/volumes/static.html.erb  |  20 +--
 .../admin/research/journals/static.html.erb   |   6 +-
 .../research/laboratories/static.html.erb     |  10 +-
 .../admin/university/people/static.html.erb   |  28 ++--
 .../person/administrators/static.html.erb     |  12 +-
 .../university/person/authors/static.html.erb |  12 +-
 .../person/researchers/static.html.erb        |  12 +-
 .../person/teachers/static.html.erb           |  12 +-
 config/locales/communication/en.yml           |  42 ------
 config/locales/communication/fr.yml           |  42 ------
 77 files changed, 384 insertions(+), 1336 deletions(-)
 delete mode 100644 app/controllers/admin/communication/website/home_controller.rb
 delete mode 100644 app/controllers/admin/communication/website/structure_controller.rb
 delete mode 100644 app/models/communication/website/home.rb
 create mode 100644 app/models/communication/website/index_page/administrators.rb
 create mode 100644 app/models/communication/website/index_page/authors.rb
 create mode 100644 app/models/communication/website/index_page/communication_posts.rb
 create mode 100644 app/models/communication/website/index_page/education_programs.rb
 create mode 100644 app/models/communication/website/index_page/home.rb
 create mode 100644 app/models/communication/website/index_page/persons.rb
 create mode 100644 app/models/communication/website/index_page/research_articles.rb
 create mode 100644 app/models/communication/website/index_page/research_volumes.rb
 create mode 100644 app/models/communication/website/index_page/researchers.rb
 create mode 100644 app/models/communication/website/index_page/teachers.rb
 delete mode 100644 app/models/communication/website/structure.rb
 delete mode 100644 app/models/communication/website/structure/administrators.rb
 delete mode 100644 app/models/communication/website/structure/authors.rb
 delete mode 100644 app/models/communication/website/structure/communication_posts.rb
 delete mode 100644 app/models/communication/website/structure/education_programs.rb
 delete mode 100644 app/models/communication/website/structure/persons.rb
 delete mode 100644 app/models/communication/website/structure/research_articles.rb
 delete mode 100644 app/models/communication/website/structure/research_volumes.rb
 delete mode 100644 app/models/communication/website/structure/researchers.rb
 delete mode 100644 app/models/communication/website/structure/teachers.rb
 delete mode 100644 app/models/communication/website/with_home.rb
 delete mode 100644 app/models/communication/website/with_structure.rb
 delete mode 100644 app/views/admin/communication/website/homes/edit.html.erb
 delete mode 100644 app/views/admin/communication/website/homes/static.html.erb
 create mode 100644 app/views/admin/communication/website/index_page/_static.html.erb
 create mode 100644 app/views/admin/communication/website/index_page/administrators/static.html.erb
 create mode 100644 app/views/admin/communication/website/index_page/authors/static.html.erb
 create mode 100644 app/views/admin/communication/website/index_page/communication_posts/static.html.erb
 create mode 100644 app/views/admin/communication/website/index_page/education_programs/static.html.erb
 create mode 100644 app/views/admin/communication/website/index_page/homes/static.html.erb
 create mode 100644 app/views/admin/communication/website/index_page/persons/static.html.erb
 create mode 100644 app/views/admin/communication/website/index_page/research_articles/static.html.erb
 create mode 100644 app/views/admin/communication/website/index_page/research_volumes/static.html.erb
 create mode 100644 app/views/admin/communication/website/index_page/researchers/static.html.erb
 create mode 100644 app/views/admin/communication/website/index_page/teachers/static.html.erb
 delete mode 100644 app/views/admin/communication/website/structure/administrators/static.html.erb
 delete mode 100644 app/views/admin/communication/website/structure/authors/static.html.erb
 delete mode 100644 app/views/admin/communication/website/structure/communication_posts/static.html.erb
 delete mode 100644 app/views/admin/communication/website/structure/education_programs/static.html.erb
 delete mode 100644 app/views/admin/communication/website/structure/persons/static.html.erb
 delete mode 100644 app/views/admin/communication/website/structure/research_articles/static.html.erb
 delete mode 100644 app/views/admin/communication/website/structure/research_volumes/static.html.erb
 delete mode 100644 app/views/admin/communication/website/structure/researchers/static.html.erb
 delete mode 100644 app/views/admin/communication/website/structure/teachers/static.html.erb
 delete mode 100644 app/views/admin/communication/website/structures/edit.html.erb
 delete mode 100644 app/views/admin/communication/websites/show/_home.html.erb

diff --git a/app/controllers/admin/communication/website/home_controller.rb b/app/controllers/admin/communication/website/home_controller.rb
deleted file mode 100644
index 195cf52cb..000000000
--- a/app/controllers/admin/communication/website/home_controller.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-class Admin::Communication::Website::HomeController < Admin::Communication::Website::ApplicationController
-  before_action :get_home, :ensure_abilities
-
-  def edit
-    breadcrumb
-    add_breadcrumb Communication::Website::Home.model_name.human
-    render 'admin/communication/website/homes/edit'
-  end
-
-  def update
-    if @home.update_and_sync(home_params)
-      redirect_to admin_communication_website_path(@website), notice: t('admin.successfully_updated_html', model: Communication::Website::Home.model_name.human)
-    else
-      breadcrumb
-      add_breadcrumb Communication::Website::Home.model_name.human
-      render :edit, status: :unprocessable_entity
-    end
-  end
-
-  protected
-
-  def get_home
-    @home = @website.home
-  end
-
-  def ensure_abilities
-    authorize! :update, @home
-  end
-
-  def home_params
-    params.require(:communication_website_home)
-          .permit(
-            :description, :text, :featured_image, :featured_image_delete,
-            :featured_image_infos, :featured_image_alt
-          )
-  end
-end
diff --git a/app/controllers/admin/communication/website/index_pages_controller.rb b/app/controllers/admin/communication/website/index_pages_controller.rb
index b155f381e..695c59314 100644
--- a/app/controllers/admin/communication/website/index_pages_controller.rb
+++ b/app/controllers/admin/communication/website/index_pages_controller.rb
@@ -1,8 +1,8 @@
 class Admin::Communication::Website::IndexPagesController < Admin::Communication::Website::ApplicationController
-  before_action :get_index_page, :ensure_abilities, only: [:edit, :update]
+  before_action :ensure_abilities
+  before_action :get_index_page, only: [:edit, :update]
 
   def index
-    authorize! :read, Communication::Website::IndexPage
     breadcrumb
     @kinds = Communication::Website::IndexPage.kinds
   end
@@ -13,9 +13,7 @@ class Admin::Communication::Website::IndexPagesController < Admin::Communication
   end
 
   def update
-    # TODO: sync
-    # if @index_page.update_and_sync(index_page_params)
-    if @index_page.update(index_page_params)
+    if @index_page.update_and_sync(index_page_params)
       redirect_to admin_communication_website_indexes_path(@website), notice: t('admin.successfully_updated_html', model: Communication::Website::IndexPage.model_name.human)
     else
       breadcrumb
@@ -31,7 +29,7 @@ class Admin::Communication::Website::IndexPagesController < Admin::Communication
   end
 
   def ensure_abilities
-    authorize! :update, @index_page
+    authorize! :update, @website
   end
 
   def breadcrumb
diff --git a/app/controllers/admin/communication/website/structure_controller.rb b/app/controllers/admin/communication/website/structure_controller.rb
deleted file mode 100644
index 7b8c08c59..000000000
--- a/app/controllers/admin/communication/website/structure_controller.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-class Admin::Communication::Website::StructureController < Admin::Communication::Website::ApplicationController
-  before_action :get_structure, :ensure_abilities
-
-  def edit
-    breadcrumb
-    add_breadcrumb Communication::Website::Structure.model_name.human
-    render 'admin/communication/website/structures/edit'
-  end
-
-  def update
-    if @structure.update_and_sync(structure_params)
-      redirect_to admin_communication_website_path(@website), notice: t('admin.successfully_updated_html', model: Communication::Website::Structure.model_name.human)
-    else
-      breadcrumb
-      add_breadcrumb Communication::Website::Structure.model_name.human
-      render :edit, status: :unprocessable_entity
-    end
-  end
-
-  protected
-
-  def get_structure
-    @structure = @website.structure
-  end
-
-  def ensure_abilities
-    authorize! :update, @structure
-  end
-
-  def structure_params
-    params.require(:communication_website_structure)
-          .permit(
-            :home_title,
-            :communication_posts_title, :communication_posts_description, :communication_posts_path,
-            :education_programs_title, :education_programs_description, :education_programs_path,
-            :research_articles_title, :research_articles_description, :research_articles_path,
-            :research_volumes_title, :research_volumes_description, :research_volumes_path,
-            :persons_title, :persons_description, :persons_path,
-            :administrators_title, :administrators_description, :administrators_path,
-            :authors_title, :authors_description, :authors_path,
-            :researchers_title, :researchers_description, :researchers_path,
-            :teachers_title, :teachers_description, :teachers_path
-          )
-  end
-end
diff --git a/app/models/ability.rb b/app/models/ability.rb
index d1338c05a..176c8a389 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -17,7 +17,6 @@ class Ability
     can :read, Communication::Website, university_id: @user.university_id
     can :read, Communication::Website::Page, university_id: @user.university_id
     can :read, Communication::Website::Post, university_id: @user.university_id
-    can :read, Communication::Website::Home, university_id: @user.university_id
     can :read, Communication::Website::Imported::Website, university_id: @user.university_id
     can :read, Communication::Website::Imported::Page, university_id: @user.university_id
     can :read, Communication::Website::Imported::Post, university_id: @user.university_id
@@ -59,8 +58,6 @@ class Ability
     can :manage, Communication::Website::Page, university_id: @user.university_id
     can :manage, Communication::Website::Post, university_id: @user.university_id
     can :manage, Communication::Website::Category, university_id: @user.university_id
-    can :manage, Communication::Website::Home, university_id: @user.university_id
-    can :manage, Communication::Website::Structure, university_id: @user.university_id
     can [:read, :update, :reorder], Communication::Website::Menu, university_id: @user.university_id
     can :manage, Communication::Website::Menu::Item, university_id: @user.university_id
     can :manage, Communication::Website::Imported::Website, university_id: @user.university_id
diff --git a/app/models/communication/website.rb b/app/models/communication/website.rb
index f3abb7a6e..20265e474 100644
--- a/app/models/communication/website.rb
+++ b/app/models/communication/website.rb
@@ -35,11 +35,9 @@ class Communication::Website < ApplicationRecord
   include WithAbouts
   include WithGit
   include WithGitRepository
-  include WithHome
   include WithImport
   include WithIndexPages
   include WithMenuItems
-  include WithStructure
 
   belongs_to :university
 
@@ -58,20 +56,34 @@ class Communication::Website < ApplicationRecord
       [self] +
       pages + pages.map(&:active_storage_blobs).flatten +
       posts + posts.map(&:active_storage_blobs).flatten +
-      [home] + home.explicit_active_storage_blobs +
+      [index_for(:home)] + index_for(:home).active_storage_blobs +
+      [index_for(:communication_posts)] + index_for(:communication_posts).active_storage_blobs +
+      [index_for(:persons)] + index_for(:persons).active_storage_blobs +
+      [index_for(:authors)] + index_for(:authors).active_storage_blobs +
       people_with_facets + people.map(&:active_storage_blobs).flatten +
-      categories + menus + [about] +
-      structure.git_dependencies(website)
+      categories + menus + [about]
     )
 
     if about.is_a? Education::School
+      dependencies << index_for(:education_programs)
+      dependencies += index_for(:education_programs).active_storage_blobs
       dependencies += about.programs
       dependencies += about.programs.map(&:active_storage_blobs).flatten
+      dependencies << index_for(:administrators)
+      dependencies += index_for(:administrators).active_storage_blobs
+      dependencies << index_for(:teachers)
+      dependencies += index_for(:teachers).active_storage_blobs
     elsif about.is_a? Research::Journal
-      dependencies += about.articles
-      dependencies += about.articles.map(&:active_storage_blobs).flatten
+      dependencies << index_for(:research_volumes)
+      dependencies += index_for(:research_volumes).active_storage_blobs
       dependencies += about.volumes
       dependencies += about.volumes.map(&:active_storage_blobs).flatten
+      dependencies << index_for(:research_articles)
+      dependencies += index_for(:research_articles).active_storage_blobs
+      dependencies += about.articles
+      dependencies += about.articles.map(&:active_storage_blobs).flatten
+      dependencies << index_for(:researchers)
+      dependencies += index_for(:researchers).active_storage_blobs
     end
 
     dependencies
diff --git a/app/models/communication/website/git_file.rb b/app/models/communication/website/git_file.rb
index eb5230c23..db09da8ad 100644
--- a/app/models/communication/website/git_file.rb
+++ b/app/models/communication/website/git_file.rb
@@ -72,7 +72,7 @@ class Communication::Website::GitFile < ApplicationRecord
       template: "admin/#{about.class.name.underscore.pluralize}/static",
       layout: false,
       assigns: {
-        about.class.name.demodulize.downcase => about,
+        about: about,
         website: website
       }
     )
diff --git a/app/models/communication/website/home.rb b/app/models/communication/website/home.rb
deleted file mode 100644
index 3b55fc80c..000000000
--- a/app/models/communication/website/home.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-# == Schema Information
-#
-# Table name: communication_website_homes
-#
-#  id                       :uuid             not null, primary key
-#  description              :text
-#  featured_image_alt       :string
-#  github_path              :text
-#  text                     :text
-#  created_at               :datetime         not null
-#  updated_at               :datetime         not null
-#  communication_website_id :uuid             not null, indexed
-#  university_id            :uuid             not null, indexed
-#
-# Indexes
-#
-#  idx_comm_website_homes_on_communication_website_id  (communication_website_id)
-#  index_communication_website_homes_on_university_id  (university_id)
-#
-# Foreign Keys
-#
-#  fk_rails_263a15f387  (communication_website_id => communication_websites.id)
-#  fk_rails_328fa48682  (university_id => universities.id)
-#
-class Communication::Website::Home < ApplicationRecord
-  include WithGit
-  include WithFeaturedImage
-  include WithBlobs
-
-  belongs_to :university
-  belongs_to :website, foreign_key: :communication_website_id
-
-  has_summernote :text
-
-  def to_s
-    website.to_s
-  end
-
-  def git_path(website)
-    'content/_index.html'
-  end
-
-  def git_dependencies(website)
-    [self] + active_storage_blobs
-  end
-
-  def git_destroy_dependencies(website)
-    [self] + active_storage_blobs
-  end
-
-  protected
-
-  def explicit_blob_ids
-    super.concat [featured_image&.blob_id]
-  end
-
-  def inherited_blob_ids
-    [best_featured_image&.blob_id]
-  end
-end
diff --git a/app/models/communication/website/index_page.rb b/app/models/communication/website/index_page.rb
index c8c0d8cf9..8bc1dde0f 100644
--- a/app/models/communication/website/index_page.rb
+++ b/app/models/communication/website/index_page.rb
@@ -25,9 +25,10 @@
 #  fk_rails_7eb45227ae  (university_id => universities.id)
 #
 class Communication::Website::IndexPage < ApplicationRecord
+  include WithGit
+  include WithFeaturedImage
+  include WithBlobs
 
-  has_summernote :text
-  
   enum kind: { home: 0,
                communication_posts: 10,
                education_programs: 20,
@@ -38,8 +39,38 @@ class Communication::Website::IndexPage < ApplicationRecord
   belongs_to :university
   belongs_to :website, foreign_key: :communication_website_id
 
-  has_one_attached_deletable :featured_image
+  has_summernote :text
 
   validates :title, :path, presence: true
 
+  def to_s
+    "#{title}"
+  end
+
+  def git_dependencies(website)
+    [self] + active_storage_blobs
+  end
+
+  def git_destroy_dependencies(website)
+    [self] + active_storage_blobs
+  end
+
+  def home
+    @home ||= Communication::Website::IndexPage::Home.find(id)
+  end
+
+  def education_programs
+    @education_programs ||= Communication::Website::IndexPage::EducationPrograms.find(id)
+  end
+
+  protected
+
+  def explicit_blob_ids
+    super.concat [featured_image&.blob_id]
+  end
+
+  def inherited_blob_ids
+    [best_featured_image&.blob_id]
+  end
+
 end
diff --git a/app/models/communication/website/index_page/administrators.rb b/app/models/communication/website/index_page/administrators.rb
new file mode 100644
index 000000000..6663997ec
--- /dev/null
+++ b/app/models/communication/website/index_page/administrators.rb
@@ -0,0 +1,14 @@
+class Communication::Website::IndexPage::Administrators < Communication::Website::IndexPage
+  def self.polymorphic_name
+    'Communication::Website::IndexPage::Administrators'
+  end
+
+  def git_path(website)
+    'content/administrators/_index.html'
+  end
+
+  def url
+    "/#{website.index_for(:persons).path}/#{website.index_for(:administrators).path}/"
+  end
+
+end
diff --git a/app/models/communication/website/index_page/authors.rb b/app/models/communication/website/index_page/authors.rb
new file mode 100644
index 000000000..0153feea3
--- /dev/null
+++ b/app/models/communication/website/index_page/authors.rb
@@ -0,0 +1,14 @@
+class Communication::Website::IndexPage::Authors < Communication::Website::IndexPage
+  def self.polymorphic_name
+    'Communication::Website::IndexPage::Authors'
+  end
+
+  def git_path(website)
+    'content/authors/_index.html'
+  end
+
+  def url
+    "/#{website.index_for(:persons).path}/#{website.index_for(:authors).path}/"
+  end
+
+end
diff --git a/app/models/communication/website/index_page/communication_posts.rb b/app/models/communication/website/index_page/communication_posts.rb
new file mode 100644
index 000000000..ac3e62853
--- /dev/null
+++ b/app/models/communication/website/index_page/communication_posts.rb
@@ -0,0 +1,14 @@
+class Communication::Website::IndexPage::CommunicationPosts < Communication::Website::IndexPage
+  def self.polymorphic_name
+    'Communication::Website::IndexPage::CommunicationPosts'
+  end
+
+  def git_path(website)
+    'content/posts/_index.html'
+  end
+
+  def url
+    "/#{website.index_for(:communication_posts).path}/"
+  end
+
+end
diff --git a/app/models/communication/website/index_page/education_programs.rb b/app/models/communication/website/index_page/education_programs.rb
new file mode 100644
index 000000000..fd6fa1571
--- /dev/null
+++ b/app/models/communication/website/index_page/education_programs.rb
@@ -0,0 +1,18 @@
+class Communication::Website::IndexPage::EducationPrograms < Communication::Website::IndexPage
+  def self.polymorphic_name
+    'Communication::Website::IndexPage::EducationPrograms'
+  end
+
+  def git_path(website)
+    'content/programs/_index.html'
+  end
+
+  def url
+    "/#{path}/"
+  end
+
+  def git_dependencies(website)
+    [self] + active_storage_blobs + website.about.programs
+  end
+
+end
diff --git a/app/models/communication/website/index_page/home.rb b/app/models/communication/website/index_page/home.rb
new file mode 100644
index 000000000..55f211f50
--- /dev/null
+++ b/app/models/communication/website/index_page/home.rb
@@ -0,0 +1,10 @@
+class Communication::Website::IndexPage::Home < Communication::Website::IndexPage
+  def self.polymorphic_name
+    'Communication::Website::IndexPage::Home'
+  end
+
+  def git_path(website)
+    'content/_index.html'
+  end
+
+end
diff --git a/app/models/communication/website/index_page/persons.rb b/app/models/communication/website/index_page/persons.rb
new file mode 100644
index 000000000..f6685bfb7
--- /dev/null
+++ b/app/models/communication/website/index_page/persons.rb
@@ -0,0 +1,14 @@
+class Communication::Website::IndexPage::Persons < Communication::Website::IndexPage
+  def self.polymorphic_name
+    'Communication::Website::IndexPage::Persons'
+  end
+
+  def git_path(website)
+    'content/persons/_index.html'
+  end
+
+  def url
+    "/#{website.index_for(:persons).path}/"
+  end
+
+end
diff --git a/app/models/communication/website/index_page/research_articles.rb b/app/models/communication/website/index_page/research_articles.rb
new file mode 100644
index 000000000..28c257651
--- /dev/null
+++ b/app/models/communication/website/index_page/research_articles.rb
@@ -0,0 +1,14 @@
+class Communication::Website::IndexPage::ResearchArticles < Communication::Website::IndexPage
+  def self.polymorphic_name
+    'Communication::Website::IndexPage::ResearchArticles'
+  end
+
+  def git_path(website)
+    'content/articles/_index.html'
+  end
+
+  def url
+    "/#{website.index_for(:research_articles).path}/"
+  end
+
+end
diff --git a/app/models/communication/website/index_page/research_volumes.rb b/app/models/communication/website/index_page/research_volumes.rb
new file mode 100644
index 000000000..5f7845d01
--- /dev/null
+++ b/app/models/communication/website/index_page/research_volumes.rb
@@ -0,0 +1,14 @@
+class Communication::Website::IndexPage::ResearchVolumes < Communication::Website::IndexPage
+  def self.polymorphic_name
+    'Communication::Website::IndexPage::ResearchVolumes'
+  end
+
+  def git_path(website)
+    'content/volumes/_index.html'
+  end
+
+  def url
+    "/#{website.index_for(:research_volumes).path}/"
+  end
+
+end
diff --git a/app/models/communication/website/index_page/researchers.rb b/app/models/communication/website/index_page/researchers.rb
new file mode 100644
index 000000000..37fe8b782
--- /dev/null
+++ b/app/models/communication/website/index_page/researchers.rb
@@ -0,0 +1,14 @@
+class Communication::Website::IndexPage::Researchers < Communication::Website::IndexPage
+  def self.polymorphic_name
+    'Communication::Website::IndexPage::Researchers'
+  end
+
+  def git_path(website)
+    'content/researchers/_index.html'
+  end
+
+  def url
+    "/#{website.index_for(:persons).path}/#{website.index_for(:researchers).path}/"
+  end
+
+end
diff --git a/app/models/communication/website/index_page/teachers.rb b/app/models/communication/website/index_page/teachers.rb
new file mode 100644
index 000000000..1679da753
--- /dev/null
+++ b/app/models/communication/website/index_page/teachers.rb
@@ -0,0 +1,14 @@
+class Communication::Website::IndexPage::Teachers < Communication::Website::IndexPage
+  def self.polymorphic_name
+    'Communication::Website::IndexPage::Teachers'
+  end
+
+  def git_path(website)
+    'content/teachers/_index.html'
+  end
+
+  def url
+    "/#{website.index_for(:persons).path}/#{website.index_for(:teachers).path}/"
+  end
+
+end
diff --git a/app/models/communication/website/menu/item/with_targets.rb b/app/models/communication/website/menu/item/with_targets.rb
index f87d19f36..a23b3b758 100644
--- a/app/models/communication/website/menu/item/with_targets.rb
+++ b/app/models/communication/website/menu/item/with_targets.rb
@@ -16,58 +16,58 @@ module Communication::Website::Menu::Item::WithTargets
   end
 
   def target_for_programs
-    "/#{website.structure.education_programs_path}"
+    "/#{website.index_for(:education_programs).path}"
   end
 
   def target_for_program
-    "/#{website.structure.education_programs_path}#{about.path}"
+    "/#{website.index_for(:education_programs).path}#{about.path}"
   end
 
   def target_for_news
-    "/#{website.structure.communication_posts_path}"
+    "/#{website.index_for(:communication_posts).path}"
   end
 
   def target_for_news_article
-    "/#{website.structure.communication_posts_path}#{about.path}" if about&.published && about&.published_at
+    "/#{website.index_for(:communication_posts).path}#{about.path}" if about&.published && about&.published_at
   end
 
   def target_for_news_category
-    "/#{website.structure.communication_posts_path}#{about.path}" if about
+    "/#{website.index_for(:communication_posts).path}#{about.path}" if about
   end
 
   def target_for_staff
-    "/#{website.structure.persons_path}"
+    "/#{website.index_for(:persons).path}"
   end
 
   def target_for_administrators
-    "/#{website.structure.administrators_path}"
+    "/#{website.index_for(:administrators).path}"
   end
 
   def target_for_authors
-    "/#{website.structure.authors_path}"
+    "/#{website.index_for(:authors).path}"
   end
 
   def target_for_researchers
-    "/#{website.structure.researchers_path}"
+    "/#{website.index_for(:researchers).path}"
   end
 
   def target_for_teachers
-    "/#{website.structure.teachers_path}"
+    "/#{website.index_for(:teachers).path}"
   end
 
   def target_for_research_volumes
-    "/#{website.structure.research_volumes_path}"
+    "/#{website.index_for(:research_volumes).path}"
   end
 
   def target_for_research_volume
-    "/#{website.structure.research_volumes_path}#{about.path}" if about&.published && about&.published_at
+    "/#{website.index_for(:research_volumes).path}#{about.path}" if about&.published && about&.published_at
   end
 
   def target_for_research_articles
-    "/#{website.structure.research_articles_path}"
+    "/#{website.index_for(:research_articles).path}"
   end
 
   def target_for_research_article
-    "/#{website.structure.research_articles_path}#{about.path}" if about&.published && about&.published_at
+    "/#{website.index_for(:research_articles).path}#{about.path}" if about&.published && about&.published_at
   end
 end
diff --git a/app/models/communication/website/structure.rb b/app/models/communication/website/structure.rb
deleted file mode 100644
index eec505acc..000000000
--- a/app/models/communication/website/structure.rb
+++ /dev/null
@@ -1,94 +0,0 @@
-# == Schema Information
-#
-# Table name: communication_website_structures
-#
-#  id                              :uuid             not null, primary key
-#  administrators_description      :text             default("Liste des membres de l'équipe administrative")
-#  administrators_path             :string           default("equipe-administrative")
-#  administrators_title            :string           default("Équipe administrative")
-#  authors_description             :text             default("Liste des membres de l'équipe éditoriale")
-#  authors_path                    :string           default("equipe-editoriale")
-#  authors_title                   :string           default("Équipe éditoriale")
-#  communication_posts_description :text             default("Liste des actualités")
-#  communication_posts_path        :string           default("actualites")
-#  communication_posts_title       :string           default("Actualités")
-#  education_programs_description  :text             default("Liste des formations proposées")
-#  education_programs_path         :string           default("offre-de-formation")
-#  education_programs_title        :string           default("L'offre de formation")
-#  home_title                      :string           default("Accueil")
-#  persons_description             :text             default("Liste des membres de l'équipe")
-#  persons_path                    :string           default("equipe")
-#  persons_title                   :string           default("Équipe")
-#  research_articles_description   :text             default("Liste des articles")
-#  research_articles_path          :string           default("articles")
-#  research_articles_title         :string           default("Articles")
-#  research_volumes_description    :text             default("Liste des volumes")
-#  research_volumes_path           :string           default("volumes")
-#  research_volumes_title          :string           default("Volumes")
-#  researchers_description         :text             default("Liste des membres de l'équipe de recherche")
-#  researchers_path                :string           default("equipe-de-recherche")
-#  researchers_title               :string           default("Équipe de recherche")
-#  teachers_description            :text             default("Liste des membres de l'équipe pédagogique")
-#  teachers_path                   :string           default("equipe-pedagogique")
-#  teachers_title                  :string           default("Équipe pédagogique")
-#  created_at                      :datetime         not null
-#  updated_at                      :datetime         not null
-#  communication_website_id        :uuid             not null, indexed
-#  university_id                   :uuid             not null, indexed
-#
-# Indexes
-#
-#  idx_comm_website_structures_on_communication_website_id  (communication_website_id)
-#  index_communication_website_structures_on_university_id  (university_id)
-#
-# Foreign Keys
-#
-#  fk_rails_06c815ee8c  (communication_website_id => communication_websites.id)
-#  fk_rails_167390416d  (university_id => universities.id)
-#
-class Communication::Website::Structure < ApplicationRecord
-  include WithGit
-
-  belongs_to :university
-  belongs_to :website, foreign_key: :communication_website_id
-
-  validates :home_title,
-            :administrators_title, :administrators_path,
-            :authors_title, :authors_path,
-            :communication_posts_title, :communication_posts_path,
-            :education_programs_title, :education_programs_path,
-            :persons_title, :persons_path,
-            :research_articles_title, :research_articles_path,
-            :research_volumes_title, :research_volumes_path,
-            :researchers_title, :researchers_path,
-            :teachers_title, :teachers_path,
-            presence: true
-
-  def to_s
-    website.to_s
-  end
-
-  def git_path(website)
-    nil
-  end
-
-  def git_dependencies(website)
-    dependencies = []
-    dependencies << Communication::Website::Structure::Persons.find(id)
-    dependencies << Communication::Website::Structure::Administrators.find(id)
-    dependencies << Communication::Website::Structure::Authors.find(id) if website.authors.any?
-    dependencies << Communication::Website::Structure::CommunicationPosts.find(id) if website.posts.published.any?
-
-    if website.about.is_a? Education::School
-      dependencies << Communication::Website::Structure::EducationPrograms.find(id)
-      dependencies << Communication::Website::Structure::Teachers.find(id)
-    elsif website.about.is_a? Research::Journal
-      dependencies << Communication::Website::Structure::Researchers.find(id)
-      dependencies << Communication::Website::Structure::ResearchVolumes.find(id)
-      dependencies << Communication::Website::Structure::ResearchArticles.find(id)
-    end
-    dependencies
-  end
-
-
-end
diff --git a/app/models/communication/website/structure/administrators.rb b/app/models/communication/website/structure/administrators.rb
deleted file mode 100644
index 0f85c40b6..000000000
--- a/app/models/communication/website/structure/administrators.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# == Schema Information
-#
-# Table name: communication_website_structures
-#
-#  id                              :uuid             not null, primary key
-#  administrators_description      :text             default("Liste des membres de l'équipe administrative")
-#  administrators_path             :string           default("equipe-administrative")
-#  administrators_title            :string           default("Équipe administrative")
-#  authors_description             :text             default("Liste des membres de l'équipe éditoriale")
-#  authors_path                    :string           default("equipe-editoriale")
-#  authors_title                   :string           default("Équipe éditoriale")
-#  communication_posts_description :text             default("Liste des actualités")
-#  communication_posts_path        :string           default("actualites")
-#  communication_posts_title       :string           default("Actualités")
-#  education_programs_description  :text             default("Liste des formations proposées")
-#  education_programs_path         :string           default("offre-de-formation")
-#  education_programs_title        :string           default("L'offre de formation")
-#  home_title                      :string           default("Accueil")
-#  persons_description             :text             default("Liste des membres de l'équipe")
-#  persons_path                    :string           default("equipe")
-#  persons_title                   :string           default("Équipe")
-#  research_articles_description   :text             default("Liste des articles")
-#  research_articles_path          :string           default("articles")
-#  research_articles_title         :string           default("Articles")
-#  research_volumes_description    :text             default("Liste des volumes")
-#  research_volumes_path           :string           default("volumes")
-#  research_volumes_title          :string           default("Volumes")
-#  researchers_description         :text             default("Liste des membres de l'équipe de recherche")
-#  researchers_path                :string           default("equipe-de-recherche")
-#  researchers_title               :string           default("Équipe de recherche")
-#  teachers_description            :text             default("Liste des membres de l'équipe pédagogique")
-#  teachers_path                   :string           default("equipe-pedagogique")
-#  teachers_title                  :string           default("Équipe pédagogique")
-#  created_at                      :datetime         not null
-#  updated_at                      :datetime         not null
-#  communication_website_id        :uuid             not null, indexed
-#  university_id                   :uuid             not null, indexed
-#
-# Indexes
-#
-#  idx_comm_website_structures_on_communication_website_id  (communication_website_id)
-#  index_communication_website_structures_on_university_id  (university_id)
-#
-# Foreign Keys
-#
-#  fk_rails_06c815ee8c  (communication_website_id => communication_websites.id)
-#  fk_rails_167390416d  (university_id => universities.id)
-#
-class Communication::Website::Structure::Administrators < Communication::Website::Structure
-
-  def self.polymorphic_name
-    'Communication::Website::Structure::Administrators'
-  end
-
-  def git_path(website)
-    "content/administrators/_index.html"
-  end
-
-end
diff --git a/app/models/communication/website/structure/authors.rb b/app/models/communication/website/structure/authors.rb
deleted file mode 100644
index 302684771..000000000
--- a/app/models/communication/website/structure/authors.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# == Schema Information
-#
-# Table name: communication_website_structures
-#
-#  id                              :uuid             not null, primary key
-#  administrators_description      :text             default("Liste des membres de l'équipe administrative")
-#  administrators_path             :string           default("equipe-administrative")
-#  administrators_title            :string           default("Équipe administrative")
-#  authors_description             :text             default("Liste des membres de l'équipe éditoriale")
-#  authors_path                    :string           default("equipe-editoriale")
-#  authors_title                   :string           default("Équipe éditoriale")
-#  communication_posts_description :text             default("Liste des actualités")
-#  communication_posts_path        :string           default("actualites")
-#  communication_posts_title       :string           default("Actualités")
-#  education_programs_description  :text             default("Liste des formations proposées")
-#  education_programs_path         :string           default("offre-de-formation")
-#  education_programs_title        :string           default("L'offre de formation")
-#  home_title                      :string           default("Accueil")
-#  persons_description             :text             default("Liste des membres de l'équipe")
-#  persons_path                    :string           default("equipe")
-#  persons_title                   :string           default("Équipe")
-#  research_articles_description   :text             default("Liste des articles")
-#  research_articles_path          :string           default("articles")
-#  research_articles_title         :string           default("Articles")
-#  research_volumes_description    :text             default("Liste des volumes")
-#  research_volumes_path           :string           default("volumes")
-#  research_volumes_title          :string           default("Volumes")
-#  researchers_description         :text             default("Liste des membres de l'équipe de recherche")
-#  researchers_path                :string           default("equipe-de-recherche")
-#  researchers_title               :string           default("Équipe de recherche")
-#  teachers_description            :text             default("Liste des membres de l'équipe pédagogique")
-#  teachers_path                   :string           default("equipe-pedagogique")
-#  teachers_title                  :string           default("Équipe pédagogique")
-#  created_at                      :datetime         not null
-#  updated_at                      :datetime         not null
-#  communication_website_id        :uuid             not null, indexed
-#  university_id                   :uuid             not null, indexed
-#
-# Indexes
-#
-#  idx_comm_website_structures_on_communication_website_id  (communication_website_id)
-#  index_communication_website_structures_on_university_id  (university_id)
-#
-# Foreign Keys
-#
-#  fk_rails_06c815ee8c  (communication_website_id => communication_websites.id)
-#  fk_rails_167390416d  (university_id => universities.id)
-#
-class Communication::Website::Structure::Authors < Communication::Website::Structure
-
-  def self.polymorphic_name
-    'Communication::Website::Structure::Authors'
-  end
-
-  def git_path(website)
-    "content/authors/_index.html"
-  end
-
-end
diff --git a/app/models/communication/website/structure/communication_posts.rb b/app/models/communication/website/structure/communication_posts.rb
deleted file mode 100644
index 98997fab8..000000000
--- a/app/models/communication/website/structure/communication_posts.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# == Schema Information
-#
-# Table name: communication_website_structures
-#
-#  id                              :uuid             not null, primary key
-#  administrators_description      :text             default("Liste des membres de l'équipe administrative")
-#  administrators_path             :string           default("equipe-administrative")
-#  administrators_title            :string           default("Équipe administrative")
-#  authors_description             :text             default("Liste des membres de l'équipe éditoriale")
-#  authors_path                    :string           default("equipe-editoriale")
-#  authors_title                   :string           default("Équipe éditoriale")
-#  communication_posts_description :text             default("Liste des actualités")
-#  communication_posts_path        :string           default("actualites")
-#  communication_posts_title       :string           default("Actualités")
-#  education_programs_description  :text             default("Liste des formations proposées")
-#  education_programs_path         :string           default("offre-de-formation")
-#  education_programs_title        :string           default("L'offre de formation")
-#  home_title                      :string           default("Accueil")
-#  persons_description             :text             default("Liste des membres de l'équipe")
-#  persons_path                    :string           default("equipe")
-#  persons_title                   :string           default("Équipe")
-#  research_articles_description   :text             default("Liste des articles")
-#  research_articles_path          :string           default("articles")
-#  research_articles_title         :string           default("Articles")
-#  research_volumes_description    :text             default("Liste des volumes")
-#  research_volumes_path           :string           default("volumes")
-#  research_volumes_title          :string           default("Volumes")
-#  researchers_description         :text             default("Liste des membres de l'équipe de recherche")
-#  researchers_path                :string           default("equipe-de-recherche")
-#  researchers_title               :string           default("Équipe de recherche")
-#  teachers_description            :text             default("Liste des membres de l'équipe pédagogique")
-#  teachers_path                   :string           default("equipe-pedagogique")
-#  teachers_title                  :string           default("Équipe pédagogique")
-#  created_at                      :datetime         not null
-#  updated_at                      :datetime         not null
-#  communication_website_id        :uuid             not null, indexed
-#  university_id                   :uuid             not null, indexed
-#
-# Indexes
-#
-#  idx_comm_website_structures_on_communication_website_id  (communication_website_id)
-#  index_communication_website_structures_on_university_id  (university_id)
-#
-# Foreign Keys
-#
-#  fk_rails_06c815ee8c  (communication_website_id => communication_websites.id)
-#  fk_rails_167390416d  (university_id => universities.id)
-#
-class Communication::Website::Structure::CommunicationPosts < Communication::Website::Structure
-
-  def self.polymorphic_name
-    'Communication::Website::Structure::CommunicationPosts'
-  end
-
-  def git_path(website)
-    "content/posts/_index.html"
-  end
-
-end
diff --git a/app/models/communication/website/structure/education_programs.rb b/app/models/communication/website/structure/education_programs.rb
deleted file mode 100644
index 6496d886d..000000000
--- a/app/models/communication/website/structure/education_programs.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# == Schema Information
-#
-# Table name: communication_website_structures
-#
-#  id                              :uuid             not null, primary key
-#  administrators_description      :text             default("Liste des membres de l'équipe administrative")
-#  administrators_path             :string           default("equipe-administrative")
-#  administrators_title            :string           default("Équipe administrative")
-#  authors_description             :text             default("Liste des membres de l'équipe éditoriale")
-#  authors_path                    :string           default("equipe-editoriale")
-#  authors_title                   :string           default("Équipe éditoriale")
-#  communication_posts_description :text             default("Liste des actualités")
-#  communication_posts_path        :string           default("actualites")
-#  communication_posts_title       :string           default("Actualités")
-#  education_programs_description  :text             default("Liste des formations proposées")
-#  education_programs_path         :string           default("offre-de-formation")
-#  education_programs_title        :string           default("L'offre de formation")
-#  home_title                      :string           default("Accueil")
-#  persons_description             :text             default("Liste des membres de l'équipe")
-#  persons_path                    :string           default("equipe")
-#  persons_title                   :string           default("Équipe")
-#  research_articles_description   :text             default("Liste des articles")
-#  research_articles_path          :string           default("articles")
-#  research_articles_title         :string           default("Articles")
-#  research_volumes_description    :text             default("Liste des volumes")
-#  research_volumes_path           :string           default("volumes")
-#  research_volumes_title          :string           default("Volumes")
-#  researchers_description         :text             default("Liste des membres de l'équipe de recherche")
-#  researchers_path                :string           default("equipe-de-recherche")
-#  researchers_title               :string           default("Équipe de recherche")
-#  teachers_description            :text             default("Liste des membres de l'équipe pédagogique")
-#  teachers_path                   :string           default("equipe-pedagogique")
-#  teachers_title                  :string           default("Équipe pédagogique")
-#  created_at                      :datetime         not null
-#  updated_at                      :datetime         not null
-#  communication_website_id        :uuid             not null, indexed
-#  university_id                   :uuid             not null, indexed
-#
-# Indexes
-#
-#  idx_comm_website_structures_on_communication_website_id  (communication_website_id)
-#  index_communication_website_structures_on_university_id  (university_id)
-#
-# Foreign Keys
-#
-#  fk_rails_06c815ee8c  (communication_website_id => communication_websites.id)
-#  fk_rails_167390416d  (university_id => universities.id)
-#
-class Communication::Website::Structure::EducationPrograms < Communication::Website::Structure
-
-  def self.polymorphic_name
-    'Communication::Website::Structure::EducationPrograms'
-  end
-
-  def git_path(website)
-    "content/programs/_index.html"
-  end
-
-end
diff --git a/app/models/communication/website/structure/persons.rb b/app/models/communication/website/structure/persons.rb
deleted file mode 100644
index 106aa3679..000000000
--- a/app/models/communication/website/structure/persons.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# == Schema Information
-#
-# Table name: communication_website_structures
-#
-#  id                              :uuid             not null, primary key
-#  administrators_description      :text             default("Liste des membres de l'équipe administrative")
-#  administrators_path             :string           default("equipe-administrative")
-#  administrators_title            :string           default("Équipe administrative")
-#  authors_description             :text             default("Liste des membres de l'équipe éditoriale")
-#  authors_path                    :string           default("equipe-editoriale")
-#  authors_title                   :string           default("Équipe éditoriale")
-#  communication_posts_description :text             default("Liste des actualités")
-#  communication_posts_path        :string           default("actualites")
-#  communication_posts_title       :string           default("Actualités")
-#  education_programs_description  :text             default("Liste des formations proposées")
-#  education_programs_path         :string           default("offre-de-formation")
-#  education_programs_title        :string           default("L'offre de formation")
-#  home_title                      :string           default("Accueil")
-#  persons_description             :text             default("Liste des membres de l'équipe")
-#  persons_path                    :string           default("equipe")
-#  persons_title                   :string           default("Équipe")
-#  research_articles_description   :text             default("Liste des articles")
-#  research_articles_path          :string           default("articles")
-#  research_articles_title         :string           default("Articles")
-#  research_volumes_description    :text             default("Liste des volumes")
-#  research_volumes_path           :string           default("volumes")
-#  research_volumes_title          :string           default("Volumes")
-#  researchers_description         :text             default("Liste des membres de l'équipe de recherche")
-#  researchers_path                :string           default("equipe-de-recherche")
-#  researchers_title               :string           default("Équipe de recherche")
-#  teachers_description            :text             default("Liste des membres de l'équipe pédagogique")
-#  teachers_path                   :string           default("equipe-pedagogique")
-#  teachers_title                  :string           default("Équipe pédagogique")
-#  created_at                      :datetime         not null
-#  updated_at                      :datetime         not null
-#  communication_website_id        :uuid             not null, indexed
-#  university_id                   :uuid             not null, indexed
-#
-# Indexes
-#
-#  idx_comm_website_structures_on_communication_website_id  (communication_website_id)
-#  index_communication_website_structures_on_university_id  (university_id)
-#
-# Foreign Keys
-#
-#  fk_rails_06c815ee8c  (communication_website_id => communication_websites.id)
-#  fk_rails_167390416d  (university_id => universities.id)
-#
-class Communication::Website::Structure::Persons < Communication::Website::Structure
-
-  def self.polymorphic_name
-    'Communication::Website::Structure::Persons'
-  end
-
-  def git_path(website)
-    "content/persons/_index.html"
-  end
-
-end
diff --git a/app/models/communication/website/structure/research_articles.rb b/app/models/communication/website/structure/research_articles.rb
deleted file mode 100644
index e5d6c4b6d..000000000
--- a/app/models/communication/website/structure/research_articles.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# == Schema Information
-#
-# Table name: communication_website_structures
-#
-#  id                              :uuid             not null, primary key
-#  administrators_description      :text             default("Liste des membres de l'équipe administrative")
-#  administrators_path             :string           default("equipe-administrative")
-#  administrators_title            :string           default("Équipe administrative")
-#  authors_description             :text             default("Liste des membres de l'équipe éditoriale")
-#  authors_path                    :string           default("equipe-editoriale")
-#  authors_title                   :string           default("Équipe éditoriale")
-#  communication_posts_description :text             default("Liste des actualités")
-#  communication_posts_path        :string           default("actualites")
-#  communication_posts_title       :string           default("Actualités")
-#  education_programs_description  :text             default("Liste des formations proposées")
-#  education_programs_path         :string           default("offre-de-formation")
-#  education_programs_title        :string           default("L'offre de formation")
-#  home_title                      :string           default("Accueil")
-#  persons_description             :text             default("Liste des membres de l'équipe")
-#  persons_path                    :string           default("equipe")
-#  persons_title                   :string           default("Équipe")
-#  research_articles_description   :text             default("Liste des articles")
-#  research_articles_path          :string           default("articles")
-#  research_articles_title         :string           default("Articles")
-#  research_volumes_description    :text             default("Liste des volumes")
-#  research_volumes_path           :string           default("volumes")
-#  research_volumes_title          :string           default("Volumes")
-#  researchers_description         :text             default("Liste des membres de l'équipe de recherche")
-#  researchers_path                :string           default("equipe-de-recherche")
-#  researchers_title               :string           default("Équipe de recherche")
-#  teachers_description            :text             default("Liste des membres de l'équipe pédagogique")
-#  teachers_path                   :string           default("equipe-pedagogique")
-#  teachers_title                  :string           default("Équipe pédagogique")
-#  created_at                      :datetime         not null
-#  updated_at                      :datetime         not null
-#  communication_website_id        :uuid             not null, indexed
-#  university_id                   :uuid             not null, indexed
-#
-# Indexes
-#
-#  idx_comm_website_structures_on_communication_website_id  (communication_website_id)
-#  index_communication_website_structures_on_university_id  (university_id)
-#
-# Foreign Keys
-#
-#  fk_rails_06c815ee8c  (communication_website_id => communication_websites.id)
-#  fk_rails_167390416d  (university_id => universities.id)
-#
-class Communication::Website::Structure::ResearchArticles < Communication::Website::Structure
-
-  def self.polymorphic_name
-    'Communication::Website::Structure::ResearchArticles'
-  end
-
-  def git_path(website)
-    "content/articles/_index.html"
-  end
-
-end
diff --git a/app/models/communication/website/structure/research_volumes.rb b/app/models/communication/website/structure/research_volumes.rb
deleted file mode 100644
index 41d8c182a..000000000
--- a/app/models/communication/website/structure/research_volumes.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# == Schema Information
-#
-# Table name: communication_website_structures
-#
-#  id                              :uuid             not null, primary key
-#  administrators_description      :text             default("Liste des membres de l'équipe administrative")
-#  administrators_path             :string           default("equipe-administrative")
-#  administrators_title            :string           default("Équipe administrative")
-#  authors_description             :text             default("Liste des membres de l'équipe éditoriale")
-#  authors_path                    :string           default("equipe-editoriale")
-#  authors_title                   :string           default("Équipe éditoriale")
-#  communication_posts_description :text             default("Liste des actualités")
-#  communication_posts_path        :string           default("actualites")
-#  communication_posts_title       :string           default("Actualités")
-#  education_programs_description  :text             default("Liste des formations proposées")
-#  education_programs_path         :string           default("offre-de-formation")
-#  education_programs_title        :string           default("L'offre de formation")
-#  home_title                      :string           default("Accueil")
-#  persons_description             :text             default("Liste des membres de l'équipe")
-#  persons_path                    :string           default("equipe")
-#  persons_title                   :string           default("Équipe")
-#  research_articles_description   :text             default("Liste des articles")
-#  research_articles_path          :string           default("articles")
-#  research_articles_title         :string           default("Articles")
-#  research_volumes_description    :text             default("Liste des volumes")
-#  research_volumes_path           :string           default("volumes")
-#  research_volumes_title          :string           default("Volumes")
-#  researchers_description         :text             default("Liste des membres de l'équipe de recherche")
-#  researchers_path                :string           default("equipe-de-recherche")
-#  researchers_title               :string           default("Équipe de recherche")
-#  teachers_description            :text             default("Liste des membres de l'équipe pédagogique")
-#  teachers_path                   :string           default("equipe-pedagogique")
-#  teachers_title                  :string           default("Équipe pédagogique")
-#  created_at                      :datetime         not null
-#  updated_at                      :datetime         not null
-#  communication_website_id        :uuid             not null, indexed
-#  university_id                   :uuid             not null, indexed
-#
-# Indexes
-#
-#  idx_comm_website_structures_on_communication_website_id  (communication_website_id)
-#  index_communication_website_structures_on_university_id  (university_id)
-#
-# Foreign Keys
-#
-#  fk_rails_06c815ee8c  (communication_website_id => communication_websites.id)
-#  fk_rails_167390416d  (university_id => universities.id)
-#
-class Communication::Website::Structure::ResearchVolumes < Communication::Website::Structure
-
-  def self.polymorphic_name
-    'Communication::Website::Structure::ResearchVolumes'
-  end
-
-  def git_path(website)
-    "content/volumes/_index.html"
-  end
-
-end
diff --git a/app/models/communication/website/structure/researchers.rb b/app/models/communication/website/structure/researchers.rb
deleted file mode 100644
index 903ae90c1..000000000
--- a/app/models/communication/website/structure/researchers.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# == Schema Information
-#
-# Table name: communication_website_structures
-#
-#  id                              :uuid             not null, primary key
-#  administrators_description      :text             default("Liste des membres de l'équipe administrative")
-#  administrators_path             :string           default("equipe-administrative")
-#  administrators_title            :string           default("Équipe administrative")
-#  authors_description             :text             default("Liste des membres de l'équipe éditoriale")
-#  authors_path                    :string           default("equipe-editoriale")
-#  authors_title                   :string           default("Équipe éditoriale")
-#  communication_posts_description :text             default("Liste des actualités")
-#  communication_posts_path        :string           default("actualites")
-#  communication_posts_title       :string           default("Actualités")
-#  education_programs_description  :text             default("Liste des formations proposées")
-#  education_programs_path         :string           default("offre-de-formation")
-#  education_programs_title        :string           default("L'offre de formation")
-#  home_title                      :string           default("Accueil")
-#  persons_description             :text             default("Liste des membres de l'équipe")
-#  persons_path                    :string           default("equipe")
-#  persons_title                   :string           default("Équipe")
-#  research_articles_description   :text             default("Liste des articles")
-#  research_articles_path          :string           default("articles")
-#  research_articles_title         :string           default("Articles")
-#  research_volumes_description    :text             default("Liste des volumes")
-#  research_volumes_path           :string           default("volumes")
-#  research_volumes_title          :string           default("Volumes")
-#  researchers_description         :text             default("Liste des membres de l'équipe de recherche")
-#  researchers_path                :string           default("equipe-de-recherche")
-#  researchers_title               :string           default("Équipe de recherche")
-#  teachers_description            :text             default("Liste des membres de l'équipe pédagogique")
-#  teachers_path                   :string           default("equipe-pedagogique")
-#  teachers_title                  :string           default("Équipe pédagogique")
-#  created_at                      :datetime         not null
-#  updated_at                      :datetime         not null
-#  communication_website_id        :uuid             not null, indexed
-#  university_id                   :uuid             not null, indexed
-#
-# Indexes
-#
-#  idx_comm_website_structures_on_communication_website_id  (communication_website_id)
-#  index_communication_website_structures_on_university_id  (university_id)
-#
-# Foreign Keys
-#
-#  fk_rails_06c815ee8c  (communication_website_id => communication_websites.id)
-#  fk_rails_167390416d  (university_id => universities.id)
-#
-class Communication::Website::Structure::Researchers < Communication::Website::Structure
-
-  def self.polymorphic_name
-    'Communication::Website::Structure::Researchers'
-  end
-
-  def git_path(website)
-    "content/researchers/_index.html"
-  end
-
-end
diff --git a/app/models/communication/website/structure/teachers.rb b/app/models/communication/website/structure/teachers.rb
deleted file mode 100644
index ff7a3d298..000000000
--- a/app/models/communication/website/structure/teachers.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# == Schema Information
-#
-# Table name: communication_website_structures
-#
-#  id                              :uuid             not null, primary key
-#  administrators_description      :text             default("Liste des membres de l'équipe administrative")
-#  administrators_path             :string           default("equipe-administrative")
-#  administrators_title            :string           default("Équipe administrative")
-#  authors_description             :text             default("Liste des membres de l'équipe éditoriale")
-#  authors_path                    :string           default("equipe-editoriale")
-#  authors_title                   :string           default("Équipe éditoriale")
-#  communication_posts_description :text             default("Liste des actualités")
-#  communication_posts_path        :string           default("actualites")
-#  communication_posts_title       :string           default("Actualités")
-#  education_programs_description  :text             default("Liste des formations proposées")
-#  education_programs_path         :string           default("offre-de-formation")
-#  education_programs_title        :string           default("L'offre de formation")
-#  home_title                      :string           default("Accueil")
-#  persons_description             :text             default("Liste des membres de l'équipe")
-#  persons_path                    :string           default("equipe")
-#  persons_title                   :string           default("Équipe")
-#  research_articles_description   :text             default("Liste des articles")
-#  research_articles_path          :string           default("articles")
-#  research_articles_title         :string           default("Articles")
-#  research_volumes_description    :text             default("Liste des volumes")
-#  research_volumes_path           :string           default("volumes")
-#  research_volumes_title          :string           default("Volumes")
-#  researchers_description         :text             default("Liste des membres de l'équipe de recherche")
-#  researchers_path                :string           default("equipe-de-recherche")
-#  researchers_title               :string           default("Équipe de recherche")
-#  teachers_description            :text             default("Liste des membres de l'équipe pédagogique")
-#  teachers_path                   :string           default("equipe-pedagogique")
-#  teachers_title                  :string           default("Équipe pédagogique")
-#  created_at                      :datetime         not null
-#  updated_at                      :datetime         not null
-#  communication_website_id        :uuid             not null, indexed
-#  university_id                   :uuid             not null, indexed
-#
-# Indexes
-#
-#  idx_comm_website_structures_on_communication_website_id  (communication_website_id)
-#  index_communication_website_structures_on_university_id  (university_id)
-#
-# Foreign Keys
-#
-#  fk_rails_06c815ee8c  (communication_website_id => communication_websites.id)
-#  fk_rails_167390416d  (university_id => universities.id)
-#
-class Communication::Website::Structure::Teachers < Communication::Website::Structure
-
-  def self.polymorphic_name
-    'Communication::Website::Structure::Teachers'
-  end
-
-  def git_path(website)
-    "content/teachers/_index.html"
-  end
-
-end
diff --git a/app/models/communication/website/with_home.rb b/app/models/communication/website/with_home.rb
deleted file mode 100644
index 887713e89..000000000
--- a/app/models/communication/website/with_home.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-module Communication::Website::WithHome
-  extend ActiveSupport::Concern
-
-  included do
-    has_one :home,
-            class_name: 'Communication::Website::Home',
-            foreign_key: :communication_website_id,
-            dependent: :destroy
-
-    after_create :create_home
-  end
-
-  protected
-
-  def create_home
-    build_home(university_id: university_id).save
-  end
-end
diff --git a/app/models/communication/website/with_index_pages.rb b/app/models/communication/website/with_index_pages.rb
index ef91664a2..8619f8068 100644
--- a/app/models/communication/website/with_index_pages.rb
+++ b/app/models/communication/website/with_index_pages.rb
@@ -8,10 +8,12 @@ module Communication::Website::WithIndexPages
              dependent: :destroy
 
     def index_for(kind)
-      index_pages.where(kind: kind).first_or_initialize(
-        title: I18n.t("communication.website.index_pages.default.#{kind}.title"),
-        path: I18n.t("communication.website.index_pages.default.#{kind}.path"),
-        description: I18n.t("communication.website.index_pages.default.#{kind}.description")
+      klass = "Communication::Website::IndexPage::#{kind.to_s.camelize}".constantize
+      key = "communication.website.index_pages.default.#{kind.to_s}"
+      klass.where(communication_website_id: id, kind: kind).first_or_create(
+        title: I18n.t("#{key}.title"),
+        path: I18n.t("#{key}.path"),
+        description: I18n.t("#{key}.description")
       )
     end
   end
diff --git a/app/models/communication/website/with_structure.rb b/app/models/communication/website/with_structure.rb
deleted file mode 100644
index 0cf849296..000000000
--- a/app/models/communication/website/with_structure.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-module Communication::Website::WithStructure
-  extend ActiveSupport::Concern
-
-  included do
-    has_one :structure,
-            class_name: 'Communication::Website::Structure',
-            foreign_key: :communication_website_id,
-            dependent: :destroy
-
-    after_create :create_structure
-  end
-
-  protected
-
-  def create_structure
-    build_structure(university_id: university_id).save
-  end
-end
diff --git a/app/views/admin/communication/website/categories/static.html.erb b/app/views/admin/communication/website/categories/static.html.erb
index 88af1c3f3..1b5b089e4 100644
--- a/app/views/admin/communication/website/categories/static.html.erb
+++ b/app/views/admin/communication/website/categories/static.html.erb
@@ -1,6 +1,6 @@
 ---
-title: "<%= @category.name %>"
-slug: "<%= @category.slug %>"
-position: <%= @category.position %>
+title: "<%= @about.name %>"
+slug: "<%= @about.slug %>"
+position: <%= @about.position %>
 ---
-<%= prepare_html_for_static @category.description, @category.university %>
+<%= prepare_html_for_static @about.description, @about.university %>
diff --git a/app/views/admin/communication/website/homes/edit.html.erb b/app/views/admin/communication/website/homes/edit.html.erb
deleted file mode 100644
index 5f6ed054c..000000000
--- a/app/views/admin/communication/website/homes/edit.html.erb
+++ /dev/null
@@ -1,39 +0,0 @@
-<% content_for :title, t('activerecord.models.communication/website/home.one') %>
-
-<%= render 'admin/communication/websites/sidebar' do %>
-  <%= simple_form_for @home, url: admin_communication_website_home_path(website_id: @website.id) do |f| %>
-    <div class="row">
-      <div class="col-md-8">
-        <div class="card flex-fill w-100">
-          <div class="card-header">
-            <h5 class="card-title mb-0"><%= t('content') %></h5>
-          </div>
-          <div class="card-body">
-            <%= f.input :description %>
-            <%= f.input :text, as: :summernote %>
-          </div>
-        </div>
-      </div>
-      <div class="col-md-4">
-        <div class="card flex-fill w-100">
-          <div class="card-header">
-            <h5 class="card-title mb-0"><%= t('activerecord.attributes.communication/website/page.featured_image') %></h5>
-          </div>
-          <div class="card-body">
-            <%= f.input :featured_image,
-                        as: :single_deletable_file,
-                        direct_upload: true,
-                        label: false,
-                        input_html: { accept: '.jpg,.jpeg,.png' },
-                        preview: true
-             %>
-             <%= f.input :featured_image_alt %>
-          </div>
-        </div>
-      </div>
-    </div>
-    <% content_for :action_bar_right do %>
-      <%= submit f %>
-    <% end %>
-  <% end %>
-<% end %>
diff --git a/app/views/admin/communication/website/homes/static.html.erb b/app/views/admin/communication/website/homes/static.html.erb
deleted file mode 100644
index 94f6b2024..000000000
--- a/app/views/admin/communication/website/homes/static.html.erb
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: >
-  <%= @home.website.name %>
-breadcrumb_title: "<%= @website.structure.home_title %>"
-<% if @home.featured_image.attached? %>
-image: "<%= @home.featured_image.blob.id %>"
-image_alt: "<%= @home.featured_image_alt %>"
-<% end %>
-description: >
-  <%= @home.description %>
----
-<%= prepare_html_for_static @home.text, @home.university %>
diff --git a/app/views/admin/communication/website/index_page/_static.html.erb b/app/views/admin/communication/website/index_page/_static.html.erb
new file mode 100644
index 000000000..c61f21285
--- /dev/null
+++ b/app/views/admin/communication/website/index_page/_static.html.erb
@@ -0,0 +1,12 @@
+---
+title: >
+  <%= @about.title %>
+url: <%= @about.url %>
+<% if @about.featured_image.attached? %>
+image: "<%= @about.featured_image.blob.id %>"
+image_alt: "<%= @about.featured_image_alt %>"
+<% end %>
+description: >
+  <%= @about.description %>
+---
+<%= prepare_html_for_static @about.text, @website.university %>
diff --git a/app/views/admin/communication/website/index_page/administrators/static.html.erb b/app/views/admin/communication/website/index_page/administrators/static.html.erb
new file mode 100644
index 000000000..0042b13ce
--- /dev/null
+++ b/app/views/admin/communication/website/index_page/administrators/static.html.erb
@@ -0,0 +1 @@
+<%= render 'admin/communication/website/index_page/static' %>
diff --git a/app/views/admin/communication/website/index_page/authors/static.html.erb b/app/views/admin/communication/website/index_page/authors/static.html.erb
new file mode 100644
index 000000000..0042b13ce
--- /dev/null
+++ b/app/views/admin/communication/website/index_page/authors/static.html.erb
@@ -0,0 +1 @@
+<%= render 'admin/communication/website/index_page/static' %>
diff --git a/app/views/admin/communication/website/index_page/communication_posts/static.html.erb b/app/views/admin/communication/website/index_page/communication_posts/static.html.erb
new file mode 100644
index 000000000..0042b13ce
--- /dev/null
+++ b/app/views/admin/communication/website/index_page/communication_posts/static.html.erb
@@ -0,0 +1 @@
+<%= render 'admin/communication/website/index_page/static' %>
diff --git a/app/views/admin/communication/website/index_page/education_programs/static.html.erb b/app/views/admin/communication/website/index_page/education_programs/static.html.erb
new file mode 100644
index 000000000..0042b13ce
--- /dev/null
+++ b/app/views/admin/communication/website/index_page/education_programs/static.html.erb
@@ -0,0 +1 @@
+<%= render 'admin/communication/website/index_page/static' %>
diff --git a/app/views/admin/communication/website/index_page/homes/static.html.erb b/app/views/admin/communication/website/index_page/homes/static.html.erb
new file mode 100644
index 000000000..26f700600
--- /dev/null
+++ b/app/views/admin/communication/website/index_page/homes/static.html.erb
@@ -0,0 +1,12 @@
+---
+title: >
+  <%= @website.name %>
+breadcrumb_title: "<%= @about.title %>"
+<% if @about.featured_image.attached? %>
+image: "<%= @about.featured_image.blob.id %>"
+image_alt: "<%= @about.featured_image_alt %>"
+<% end %>
+description: >
+  <%= @about.description %>
+---
+<%= prepare_html_for_static @about.text, @website.university %>
diff --git a/app/views/admin/communication/website/index_page/persons/static.html.erb b/app/views/admin/communication/website/index_page/persons/static.html.erb
new file mode 100644
index 000000000..0042b13ce
--- /dev/null
+++ b/app/views/admin/communication/website/index_page/persons/static.html.erb
@@ -0,0 +1 @@
+<%= render 'admin/communication/website/index_page/static' %>
diff --git a/app/views/admin/communication/website/index_page/research_articles/static.html.erb b/app/views/admin/communication/website/index_page/research_articles/static.html.erb
new file mode 100644
index 000000000..0042b13ce
--- /dev/null
+++ b/app/views/admin/communication/website/index_page/research_articles/static.html.erb
@@ -0,0 +1 @@
+<%= render 'admin/communication/website/index_page/static' %>
diff --git a/app/views/admin/communication/website/index_page/research_volumes/static.html.erb b/app/views/admin/communication/website/index_page/research_volumes/static.html.erb
new file mode 100644
index 000000000..0042b13ce
--- /dev/null
+++ b/app/views/admin/communication/website/index_page/research_volumes/static.html.erb
@@ -0,0 +1 @@
+<%= render 'admin/communication/website/index_page/static' %>
diff --git a/app/views/admin/communication/website/index_page/researchers/static.html.erb b/app/views/admin/communication/website/index_page/researchers/static.html.erb
new file mode 100644
index 000000000..0042b13ce
--- /dev/null
+++ b/app/views/admin/communication/website/index_page/researchers/static.html.erb
@@ -0,0 +1 @@
+<%= render 'admin/communication/website/index_page/static' %>
diff --git a/app/views/admin/communication/website/index_page/teachers/static.html.erb b/app/views/admin/communication/website/index_page/teachers/static.html.erb
new file mode 100644
index 000000000..0042b13ce
--- /dev/null
+++ b/app/views/admin/communication/website/index_page/teachers/static.html.erb
@@ -0,0 +1 @@
+<%= render 'admin/communication/website/index_page/static' %>
diff --git a/app/views/admin/communication/website/index_pages/edit.html.erb b/app/views/admin/communication/website/index_pages/edit.html.erb
index 109bcbffd..84a91e7ac 100644
--- a/app/views/admin/communication/website/index_pages/edit.html.erb
+++ b/app/views/admin/communication/website/index_pages/edit.html.erb
@@ -10,14 +10,15 @@
             <h5 class="card-title mb-0"><%= t('content') %></h5>
           </div>
           <div class="card-body">
-            <%= f.input :title %>
+            <%= f.input :title, input_html: { name: 'communication_website_index_page[title]', id: 'communication_website_index_page_title' }  %>
             <%= f.input :path,
                         input_html: {
+                          name: 'communication_website_index_page[path]',
                           class: 'js-slug-input',
                           data: { source: '#communication_website_index_page_title' }
                         } %>
-            <%= f.input :description %>
-            <%= f.input :text, as: :summernote %>
+            <%= f.input :description, input_html: { name: 'communication_website_index_page[description]' } %>
+            <%= f.input :text, as: :summernote, input_html: { name: 'communication_website_index_page[text]' } %>
           </div>
         </div>
       </div>
@@ -31,10 +32,13 @@
                         as: :single_deletable_file,
                         direct_upload: true,
                         label: false,
-                        input_html: { accept: '.jpg,.jpeg,.png' },
+                        input_html: {
+                          accept: '.jpg,.jpeg,.png',
+                          name: 'communication_website_index_page[featured_image]'
+                        },
                         preview: true
              %>
-             <%= f.input :featured_image_alt %>
+             <%= f.input :featured_image_alt, input_html: { name: 'communication_website_index_page[featured_image_alt]' } %>
           </div>
         </div>
       </div>
diff --git a/app/views/admin/communication/website/menus/static.html.erb b/app/views/admin/communication/website/menus/static.html.erb
index 8e9ef0627..7fded16b3 100644
--- a/app/views/admin/communication/website/menus/static.html.erb
+++ b/app/views/admin/communication/website/menus/static.html.erb
@@ -1,4 +1,4 @@
-<%= raw @menu.items
+<%= raw @about.items
              .root
              .ordered
              .map(&:to_static_hash)
diff --git a/app/views/admin/communication/website/pages/static.html.erb b/app/views/admin/communication/website/pages/static.html.erb
index 27e72b066..2462dbddf 100644
--- a/app/views/admin/communication/website/pages/static.html.erb
+++ b/app/views/admin/communication/website/pages/static.html.erb
@@ -1,17 +1,17 @@
 ---
 title: >
-  <%= @page.title %>
-url: "<%= @page.path %>/"
-position: <%= @page.position %>
-<% if @page.best_featured_image.attached? %>
-image: "<%= @page.best_featured_image.blob.id %>"
-image_alt: "<%= @page.featured_image_alt %>"
+  <%= @about.title %>
+url: "<%= @about.path %>/"
+position: <%= @about.position %>
+<% if @about.best_featured_image.attached? %>
+image: "<%= @about.best_featured_image.blob.id %>"
+image_alt: "<%= @about.featured_image_alt %>"
 <% end %>
-<% if @page.related_category %>
-category: "<%= @page.related_category.path %>/"
+<% if @about.related_category %>
+category: "<%= @about.related_category.path %>/"
 <% end %>
 description: >
-  <%= prepare_text_for_static @page.description %>
-<%= render 'admin/communication/website/blocks/static', about: @page %>
+  <%= prepare_text_for_static @about.description %>
+<%= render 'admin/communication/website/blocks/static', about: @about %>
 ---
-<%= prepare_html_for_static @page.text, @page.university %>
+<%= prepare_html_for_static @about.text, @about.university %>
diff --git a/app/views/admin/communication/website/posts/static.html.erb b/app/views/admin/communication/website/posts/static.html.erb
index 0d88cc9d4..b9e515380 100644
--- a/app/views/admin/communication/website/posts/static.html.erb
+++ b/app/views/admin/communication/website/posts/static.html.erb
@@ -1,25 +1,25 @@
 ---
-title: "<%= @post.title %>"
-date: <%= @post.published_at %> UTC
-slug: "<%= @post.slug %>"
-<% if @post.pinned %>
+title: "<%= @about.title %>"
+date: <%= @about.published_at %> UTC
+slug: "<%= @about.slug %>"
+<% if @about.pinned %>
 weight: 1
 <% end %>
-<% if @post.author %>
+<% if @about.author %>
 authors:
-  - "<%= @post.author.slug %>"
+  - "<%= @about.author.slug %>"
 <% end %>
-<% if @post.categories.any? %>
+<% if @about.categories.any? %>
 categories:
-  <% @post.categories.each do |category| %>
+  <% @about.categories.each do |category| %>
   - "<%= category.path %>/"
   <% end %>
 <% end %>
-<% if @post.featured_image.attached? %>
-image: "<%= @post.featured_image.blob.id %>"
-image_alt: "<%= @post.featured_image_alt %>"
+<% if @about.featured_image.attached? %>
+image: "<%= @about.featured_image.blob.id %>"
+image_alt: "<%= @about.featured_image_alt %>"
 <% end %>
 description: >
-  <%= prepare_text_for_static @post.description %>
+  <%= prepare_text_for_static @about.description %>
 ---
-<%= prepare_html_for_static @post.text, @post.university %>
+<%= prepare_html_for_static @about.text, @about.university %>
diff --git a/app/views/admin/communication/website/structure/administrators/static.html.erb b/app/views/admin/communication/website/structure/administrators/static.html.erb
deleted file mode 100644
index 97c1ac8af..000000000
--- a/app/views/admin/communication/website/structure/administrators/static.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: >
-  <%= @website.structure.administrators_title %>
-url: <%= "/#{@website.structure.persons_path}/#{@website.structure.administrators_path}" %>
-description: >
-  <%= prepare_text_for_static @website.structure.administrators_description %>
----
diff --git a/app/views/admin/communication/website/structure/authors/static.html.erb b/app/views/admin/communication/website/structure/authors/static.html.erb
deleted file mode 100644
index bf245af37..000000000
--- a/app/views/admin/communication/website/structure/authors/static.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: >
-  <%= @website.structure.authors_title %>
-url: <%= "/#{@website.structure.persons_path}/#{@website.structure.authors_path}/" %>
-description: >
-  <%= prepare_text_for_static @website.structure.authors_description %>
----
diff --git a/app/views/admin/communication/website/structure/communication_posts/static.html.erb b/app/views/admin/communication/website/structure/communication_posts/static.html.erb
deleted file mode 100644
index 9fd1a00a8..000000000
--- a/app/views/admin/communication/website/structure/communication_posts/static.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: >
-  <%= @website.structure.communication_posts_title %>
-url: <%= "/#{@website.structure.communication_posts_path}/" %>
-description: >
-  <%= prepare_text_for_static @website.structure.communication_posts_description %>
----
diff --git a/app/views/admin/communication/website/structure/education_programs/static.html.erb b/app/views/admin/communication/website/structure/education_programs/static.html.erb
deleted file mode 100644
index 8d68fb7b0..000000000
--- a/app/views/admin/communication/website/structure/education_programs/static.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: >
-  <%= @website.structure.education_programs_title %>
-url: <%= "/#{@website.structure.education_programs_path}/" %>
-description: >
-  <%= prepare_text_for_static @website.structure.education_programs_description %>
----
diff --git a/app/views/admin/communication/website/structure/persons/static.html.erb b/app/views/admin/communication/website/structure/persons/static.html.erb
deleted file mode 100644
index ca1f07015..000000000
--- a/app/views/admin/communication/website/structure/persons/static.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: >
-  <%= @website.structure.persons_title %>
-url: <%= "/#{@website.structure.persons_path}/" %>
-description: >
-  <%= prepare_text_for_static @website.structure.persons_description %>
----
diff --git a/app/views/admin/communication/website/structure/research_articles/static.html.erb b/app/views/admin/communication/website/structure/research_articles/static.html.erb
deleted file mode 100644
index 5a1b1a79f..000000000
--- a/app/views/admin/communication/website/structure/research_articles/static.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: >
-  <%= @website.structure.research_articles_title %>
-url: <%= "/#{@website.structure.research_articles_path}/" %>
-description: >
-  <%= prepare_text_for_static @website.structure.research_articles_description %>
----
diff --git a/app/views/admin/communication/website/structure/research_volumes/static.html.erb b/app/views/admin/communication/website/structure/research_volumes/static.html.erb
deleted file mode 100644
index 3d4776123..000000000
--- a/app/views/admin/communication/website/structure/research_volumes/static.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: >
-  <%= @website.structure.research_volumes_title %>
-url: <%= "/#{@website.structure.research_volumes_path}/" %>
-description: >
-  <%= prepare_text_for_static @website.structure.research_volumes_description %>
----
diff --git a/app/views/admin/communication/website/structure/researchers/static.html.erb b/app/views/admin/communication/website/structure/researchers/static.html.erb
deleted file mode 100644
index c71893397..000000000
--- a/app/views/admin/communication/website/structure/researchers/static.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: >
-  <%= @website.structure.researchers_title %>
-url: <%= "/#{@website.structure.persons_path}/#{@website.structure.researchers_path}" %>
-description: >
-  <%= prepare_text_for_static @website.structure.researchers_description %>
----
diff --git a/app/views/admin/communication/website/structure/teachers/static.html.erb b/app/views/admin/communication/website/structure/teachers/static.html.erb
deleted file mode 100644
index b6840d844..000000000
--- a/app/views/admin/communication/website/structure/teachers/static.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: >
-  <%= @website.structure.teachers_title %>
-url: <%= "/#{@website.structure.persons_path}/#{@website.structure.teachers_path}" %>
-description: >
-  <%= prepare_text_for_static @website.structure.teachers_description %>
----
diff --git a/app/views/admin/communication/website/structures/edit.html.erb b/app/views/admin/communication/website/structures/edit.html.erb
deleted file mode 100644
index 51202574e..000000000
--- a/app/views/admin/communication/website/structures/edit.html.erb
+++ /dev/null
@@ -1,121 +0,0 @@
-<% content_for :title, t('activerecord.models.communication/website/structure.one') %>
-
-<%= render 'admin/communication/websites/sidebar' do %>
-  <%= simple_form_for @structure, url: admin_communication_website_structure_path(website_id: @website.id) do |f| %>
-    <div class="row">
-      <div class="col-md-6">
-        <div class="card flex-fill w-100">
-          <div class="card-header">
-            <h5 class="card-title mb-0"><%= t('home') %></h5>
-          </div>
-          <div class="card-body">
-            <%= f.input :home_title %>
-          </div>
-        </div>
-        <div class="card flex-fill w-100">
-          <div class="card-header">
-            <h5 class="card-title mb-0"><%= Communication::Website::Post.model_name.human(count: 2) %></h5>
-          </div>
-          <div class="card-body">
-            <%= f.input :communication_posts_title %>
-            <%= f.input :communication_posts_description %>
-            <%= f.input :communication_posts_path,
-                        input_html: {
-                          class: 'js-slug-input',
-                          data: { source: '#communication_website_structure_communication_posts_title' }
-                        } %>
-          </div>
-        </div>
-        <div class="card flex-fill w-100">
-          <div class="card-header">
-            <h5 class="card-title mb-0"><%= Education::Program.model_name.human(count: 2) %></h5>
-          </div>
-          <div class="card-body">
-            <%= f.input :education_programs_title %>
-            <%= f.input :education_programs_description %>
-            <%= f.input :education_programs_path,
-                        input_html: {
-                          class: 'js-slug-input',
-                          data: { source: '#communication_website_structure_education_programs_title' }
-                        } %>
-          </div>
-        </div>
-        <div class="card flex-fill w-100">
-          <div class="card-header">
-            <h5 class="card-title mb-0"><%= Research.model_name.human %></h5>
-          </div>
-          <div class="card-body">
-            <h5 class="mb-3"><%= Research::Journal::Article.model_name.human(count: 2) %></h5>
-            <%= f.input :research_articles_title %>
-            <%= f.input :research_articles_description %>
-            <%= f.input :research_articles_path,
-                        input_html: {
-                          class: 'js-slug-input',
-                          data: { source: '#communication_website_structure_research_articles_title' }
-                        } %>
-            <h5 class="mb-3"><%= Research::Journal::Volume.model_name.human(count: 2) %></h5>
-            <%= f.input :research_volumes_title %>
-            <%= f.input :research_volumes_description %>
-            <%= f.input :research_volumes_path,
-                        input_html: {
-                          class: 'js-slug-input',
-                          data: { source: '#communication_website_structure_research_volumes_title' }
-                        } %>
-          </div>
-        </div>
-      </div>
-      <div class="col-md-6">
-        <div class="card flex-fill w-100">
-          <div class="card-header">
-            <h5 class="card-title mb-0"><%= University::Person.model_name.human(count: 2) %></h5>
-          </div>
-          <div class="card-body">
-            <h5 class="mb-3"><%= t 'enums.communication.website.menu.item.kind.staff' %></h5>
-            <%= f.input :persons_title %>
-            <%= f.input :persons_description %>
-            <%= f.input :persons_path,
-                        input_html: {
-                          class: 'js-slug-input',
-                          data: { source: '#communication_website_structure_persons_title' }
-                        } %>
-            <h5 class="mt-5 mb-3"><%= t 'enums.communication.website.menu.item.kind.administrators' %></h5>
-            <%= f.input :administrators_title %>
-            <%= f.input :administrators_description %>
-            <%= f.input :administrators_path,
-                        input_html: {
-                          class: 'js-slug-input',
-                          data: { source: '#communication_website_structure_administrators_title' }
-                        } %>
-            <h5 class="mt-5 mb-3"><%= t 'enums.communication.website.menu.item.kind.authors' %></h5>
-            <%= f.input :authors_title %>
-            <%= f.input :authors_description %>
-            <%= f.input :authors_path,
-                        input_html: {
-                          class: 'js-slug-input',
-                          data: { source: '#communication_website_structure_authors_title' }
-                        } %>
-            <h5 class="mt-5 mb-3"><%= t 'enums.communication.website.menu.item.kind.researchers' %></h5>
-            <%= f.input :researchers_title %>
-            <%= f.input :researchers_description %>
-            <%= f.input :researchers_path,
-                        input_html: {
-                          class: 'js-slug-input',
-                          data: { source: '#communication_website_structure_researchers_title' }
-                        } %>
-            <h5 class="mt-5 mb-3"><%= t 'enums.communication.website.menu.item.kind.teachers' %></h5>
-            <%= f.input :teachers_title %>
-            <%= f.input :teachers_description %>
-            <%= f.input :teachers_path,
-                        input_html: {
-                          class: 'js-slug-input',
-                          data: { source: '#communication_website_structure_teachers_title' }
-                        } %>
-          </div>
-        </div>
-      </div>
-    </div>
-    <% content_for :action_bar_right do %>
-      <%= submit f %>
-    <% end %>
-  <% end %>
-<% end %>
diff --git a/app/views/admin/communication/websites/_sidebar.html.erb b/app/views/admin/communication/websites/_sidebar.html.erb
index c8f347895..85380a937 100644
--- a/app/views/admin/communication/websites/_sidebar.html.erb
+++ b/app/views/admin/communication/websites/_sidebar.html.erb
@@ -9,11 +9,6 @@
             path: admin_communication_website_path(id: @website),
             ability: can?(:read, @website)
           },
-          {
-            title: Communication::Website::Home.model_name.human,
-            path: admin_communication_website_home_path(website_id: @website),
-            ability: can?(:read, Communication::Website::Home)
-          },
           {
             title: Communication::Website::Page.model_name.human(count: 2),
             path: admin_communication_website_pages_path(website_id: @website),
@@ -44,11 +39,6 @@
             path: admin_communication_website_indexes_path(website_id: @website),
             ability: can?(:read, Communication::Website::IndexPage)
           },
-          {
-            title: Communication::Website::Structure.model_name.human,
-            path: admin_communication_website_structure_path(website_id: @website),
-            ability: can?(:update, Communication::Website::Structure)
-          },
         ].each do |object|
           next unless object[:ability]
           active = object[:path].in? request.path
diff --git a/app/views/admin/communication/websites/show.html.erb b/app/views/admin/communication/websites/show.html.erb
index dd872787e..d129cb67f 100644
--- a/app/views/admin/communication/websites/show.html.erb
+++ b/app/views/admin/communication/websites/show.html.erb
@@ -12,18 +12,7 @@
 
 <%= render 'admin/communication/websites/sidebar' do %>
   <%= render 'admin/communication/websites/show/posts' if can? :read, Communication::Website::Post %>
-  <div class="row">
-    <% if can? :read, Communication::Website::Page %>
-      <div class="col-md-8">
-        <%= render 'admin/communication/websites/show/pages' %>
-      </div>
-    <% end %>
-    <% if can? :read, Communication::Website::Home %>
-      <div class="col-md-4">
-        <%= render 'admin/communication/websites/show/home' %>
-      </div>
-    <% end %>
-  </div>
+  <%= render 'admin/communication/websites/show/pages' if can? :read, Communication::Website::Page %>
 <% end %>
 
 <% content_for :action_bar_right do %>
diff --git a/app/views/admin/communication/websites/show/_home.html.erb b/app/views/admin/communication/websites/show/_home.html.erb
deleted file mode 100644
index f6a12f5b5..000000000
--- a/app/views/admin/communication/websites/show/_home.html.erb
+++ /dev/null
@@ -1,26 +0,0 @@
-<div class="card mb-5">
-  <div class="card-header">
-    <div class="float-end">
-      <%= link_to t('edit'),
-                  admin_communication_website_home_path(website_id: @website),
-                  class: button_classes if can?(:update, Communication::Website::Home) %>
-    </div>
-    <h2 class="card-title">
-      <%= Communication::Website::Home.model_name.human %>
-    </h2>
-  </div>
-  <div class="card-body">
-    <div class="row">
-      <% unless @website.home.text.blank? %>
-        <div class="col-md-6">
-          <%= @website.home.text %>
-        </div>
-      <% end %>
-      <% if @website.home.featured_image.attached? %>
-        <div class="col-md-6">
-          <%= image_tag @website.home.featured_image.variant(resize: '300x^'), class: 'img-fluid' %>
-        </div>
-      <% end %>
-    </div>
-  </div>
-</div>
diff --git a/app/views/admin/communication/websites/static.html.erb b/app/views/admin/communication/websites/static.html.erb
index db284ce5d..410015a86 100644
--- a/app/views/admin/communication/websites/static.html.erb
+++ b/app/views/admin/communication/websites/static.html.erb
@@ -1,2 +1,2 @@
 title: >
-  <%= @website.to_s %>
+  <%= @about.to_s %>
diff --git a/app/views/admin/education/programs/static.html.erb b/app/views/admin/education/programs/static.html.erb
index 1e2cd8a60..f734fa00a 100644
--- a/app/views/admin/education/programs/static.html.erb
+++ b/app/views/admin/education/programs/static.html.erb
@@ -1,17 +1,17 @@
 ---
-<% teacher_involvements = @program.university_person_involvements.includes(:person).ordered_by_name %>
-<% administrator_involvements = @program.involvements_through_roles.includes(:person).ordered_by_name %>
+<% teacher_involvements = @about.university_person_involvements.includes(:person).ordered_by_name %>
+<% administrator_involvements = @about.involvements_through_roles.includes(:person).ordered_by_name %>
 title: >
-  <%= @program.name %>
-url: /<%= @website.structure.education_programs_path %><%= @program.path %>/
+  <%= @about.name %>
+url: /<%= @website.index_for(:education_programs).path %><%= @about.path %>/
 description: >
-  <%= prepare_text_for_static @program.description %>
-position: <%= @program.position %>
-<% if @program.best_featured_image.attached? %>
-image: "<%= @program.best_featured_image.blob.id %>"
-image_alt: "<%= @program.featured_image_alt %>"
+  <%= prepare_text_for_static @about.description %>
+position: <%= @about.position %>
+<% if @about.best_featured_image.attached? %>
+image: "<%= @about.best_featured_image.blob.id %>"
+image_alt: "<%= @about.featured_image_alt %>"
 <% end %>
-category: "<%= @website.categories.find_by(program_id: @program.id)&.path %>/"
+category: "<%= @website.categories.find_by(program_id: @about.id)&.path %>/"
 teachers:
 <% teacher_involvements.each do |involvement| %>
   - "<%= involvement.person.slug %>"
@@ -32,7 +32,7 @@ administrators_description:
     <%= involvement.target.to_s %>
 <% end %>
 roles:
-<% @program.university_roles.ordered.each do |role| %>
+<% @about.university_roles.ordered.each do |role| %>
   - title: >
       <%= role.to_s %>
     persons:
@@ -43,9 +43,9 @@ roles:
 <% else %>
 roles: []
 <% end %>
-continuing: <%= @program.continuing %>
-level: <%= @program.level %>
-ects: <%= @program.ects %>
+continuing: <%= @about.continuing %>
+level: <%= @about.level %>
+ects: <%= @about.ects %>
 <%
 [
   :accessibility,
@@ -62,6 +62,6 @@ ects: <%= @program.ects %>
   :content
 ].each do |property| %>
 <%= property.to_s %>: >
-  <%= prepare_html_for_static @program.send("best_#{property}"), @program.university %>
+  <%= prepare_html_for_static @about.send("best_#{property}"), @about.university %>
 <% end %>
 ---
diff --git a/app/views/admin/education/schools/static.html.erb b/app/views/admin/education/schools/static.html.erb
index 9f05c6274..bb1396b0e 100644
--- a/app/views/admin/education/schools/static.html.erb
+++ b/app/views/admin/education/schools/static.html.erb
@@ -1,17 +1,17 @@
 ---
-<% administrator_involvements = @school.involvements_through_roles.includes(:person).ordered_by_name %>
+<% administrator_involvements = @about.involvements_through_roles.includes(:person).ordered_by_name %>
 name: >
-  <%= @school.name %>
+  <%= @about.name %>
 address: >
-  <%= @school.address %>
+  <%= @about.address %>
 zipcode: >
-  <%= @school.zipcode %>
+  <%= @about.zipcode %>
 city: >
-  <%= @school.city %>
+  <%= @about.city %>
 country: >
-  <%= ISO3166::Country[@school.country].translations[@school.country.downcase] %>
+  <%= ISO3166::Country[@about.country].translations[@about.country.downcase] %>
 phone: >
-  <%= @school.phone %>
+  <%= @about.phone %>
 <% if administrator_involvements.any? %>
 administrators:
 <% administrator_involvements.each do |involvement| %>
@@ -23,7 +23,7 @@ administrators_description:
     <%= involvement.target.to_s %>
 <% end %>
 roles:
-<% @school.university_roles.ordered.each do |role| %>
+<% @about.university_roles.ordered.each do |role| %>
   - title: >
       <%= role.to_s %>
     persons:
diff --git a/app/views/admin/research/journal/articles/static.html.erb b/app/views/admin/research/journal/articles/static.html.erb
index 9388ad491..d9aa95b41 100644
--- a/app/views/admin/research/journal/articles/static.html.erb
+++ b/app/views/admin/research/journal/articles/static.html.erb
@@ -1,24 +1,24 @@
 ---
-title: "<%= @article.title %>"
-slug: "<%= @article.slug %>"
+title: "<%= @about.title %>"
+slug: "<%= @about.slug %>"
 description: >
-  <%= prepare_text_for_static @article.abstract %>
-<% if @article.volume && @article.volume.path %>
+  <%= prepare_text_for_static @about.abstract %>
+<% if @about.volume && @about.volume.path %>
 volumes:
-  - "<%= @article.volume.path %>"
+  - "<%= @about.volume.path %>"
 <% end %>
-weight: <%= @article.position %>
-date: <%= @article.published_at %> UTC
-<% if @article.pdf.attached? %>
-pdf: "<%= @article.pdf.blob_id %>"
+weight: <%= @about.position %>
+date: <%= @about.published_at %> UTC
+<% if @about.pdf.attached? %>
+pdf: "<%= @about.pdf.blob_id %>"
 <% end %>
 keywords: >
-  <%= @article.keywords %>
+  <%= @about.keywords %>
 researchers:
-<% @article.people.each do |person| %>
+<% @about.people.each do |person| %>
 - "<%= person.slug %>"
 <% end %>
-abstract: "<%= @article.abstract %>"
-references: "<%= @article.references %>"
+abstract: "<%= @about.abstract %>"
+references: "<%= @about.references %>"
 ---
-<%= prepare_html_for_static @article.text, @article.university %>
+<%= prepare_html_for_static @about.text, @about.university %>
diff --git a/app/views/admin/research/journal/volumes/static.html.erb b/app/views/admin/research/journal/volumes/static.html.erb
index 8839171b4..82e3570f1 100644
--- a/app/views/admin/research/journal/volumes/static.html.erb
+++ b/app/views/admin/research/journal/volumes/static.html.erb
@@ -1,14 +1,14 @@
 ---
-title: "<%= @volume.title %>"
-slug: "<%= @volume.slug %>"
-number: <%= @volume.number %>
-issn: "<%= @volume.journal.issn %>"
+title: "<%= @about.title %>"
+slug: "<%= @about.slug %>"
+number: <%= @about.number %>
+issn: "<%= @about.journal.issn %>"
 keywords: >
-  <%= @volume.keywords %>
-date: <%= @volume.published_at %> UTC
-<% if @volume.featured_image.attached? %>
-image: "<%= @volume.featured_image.blob.id %>"
-image_alt: "<%= @volume.featured_image_alt %>"
+  <%= @about.keywords %>
+date: <%= @about.published_at %> UTC
+<% if @about.featured_image.attached? %>
+image: "<%= @about.featured_image.blob.id %>"
+image_alt: "<%= @about.featured_image_alt %>"
 <% end %>
 ---
-<%= @volume.description %>
+<%= @about.description %>
diff --git a/app/views/admin/research/journals/static.html.erb b/app/views/admin/research/journals/static.html.erb
index 4446f6506..726cde68d 100644
--- a/app/views/admin/research/journals/static.html.erb
+++ b/app/views/admin/research/journals/static.html.erb
@@ -1,8 +1,8 @@
 ---
 title: >
-  <%= @journal.title %>
+  <%= @about.title %>
 issn: >
-  <%= @journal.issn %>
+  <%= @about.issn %>
 description: >
-  <%= prepare_text_for_static @journal.description %>
+  <%= prepare_text_for_static @about.description %>
 ---
diff --git a/app/views/admin/research/laboratories/static.html.erb b/app/views/admin/research/laboratories/static.html.erb
index 25a1672fc..01b70fa3d 100644
--- a/app/views/admin/research/laboratories/static.html.erb
+++ b/app/views/admin/research/laboratories/static.html.erb
@@ -1,12 +1,12 @@
 ---
 name: >
-  <%= @laboratory.name %>
+  <%= @about.name %>
 address: >
-  <%= @laboratory.address %>
+  <%= @about.address %>
 zipcode: >
-  <%= @laboratory.zipcode %>
+  <%= @about.zipcode %>
 city: >
-  <%= @laboratory.city %>
+  <%= @about.city %>
 country: >
-  <%= ISO3166::Country[@laboratory.country].translations[@laboratory.country.downcase] %>
+  <%= ISO3166::Country[@about.country].translations[@about.country.downcase] %>
 ---
diff --git a/app/views/admin/university/people/static.html.erb b/app/views/admin/university/people/static.html.erb
index 88bf9dfbc..90fc834a1 100644
--- a/app/views/admin/university/people/static.html.erb
+++ b/app/views/admin/university/people/static.html.erb
@@ -1,28 +1,28 @@
 ---
 title: >
-  <%= @person.to_s %>
-slug: "<%= @person.slug %>"
-first_name: "<%= @person.first_name %>"
-last_name: "<%= @person.last_name %>"
-phone: "<%= @person.phone %>"
-email: "<%= @person.email %>"
-<% if @person.best_picture.attached? %>
-image: "<%= @person.best_picture.blob.id %>"
+  <%= @about.to_s %>
+slug: "<%= @about.slug %>"
+first_name: "<%= @about.first_name %>"
+last_name: "<%= @about.last_name %>"
+phone: "<%= @about.phone %>"
+email: "<%= @about.email %>"
+<% if @about.best_picture.attached? %>
+image: "<%= @about.best_picture.blob.id %>"
 <% end %>
 description: >
-  <%= prepare_text_for_static @person.description %>
+  <%= prepare_text_for_static @about.description %>
 roles:
-<% if @person.author.for_website?(@website) %>
+<% if @about.author.for_website?(@website) %>
   - author
 <% end %>
-<% if @person.teacher.for_website?(@website) %>
+<% if @about.teacher.for_website?(@website) %>
   - teacher
 <% end %>
-<% if @person.researcher.for_website?(@website) %>
+<% if @about.researcher.for_website?(@website) %>
   - researcher
 <% end %>
-<% if @person.administrator.for_website?(@website) %>
+<% if @about.administrator.for_website?(@website) %>
   - administrator
 <% end %>
 ---
-<%= prepare_html_for_static @person.biography, @person.university %>
+<%= prepare_html_for_static @about.biography, @about.university %>
diff --git a/app/views/admin/university/person/administrators/static.html.erb b/app/views/admin/university/person/administrators/static.html.erb
index 037036019..e19f88c3f 100644
--- a/app/views/admin/university/person/administrators/static.html.erb
+++ b/app/views/admin/university/person/administrators/static.html.erb
@@ -1,13 +1,13 @@
 ---
 title: >
-  Responsabilités de <%= @administrator.to_s %>
+  Responsabilités de <%= @about.to_s %>
 person: >
-  <%= @administrator.to_s %>
+  <%= @about.to_s %>
 first_name: >
-  <%= @administrator.first_name %>
+  <%= @about.first_name %>
 last_name: >
-  <%= @administrator.last_name %>
-slug: "<%= @administrator.slug %>"
+  <%= @about.last_name %>
+slug: "<%= @about.slug %>"
 description: >
-  <%= prepare_text_for_static @administrator.description %>
+  <%= prepare_text_for_static @about.description %>
 ---
diff --git a/app/views/admin/university/person/authors/static.html.erb b/app/views/admin/university/person/authors/static.html.erb
index 9829f8efa..c6a35683b 100644
--- a/app/views/admin/university/person/authors/static.html.erb
+++ b/app/views/admin/university/person/authors/static.html.erb
@@ -1,13 +1,13 @@
 ---
 title: >
-  Actualités de <%= @author.to_s %>
+  Actualités de <%= @about.to_s %>
 person: >
-  <%= @author.to_s %>
+  <%= @about.to_s %>
 first_name: >
-  <%= @author.first_name %>
+  <%= @about.first_name %>
 last_name: >
-  <%= @author.last_name %>
-slug: "<%= @author.slug %>"
+  <%= @about.last_name %>
+slug: "<%= @about.slug %>"
 description: >
-  <%= prepare_text_for_static @author.description %>
+  <%= prepare_text_for_static @about.description %>
 ---
diff --git a/app/views/admin/university/person/researchers/static.html.erb b/app/views/admin/university/person/researchers/static.html.erb
index 379f23a5d..d0910f05e 100644
--- a/app/views/admin/university/person/researchers/static.html.erb
+++ b/app/views/admin/university/person/researchers/static.html.erb
@@ -1,13 +1,13 @@
 ---
 title: >
-  Publications de <%= @researcher.to_s %>
+  Publications de <%= @about.to_s %>
 person: >
-  <%= @researcher.to_s %>
+  <%= @about.to_s %>
 first_name: >
-  <%= @researcher.first_name %>
+  <%= @about.first_name %>
 last_name: >
-  <%= @researcher.last_name %>
-slug: "<%= @researcher.slug %>"
+  <%= @about.last_name %>
+slug: "<%= @about.slug %>"
 description: >
-  <%= prepare_text_for_static @researcher.description %>
+  <%= prepare_text_for_static @about.description %>
 ---
diff --git a/app/views/admin/university/person/teachers/static.html.erb b/app/views/admin/university/person/teachers/static.html.erb
index ff706bfa3..9dc526daf 100644
--- a/app/views/admin/university/person/teachers/static.html.erb
+++ b/app/views/admin/university/person/teachers/static.html.erb
@@ -1,13 +1,13 @@
 ---
 title: >
-  Enseignements de <%= @teacher.to_s %>
+  Enseignements de <%= @about.to_s %>
 person: >
-  <%= @teacher.to_s %>
+  <%= @about.to_s %>
 first_name: >
-  <%= @teacher.first_name %>
+  <%= @about.first_name %>
 last_name: >
-  <%= @teacher.last_name %>
-slug: "<%= @teacher.slug %>"
+  <%= @about.last_name %>
+slug: "<%= @about.slug %>"
 description: >
-  <%= prepare_text_for_static @teacher.description %>
+  <%= prepare_text_for_static @about.description %>
 ---
diff --git a/config/locales/communication/en.yml b/config/locales/communication/en.yml
index 15be4d2dd..f1ff17788 100644
--- a/config/locales/communication/en.yml
+++ b/config/locales/communication/en.yml
@@ -14,8 +14,6 @@ en:
         one: Category
         other: Categories
         all: All categories
-      communication/website/home:
-        one: Homepage
       communication/website/imported/website:
         one: Imported website
         other: Imported websites
@@ -34,8 +32,6 @@ en:
         one: Post
         other: Posts
         all: All posts
-      communication/website/structure:
-        one: Structure
     attributes:
       communication/website:
         about: About
@@ -55,11 +51,6 @@ en:
         name: Name
         parent: Parent category
         slug: Slug
-      communication/website/home:
-        description: Description (SEO)
-        text: Text
-        featured_image: Featured image
-        featured_image_alt: Alt text
       communication/website/imported/category:
         original: Original
       communication/website/imported/medium:
@@ -100,35 +91,6 @@ en:
         text: Text
         title: Title
         website: Website
-      communication/website/structure:
-        administrators_description: Administrative team - description
-        administrators_path: Administrative team - url
-        administrators_title: Administrative team - title
-        authors_description: Editorial team - description
-        authors_path: Editorial team - url
-        authors_title: Editorial team - title
-        communication_posts_description: News - description
-        communication_posts_path: News - url
-        communication_posts_title: News - title
-        education_programs_description: Programs - description
-        education_programs_path: Programs - url
-        education_programs_title: Programs - title
-        home_title: Home - title
-        persons_description: Team - description
-        persons_path: Team - url
-        persons_title: Team - title
-        research_articles_description: Research articles - description
-        research_articles_path: Research articles - url
-        research_articles_title: Research articles - title
-        research_volumes_description: Research volumes - description
-        research_volumes_path: Research volumes - url
-        research_volumes_title: Research volumes - title
-        researchers_description: Research team - description
-        researchers_path: Research team - url
-        researchers_title: Research team - title
-        teachers_description: Teachers - description
-        teachers_path: Teachers - url
-        teachers_title: Teachers - title
   communication:
     authors:
       one: Author
@@ -183,7 +145,3 @@ en:
               staff: Staff
               teachers: Educational staff
               url: URL
-  simple_form:
-    hints:
-      communication_website_structure:
-        home_title: Will be used in the breadcrumbs
diff --git a/config/locales/communication/fr.yml b/config/locales/communication/fr.yml
index 36085fabd..a77c09ee1 100644
--- a/config/locales/communication/fr.yml
+++ b/config/locales/communication/fr.yml
@@ -14,8 +14,6 @@ fr:
         one: Catégorie
         other: Catégories
         all: Toutes les catégories
-      communication/website/home:
-        one: Page d'accueil
       communication/website/imported/website:
         one: Site importé
         other: Sites importés
@@ -37,8 +35,6 @@ fr:
         one: Actualité
         other: Actualités
         all: Toutes les actualités
-      communication/website/structure:
-        one: Structure
     attributes:
       communication/website:
         about: Sujet du site
@@ -58,11 +54,6 @@ fr:
         name: Nom
         parent: Catégorie parente
         slug: Slug
-      communication/website/home:
-        description: Description (SEO)
-        text: Texte
-        featured_image: Image à la une
-        featured_image_alt: Texte alternatif
       communication/website/index_page:
         description: Description (SEO)
         featured_image: Image à la une
@@ -110,35 +101,6 @@ fr:
         text: Texte
         title: Titre
         website: Site Web
-      communication/website/structure:
-        administrators_description: Description (SEO)
-        administrators_path: Chemin (slug)
-        administrators_title: Titre
-        authors_description: Description (SEO)
-        authors_path: Chemin (slug)
-        authors_title: Titre
-        communication_posts_description: Description (SEO)
-        communication_posts_path: Chemin (slug)
-        communication_posts_title: Titre
-        education_programs_description: Description (SEO)
-        education_programs_path: Chemin (slug)
-        education_programs_title: Titre
-        home_title: Titre
-        persons_description: Description (SEO)
-        persons_path: Chemin (slug)
-        persons_title: Titre
-        research_articles_description: Description (SEO)
-        research_articles_path: Chemin (slug)
-        research_articles_title: Titre
-        research_volumes_description: Description (SEO)
-        research_volumes_path: Chemin (slug)
-        research_volumes_title: Titre
-        researchers_description: Description (SEO)
-        researchers_path: Chemin (slug)
-        researchers_title: Titre
-        teachers_description: Description (SEO)
-        teachers_path: Chemin (slug)
-        teachers_title: Titre
   communication:
     authors:
       one: Auteur·rice
@@ -235,7 +197,3 @@ fr:
               staff: Équipe
               teachers: Équipe pédagogique
               url: URL
-  simple_form:
-    hints:
-      communication_website_structure:
-        home_title: Sera utilisé notamment dans le fil d'Ariane
-- 
GitLab