From 7e719098f0ce569989420473493493397012c8dc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <tomas@imaniti.org>
Date: Thu, 13 Jun 2024 12:29:13 +0200
Subject: [PATCH] redesign fixes

---
 ...czechinspirationalhomepage_title_suffix.py | 18 ++++++
 district/blocks.py                            |  7 +-
 ...istrictcrossroadpage_districtcustompage.py |  2 +-
 .../migrations/0038_auto_20220303_1107.py     |  2 +-
 ...ter_districtcrossroadpage_cards_content.py |  8 +--
 ...ter_districtcrossroadpage_cards_content.py |  2 +-
 ...8_districtelectioncampaignpage_and_more.py | 10 +--
 ...er_districtarticlepage_content_and_more.py | 10 +--
 ...ter_districtcrossroadpage_cards_content.py | 10 +--
 ...ictcrossroadpage_cards_content_and_more.py | 20 +++---
 ...12_alter_districtnewprogrampage_program.py | 20 +++---
 ...13_alter_districtnewprogrampage_program.py | 20 +++---
 ...14_alter_districtnewprogrampage_program.py | 20 +++---
 ...lectioncampaignpage_candidates_and_more.py | 20 +++---
 ...16_alter_districtnewprogrampage_program.py | 20 +++---
 .../migrations/0218_auto_20240601_1530.py     | 20 +++---
 ...ctelectioncampaignpage_options_and_more.py | 24 +++----
 ...alter_districthomepage_content_and_more.py | 16 ++---
 .../migrations/0225_auto_20240613_1111.py     | 33 ++++++++++
 ...ctelectionprogrampage_page_ptr_and_more.py | 59 +++++++++++++++++
 .../migrations/0227_auto_20240613_1137.py     | 30 +++++++++
 ...228_alter_districthomepage_title_suffix.py | 18 ++++++
 district/models.py                            | 26 +-------
 ...03_alter_districtshomepage_title_suffix.py | 18 ++++++
 ...38_alter_electionshomepage_title_suffix.py | 18 ++++++
 ...09_alter_greendealhomepage_title_suffix.py | 18 ++++++
 .../0096_alter_mainhomepage_title_suffix.py   | 18 ++++++
 .../0011_alter_regkonhomepage_title_suffix.py | 18 ++++++
 ...lter_senatcampaignhomepage_title_suffix.py | 18 ++++++
 shared/models/main.py                         | 23 +++++--
 shared/templates/styleguide2/person_page.html | 64 ++++++++++---------
 31 files changed, 429 insertions(+), 181 deletions(-)
 create mode 100644 czech_inspirational/migrations/0008_alter_czechinspirationalhomepage_title_suffix.py
 create mode 100644 district/migrations/0225_auto_20240613_1111.py
 create mode 100644 district/migrations/0226_remove_districtelectionprogrampage_page_ptr_and_more.py
 create mode 100644 district/migrations/0227_auto_20240613_1137.py
 create mode 100644 district/migrations/0228_alter_districthomepage_title_suffix.py
 create mode 100644 districts/migrations/0003_alter_districtshomepage_title_suffix.py
 create mode 100644 elections/migrations/0038_alter_electionshomepage_title_suffix.py
 create mode 100644 green_deal/migrations/0009_alter_greendealhomepage_title_suffix.py
 create mode 100644 main/migrations/0096_alter_mainhomepage_title_suffix.py
 create mode 100644 regulace_konopi/migrations/0011_alter_regkonhomepage_title_suffix.py
 create mode 100644 senat_campaign/migrations/0015_alter_senatcampaignhomepage_title_suffix.py

diff --git a/czech_inspirational/migrations/0008_alter_czechinspirationalhomepage_title_suffix.py b/czech_inspirational/migrations/0008_alter_czechinspirationalhomepage_title_suffix.py
new file mode 100644
index 00000000..1ae4a5d0
--- /dev/null
+++ b/czech_inspirational/migrations/0008_alter_czechinspirationalhomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('czech_inspirational', '0007_czechinspirationalhomepage_title_suffix'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='czechinspirationalhomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/district/blocks.py b/district/blocks.py
index ffb1bfcf..99f2a134 100644
--- a/district/blocks.py
+++ b/district/blocks.py
@@ -157,8 +157,6 @@ class CardLinkBlock(CardLinkBlockMixin):
             "district.DistrictCrossroadPage",
             "district.DistrictCustomPage",
             "district.DistrictPeoplePage",
-            "district.DistrictProgramPage",
-            "district.DistrictInteractiveProgramPage",
             "district.DistrictGeoFeatureCollectionPage",
             "district.DistrictCalendarPage",
             "district.DistrictPdfPage",
@@ -282,12 +280,9 @@ class CardLinkBlock(CardLinkBlockMixin):
             "district.DistrictContactPage",
             "district.DistrictCrossroadPage",
             "district.DistrictCustomPage",
-            "district.DistrictElectionCampaignPage",
-            "district.DistrictElectionProgramPage",
             "district.DistrictPeoplePage",
             "district.DistrictPersonPage",
-            "district.DistrictPostElectionStrategyPage",
-            "district.DistrictProgramPage",
+            "district.DistrictNewProgramPage",
         ],
         required=False,
     )
