diff --git a/.gitignore b/.gitignore
index 9e27f6ec27a3c80d400fd7c16d725dbefbd64ea3..a919eaa96d9f1dae16bbdd533592d197186cdb59 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,6 @@ staticfiles/*
 package-lock.json
 webpack-stats.json
 .env
-shared/static/shared/main-*.js
+shared/static/shared/*.js
+shared/static/shared/*.css
+shared/static/shared/*.txt
diff --git a/README.md b/README.md
index 545d4688b28da7afd12d13d48dfb1e532dbebb73..8044e58f8013de4676f1820314f0a03379aae3bb 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,15 @@
 # Rybička
 
 Aplikace pro všemožné jednoduché nástroje, které pomohou automatizovat složité úkony.
+
+## Setup
+
+Požadavky:
+- Python 3.9+
+- Linuxové prostředí, na Windows netestováno
+
+```bash
+make install
+make build
+make run
+```
diff --git a/member_group_size_calc/static/member_group_size_calc/calculator.webp b/member_group_size_calc/static/member_group_size_calc/calculator.webp
new file mode 100644
index 0000000000000000000000000000000000000000..f2001113af3acfdcbaa5dbc82b7c38ee2e53a883
Binary files /dev/null and b/member_group_size_calc/static/member_group_size_calc/calculator.webp differ
diff --git a/member_group_size_calc/templates/member_group_size_calc/index.html b/member_group_size_calc/templates/member_group_size_calc/index.html
index bbf26e1d69b0d91ddaa3b03c2ad0d98e7a84ea2a..39fbb233e7d67a614199e7cd19f6f3362c317d1f 100644
--- a/member_group_size_calc/templates/member_group_size_calc/index.html
+++ b/member_group_size_calc/templates/member_group_size_calc/index.html
@@ -2,15 +2,16 @@
 
 {% load render_bundle from webpack_loader %}
 
-{% block name %}Kalkulačka velikosti skupiny členů{% endblock %}
-{% block description %}TODO - Description.{% endblock %}
+{% block title %}Kalkulačka velikosti skupiny členů{% endblock %}
+{% block header_name %}Skupiny členů{% endblock %}
+{% block description %}Výpočet velikosti skupiny členů podle jednoacího řádu.{% endblock %}
 
 {% block head %}
     {% render_bundle "member_group_size_calc" %}
 {% endblock %}
 
 {% block content %}
-    <main class="p-10">
+    <main>
         <h1 class="text-6xl font-bebas mb-5">Kalkulačka výpočtu skupiny členů</h1>
 
         <div class="bg-amber-100 p-4 flex flex-row items-center gap-4 mb-4 lg:w-[768px] md:w-full">
diff --git a/member_group_size_calc/urls.py b/member_group_size_calc/urls.py
index 44f2f3cda71938013ac2ee4af3d3adbdf8357659..f4631fca69d8201ba19ee349849affb71f2c0b7c 100644
--- a/member_group_size_calc/urls.py
+++ b/member_group_size_calc/urls.py
@@ -3,5 +3,5 @@ from django.urls import path
 from . import views
 
 urlpatterns = [
-    path("", views.index, name="member_group_size_calc_index")
+    path("", views.index, name="member_group_size_calc_index"),
 ]
diff --git a/rybicka/urls.py b/rybicka/urls.py
index 75edfc43b017332f5fbae7052f57e71800b2a297..fbfedf16485e96b0d616556486740e77b2148b92 100644
--- a/rybicka/urls.py
+++ b/rybicka/urls.py
@@ -17,4 +17,5 @@ from django.urls import include, path
 
 urlpatterns = [
     path("vypocet-skupiny-clenu", include("member_group_size_calc.urls")),
+    path("", include("shared.urls")),
 ]
diff --git a/shared/static/shared/style.css b/shared/static/shared/style.css
deleted file mode 100644
index b54a184b0e396110a90e38705c12381f49ecca55..0000000000000000000000000000000000000000
--- a/shared/static/shared/style.css
+++ /dev/null
@@ -1,769 +0,0 @@
-/*
-! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com
-*/
-
-/*
-1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
-2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
-*/
-
-*,
-::before,
-::after {
-  box-sizing: border-box;
-  /* 1 */
-  border-width: 0;
-  /* 2 */
-  border-style: solid;
-  /* 2 */
-  border-color: #e5e7eb;
-  /* 2 */
-}
-
-::before,
-::after {
-  --tw-content: '';
-}
-
-/*
-1. Use a consistent sensible line-height in all browsers.
-2. Prevent adjustments of font size after orientation changes in iOS.
-3. Use a more readable tab size.
-4. Use the user's configured `sans` font-family by default.
-5. Use the user's configured `sans` font-feature-settings by default.
-*/
-
-html {
-  line-height: 1.5;
-  /* 1 */
-  -webkit-text-size-adjust: 100%;
-  /* 2 */
-  -moz-tab-size: 4;
-  /* 3 */
-  -o-tab-size: 4;
-     tab-size: 4;
-  /* 3 */
-  font-family: Roboto Condensed, ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
-  /* 4 */
-  font-feature-settings: normal;
-  /* 5 */
-}
-
-/*
-1. Remove the margin in all browsers.
-2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
-*/
-
-body {
-  margin: 0;
-  /* 1 */
-  line-height: inherit;
-  /* 2 */
-}
-
-/*
-1. Add the correct height in Firefox.
-2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
-3. Ensure horizontal rules are visible by default.
-*/
-
-hr {
-  height: 0;
-  /* 1 */
-  color: inherit;
-  /* 2 */
-  border-top-width: 1px;
-  /* 3 */
-}
-
-/*
-Add the correct text decoration in Chrome, Edge, and Safari.
-*/
-
-abbr:where([title]) {
-  -webkit-text-decoration: underline dotted;
-          text-decoration: underline dotted;
-}
-
-/*
-Remove the default font size and weight for headings.
-*/
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-  font-size: inherit;
-  font-weight: inherit;
-}
-
-/*
-Reset links to optimize for opt-in styling instead of opt-out.
-*/
-
-a {
-  color: inherit;
-  text-decoration: inherit;
-}
-
-/*
-Add the correct font weight in Edge and Safari.
-*/
-
-b,
-strong {
-  font-weight: bolder;
-}
-
-/*
-1. Use the user's configured `mono` font family by default.
-2. Correct the odd `em` font sizing in all browsers.
-*/
-
-code,
-kbd,
-samp,
-pre {
-  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
-  /* 1 */
-  font-size: 1em;
-  /* 2 */
-}
-
-/*
-Add the correct font size in all browsers.
-*/
-
-small {
-  font-size: 80%;
-}
-
-/*
-Prevent `sub` and `sup` elements from affecting the line height in all browsers.
-*/
-
-sub,
-sup {
-  font-size: 75%;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
-}
-
-sub {
-  bottom: -0.25em;
-}
-
-sup {
-  top: -0.5em;
-}
-
-/*
-1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
-2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
-3. Remove gaps between table borders by default.
-*/
-
-table {
-  text-indent: 0;
-  /* 1 */
-  border-color: inherit;
-  /* 2 */
-  border-collapse: collapse;
-  /* 3 */
-}
-
-/*
-1. Change the font styles in all browsers.
-2. Remove the margin in Firefox and Safari.
-3. Remove default padding in all browsers.
-*/
-
-button,
-input,
-optgroup,
-select,
-textarea {
-  font-family: inherit;
-  /* 1 */
-  font-size: 100%;
-  /* 1 */
-  font-weight: inherit;
-  /* 1 */
-  line-height: inherit;
-  /* 1 */
-  color: inherit;
-  /* 1 */
-  margin: 0;
-  /* 2 */
-  padding: 0;
-  /* 3 */
-}
-
-/*
-Remove the inheritance of text transform in Edge and Firefox.
-*/
-
-button,
-select {
-  text-transform: none;
-}
-
-/*
-1. Correct the inability to style clickable types in iOS and Safari.
-2. Remove default button styles.
-*/
-
-button,
-[type='button'],
-[type='reset'],
-[type='submit'] {
-  -webkit-appearance: button;
-  /* 1 */
-  background-color: transparent;
-  /* 2 */
-  background-image: none;
-  /* 2 */
-}
-
-/*
-Use the modern Firefox focus style for all focusable elements.
-*/
-
-:-moz-focusring {
-  outline: auto;
-}
-
-/*
-Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
-*/
-
-:-moz-ui-invalid {
-  box-shadow: none;
-}
-
-/*
-Add the correct vertical alignment in Chrome and Firefox.
-*/
-
-progress {
-  vertical-align: baseline;
-}
-
-/*
-Correct the cursor style of increment and decrement buttons in Safari.
-*/
-
-::-webkit-inner-spin-button,
-::-webkit-outer-spin-button {
-  height: auto;
-}
-
-/*
-1. Correct the odd appearance in Chrome and Safari.
-2. Correct the outline style in Safari.
-*/
-
-[type='search'] {
-  -webkit-appearance: textfield;
-  /* 1 */
-  outline-offset: -2px;
-  /* 2 */
-}
-
-/*
-Remove the inner padding in Chrome and Safari on macOS.
-*/
-
-::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-
-/*
-1. Correct the inability to style clickable types in iOS and Safari.
-2. Change font properties to `inherit` in Safari.
-*/
-
-::-webkit-file-upload-button {
-  -webkit-appearance: button;
-  /* 1 */
-  font: inherit;
-  /* 2 */
-}
-
-/*
-Add the correct display in Chrome and Safari.
-*/
-
-summary {
-  display: list-item;
-}
-
-/*
-Removes the default spacing and border for appropriate elements.
-*/
-
-blockquote,
-dl,
-dd,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-hr,
-figure,
-p,
-pre {
-  margin: 0;
-}
-
-fieldset {
-  margin: 0;
-  padding: 0;
-}
-
-legend {
-  padding: 0;
-}
-
-ol,
-ul,
-menu {
-  list-style: none;
-  margin: 0;
-  padding: 0;
-}
-
-/*
-Prevent resizing textareas horizontally by default.
-*/
-
-textarea {
-  resize: vertical;
-}
-
-/*
-1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
-2. Set the default placeholder color to the user's configured gray 400 color.
-*/
-
-input::-moz-placeholder, textarea::-moz-placeholder {
-  opacity: 1;
-  /* 1 */
-  color: #9ca3af;
-  /* 2 */
-}
-
-input::placeholder,
-textarea::placeholder {
-  opacity: 1;
-  /* 1 */
-  color: #9ca3af;
-  /* 2 */
-}
-
-/*
-Set the default cursor for buttons.
-*/
-
-button,
-[role="button"] {
-  cursor: pointer;
-}
-
-/*
-Make sure disabled buttons don't get the pointer cursor.
-*/
-
-:disabled {
-  cursor: default;
-}
-
-/*
-1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
-2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
-   This can trigger a poorly considered lint error in some tools but is included by design.
-*/
-
-img,
-svg,
-video,
-canvas,
-audio,
-iframe,
-embed,
-object {
-  display: block;
-  /* 1 */
-  vertical-align: middle;
-  /* 2 */
-}
-
-/*
-Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
-*/
-
-img,
-video {
-  max-width: 100%;
-  height: auto;
-}
-
-/* Make elements with the HTML hidden attribute stay hidden by default */
-
-[hidden] {
-  display: none;
-}
-
-html {
-  font-family: "Roboto Condensed", system-ui, sans-serif;
-}
-
-*, ::before, ::after {
-  --tw-border-spacing-x: 0;
-  --tw-border-spacing-y: 0;
-  --tw-translate-x: 0;
-  --tw-translate-y: 0;
-  --tw-rotate: 0;
-  --tw-skew-x: 0;
-  --tw-skew-y: 0;
-  --tw-scale-x: 1;
-  --tw-scale-y: 1;
-  --tw-pan-x:  ;
-  --tw-pan-y:  ;
-  --tw-pinch-zoom:  ;
-  --tw-scroll-snap-strictness: proximity;
-  --tw-ordinal:  ;
-  --tw-slashed-zero:  ;
-  --tw-numeric-figure:  ;
-  --tw-numeric-spacing:  ;
-  --tw-numeric-fraction:  ;
-  --tw-ring-inset:  ;
-  --tw-ring-offset-width: 0px;
-  --tw-ring-offset-color: #fff;
-  --tw-ring-color: rgb(59 130 246 / 0.5);
-  --tw-ring-offset-shadow: 0 0 #0000;
-  --tw-ring-shadow: 0 0 #0000;
-  --tw-shadow: 0 0 #0000;
-  --tw-shadow-colored: 0 0 #0000;
-  --tw-blur:  ;
-  --tw-brightness:  ;
-  --tw-contrast:  ;
-  --tw-grayscale:  ;
-  --tw-hue-rotate:  ;
-  --tw-invert:  ;
-  --tw-saturate:  ;
-  --tw-sepia:  ;
-  --tw-drop-shadow:  ;
-  --tw-backdrop-blur:  ;
-  --tw-backdrop-brightness:  ;
-  --tw-backdrop-contrast:  ;
-  --tw-backdrop-grayscale:  ;
-  --tw-backdrop-hue-rotate:  ;
-  --tw-backdrop-invert:  ;
-  --tw-backdrop-opacity:  ;
-  --tw-backdrop-saturate:  ;
-  --tw-backdrop-sepia:  ;
-}
-
-::backdrop {
-  --tw-border-spacing-x: 0;
-  --tw-border-spacing-y: 0;
-  --tw-translate-x: 0;
-  --tw-translate-y: 0;
-  --tw-rotate: 0;
-  --tw-skew-x: 0;
-  --tw-skew-y: 0;
-  --tw-scale-x: 1;
-  --tw-scale-y: 1;
-  --tw-pan-x:  ;
-  --tw-pan-y:  ;
-  --tw-pinch-zoom:  ;
-  --tw-scroll-snap-strictness: proximity;
-  --tw-ordinal:  ;
-  --tw-slashed-zero:  ;
-  --tw-numeric-figure:  ;
-  --tw-numeric-spacing:  ;
-  --tw-numeric-fraction:  ;
-  --tw-ring-inset:  ;
-  --tw-ring-offset-width: 0px;
-  --tw-ring-offset-color: #fff;
-  --tw-ring-color: rgb(59 130 246 / 0.5);
-  --tw-ring-offset-shadow: 0 0 #0000;
-  --tw-ring-shadow: 0 0 #0000;
-  --tw-shadow: 0 0 #0000;
-  --tw-shadow-colored: 0 0 #0000;
-  --tw-blur:  ;
-  --tw-brightness:  ;
-  --tw-contrast:  ;
-  --tw-grayscale:  ;
-  --tw-hue-rotate:  ;
-  --tw-invert:  ;
-  --tw-saturate:  ;
-  --tw-sepia:  ;
-  --tw-drop-shadow:  ;
-  --tw-backdrop-blur:  ;
-  --tw-backdrop-brightness:  ;
-  --tw-backdrop-contrast:  ;
-  --tw-backdrop-grayscale:  ;
-  --tw-backdrop-hue-rotate:  ;
-  --tw-backdrop-invert:  ;
-  --tw-backdrop-opacity:  ;
-  --tw-backdrop-saturate:  ;
-  --tw-backdrop-sepia:  ;
-}
-
-.static {
-  position: static;
-}
-
-.mb-5 {
-  margin-bottom: 1.25rem;
-}
-
-.mb-4 {
-  margin-bottom: 1rem;
-}
-
-.mb-3 {
-  margin-bottom: 0.75rem;
-}
-
-.block {
-  display: block;
-}
-
-.inline-block {
-  display: inline-block;
-}
-
-.flex {
-  display: flex;
-}
-
-.table {
-  display: table;
-}
-
-.w-\[7ch\] {
-  width: 7ch;
-}
-
-.table-auto {
-  table-layout: auto;
-}
-
-.flex-row {
-  flex-direction: row;
-}
-
-.flex-col {
-  flex-direction: column;
-}
-
-.flex-col-reverse {
-  flex-direction: column-reverse;
-}
-
-.items-start {
-  align-items: flex-start;
-}
-
-.items-center {
-  align-items: center;
-}
-
-.gap-4 {
-  gap: 1rem;
-}
-
-.gap-3 {
-  gap: 0.75rem;
-}
-
-.border {
-  border-width: 1px;
-}
-
-.border-x {
-  border-left-width: 1px;
-  border-right-width: 1px;
-}
-
-.border-b {
-  border-bottom-width: 1px;
-}
-
-.border-r {
-  border-right-width: 1px;
-}
-
-.border-black {
-  --tw-border-opacity: 1;
-  border-color: rgb(0 0 0 / var(--tw-border-opacity));
-}
-
-.border-gray-100 {
-  --tw-border-opacity: 1;
-  border-color: rgb(243 244 246 / var(--tw-border-opacity));
-}
-
-.border-r-gray-100 {
-  --tw-border-opacity: 1;
-  border-right-color: rgb(243 244 246 / var(--tw-border-opacity));
-}
-
-.bg-amber-100 {
-  --tw-bg-opacity: 1;
-  background-color: rgb(254 243 199 / var(--tw-bg-opacity));
-}
-
-.bg-gray-100 {
-  --tw-bg-opacity: 1;
-  background-color: rgb(243 244 246 / var(--tw-bg-opacity));
-}
-
-.bg-black {
-  --tw-bg-opacity: 1;
-  background-color: rgb(0 0 0 / var(--tw-bg-opacity));
-}
-
-.p-10 {
-  padding: 2.5rem;
-}
-
-.p-4 {
-  padding: 1rem;
-}
-
-.px-4 {
-  padding-left: 1rem;
-  padding-right: 1rem;
-}
-
-.py-2 {
-  padding-top: 0.5rem;
-  padding-bottom: 0.5rem;
-}
-
-.px-5 {
-  padding-left: 1.25rem;
-  padding-right: 1.25rem;
-}
-
-.text-left {
-  text-align: left;
-}
-
-.text-center {
-  text-align: center;
-}
-
-.font-bebas {
-  font-family: Bebas Neue, ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
-}
-
-.text-6xl {
-  font-size: 3.75rem;
-  line-height: 1;
-}
-
-.text-3xl {
-  font-size: 1.875rem;
-  line-height: 2.25rem;
-}
-
-.text-lg {
-  font-size: 1.125rem;
-  line-height: 1.75rem;
-}
-
-.text-xl {
-  font-size: 1.25rem;
-  line-height: 1.75rem;
-}
-
-.font-bold {
-  font-weight: 700;
-}
-
-.font-normal {
-  font-weight: 400;
-}
-
-.font-light {
-  font-weight: 300;
-}
-
-.text-amber-800 {
-  --tw-text-opacity: 1;
-  color: rgb(146 64 14 / var(--tw-text-opacity));
-}
-
-.text-amber-900 {
-  --tw-text-opacity: 1;
-  color: rgb(120 53 15 / var(--tw-text-opacity));
-}
-
-.text-gray-800 {
-  --tw-text-opacity: 1;
-  color: rgb(31 41 55 / var(--tw-text-opacity));
-}
-
-.text-gray-900 {
-  --tw-text-opacity: 1;
-  color: rgb(17 24 39 / var(--tw-text-opacity));
-}
-
-.text-white {
-  --tw-text-opacity: 1;
-  color: rgb(255 255 255 / var(--tw-text-opacity));
-}
-
-.underline {
-  text-decoration-line: underline;
-}
-
-.duration-100 {
-  transition-duration: 100ms;
-}
-
-@layer typography {
-  .font-bebas {
-    font-family: "Bebas Neue";
-  }
-}
-
-.hover\:bg-white:hover {
-  --tw-bg-opacity: 1;
-  background-color: rgb(255 255 255 / var(--tw-bg-opacity));
-}
-
-.hover\:text-black:hover {
-  --tw-text-opacity: 1;
-  color: rgb(0 0 0 / var(--tw-text-opacity));
-}
-
-@media (min-width: 768px) {
-  .md\:w-full {
-    width: 100%;
-  }
-
-  .md\:flex-row {
-    flex-direction: row;
-  }
-
-  .md\:items-start {
-    align-items: flex-start;
-  }
-}
-
-@media (min-width: 1024px) {
-  .lg\:w-\[768px\] {
-    width: 768px;
-  }
-}
diff --git a/shared/templates/shared/base.html b/shared/templates/shared/base.html
index dcadafc96b347be7cb2f250aea90b11a621bd000..de685278b34b8cc01ce284ad5e9660b4df4b321d 100644
--- a/shared/templates/shared/base.html
+++ b/shared/templates/shared/base.html
@@ -7,7 +7,7 @@
         <meta charset="utf-8">
         <meta name="viewport" content="width=device-width, initial-scale=1">
 
