diff --git a/elections/blocks.py b/elections/blocks.py
index 7e4515e9d88a6acc56e32aebc2ea21cdd7cb8ebd..82f3d47fddd43d703e24c55c7a0d0108eeef7329 100644
--- a/elections/blocks.py
+++ b/elections/blocks.py
@@ -85,3 +85,50 @@ class ProgramBlock(StructBlock):
         icon = "form"
         label = "Vyskakovací program"
         template = "styleguide2/includes/molecules/program/card_program.html"
+
+
+class PersonFaqAnswerBlock(StructBlock):
+    question = CharBlock(
+        label="Otázka"
+    )
+
+    answer = TextBlock(
+        label="Odpověď"
+    )
+
+    class Meta:
+        icon = "form"
+        label = "Odpověď kandidáta na otázku"
+
+
+class PersonFaqAnswersBlock(StructBlock):
+    section_name = CharBlock(
+        label="Název sekce",
+        help_text="Např. 'Otevřenost a transparentnost'"
+    )
+
+    topic = CharBlock(
+        label="Téma",
+        help_text="Např. 'téma Markéty Gregorové'"
+    )
+
+    person_page = PageChooserBlock(
+        label="Stránka kandidáta",
+        page_type=["elections.ElectionsCandidatePage"]
+    )
+
+    image = ImageChooserBlock(
+        label="Obrázek",
+        help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
+        required=False,
+    )
+
+    questions = ListBlock(
+        PersonFaqAnswerBlock(label="Odpověď"),
+        label="Otázky"
+    )
+
+    class Meta:
+        icon = "form"
+        label = "Odpovědi kandidáta na otázky"
+        template = "styleguide2/includes/organisms/faq/faq_answer.html"
diff --git a/elections/migrations/0003_electionsfaqpage.py b/elections/migrations/0003_electionsfaqpage.py
new file mode 100644
index 0000000000000000000000000000000000000000..6efb248d915bb07fedd9141f6099bbcae0614250
--- /dev/null
+++ b/elections/migrations/0003_electionsfaqpage.py
@@ -0,0 +1,36 @@
+# Generated by Django 4.1.10 on 2024-01-08 12:25
+
+from django.db import migrations, models
+import django.db.models.deletion
+import shared.models.base
+import wagtail.blocks
+import wagtail.fields
+import wagtail.images.blocks
+import wagtailmetadata.models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('calendar_utils', '0004_auto_20220505_1228'),
+        ('wagtailcore', '0083_workflowcontenttype'),
+        ('wagtailimages', '0025_alter_image_file_alter_rendition_file'),
+        ('elections', '0002_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='ElectionsFaqPage',
+            fields=[
+                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
+                ('calendar_url', models.URLField(blank=True, help_text='Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.', null=True, verbose_name='URL kalendáře ve formátu iCal')),
+                ('content', wagtail.fields.StreamField([('person_answers', wagtail.blocks.StructBlock([('topic', wagtail.blocks.CharBlock(help_text="Např. 'téma Markéty Gregorové'", label='Téma')), ('person', wagtail.blocks.PageChooserBlock(label='Stránka kandidáta', page_type=['elections.ElectionsCandidatePage'])), ('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)), ('questions', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('question', wagtail.blocks.CharBlock(label='Otázka')), ('answer', wagtail.blocks.TextBlock(label='Odpověď'))], label='Odpověď'), label='Otázky'))]))], blank=True, use_json_field=True, verbose_name='Obsah')),
+                ('calendar', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='calendar_utils.calendar')),
+                ('search_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image', verbose_name='Search image')),
+            ],
+            options={
+                'abstract': False,
+            },
+            bases=(shared.models.base.SubpageMixin, wagtailmetadata.models.WagtailImageMetadataMixin, 'wagtailcore.page', models.Model),
+        ),
+    ]
diff --git a/elections/migrations/0004_alter_electionsfaqpage_options.py b/elections/migrations/0004_alter_electionsfaqpage_options.py
new file mode 100644
index 0000000000000000000000000000000000000000..afcb580551adafca51b1f3aa1e1d5ef27245f678
--- /dev/null
+++ b/elections/migrations/0004_alter_electionsfaqpage_options.py
@@ -0,0 +1,17 @@
+# Generated by Django 4.1.10 on 2024-01-08 12:29
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('elections', '0003_electionsfaqpage'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='electionsfaqpage',
+            options={'verbose_name': 'Otázky a odpovědi'},
+        ),
+    ]
diff --git a/elections/models.py b/elections/models.py
index 1edd14661e6da373a6401bc9a799f04c755505e2..db0c10241cf3fc2d15c03a61b22234a600fcba98 100644
--- a/elections/models.py
+++ b/elections/models.py
@@ -81,6 +81,7 @@ class ElectionsHomePage(MainHomePageMixin):
     subpage_types = [
         "elections.ElectionsArticlesPage",
         "elections.ElectionsCandidatesPage",
+        "elections.ElectionsFaqPage",
         "elections.ElectionsSearchPage",
     ]
 
@@ -275,3 +276,50 @@ class ElectionsCandidatePage(
         )
 
         return context
+
+
+class ElectionsFaqPage(
+    ExtendedMetadataPageMixin,
+    SubpageMixin,
+    MetadataPageMixin,
+    CalendarMixin,
+    PageInMenuMixin,
+    Page,
+):
+    ## FIELDS
+
+    # content
+    content = StreamField(
+        [
+            ("person_answers", blocks.PersonFaqAnswersBlock()),
+        ],
+        verbose_name="Obsah",
+        blank=True,
+        use_json_field=True,
+    )
+
+    ## PANELS
+
+    content_panels = Page.content_panels + [
+        FieldPanel("content"),
+    ]
+
+    promote_panels = make_promote_panels()
+
+    ## RELATIONS
+
+    parent_page_types = ["elections.ElectionsHomePage"]
+    subpage_types = []
+
+    class Meta:
+        verbose_name = "Otázky a odpovědi"
+
+    ## OTHERS
+
+    def get_topic_names(self) -> list:
+        topic_names = []
+
+        for section in self.content:
+            topic_names.append(section.value["topic"])
+
+        return topic_names
diff --git a/elections/templates/elections/elections_faq_page.html b/elections/templates/elections/elections_faq_page.html
new file mode 100644
index 0000000000000000000000000000000000000000..6207b6defce3022d6b1a6ac5fda5289ee3be3bbb
--- /dev/null
+++ b/elections/templates/elections/elections_faq_page.html
@@ -0,0 +1,28 @@
+{% extends "styleguide2/base.html" %}
+
+{% load wagtailcore_tags %}
+
+{% block content %}
+  {% include 'styleguide2/includes/organisms/layout/elections/navbar.html' with selected_item=page.get_menu_title %}
+
+  <div class="__js-root">
+    <ui-view-provider
+      :initial="{view1: true, view2: false, view3: false, view4: false, view5: false}" :sync-location="true"
+      v-slot="{ isCurrentView, toggleView }"
+    >
+      {% include 'styleguide2/includes/organisms/header/elections/faq_header.html' with title=page.title ui_switch_iterable=page.get_topic_names %}
+
+      <main role="main" class="bg-grey-150 pb-10">
+          <div class="flex flex-col">
+          {% for block in page.content %}
+            {% with forloop.counter as iteration %}
+              {% include_block block %}
+            {% endwith %}
+          {% endfor %}
+        </div>
+      </main>
+    </ui-view-provider>
+  </div>
+
+  {% include 'styleguide2/includes/organisms/main_section/newsletter_section.html' %}
+{% endblock %}
diff --git a/shared/templates/styleguide2/includes/molecules/candidates/elections/candidate_primary_box.yaml b/shared/templates/styleguide2/includes/molecules/candidates/elections/candidate_primary_box.yaml
deleted file mode 100644
index 4d7ef146e7bff60ba9364a6db06604bb23ceda02..0000000000000000000000000000000000000000
--- a/shared/templates/styleguide2/includes/molecules/candidates/elections/candidate_primary_box.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-context:
-  name: 'Mikuláš Peksa'
-  image_source: '../../../../../static/images/mikulas-arrow.png'
-  position: 'Europoslanec'
-  description: 'Mikuláš Peksa (18. 6. 1986) vystudoval fyziku na Matematicko-fyzikální fakultě Univerzity Karlovy. V Německu pracoval jako správce Linuxových serverů a programátor v C++. Po návratu do Čech byl v roce 2017 zvolen poslancem PSP ČR, následně v roce 2019 poslancem Evropského parlamentu. Věnuje se zejména tématům spojeným s fungováním společnosti v digitálním věku.'
diff --git a/shared/templates/styleguide2/includes/molecules/candidates/elections/candidate_secondary_box.yaml b/shared/templates/styleguide2/includes/molecules/candidates/elections/candidate_secondary_box.yaml
deleted file mode 100644
index 063e289fe914767e29edc0ed2a43e52929d96dcb..0000000000000000000000000000000000000000
--- a/shared/templates/styleguide2/includes/molecules/candidates/elections/candidate_secondary_box.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-context:
-  number: '1'
-  name: 'Mikuláš Peksa'
-  image_source: 'https://www.extremnews.com/images/max_image_view-166664f1d580456c9866fa3c20ed545b.jpg'
-  position: 'Europoslanec'
-  description: 'Mikuláš Peksa (18. 6. 1986) vystudoval fyziku na Matematicko-fyzikální fakultě Univerzity Karlovy. V Německu pracoval jako správce Linuxových serverů a programátor v C++. Po návratu do Čech byl v roce 2017 zvolen poslancem PSP ČR, následně v roce 2019 poslancem Evropského parlamentu. Věnuje se zejména tématům spojeným s fungováním společnosti v digitálním věku.'
diff --git a/shared/templates/styleguide2/includes/molecules/navbar/additional_button.yaml b/shared/templates/styleguide2/includes/molecules/navbar/additional_button.yaml
deleted file mode 100644
index 03203f258c613c5b29701bffcec13e144bc6c1e9..0000000000000000000000000000000000000000
--- a/shared/templates/styleguide2/includes/molecules/navbar/additional_button.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-context:
-  button:
-    name: 'Text'
-    url: '#'
diff --git a/shared/templates/styleguide2/includes/molecules/search/universal_search_result.yaml b/shared/templates/styleguide2/includes/molecules/search/universal_search_result.yaml
deleted file mode 100644
index 71d8fec54c7c616a29b7c9b884734d2eed3521a9..0000000000000000000000000000000000000000
--- a/shared/templates/styleguide2/includes/molecules/search/universal_search_result.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-context:
-  title: 'Konspirační weby už nedosáhnou na veřejné peníze.'
-  perex: 'Metodika pomůže veřejným institucím zajistit, aby se jejich online inzerce neobjevila na portálech, na kterých by mohla poškodit jejich dobré jméno. Patří mezi ně hlavně konspirační a dezinformační weby. Metodika doporučuje například úřadům nebo státem ovládaným podnikům postupy pro zadávání inzerce, které firmy v soukromém sektoru už delší dobu běžně používají.'
diff --git a/shared/templates/styleguide2/includes/organisms/faq/faq_answer.html b/shared/templates/styleguide2/includes/organisms/faq/faq_answer.html
new file mode 100644
index 0000000000000000000000000000000000000000..623dd2a47707d7e35020f1c001d6ae0442169f96
--- /dev/null
+++ b/shared/templates/styleguide2/includes/organisms/faq/faq_answer.html
@@ -0,0 +1,69 @@
+<template v-if="isCurrentView('view1') || isCurrentView('view2')">
+  <ui-faq-section-header
+    iteration="{{ iteration }}"
+    name="{{ self.section_name }}"
+  ></ui-faq-section-header>
+
+  <div class="faq-answer bg-grey-150 pt-16" id="faq{{ iteration }}">
+    <div class="container--wide !mb-16">
+      <div class="
+        flex gap-16 items-start flex-col-reverse
+
+        lg:flex-row
+
+        faq-answer--content
+      ">
+        <div class="flex flex-col w-full gap-8">
+          {% for question in self.questions %}
+            <div class="flex flex-col gap-5">
+              <h2 class="text-5xl font-alt">{{ question.question }}</h2>
+
+              <div>
+                <span class="bg-black text-white text-sm px-4 py-1.5">
+                  {{ self.topic }}
+                </span>
+              </div>
+
+              <p class="text-black leading-7 text-lg">
+                {{ question.answer }}
+              </p>
+            </div>
+          {% endfor %}
+        </div>
+
+        <div
+          class="
+            flex gap-8 w-full items-center
+            faq-answer--person
+          "
+        >
+          <div
+            class="
+              flex flex-col justify-end items-end h-64 ml-[-5.5rem]
+
+              lg:h-96 lg:ml-0
+
+              faq-answer--person--text
+            "
+          >
+            <div class="font-alt text-5xl whitespace-nowrap leading-10">
+              Odpovídá
+            </div>
+            <div class="head-3xl whitespace-nowrap leading-8">
+              {{ self.person_page.name }}
+            </div>
+            <div class="whitespace-nowrap">
+              {{ self.person_page.position }}
+            </div>
+          </div>
+
+
+          <img
+            class="lg:h-96 h-64"
+            src="{{ image_src }}"
+          >
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
diff --git a/shared/templates/styleguide2/includes/organisms/header/elections/simple_header_with_ui_switch.html b/shared/templates/styleguide2/includes/organisms/header/elections/simple_header_with_ui_switch.html
index f90e9895c226a9c1fa47040f7551fafddb9d8e32..5d3db594e36ceb64f1d5beeba51a66a96667ad11 100644
--- a/shared/templates/styleguide2/includes/organisms/header/elections/simple_header_with_ui_switch.html
+++ b/shared/templates/styleguide2/includes/organisms/header/elections/simple_header_with_ui_switch.html
@@ -18,7 +18,7 @@
             @click="toggleView('view{{ forloop.counter }}')"
             class="switch__item--elections"
             :class="{'switch__item--active': isCurrentView('view{{ forloop.counter }}')}"
-          >{{ switch.name }}</a>
+          >{{ switch }}</a>
         {% endfor %}
       {% endblock %}
     </ui-horizontal-scrollable>
diff --git a/shared/templates/styleguide2/includes/organisms/layout/elections/navbar.yaml b/shared/templates/styleguide2/includes/organisms/layout/elections/navbar.yaml
deleted file mode 100644
index 669c562a0b8bba687329d8f261400263bf336677..0000000000000000000000000000000000000000
--- a/shared/templates/styleguide2/includes/organisms/layout/elections/navbar.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-context:
-  has_background: false
-
-  menu_items:
-    -
-      name: 'Kandidáti'
-      url: '#kandidati'
-    -
-      name: 'Priority pro Evropu'
-      url: '#program'
-    -
-      name: 'Aktuality'
-      url: '#'
-    -
-      name: 'Ptáte se'
-      url: '#'
-    -
-      name: 'Kontakty'
-      url: '#'
-
-  important_item: null