diff --git a/district/migrations/0037_districtcrossroadpage_districtcustompage.py b/district/migrations/0037_districtcrossroadpage_districtcustompage.py
index 3a8fc006..eae599c6 100644
--- a/district/migrations/0037_districtcrossroadpage_districtcustompage.py
+++ b/district/migrations/0037_districtcrossroadpage_districtcustompage.py
@@ -100,7 +100,7 @@ class Migration(migrations.Migration):
                                                     "district.DistrictCustomPage",
                                                     # "district.DistrictElectionPage",
                                                     "district.DistrictPeoplePage",
-                                                    "district.DistrictProgramPage",
+                                                    # "district.DistrictProgramPage",
                                                     # "district.DistrictTagsPage",
                                                 ],
                                             ),
diff --git a/district/migrations/0038_auto_20220303_1107.py b/district/migrations/0038_auto_20220303_1107.py
index 41688bf4..f91df1e1 100644
--- a/district/migrations/0038_auto_20220303_1107.py
+++ b/district/migrations/0038_auto_20220303_1107.py
@@ -66,7 +66,7 @@ class Migration(migrations.Migration):
                                             # "district.DistrictElectionPointPage",
                                             "district.DistrictPeoplePage",
                                             "district.DistrictPersonPage",
-                                            "district.DistrictProgramPage",
+                                            # "district.DistrictProgramPage",
                                             # "district.DistrictTagsPage",
                                         ],
                                     ),
diff --git a/district/migrations/0049_alter_districtcrossroadpage_cards_content.py b/district/migrations/0049_alter_districtcrossroadpage_cards_content.py
index d16ba763..b920e665 100644
--- a/district/migrations/0049_alter_districtcrossroadpage_cards_content.py
+++ b/district/migrations/0049_alter_districtcrossroadpage_cards_content.py
@@ -49,18 +49,18 @@ class Migration(migrations.Migration):
                                                     wagtail.blocks.PageChooserBlock(
                                                         label="Stránka",
                                                         page_type=[
-                                                            "district.DistrictAfterElectionPage",
+                                                            # "district.DistrictAfterElectionPage",
                                                             "district.DistrictArticlePage",
                                                             "district.DistrictArticlesPage",
                                                             "district.DistrictCenterPage",
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionPage",
-                                                            "district.DistrictElectionPointPage",
+                                                            # "district.DistrictElectionPage",
+                                                            # "district.DistrictElectionPointPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictProgramPage",
                                                             # "district.DistrictTagsPage",
                                                         ],
                                                         required=False,
diff --git a/district/migrations/0053_alter_districtcrossroadpage_cards_content.py b/district/migrations/0053_alter_districtcrossroadpage_cards_content.py
index b1abcbf8..52471438 100644
--- a/district/migrations/0053_alter_districtcrossroadpage_cards_content.py
+++ b/district/migrations/0053_alter_districtcrossroadpage_cards_content.py
@@ -67,7 +67,7 @@ class Migration(migrations.Migration):
                                                             # "district.DistrictElectionPointPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictProgramPage",
                                                             # "district.DistrictTagsPage",
                                                         ],
                                                         required=False,
diff --git a/district/migrations/0068_districtelectioncampaignpage_and_more.py b/district/migrations/0068_districtelectioncampaignpage_and_more.py
index e20c9b3e..9eb55286 100644
--- a/district/migrations/0068_districtelectioncampaignpage_and_more.py
+++ b/district/migrations/0068_districtelectioncampaignpage_and_more.py
@@ -14965,13 +14965,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                             # "district.DistrictTagsPage",
                                                         ],
                                                         required=False,
