summaryrefslogtreecommitdiff
path: root/src/koszko_org_website/templates
diff options
context:
space:
mode:
authorWojtek Kosior <koszko@koszko.org>2022-11-16 18:52:53 +0100
committerWojtek Kosior <koszko@koszko.org>2022-11-16 21:43:50 +0100
commit08f4d63f450ccd96f5077bc60774d8f1fecec92c (patch)
tree7f09941d62ca23737bc0b1f616d2d50eb7dd14af /src/koszko_org_website/templates
downloadkoszko-org-website-08f4d63f450ccd96f5077bc60774d8f1fecec92c.tar.gz
koszko-org-website-08f4d63f450ccd96f5077bc60774d8f1fecec92c.zip
initial commitv2022.11.16
Diffstat (limited to 'src/koszko_org_website/templates')
-rw-r--r--src/koszko_org_website/templates/__base.html.jinja253
-rw-r--r--src/koszko_org_website/templates/__campaign_base.html.jinja258
-rw-r--r--src/koszko_org_website/templates/__index.html.jinja27
-rw-r--r--src/koszko_org_website/templates/__koszko_base.html.jinja210
-rw-r--r--src/koszko_org_website/templates/cv.html.jinja159
-rw-r--r--src/koszko_org_website/templates/en/__footer.html.jinja27
-rw-r--r--src/koszko_org_website/templates/en/__footer_for_qr.html.jinja19
-rw-r--r--src/koszko_org_website/templates/en/__index.html.jinja160
-rw-r--r--src/koszko_org_website/templates/en/author.html.jinja33
-rw-r--r--src/koszko_org_website/templates/en/cv.html.jinja160
-rw-r--r--src/koszko_org_website/templates/en/koszko.html.jinja157
-rw-r--r--src/koszko_org_website/templates/en/prima_aprilis.html.jinja20
-rw-r--r--src/koszko_org_website/templates/en/qr.html.jinja28
-rw-r--r--src/koszko_org_website/templates/koszko.html.jinja66
-rw-r--r--src/koszko_org_website/templates/pl/__footer.html.jinja30
-rw-r--r--src/koszko_org_website/templates/pl/__footer_for_qr.html.jinja17
-rw-r--r--src/koszko_org_website/templates/pl/__index.html.jinja175
-rw-r--r--src/koszko_org_website/templates/pl/author.html.jinja36
-rw-r--r--src/koszko_org_website/templates/pl/cv.html.jinja159
-rw-r--r--src/koszko_org_website/templates/pl/koszko.html.jinja162
-rw-r--r--src/koszko_org_website/templates/pl/prima_aprilis.html.jinja20
-rw-r--r--src/koszko_org_website/templates/pl/qr.html.jinja28
22 files changed, 2204 insertions, 0 deletions
diff --git a/src/koszko_org_website/templates/__base.html.jinja b/src/koszko_org_website/templates/__base.html.jinja
new file mode 100644
index 0000000..c05a0a1
--- /dev/null
+++ b/src/koszko_org_website/templates/__base.html.jinja
@@ -0,0 +1,253 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website base page template.
+
+Copyright (C) 2022 Wojtek Kosior <koszko@koszko.org>
+#}
+
+{% macro same_lang_url(page_path) -%}
+ {{ url_for('.show_page_in_' ~ lang_short, page_path=page_path) }}
+{%- endmacro %}
+
+{%
+ set section_ns = namespace(
+ in_section = false,
+ id = none,
+ linked = false,
+ first = true
+ )
+%}
+
+{% macro maybe_link(to, link=true) %}
+ {%- if to is not none and link -%}
+ <a href="{{ to }}">{{ caller() }}</a>
+ {%- else -%}
+ {{ caller() }}
+ {%- endif -%}
+{% endmacro %}
+
+{% macro header(level, text='', link_to_section=true) %}
+ <h{{ level }}{{ header_attrs|default({})|xmlattr }}>
+ {%
+ set should_link = section_ns.in_section and
+ link_to_section and
+ not section_ns.linked and
+ section_ns.id is not none
+ %}
+ {% set section_ns.linked = section_ns.linked or should_link %}
+ {% set caller_markup = caller() if caller is defined else '' %}
+ {% call maybe_link('#' ~ section_ns.id, link=should_link) -%}
+ {{ text }}{{ caller_markup }}
+ {%- endcall %}
+ </h{{ level }}>
+{% endmacro %}
+
+{% macro section(id=none) %}
+ {% set attrs = {} %}
+ {% do attrs.update(section_attrs|default({})) %}
+ {% if section_ns.first %}
+ {% set section_ns.first = false %}
+ {% set classes = attrs.get('class') %}
+ {% set classes = (classes ~ ' ' if classes else '') ~ 'first-section' %}
+ {% do attrs.update({'class': classes}) %}
+ {% endif %}
+ <section{{ attrs|xmlattr }}>
+ {% if id is not none %}
+ <div{{ {'class': 'section-anchor', 'id': id}|xmlattr }}></div>
+ {% endif %}
+ {% if section_ns.in_section %}
+ {{ raise_exception('Section defined inside another section.') }}
+ {% else %}
+ {% set section_ns.in_section = true %}
+ {% set section_ns.id = id %}
+ {% set section_ns.linked = false %}
+ {% endif %}
+ {{ caller() }}
+ {% set section_ns.in_section = false %}
+ </section>
+{% endmacro %}
+
+{% macro para(ensure_containing_section=true) %}
+ {% if section_ns.in_section or not ensure_containing_section %}
+ <p>
+ {{ caller() }}
+ </p>
+ {% else %}
+ {% set caller_snapshot = caller %}
+ {% call section() %}
+ <p>
+ {{ caller_snapshot() }}
+ </p>
+ {% endcall %}
+ {% endif %}
+{% endmacro %}
+
+{% macro link(to, text='') -%}
+ <a href="{{ to }}">{{ text }}
+ {%- if caller is defined -%}
+ {{ caller() }}
+ {%- endif -%}
+ </a>
+{%- endmacro %}
+
+{% macro bold(text='') -%}
+ <span class="bold">{{ text }}
+ {%- if caller is defined -%}
+ {{ caller() }}
+ {%- endif -%}
+ </span>
+{%- endmacro %}
+
+{% macro italic(text='') -%}
+ <span class="italic">{{ text }}
+ {%- if caller is defined -%}
+ {{ caller() }}
+ {%- endif -%}
+ </span>
+{%- endmacro %}
+
+{% macro unordered_list() %}
+ <ul>
+ {{ caller() }}
+ </ul>
+{% endmacro %}
+
+{% macro list_entry() %}
+ <li>
+ {{ caller() }}
+ </li>
+{% endmacro %}
+
+{% macro descriptions() %}
+ <dl>
+ {{ caller() }}
+ </dl>
+{% endmacro %}
+
+{% macro desc_term(text='') %}
+ {{ '<div>'|safe }}
+ <dt>{{ text }}
+ {%- if caller is defined -%}
+ {{ caller() }}
+ {%- endif -%}
+ </dt>
+{% endmacro %}
+
+{% macro desc_desc(text='') %}
+ <dd>{{ text }}
+ {%- if caller is defined -%}
+ {{ caller() }}
+ {%- endif -%}
+ </dd>
+ {{ '</div>'|safe }}
+{% endmacro %}
+
+{% macro img(url, alt_text, extra_classes=[]) %}
+ {% set attrs = {'class': (['pure-img'] + extra_classes)|join(' ')} %}
+ {% do attrs.update({'src': url, 'alt': alt_text, 'draggable': false}) %}
+ <img {{ attrs|xmlattr }}>
+{% endmacro %}
+
+{% macro aside(text='') %}
+ <aside>{{ text }}
+ {%- if caller is defined -%}
+ {{ caller() }}
+ {%- endif -%}
+ </aside>
+{% endmacro %}
+
+{% macro sup(text='') -%}
+ <sup>{{ text }}
+ {%- if caller is defined -%}
+ {{ caller() }}
+ {%- endif -%}
+ </sup>
+{%- endmacro %}
+
+{% set numberlinks_ns = namespace(next_num=1, nums={}) %}
+
+{% macro numberlink(link_url) -%}
+ {%- if link_url not in numberlinks_ns.nums -%}
+ {%- do numberlinks_ns.nums.update({link_url: numberlinks_ns.next_num}) -%}
+ {%- set numberlinks_ns.next_num = numberlinks_ns.next_num + 1 -%}
+ {%- endif -%}
+ {%- call sup() -%}
+ {{ link(link_url, '[' ~ numberlinks_ns.nums[link_url] ~ ']') }}
+ {%- endcall -%}
+{%- endmacro %}
+
+{% macro newline() %}
+ <br>
+{% endmacro %}
+
+{% macro nbsp() -%}
+ &nbsp;
+{%- endmacro %}
+
+{% macro unicode(code) -%}
+ &#{{ code }};
+{%- endmacro %}
+
+<!DOCTYPE html>
+<html>
+ <head>
+ {% block head %}
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta http-equiv="Content-Security-Policy" content="script-src 'none'">
+ <title>
+ {% block title %}
+ {% endblock %}
+ </title>
+ {% block external_css %}
+ <link rel="stylesheet" href="/static/normalize.css">
+ <link rel="stylesheet" href="/static/pure-base.css">
+ <link rel="stylesheet" href="/static/pure-tables.css">
+ <link rel="stylesheet" href="/static/pure-menus-core.css">
+ <link rel="stylesheet" href="/static/pure-menus-skin.css">
+ {% endblock %}
+ <style>
+ {% block style %}
+ .bold {
+ font-weight: bold;
+ }
+
+ .italic {
+ font-style: italic;
+ }
+
+ h1 a, h2 a, h1 a:visited, h2 a:visited {
+ text-decoration: none;
+ color: inherit;
+ }
+
+ .section-anchor {
+ position: relative;
+ }
+
+ section > p, section > dl {
+ margin-left: 20px;
+ }
+
+ section > .center_text {
+ margin-left: 0px;
+ }
+
+ .center-text {
+ text-align: center;
+ }
+
+ .pure-menu {
+ user-select: none;
+ }
+ {% endblock %}
+ </style>
+ {% endblock %}
+ </head>
+ <body>
+ {% block body %}
+ Kocham Asię Ɛ>
+ {% endblock %}
+ </body>
+</html>
diff --git a/src/koszko_org_website/templates/__campaign_base.html.jinja b/src/koszko_org_website/templates/__campaign_base.html.jinja
new file mode 100644
index 0000000..0cb6ad2
--- /dev/null
+++ b/src/koszko_org_website/templates/__campaign_base.html.jinja
@@ -0,0 +1,258 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website campaign pages template.
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "__base.html.jinja" %}
+
+{% block external_css %}
+ {{ super() }}
+
+ <link rel="stylesheet" href="/static/pure-menus-horizontal.css">
+ <link rel="icon" type="image/x-icon" href="/static/campaign-favicon.ico">
+{% endblock %}
+
+{% block style %}
+ {{ super() }}
+
+ input {
+ display: none;
+ }
+
+ * {
+ color: #777;
+ }
+
+ body {
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ }
+
+ #main {
+ background-color: white;
+ flex-grow: 1;
+ }
+
+ /*
+ * Wanted to slightly adjust PureCSS menu styling to my needs and ended up
+ * with a mess :(
+ */
+
+ body, .pure-menu {
+ background-color: #eee;
+ }
+
+ .pure-menu {
+ white-space: normal;
+ position: sticky;
+ top: 0;
+ }
+
+ .pure-menu-horizontal .pure-menu-item,
+ .pure-menu-horizontal .pure-menu-heading,
+ .pure-menu-horizontal .pure-menu-separator {
+ white-space: nowrap;
+ }
+
+ .pure-menu-link {
+ cursor: pointer;
+ }
+
+ .pure-menu-item .pure-menu-link:hover,
+ .pure-menu-item .pure-menu-link:focus,
+ .pure-menu-heading .pure-menu-link:hover,
+ .pure-menu-heading .pure-menu-link:focus {
+ background-color: #ddd;
+ }
+
+ .pure-menu-disabled .pure-menu-link,
+ .pure-menu-disabled .pure-menu-link:hover,
+ .pure-menu-disabled .pure-menu-link:focus {
+ background-color: transparent;
+ cursor: pointer;
+ }
+
+ h1, h2 {
+ color: #555;
+ }
+
+ .content {
+ max-width: 850px;
+ padding: 0px 20px 20px 20px;
+ margin: 0 auto;
+ }
+
+ .section-anchor {
+ top: -50px;
+ }
+
+ .hamburger {
+ display: none;
+ position: absolute;
+ right: 0;
+ border-radius: 3px;
+ opacity: 0.7;
+ background-color: #ccc;
+ cursor: pointer;
+ }
+
+ .hamburger>div {
+ height: 3px;
+ width: 16px;
+ margin: 6px 5px;
+ padding: 0 5px;
+ border-radius: 2px;
+ background-color: #555;
+ }
+
+ .hide-menu {
+ display: none;
+ text-align: center;
+ padding: 0 0 0 0;
+ height: 30px;
+ border-top: solid 2px #777;
+ background-color: #ccc;
+ color: #777;
+ font-size: 2em;
+ user-select: none;
+ cursor: pointer;
+ }
+
+ @media (max-width: 600px) {
+ #show-menu:not(:checked)+.hamburger {
+ display: block;
+ position: fixed;
+ }
+
+ .hide-menu {
+ display: block;
+ }
+
+ .pure-menu {
+ position: fixed;
+ transition: top 0.2s;
+ }
+
+ #show-menu:not(:checked)+.hamburger+.pure-menu {
+ top: -160px;
+ }
+
+ #show-menu:checked+.hamburger+.pure-menu {
+ top: 0;
+ }
+
+ .pure-menu .pure-menu-list,
+ .pure-menu .pure-menu-item,
+ .pure-menu .pure-menu-heading,
+ .pure-menu .pure-menu-separator {
+ display: block;
+ }
+
+ .pure-menu {
+ text-align: center;
+ }
+
+ .section-anchor {
+ top: 0;
+ }
+ }
+
+ footer {
+ border-top: 1px solid #888;
+ }
+
+ footer > p {
+ max-width: 850px;
+ padding-left: 10px;
+ padding-right: 10px;
+ margin-left: auto;
+ margin-right: auto;
+ }
+
+ h1 {
+ text-align: center;
+ }
+
+ section {
+ border-top: 1px solid #ccc;
+ }
+
+ section.first-section {
+ border-top: none;
+ }
+
+ {#
+ The style below is not used right now but is left in case it ever becomes
+ useful again.
+ #}
+
+ aside {
+ display: inline-block;
+ padding: 10px;
+ border-radius: 4px;
+ background-color: #acf;
+ text-color: #555;
+ }
+{% endblock %}
+
+{% macro menu_item(link_url, text, active, heading=false) %}
+ {% set tag_name = 'span' if heading else 'li' %}
+ {% if heading %}
+ {% set classes = ['pure-menu-heading'] %}
+ {% else %}
+ {% set classes = ['pure-menu-item'] %}
+ {% endif %}
+ {% if active %}
+ {% do classes.append('pure-menu-disabled') %}
+ {% endif %}
+ <{{ tag_name }} class="{{ classes|join(' ') }}">
+ {% set href = '#' if active else link_url %}
+ <a{{ {'href': href, 'class': 'pure-menu-link'}|xmlattr }}>{{ text }}</a>
+ </{{ tag_name }}>
+{% endmacro %}
+
+{% block body %}
+ <input id="show-menu" type="checkbox"></input>
+ <label class="hamburger" for="show-menu">
+ <div></div>
+ <div></div>
+ <div></div>
+ </label>
+ <nav class="pure-menu pure-menu-horizontal">
+ {% set heading_url = same_lang_url('') %}
+ {% set heading_text = _('campaign_base.menu.a:libre_program') %}
+ {{ menu_item(heading_url, heading_text, page_path == '', heading=true) }}
+
+ <ul class="pure-menu-list">
+ {% if lang_short == 'en' %}
+ {% set item_url = url_for('.show_page_in_pl', page_path=page_path) %}
+ {% set item_text = 'Polska wersja' %}
+ {% else %}
+ {% set item_url = url_for('.show_page_in_en', page_path=page_path) %}
+ {% set item_text = 'English version' %}
+ {% endif %}
+ {{ menu_item(item_url, item_text, false) }}
+
+ {% set item_url = same_lang_url('author.html') %}
+ {% set item_text = _('campaign_base.menu.a:about_author') %}
+ {{ menu_item(item_url, item_text, page_path == 'author.html') }}
+
+ <label class="hide-menu" for="show-menu">^</label>
+ </nav>
+
+ <div id="main">
+ {% block main %}
+ <div class="content">
+ {% block content %}
+ {% endblock %}
+ </div>
+ {% endblock %}
+ </div>
+
+ <footer class="center-text">
+ {% include [dedicated_footer_path, lang_short ~ '/__footer.html.jinja'] %}
+ </footer>
+{% endblock %}
diff --git a/src/koszko_org_website/templates/__index.html.jinja b/src/koszko_org_website/templates/__index.html.jinja
new file mode 100644
index 0000000..ac1b335
--- /dev/null
+++ b/src/koszko_org_website/templates/__index.html.jinja
@@ -0,0 +1,27 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website start page stub.
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "__campaign_base.html.jinja" %}
+
+{% block style %}
+ {{ super() }}
+
+ @media (max-width: 1000px) {
+ .libre-program-img {
+ -o-object-fit: cover;
+ object-fit: cover;
+ height: 307px;
+ }
+ }
+{% endblock %}
+
+{% block main %}
+ {% set alt_text = _('index.img:libre_program_alt') %}
+ {{ img('/static/free-program.svg', alt_text, ['libre-program-img']) }}
+
+ {{ super() }}
+{% endblock %}
diff --git a/src/koszko_org_website/templates/__koszko_base.html.jinja b/src/koszko_org_website/templates/__koszko_base.html.jinja
new file mode 100644
index 0000000..b7de249
--- /dev/null
+++ b/src/koszko_org_website/templates/__koszko_base.html.jinja
@@ -0,0 +1,210 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website campaign pages template.
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% set section_attrs = {'class': 'layout-item'} %}
+{% set header_attrs = {'class': 'content-subhead'} %}
+
+{% extends "__base.html.jinja" %}
+
+{% macro gitlink() -%}
+ {%- for project_id in varargs -%}
+ {{ numberlink('https://git.koszko.org/' ~ project_id ~ '/') }}
+ {%- endfor -%}
+{%- endmacro %}
+
+{% block external_css %}
+ {{ super() }}
+
+ <link rel="stylesheet" href="/static/pure-main.css">
+ <link rel="stylesheet" href="/static/pure-layouts.css">
+{% endblock %}
+
+{% block style %}
+ {{ super() }}
+
+ .pure-menu-item a {
+ display: block;
+ }
+
+ #no-fb {
+ position: relative;
+ }
+
+ #no-fb img {
+ width: 150px;
+ height: auto;
+ position: absolute;
+ left: 100px;
+ top: -70px;
+ -webkit-backface-visibility: hidden;
+ }
+
+ @media (max-width: 520px) {
+ #no-fb img {
+ width: 130px;
+ left: 90px;
+ top: -60px;
+ }
+ }
+ @media (max-width: 460px) {
+ #no-fb img {
+ width: 110px;
+ top: -50px;
+ }
+ }
+ @media (max-width: 410px) {
+ #no-fb img {
+ width: 100px;
+ left: 80px;
+ top: -40px;
+ }
+ }
+ @media (max-width: 380px) {
+ #no-fb img {
+ width: 70px;
+ left: 65px;
+ top: -30px;
+ }
+ }
+
+ #main {
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ }
+
+ .header, .content {
+ width: 100%;
+ }
+
+ .content {
+ flex-grow: 1;
+ }
+
+ aside {
+ background: #1f8dd6;
+ margin: 10px 0;
+ padding: 3px 10px;
+ border-radius: 3px;
+ color: #fff;
+ }
+
+ .layout-item:first-child {
+ margin-top: 0;
+ border-top: 0;
+ }
+
+ .content .content-subhead {
+ margin-top: 0;
+ }
+
+ dt {
+ float: left;
+ margin-right: .5em;
+ }
+
+ dd {
+ display: inline;
+ }
+
+ dl.indent-dl dt {
+ margin-left: -2em;
+ }
+
+ dl.indent-dl {
+ margin-top: 0;
+ margin-left: 2em;
+ }
+
+ footer > p {
+ max-width: 768px;
+ margin: auto;
+ }
+{% endblock %}
+
+{% macro menu_item(link_url, text, active) %}
+ <li class="pure-menu-item">
+ {% if active %}
+ {% set link_url = "#" %}
+ {% endif %}
+ {% set attrs = {'href': link_url, 'class': 'active' if active else none} %}
+ <a{{ attrs|xmlattr }}>{{ text }}</a>
+ </li>
+{% endmacro %}
+
+{% block body %}
+ <input id="show-menu" type="checkbox"></input>
+ <label href="#menu" id="menuLink" class="menu-link" for="show-menu">
+ <span></span>
+ </label>
+ <nav id="menu">
+ <div class="pure-menu">
+ <span class="pure-menu-heading">
+ {{ _('koszko_base.menu.span:languages') }}
+ </span>
+ <ul class="pure-menu-list">
+ {% for current_lang, text in [('en', 'English'), ('pl', 'Polski')] %}
+ {% set flask_endpoint = '.show_page_in_' ~ current_lang %}
+ {% set link_url = url_for(flask_endpoint, page_path=page_path) %}
+ {{ menu_item(link_url, text, lang_short == current_lang) }}
+ {% endfor %}
+ </ul>
+ <span class="pure-menu-heading">
+ {{ _('koszko_base.menu.span:places') }}
+ </span>
+ <ul class="pure-menu-list">
+ {%
+ for current_page, text in [
+ ('koszko.html', _('koszko_base.menu.a:home')),
+ ('cv.html', _('koszko_base.menu.a:curriculum_vitae')),
+ ('', _('koszko_base.menu.a:campaign'))
+ ]
+ %}
+ {% set link_url = same_lang_url(current_page) %}
+ {{ menu_item(link_url, text, page_path == current_page) }}
+ {% endfor %}
+ </ul>
+ </div>
+ </nav>
+
+ <div id="main">
+ <div class="header">
+ {% block header %}
+ <h1>
+ {% if page_path == 'koszko.html' %}
+ {% set url = '#' %}
+ {% else %}
+ {% set url = same_lang_url('koszko.html') %}
+ {% endif %}
+ <a href="{{ url }}">
+ {{ _('koszko_base.h1:wojtek_kosior') }}
+ </a>
+ </h1>
+ <h2>
+ <a href="#">
+ {% block subheading_text %}
+ {% endblock %}
+ </a>
+ </h2>
+ {% if include_not_facebookd|default(false) %}
+ <span id="no-fb">
+ <a href="https://stallman.org/facebook.html" draggable="false">
+ <img src="/static/no-facebook.svg" draggable="false">
+ </a>
+ </span>
+ {% endif %}
+ {% endblock %}
+ </div>
+ <div class="content">
+ {% block content %}
+ {% endblock %}
+ </div>
+ <footer class="footer center-text">
+ {% include [dedicated_footer_path, lang_short ~ '/__footer.html.jinja'] %}
+ </footer>
+ </div>
+{% endblock %}
diff --git a/src/koszko_org_website/templates/cv.html.jinja b/src/koszko_org_website/templates/cv.html.jinja
new file mode 100644
index 0000000..60c37ae
--- /dev/null
+++ b/src/koszko_org_website/templates/cv.html.jinja
@@ -0,0 +1,159 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website CV page stub.
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "__koszko_base.html.jinja" %}
+
+{% block title %} CV {% endblock %}
+
+{% block subheading_text %} CV {% endblock %}
+
+{% set include_not_facebookd = true %}
+
+{% macro gitlink() -%}
+ {%- for project_id in varargs -%}
+ {{ numberlink('https://git.koszko.org/' ~ project_id ~ '/') }}
+ {%- endfor -%}
+{%- endmacro %}
+
+{% macro speaks_list() %}
+ {% call unordered_list() %}
+ {% call list_entry() %}
+ C
+ {%-
+ set project_ids = [
+ 'AGH-engineering-thesis',
+ 'smtps-and-pop3s-console-program',
+ 'xml-backup-restore',
+ 'rpi-MMU-example',
+ 'C-hashtable',
+ ]
+ -%}
+ {{ gitlink(*project_ids) }}
+ {%- endcall %}
+
+ {% call list_entry() %}
+ Python{{ gitlink('0tdns', 'pydrilla') }}
+ {% endcall %}
+
+ {% call list_entry() %}
+ JavaScript{{ gitlink('browser-extension') }}
+ {% endcall %}
+
+ {% call list_entry() %}
+ sh{{ gitlink('0tdns') }}
+ {% endcall %}
+
+ {% call list_entry() %}
+ Verilog{{ gitlink('AGH-engineering-thesis') }}
+ {% endcall %}
+
+ {% call list_entry() %}
+ SQL{{ gitlink('xml-backup-restore', 'pydrilla') }}
+ {% endcall %}
+
+ {% call list_entry() %}
+ HTML+CSS
+ {%-
+ set project_ids = [
+ 'mothers-day-css-animation',
+ 'birthday-flower-css-animation',
+ 'chrysantemum',
+ 'browser-extension',
+ 'pydrilla',
+ 'hydrilla-website'
+ ]
+ -%}
+ {{ gitlink(*project_ids) }}
+ {%- endcall %}
+
+ {% call list_entry() %}
+ Java
+ {% endcall %}
+
+ {% call list_entry() %}
+ LaTeX{{ gitlink('change-world-sheets') }}
+ {% endcall %}
+
+ {% call list_entry() %}
+ Fortran
+ {%-
+ set project_ids = [
+ 'fortran-assignment1',
+ 'fortran-assignment2',
+ 'fortran-assignment3'
+ ]
+ -%}
+ {{ gitlink(*project_ids) }}
+ {%- endcall %}
+
+ {% call list_entry() %}
+ {% block lisp_entry_text %}
+ {% endblock %}
+ {% endcall %}
+
+ {% call list_entry() %}
+ Org mode
+ {% endcall %}
+
+ {% call list_entry() %}
+ {% block assembly_link_text %}
+ {% endblock %}{{ gitlink('rpi-MMU-example') }}
+ {% endcall %}
+
+ {% call list_entry() %}
+ C++{{ gitlink('smtps-and-pop3s-console-program') }}
+ {% endcall %}
+
+ {% call list_entry() %}
+ Erlang
+ {% endcall %}
+
+ {% call list_entry() %}
+ Tcl{{ gitlink('AGH-engineering-thesis') }}
+ {% endcall %}
+ {% endcall %}
+{% endmacro %}
+
+{%
+ set make_project_ids = [
+ 'AGH-engineering-thesis',
+ 'smtps-and-pop3s-console-program',
+ 'xml-backup-restore',
+ 'rpi-MMU-example',
+ 'pydrilla'
+ ]
+%}
+
+{% set embeds_project_ids = ['rpi-MMU-example'] %}
+
+{% set networking_project_ids = ['0tdns'] %}
+
+{%
+ set xcc_project_ids = [
+ 'rpi-MMU-example',
+ 'gcc-arm-PKGBUILDs',
+ 'smtps-and-pop3s-console-program',
+ 'xml-backup-restore'
+ ]
+%}
+
+{% macro contact_info() %}
+ {% call descriptions() %}
+ {{ desc_term(_('Tel.:')) }}
+ {{ desc_desc('(+48) 12 350 64 74') }}
+
+ {{ desc_term('Email:') }}
+ {% call desc_desc() -%}
+ {{ link('mailto:koszko@koszko.org', 'koszko@koszko.org') }}
+ {%- endcall %}
+
+ {{ desc_term('PGP') }}
+ {% call desc_desc() -%}
+ {{ link('/static/key.gpg', 'key.gpg') }}
+ {%- endcall %}
+ {% endcall %}
+{% endmacro %}
diff --git a/src/koszko_org_website/templates/en/__footer.html.jinja b/src/koszko_org_website/templates/en/__footer.html.jinja
new file mode 100644
index 0000000..5d1791f
--- /dev/null
+++ b/src/koszko_org_website/templates/en/__footer.html.jinja
@@ -0,0 +1,27 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+Footer text of the koszko.org website pages (english).
+
+Copyright (C) 2022 Wojtek Kosior <koszko@koszko.org>
+#}
+
+{% call para(ensure_containing_section=false) %}
+ This site utilizes styling from {{ link('https://purecss.io/', 'PureCSS') }}
+ and {{ link('https://github.com/necolas/normalize.css', 'Normalize CSS') }}
+ available under
+ {{ link('/static/yahoo-bsd-license.txt', 'Yahoo\'s BSD License') }} and
+ {{ link('/static/normalize-mit-license.txt', 'an X11-style license') }},
+ respectively.
+{% endcall %}
+
+{% block extra_footer_copyright_info %}
+{% endblock %}
+
+{% call para(ensure_containing_section=false) %}
+ The rest is made by {{ link(same_lang_url('koszko.html'), 'Wojtek') }},
+ available
+ {{ link('https://git.koszko.org/koszko-org-website/', 'here') }}
+ under the terms of
+ {{ link('/static/cc0-1.0.txt', 'CC0') }}.
+{% endcall %}
diff --git a/src/koszko_org_website/templates/en/__footer_for_qr.html.jinja b/src/koszko_org_website/templates/en/__footer_for_qr.html.jinja
new file mode 100644
index 0000000..f06ea2f
--- /dev/null
+++ b/src/koszko_org_website/templates/en/__footer_for_qr.html.jinja
@@ -0,0 +1,19 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+Footer text of the koszko.org website qr page (english).
+
+Copyright (C) 2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends 'en/__footer.html.jinja' %}
+
+{% block extra_footer_copyright_info %}
+ {% call para(ensure_containing_section=false) %}
+ The Easter eggs photo has been taken from
+ {% call link('https://commons.wikimedia.org/wiki/File:20110423_Easter_eggs_(3).jpg') -%}
+ Wikimedia Commons
+ {%- endcall %}
+ and is available under the terms of
+ {{ link('/static/cc-by-3.0.txt', 'CC BY 3.0 Unported') }}.
+ {% endcall %}
+{% endblock %}
diff --git a/src/koszko_org_website/templates/en/__index.html.jinja b/src/koszko_org_website/templates/en/__index.html.jinja
new file mode 100644
index 0000000..480c4c4
--- /dev/null
+++ b/src/koszko_org_website/templates/en/__index.html.jinja
@@ -0,0 +1,160 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website start page (english).
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "__index.html.jinja" %}
+
+{% block title %} Libre programs {% endblock %}
+
+{% block content %}
+ {{ header(1, 'Campaign for libre software') }}
+
+ {% call section('what-software') %}
+ {{ header(2, 'What software?') }}
+
+ {% call para() %}
+ Libre program is one its user can use for any purpose, modify in the form
+ of source code and redistribute, including for commercial
+ purposes. Examples are GNU/Linux operating system, VLC media player, GIMP,
+ LibreOffice, WordPress and also (except for certain components): Firefox
+ browser, Android operating system and Chromium browser. A program user
+ cannot modify or redistribute for either legal or technical reasons is
+ called proprietary or nonfree.
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('who-needs-this') %}
+ {{ header(2, 'Who needs this?') }}
+
+ {% call para() %}
+ Libre program gives user control. Computer is a useful device, yet is does
+ nothing by itself. To work it needs a program. Computer's owner is only
+ able to control it indirectly, through a program. If the software being
+ run is libre, the user has control over it and hence over the device. A
+ proprietary program, on the other hand, is controlled by its vendor (or
+ speaking 100% strictly - the party holding its cource code). Such program
+ only does what its vendor wants it to. As a result, the device also does
+ not what its owner wants but rather what program's vendor wants. Instead
+ of the desired situation where device user controls the device, we get a
+ reversed one: vendor, through program, controls the user and decides what
+ user can and cannot do. Of course, in practice we witness different levels
+ of users mistreatment. One edge case is an operating system only allowing
+ installation of applications approved by its vendor.
+ {% endcall %}
+
+ {% call para() %}
+ Everyone should care about using libre programs simply because it is good
+ to have control over one's own devices. The issue is not, however, limited
+ to personal preferences. The more people in a society rely on proprietary,
+ incompatible tools, the harder life is for those willing to choose libre
+ ones.
+ {% endcall %}
+
+ {% call para() %}
+ The problem is also worth looking at on a different scale. A state with
+ proprietary programs in widespread use is not fully independent - it
+ depends indirectly on vendors of these programs. For this reason a duty of
+ responsibility for one's state also means taking action to stop its
+ economy and education from relying on proprietary operating systems or
+ tools.
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('how-this-matters-to-non-programmers') %}
+ {{ header(2, 'How does all this matter to someone who cannot program?') }}
+
+ {% call para() %}
+ One does not need to be a programmer in order to utilize the control libre
+ programs give. Quite often when a direction of some libre program is bad
+ (e.g. antifeatures are being added like telemetry in Firefox), independent
+ people come up with a version of that program without the original
+ drawbacks (example would be the
+ {{ link('https://librewolf-community.gitlab.io/', 'LibreWolf') }}
+ browser). All that's needed is a bit of demand for a modified version of
+ some program. Bussinessmen, on the other hand, might find it practical to
+ employ someone to adapt a libre program to company's needs.
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('how-is-moneymaking-affected') %}
+ {% call header(2) %}
+ Does it mean programmers shouldn't be paid for writing software?
+ {% endcall %}
+
+ {% call para() %}
+ Equating libre program with gratis and proprietary with paid is a very
+ common misunderstanding. In reality proprietary programs often come for
+ free (Adobe Reader, Chrome browser, Google Docs) and libre tools can also
+ be made available for a fee (e.g. commercial GNU/Linux distrubutions).
+ Many people associate programming with a business model where a customer
+ is being sold a license for use of some proprietary program. Because such
+ model is less practical in case of libre programs, some think their
+ creation cannot be commercialized. However, most code - both libre and
+ nonfree - is not being written with the goal of selling licenses for its
+ use. Income often comes from different sources, such as selling services
+ or hardware the program works with.
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('how-it-started') %}
+ {{ header(2, 'Who came up with all this?') }}
+
+ {% call para() %}
+ In 1983
+ {% call link('https://en.wikipedia.org/wiki/Richard_Stallman') -%}
+ Richard Stallman
+ {%- endcall %},
+ a
+ {% call link('https://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technology') -%}
+ MIT
+ {%- endcall %}
+ scientist, started the
+ {{ link('https://www.gnu.org/', 'GNU project') }} with a goal of
+ developing a libre replacement for proprietary UNIX system. 2 years later
+ in Boston he founded the
+ {{ link('https://www.fsf.org/', 'Free Software Foundation (FSF)') }} which
+ still promotes and develops these ideals.
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('how-to-come-to-the-good-side') %}
+ {{ header(2, 'How to come to the good side?') }}
+
+ {% call para() %}
+ You can help in many ways. For example by
+ {% endcall %}
+
+ {% call unordered_list() %}
+ {% call list_entry() %}
+ using libre programs on daily basis,
+ {% endcall %}
+ {% call list_entry() %}
+ making others aware of the problem (you can link this site
+ or the {{ link('https://fsf.org', 'FSF\'s site') }}),
+ {% endcall %}
+ {% call list_entry() %}
+ refusing to use proprietary tools to the best of your ability,
+ {% endcall %}
+ {% call list_entry() %}
+ complaining to vendors of proprietary programs asking for their source
+ code to be released under some libre license,
+ {% endcall %}
+ {% call list_entry() %}
+ calling on people in charge of various organizations and educational
+ facilities to deploy a libre operating system and tools,
+ {% endcall %}
+ {% call list_entry() %}
+ calling on politicians to enact laws good for software freedom
+ (e.g. making code written for public money available under a libre
+ license) and
+ {% endcall %}
+ {% call list_entry() %}
+ {{ link('https://my.fsf.org/join', 'donating to the FSF') }} or various
+ projects developing libre programs.
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+{% endblock %}
diff --git a/src/koszko_org_website/templates/en/author.html.jinja b/src/koszko_org_website/templates/en/author.html.jinja
new file mode 100644
index 0000000..e3a01c3
--- /dev/null
+++ b/src/koszko_org_website/templates/en/author.html.jinja
@@ -0,0 +1,33 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website "about author" page (english).
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "__campaign_base.html.jinja" %}
+
+{% block title %} Campaign author {% endblock %}
+
+{% block content %}
+ {{ header(1, 'About campaign author') }}
+
+ {% call section() %}
+ {% call para() %}
+ My name is Wojciech Kosior. I am (as one could easily guess) a software
+ freedom proponent and (as you might not yet know) a catholic. In 2021 I
+ {% call link('https://www.gnu.org/education/how-i-fought-to-graduate-without-using-non-free-software.html') -%}
+ successfully defended
+ {%- endcall %}
+ my BSc thesis in infomatics at
+ {{ link('https://en.wikipedia.org/wiki/AGH_University_of_Science_and_Technology', 'AGH') }}
+ in Kraków, Poland. I am now striving to make people care more about their
+ digital freedom.
+ {% endcall %}
+
+ {% call para() %}
+ You can find more information on
+ {{ link(same_lang_url('koszko.html'), 'my personal page') }}.
+ {% endcall %}
+ {% endcall %}
+{% endblock %}
diff --git a/src/koszko_org_website/templates/en/cv.html.jinja b/src/koszko_org_website/templates/en/cv.html.jinja
new file mode 100644
index 0000000..36f6d59
--- /dev/null
+++ b/src/koszko_org_website/templates/en/cv.html.jinja
@@ -0,0 +1,160 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website CV page (english).
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "cv.html.jinja" %}
+
+{% block lisp_entry_text %}
+ Lisp (bits from various dialects)
+{% endblock %}
+
+{% block assembly_link_text %}
+ assembly (ARM, x86 in Intel syntax)
+{% endblock %}
+
+{% block content %}
+ {% call section() %}
+ {% call aside() %}
+ The formal, PDF version of the Curriculum Vitae can be found
+ {{ link('/static/cv-formal-en.pdf', 'here') }}.
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('edu') %}
+ {{ header(2, 'Education') }}
+
+ {% call descriptions() %}
+ {{ desc_term('2017-2021') }}
+ {% call desc_desc() -%}
+ Informatics, stationary studies,
+ {{ link('https://en.wikipedia.org/wiki/AGH_University_of_Science_and_Technology', 'AGH') }}
+ in Kraków, IEiT faculty
+ {%- endcall %}
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('achievements') %}
+ {{ header(2, 'Achievements') }}
+
+ {% call descriptions() %}
+ {{ desc_term('2014') }}
+ {% call desc_desc() %}
+ {{ link('https://omj.edu.pl/laureaci-ix', 'Laureate') }} of the 9th
+ {% call link('https://om.edu.pl/omg/') -%}
+ Math Olympics for Secondary School Students
+ {%- endcall %}
+ {% endcall %}
+
+ {{ desc_term('2017') }}
+ {% call desc_desc() %}
+ {{ link('https://www.kgof.edu.pl/archiwum/66/of66-3-laureaci.pdf', 'Laureate') }}
+ of the 66th {{ link('https://www.kgof.edu.pl/', 'Physics Olympics') }}
+ {% endcall %}
+
+ {{ desc_term('2017') }}
+ {% call desc_desc() %}
+ {{ link('https://om.mimuw.edu.pl/previous_olympiads/68', 'Finalist') }}
+ of the 68th {{ link('https://om.edu.pl/', 'Math Olympics') }}
+ {% endcall %}
+
+ {{ desc_term('2021') }}
+ {% call desc_desc() %}
+ {{ link('https://www.gnu.org/education/how-i-fought-to-graduate-without-using-non-free-software.html', 'Fight') }}
+ for the ability to study using libre software, concluded with successful
+ BSc thesis defence with a "very good" final grade
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('skills') %}
+ {{ header(2, 'Knowledge of technologies') }}
+
+ {% call para() %}
+ Speaks (best learned towards the top)
+ {% endcall %}
+
+ {{ speaks_list() }}
+
+ {% call para() %}
+ I can also learn almost any programming language in ~20 minutes
+ {{ unicode(128521) }}
+ {% endcall %}
+
+ {% call para() %}
+ I am experienced in
+ {% endcall %}
+
+ {% call unordered_list() %}
+ {% call list_entry() %}
+ administering UNIX-like systems (e.g. Debian GNU/Linux)
+ {% endcall %}
+
+ {% call list_entry() %}
+ low-level programming, bare-metal, embedded
+ systems{{ gitlink(*embeds_project_ids)}}
+ {% endcall %}
+
+ {% call list_entry() %}
+ networking facilities offered by the Linux
+ kernel{{ gitlink(*networking_project_ids) }}
+ {% endcall %}
+
+ {% call list_entry() %}
+ Make tool{{ gitlink(*make_project_ids) }}
+ {% endcall %}
+
+ {% call list_entry() %}
+ Git tool
+ {% endcall %}
+
+ {% call list_entry() %}
+ practical applications of cryptographic tools
+ {% endcall %}
+
+ {% call list_entry() %}
+ crafting of lightweight, ethical websites
+ {% endcall %}
+
+ {% call list_entry() %}
+ libre software licenses
+ {% endcall %}
+
+ {% call list_entry() %}
+ cross-compilation{{ gitlink(*xcc_project_ids) }}
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('rest') %}
+ {{ header(2, 'Others') }}
+
+ {% call unordered_list() %}
+ {% call list_entry() %}
+ english language at level C1
+ {% endcall %}
+ {% call list_entry() %}
+ polish language (native)
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('freesw-only') %}
+ {{ header(2, 'Libre software at work') }}
+
+ {% call para() %}
+ I am open for ethical contracts and job offers that do not involve
+ proprietary software development nor a non-disclosure agreement. In case
+ of doubt
+ {{ link('mailto:koszko@koszko.org', 'I am answering questions') }}.
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('contact') %}
+ {{ header(2, 'Contact') }}
+
+ {{ contact_info() }}
+ {% endcall %}
+{% endblock %}
diff --git a/src/koszko_org_website/templates/en/koszko.html.jinja b/src/koszko_org_website/templates/en/koszko.html.jinja
new file mode 100644
index 0000000..23bc321
--- /dev/null
+++ b/src/koszko_org_website/templates/en/koszko.html.jinja
@@ -0,0 +1,157 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website personal page (english).
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "koszko.html.jinja" %}
+
+{% block title %} Wojtek {% endblock %}
+
+{% block subheading_text %} personal site {% endblock %}
+
+{% set include_not_facebookd = true %}
+
+{% block to_freesw_hackers %}
+ {% call para() %}
+ You want people to appreciate libre software and choose it, for their own
+ good and society's? You consider hurtful that most people are very
+ irresponsible and in every field rely on proprietary tools, without showing
+ even a tiny bit of initiative to verify whether those are truly good for
+ them? Perhaps you also met with snubbing of logical argumentation?
+ {% endcall %}
+ {% call para() %}
+ Many catholics feel likewise seeing people leaving Church and dedicated
+ atheists responding to any miracle reports with conspiracy theories to
+ undermine them. And we just want good for you -{{ nbsp() }}so that you can
+ be truly happy and -{{ nbsp() }}put simply -{{ nbsp() }}eventually be
+ salvated.
+ {% endcall %}
+ {% call para() %}
+ Friends, show the life responsibility we expect from others and seriously
+ verify if, perhaps, what Church has been saying for 2000 years
+ is {{ bold('true') }}.
+ {% endcall %}
+{% endblock %}
+
+{% block to_christians %}
+ {% call para() %}
+ As christians we strive to live well and responsibly. As christians we
+ consider sharing a good thing. Have you heard of free/libre software? It is
+ a concept that should be extremely popular among christians. But currently
+ this is not the case. Why most of us are not trying to build a responsible
+ society that would utilize technology in a sensible manner so that it is
+ being controlled by human and not the opposite? Why instead of encouraging
+ others to share code catholics so often release their own as proprietary,
+ resulting in its user being thrown on their mercy?
+ {% endcall %}
+ {% call para() %}
+ We don't like ignoring? Let's not ignore by ourselves. Snubbing is bad? Let
+ us not snub. We want the Church to be independent? Then shall we in the
+ first place stop relying on devices, software and services which take away
+ freedom.
+ {% endcall %}
+{% endblock %}
+
+{% block use_internet_if_needed %}
+ {% call para() %}
+ I've been told the above is too general and someone who's not aware of what
+ I wrote about shall not understand it. If you indeed have no idea what I
+ wrote about, feel free to utilize a search engine and/or Wikipedia to learn
+ more.
+ {% endcall %}
+{% endblock %}
+
+{% block content %}
+ {% call section('contact') %}
+ {{ header(2, 'Contact') }}
+
+ {% call descriptions() %}
+ {{ desc_term('Tel.:') }}
+ {{ desc_desc('(+48) 12 350 64 74') }}
+
+ {{ desc_term('Email:') }}
+ {% call desc_desc() -%}
+ {{ link('mailto:koszko@koszko.org', 'koszko@koszko.org') }}
+ {%- endcall %}
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('pubkeys') %}
+ {{ header(2, 'Public keys') }}
+
+ {% call unordered_list() %}
+ {% call list_entry() %}
+ {{ link('/static/key.gpg', 'PGP') }}
+
+ {% call unordered_list() %}
+ {% call list_entry() %}
+ {% call link('/static/key.gpg.sig') -%}
+ PGP key signature made with signify key
+ {%- endcall %}
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+
+ {% call list_entry() %}
+ {{ link('/static/key.pub', 'signify') }}
+
+ {% call unordered_list() %}
+ {% call list_entry() %}
+ {% call link('/static/key.pub.asc') -%}
+ signify key signature made with PGP key
+ {%- endcall %}
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('portal') %}
+ {{ header(2, 'Portal') }}
+
+ {% call para() %}
+ This portal of mine is online since april 2021. Sites comprising it are
+ listed below.
+ {% endcall %}
+
+ {% call descriptions() %}
+ {% call desc_term() -%}
+ {{ link(same_lang_url('koszko.html'), 'koszko.org/koszko.html') }}
+ {%- endcall %}
+ -
+ {{ desc_desc('my personal website (you\'re viewing it)') }}
+
+ {% call desc_term() -%}
+ {{ link('https://pray.koszko.org', 'pray.koszko.org') }}
+ {%- endcall %}
+ -
+ {{ desc_desc('prayer sheets website') }}
+
+ {% call desc_term() -%}
+ {{ link('https://sheets.koszko.org', 'sheets.koszko.org') }}
+ {%- endcall %}
+ -
+ {{ desc_desc('world changing sheets website') }}
+
+ {% call desc_term() -%}
+ {{ link('https://haketilo.koszko.org', 'haketilo.koszko.org') }}
+ {%- endcall %}
+ -
+ {{ desc_desc('Haketilo proxy website') }}
+
+ {% call desc_term() -%}
+ {{ link('https://git.koszko.org', 'git.koszko.org') }}
+ {%- endcall %}
+ -
+ {{ desc_desc('my repositories') }}
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('request') %}
+ {{ header(2, 'Personal statement') }}
+
+ {{ request_table() }}
+ {% endcall %}
+{% endblock %}
diff --git a/src/koszko_org_website/templates/en/prima_aprilis.html.jinja b/src/koszko_org_website/templates/en/prima_aprilis.html.jinja
new file mode 100644
index 0000000..d361f4f
--- /dev/null
+++ b/src/koszko_org_website/templates/en/prima_aprilis.html.jinja
@@ -0,0 +1,20 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website Prima Aprilis page (polish).
+
+Copyright (C) 2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "__koszko_base.html.jinja" %}
+
+{% block title %} April Fools! {% endblock %}
+
+{% block header %}
+ {{ header(1, 'April Fools!') }}
+{% endblock %}
+
+{% block content %}
+ {% call para() %}
+ {{ unicode(128521) }}
+ {% endcall %}
+{% endblock %}
diff --git a/src/koszko_org_website/templates/en/qr.html.jinja b/src/koszko_org_website/templates/en/qr.html.jinja
new file mode 100644
index 0000000..1fe1545
--- /dev/null
+++ b/src/koszko_org_website/templates/en/qr.html.jinja
@@ -0,0 +1,28 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website QR code easter egg page (english).
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "__campaign_base.html.jinja" %}
+
+{% block title %} Easter eggs {% endblock %}
+
+{% block content %}
+ {{ header(1, 'QR code') }}
+
+ {% call section() %}
+ {% call para() %}
+ So you scanned the QR code? You'll see something cool then.
+ {% endcall %}
+
+ {% set alt_text = 'photo of Easter eggs lying on the grass' %}
+ {{ img('/static/easter-eggs.jpg', alt_text) }}
+
+ {% call para() %}
+ You can now move to {{ link(same_lang_url(''), 'the target page') }}
+ {{ unicode(128578) }}
+ {% endcall %}
+ {% endcall %}
+{% endblock %}
diff --git a/src/koszko_org_website/templates/koszko.html.jinja b/src/koszko_org_website/templates/koszko.html.jinja
new file mode 100644
index 0000000..4253329
--- /dev/null
+++ b/src/koszko_org_website/templates/koszko.html.jinja
@@ -0,0 +1,66 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website personal page stub.
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "__koszko_base.html.jinja" %}
+
+{% block style %}
+ {{ super() }}
+
+ #request_table thead, #request_table tbody {
+ vertical-align: top;
+ }
+
+ @media (max-width: 500px) {
+ #request_table {
+ font-size: 80%;
+ }
+ }
+
+ col {
+ width: 50%;
+ }
+{% endblock %}
+
+{% macro request_table() %}
+ <table id="request_table" class="pure-table">
+ <colgroup>
+ <col>
+ <col>
+ </colgroup>
+ <thead>
+ <tr>
+ <th>{{ _('koszko.th:to_freesw_hackers') }}</th>
+ <th>{{ _('koszko.th:to_christians') }}</th>
+ </tr>
+ <tr>
+ <td>{{ _('koszko.td:nonbelievers') }}</td>
+ <td>{{ _('koszko.td:choosing_proprietary_programs') }}</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ {% block to_freesw_hackers %}
+ {% endblock %}
+ </td>
+ <td>
+ {% block to_christians %}
+ {% endblock %}
+ </td>
+ </tr>
+ <tr class="center-text">
+ <td colspan="2">{{ _('koszko.td:please') }}</td>
+ </tr>
+ <tr class="center-text">
+ <td colspan="2">
+ {% block use_internet_if_needed %}
+ {% endblock %}
+ </td>
+ </tr>
+ </tbody>
+ </table>
+{% endmacro %}
diff --git a/src/koszko_org_website/templates/pl/__footer.html.jinja b/src/koszko_org_website/templates/pl/__footer.html.jinja
new file mode 100644
index 0000000..6dbb419
--- /dev/null
+++ b/src/koszko_org_website/templates/pl/__footer.html.jinja
@@ -0,0 +1,30 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+Footer text of the koszko.org website pages (polish).
+
+Copyright (C) 2022 Wojtek Kosior <koszko@koszko.org>
+#}
+
+{% call para(ensure_containing_section=false) %}
+ Ta strona wykorzystuje stylowanie
+ {{ link('https://purecss.io/', 'PureCSS') }}
+ oraz {{ link('https://github.com/necolas/normalize.css', 'Normalize CSS') }}
+ dostępne odpowiednio na
+ {{ link('/static/yahoo-bsd-license.txt', 'Licencji BSD Yahoo') }}
+ i{{ nbsp() }}
+ {%- call link('/static/normalize-mit-license.txt') -%}
+ licencji w{{ nbsp() }}stylu X11
+ {%- endcall %}.
+{% endcall %}
+
+{% block extra_footer_copyright_info %}
+{% endblock %}
+
+{% call para(ensure_containing_section=false) %}
+ Reszta jest autorstwa {{ link(same_lang_url('koszko.html'), 'Wojtka') }},
+ dostępna
+ {{ link('https://git.koszko.org/koszko-org-website/', 'tutaj') }}
+ na warunkach
+ {{ link('/static/cc0-1.0.txt', 'CC0') }}.
+{% endcall %}
diff --git a/src/koszko_org_website/templates/pl/__footer_for_qr.html.jinja b/src/koszko_org_website/templates/pl/__footer_for_qr.html.jinja
new file mode 100644
index 0000000..9736f9f
--- /dev/null
+++ b/src/koszko_org_website/templates/pl/__footer_for_qr.html.jinja
@@ -0,0 +1,17 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+Footer text of the koszko.org website qr page (polish).
+
+Copyright (C) 2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends 'pl/__footer.html.jinja' %}
+
+{% block extra_footer_copyright_info %}
+ {% call para(ensure_containing_section=false) %}
+ Zdjęcie Jajeczek wielkanocnych zostało zaczerpnięte
+ z{{ nbsp() }}{{ link('https://commons.wikimedia.org/wiki/File:20110423_Easter_eggs_(3).jpg', 'Wikimedia Commons') }}
+ i{{ nbsp() }}jest dostępne na licencji
+ {{ link('/static/cc-by-3.0.txt', 'CC BY 3.0 Unported') }}.
+ {% endcall %}
+{% endblock %}
diff --git a/src/koszko_org_website/templates/pl/__index.html.jinja b/src/koszko_org_website/templates/pl/__index.html.jinja
new file mode 100644
index 0000000..59b33e0
--- /dev/null
+++ b/src/koszko_org_website/templates/pl/__index.html.jinja
@@ -0,0 +1,175 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website start page (english).
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "__index.html.jinja" %}
+
+{% block title %} Wolne programy {% endblock %}
+
+{% block content %}
+ {{ header(1, 'Kampania na rzecz wolnego oprogramowania') }}
+
+ {% call section('what-software') %}
+ {{ header(2, 'Jakiego oprogramowania?') }}
+
+ {% call para() %}
+ Wolny program to taki, który użytkownik ma możliwość używać
+ w{{ nbsp() }}dowolnym celu, modyfikować w{{ nbsp() }}postaci kodu
+ źródłowego i{{ nbsp() }}rozpowszechniać dalej, również
+ w{{ nbsp() }}celach komercyjnych. Przykładami są system operacyjny
+ GNU/Linux, VLC media player, GIMP, LibreOffice, WordPress,
+ a{{ nbsp() }}także (za wyjątkiem niektórych komponentów): przeglądarka
+ Firefox, system Android i{{ nbsp() }}przeglądarka Chromium. Program,
+ którego z powodów prawnych lub technicznych użytkownik nie może
+ modyfikować lub rozpowszechniać, nazywamy własnościowym lub niewolnym.
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('who-needs-this') %}
+ {{ header(2, 'Komu to potrzebne?') }}
+
+ {% call para() %}
+ Wolny program daje użytkownikowi kontrolę. Komputer to przydatne
+ urządzenie, które jednak samo z{{ nbsp() }}siebie nic nie robi. Do
+ działania potrzebuje programu. Tylko pośrednio, za pośrednictwem programu,
+ użytkownik jest w stanie kontrolować swój komputer. Jeśli uruchamiany
+ program jest wolny, użytkownik ma kontrolę nad nim i{{ nbsp() }}przez to
+ nad komputerem. Z{{ nbsp() }}kolei nad własnościowym programem władzę
+ sprawuje jego wydawca (lub mówiąc w 100% ściśle - podmiot mający kod
+ źródłowy). Taki program robi to, czego chce jego wydawca, przez co także
+ i{{ nbsp() }}samo urządzenie robi nie to, czego chce jego właściciel, lecz
+ to, czego chce wydawca programu. Zamiast porządanej sytuacji,
+ w{{ nbsp() }}której użytkownik kontroluje swoje urządzenie, dostajemy
+ sytuację odwróconą: wydawca przez program kontroluje użytkownika
+ i{{ nbsp() }}decyduje, co może on zrobić, a{{ nbsp() }}czego nie.
+ W{{ nbsp() }}praktyce obserwujemy oczywiście różne stopnie złego
+ traktowania użytkowników. Jednym ze skrajnych przypadków jest system
+ operacyjny umożliwiajacy instalowanie wyłącznie tych aplikacji, które
+ zaaprobował jego wydawca.
+ {% endcall %}
+
+ {% call para() %}
+ Każdemu powinno zależeć na używaniu wolnych programów, bo dobrze jest móc
+ sprawować kontrolę nad swoimi urządzeniem. Sprawa nie ogranicza się jednak
+ do osobistych preferencji. Im więcej osób w{{ nbsp() }}społeczeństwie
+ polega na własnościowych, niekompatybilnych narzędziach, tym ciężej jest
+ żyć tym, którzy chcą wybierać wolne.
+ {% endcall %}
+
+ {% call para() %}
+ Warto też popatrzeć na problem w{{ nbsp() }}większej skali. Państwo,
+ w{{ nbsp() }}którym w{{ nbsp() }}powszechnym użyciu są własnościowe
+ programy, nie jest w pełni niepodległe - podlega pośrednio wydawcom tych
+ programów. Z{{ nbsp() }}tego powodu poczucie odpowiedzialności za kraj
+ wiąże się z{{ nbsp() }}dążeniem do tego, aby gospodarka
+ i{{ nbsp() }}edukacja nie opierały się na własnościowym systemie
+ operacyjnym czy narzędziach.
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('how-this-matters-to-non-programmers') %}
+ {% call header(2) %}
+ Jakie to wszystko ma znaczenie dla kogoś, kto nie umie programować?
+ {% endcall %}
+
+ {% call para() %}
+ Nie trzeba być programistą, żeby móc korzystać z{{ nbsp() }}kontroli, jaką
+ dają wolne programy. Często gdy kierunek rozwoju wolnego programu jest zły
+ (np. dodawane są antyfunkcjonalności jak telemetria
+ w{{ nbsp() }}Firefoksie), znajdują się osoby chętne do opracowania wersji
+ programu niezawierającej tych wad (przykładem jest przeglądarka
+ {{ link('https://librewolf-community.gitlab.io/', 'LibreWolf') }}.
+ Wystarczy, że pojawi się wystarczające zapotrzebowanie na odmienną
+ wersję jakiegoś wolnego programu. Z{{ nbsp() }}kolei z{{ nbsp() }}punktu
+ widzenia przedsiębiorcy sensowną opcją bywa zatrudnienie kogoś, kto
+ przystosuje wolny program do celów firmy.
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('how-is-moneymaking-affected') %}
+ {% call header(2) %}
+ Czy to znaczy, że programiści nie powinni zarabiać na pisaniu programów?
+ {% endcall %}
+
+ {% call para() %}
+ Utożsamianie wolnego programu z{{ nbsp() }}darmowym,
+ a{{ nbsp() }}własnościowego z{{ nbsp() }}płatnym to bardzo częste
+ nieporozumienie. W{{ nbsp() }}rzeczywistości programy własnościowe często
+ są darmowe (Adobe Reader, przeglądarka Chrome, Google Docs),
+ a{{ nbsp() }}wolne narzędzia mogą być dystrybuowane odpłatnie
+ (np. komercyjne dystrybucje GNU/Linuksa). Wiele osób
+ z{{ nbsp() }}programowaniem kojarzy model biznesowy, w{{ nbsp() }}którym
+ klientowi sprzedawana jest licencja na używanie własnościowego
+ programu. Ponieważ taki model jest mniej opłacalny w{{ nbsp() }}przypadku
+ wolnych programów, niektórzy myślą, że na ich tworzeniu wcale nie można
+ zarobić. Tymczasem większość kodu - zarówno wolnego, jak
+ i{{ nbsp() }}własnościowego - nie jest pisana w{{ nbsp() }}celu sprzedaży
+ licencji na jego używanie. Dochody są często czerpane z innych źródeł,
+ np. ze sprzedaży usług i{{ nbsp() }}sprzętu, z{{ nbsp() }}którymi program
+ współpracuje.
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('how-it-started') %}
+ {{ header(2, 'Kto to wszystko wykminił?') }}
+
+ {% call para() %}
+ W{{ nbsp() }}1983-cim roku
+ {% call link('https://pl.wikipedia.org/wiki/Richard_Stallman') -%}
+ Richard Stallman
+ {%- endcall %},
+ Naukowiec z{{ nbsp() }}
+ {%- call link('https://pl.wikipedia.org/wiki/Massachusetts_Institute_of_Technology') -%}
+ MIT
+ {%- endcall %},
+ zapoczątkował {{ link('https://www.gnu.org/', 'projekt GNU') }} mający na
+ celu stworzenie wolnego zamiennika dla własnościowego systemu UNIX. 2 lata
+ później założył w Bostonie
+ {% call link('https://www.fsf.org/') -%}
+ Fundację Wolnego Oprogramowania (FSF)
+ {%- endcall %}
+ zajmującą się do teraz promowaniem i{{ nbsp() }}rozwojem tych idei.
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('how-to-come-to-the-good-side') %}
+ {{ header(2, 'Jak przejść na dobrą stronę?') }}
+
+ {% call para() %}
+ Pomóc można na wiele sposobów. Na przykład
+ {% endcall %}
+
+ {% call unordered_list() %}
+ {% call list_entry() %}
+ używając na co dzień wolnych programów,
+ {% endcall %}
+ {% call list_entry() %}
+ uświadamiając innych o{{ nbsp() }}problemie (można linkować tą stronę),
+ {% endcall %}
+ {% call list_entry() %}
+ na miarę swoich możliwości odmawiając używania własnościowych narzędzi,
+ {% endcall %}
+ {% call list_entry() %}
+ apelując do twórców własnościowych programów o{{ nbsp() }}udostępnienie
+ ich kodu na wolnej licencji,
+ {% endcall %}
+ {% call list_entry() %}
+ apelując do osób zarządzających różnorakimi organizacjami i{{ nbsp() }}
+ placówkami oświatowymi o{{ nbsp() }}wprowadzenie do użytku wolnego
+ systemu operacyjnego i{{ nbsp() }}narzędzi,
+ {% endcall %}
+ {% call list_entry() %}
+ apelując do polityków stanowienie przepisów sprzyjających wolnemu
+ oprogramowaniu (np. uczynienie dostępnym na wolnej licencji kodu
+ pisanego za pieniądze publiczne) oraz
+ {% endcall %}
+ {% call list_entry() %}
+ przekazując {{ link('https://my.fsf.org/join', 'darowiznę na FSF') }}
+ lub różne projekty tworzące wolne programy.
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+{% endblock %}
diff --git a/src/koszko_org_website/templates/pl/author.html.jinja b/src/koszko_org_website/templates/pl/author.html.jinja
new file mode 100644
index 0000000..041f096
--- /dev/null
+++ b/src/koszko_org_website/templates/pl/author.html.jinja
@@ -0,0 +1,36 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website "about author" page (polish).
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "__campaign_base.html.jinja" %}
+
+{% block title %} Autor kampani {% endblock %}
+
+{% block content %}
+ {% call header(1) %}
+ O{{ nbsp() }}autorze kampani
+ {% endcall %}
+
+ {% call section() %}
+ {% call para() %}
+
+ Nazywam się Wojciech Kosior. Jestem (jak można się domyślić) zwolennikiem
+ wolnego oprogramowania i{{ nbsp()}}(o{{ nbsp()}}czym być może nie wiesz)
+ katolikiem. W{{ nbsp()}}2021-wszym roku
+ {% call link('https://www.gnu.org/education/how-i-fought-to-graduate-without-using-non-free-software.html') -%}
+ obroniłem
+ {%- endcall %}
+ pracę inżynierską z{{ nbsp()}}informatyki na AGH w{{ nbsp()}}Krakowie.
+ Obecnie staram się skłonić ludzi do zatroszczenia się bardziej
+ o{{ nbsp()}}własną wolność cyfrową.
+ {% endcall %}
+
+ {% call para() %}
+ Możesz znaleźć więcej informacji na
+ {{ link(same_lang_url('koszko.html'), 'mojej stronie domowej') }}.
+ {% endcall %}
+ {% endcall %}
+{% endblock %}
diff --git a/src/koszko_org_website/templates/pl/cv.html.jinja b/src/koszko_org_website/templates/pl/cv.html.jinja
new file mode 100644
index 0000000..15a0177
--- /dev/null
+++ b/src/koszko_org_website/templates/pl/cv.html.jinja
@@ -0,0 +1,159 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website CV page (polish).
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "cv.html.jinja" %}
+
+{% block lisp_entry_text %}
+ Lisp (elementy z różnych dialektów)
+{% endblock %}
+
+{% block assembly_link_text %}
+ assemblery (ARM, x86 w{{ nbsp() }}składni Intela)
+{% endblock %}
+
+{% block content %}
+ {% call section() %}
+ {% call aside() %}
+ Formalną wersję Curriculum Vitae w formacie PDF znajdziesz
+ {{ link('/static/cv-formal-pl.pdf', 'tutaj') }}.
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('edu') %}
+ {{ header(2, 'Edukacja') }}
+
+ {% call descriptions() %}
+ {{ desc_term('2017-2021') }}
+ {% call desc_desc() -%}
+ Informatyka, studia dzienne,
+ {{ link('https://pl.wikipedia.org/wiki/Akademia_G%C3%B3rniczo-Hutnicza_im._Stanis%C5%82awa_Staszica_w_Krakowie', 'AGH') }}
+ w Krakowie, wydział IEiT
+ {%- endcall %}
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('achievements') %}
+ {{ header(2, 'Osiągnięcia') }}
+
+ {% call descriptions() %}
+ {{ desc_term('2014') }}
+ {% call desc_desc() %}
+ {{ link('https://omj.edu.pl/laureaci-ix', 'Laureat') }} 9.
+ {% call link('https://om.edu.pl/omg/') -%}
+ Olimpiady Matematycznej Gimnazjalistów
+ {%- endcall %}
+ {% endcall %}
+
+ {{ desc_term('2017') }}
+ {% call desc_desc() %}
+ {{ link('https://www.kgof.edu.pl/archiwum/66/of66-3-laureaci.pdf', 'Laureat') }}
+ 66. {{ link('https://www.kgof.edu.pl/', 'Olimpiady Fizycznej') }}
+ {% endcall %}
+
+ {{ desc_term('2017') }}
+ {% call desc_desc() %}
+ {{ link('https://om.mimuw.edu.pl/previous_olympiads/68', 'Finalista') }}
+ 68. {{ link('https://om.edu.pl/', 'Olimpiady Matematycznej') }}
+ {% endcall %}
+
+ {{ desc_term('2021') }}
+ {% call desc_desc() %}
+ {{ link('https://www.gnu.org/education/how-i-fought-to-graduate-without-using-non-free-software.html', 'Walka') }}
+ o możliwość studiowania przy użyciu wolnego oprogramowania zwieńczona
+ ukończeniem studiów inżynierskich z{{ nbsp() }}wynikiem "bardzo dobry"
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('skills') %}
+ {{ header(2, 'Znajomość technologii') }}
+
+ {% call para() %}
+ Mówię językami (najlepiej poznane u{{ nbsp() }}góry)
+ {% endcall %}
+
+ {{ speaks_list() }}
+
+ {% call para() %}
+ Dodatkowo mogę nauczyć się prawie każdego języka programowania
+ w{{ nbsp() }}~20 minut {{ unicode(128521) }}
+ {% endcall %}
+
+ {% call para() %}
+ Znam się na
+ {% endcall %}
+
+ {% call unordered_list() %}
+ {% call list_entry() %}
+ administrowaniu systememami UNIXopodobnymi (e.g. Debian GNU/Linux)
+ {% endcall %}
+
+ {% call list_entry() %}
+ programowaniu niskopoziomowym, bare-metal'u, systemach
+ wbudowanych{{ gitlink(*embeds_project_ids)}}
+ {% endcall %}
+
+ {% call list_entry() %}
+ mechanizmach sieciowych udostępnianych przez jądro
+ Linux{{ gitlink(*networking_project_ids) }}
+ {% endcall %}
+
+ {% call list_entry() %}
+ narzędziu Make{{ gitlink(*make_project_ids) }}
+ {% endcall %}
+
+ {% call list_entry() %}
+ narzędziu Git
+ {% endcall %}
+
+ {% call list_entry() %}
+ praktycznym zastosowaniu narzędzi kryptograficznych
+ {% endcall %}
+
+ {% call list_entry() %}
+ tworzeniu lekkich, etycznych stron internetowych
+ {% endcall %}
+
+ {% call list_entry() %}
+ licencjach wolnego oprogramowania
+ {% endcall %}
+
+ {% call list_entry() %}
+ kompilacji skrośnej{{ gitlink(*xcc_project_ids) }}
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('rest') %}
+ {{ header(2, 'Pozostałe') }}
+
+ {% call unordered_list() %}
+ {% call list_entry() %}
+ znajomość języka angielskiego na poziomie C1
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('freesw-only') %}
+ {{ header(2, 'Wolne oprogramowanie w pracy') }}
+
+ {% call para() %}
+
+ Jestem otwarty na zlecenia i{{ nbsp() }}oferty etycznej pracy, czyli
+ w{{ nbsp() }}szczególności takiej, w{{ nbsp() }}ramach której nie rozwija
+ się własnościowego oprogramowania i{{ nbsp() }}nie wymaga się klauzuli
+ o{{ nbsp() }}poufności. W{{ nbsp() }}razie wątpliwości
+ {{ link('mailto:koszko@koszko.org', 'odpowiadam na pytania') }}.
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('contact') %}
+ {{ header(2, 'Kontakt') }}
+
+ {{ contact_info() }}
+ {% endcall %}
+{% endblock %}
diff --git a/src/koszko_org_website/templates/pl/koszko.html.jinja b/src/koszko_org_website/templates/pl/koszko.html.jinja
new file mode 100644
index 0000000..1fd1b05
--- /dev/null
+++ b/src/koszko_org_website/templates/pl/koszko.html.jinja
@@ -0,0 +1,162 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website personal page (polish).
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "koszko.html.jinja" %}
+
+{% block title %} Wojtek {% endblock %}
+
+{% block subheading_text %} strona domowa {% endblock %}
+
+{% set include_not_facebookd = true %}
+
+{% block to_freesw_hackers %}
+ {% call para() %}
+ Chcecie, żeby ludzie doceniali i{{ nbsp() }}wybierali wolne programy, dla
+ dobra ich i{{ nbsp() }}społeczeństwa? Uważacie za przykre, że większość
+ osób jest bardzo nieodpowiedzialna i{{ nbsp() }}polega w{{ nbsp() }}każdej
+ dziedzinie na własnościowych narzędziach, nie okazując ani odrobiny
+ inicjatywy, żeby się przekonać, czy na pewno są dla nich lepsze? Może też
+ spotkaliście się z{{ nbsp() }}olewaniem logicznych argumentów?
+ {% endcall %}
+ {% call para() %}
+ Wielu katolików czuje się podobnie widząc ludzi odchodzących od Kościoła
+ oraz zagorzałych ateistów w{{ nbsp() }}odpowiedzi na wszelkie doniesienia
+ o{{ nbsp() }}cudach wymyślających teorie spiskowe dla ich podważenia. A{{
+ nbsp() }}my przecież chcemy dla Was dobrze - żebyście byli naprawdę
+ szczęśliwi i{{ nbsp() }}-{{ nbsp() }}mówiąc prosto -{{ nbsp() }}zbawili się.
+ {% endcall %}
+ {% call para() %}
+ Przyjaciele, okażcie taką odpowiedzialność życiową, jakiej oczekujemy od
+ innych i{{ nbsp() }}na poważnie zweryfikujcie czy to, co Kościół głosi od
+ 2000 lat, przypadkiem nie jest {{ bold('prawdą') }}.
+ {% endcall %}
+{% endblock %}
+
+{% block to_christians %}
+ {% call para() %}
+ Jako chrześcijanie staramy się żyć dobrze i{{ nbsp() }}odpowiedzialnie.
+ Jako chrześcijanie uznajemy dzielenie się z{{ nbsp() }}innymi za coś
+ dobrego. Słyszeliście o{{ nbsp() }}wolnym oprogramowaniu? Na logikę to
+ jest coś, co powinno się cieszyć ogromną popularnością wśród
+ chrześcijan. Tymczasem tak nie jest. Dlaczego większość z{{ nbsp() }}nas nie
+ stara się budować społeczeństwa odpowiedzialnego, które technologii
+ używałoby w{{ nbsp() }}rozsądny sposób, tak, żeby była ona kontrolowana
+ przez człowieka, a{{ nbsp() }}nie na odwrót? Dlaczego zamiast zachęcać
+ innych do dzielenia się swoim kodem, katolicy tak często sami swój kod
+ udostępniają jako własnościowy, przez co jego użytkownik jest całkowicie
+ zdany na ich łaskę?
+ {% endcall %}
+ {% call para() %}
+ Nie lubimy ignorowania? To i{{ nbsp() }}my nie ignorujmy. Lekceważenie jest
+ złe? Więc i{{ nbsp() }}my nie lekceważmy. Chcemy, żeby nasze Państwo było
+ niepodległe a{{ nbsp() }}Kościoł niezależny? To w{{ nbsp() }}pierwszej
+ kolejności my przestawajmy polegać na urządzeniach, programach i{{ nbsp()
+ }}serwisach, które odbierają wolność.
+ {% endcall %}
+{% endblock %}
+
+{% block use_internet_if_needed %}
+ {% call para() %}
+ Powiedziano mi, że powyższe jest zbyt ogólnikowe i{{ nbsp() }}ktoś, kto nic
+ nie wie, niczego nie zrozumie. Jeśli faktycznie nie masz pojęcia,
+ o{{ nbsp() }}czym tutaj napisałem, możesz skorzystać z wyszukiwarki
+ internetowej i/lub Wikipedii, żeby dowiedzieć się więcej.
+ {% endcall %}
+{% endblock %}
+
+{% block content %}
+ {% call section('contact') %}
+ {{ header(2, 'Kontakt') }}
+
+ {% call descriptions() %}
+ {{ desc_term('Tel.:') }}
+ {{ desc_desc('(+48) 12 350 64 74') }}
+
+ {{ desc_term('Email:') }}
+ {% call desc_desc() -%}
+ {{ link('mailto:koszko@koszko.org', 'koszko@koszko.org') }}
+ {%- endcall %}
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('pubkeys') %}
+ {{ header(2, 'Klucze publiczne') }}
+
+ {% call unordered_list() %}
+ {% call list_entry() %}
+ {{ link('/static/key.gpg', 'PGP') }}
+
+ {% call unordered_list() %}
+ {% call list_entry() %}
+ {% call link('/static/key.gpg.sig') -%}
+ podpis klucza PGP wykonany kluczem signify
+ {%- endcall %}
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+
+ {% call list_entry() %}
+ {{ link('/static/key.pub', 'signify') }}
+
+ {% call unordered_list() %}
+ {% call list_entry() %}
+ {% call link('/static/key.pub.asc') -%}
+ podpis klucza signify wykonany kluczem PGP
+ {%- endcall %}
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('portal') %}
+ {{ header(2, 'Portal') }}
+
+ {% call para() %}
+ Niniejszy portal istnieje w{{ nbsp() }}sieci od kwietnia 2021. Wchodzące w
+ jego skład strony są wymienione poniżej.
+ {% endcall %}
+
+ {% call descriptions() %}
+ {% call desc_term() -%}
+ {{ link(same_lang_url('koszko.html'), 'koszko.org/koszko.html') }}
+ {%- endcall %}
+ -
+ {{ desc_desc('strona domowa (przeglądasz ją)') }}
+
+ {% call desc_term() -%}
+ {{ link('https://pray.koszko.org', 'pray.koszko.org') }}
+ {%- endcall %}
+ -
+ {{ desc_desc('strona karteczek modlitwy') }}
+
+ {% call desc_term() -%}
+ {{ link('https://sheets.koszko.org', 'sheets.koszko.org') }}
+ {%- endcall %}
+ -
+ {{ desc_desc('strona karteczek zmieniania świata') }}
+
+ {% call desc_term() -%}
+ {{ link('https://haketilo.koszko.org', 'haketilo.koszko.org') }}
+ {%- endcall %}
+ -
+ {{ desc_desc('strona proxy Haketilo') }}
+
+ {% call desc_term() -%}
+ {{ link('https://git.koszko.org', 'git.koszko.org') }}
+ {%- endcall %}
+ -
+ {{ desc_desc('moje repozytoria') }}
+ {% endcall %}
+ {% endcall %}
+
+ {% call section('request') %}
+ {{ header(2, 'Oświadczenie osobiste') }}
+
+ {{ request_table() }}
+ {% endcall %}
+{% endblock %}
diff --git a/src/koszko_org_website/templates/pl/prima_aprilis.html.jinja b/src/koszko_org_website/templates/pl/prima_aprilis.html.jinja
new file mode 100644
index 0000000..f273f5c
--- /dev/null
+++ b/src/koszko_org_website/templates/pl/prima_aprilis.html.jinja
@@ -0,0 +1,20 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website Prima Aprilis page (polish).
+
+Copyright (C) 2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "__koszko_base.html.jinja" %}
+
+{% block title %} Prima Aprilis! {% endblock %}
+
+{% block header %}
+ {{ header(1, 'Prima Aprilis!') }}
+{% endblock %}
+
+{% block content %}
+ {% call para() %}
+ Uważaj, bo się pomylisz {{ unicode(128521) }}
+ {% endcall %}
+{% endblock %}
diff --git a/src/koszko_org_website/templates/pl/qr.html.jinja b/src/koszko_org_website/templates/pl/qr.html.jinja
new file mode 100644
index 0000000..92d6652
--- /dev/null
+++ b/src/koszko_org_website/templates/pl/qr.html.jinja
@@ -0,0 +1,28 @@
+{#
+SPDX-License-Identifier: CC0-1.0
+
+koszko.org website QR code easter egg page (polish).
+
+Copyright (C) 2021,2022 Wojtek Kosior <koszko@koszko.org>
+#}
+{% extends "__campaign_base.html.jinja" %}
+
+{% block title %} Jajeczka {% endblock %}
+
+{% block content %}
+ {{ header(1, 'Kod QR') }}
+
+ {% call section() %}
+ {% call para() %}
+ A{{ nbsp() }}więc zeskanowałeś/aś kod QR? Zobaczysz za to coś ciekawego.
+ {% endcall %}
+
+ {% set alt_text = 'zdjęcie jajeczek wielkanocnych leżących w trawie' %}
+ {{ img('/static/easter-eggs.jpg', alt_text) }}
+
+ {% call para() %}
+ Możesz już przejść do {{ link(same_lang_url(''), 'właściwej strony') }}
+ {{ unicode(128578) }}
+ {% endcall %}
+ {% endcall %}
+{% endblock %}