diff --git a/pdp/migrations/0001_initial.py b/pdp/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..2ea569fa3239a0da16bd400a13ad17f02e4e53dd
--- /dev/null
+++ b/pdp/migrations/0001_initial.py
@@ -0,0 +1,511 @@
+# Generated by Django 3.1.2 on 2020-11-27 09:39
+
+import django.db.models.deletion
+import wagtail.contrib.table_block.blocks
+import wagtail.core.blocks
+import wagtail.core.fields
+import wagtail.documents.blocks
+import wagtail.images.blocks
+import wagtailmetadata.models
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ("wagtailcore", "0052_pagelogentry"),
+        ("wagtailimages", "0022_uploadedimage"),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name="PdpHomePage",
+            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",
+                    ),
+                ),
+                (
+                    "content",
+                    wagtail.core.fields.StreamField(
+                        [
+                            (
+                                "title",
+                                wagtail.core.blocks.CharBlock(
+                                    group="nadpisy",
+                                    icon="title",
+                                    label="nadpis",
+                                    template="uniweb/blocks/title.html",
+                                ),
+                            ),
+                            (
+                                "advanced_title",
+                                wagtail.core.blocks.StructBlock(
+                                    [
+                                        (
+                                            "align",
+                                            wagtail.core.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("left", "vlevo"),
+                                                    ("center", "uprostřed"),
+                                                    ("right", "vpravo"),
+                                                ],
+                                                label="zarovnání",
+                                            ),
+                                        ),
+                                        (
+                                            "color",
+                                            wagtail.core.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("black_on_white", "černá na bílé"),
+                                                    ("white_on_black", "bílá na černé"),
+                                                    ("white_on_blue", "bílá na modré"),
+                                                    (
+                                                        "white_on_cyan",
+                                                        "bílá na tyrkysové",
+                                                    ),
+                                                    (
+                                                        "white_on_violet",
+                                                        "bílá na fialové",
+                                                    ),
+                                                ],
+                                                label="barva",
+                                            ),
+                                        ),
+                                        (
+                                            "title",
+                                            wagtail.core.blocks.CharBlock(
+                                                label="nadpis"
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            ),
+                            (
+                                "picture_title",
+                                wagtail.core.blocks.StructBlock(
+                                    [
+                                        (
+                                            "color",
+                                            wagtail.core.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("black_on_white", "černá na bílé"),
+                                                    ("white_on_black", "bílá na černé"),
+                                                    ("white_on_blue", "bílá na modré"),
+                                                    (
+                                                        "white_on_cyan",
+                                                        "bílá na tyrkysové",
+                                                    ),
+                                                    (
+                                                        "white_on_violet",
+                                                        "bílá na fialové",
+                                                    ),
+                                                ],
+                                                label="barva",
+                                            ),
+                                        ),
+                                        (
+                                            "title",
+                                            wagtail.core.blocks.CharBlock(
+                                                label="nadpis"
+                                            ),
+                                        ),
+                                        (
+                                            "picture",
+                                            wagtail.images.blocks.ImageChooserBlock(
+                                                help_text="rozměr na výšku 75px nebo více (obrázek bude zmenšen na výšku 75px)",
+                                                label="obrázek",
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            ),
+                            (
+                                "text",
+                                wagtail.core.blocks.RichTextBlock(
+                                    features=[
+                                        "h2",
+                                        "h3",
+                                        "h4",
+                                        "h5",
+                                        "bold",
+                                        "italic",
+                                        "ol",
+                                        "ul",
+                                        "hr",
+                                        "link",
+                                        "document-link",
+                                        "image",
+                                        "superscript",
+                                        "subscript",
+                                        "strikethrough",
+                                        "blockquote",
+                                    ],
+                                    group="texty",
+                                    label="text",
+                                    template="uniweb/blocks/text.html",
+                                ),
+                            ),
+                            (
+                                "advanced_text",
+                                wagtail.core.blocks.StructBlock(
+                                    [
+                                        (
+                                            "align",
+                                            wagtail.core.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("left", "vlevo"),
+                                                    ("center", "uprostřed"),
+                                                    ("right", "vpravo"),
+                                                ],
+                                                label="zarovnání",
+                                            ),
+                                        ),
+                                        (
+                                            "color",
+                                            wagtail.core.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("black_on_white", "černá na bílé"),
+                                                    ("white_on_black", "bílá na černé"),
+                                                    ("white_on_blue", "bílá na modré"),
+                                                    (
+                                                        "white_on_cyan",
+                                                        "bílá na tyrkysové",
+                                                    ),
+                                                    (
+                                                        "white_on_violet",
+                                                        "bílá na fialové",
+                                                    ),
+                                                ],
+                                                label="barva",
+                                            ),
+                                        ),
+                                        (
+                                            "text",
+                                            wagtail.core.blocks.RichTextBlock(
+                                                features=[
+                                                    "h2",
+                                                    "h3",
+                                                    "h4",
+                                                    "h5",
+                                                    "bold",
+                                                    "italic",
+                                                    "ol",
+                                                    "ul",
+                                                    "hr",
+                                                    "link",
+                                                    "document-link",
+                                                    "image",
+                                                    "superscript",
+                                                    "subscript",
+                                                    "strikethrough",
+                                                    "blockquote",
+                                                ],
+                                                label="text",
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            ),
+                            (
+                                "text_columns",
+                                wagtail.core.blocks.StructBlock(
+                                    [
+                                        (
+                                            "left_text",
+                                            wagtail.core.blocks.RichTextBlock(
+                                                features=[
+                                                    "h2",
+                                                    "h3",
+                                                    "h4",
+                                                    "h5",
+                                                    "bold",
+                                                    "italic",
+                                                    "ol",
+                                                    "ul",
+                                                    "hr",
+                                                    "link",
+                                                    "document-link",
+                                                    "image",
+                                                    "superscript",
+                                                    "subscript",
+                                                    "strikethrough",
+                                                    "blockquote",
+                                                ],
+                                                label="levý sloupec",
+                                            ),
+                                        ),
+                                        (
+                                            "right_text",
+                                            wagtail.core.blocks.RichTextBlock(
+                                                features=[
+                                                    "h2",
+                                                    "h3",
+                                                    "h4",
+                                                    "h5",
+                                                    "bold",
+                                                    "italic",
+                                                    "ol",
+                                                    "ul",
+                                                    "hr",
+                                                    "link",
+                                                    "document-link",
+                                                    "image",
+                                                    "superscript",
+                                                    "subscript",
+                                                    "strikethrough",
+                                                    "blockquote",
+                                                ],
+                                                label="pravý sloupec",
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            ),
+                            (
+                                "advanced_text_columns",
+                                wagtail.core.blocks.StructBlock(
+                                    [
+                                        (
+                                            "align",
+                                            wagtail.core.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("left", "vlevo"),
+                                                    ("center", "uprostřed"),
+                                                    ("right", "vpravo"),
+                                                ],
+                                                label="zarovnání",
+                                            ),
+                                        ),
+                                        (
+                                            "color",
+                                            wagtail.core.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("black_on_white", "černá na bílé"),
+                                                    ("white_on_black", "bílá na černé"),
+                                                    ("white_on_blue", "bílá na modré"),
+                                                    (
+                                                        "white_on_cyan",
+                                                        "bílá na tyrkysové",
+                                                    ),
+                                                    (
+                                                        "white_on_violet",
+                                                        "bílá na fialové",
+                                                    ),
+                                                ],
+                                                label="barva",
+                                            ),
+                                        ),
+                                        (
+                                            "left_text",
+                                            wagtail.core.blocks.RichTextBlock(
+                                                features=[
+                                                    "h2",
+                                                    "h3",
+                                                    "h4",
+                                                    "h5",
+                                                    "bold",
+                                                    "italic",
+                                                    "ol",
+                                                    "ul",
+                                                    "hr",
+                                                    "link",
+                                                    "document-link",
+                                                    "image",
+                                                    "superscript",
+                                                    "subscript",
+                                                    "strikethrough",
+                                                    "blockquote",
+                                                ],
+                                                label="levý sloupec",
+                                            ),
+                                        ),
+                                        (
+                                            "right_text",
+                                            wagtail.core.blocks.RichTextBlock(
+                                                features=[
+                                                    "h2",
+                                                    "h3",
+                                                    "h4",
+                                                    "h5",
+                                                    "bold",
+                                                    "italic",
+                                                    "ol",
+                                                    "ul",
+                                                    "hr",
+                                                    "link",
+                                                    "document-link",
+                                                    "image",
+                                                    "superscript",
+                                                    "subscript",
+                                                    "strikethrough",
+                                                    "blockquote",
+                                                ],
+                                                label="pravý sloupec",
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            ),
+                            (
+                                "gallery",
+                                wagtail.core.blocks.ListBlock(
+                                    wagtail.images.blocks.ImageChooserBlock(
+                                        label="obrázek"
+                                    ),
+                                    group="ostatní",
+                                    icon="image",
+                                    label="galerie",
+                                    template="uniweb/blocks/gallery.html",
+                                ),
+                            ),
+                            (
+                                "picture_list",
+                                wagtail.core.blocks.StructBlock(
+                                    [
+                                        (
+                                            "color",
+                                            wagtail.core.blocks.ChoiceBlock(
+                                                choices=[
+                                                    ("black_on_white", "černá na bílé"),
+                                                    ("white_on_black", "bílá na černé"),
+                                                    ("white_on_blue", "bílá na modré"),
+                                                    (
+                                                        "white_on_cyan",
+                                                        "bílá na tyrkysové",
+                                                    ),
+                                                    (
+                                                        "white_on_violet",
+                                                        "bílá na fialové",
+                                                    ),
+                                                ],
+                                                label="barva",
+                                            ),
+                                        ),
+                                        (
+                                            "items",
+                                            wagtail.core.blocks.ListBlock(
+                                                wagtail.core.blocks.RichTextBlock(
+                                                    features=[
+                                                        "h2",
+                                                        "h3",
+                                                        "h4",
+                                                        "h5",
+                                                        "bold",
+                                                        "italic",
+                                                        "ol",
+                                                        "ul",
+                                                        "hr",
+                                                        "link",
+                                                        "document-link",
+                                                        "image",
+                                                        "superscript",
+                                                        "subscript",
+                                                        "strikethrough",
+                                                        "blockquote",
+                                                    ],
+                                                    label="odstavec",
+                                                ),
+                                                label="odstavce",
+                                            ),
+                                        ),
+                                        (
+                                            "picture",
+                                            wagtail.images.blocks.ImageChooserBlock(
+                                                help_text="rozměr 25x25px nebo více (obrázek bude zmenšen na 25x25px)",
+                                                label="obrázek",
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            ),
+                            (
+                                "table",
+                                wagtail.contrib.table_block.blocks.TableBlock(
+                                    group="ostatní",
+                                    label="tabulka",
+                                    template="uniweb/blocks/table.html",
+                                ),
+                            ),
+                            (
+                                "jupyter",
+                                wagtail.documents.blocks.DocumentChooserBlock(
+                                    group="ostatní", label="Jupyter notebook"
+                                ),
+                            ),
+                        ],
+                        blank=True,
+                        verbose_name="obsah stránky",
+                    ),
+                ),
+                (
+                    "matomo_id",
+                    models.IntegerField(
+                        blank=True,
+                        null=True,
+                        verbose_name="Matomo ID pro sledování návštěvnosti",
+                    ),
+                ),
+                (
+                    "top_menu",
+                    wagtail.core.fields.StreamField(
+                        [
+                            (
+                                "item",
+                                wagtail.core.blocks.StructBlock(
+                                    [
+                                        (
+                                            "name",
+                                            wagtail.core.blocks.CharBlock(
+                                                label="název"
+                                            ),
+                                        ),
+                                        (
+                                            "page",
+                                            wagtail.core.blocks.PageChooserBlock(
+                                                label="stránka",
+                                                page_type=[
+                                                    "uniweb.UniwebHomePage",
+                                                    "uniweb.UniwebFlexiblePage",
+                                                ],
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            )
+                        ],
+                        blank=True,
+                        verbose_name="horní menu",
+                    ),
+                ),
+                (
+                    "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={
+                "verbose_name": "Pirátská datová platforma",
+            },
+            bases=(
+                "wagtailcore.page",
+                wagtailmetadata.models.MetadataMixin,
+                models.Model,
+            ),
+        ),
+    ]
diff --git a/pdp/models.py b/pdp/models.py
index 71a836239075aa6e6e4ecb700e9c42c95c022d91..b5d2bd1a884763f53440ab1ec0eb42745213b722 100644
--- a/pdp/models.py
+++ b/pdp/models.py
@@ -1,3 +1,66 @@
 from django.db import models
+from django.utils.translation import gettext_lazy
+from wagtail.admin.edit_handlers import (
+    FieldPanel,
+    HelpPanel,
+    MultiFieldPanel,
+    StreamFieldPanel,
+)
+from wagtail.core.fields import StreamField
+from wagtail.core.models import Page
+from wagtail.images.edit_handlers import ImageChooserPanel
 
-# Create your models here.
+from shared.mixins import MatomoMixin
+from tuning import help
+from uniweb import models as uniweb
+
+
+class PdpHomePage(
+    Page,
+    uniweb.UniwebContentMixin,
+    uniweb.UniwebTopmenuMixin,
+    uniweb.MetadataPageMixin,
+    MatomoMixin,
+):
+
+    ### PANELS
+
+    content_panels = Page.content_panels + [
+        StreamFieldPanel("content"),
+    ]
+
+    promote_panels = [
+        MultiFieldPanel(
+            [
+                FieldPanel("seo_title"),
+                FieldPanel("search_description"),
+                ImageChooserPanel("search_image"),
+                HelpPanel(help.build(help.IMPORTANT_TITLE)),
+            ],
+            gettext_lazy("Common page configuration"),
+        ),
+    ]
+
+    settings_panels = [
+        MultiFieldPanel(
+            [
+                # definovano v MatomoMixin, TODO obstrahovat rozsireni settings_panels do mixinu
+                FieldPanel("matomo_id"),
+            ],
+            "nastavení webu",
+        ),
+        StreamFieldPanel("top_menu"),  # z uniwebTopmenuMixin
+    ]
+
+    subpage_types = [
+        # "uniweb.UniwebFlexiblePage",
+    ]
+
+    ### OTHERS
+
+    class Meta:
+        verbose_name = "Pirátská datová platforma"
+
+    @property
+    def root_page(self):
+        return self
diff --git a/shared/mixins.py b/shared/mixins.py
new file mode 100644
index 0000000000000000000000000000000000000000..a39f712f12cb84c3fde461875f561294fc583e46
--- /dev/null
+++ b/shared/mixins.py
@@ -0,0 +1,11 @@
+from django.db import models
+
+
+class MatomoMixin(models.Model):
+
+    matomo_id = models.IntegerField(
+        "Matomo ID pro sledování návštěvnosti", blank=True, null=True
+    )
+
+    class Meta:
+        abstract = True
diff --git a/uniweb/models.py b/uniweb/models.py
index 73e9f53cd0296de2ac31e9bc2a5f52d28dc9ba75..3e0b7dd8033eff0ea5536bd1808fe19c0e28c654 100644
--- a/uniweb/models.py
+++ b/uniweb/models.py
@@ -16,6 +16,7 @@ from wagtail.images.blocks import ImageChooserBlock
 from wagtail.images.edit_handlers import ImageChooserPanel
 from wagtailmetadata.models import MetadataPageMixin
 
+from shared.mixins import MatomoMixin
 from tuning import help
 
 from .constants import (
@@ -221,18 +222,24 @@ class UniwebContentMixin(models.Model):
         abstract = True
 
 
-class UniwebHomePage(Page, UniwebContentMixin, MetadataPageMixin):
-    ### FIELDS
+class UniwebTopmenuMixin(models.Model):
 
-    # settings
-    matomo_id = models.IntegerField(
-        "Matomo ID pro sledování návštěvnosti", blank=True, null=True
-    )
     top_menu = StreamField(
         [("item", MenuItemBlock())],
         verbose_name="horní menu",
         blank=True,
     )
+
+    class Meta:
+        abstract = True
+
+
+class UniwebHomePage(
+    Page, UniwebContentMixin, UniwebTopmenuMixin, MetadataPageMixin, MatomoMixin
+):
+    ### FIELDS
+
+    # settings
     narrow_layout = models.BooleanField(
         "zúžený obsah stránky",
         default=False,
@@ -260,12 +267,12 @@ class UniwebHomePage(Page, UniwebContentMixin, MetadataPageMixin):
     settings_panels = [
         MultiFieldPanel(
             [
-                FieldPanel("matomo_id"),
+                FieldPanel("matomo_id"),  # z MatomoMixin
                 FieldPanel("narrow_layout"),
             ],
             "nastavení webu",
         ),
-        StreamFieldPanel("top_menu"),
+        StreamFieldPanel("top_menu"),  # z UniwebTopmenuMixin
     ]
 
     ### RELATIONS