diff --git a/district/migrations/0102_alter_districtarticlepage_content_and_more.py b/district/migrations/0102_alter_districtarticlepage_content_and_more.py
index db043e4c..3f7acc82 100644
--- a/district/migrations/0102_alter_districtarticlepage_content_and_more.py
+++ b/district/migrations/0102_alter_districtarticlepage_content_and_more.py
@@ -12052,13 +12052,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
diff --git a/district/migrations/0106_alter_districtcrossroadpage_cards_content.py b/district/migrations/0106_alter_districtcrossroadpage_cards_content.py
index 578566b6..00d3bd34 100644
--- a/district/migrations/0106_alter_districtcrossroadpage_cards_content.py
+++ b/district/migrations/0106_alter_districtcrossroadpage_cards_content.py
@@ -62,13 +62,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
diff --git a/district/migrations/0211_alter_districtcrossroadpage_cards_content_and_more.py b/district/migrations/0211_alter_districtcrossroadpage_cards_content_and_more.py
index a57d7c43..595200ba 100644
--- a/district/migrations/0211_alter_districtcrossroadpage_cards_content_and_more.py
+++ b/district/migrations/0211_alter_districtcrossroadpage_cards_content_and_more.py
@@ -67,10 +67,10 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
-                                                            "district.DistrictProgramPage",
-                                                            "district.DistrictInteractiveProgramPage",
+                                                            # "district.DistrictProgramPage",
+                                                            # "district.DistrictInteractiveProgramPage",
                                                             "district.DistrictGeoFeatureCollectionPage",
                                                             "district.DistrictCalendarPage",
                                                             "district.DistrictPdfPage",
@@ -196,8 +196,8 @@ class Migration(migrations.Migration):
                                                                             "district.DistrictCustomPage",
                                                                             "district.DistrictElectionRootPage",
                                                                             "district.DistrictPeoplePage",
-                                                                            "district.DistrictProgramPage",
-                                                                            "district.DistrictInteractiveProgramPage",
+                                                                            # "district.DistrictProgramPage",
+                                                                            # "district.DistrictInteractiveProgramPage",
                                                                             "district.DistrictGeoFeatureCollectionPage",
                                                                             "district.DistrictCalendarPage",
                                                                             "district.DistrictPdfPage",
@@ -364,13 +364,13 @@ class Migration(migrations.Migration):
                                                                     "district.DistrictContactPage",
                                                                     "district.DistrictCrossroadPage",
                                                                     "district.DistrictCustomPage",
-                                                                    "district.DistrictElectionCampaignPage",
-                                                                    "district.DistrictElectionProgramPage",
-                                                                    "district.DistrictElectionRootPage",
+                                                                    # "district.DistrictElectionCampaignPage",
+                                                                    # "district.DistrictElectionProgramPage",
+                                                                    # "district.DistrictElectionRootPage",
                                                                     "district.DistrictPeoplePage",
                                                                     "district.DistrictPersonPage",
-                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                    "district.DistrictProgramPage",
+                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                    # "district.DistrictProgramPage",
                                                                 ],
                                                                 required=False,
                                                             ),
