diff --git a/contracts/migrations/0001_initial.py b/contracts/migrations/0001_initial.py
index 5b23e59dc1ba9bb9a4323e0d7367b1d3edc88d6a..c15a6d40347952982d5cb1ede3b071ead300bd5c 100644
--- a/contracts/migrations/0001_initial.py
+++ b/contracts/migrations/0001_initial.py
@@ -1,17 +1,16 @@
-# Generated by Django 4.1.4 on 2023-02-20 11:46
+# Generated by Django 4.1.4 on 2023-02-21 20:57
 
 import colorfield.fields
-import django.db.models.deletion
-import django_countries.fields
-import markdownx.models
+import contracts.models
 from django.conf import settings
 from django.db import migrations, models
-
-import contracts.models
+import django.db.models.deletion
+import markdownx.models
 import shared.models
 
 
 class Migration(migrations.Migration):
+
     initial = True
 
     dependencies = [
@@ -20,640 +19,216 @@ class Migration(migrations.Migration):
 
     operations = [
         migrations.CreateModel(
-            name="Contract",
+            name='Contract',
             fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                (
-                    "all_parties_sign_date",
-                    models.DateField(
-                        blank=True, null=True, verbose_name="Datum podpisu všech stran"
-                    ),
-                ),
-                (
-                    "valid_start_date",
-                    models.DateField(verbose_name="Začátek účinnosti"),
-                ),
-                ("valid_end_date", models.DateField(verbose_name="Konec platnosti")),
-                (
-                    "legal_state",
-                    models.CharField(
-                        choices=[
-                            ("valid", "Platná"),
-                            ("effective", "Účinná"),
-                            ("not_effective", "Neúčinná"),
-                            ("invalid", "Neplatná"),
-                        ],
-                        max_length=13,
-                        verbose_name="Stav právního ujednání",
-                    ),
-                ),
-                (
-                    "public_state",
-                    models.CharField(
-                        choices=[("yes", "Veřejná"), ("no", "Neveřejná")],
-                        max_length=7,
-                        verbose_name="Veřejnost smlouvy",
-                    ),
-                ),
-                (
-                    "paper_form_state",
-                    models.CharField(
-                        choices=[
-                            ("sent", "Odeslaná"),
-                            ("stored", "Uložená"),
-                            ("to_shred", "Ke skartaci"),
-                            ("shredded", "Skartovaná"),
-                            ("lost", "Ztracená"),
-                        ],
-                        max_length=8,
-                        verbose_name="Stav papírové formy",
-                    ),
-                ),
-                (
-                    "publishing_rejection_comment",
-                    models.CharField(
-                        blank=True,
-                        help_text="Obsah není veřejně přístupný.",
-                        max_length=65536,
-                        null=True,
-                        verbose_name="Důvod nezveřejnění",
-                    ),
-                ),
-                (
-                    "tender_url",
-                    models.URLField(
-                        blank=True,
-                        max_length=256,
-                        null=True,
-                        verbose_name="Odkaz na výběrové řízení",
-                    ),
-                ),
-                (
-                    "agreement_url",
-                    models.URLField(
-                        blank=True,
-                        max_length=256,
-                        null=True,
-                        verbose_name="Odkaz na schválení",
-                    ),
-                ),
-                (
-                    "identifier",
-                    models.CharField(
-                        max_length=128, verbose_name="Identifikační číslo"
-                    ),
-                ),
-                (
-                    "notes",
-                    markdownx.models.MarkdownxField(
-                        blank=True,
-                        help_text="Poznámky jsou viditelné pro všechny, kteří mohou smlouvu spravovat.",
-                        null=True,
-                        verbose_name="Poznámky",
-                    ),
-                ),
-                (
-                    "summary",
-                    markdownx.models.MarkdownxField(
-                        blank=True,
-                        help_text="Obsah není veřejně přístupný.",
-                        null=True,
-                        verbose_name="Rekapitulace",
-                    ),
-                ),
-                (
-                    "created_by",
-                    models.ForeignKey(
-                        blank=True,
-                        help_text="Informace není veřejně přístupná. Pokud vytváříš novou smlouvu, budeš to ty.",
-                        null=True,
-                        on_delete=django.db.models.deletion.SET_NULL,
-                        related_name="uploaded_contracts",
-                        to=settings.AUTH_USER_MODEL,
-                        verbose_name="Vytvořena uživatelem",
-                    ),
-                ),
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('all_parties_sign_date', models.DateField(blank=True, null=True, verbose_name='Datum podpisu všech stran')),
+                ('identifier', models.CharField(max_length=128, verbose_name='Identifikační číslo')),
+                ('summary', models.CharField(blank=True, max_length=256, null=True, verbose_name='Sumarizace obsahu smlouvy')),
+                ('is_approved', models.BooleanField(help_text='Může měnit jen schvalovatel. Pokud je smlouva veřejná, zaškrtnutím se vypustí ven.', verbose_name='Je schválená')),
+                ('valid_start_date', models.DateField(verbose_name='Začátek účinnosti')),
+                ('valid_end_date', models.DateField(verbose_name='Konec účinnosti')),
+                ('legal_state', models.CharField(choices=[('valid', 'Platná'), ('effective', 'Účinná'), ('not_effective', 'Neúčinná'), ('invalid', 'Neplatná')], max_length=13, verbose_name='Stav právního ujednání')),
+                ('public_state', models.CharField(choices=[('yes', 'Veřejná'), ('no', 'Neveřejná')], max_length=7, verbose_name='Veřejnost smlouvy')),
+                ('paper_form_state', models.CharField(choices=[('sent', 'Odeslaná'), ('stored', 'Uložená'), ('to_shred', 'Ke skartaci'), ('shredded', 'Skartovaná'), ('lost', 'Ztracená')], max_length=8, verbose_name='Stav papírové formy')),
+                ('publishing_rejection_comment', models.CharField(blank=True, help_text='Obsah není veřejně přístupný.', max_length=65536, null=True, verbose_name='Důvod nezveřejnění')),
+                ('tender_url', models.URLField(blank=True, max_length=256, null=True, verbose_name='Odkaz na výběrové řízení')),
+                ('agreement_url', models.URLField(blank=True, max_length=256, null=True, verbose_name='Odkaz na schválení')),
+                ('expected_cost_year', models.IntegerField(blank=True, null=True, verbose_name='Očekávané výdaje (rok)')),
+                ('expected_cost_month', models.IntegerField(blank=True, null=True, verbose_name='Očekávané výdaje (měsíc)')),
+                ('expected_cost_hour', models.IntegerField(blank=True, null=True, verbose_name='Očekávané výdaje (hodina)')),
+                ('notes', markdownx.models.MarkdownxField(blank=True, help_text='Poznámky jsou viditelné pro všechny, kteří mohou smlouvu spravovat.', null=True, verbose_name='Poznámky')),
+                ('created_by', models.ForeignKey(blank=True, help_text='Informace není veřejně přístupná. Pokud vytváříš novou smlouvu, budeš to ty.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='uploaded_contracts', to=settings.AUTH_USER_MODEL, verbose_name='Vytvořena uživatelem')),
             ],
             options={
-                "verbose_name": "Smlouva",
-                "verbose_name_plural": "Smlouvy",
+                'verbose_name': 'Smlouva',
+                'verbose_name_plural': 'Smlouvy',
+                'permissions': (('approve', 'Schválit / zrušit schválení'),),
             },
         ),
         migrations.CreateModel(
-            name="Contractee",
+            name='Contractee',
             fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                (
-                    "name",
-                    models.CharField(
-                        default="Česká pirátská strana",
-                        max_length=256,
-                        verbose_name="Jméno",
-                    ),
-                ),
-                (
-                    "address_street_with_number",
-                    models.CharField(
-                        default="Na Moráni 360/3",
-                        max_length=256,
-                        verbose_name="Ulice, č.p.",
-                    ),
-                ),
-                (
-                    "address_district",
-                    models.CharField(
-                        default="Praha 2", max_length=256, verbose_name="Obec"
-                    ),
-                ),
-                (
-                    "address_zip",
-                    models.CharField(
-                        default="128 00", max_length=16, verbose_name="PSČ"
-                    ),
-                ),
-                (
-                    "address_country",
-                    django_countries.fields.CountryField(
-                        default="CZ", max_length=2, verbose_name="Země"
-                    ),
-                ),
-                (
-                    "ico_number",
-                    models.CharField(
-                        blank=True,
-                        default="71339698",
-                        max_length=16,
-                        null=True,
-                        verbose_name="IČO",
-                    ),
-                ),
-                (
-                    "department",
-                    models.CharField(
-                        blank=True,
-                        max_length=128,
-                        null=True,
-                        verbose_name="Organizační složka",
-                    ),
-                ),
-                (
-                    "color",
-                    colorfield.fields.ColorField(
-                        blank=True,
-                        default=None,
-                        image_field=None,
-                        max_length=18,
-                        null=True,
-                        samples=None,
-                        verbose_name="Barva",
-                    ),
-                ),
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('color', colorfield.fields.ColorField(blank=True, default=None, image_field=None, max_length=18, null=True, samples=None, verbose_name='Barva')),
+                ('name', models.CharField(default='Česká pirátská strana', max_length=256, verbose_name='Jméno')),
+                ('address_street_with_number', models.CharField(default='Na Moráni 360/3', max_length=256, verbose_name='Ulice, č.p.')),
+                ('address_district', models.CharField(default='Praha 2', max_length=256, verbose_name='Obec')),
+                ('address_zip', models.CharField(default='128 00', max_length=16, verbose_name='PSČ')),
+                ('address_country', models.CharField(default='CZ', max_length=256, verbose_name='Země')),
+                ('ico_number', models.CharField(blank=True, default='71339698', max_length=16, null=True, verbose_name='IČO')),
+                ('department', models.CharField(blank=True, max_length=128, null=True, verbose_name='Organizační složka')),
             ],
             options={
-                "verbose_name": "Naše smluvní strana",
-                "verbose_name_plural": "Naše smluvní strany",
+                'verbose_name': 'Naše smluvní strana',
+                'verbose_name_plural': 'Naše smluvní strany',
             },
         ),
         migrations.CreateModel(
-            name="ContractFilingArea",
+            name='ContractFilingArea',
             fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                ("name", models.CharField(max_length=32, verbose_name="Jméno")),
-                (
-                    "person_responsible",
-                    models.CharField(max_length=256, verbose_name="Odpovědná osoba"),
-                ),
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=32, verbose_name='Jméno')),
+                ('person_responsible', models.CharField(max_length=256, verbose_name='Odpovědná osoba')),
             ],
             options={
-                "verbose_name": "Spisovna",
-                "verbose_name_plural": "Spisovny",
+                'verbose_name': 'Spisovna',
+                'verbose_name_plural': 'Spisovny',
             },
             bases=(shared.models.NameStrMixin, models.Model),
         ),
         migrations.CreateModel(
-            name="ContractIssue",
+            name='ContractIssue',
             fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                ("name", models.CharField(max_length=32, verbose_name="Jméno")),
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=32, verbose_name='Jméno')),
             ],
             options={
-                "verbose_name": "Problém se smlouvou",
-                "verbose_name_plural": "Problémy se smlouvami",
+                'verbose_name': 'Problém se smlouvou',
+                'verbose_name_plural': 'Problémy se smlouvami',
             },
             bases=(shared.models.NameStrMixin, models.Model),
         ),
         migrations.CreateModel(
-            name="ContractType",
+            name='ContractType',
             fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                ("name", models.CharField(max_length=32, verbose_name="Jméno")),
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=32, verbose_name='Jméno')),
             ],
             options={
-                "verbose_name": "Typ smlouvy",
-                "verbose_name_plural": "Typy smlouvy",
+                'verbose_name': 'Typ smlouvy',
+                'verbose_name_plural': 'Typy smlouvy',
             },
             bases=(shared.models.NameStrMixin, models.Model),
         ),
         migrations.CreateModel(
-            name="Signee",
+            name='Signee',
             fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                ("name", models.CharField(max_length=256, verbose_name="Jméno")),
-                (
-                    "is_legal_entity",
-                    models.BooleanField(
-                        help_text="Důležité označit správně! Pokud není osoba právnická, zveřejňujeme pouze obec a zemi.",
-                        verbose_name="Je právnická osoba",
-                    ),
-                ),
-                (
-                    "address_street_with_number",
-                    models.CharField(
-                        help_text="Viditelné pouze u právnických osob.",
-                        max_length=256,
-                        verbose_name="Ulice, č.p.",
-                    ),
-                ),
-                (
-                    "address_district",
-                    models.CharField(max_length=256, verbose_name="Obec"),
-                ),
-                (
-                    "address_zip",
-                    models.CharField(
-                        help_text="Viditelné pouze u právnických osob.",
-                        max_length=16,
-                        verbose_name="PSČ",
-                    ),
-                ),
-                (
-                    "address_country",
-                    django_countries.fields.CountryField(
-                        max_length=2, verbose_name="Země"
-                    ),
-                ),
-                (
-                    "ico_number",
-                    models.CharField(
-                        blank=True, max_length=16, null=True, verbose_name="IČO"
-                    ),
-                ),
-                (
-                    "date_of_birth",
-                    models.DateField(
-                        blank=True, null=True, verbose_name="Datum narození"
-                    ),
-                ),
-                (
-                    "department",
-                    models.CharField(
-                        blank=True,
-                        max_length=128,
-                        null=True,
-                        verbose_name="Organizační složka",
-                    ),
-                ),
-                (
-                    "color",
-                    colorfield.fields.ColorField(
-                        blank=True,
-                        default=None,
-                        image_field=None,
-                        max_length=18,
-                        null=True,
-                        samples=None,
-                        verbose_name="Barva",
-                    ),
-                ),
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('color', colorfield.fields.ColorField(blank=True, default=None, image_field=None, max_length=18, null=True, samples=None, verbose_name='Barva')),
+                ('name', models.CharField(max_length=256, verbose_name='Jméno')),
+                ('is_legal_entity', models.BooleanField(help_text='Důležité označit správně! Pokud není osoba právnická, zveřejňujeme pouze obec a zemi.', verbose_name='Je právnická osoba')),
+                ('address_street_with_number', models.CharField(help_text='Viditelné pouze u právnických osob.', max_length=256, verbose_name='Ulice, č.p.')),
+                ('address_district', models.CharField(max_length=256, verbose_name='Obec')),
+                ('address_zip', models.CharField(help_text='Viditelné pouze u právnických osob.', max_length=16, verbose_name='PSČ')),
+                ('address_country', models.CharField(default='CZ', max_length=256, verbose_name='Země')),
+                ('ico_number', models.CharField(blank=True, max_length=16, null=True, verbose_name='IČO')),
+                ('date_of_birth', models.DateField(blank=True, null=True, verbose_name='Datum narození')),
+                ('department', models.CharField(blank=True, max_length=128, null=True, verbose_name='Organizační složka')),
             ],
             options={
-                "verbose_name": "Jiná smluvní strana",
-                "verbose_name_plural": "Ostatní smluvní strany",
+                'verbose_name': 'Jiná smluvní strana',
+                'verbose_name_plural': 'Ostatní smluvní strany',
             },
         ),
         migrations.CreateModel(
-            name="SigneeSignature",
+            name='SigneeSignature',
             fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                ("date", models.DateField(verbose_name="Datum podpisu")),
-                (
-                    "contract",
-                    models.ForeignKey(
-                        on_delete=django.db.models.deletion.CASCADE,
-                        related_name="signee_signatures",
-                        to="contracts.contract",
-                        verbose_name="Podpisy jiných smluvních stran",
-                    ),
-                ),
-                (
-                    "signee",
-                    models.ForeignKey(
-                        on_delete=django.db.models.deletion.CASCADE,
-                        related_name="signatures",
-                        to="contracts.signee",
-                        verbose_name="Smluvní strana",
-                    ),
-                ),
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('date', models.DateField(verbose_name='Datum podpisu')),
+                ('contract', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='signee_signatures', to='contracts.contract', verbose_name='Podpisy jiných smluvních stran')),
+                ('signee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='signatures', to='contracts.signee', verbose_name='Smluvní strana')),
             ],
             options={
-                "verbose_name": "Podpis jiné smluvní strany",
-                "verbose_name_plural": "Podpisy ostatních smluvních stran",
+                'verbose_name': 'Podpis jiné smluvní strany',
+                'verbose_name_plural': 'Podpisy ostatních smluvních stran',
             },
         ),
         migrations.CreateModel(
-            name="SigneeRepresentative",
+            name='SigneeRepresentative',
             fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                ("name", models.CharField(max_length=256, verbose_name="Jméno")),
-                (
-                    "function",
-                    models.CharField(
-                        blank=True, max_length=256, null=True, verbose_name="Funkce"
-                    ),
-                ),
-                (
-                    "role",
-                    models.CharField(
-                        blank=True, max_length=256, null=True, verbose_name="Role"
-                    ),
-                ),
-                (
-                    "signee",
-                    models.ForeignKey(
-                        on_delete=django.db.models.deletion.CASCADE,
-                        related_name="representatives",
-                        to="contracts.signee",
-                        verbose_name="Smluvní strana",
-                    ),
-                ),
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=256, verbose_name='Jméno')),
+                ('function', models.CharField(blank=True, max_length=256, null=True, verbose_name='Funkce')),
+                ('role', models.CharField(blank=True, max_length=256, null=True, verbose_name='Role')),
+                ('signee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='representatives', to='contracts.signee', verbose_name='Smluvní strana')),
             ],
             options={
-                "verbose_name": "Zástupce",
-                "verbose_name_plural": "Zástupci",
+                'verbose_name': 'Zástupce',
+                'verbose_name_plural': 'Zástupci',
             },
             bases=(contracts.models.RepresentativeMixin, models.Model),
         ),
         migrations.CreateModel(
-            name="ContractIntent",
+            name='ContractIntent',
             fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                ("name", models.CharField(max_length=128, verbose_name="Jméno")),
-                ("url", models.URLField(max_length=256, verbose_name="Odkaz")),
-                (
-                    "contract",
-                    models.ForeignKey(
-                        on_delete=django.db.models.deletion.CASCADE,
-                        related_name="intents",
-                        to="contracts.contract",
-                        verbose_name="Smlouva",
-                    ),
-                ),
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=128, verbose_name='Jméno')),
+                ('url', models.URLField(max_length=256, verbose_name='Odkaz')),
+                ('contract', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='intents', to='contracts.contract', verbose_name='Smlouva')),
             ],
             options={
-                "verbose_name": "Záměr",
-                "verbose_name_plural": "Záměry",
+                'verbose_name': 'Záměr',
+                'verbose_name_plural': 'Záměry',
             },
             bases=(shared.models.NameStrMixin, models.Model),
         ),
         migrations.CreateModel(
-            name="ContractFile",
+            name='ContractFile',
             fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                (
-                    "name",
-                    models.CharField(
-                        blank=True, max_length=128, null=True, verbose_name="Jméno"
-                    ),
-                ),
-                (
-                    "is_public",
-                    models.BooleanField(default=False, verbose_name="Veřejně dostupný"),
-                ),
-                ("file", models.FileField(upload_to="", verbose_name="Soubor")),
-                (
-                    "contract",
-                    models.ForeignKey(
-                        on_delete=django.db.models.deletion.CASCADE,
-                        related_name="files",
-                        to="contracts.contract",
-                        verbose_name="Soubory",
-                    ),
-                ),
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(blank=True, max_length=128, null=True, verbose_name='Jméno')),
+                ('is_public', models.BooleanField(default=False, verbose_name='Veřejně dostupný')),
+                ('file', models.FileField(upload_to='', verbose_name='Soubor')),
+                ('contract', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='contracts.contract', verbose_name='Soubory')),
             ],
             options={
-                "verbose_name": "Soubor",
-                "verbose_name_plural": "Soubory",
+                'verbose_name': 'Soubor',
+                'verbose_name_plural': 'Soubory',
             },
             bases=(shared.models.NameStrMixin, models.Model),
         ),
         migrations.CreateModel(
-            name="ContracteeSignature",
+            name='ContracteeSignature',
             fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                ("date", models.DateField(verbose_name="Datum podpisu")),
-                (
-                    "contract",
-                    models.ForeignKey(
-                        on_delete=django.db.models.deletion.CASCADE,
-                        related_name="contractee_signatures",
-                        to="contracts.contract",
-                        verbose_name="Podpisy našich smluvních stran",
-                    ),
-                ),
-                (
-                    "contractee",
-                    models.ForeignKey(
-                        on_delete=django.db.models.deletion.CASCADE,
-                        related_name="signatures",
-                        to="contracts.contractee",
-                        verbose_name="Smluvní strana",
-                    ),
-                ),
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('date', models.DateField(verbose_name='Datum podpisu')),
+                ('contract', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='contractee_signatures', to='contracts.contract', verbose_name='Podpisy našich smluvních stran')),
+                ('contractee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='signatures', to='contracts.contractee', verbose_name='Smluvní strana')),
             ],
             options={
-                "verbose_name": "Podpis naší smluvní strany",
-                "verbose_name_plural": "Podpisy našich smluvních stran",
+                'verbose_name': 'Podpis naší smluvní strany',
+                'verbose_name_plural': 'Podpisy našich smluvních stran',
             },
         ),
         migrations.CreateModel(
-            name="ContracteeRepresentative",
+            name='ContracteeRepresentative',
             fields=[
-                (
-                    "id",
-                    models.BigAutoField(
-                        auto_created=True,
-                        primary_key=True,
-                        serialize=False,
-                        verbose_name="ID",
-                    ),
-                ),
-                ("name", models.CharField(max_length=256, verbose_name="Jméno")),
-                (
-                    "function",
-                    models.CharField(
-                        blank=True, max_length=256, null=True, verbose_name="Funkce"
-                    ),
-                ),
-                (
-                    "role",
-                    models.CharField(
-                        blank=True, max_length=256, null=True, verbose_name="Role"
-                    ),
-                ),
-                (
-                    "contractee",
-                    models.ForeignKey(
-                        on_delete=django.db.models.deletion.CASCADE,
-                        related_name="representatives",
-                        to="contracts.contractee",
-                        verbose_name="Smluvní strana",
-                    ),
-                ),
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=256, verbose_name='Jméno')),
+                ('function', models.CharField(blank=True, max_length=256, null=True, verbose_name='Funkce')),
+                ('role', models.CharField(blank=True, max_length=256, null=True, verbose_name='Role')),
+                ('contractee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='representatives', to='contracts.contractee', verbose_name='Smluvní strana')),
             ],
             options={
-                "verbose_name": "Zástupce",
-                "verbose_name_plural": "Zástupci",
+                'verbose_name': 'Zástupce',
+                'verbose_name_plural': 'Zástupci',
             },
             bases=(contracts.models.RepresentativeMixin, models.Model),
         ),
         migrations.AddField(
-            model_name="contract",
-            name="filing_area",
-            field=models.ForeignKey(
-                blank=True,
-                help_text="Obsah není veřejně přístupný.",
-                null=True,
-                on_delete=django.db.models.deletion.SET_NULL,
-                related_name="filed_contracts",
-                to="contracts.contractfilingarea",
-                verbose_name="Spisovna",
-            ),
+            model_name='contract',
+            name='filing_area',
+            field=models.ForeignKey(blank=True, help_text='Obsah není veřejně přístupný.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='filed_contracts', to='contracts.contractfilingarea', verbose_name='Spisovna'),
         ),
         migrations.AddField(
-            model_name="contract",
-            name="issues",
-            field=models.ManyToManyField(
-                blank=True, to="contracts.contractissue", verbose_name="Problémy"
-            ),
+            model_name='contract',
+            name='issues',
+            field=models.ManyToManyField(blank=True, help_text='Veřejně nazváno "Poznámky".', to='contracts.contractissue', verbose_name='Problémy'),
         ),
         migrations.AddField(
-            model_name="contract",
-            name="primary_contract",
-            field=models.ForeignKey(
-                blank=True,
-                null=True,
-                on_delete=django.db.models.deletion.SET_NULL,
-                related_name="subcontracts",
-                to="contracts.contract",
-                verbose_name="Primární smlouva",
-            ),
+            model_name='contract',
+            name='primary_contract',
+            field=models.ForeignKey(blank=True, help_text='Např. pro dodatky nebo objednávky u rámcových smluv.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='subcontracts', to='contracts.contract', verbose_name='Primární smlouva'),
         ),
         migrations.AddField(
-            model_name="contract",
-            name="public_status_set_by",
-            field=models.ForeignKey(
-                blank=True,
-                help_text="Obsah není veřejně přístupný.",
-                null=True,
-                on_delete=django.db.models.deletion.SET_NULL,
-                related_name="public_status_altered_contracts",
-                to=settings.AUTH_USER_MODEL,
-                verbose_name="Zveřejněno / nezveřejněno uživatelem",
-            ),
+            model_name='contract',
+            name='public_status_set_by',
+            field=models.ForeignKey(blank=True, help_text='Obsah není veřejně přístupný.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='public_status_altered_contracts', to=settings.AUTH_USER_MODEL, verbose_name='Zveřejněno / nezveřejněno uživatelem'),
         ),
         migrations.AddField(
-            model_name="contract",
-            name="types",
-            field=models.ManyToManyField(
-                to="contracts.contracttype", verbose_name="Typ"
-            ),
+            model_name='contract',
+            name='types',
+            field=models.ManyToManyField(to='contracts.contracttype', verbose_name='Typ'),
         ),
     ]
diff --git a/contracts/migrations/0002_contract_is_approved_alter_contract_valid_end_date.py b/contracts/migrations/0002_contract_is_approved_alter_contract_valid_end_date.py
deleted file mode 100644
index a01c8f350e7a70cedd9c3018990be477fcef4d16..0000000000000000000000000000000000000000
--- a/contracts/migrations/0002_contract_is_approved_alter_contract_valid_end_date.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Generated by Django 4.1.4 on 2023-02-20 19:33
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ("contracts", "0001_initial"),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name="contract",
-            name="is_approved",
-            field=models.BooleanField(
-                default=False,
-                help_text="Může měnit jen schvalovatel. Pokud je smlouva veřejná, zaškrtnutím se vypustí ven.",
-                verbose_name="Je schválená",
-            ),
-            preserve_default=False,
-        ),
-        migrations.AlterField(
-            model_name="contract",
-            name="valid_end_date",
-            field=models.DateField(verbose_name="Konec účinnosti"),
-        ),
-    ]
diff --git a/contracts/migrations/0003_contract_expected_cost_hour_and_more.py b/contracts/migrations/0003_contract_expected_cost_hour_and_more.py
deleted file mode 100644
index e25cd4559bfaead1df9e18004f4d932e6948567b..0000000000000000000000000000000000000000
--- a/contracts/migrations/0003_contract_expected_cost_hour_and_more.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Generated by Django 4.1.4 on 2023-02-21 05:33
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ("contracts", "0002_contract_is_approved_alter_contract_valid_end_date"),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name="contract",
-            name="expected_cost_hour",
-            field=models.IntegerField(
-                blank=True, null=True, verbose_name="Očekávané výdaje (hodina)"
-            ),
-        ),
-        migrations.AddField(
-            model_name="contract",
-            name="expected_cost_month",
-            field=models.IntegerField(
-                blank=True, null=True, verbose_name="Očekávané výdaje (měsíc)"
-            ),
-        ),
-        migrations.AddField(
-            model_name="contract",
-            name="expected_cost_year",
-            field=models.IntegerField(
-                blank=True, null=True, verbose_name="Očekávané výdaje (rok)"
-            ),
-        ),
-    ]
diff --git a/contracts/migrations/0004_alter_contract_options.py b/contracts/migrations/0004_alter_contract_options.py
deleted file mode 100644
index 5b0c4b96c4c940682738096f6dbe3b795e7a7616..0000000000000000000000000000000000000000
--- a/contracts/migrations/0004_alter_contract_options.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Generated by Django 4.1.4 on 2023-02-21 05:42
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ("contracts", "0003_contract_expected_cost_hour_and_more"),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name="contract",
-            options={
-                "permissions": (("approve", "Schválit / zrušit schválení"),),
-                "verbose_name": "Smlouva",
-                "verbose_name_plural": "Smlouvy",
-            },
-        ),
-    ]
diff --git a/contracts/migrations/0005_alter_contract_primary_contract.py b/contracts/migrations/0005_alter_contract_primary_contract.py
deleted file mode 100644
index fa8184a23d52bca0344618cced3e7c7d16afbc91..0000000000000000000000000000000000000000
--- a/contracts/migrations/0005_alter_contract_primary_contract.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Generated by Django 4.1.4 on 2023-02-21 06:07
-
-import django.db.models.deletion
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ("contracts", "0004_alter_contract_options"),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name="contract",
-            name="primary_contract",
-            field=models.ForeignKey(
-                blank=True,
-                help_text="Např. pro dodatky nebo objednávky u rámcových smluv.",
-                null=True,
-                on_delete=django.db.models.deletion.SET_NULL,
-                related_name="subcontracts",
-                to="contracts.contract",
-                verbose_name="Primární smlouva",
-            ),
-        ),
-    ]
diff --git a/contracts/migrations/0006_alter_contract_issues_alter_contract_summary.py b/contracts/migrations/0006_alter_contract_issues_alter_contract_summary.py
deleted file mode 100644
index 6be67592a42b247842c5b546fa4f548163cbef8f..0000000000000000000000000000000000000000
--- a/contracts/migrations/0006_alter_contract_issues_alter_contract_summary.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Generated by Django 4.1.4 on 2023-02-21 19:13
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ("contracts", "0005_alter_contract_primary_contract"),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name="contract",
-            name="issues",
-            field=models.ManyToManyField(
-                blank=True,
-                help_text='Veřejně nazváno "Poznámky".',
-                to="contracts.contractissue",
-                verbose_name="Problémy",
-            ),
-        ),
-        migrations.AlterField(
-            model_name="contract",
-            name="summary",
-            field=models.CharField(
-                blank=True,
-                max_length=256,
-                null=True,
-                verbose_name="Sumarizace obsahu smlouvy",
-            ),
-        ),
-    ]
diff --git a/contracts/migrations/0007_alter_contractee_address_country_and_more.py b/contracts/migrations/0007_alter_contractee_address_country_and_more.py
deleted file mode 100644
index 97fba097517d5019c70471a2f507527f521b47c3..0000000000000000000000000000000000000000
--- a/contracts/migrations/0007_alter_contractee_address_country_and_more.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Generated by Django 4.1.4 on 2023-02-21 19:34
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-    dependencies = [
-        ("contracts", "0006_alter_contract_issues_alter_contract_summary"),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name="contractee",
-            name="address_country",
-            field=models.CharField(default="CZ", max_length=256, verbose_name="Země"),
-        ),
-        migrations.AlterField(
-            model_name="signee",
-            name="address_country",
-            field=models.CharField(default="CZ", max_length=256, verbose_name="Země"),
-        ),
-    ]
diff --git a/shared/templates/shared/includes/base.html b/shared/templates/shared/includes/base.html
index 8e1d971a3efd801aaecd2c5ccdddeba617a8f90f..f59fa3791d9234728035f378d21e082a001f0ed1 100644
--- a/shared/templates/shared/includes/base.html
+++ b/shared/templates/shared/includes/base.html
@@ -126,6 +126,70 @@
             </main>
         </div>
 
