diff --git a/gen_pages.py b/gen_pages.py
index 0224b38..acf41c1 100644
--- a/gen_pages.py
+++ b/gen_pages.py
@@ -442,11 +442,39 @@ def render_page(concept: Concept, pages: dict[str, str]) -> str:
return _page_shell(concept.title, concept.id.count("/"), content)
+_INDEX_HEADING_RE = re.compile(r"^#\s+(.+)$", re.M)
+
+
+def group_heading(dirname: str) -> str:
+ """Nagłówek grupy = pierwszy nagłówek `index.md` katalogu (§8).
+
+ Indexy podkatalogów same nazywają swoją zawartość, więc karta zbiorcza
+ nie musi mieć zaszytej listy katalogów — dorzucenie nowego regionu do
+ bundle'a wystarczy, żeby pojawił się tu z własną nazwą.
+ """
+ index = BUNDLE_ROOT / dirname / "index.md"
+ if index.is_file():
+ match = _INDEX_HEADING_RE.search(index.read_text(encoding="utf-8"))
+ if match:
+ return match.group(1).strip()
+ return dirname
+
+
def render_index(concepts: list[Concept]) -> str:
+ """Karta zbiorcza: koncepty z korzenia, potem grupa na katalog najwyższego
+ poziomu. Każdy koncept bundle'a ląduje w dokładnie jednej grupie."""
+ by_dir: dict[str, list[Concept]] = {}
+ for concept in concepts:
+ if "/" in concept.id:
+ by_dir.setdefault(concept.id.split("/", 1)[0], []).append(concept)
+
groups: list[tuple[str, list[Concept]]] = [
- ("Wyjazd i wiedza ogólna", [c for c in concepts if "/" not in c.id]),
- ("Oferty noclegowe", [c for c in concepts if c.id.startswith("oferty/")]),
+ ("Wyjazd i wiedza ogólna", [c for c in concepts if "/" not in c.id])
]
+ for dirname in sorted(by_dir):
+ # region.md przed oferty/* — płycej w drzewie znaczy ogólniej.
+ items = sorted(by_dir[dirname], key=lambda c: (c.id.count("/"), c.id))
+ groups.append((group_heading(dirname), items))
sections = []
for heading, items in groups:
if not items:
diff --git a/index.md b/index.md
index da430e3..f79b005 100644
--- a/index.md
+++ b/index.md
@@ -17,8 +17,8 @@ okf_version: "0.1"
# Warianty alternatywne
-* [Ischgl / Paznaun](/ischgl/index.md) - Wariant "Ischgl w budżecie": jazda w Silvretta Arenie (239 km) i Samnaun, nocleg w Kappl; skipass najdroższy z czterech wariantów, bo zniżka młodzieżowa kończy się przed 17. rokiem życia.
-* [Kronplatz / Plan de Corones](/kronplatz/index.md) - Wariant "Dolomity bez powtórki Sella Rondy": 121 km na jednej górze plus cały Dolomiti Superski w karnecie, baza w tanim Olang/Valdaora, junior do 18 lat.
-* [Serfaus-Fiss-Ladis](/sfl/index.md) - Najbardziej rodzinny wariant i najtańszy budżetowo: 214 km na słonecznym płaskowyżu, a termin 16–23.01 to u nich oficjalnie niski sezon.
+* [Ischgl / Silvretta Arena + dolina Paznaun](/ischgl/region.md) - Wariant alternatywny: 239 km Silvretta Areny z jazdą do bezcłowego Samnaun, nocleg w tańszym Kappl — skipass zweryfikowany na 26/27, bez zniżki dla 17-latków.
+* [Kronplatz / Plan de Corones (Południowy Tyrol)](/kronplatz/region.md) - Wariant alternatywny: 121 km na jednej górze plus cały Dolomiti Superski w karnecie, baza w tanim Olang/Valdaora, junior do 18 lat bez dopłaty.
+* [Serfaus-Fiss-Ladis (SFL)](/sfl/region.md) - Wariant alternatywny i najtańszy budżetowo: 214 km na słonecznym płaskowyżu, infrastruktura skrojona pod rodziny, a termin 16–23.01 to u nich oficjalnie niski sezon.
Porównanie wszystkich czterech wariantów obok siebie → [wyjazd](/wyjazd.md).
diff --git a/log.md b/log.md
index a0f7630..8426663 100644
--- a/log.md
+++ b/log.md
@@ -1,5 +1,9 @@
# Update Log
+## 2026-08-03
+
+* **Update**: Scalenie paczki `ski-2027-kb` (skonsumowana i usunięta) — do bundle'a weszły trzy warianty alternatywne: [Ischgl/Paznaun](/ischgl/region.md), [Kronplatz](/kronplatz/region.md) i [Serfaus-Fiss-Ladis](/sfl/region.md), każdy z dwiema kartami noclegów w ` Karty konceptów bundle'a — pełna treść każdego dokumentu (ceny, dostępność, plusy/minusy). Struktura powiązań: graf. Wszystko poza noclegiem: teren narciarski, skipassy ALPIN CARD, dojazd z Warszawy, analiza terminów, koszty życia i budżet całkowity grupy. Gotowy angielski mail z zapytaniem o 4 apartamenty dla 14 osób w terminie 16–23.01.2027 wraz z notatkami negocjacyjnymi. Wyjazd narciarski 4 rodzin (14 osób) z Warszawy do Skicircus Saalbach w styczniu 2027, z celem budżetowym ~2 000 € za nocleg na rodzinę. Wariant alternatywny: 239 km Silvretta Areny z jazdą do bezcłowego Samnaun, nocleg w tańszym Kappl — skipass zweryfikowany na 26/27, bez zniżki dla 17-latków. Rodzinny dom z sześcioma apartamentami w Kappl — bierzemy cztery, ceny doliny zamiast cen Ischgl, PLAN A wariantu Ischgl. Tyrolski dom apartamentowy 100 m od przystanku skibusa bez przesiadki do Ischgl — liczba wolnych jednostek do potwierdzenia, PLAN B wariantu Ischgl. Wariant alternatywny: 121 km na jednej górze plus cały Dolomiti Superski w karnecie, baza w tanim Olang/Valdaora, junior do 18 lat bez dopłaty. Gospodarstwo z dokładnie czterema apartamentami — grupa zajmuje cały obiekt, anulacja bezpłatna do 2 miesięcy przed, PLAN A wariantu Kronplatz. Rezydencja w centrum Valdaory z przystankiem skibusa przed domem i Digital Guestpassem w cenie — PLAN B wariantu Kronplatz. Najtańszy nowy obiekt na liście — przestronne apartamenty z prywatnymi saunami w Viehhofen, wariant rezerwowy o mieszanych opiniach, PLAN C. Duży aparthotel ~2 min pieszo od stoku w Saalbach, z basenem i sauną w cenie — największa szansa na 4 wolne apartamenty w jednym tygodniu. Koncept wynajęcia jednego domu wakacyjnego dla całej grupy zamiast czterech osobnych apartamentów — klimat chaletowy w połowie ceny Glemm Lodge. Jedyna oferta z w pełni zweryfikowanym cennikiem (~4 370 €/rodzinę) — odrzucona budżetowo, służy jako punkt odniesienia cenowego. Apartamenty 50 m od gondoli Schattberg X-press w centrum Saalbach — najlepsza lokalizacja w rozważanym budżecie, PLAN A. Kameralny obiekt holenderskich gospodarzy w Viehhofen z oceną 5.0 — najlepszy stosunek ceny do jakości, PLAN B. Wariant alternatywny i najtańszy budżetowo: 214 km na słonecznym płaskowyżu, infrastruktura skrojona pod rodziny, a termin 16–23.01 to u nich oficjalnie niski sezon. 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. 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.Wyjazd i wiedza ogólna
+Wariant Ischgl / Paznaun
+
+Wariant Kronplatz / Plan de Corones
+Oferty noclegowe
+Wariant Serfaus-Fiss-Ladis
+
Rodzinny dom z sześcioma apartamentami w Kappl — bierzemy cztery, ceny doliny zamiast cen Ischgl, PLAN A wariantu Ischgl.
+ + +Rodzinnie prowadzony dom z 6 komfortowymi apartamentami w Kappl — idealna konfiguracja pod 4 rodziny (bierzemy 4 jednostki, dom prawie na wyłączność). Silvretta Arena Ischgl/Samnaun ~10 min autem/skibusem, skibus po całej dolinie bezpłatny.
++ układ 6 apartamentów = klimat "nasz dom"; ceny Kappl zamiast Ischgl; tor saneczkowy na wieczory; parking. − codzienna logistyka skibus/auto do Silvretta Areny; wieczorne życie tylko w Ischgl (10 min taksówką).
+diff --git a/pages/ischgl/oferty/apartment-brandau-kappl.html b/pages/ischgl/oferty/apartment-brandau-kappl.html new file mode 100644 index 0000000..2ac0267 --- /dev/null +++ b/pages/ischgl/oferty/apartment-brandau-kappl.html @@ -0,0 +1,80 @@ + + +
+ + +
+ + +
+