diff --git a/shared/migrations/0001_initial.py b/shared/migrations/0001_initial.py
index 258de701db3bd719b60aa720f6455f3bbb761297..e1d5eb9224b30e397cfc479de0595c8813773d19 100644
--- a/shared/migrations/0001_initial.py
+++ b/shared/migrations/0001_initial.py
@@ -1,10 +1,6 @@
-# Generated by Django 3.1.1 on 2020-10-07 07:27
+# Generated by Django 3.1.3 on 2021-01-18 22:48
 
-import django.db.models.deletion
-import wagtail.core.blocks
-import wagtail.core.fields
-import wagtail.images.blocks
-import wagtailmetadata.models
+import django.core.validators
 from django.db import migrations, models
 
 
@@ -12,91 +8,42 @@ class Migration(migrations.Migration):
 
     initial = True
 
-    dependencies = [
-        ("wagtailcore", "0052_pagelogentry"),
-        ("wagtailimages", "0022_uploadedimage"),
-    ]
+    dependencies = []
 
     operations = [
         migrations.CreateModel(
-            name="SharedArticle",
+            name="Person",
             fields=[
                 (
-                    "page_ptr",
-                    models.OneToOneField(
+                    "id",
+                    models.AutoField(
                         auto_created=True,
-                        on_delete=django.db.models.deletion.CASCADE,
-                        parent_link=True,
                         primary_key=True,
                         serialize=False,
-                        to="wagtailcore.page",
+                        verbose_name="ID",
                     ),
                 ),
+                ("username", models.TextField(verbose_name="Uživatelské jméno osoby")),
                 (
-                    "content",
-                    wagtail.core.fields.StreamField(
-                        [
-                            (
-                                "title",
-                                wagtail.core.blocks.CharBlock(
-                                    icon="title", label="nadpis"
-                                ),
-                            ),
-                            ("perex", wagtail.core.blocks.CharBlock(label="perex")),
-                            (
-                                "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",
-                                ),
-                            ),
-                            (
-                                "image",
-                                wagtail.images.blocks.ImageChooserBlock(
-                                    label="obrázek"
-                                ),
-                            ),
-                        ],
+                    "profile_id",
+                    models.IntegerField(
                         blank=True,
-                        verbose_name="obsah stránky",
+                        default=0,
+                        validators=[
+                            django.core.validators.MinValueValidator(0),
+                            django.core.validators.MaxValueValidator(2),
+                        ],
+                        verbose_name="Číslo medailonku (0..2) z lide.pirati.cz",
                     ),
                 ),
                 (
-                    "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",
-                    ),
+                    "perex",
+                    models.TextField(blank=True, verbose_name="Defaultni perex osoby"),
                 ),
             ],
             options={
-                "verbose_name": "Článek",
+                "verbose_name": "Pirát",
+                "verbose_name_plural": "Piráti",
             },
-            bases=(
-                wagtailmetadata.models.MetadataMixin,
-                "wagtailcore.page",
-                models.Model,
-            ),
         ),
     ]