diff --git a/district/migrations/0212_alter_districtnewprogrampage_program.py b/district/migrations/0212_alter_districtnewprogrampage_program.py
index ca7f3bb8..6364b4e7 100644
--- a/district/migrations/0212_alter_districtnewprogrampage_program.py
+++ b/district/migrations/0212_alter_districtnewprogrampage_program.py
@@ -128,13 +128,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -355,13 +355,13 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
-                                                                                    "district.DistrictElectionRootPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionRootPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
diff --git a/district/migrations/0213_alter_districtnewprogrampage_program.py b/district/migrations/0213_alter_districtnewprogrampage_program.py
index 4f36ab9c..87ae4971 100644
--- a/district/migrations/0213_alter_districtnewprogrampage_program.py
+++ b/district/migrations/0213_alter_districtnewprogrampage_program.py
@@ -128,13 +128,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -373,13 +373,13 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
-                                                                                    "district.DistrictElectionRootPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionRootPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
diff --git a/district/migrations/0214_alter_districtnewprogrampage_program.py b/district/migrations/0214_alter_districtnewprogrampage_program.py
index 4e4478d1..59445f0a 100644
--- a/district/migrations/0214_alter_districtnewprogrampage_program.py
+++ b/district/migrations/0214_alter_districtnewprogrampage_program.py
@@ -128,13 +128,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -383,13 +383,13 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
-                                                                                    "district.DistrictElectionRootPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionRootPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
diff --git a/district/migrations/0215_alter_districtelectioncampaignpage_candidates_and_more.py b/district/migrations/0215_alter_districtelectioncampaignpage_candidates_and_more.py
index 02469f7d..2ef01d11 100644
--- a/district/migrations/0215_alter_districtelectioncampaignpage_candidates_and_more.py
+++ b/district/migrations/0215_alter_districtelectioncampaignpage_candidates_and_more.py
@@ -178,13 +178,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -509,13 +509,13 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
-                                                                                    "district.DistrictElectionRootPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionRootPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
diff --git a/district/migrations/0216_alter_districtnewprogrampage_program.py b/district/migrations/0216_alter_districtnewprogrampage_program.py
index 81a76479..4d857b46 100644
--- a/district/migrations/0216_alter_districtnewprogrampage_program.py
+++ b/district/migrations/0216_alter_districtnewprogrampage_program.py
@@ -128,13 +128,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -459,13 +459,13 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
-                                                                                    "district.DistrictElectionRootPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionRootPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
diff --git a/district/migrations/0218_auto_20240601_1530.py b/district/migrations/0218_auto_20240601_1530.py
index 532b563f..ca5a491c 100644
--- a/district/migrations/0218_auto_20240601_1530.py
+++ b/district/migrations/0218_auto_20240601_1530.py
@@ -656,13 +656,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -1002,13 +1002,13 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
-                                                                                    "district.DistrictElectionRootPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionRootPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
diff --git a/district/migrations/0219_alter_districtelectioncampaignpage_options_and_more.py b/district/migrations/0219_alter_districtelectioncampaignpage_options_and_more.py
index de2b9c98..439b7192 100644
--- a/district/migrations/0219_alter_districtelectioncampaignpage_options_and_more.py
+++ b/district/migrations/0219_alter_districtelectioncampaignpage_options_and_more.py
@@ -206,8 +206,8 @@ class Migration(migrations.Migration):
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
                                                             "district.DistrictPeoplePage",
-                                                            "district.DistrictProgramPage",
-                                                            "district.DistrictInteractiveProgramPage",
+                                                            # "district.DistrictProgramPage",
+                                                            # "district.DistrictInteractiveProgramPage",
                                                             "district.DistrictGeoFeatureCollectionPage",
                                                             "district.DistrictCalendarPage",
                                                             "district.DistrictPdfPage",
@@ -354,12 +354,12 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -699,12 +699,12 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
@@ -925,8 +925,8 @@ class Migration(migrations.Migration):
                                                                             "district.DistrictCrossroadPage",
                                                                             "district.DistrictCustomPage",
                                                                             "district.DistrictPeoplePage",
-                                                                            "district.DistrictProgramPage",
-                                                                            "district.DistrictInteractiveProgramPage",
+                                                                            # "district.DistrictProgramPage",
+                                                                            # "district.DistrictInteractiveProgramPage",
                                                                             "district.DistrictGeoFeatureCollectionPage",
                                                                             "district.DistrictCalendarPage",
                                                                             "district.DistrictPdfPage",