+        <footer class="footer bg-grey-700 text-white __js-root">
+            <div>
+                <div class="footer__main py-4 lg:py-16 container container--default">
+                    <section class="footer__brand">
+                        <a href="https://www.pirati.cz">
+                            <img
+                                src="https://styleguide.pirati.cz/2.11.x/images/logo-full-white.svg"
+                                alt="Logo Pirátské strany"
+                                class="w-32 md:w-40 pb-6"
+                            >
+                        </a>
+                        <p class="para mb-4 text-grey-200">
+                            <span class="copyleft inline-block">©</span> 2023 Piráti.
+                            Všechna práva vyhlazena.
+                            Sdílejte a nechte ostatní sdílet za stejných podmínek.
+                        </p>
+                        <p class="para mb-6 lg:mb-0 text-grey-200">
+                            <a href="https://www.pirati.cz/ochrana-osobnich-udaju/">
+                                <span class="text-grey-200">Zásady ochrany osobních údajů</span>
+                            </a>
+                        </p>
+                    </section>
+                    <section class="footer__social lg:text-right">
+                        <div class="mb-4">
+                            <div class="social-icon-group space-x-2 text-white pb-4">
+                                <a href="https://www.pirati.cz" class="social-icon">
+                                    <i class="ico--home"></i>
+                                </a>
+                                <a href="https://www.facebook.com/ceska.piratska.strana/" class="social-icon">
+                                    <i class="ico--facebook"></i>
+                                </a>
+                                <a href="https://twitter.com/PiratskaStrana" class="social-icon">
+                                    <i class="ico--twitter"></i>
+                                </a>
+                                <a href="https://www.youtube.com/user/CeskaPiratskaStrana" class="social-icon">
+                                    <i class="ico--youtube"></i>
+                                </a>
+                                <a href="https://www.instagram.com/pirati.cz/" class="social-icon">
+                                    <i class="ico--instagram"></i>
+                                </a>
+                                <a href="https://www.flickr.com/photos/pirati/" class="social-icon">
+                                    <i class="ico--flickr"></i>
+                                </a>
+                            </div>
+                        </div>
+                        <div class="flex flex-col md:flex-row lg:flex-col lg:items-end space-y-2 md:space-y-0 md:space-x-2 lg:space-x-0 lg:space-y-2">
+                            <a href="https://dary.pirati.cz" class="btn btn--icon btn--cyan-200 btn--hoveractive text-lg btn--fullwidth sm:btn--autowidth">
+                                <div class="btn__body-wrap">
+                                    <div class="btn__body">Přispěj</div>
+                                    <div class="btn__icon "><i class="ico--pig"></i></div>
+                                </div>
+                            </a>
+                            <a href="https://nalodeni.pirati.cz" class="btn btn--icon btn--blue-300 btn--hoveractive text-lg btn--fullwidth sm:btn--autowidth">
+                                <div class="btn__body-wrap">
+                                    <div class="btn__body ">Naloď se</div>
+                                    <div class="btn__icon "><i class="ico--anchor"></i></div>
+                                </div>
+                            </a>
+                        </div>
+                    </section>
+                </div>
+            </div>
+        </footer>
+
         <script
             src="https://styleguide.pirati.cz/2.11.x/js/main.bundle.js"
         ></script>