diff --git a/shared/migrations/0002_auto_20201007_0933.py b/shared/migrations/0002_auto_20201007_0933.py
deleted file mode 100644
index 6534c9333d53e10242ad4f19393a6f065e175f0f..0000000000000000000000000000000000000000
--- a/shared/migrations/0002_auto_20201007_0933.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# Generated by Django 3.1.1 on 2020-10-07 07:33
-
-import django.db.models.deletion
-import wagtailmetadata.models
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("wagtailforms", "0004_add_verbose_name_plural"),
-        ("wagtailcore", "0052_pagelogentry"),
-        ("wagtailimages", "0022_uploadedimage"),
-        ("wagtailredirects", "0006_redirect_increase_max_length"),
-        ("shared", "0001_initial"),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name="Article",
-            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",
-                    ),
-                ),
-                (
-                    "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": "Článek",
-            },
-            bases=(
-                wagtailmetadata.models.MetadataMixin,
-                "wagtailcore.page",
-                models.Model,
-            ),
-        ),
-        migrations.DeleteModel(
-            name="SharedArticle",
-        ),
-    ]
diff --git a/shared/migrations/0003_auto_20201007_0944.py b/shared/migrations/0003_auto_20201007_0944.py
deleted file mode 100644
index d8dbec5abfab75b8c138dc4796079f312297a1e5..0000000000000000000000000000000000000000
--- a/shared/migrations/0003_auto_20201007_0944.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# Generated by Django 3.1.1 on 2020-10-07 07:44
-
-import django.db.models.deletion
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("wagtailimages", "0022_uploadedimage"),
-        ("shared", "0002_auto_20201007_0933"),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name="article",
-            name="image",
-            field=models.ForeignKey(
-                blank=True,
-                null=True,
-                on_delete=django.db.models.deletion.PROTECT,
-                to="wagtailimages.image",
-                verbose_name="obrázek",
-            ),
-        ),
-        migrations.AddField(
-            model_name="article",
-            name="perex",
-            field=models.CharField(blank=True, max_length=250, verbose_name="perex"),
-        ),
-        migrations.AddField(
-            model_name="article",
-            name="text",
-            field=models.TextField(blank=True, verbose_name="text článku"),
-        ),
-    ]
diff --git a/shared/migrations/0004_article_author.py b/shared/migrations/0004_article_author.py
deleted file mode 100644
index 4840c03cb2a2c6816ccb1c08eb7403fdd4e0972b..0000000000000000000000000000000000000000
--- a/shared/migrations/0004_article_author.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 3.1.1 on 2020-10-07 08:16
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("shared", "0003_auto_20201007_0944"),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name="article",
-            name="author",
-            field=models.TextField(blank=True, verbose_name="autor článku"),
-        ),
-    ]
diff --git a/shared/migrations/0005_auto_20201007_1028.py b/shared/migrations/0005_auto_20201007_1028.py
deleted file mode 100644
index b601a4f4c1f810525c92ec596a1cb1fa3d8bcfff..0000000000000000000000000000000000000000
--- a/shared/migrations/0005_auto_20201007_1028.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Generated by Django 3.1.1 on 2020-10-07 08:28
-
-import django.db.models.deletion
-import modelcluster.contrib.taggit
-import modelcluster.fields
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("taggit", "0003_taggeditem_add_unique_index"),
-        ("shared", "0004_article_author"),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name="ArticleTag",
-            fields=[
-                (
-                    "id",
-                    models.AutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                (
-                    "content_object",
-                    modelcluster.fields.ParentalKey(
-                        on_delete=django.db.models.deletion.CASCADE, to="shared.article"
-                    ),
-                ),
-                (
-                    "tag",
-                    models.ForeignKey(
-                        on_delete=django.db.models.deletion.CASCADE,
-                        related_name="shared_articletag_items",
-                        to="taggit.tag",
-                    ),
-                ),
-            ],
-            options={
-                "abstract": False,
-            },
-        ),
-        migrations.AddField(
-            model_name="article",
-            name="tags",
-            field=modelcluster.contrib.taggit.ClusterTaggableManager(
-                blank=True,
-                help_text="A comma-separated list of tags.",
-                through="shared.ArticleTag",
-                to="taggit.Tag",
-                verbose_name="Tags",
-            ),
-        ),
-    ]
diff --git a/shared/migrations/0006_personpage.py b/shared/migrations/0006_personpage.py
deleted file mode 100644
index d8e27a71a1e1ab006d4108fefc0d699015fcca00..0000000000000000000000000000000000000000
--- a/shared/migrations/0006_personpage.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# Generated by Django 3.1.1 on 2020-10-14 07:32
-
-import django.db.models.deletion
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("wagtailcore", "0052_pagelogentry"),
-        ("shared", "0005_auto_20201007_1028"),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name="PersonPage",
-            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",
-                    ),
-                ),
-                ("pirate_id", models.TextField(verbose_name="Pirate ID osoby")),
-                ("perex", models.TextField(blank=True, verbose_name="Perex osoby")),
-            ],
-            options={
-                "verbose_name": "Člověk",
-            },
-            bases=("wagtailcore.page",),
-        ),
-    ]
diff --git a/shared/migrations/0007_peoplepage.py b/shared/migrations/0007_peoplepage.py
deleted file mode 100644
index 7d5c3269e331eb24836f843f33cfde999d5800bd..0000000000000000000000000000000000000000
--- a/shared/migrations/0007_peoplepage.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Generated by Django 3.1.1 on 2020-10-14 07:54
-
-import django.db.models.deletion
-import wagtailmetadata.models
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("wagtailimages", "0022_uploadedimage"),
-        ("wagtailcore", "0052_pagelogentry"),
-        ("shared", "0006_personpage"),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name="PeoplePage",
-            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",
-                    ),
-                ),
-                (
-                    "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": "Stránka Lidé",
-            },
-            bases=(
-                wagtailmetadata.models.MetadataMixin,
-                "wagtailcore.page",
-                models.Model,
-            ),
-        ),
-    ]
diff --git a/shared/migrations/0008_personpage_search_image.py b/shared/migrations/0008_personpage_search_image.py
deleted file mode 100644
index d52ef3ffa403328e4537dd68a60318a1ff71f600..0000000000000000000000000000000000000000
--- a/shared/migrations/0008_personpage_search_image.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Generated by Django 3.1.1 on 2020-10-14 08:55
-
-import django.db.models.deletion
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("wagtailimages", "0022_uploadedimage"),
-        ("shared", "0007_peoplepage"),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name="personpage",
-            name="search_image",
-            field=models.ForeignKey(
-                blank=True,
-                null=True,
-                on_delete=django.db.models.deletion.SET_NULL,
-                related_name="+",
-                to="wagtailimages.image",
-                verbose_name="Search image",
-            ),
-        ),
-    ]
diff --git a/shared/migrations/0009_remove_article_author.py b/shared/migrations/0009_remove_article_author.py
deleted file mode 100644
index c42fe614587c131ee29b4745a5aa80f3be7eaab9..0000000000000000000000000000000000000000
--- a/shared/migrations/0009_remove_article_author.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Generated by Django 3.1.1 on 2020-10-14 13:13
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("shared", "0008_personpage_search_image"),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name="article",
-            name="author",
-        ),
-    ]
diff --git a/shared/migrations/0010_article_author.py b/shared/migrations/0010_article_author.py
deleted file mode 100644
index d3ce43b670b99c65a2f84b0925ecbf1eae611e83..0000000000000000000000000000000000000000
--- a/shared/migrations/0010_article_author.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# Generated by Django 3.1.1 on 2020-10-14 13:13
-
-import django.db.models.deletion
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("shared", "0009_remove_article_author"),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name="article",
-            name="author",
-            field=models.ForeignKey(
-                blank=True,
-                null=True,
-                on_delete=django.db.models.deletion.PROTECT,
-                to="shared.personpage",
-                verbose_name="Autor článku",
-            ),
-        ),
-    ]
diff --git a/shared/migrations/0011_personpage_profile_id.py b/shared/migrations/0011_personpage_profile_id.py
deleted file mode 100644
index 3af17dd3b9f8f7cd4b99ace49e22f57f083fa49c..0000000000000000000000000000000000000000
--- a/shared/migrations/0011_personpage_profile_id.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Generated by Django 3.1.1 on 2020-10-20 03:14
-
-import django.core.validators
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("shared", "0010_article_author"),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name="personpage",
-            name="profile_id",
-            field=models.IntegerField(
-                blank=True,
-                default=0,
-                validators=[
-                    django.core.validators.MinValueValidator(0),
-                    django.core.validators.MaxValueValidator(2),
-                ],
-                verbose_name="Číslo medailonku (0..2) z lide.pirati.cz",
-            ),
-        ),
-    ]
diff --git a/shared/migrations/0012_article_date.py b/shared/migrations/0012_article_date.py
deleted file mode 100644
index 0adf7dbea89144b3ddce39ff23db4bbceee64120..0000000000000000000000000000000000000000
--- a/shared/migrations/0012_article_date.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Generated by Django 3.1.1 on 2020-11-04 09:02
-
-import datetime
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("shared", "0011_personpage_profile_id"),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name="article",
-            name="date",
-            field=models.DateField(
-                default=datetime.datetime.now, verbose_name="datum článku"
-            ),
-        ),
-    ]
diff --git a/shared/migrations/0013_auto_20201104_1053.py b/shared/migrations/0013_auto_20201104_1053.py
deleted file mode 100644
index aa135331fcdb6172f41447374697cc67acebe55e..0000000000000000000000000000000000000000
--- a/shared/migrations/0013_auto_20201104_1053.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 3.1.1 on 2020-11-04 09:53
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("shared", "0012_article_date"),
-    ]
-
-    operations = [
-        migrations.RenameField(
-            model_name="personpage",
-            old_name="pirate_id",
-            new_name="username",
-        ),
-    ]
diff --git a/shared/migrations/0014_auto_20201104_1134.py b/shared/migrations/0014_auto_20201104_1134.py
deleted file mode 100644
index 0bbe1292b4c54f86b93e66b337b60b551e53a314..0000000000000000000000000000000000000000
--- a/shared/migrations/0014_auto_20201104_1134.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Generated by Django 3.1.1 on 2020-11-04 10:34
-
-import wagtail.core.fields
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("shared", "0013_auto_20201104_1053"),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name="article",
-            name="text",
-            field=wagtail.core.fields.RichTextField(
-                blank=True, verbose_name="text článku"
-            ),
-        ),
-    ]
diff --git a/shared/migrations/0015_auto_20210106_1029.py b/shared/migrations/0015_auto_20210106_1029.py
deleted file mode 100644
index 4f548a7237ff5c382bcc2fab22c36c26477a5379..0000000000000000000000000000000000000000
--- a/shared/migrations/0015_auto_20210106_1029.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Generated by Django 3.1.3 on 2021-01-06 09:29
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("shared", "0014_auto_20201104_1134"),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name="personpage",
-            name="username",
-            field=models.TextField(verbose_name="Uživatelské jméno osoby"),
-        ),
-    ]
diff --git a/shared/migrations/0016_auto_20210107_1025.py b/shared/migrations/0016_auto_20210107_1025.py
deleted file mode 100644
index 3557b89616d1699e20ddccc4b716a2ebe9c2a1df..0000000000000000000000000000000000000000
--- a/shared/migrations/0016_auto_20210107_1025.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Generated by Django 3.1.3 on 2021-01-07 09:25
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("shared", "0015_auto_20210106_1029"),
-    ]
-
-    operations = [
-        migrations.RemoveField(
-            model_name="personpage",
-            name="profile_id",
-        ),
-        migrations.RemoveField(
-            model_name="personpage",
-            name="username",
-        ),
-    ]
diff --git a/shared/migrations/0017_person.py b/shared/migrations/0017_person.py
deleted file mode 100644
index b259f24ed1ec67a83efe3cc275059a6c91524bb3..0000000000000000000000000000000000000000
--- a/shared/migrations/0017_person.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# Generated by Django 3.1.3 on 2021-01-07 09:58
-
-import django.core.validators
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("shared", "0016_auto_20210107_1025"),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name="Person",
-            fields=[
-                (
-                    "id",
-                    models.AutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                ("username", models.TextField(verbose_name="Uživatelské jméno osoby")),
-                (
-                    "profile_id",
-                    models.IntegerField(
-                        blank=True,
-                        default=0,
-                        validators=[
-                            django.core.validators.MinValueValidator(0),
-                            django.core.validators.MaxValueValidator(2),
-                        ],
-                        verbose_name="Číslo medailonku (0..2) z lide.pirati.cz",
-                    ),
-                ),
-                (
-                    "perex",
-                    models.TextField(blank=True, verbose_name="Defaultni perex osoby"),
-                ),
-            ],
-            options={
-                "verbose_name": "Pirat",
-                "verbose_name_plural": "Pirati",
-            },
-        ),
-    ]
diff --git a/shared/migrations/0018_auto_20210107_1101.py b/shared/migrations/0018_auto_20210107_1101.py
deleted file mode 100644
index ec027a2eb6aafca059b5657a8250c690446c0cb1..0000000000000000000000000000000000000000
--- a/shared/migrations/0018_auto_20210107_1101.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Generated by Django 3.1.3 on 2021-01-07 10:01
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("shared", "0017_person"),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name="person",
-            options={"verbose_name": "Pirát", "verbose_name_plural": "Piráti"},
-        ),
-    ]
diff --git a/shared/migrations/0019_personpage_person.py b/shared/migrations/0019_personpage_person.py
deleted file mode 100644
index 56781183a1d0efb6dd749fa0eb79868e05940447..0000000000000000000000000000000000000000
--- a/shared/migrations/0019_personpage_person.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Generated by Django 3.1.3 on 2021-01-07 10:30
-
-import django.db.models.deletion
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ("shared", "0018_auto_20210107_1101"),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name="personpage",
-            name="person",
-            field=models.ForeignKey(
-                null=True,
-                on_delete=django.db.models.deletion.PROTECT,
-                to="shared.person",
-            ),
-        ),
-    ]
diff --git a/shared/models.py b/shared/models.py
index 489bccedeecf7cf3e5546bcebd246aa7ada3b2f6..4007fae3160122d028c98267ad5f221df2d83c9f 100644
--- a/shared/models.py
+++ b/shared/models.py
@@ -1,18 +1,12 @@
-import datetime
-import random
-
 import requests
 from django.core.cache import cache
 from django.core.validators import MaxValueValidator, MinValueValidator
 from django.db import models