-        <title>{% block name %}{% endblock %}</title>
+        <title>{% block title %}{% endblock %}</title>
         <meta name="description" content="{% block description %}{% endblock %}">
 
         <link
@@ -15,10 +15,23 @@
             type="text/css"
             href="{% static "shared/style.css" %}"
         >
+
+        <!-- BEGIN External styles -->
+        <link
+            href="https://styleguide.pirati.cz/2.3.x/css/styles.css"
+            rel="stylesheet"
+            media="all"
+        >
+        <link
+            href="https://styleguide.pirati.cz/2.3.x/css/pattern-scaffolding.css"
+            rel="stylesheet"
+            media="all"
+        >
         <link
             rel="stylesheet"
             href="https://gfonts.pirati.cz/css2?family=Bebas+Neue&family=Roboto+Condensed:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&display=swap"
         >
+        <!-- END External styles -->
 
         <link rel="shortcut icon" type="image/png" href="https://www.pirati.cz/static/shared/favicon/favicon-196.png" sizes="196x196">
         <link rel="shortcut icon" type="image/png" href="https://www.pirati.cz/static/shared/favicon/favicon-128.png" sizes="128x128">
@@ -31,6 +44,40 @@
         {% block head %}{% endblock %}
     </head>
     <body>
-        {% block content %}{% endblock %}
+        <nav class="navbar navbar--simple __js-root">
+            <ui-app inline-template>
+                <ui-navbar inline-template>
+                    <div>
+                        <div class="container container--default navbar__content" :class="{'navbar__content--initialized': true}">
+                            <div class="navbar__brand my-4 flex items-center lg:pr-8 lg:my-0">
+                                <a href="/#TODO">
+                                    <img src="https://styleguide.pirati.cz/2.3.x/images/logo-round-white.svg" class="w-8">
+                                </a>
+                                <div class="pl-4 font-bold text-xl lg:border-r lg:border-grey-300 lg:pr-8">
+                                    <a href="/#TODO">Rybička</a>
+                                </div>
+                            </div>
+                            {% block header_name %}{% endblock %}
+                        </div>
+                    </div>
+                </ui-navbar>
+            </ui-app>
+        </nav>
+        <div class="container container--default py-8 lg:py-24 {% if page.root_page.narrow_layout %}max-w-screen-lg{% endif%}">
+            {% block content %}{% endblock %}
+        </div>
+        <footer class="footer bg-grey-700 text-white __js-root">
+            <ui-app inline-template>
+                <div>
+                    <div class="footer__main py-4 lg:py-16 container container--default">
+                        <section class="footer__brand">
+                            <p class="para hidden md:block md:mb-4 lg:mb-0 text-grey-200">
+                                <span class="copyleft inline-block">&copy;</span> {% now "Y" %} Piráti. Všechna práva vyhlazena. Sdílejte a nechte ostatní sdílet za stejných podmínek.
+                            </p>
+                        </section>
+                    </div>
+                </div>
+            </ui-app>
+        </footer>
     </body>
 </html>
