Stopka: dyskretne "powered by gethumanai.pl" na każdej stronie i w grafie

W _page_shell dopisek idzie do istniejącej stopki, tym samym małym
wyciszonym fontem co nota o generatorze. Viewer grafu stopki nie ma (main
wypełnia okno), więc w gen_viz.py dopisek ląduje w nagłówku obok "OKF
bundle", w tej samej klasie .muted — przez łatkę na _load_template, tak
samo jak dotychczasowa łatka na viz.js: repo upstream zostaje nietknięte,
a brak kotwicy przerywa regenerację zamiast po cichu gubić dopisek.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
oskar 2026-08-03 17:52:23 +02:00
parent 10384662b4
commit f913a8af53
25 changed files with 80 additions and 24 deletions

View file

@ -546,7 +546,8 @@ def _page_shell(
<nav>{nav}</nav>
{content}
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>{script_tag}
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>{script_tag}
</body>
</html>
"""

View file

@ -308,7 +308,11 @@ def _point_concepts_to_pages(graph: dict) -> None:
MISSING_PAGES.append(page)
# --- jedyna ingerencja w viewer ---------------------------------------
# --- ingerencje w viewer ----------------------------------------------
#
# Dwie, obie w locie na stringach wstawianych do viz.html — repo upstream
# zostaje nietknięte: (1) reguła stylu dla węzłów "external" w viz.js,
# (2) dopisek „powered by” w nagłówku szablonu (viewer nie ma stopki).
#
# Kolor węzła jest sterowany danymi ("background-color": "data(color)"),
# więc odróżnienie kolorem nie wymaga tykania viewera. Kształt już tak:
@ -360,6 +364,34 @@ def _load_asset(name: str) -> str:
G._load_asset = _load_asset
# Viewer nie ma stopki (main wypełnia okno), więc dopisek ląduje w nagłówku,
# obok istniejącego „OKF bundle” — ta sama klasa `.muted`, czyli ten sam mały
# wyciszony font co reszta metadanych paska.
_CREDIT_ANCHOR = ' <span class="muted">OKF bundle</span>\n'
_CREDIT_MARKUP = (
' <span class="muted">· powered by <a href="https://gethumanai.pl"'
' target="_blank" rel="noopener" style="color:inherit">gethumanai.pl</a>'
"</span>\n"
)
_upstream_load_template = G._load_template
def _load_template() -> str:
"""Upstreamowy szablon + dyskretny dopisek „powered by” w nagłówku."""
template = _upstream_load_template()
if _CREDIT_ANCHOR not in template:
raise SystemExit(
"gen_viz.py: nie znaleziono kotwicy nagłówka w templates/viz.html — "
"upstream się zmienił, popraw _CREDIT_ANCHOR przed regeneracją."
)
return template.replace(_CREDIT_ANCHOR, _CREDIT_ANCHOR + _CREDIT_MARKUP, 1)
G._load_template = _load_template
# --- łatki na generator upstreamowy -----------------------------------
_upstream_extract_links = G._extract_links

View file

@ -162,6 +162,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Wariant Serfaus-Fiss-Ladis</h2>
<ul class="cards"><li><a href="sfl/region.html">Serfaus-Fiss-Ladis (SFL)</a> <span class="chip">region</span><p>Wariant alternatywny i najtańszy budżetowo: 214 km na słonecznym płaskowyżu, infrastruktura skrojona pod rodziny, a termin 1623.01 to u nich oficjalnie niski sezon.</p></li><li><a href="sfl/oferty/apart-ideal-serfaus.html">Apart Ideal (Serfaus)</a> <span class="chip">SZACUNEK</span> <span class="chip">oferta</span><p>Sześć apartamentów z oceną 4.8/5, 50 m od podziemnego metra w Serfaus — pełne doświadczenie regionu za dopłatą, PLAN B wariantu SFL.</p></li><li><a href="sfl/oferty/haus-central-ladis.html">Haus Central (Apart Central), Ladis</a> <span class="chip">SZACUNEK</span> <span class="chip">oferta</span><p>Dokładnie cztery apartamenty z balkonami przy kolejce Sonnenbahn w najtańszej wsi płaskowyżu — cały dom dla grupy, PLAN A wariantu SFL.</p></li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
</body>
</html>

View file

@ -164,7 +164,8 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Do zrobienia</h2>
<ul><li class="task"><input type="checkbox" disabled> Mail (szablon EN): 4 apartamenty, 1623.01.2027, konfiguracja 4+4+3+3, cena grupowa.</li><li class="task"><input type="checkbox" disabled> Alternatywy w Kappl, jeśli brak miejsc: Apartments Kappl (apartments.kappl.at — skibus 100 m, narciarnia z suszarką), Ferienwohnen Mattle (centrum, blisko trasy i skibusa), Apart Avenzio (3 min od gondoli Kappl).</li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
<script>
document.querySelectorAll('.gallery').forEach(function (gallery) {
var big = gallery.querySelector('.gallery-main img');

View file

@ -162,7 +162,8 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Do zrobienia</h2>
<ul><li class="task"><input type="checkbox" disabled> Mail: ile apartamentów dostępnych 1623.01.2027, konfiguracje łóżek.</li><li class="task"><input type="checkbox" disabled> Jeśli &lt; 4 jednostek: dobrać drugi dom w Kappl (lista alternatyw w karcie Brandau).</li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
<script>
document.querySelectorAll('.gallery').forEach(function (gallery) {
var big = gallery.querySelector('.gallery-main img');

View file

@ -180,6 +180,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Ocena względem Saalbach (bazowego planu)</h2>
<p><strong>+</strong> najwyżej położony i najbardziej "wow" teren; Samnaun; tor saneczkowy. <strong></strong> skipass najdroższy (brak zniżki 17+); mieszkanie poza główną areną (codziennie 10 min skibusem do Ischgl); gastronomia najdroższa.</p>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
</body>
</html>

View file

@ -164,7 +164,8 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Do zrobienia</h2>
<ul><li class="task"><input type="checkbox" disabled> Mail: wszystkie 4 apartamenty, 1623.01.2027, 4+4+3+3.</li><li class="task"><input type="checkbox" disabled> Potwierdzić odległość do przystanku skibusa i częstotliwość rano.</li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
<script>
document.querySelectorAll('.gallery').forEach(function (gallery) {
var big = gallery.querySelector('.gallery-main img');

View file

@ -162,6 +162,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Do zrobienia</h2>
<ul><li class="task"><input type="checkbox" disabled> Mail: dostępność 4 jednostek 1623.01.2027.</li><li class="task"><input type="checkbox" disabled> Alternatywy w Olang, jeśli brak: Residence Maximilian (centrum, prywatna sauna w apartamencie), Aparthotel Familiaris (family resort z basenami — wyższa półka, dzieci 018 target), Residence Sonnwies (opcja kolacji w hotelu Markushof obok).</li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
</body>
</html>

View file

@ -176,6 +176,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Ocena względem Saalbach</h2>
<p><strong>+</strong> Dolomity bez powtórki Sella Rondy; wycieczki Alta Badia/Cortina na karnecie; junior do 18 lat (17-latek bez dopłaty); tania dolina. <strong></strong> "objazdowość" wymaga kolejki/auta (jedna góra na co dzień); dojazd ~100 km dłuższy niż do Saalbach.</p>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
</body>
</html>

View file

@ -160,7 +160,8 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<section data-section="Oferty — SFL"><h2>Oferty — SFL</h2><ul class="links"><li><a href="https://narty27.kapala.org/pages/sfl/oferty/haus-central-ladis.html">Haus Central (Apart Central)</a><code class="url">https://narty27.kapala.org/pages/sfl/oferty/haus-central-ladis.html</code><p>PLAN A · Ladis</p></li><li><a href="https://narty27.kapala.org/pages/sfl/oferty/apart-ideal-serfaus.html">Apart Ideal</a><code class="url">https://narty27.kapala.org/pages/sfl/oferty/apart-ideal-serfaus.html</code><p>PLAN B · Serfaus (obrzeża)</p></li></ul></section>
<section data-section="Pozostałe"><h2>Pozostałe</h2><ul class="links"><li><a href="https://narty27.kapala.org/pages/szablon-maila.html">Szablon zapytania grupowego (EN)</a><code class="url">https://narty27.kapala.org/pages/szablon-maila.html</code><p>Gotowy angielski mail z zapytaniem o 4 apartamenty dla 14 osób w terminie 1623.01.2027 wraz z notatkami…</p></li><li><a href="https://narty27.kapala.org/pages/start.html">Start pod własną ścieżką</a><code class="url">https://narty27.kapala.org/pages/start.html</code><p>Ten sam landing co adres główny — przydaje się w zakładkach.</p></li></ul></section>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
<script>
function collectAll() {
var lines = [];

View file

@ -167,7 +167,8 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Do zrobienia</h2>
<ul><li class="task"><input type="checkbox" disabled> Tylko jeśli plany A i B nie wypalą: sprawdzić ceny datami 1623.01.2027.</li><li class="task"><input type="checkbox" disabled> Zweryfikować najnowsze opinie (Booking/Google, filtr: zima 2026).</li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
<script>
document.querySelectorAll('.gallery').forEach(function (gallery) {
var big = gallery.querySelector('.gallery-main img');

View file

@ -167,7 +167,8 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Do zrobienia</h2>
<ul><li class="task"><input type="checkbox" disabled> Wpisać daty 1623.01.2027 w silnik na alpenparks.at → zrzut cen rzeczywistych dla 4 jednostek.</li><li class="task"><input type="checkbox" disabled> Równolegle mail grupowy z pytaniem o rabat przy 4 apartamentach.</li><li class="task"><input type="checkbox" disabled> Sprawdzić politykę anulacji (sieciówki często mają elastyczne taryfy za dopłatą — przy grupie 14 os. warto).</li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
<script>
document.querySelectorAll('.gallery').forEach(function (gallery) {
var big = gallery.querySelector('.gallery-main img');

View file

@ -169,6 +169,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Do zrobienia</h2>
<ul><li class="task"><input type="checkbox" disabled> Przeszukać portale (lista w nagłówku) filtrem: 14 os., 1623.01.2027, Viehhofen/Maishofen/Fieberbrunn.</li><li class="task"><input type="checkbox" disabled> Shortlista 3 domów → weryfikacja opinii → zapytania.</li><li class="task"><input type="checkbox" disabled> Umowa wewnętrzna grupy: zaliczki, zasady rezygnacji, podział od osoby.</li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
</body>
</html>

View file

@ -172,7 +172,8 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Do zrobienia (opcjonalnie)</h2>
<ul><li class="task"><input type="checkbox" disabled> Mail do Dietera: cena za 7 os./apartament zamiast 1012 — jeśli ≤ 5 000 €, wariant wraca do rozważań (~2 900/2 200 € na rodzinę).</li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
<script>
document.querySelectorAll('.gallery').forEach(function (gallery) {
var big = gallery.querySelector('.gallery-main img');

View file

@ -167,6 +167,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Do zrobienia</h2>
<ul><li class="task"><input type="checkbox" disabled> Sprawdzić dostępność 4 apartamentów: 1623.01.2027 (opcja B: 916.01) — Booking + strona All in One Apartments.</li><li class="task"><input type="checkbox" disabled> Wysłać zapytanie grupowe mailem (4 jednostki, 14 os., prośba o cenę grupową — przy 4 apartamentach rabat direct jest normą).</li><li class="task"><input type="checkbox" disabled> Dopytać: wysokość kaucji, sprzątanie końcowe, taksa, polityka anulacji.</li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
</body>
</html>

View file

@ -168,7 +168,8 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Do zrobienia</h2>
<ul><li class="task"><input type="checkbox" disabled> Mail z zapytaniem o dostępność wszystkich apartamentów 1623.01.2027 (opcja B: 916.01) + konfigurację łóżek dla 4+4+3+3.</li><li class="task"><input type="checkbox" disabled> Zapytać o cenę za zajęcie całego obiektu (package deal).</li><li class="task"><input type="checkbox" disabled> Potwierdzić rozkład skibusa w styczniu (częstotliwość rano 8:309:30).</li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
<script>
document.querySelectorAll('.gallery').forEach(function (gallery) {
var big = gallery.querySelector('.gallery-main img');

File diff suppressed because one or more lines are too long

View file

@ -180,6 +180,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Kalendarz decyzji</h2>
<ol><li><strong>Sierpień 2026</strong> — wysłanie zapytań grupowych do obiektów (<a href="szablon-maila.html">szablon maila</a>), zebranie ofert, wybór.</li><li><strong>Wrzesień 2026</strong> — rezerwacja + zaliczki (typowo 30%).</li><li><strong>~16.10.2026</strong> — ostateczny deadline darmowej anulacji dla Glemm Lodge (91 dni przed 16.01); inne obiekty: sprawdzić indywidualnie.</li><li><strong>Jesień 2026</strong> — potwierdzenie cen skipassów 26/27, decyzja o zakupie online (ewentualne przedsprzedaże).</li><li><strong>Grudzień 2026</strong> — dopłaty (typowo 90 dni przed), organizacja aut, sprzętu, ubezpieczeń (rekomendowane: koszty rezygnacji + NNW/OC narciarskie).</li></ol>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
</body>
</html>

View file

@ -164,6 +164,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Do zrobienia</h2>
<ul><li class="task"><input type="checkbox" disabled> Enquiry przez portal regionu: 4 apartamenty, 1623.01.2027.</li><li class="task"><input type="checkbox" disabled> Porównać z ofertą z Ladis (Haus Central) po otrzymaniu obu cen — decyzja grupy: dopłacać do Serfaus czy nie.</li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
</body>
</html>

View file

@ -164,7 +164,8 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Do zrobienia</h2>
<ul><li class="task"><input type="checkbox" disabled> Zapytanie przez system serfaus-fiss-ladis.at (przycisk enquiry) lub mail: 4 apartamenty, 1623.01.2027, 4+4+3+3.</li><li class="task"><input type="checkbox" disabled> Alternatywa w Ladis: Laudegghof (4★ apartamenty, jacuzzi/spa, 8.0 na Expedia, sprzątanie 100120 €/apartament).</li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
<script>
document.querySelectorAll('.gallery').forEach(function (gallery) {
var big = gallery.querySelector('.gallery-main img');

View file

@ -173,6 +173,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Ocena względem Saalbach</h2>
<p><strong>+</strong> nasz termin = ich niski sezon (unikat wśród 4 wariantów!); najbardziej dziecięco-rodzinna infrastruktura; słoneczny płaskowyż; skipassy realnie najtańsze po Livigno. <strong></strong> mniej "objazdowy" charakter niż Skicircus (jeden połączony teren, ale bez efektu pętli); apres-ski/wieczorne życie skromne (to celowo rodzinny kurort); nastolatki-eksperci mogą po 4 dniach znać teren na pamięć.</p>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
</body>
</html>

View file

@ -156,6 +156,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<p class="lead">Karta regionu = skipassy, dojazd, terminy, koszty życia i budżet całkowity.</p>
<ul class="regions"><li><a href="/pages/region.html" class="hero" style="background-image:linear-gradient(rgba(15,23,42,.62),rgba(15,23,42,.72)),url('/pages/img/alpenparks-sonnleiten/01.jpg')">Saalbach (baza)<small>Budżet grupy: ~14 00018 000 €</small></a></li><li><a href="/pages/ischgl/region.html" class="hero" style="background-image:linear-gradient(rgba(15,23,42,.62),rgba(15,23,42,.72)),url('/pages/img/apartment-brandau-kappl/01.jpg')">Ischgl/Paznaun<small>Budżet grupy: ~13 50016 000 €</small></a></li><li><a href="/pages/kronplatz/region.html" class="hero" style="background-image:linear-gradient(rgba(15,23,42,.62),rgba(15,23,42,.72)),url('/pages/img/haeuslerhof-valdaora/01.jpg')">Kronplatz<small>Budżet grupy: ~13 20016 300 €</small></a></li><li><a href="/pages/sfl/region.html" class="hero" style="background-image:linear-gradient(rgba(15,23,42,.62),rgba(15,23,42,.72)),url('/pages/img/haus-central-ladis/01.jpg')">SFL<small>Budżet grupy: ~12 80015 700 €</small></a></li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
</body>
</html>

View file

@ -170,6 +170,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Notatki taktyczne</h2>
<ul><li>Wysyłać z jednego "kontaktowego" adresu — jedna osoba negocjuje za grupę.</li><li>Nie podawać budżetu w pierwszym mailu; najpierw ich oferta.</li><li>Po otrzymaniu 2 ofert można uczciwie napisać "we received a comparable offer at X €" — w Alpach to normalna praktyka.</li><li>Prosić o ofertę mailem (pisemnie), nie telefonicznie.</li></ul>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
</body>
</html>

View file

@ -172,6 +172,7 @@ td.thumb .placeholder { display: flex; width: 120px; height: 80px; border-radius
<h2>Konwencja danych</h2>
<p>Każda karta oferty ma frontmatter YAML z polami OKF (<code>type</code>, <code>title</code>, <code>description</code>, <code>timestamp</code>, <code>tags</code>) oraz z polami rozszerzeń: <code>id</code>, <code>nazwa</code>, <code>miejscowosc</code>, <code>gps</code>, <code>odleglosc_od_wyciagu</code>, <code>ocena</code>, <code>cena_za_apartament_tydzien</code>, <code>koszt_rodzina_2p2</code>, <code>koszt_rodzina_2p1</code>, <code>status_ceny</code> (SZACUNEK / ZWERYFIKOWANE), <code>priorytet</code>, <code>www</code>, <code>ostatnia_aktualizacja</code> — stronę można generować statycznie prosto z tych pól (Astro/Hugo/Eleventy czytają frontmatter natywnie).</p>
<footer>Wygenerowane z bundle'a OKF przez <code>gen_pages.py</code> — nie edytuj
tych plików, edytuj <code>.md</code> i przegeneruj.</footer>
tych plików, edytuj <code>.md</code> i przegeneruj.<br>
powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener">gethumanai.pl</a></footer>
</body>
</html>

View file

@ -178,6 +178,7 @@ hr { border: none; border-top: 1px solid #e2e8f0; margin: 14px 0; }
<div class="title">
<strong id="bundle-name"></strong>
<span class="muted">OKF bundle</span>
<span class="muted">· powered by <a href="https://gethumanai.pl" target="_blank" rel="noopener" style="color:inherit">gethumanai.pl</a></span>
</div>
<div class="controls">
<input id="search" type="search" placeholder="Search title / id / tag">