-from modelcluster.contrib.taggit import ClusterTaggableManager
-from modelcluster.fields import ParentalKey
-from taggit.models import TaggedItemBase
+from django.utils import timezone
 from wagtail.admin.edit_handlers import FieldPanel
 from wagtail.core.fields import RichTextField
 from wagtail.core.models import Page
 from wagtail.images.edit_handlers import ImageChooserPanel
-from wagtailmetadata.models import MetadataPageMixin
 
 
 class SubpageMixin:
@@ -21,39 +15,32 @@ class SubpageMixin:
     @property
     def root_page(self):
         if not hasattr(self, "_root_page"):
-            # Vypada to hackove ale lze takto pouzit: dle dokumentace get_ancestors vraci stranky v poradi
-            # od rootu, tedy domovska stranka je druha v poradi
+            # Vypada to hackove ale lze takto pouzit: dle dokumentace get_ancestors
+            # vraci stranky v poradi od rootu, tedy domovska stranka je druha v poradi
             self._root_page = self.get_ancestors().specific()[1]
         return self._root_page
 
 
-class ArticleTag(TaggedItemBase):
-    content_object = ParentalKey("shared.Article", on_delete=models.CASCADE)
-
-
 class ArticleMixin(models.Model):
     """ Spolecna pole vsech clanku """
 