diff --git a/shared/templates/shared/index.html b/shared/templates/shared/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..4d196443a553c82eaaf0d8e7b9b29fb74a6f7bdf
--- /dev/null
+++ b/shared/templates/shared/index.html
@@ -0,0 +1,39 @@
+{% extends "shared/base.html" %}
+
+{% load render_bundle from webpack_loader %}
+{% load static %}
+
+{% block title %}Rybička{% endblock %}
+{% block header_name %}Seznam nástrojů{% endblock %}
+{% block description %}{% endblock %}
+
+{% block head %}
+    {% render_bundle "base" %}
+{% endblock %}
+
+{% block content %}
+    <main>
+        <h1 class="text-6xl font-bebas mb-5">Rychlé nástroje</h1>
+        <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
+           <article class="card">
+                <a href="{% url "member_group_size_calc_index" %}">
+                    <img
+                        src="{% static "member_group_size_calc/calculator.webp" %}"
+                        alt="Kalkulačka výpočtu skupiny členů"
+                        class="w-full h-48 object-cover"
+                    >
+                </a>
+                <div class="p-4">
+                    <h2 class="mb-2 text-xl font-bold">
+                        <a href="{% url "member_group_size_calc_index" %}">
+                            Kalkulačka výpočtu skupiny členů
+                        </a>
+                    </h2>
+                    <div class="font-light text-sm break-words">
+                        Výpočet velikosti skupiny členů podle jednoacího řádu.
+                    </div>
+                </div>
+            </article>
+        </div>
+    </main>
+{% endblock %}
diff --git a/shared/urls.py b/shared/urls.py
index f5e3311dedb416e655ecacc84c06ee01e37e8511..b8464da87f6227a5f8f78f2ae4212cc0f54b4fba 100644
--- a/shared/urls.py
+++ b/shared/urls.py
@@ -2,4 +2,6 @@ from django.urls import path
 
 from . import views
 