diff --git a/district/migrations/0221_alter_districthomepage_content_and_more.py b/district/migrations/0221_alter_districthomepage_content_and_more.py
index 238c365b..ad639bb7 100644
--- a/district/migrations/0221_alter_districthomepage_content_and_more.py
+++ b/district/migrations/0221_alter_districthomepage_content_and_more.py
@@ -416,12 +416,12 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -761,12 +761,12 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
diff --git a/district/migrations/0225_auto_20240613_1111.py b/district/migrations/0225_auto_20240613_1111.py
new file mode 100644
index 00000000..a71ba1af
--- /dev/null
+++ b/district/migrations/0225_auto_20240613_1111.py
@@ -0,0 +1,33 @@
+# Generated by Django 5.0.6 on 2024-06-13 09:11
+
+from django.db import migrations
+
+
+def remove_old_program_pages(apps, schema_editor):
+    DistrictElectionRootPage = apps.get_model("district", "DistrictElectionRootPage")
+    DistrictProgramPage = apps.get_model("district", "DistrictProgramPage")
+    DistrictInteractiveProgramPage = apps.get_model("district", "DistrictInteractiveProgramPage")
+    DistrictElectionCampaignPage = apps.get_model("district", "DistrictElectionCampaignPage")
+    DistrictElectionProgramPage = apps.get_model("district", "DistrictElectionProgramPage")
+    DistrictPostElectionStrategyPage = apps.get_model("district", "DistrictPostElectionStrategyPage")
+
+    for model in (
+        DistrictElectionRootPage,
+        DistrictProgramPage,
+        DistrictInteractiveProgramPage,
+        DistrictElectionCampaignPage,
+        DistrictElectionProgramPage,
+        DistrictPostElectionStrategyPage
+    ):
+        model.objects.filter().delete()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('district', '0224_alter_districtpeoplepage_perex_col_1_and_more'),
+    ]
+
+    operations = [
+        migrations.RunPython(remove_old_program_pages)
+    ]
diff --git a/district/migrations/0226_remove_districtelectionprogrampage_page_ptr_and_more.py b/district/migrations/0226_remove_districtelectionprogrampage_page_ptr_and_more.py
new file mode 100644
index 00000000..a92ef266
--- /dev/null
+++ b/district/migrations/0226_remove_districtelectionprogrampage_page_ptr_and_more.py
@@ -0,0 +1,59 @@
+# Generated by Django 5.0.6 on 2024-06-13 09:29
+
+import wagtail.blocks
+import wagtail.fields
+import wagtail.images.blocks
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('district', '0225_auto_20240613_1111'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='districtelectionprogrampage',
+            name='page_ptr',
+        ),
+        migrations.RemoveField(
+            model_name='districtelectionrootpage',
+            name='page_ptr',
+        ),
+        migrations.RemoveField(
+            model_name='districtinteractiveprogrampage',
+            name='page_ptr',
+        ),
+        migrations.RemoveField(
+            model_name='districtpostelectionstrategypage',
+            name='page_ptr',
+        ),
+        migrations.RemoveField(
+            model_name='districtprogrampage',
+            name='page_ptr',
+        ),
+        migrations.AlterField(
+            model_name='districtnewprogrampage',
+            name='program',
+            field=wagtail.fields.StreamField([('program_group', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...", label='Název programu')), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('url', wagtail.blocks.URLBlock(label='Odkaz pokrývající celou tuto část', required=False)), ('icon', wagtail.images.blocks.ImageChooserBlock(label='Ikona', required=False)), ('title', wagtail.blocks.CharBlock(label='Titulek článku programu')), ('text', wagtail.blocks.RichTextBlock(features=['h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], label='Obsah'))]), label='Jednotlivé články programu'))])), ('program_group_crossroad', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...", label='Název programu')), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock(label='Obrázek')), ('title', wagtail.blocks.CharBlock(label='Titulek', required=True)), ('text', wagtail.blocks.RichTextBlock(label='Krátký text pod nadpisem', required=False)), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['district.DistrictArticlePage', 'district.DistrictArticlesPage', 'district.DistrictCenterPage', 'district.DistrictContactPage', 'district.DistrictCrossroadPage', 'district.DistrictCustomPage', 'district.DistrictPeoplePage', 'district.DistrictPersonPage', 'district.DistrictNewProgramPage'], required=False)), ('link', wagtail.blocks.URLBlock(label='Odkaz', required=False))]), label='Karty programu'))])), ('program_group_popout', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...", label='Název programu')), ('categories', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Název')), ('icon', wagtail.images.blocks.ImageChooserBlock(label='Ikona', required=False)), ('description', wagtail.blocks.RichTextBlock(label='Popis', required=False)), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek vyskakovacího bloku')), ('content', wagtail.blocks.RichTextBlock(features=['h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], label='Obsah')), ('guarantor', wagtail.blocks.PageChooserBlock(label='Garant', page_type=['district.DistrictPersonPage'], required=False))]), label='Jednotlivé bloky programu'))]), label='Kategorie programu'))])), ('program_group_with_candidates', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...", label='Název programu')), ('preamble_content', wagtail.blocks.RichTextBlock(help_text='Text, který se zobrazí před přepínačem mezi kandidáty a programem.', label='Preambule', required=False)), ('primary_candidates', wagtail.blocks.StructBlock([('candidates', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['district.DistrictPersonPage'])), ('image', wagtail.images.blocks.ImageChooserBlock(help_text='Pokud není vybrán, použije se obrázek ze stránky kandidáta', label='Obrázek', required=False)), ('description', wagtail.blocks.TextBlock(label='Popis'))]), label=' '))], help_text='Zobrazí se ve velkých blocích na začátku stránky.', label='Osoby na čele kandidátky')), ('secondary_candidates', wagtail.blocks.StructBlock([('heading', wagtail.blocks.CharBlock(default='Ostatní kandidátky', label='Nadpis zbytku kandidátky')), ('candidates', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('number', wagtail.blocks.CharBlock(label='Číslo')), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['district.DistrictPersonPage'])), ('image', wagtail.images.blocks.ImageChooserBlock(help_text='Pokud není vybrán, použije se obrázek ze stránky kandidáta', label='Obrázek', required=False))]), label='Zbylí kandidáti na listině'))], help_text='Zobrazí se v kompaktním seznamu pod čelem kandidátky.', label='Ostatní osoby na kandidátce')), ('program', wagtail.blocks.StreamBlock([('program_group', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...", label='Název programu')), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('url', wagtail.blocks.URLBlock(label='Odkaz pokrývající celou tuto část', required=False)), ('icon', wagtail.images.blocks.ImageChooserBlock(label='Ikona', required=False)), ('title', wagtail.blocks.CharBlock(label='Titulek článku programu')), ('text', wagtail.blocks.RichTextBlock(features=['h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], label='Obsah'))]), label='Jednotlivé články programu'))])), ('program_group_crossroad', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...", label='Název programu')), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock(label='Obrázek')), ('title', wagtail.blocks.CharBlock(label='Titulek', required=True)), ('text', wagtail.blocks.RichTextBlock(label='Krátký text pod nadpisem', required=False)), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['district.DistrictArticlePage', 'district.DistrictArticlesPage', 'district.DistrictCenterPage', 'district.DistrictContactPage', 'district.DistrictCrossroadPage', 'district.DistrictCustomPage', 'district.DistrictPeoplePage', 'district.DistrictPersonPage', 'district.DistrictNewProgramPage'], required=False)), ('link', wagtail.blocks.URLBlock(label='Odkaz', required=False))]), label='Karty programu'))])), ('program_group_popout', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...", label='Název programu')), ('categories', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Název')), ('icon', wagtail.images.blocks.ImageChooserBlock(label='Ikona', required=False)), ('description', wagtail.blocks.RichTextBlock(label='Popis', required=False)), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek vyskakovacího bloku')), ('content', wagtail.blocks.RichTextBlock(features=['h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], label='Obsah')), ('guarantor', wagtail.blocks.PageChooserBlock(label='Garant', page_type=['district.DistrictPersonPage'], required=False))]), label='Jednotlivé bloky programu'))]), label='Kategorie programu'))])), ('carousel_program', wagtail.blocks.StructBlock([('label', wagtail.blocks.CharBlock(default='Program', help_text="Např. 'Program'", label='Nadpis')), ('categories', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('number', wagtail.blocks.IntegerBlock(label='Číslo')), ('name', wagtail.blocks.CharBlock(label='Název')), ('points', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('content', wagtail.blocks.TextBlock(label='Obsah'))]), label='Body'))]), label='Kategorie')), ('long_version_url', wagtail.blocks.URLBlock(help_text='Pro zobrazení odkazu na celou verzi programu musí být obě následující pole vyplněná.', label='Odkaz na celou verzi programu', required=False)), ('long_version_text', wagtail.blocks.CharBlock(label='Nadpis odkazu na celou verzi programu', required=False))], template='styleguide2/includes/molecules/program/program_block.html'))]))]))], blank=True, verbose_name='Programy'),
+        ),
+        migrations.DeleteModel(
+            name='DistrictElectionCampaignPage',
+        ),
+        migrations.DeleteModel(
+            name='DistrictElectionProgramPage',
+        ),
+        migrations.DeleteModel(
+            name='DistrictElectionRootPage',
+        ),
+        migrations.DeleteModel(
+            name='DistrictInteractiveProgramPage',
+        ),
+        migrations.DeleteModel(
+            name='DistrictPostElectionStrategyPage',
+        ),
+        migrations.DeleteModel(
+            name='DistrictProgramPage',
+        ),
+    ]
diff --git a/district/migrations/0227_auto_20240613_1137.py b/district/migrations/0227_auto_20240613_1137.py
new file mode 100644
index 00000000..84852bcf
--- /dev/null
+++ b/district/migrations/0227_auto_20240613_1137.py
@@ -0,0 +1,30 @@
+# Generated by Django 5.0.6 on 2024-06-13 09:37
+
+from django.db import migrations
+
+
+def fix_suffixes(apps, schema_editor):
+    DistrictHomePage = apps.get_model("district", "DistrictHomePage")
+
+    for home_page in DistrictHomePage.objects.all():
+        old_suffix = str(home_page.title_suffix)
+
+        home_page.title_suffix = home_page.title_suffix.replace("piráti", "").replace("Piráti", "").replace("PIRÁTI", "")
+        home_page.title_suffix = home_page.title_suffix.replace("MS", "").replace("KS", "")
+        home_page.title_suffix = home_page.title_suffix.strip()
+
+        if home_page.title_suffix != old_suffix:
+            print(f"Replaced suffix for page {home_page.title}")
+
+        home_page.save()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('district', '0226_remove_districtelectionprogrampage_page_ptr_and_more'),
+    ]
+
+    operations = [
+        migrations.RunPython(fix_suffixes)
+    ]
diff --git a/district/migrations/0228_alter_districthomepage_title_suffix.py b/district/migrations/0228_alter_districthomepage_title_suffix.py
new file mode 100644
index 00000000..989fde3a
--- /dev/null
+++ b/district/migrations/0228_alter_districthomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('district', '0227_auto_20240613_1137'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='districthomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/district/models.py b/district/models.py
index ba654fa5..40ce46a1 100644
--- a/district/models.py
+++ b/district/models.py
@@ -1106,28 +1106,4 @@ class LegacyProgramPageMixin(Page):
         return HttpResponseRedirect("/programy/")
 
     class Meta:
-        abstract = True
-
-
-class DistrictElectionRootPage(LegacyProgramPageMixin, Page):
-    pass
-
-
-class DistrictProgramPage(LegacyProgramPageMixin, Page):
-    pass
-
-
-class DistrictInteractiveProgramPage(LegacyProgramPageMixin, Page):
-    pass
-
-
-class DistrictElectionCampaignPage(LegacyProgramPageMixin, Page):
-    pass
-
-
-class DistrictElectionProgramPage(LegacyProgramPageMixin, Page):
-    pass
-
-
-class DistrictPostElectionStrategyPage(LegacyProgramPageMixin, Page):
-    pass
+        abstract = True
\ No newline at end of file
diff --git a/districts/migrations/0003_alter_districtshomepage_title_suffix.py b/districts/migrations/0003_alter_districtshomepage_title_suffix.py
new file mode 100644
index 00000000..6d843ffa
--- /dev/null
+++ b/districts/migrations/0003_alter_districtshomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('districts', '0002_districtshomepage_title_suffix'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='districtshomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/elections/migrations/0038_alter_electionshomepage_title_suffix.py b/elections/migrations/0038_alter_electionshomepage_title_suffix.py
new file mode 100644
index 00000000..679ad6f4
--- /dev/null
+++ b/elections/migrations/0038_alter_electionshomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('elections', '0037_alter_electionshomepage_content'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='electionshomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/green_deal/migrations/0009_alter_greendealhomepage_title_suffix.py b/green_deal/migrations/0009_alter_greendealhomepage_title_suffix.py
new file mode 100644
index 00000000..3af91a56
--- /dev/null
+++ b/green_deal/migrations/0009_alter_greendealhomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('green_deal', '0008_alter_greendealhomepage_content_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='greendealhomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/main/migrations/0096_alter_mainhomepage_title_suffix.py b/main/migrations/0096_alter_mainhomepage_title_suffix.py
new file mode 100644
index 00000000..2128b46e
--- /dev/null
+++ b/main/migrations/0096_alter_mainhomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('main', '0095_alter_mainpeoplepage_perex_col_1_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='mainhomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/regulace_konopi/migrations/0011_alter_regkonhomepage_title_suffix.py b/regulace_konopi/migrations/0011_alter_regkonhomepage_title_suffix.py
new file mode 100644
index 00000000..62a7c50a
--- /dev/null
+++ b/regulace_konopi/migrations/0011_alter_regkonhomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('regulace_konopi', '0010_alter_regkonhomepage_content_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='regkonhomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/senat_campaign/migrations/0015_alter_senatcampaignhomepage_title_suffix.py b/senat_campaign/migrations/0015_alter_senatcampaignhomepage_title_suffix.py
new file mode 100644
index 00000000..70d4081b
--- /dev/null
+++ b/senat_campaign/migrations/0015_alter_senatcampaignhomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('senat_campaign', '0014_alter_senatcampaignhomepage_calendar'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='senatcampaignhomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/shared/models/main.py b/shared/models/main.py
index ea0f05b1..a0aac336 100644
--- a/shared/models/main.py
+++ b/shared/models/main.py
@@ -68,9 +68,9 @@ class ExtendedMetadataHomePageMixin(models.Model):
         null=True,
         help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud "
         "je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte "
-        "'MS Pardubice | Piráti', výsledný titulek bude "
-        "'Kontakt | MS Pardubice | Piráti'. Pokud příponu nevyplníte, použije "
-        "se název webu.",
+        "'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. "
+        "Pokud příponu nevyplníte, použije se název domovské stránky a text "
+        "'Piráti', např. 'Kontakt | Piráti Pardubice'.",
     )
 
     class Meta:
@@ -89,12 +89,15 @@ class ExtendedMetadataHomePageMixin(models.Model):
         title = super().get_meta_title()
         suffix = self.get_meta_title_suffix()
 
+        if title == self.root_page.title:
+            return f"Domů | Piráti {suffix}"
+
         # Covers scenario when title_suffix is not set and evaluates to super().get_meta_title() value.
         # Rather than having MS Pardubice | MS Pardubice, just use MS Pardubice alone.
         if title != suffix:
-            return f"{super().get_meta_title()} | {self.get_meta_title_suffix()}"
+            return f"{super().get_meta_title()} | Piráti {self.get_meta_title_suffix()}"
 
-        return title
+        return f"Piráti {title}"
 
 
 class ExtendedMetadataPageMixin(models.Model):
@@ -251,7 +254,10 @@ class PageInMenuMixin(Page):
 
         for menu in menu_iterator:
             if menu.block_type == "menu_item":
-                if menu.value["link"].strip() == instance.full_url.strip():
+                if (
+                    instance.full_url is not None and len(instance.full_url) != 0
+                    and menu.value["link"] is not None and len(menu.value["link"]) != 0
+                ) and menu.value["link"].strip() == instance.full_url.strip():
                     return menu.value["title"]
 
                 if menu.value["page"] is None:
@@ -261,7 +267,10 @@ class PageInMenuMixin(Page):
                     return menu.value["title"]
             elif menu.block_type == "menu_parent":
                 for item in menu.value["menu_items"]:
-                    if item.value["link"].strip() == instance.full_url.strip():
+                    if (
+                        instance.full_url is not None and len(instance.full_url) != 0
+                        and item.value["link"] is not None and len(menu.value["link"]) != 0
+                    ) and item.value["link"].strip() == instance.full_url.strip():
                         return item.value["title"]
 
                     if item["page"] is None:
diff --git a/shared/templates/styleguide2/person_page.html b/shared/templates/styleguide2/person_page.html
index 65412f6c..08056a9e 100644
--- a/shared/templates/styleguide2/person_page.html
+++ b/shared/templates/styleguide2/person_page.html
@@ -33,39 +33,41 @@
           </article>
         </div>
         <div class="grid-right-side mb-8 xl:mb-0">
-          <div>
-            <h3
-              class="
-                hidden font-alt text-[3.5rem] mb-3
-                xl:block
-              "
-            >Kontakty</h3>
-          </div>
+          {% if page.phone or page.email or page.social_links %}
+            <div>
+              <h3
+                class="
+                  hidden font-alt text-[3.5rem] mb-3
+                  xl:block
+                "
+              >Kontakty</h3>
+            </div>
 
-          <div class="flex flex-col gap-2 text-lg mb-12">
-            {% if page.phone %}
-              <a href="tel:{{ page.phone }}" class="font-bold underline">
-                {{ page.phone }}
-              </a>
-            {% endif %}
-
-            {% if page.email %}
-              <a href="{{ page.email }}" class="font-bold underline">
-                {{ page.email }}
-              </a>
-            {% endif %}
-
-            <div class="flex flex-col pt-4 gap-3">
-              {% for social_link in page.social_links %}
-                <div class="flex items-center gap-2">
-                  <i class="{{ social_link.value.icon }}"></i>
-                  <a href="{{ social_link.value.link }}" class="underline">
-                    {{ social_link.value.text }}
-                  </a>
-                </div>
-              {% endfor %}
+            <div class="flex flex-col gap-2 text-lg mb-12">
+              {% if page.phone %}
+                <a href="tel:{{ page.phone }}" class="font-bold underline">
+                  {{ page.phone }}
+                </a>
+              {% endif %}
+
+              {% if page.email %}
+                <a href="{{ page.email }}" class="font-bold underline">
+                  {{ page.email }}
+                </a>
+              {% endif %}
+
+              <div class="flex flex-col pt-4 gap-3">
+                {% for social_link in page.social_links %}
+                  <div class="flex items-center gap-2">
+                    <i class="{{ social_link.value.icon }}"></i>
+                    <a href="{{ social_link.value.link }}" class="underline">
+                      {{ social_link.value.text }}
+                    </a>
+                  </div>
+                {% endfor %}
+              </div>
             </div>
-          </div>
+          {% endif %}
         </div>
       </section>
     </div>
-- 
GitLab