-    perex = models.CharField("perex", max_length=250, blank=True)
-    text = RichTextField(
-        "text článku",
-        blank=True,
-        features=[
-            "h1",
-            "h2",
-            "h3",
-            "h4",
-            "bold",
-            "italic",
-            "ol",
-            "ul",
-            "link",
-            "document-link",
-        ],
-    )
-    date = models.DateField("datum článku", blank=False, default=datetime.datetime.now)
+    RICH_TEXT_FEATURES = [
+        "h2",
+        "h3",
+        "h4",
+        "bold",
+        "italic",
+        "ol",
+        "ul",
+        "link",
+        "document-link",
+    ]
 
-    tags = ClusterTaggableManager(through=ArticleTag, blank=True)
+    ### FIELDS
+
+    perex = models.CharField("perex", max_length=250, blank=True)
+    text = RichTextField("text článku", blank=True, features=RICH_TEXT_FEATURES)
+    date = models.DateField("datum článku", blank=False, default=timezone.now)
     image = models.ForeignKey(
         "wagtailimages.Image",
         on_delete=models.PROTECT,
@@ -61,21 +48,9 @@ class ArticleMixin(models.Model):
         null=True,
         verbose_name="obrázek",
     )
-    author = models.ForeignKey(
-        "shared.PersonPage",
-        verbose_name="Autor článku",
-        on_delete=models.PROTECT,
-        null=True,
-        blank=True,
-    )
-
-    class Meta:
-        abstract = True
-        verbose_name = "Článek"
+    author = models.CharField("autor", max_length=250, blank=True, null=True)
 