-urlpatterns = []
+urlpatterns = [
+	path("", views.index, name="shared_index"),
+]
diff --git a/shared/views.py b/shared/views.py
index 91ea44a218fbd2f408430959283f0419c921093e..e2cf407c9e85695afc70aca11b3244284e637032 100644
--- a/shared/views.py
+++ b/shared/views.py
@@ -1,3 +1,9 @@
 from django.shortcuts import render
 
 # Create your views here.
+
+def index(request):
+    return render(
+        request,
+        "shared/index.html"
+    )
diff --git a/static_src/base.css b/static_src/base.css
index 0462d9f608d2c9a067247b9fe81195d5db6e4169..7791e10096d506e2c40b39f6d8c12f437f972212 100644
--- a/static_src/base.css
+++ b/static_src/base.css
@@ -17,3 +17,13 @@
 }
 
 @import url("https://gfonts.pirati.cz/css2?family=Bebas+Neue&family=Roboto+Condensed:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&display=swap");
+
+.card {
+    box-shadow: 0 3px 1px -2px rgba(221,221,221,.43), 0 2px 2px 0 rgba(221,221,221,.37), 0 1px 5px 0 rgba(221,221,221,.35);
+}
+
+.card:hover {
+    transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform;
+    transition-duration: .2s;
+    box-shadow: 0 10px 13px -6px rgba(221,221,221,.43), 0 21px 33px 3px rgba(221,221,221,.37), 0 8px 40px 7px rgba(221,221,221,.35);
+}