-
-class Article(ArticleMixin, Page, SubpageMixin, MetadataPageMixin):
-    """ Univerzalni clanek pro vsechny weby """
+    ### PANELS
 
     content_panels = Page.content_panels + [
         FieldPanel("perex"),
@@ -83,14 +58,16 @@ class Article(ArticleMixin, Page, SubpageMixin, MetadataPageMixin):
         FieldPanel("text"),
         FieldPanel("author"),
         ImageChooserPanel("image"),
-        FieldPanel("tags"),
     ]
 
+    class Meta:
+        abstract = True
+
 
 class Person(models.Model):
-    """Informace o Piratovi. Slouzi prevazne jako cache informaci o osobe pro uziti v ramci Majaku.
-    Snaha je zadavat tady minimum informaci o osobe a zbytek vytahovat via API z jinych zdroju,
-    neb nechceme dalsi databazi lidi.
+    """Informace o Piratovi. Slouzi prevazne jako cache informaci o osobe pro
+    uziti v ramci Majaku. Snaha je zadavat tady minimum informaci o osobe a
+    zbytek vytahovat via API z jinych zdroju, neb nechceme dalsi databazi lidi.
     """
 
     # ve formatu iapi: https://iapi.pirati.cz/v1/user?username=john.doe
@@ -160,53 +137,3 @@ class Person(models.Model):
     class Meta:
         verbose_name_plural = "Piráti"
         verbose_name = "Pirát"
-
-
-class PersonPage(SubpageMixin, MetadataPageMixin, Page):
-    """Stranka Pirata v kontextu jednoho webu"""
-
-    person = models.ForeignKey(Person, on_delete=models.PROTECT, null=True)
-    perex = models.TextField("Perex osoby", blank=True)
-
-    content_panels = Page.content_panels + [
-        FieldPanel("person"),
-        FieldPanel("perex"),
-    ]
-
-    class Meta:
-        verbose_name = "Člověk"  # to zni hrde
-
-    @property
-    def pageperex(self):
-        """Vraci perex Pirata nejblizzsi lokalnimu kontextu.
-        Zamerne jiny nazev, aby v template bylo na vyber z x.perex, x.person.perex a x.pageperex
-        """
-        return self.perex or self.person.perex
-
-    def get_context(self, request):
-        context = super().get_context(request)
-        # Na strance detailu cloveka se vpravo zobrazuji 3 dalsi nahodne profily
-        context["random_people"] = list(
-            self.get_siblings(inclusive=False).type(PersonPage).live().specific()
-        )
-        random.shuffle(context["random_people"])
-        context["random_people"] = context["random_people"][:3]
-        return context
-
-
-class PeoplePage(SubpageMixin, MetadataPageMixin, Page):
-    """ Stranka se zobrazenim lidi v dane organizaci """
-
-    settings_panels = []
-
-    subpage_types = [
-        "shared.PersonPage",
-    ]
-
-    class Meta:
-        verbose_name = "Stránka Lidé"
-
-    def get_context(self, request):
-        context = super().get_context(request)
-        context["people"] = self.get_children().live().specific()
-        return context