From: Ole B. Rosentreter Date: Fri, 5 Jun 2026 19:38:12 +0000 (+0200) Subject: new articles X-Git-Url: https://git.laktatnebel.de/?a=commitdiff_plain;h=39e5e6ca182af670da749f97f2099c6fafcfca81;p=www.triathlon-coaching.com.git new articles --- diff --git a/api/anmeldung.php b/api/anmeldung.php index 96ac474..243de06 100644 --- a/api/anmeldung.php +++ b/api/anmeldung.php @@ -2,15 +2,27 @@ /** * triathlon-coaching.com – Event-Anmeldung Backend * POST /api/anmeldung.php - * Erwartet JSON: { name, email, phone, nachricht, event_slug, event_title, hp, agb } + * + * Erwartet JSON: { + * event_slug, event_title, + * anrede, vorname, nachname, email, phone, geburtstag, + * nachricht, hp, + * opt_* (buchbare Optionen, optional), + * req_* (Pflicht-Checkboxen, müssen alle true sein), + * radio_* (Radio-Gruppen, optional) + * } + * Antwortet mit JSON: { success: bool, message: string } */ declare(strict_types=1); -const RECIPIENT = 'kontakt@triathlon-coaching.com'; -const SENDER_DOMAIN = 'triathlon-coaching.com'; -const RATE_LIMIT = 5; -const RATE_DIR = '/var/www/triathlon-coaching.com/ssg_ratelimit'; +// ── Konfiguration ──────────────────────────────────────────────── +const RECIPIENT = 'kontakt@triathlon-coaching.com'; +const SENDER = 'kontakt@triathlon-coaching.com'; +const NOREPLY = 'noreply@triathlon-coaching.com'; +const RATE_LIMIT = 5; // max. Anmeldungen pro IP/Stunde +const RATE_DIR = '/var/www/triathlon-coaching.com/ssg_ratelimit'; +// ── Helpers ────────────────────────────────────────────────────── function json_response(bool $success, string $message, int $code = 200): never { http_response_code($code); header('Content-Type: application/json; charset=utf-8'); @@ -18,83 +30,138 @@ function json_response(bool $success, string $message, int $code = 200): never { exit; } -// CORS -header('Access-Control-Allow-Origin: *'); +function sanitize(string $input): string { + return trim(strip_tags($input)); +} + +// ── CORS: nur eigene Domain ────────────────────────────────────── +header('Access-Control-Allow-Origin: https://www.triathlon-coaching.com'); header('Access-Control-Allow-Headers: Content-Type'); if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') exit; if ($_SERVER['REQUEST_METHOD'] !== 'POST') json_response(false, 'Methode nicht erlaubt.', 405); +// ── JSON-Body einlesen ─────────────────────────────────────────── $raw = file_get_contents('php://input'); $data = json_decode($raw, true); -if (!$data) json_response(false, 'Ungültige Daten.', 400); +if (!is_array($data)) json_response(false, 'Ungültige Daten.', 400); -// Honeypot +// ── Honeypot ───────────────────────────────────────────────────── if (!empty($data['hp'])) json_response(true, 'Danke!'); -// Pflichtfelder -$anrede = trim($data['anrede'] ?? ''); -$vorname = trim($data['vorname'] ?? ''); -$nachname = trim($data['nachname'] ?? ''); -$name = trim("$vorname $nachname"); -$email = trim($data['email'] ?? ''); -$event_slug = trim($data['event_slug'] ?? ''); -$event_title = trim($data['event_title'] ?? ''); -$agb = !empty($data['agb']); - -// Alle req_* Felder müssen gesetzt sein (Pflicht-Checkboxen aus ####-Gruppen) -$missing_required = false; -foreach ($data as $k => $v) { - // Client schickt nur gesetzte Checkboxen – fehlende req_* = nicht angehakt -} -// Pflichtfelder prüfen +// ── Felder auslesen ────────────────────────────────────────────── +$anrede = sanitize((string)($data['anrede'] ?? '')); +$vorname = sanitize((string)($data['vorname'] ?? '')); +$nachname = sanitize((string)($data['nachname'] ?? '')); +$name = trim("$vorname $nachname"); +$email = sanitize((string)($data['email'] ?? '')); +$phone = sanitize((string)($data['phone'] ?? '')); +$geburtstag = sanitize((string)($data['geburtstag'] ?? '')); +$nachricht = sanitize((string)($data['nachricht'] ?? '')); +$event_slug = sanitize((string)($data['event_slug'] ?? '')); +$event_title = sanitize((string)($data['event_title'] ?? '')); + +// ── Pflichtfelder validieren ───────────────────────────────────── if (!$vorname || !$nachname || !$email || !$event_slug) - json_response(false, 'Bitte alle Pflichtfelder ausfüllen.'); + json_response(false, 'Bitte alle Pflichtfelder ausfüllen.', 422); if (!filter_var($email, FILTER_VALIDATE_EMAIL)) - json_response(false, 'Ungültige E-Mail-Adresse.'); - -// Rate-Limit -@mkdir(RATE_DIR, 0700, true); -$ip = preg_replace('/[^0-9a-fA-F:.]/', '', $_SERVER['REMOTE_ADDR'] ?? ''); -$file = RATE_DIR . '/' . md5($ip); -$now = time(); -$hits = file_exists($file) ? array_filter(explode("\n", file_get_contents($file)), - fn($t) => $t > $now - 3600) : []; -if (count($hits) >= RATE_LIMIT) json_response(false, 'Zu viele Anfragen. Bitte später erneut.'); -$hits[] = $now; -file_put_contents($file, implode("\n", $hits)); - -// Mail -$phone = trim($data['phone'] ?? ''); -$nachricht = trim($data['nachricht'] ?? ''); -$subject = "Anmeldung: {$event_title}"; -$optionen = is_array($data['optionen'] ?? null) ? implode(', ', $data['optionen']) : ''; -$geburtstag = trim($data['geburtstag'] ?? ''); -$body = "Neue Event-Anmeldung\n\n" - . "Event: {$event_title} ({$event_slug})\n" - . "Name: {$anrede} {$vorname} {$nachname}\n" - . "E-Mail: {$email}\n" - . ($phone ? "Telefon: {$phone}\n" : "") - . ($geburtstag ? "Geb.: {$geburtstag}\n" : "") - . ($optionen ? "Optionen: {$optionen}\n" : "") - . (isset($data['radio_camp']) ? "Camp: " . trim($data['radio_camp']) . "\n" : "") - . ($nachricht ? "\nNachricht:\n{$nachricht}\n" : "") - . "\nBestätigungen: Teilnahme, AGB, DSGVO, Storno, Zahlung – alle akzeptiert.\n"; - -$headers = "From: anmeldung@{$sender_domain}\r\n" - . "Reply-To: {$email}\r\n" - . "Content-Type: text/plain; charset=UTF-8\r\n"; - -if (!mail(RECIPIENT, $subject, $body, $headers)) - json_response(false, 'Fehler beim Senden. Bitte per E-Mail anmelden.', 500); - -// Autoresponder -$auto_body = "Hallo {$name},\n\n" - . "vielen Dank für Deine Anmeldung zum Event \"{$event_title}\".\n\n" - . "Ich werde mich in den nächsten 1-2 Werktagen bei Dir melden.\n\n" - . "Viele Grüße\ntriathlon-coaching.com" - . "\n\nImpressum: https://www.triathlon-coaching.com/impressum"; -mail($email, "Anmeldebestätigung: {$event_title}", $auto_body, - "From: coaching@" . SENDER_DOMAIN . "\r\nContent-Type: text/plain; charset=UTF-8\r\n"); + json_response(false, 'Ungültige E-Mail-Adresse.', 422); + +// ── Pflicht-Checkboxen (req_*) serverseitig prüfen ─────────────── +foreach ($data as $key => $value) { + if (str_starts_with($key, 'req_') && empty($value)) { + json_response(false, 'Bitte alle Pflichtfelder bestätigen.', 422); + } +} + +// ── Rate-Limit ─────────────────────────────────────────────────── +if (!is_dir(RATE_DIR)) mkdir(RATE_DIR, 0700, true); + +$ip = preg_replace('/[^a-f0-9:.]/', '', $_SERVER['REMOTE_ADDR'] ?? ''); +$ratefile = RATE_DIR . '/' . hash('sha256', $ip) . '.json'; +$now = time(); +$window = 3600; + +$attempts = []; +if (file_exists($ratefile)) { + $attempts = json_decode(file_get_contents($ratefile), true) ?? []; +} +$attempts = array_filter($attempts, fn(int $t) => ($now - $t) < $window); + +if (count($attempts) >= RATE_LIMIT) + json_response(false, 'Zu viele Anfragen. Bitte später erneut.', 429); + +$attempts[] = $now; +file_put_contents($ratefile, json_encode(array_values($attempts))); + +// ── Optionen aus Formular sammeln ──────────────────────────────── +$opt_lines = []; +$radio_lines = []; +foreach ($data as $key => $value) { + if (str_starts_with($key, 'opt_') && !empty($value)) { + $opt_lines[] = ' + ' . sanitize((string)$value); + } + if (str_starts_with($key, 'radio_') && !empty($value)) { + $gruppe = ucfirst(str_replace(['radio_', '_'], ['', ' '], $key)); + $radio_lines[] = " {$gruppe}: " . sanitize((string)$value); + } +} + +// ── Mail-Body aufbauen ─────────────────────────────────────────── +$subject = "Anmeldung: {$event_title}"; + +$body = "Neue Event-Anmeldung\n"; +$body .= str_repeat('=', 40) . "\n\n"; +$body .= "Event: {$event_title} ({$event_slug})\n\n"; +$body .= "Name: " . ($anrede ? "{$anrede} " : '') . "{$vorname} {$nachname}\n"; +$body .= "E-Mail: {$email}\n"; +if ($phone) $body .= "Telefon: {$phone}\n"; +if ($geburtstag) $body .= "Geb.: {$geburtstag}\n"; + +if (!empty($opt_lines)) { + $body .= "\nBuchbare Optionen:\n" . implode("\n", $opt_lines) . "\n"; +} +if (!empty($radio_lines)) { + $body .= "\nAuswahl:\n" . implode("\n", $radio_lines) . "\n"; +} +if ($nachricht) { + $body .= "\nNachricht:\n" . str_repeat('-', 20) . "\n{$nachricht}\n"; +} + +$body .= "\nPflichtbestätigungen: alle akzeptiert.\n"; +$body .= "\n--\nIP: {$ip}\nZeitpunkt: {$now}\n"; + +// ── Mail senden ────────────────────────────────────────────────── +$headers_coach = 'From: triathlon-coaching.com <' . NOREPLY . ">\r\n"; +$headers_coach .= 'Reply-To: ' . $name . ' <' . $email . ">\r\n"; +$headers_coach .= "Content-Type: text/plain; charset=UTF-8\r\n"; +$headers_coach .= "X-Mailer: laktatnebel-ssg/1.0\r\n"; + +if (!mail(RECIPIENT, $subject, $body, $headers_coach, '-f ' . NOREPLY)) { + error_log('[anmeldung.php] mail() fehlgeschlagen für ' . $email); + json_response(false, 'Fehler beim Senden. Bitte direkt per E-Mail anmelden.', 500); +} + +// ── Autoresponder ──────────────────────────────────────────────── +$auto_body = "Hallo {$vorname},\n\n"; +$auto_body .= "vielen Dank für Deine Anmeldung zum Event \"{$event_title}\".\n\n"; +$auto_body .= "Ich werde mich in den nächsten 1–2 Werktagen bei Dir melden und\n"; +$auto_body .= "Dir alle weiteren Details zusenden.\n\n"; +$auto_body .= "Viele Grüße,\n"; +$auto_body .= "Dein Triathlon-Coach Ole\n\n"; +$auto_body .= "--\n"; +$auto_body .= "triathlon-coaching.com\n"; +$auto_body .= "DTU-C-Trainer seit 2018\n\n"; +$auto_body .= "Impressum: https://www.triathlon-coaching.com/impressum\n"; + +$headers_auto = 'From: Ole Rosentreter <' . SENDER . ">\r\n"; +$headers_auto .= 'Reply-To: <' . RECIPIENT . ">\r\n"; +$headers_auto .= "Content-Type: text/plain; charset=UTF-8\r\n"; +$headers_auto .= "X-Mailer: laktatnebel-ssg/1.0\r\n"; + +if (!mail($email, "Anmeldebestätigung: {$event_title}", $auto_body, $headers_auto, '-f ' . SENDER)) { + error_log('[anmeldung.php] Autoresponder fehlgeschlagen für ' . $email); +} +// ── Erfolg ─────────────────────────────────────────────────────── json_response(true, 'Anmeldung erfolgreich! Du erhältst in Kürze eine Bestätigungs-E-Mail.'); diff --git a/api/kontakt.php b/api/kontakt.php index c981e74..40484a9 100644 --- a/api/kontakt.php +++ b/api/kontakt.php @@ -11,7 +11,8 @@ declare(strict_types=1); // ── Konfiguration ──────────────────────────────────────────────── const RECIPIENT = 'kontakt@triathlon-coaching.com'; -const SENDER_DOMAIN = 'triathlon-coaching.com'; +const SENDER = 'kontakt@triathlon-coaching.com'; +const NOREPLY = 'noreply@triathlon-coaching.com'; const RATE_LIMIT = 3; // max. Absendungen pro IP/Stunde const RATE_DIR = '/var/www/triathlon-coaching.com/ssg_ratelimit'; @@ -117,21 +118,22 @@ IP: {$ip} Zeitpunkt: {$now} TEXT; -$headers_coach = "From: noreply@{$sender_domain}\r\n"; -$headers_coach .= "Reply-To: {$email}\r\n"; +// -f setzt den Envelope-Sender (Return-Path) → SPF greift korrekt +$additional_params = '-f ' . NOREPLY; + +$headers_coach = 'From: triathlon-coaching.com <' . NOREPLY . ">\r\n"; +$headers_coach .= 'Reply-To: ' . $name . ' <' . $email . ">\r\n"; $headers_coach .= "Content-Type: text/plain; charset=UTF-8\r\n"; $headers_coach .= "X-Mailer: laktatnebel-ssg/1.0\r\n"; -$sender_domain = SENDER_DOMAIN; - -$sent = mail(RECIPIENT, $subject, $body_coach, $headers_coach); +$sent = mail(RECIPIENT, $subject, $body_coach, $headers_coach, $additional_params); if (!$sent) { error_log('[kontakt.php] mail() fehlgeschlagen für ' . $email); json_response(false, 'Technischer Fehler beim Senden. Bitte versuche es später erneut.', 500); } -// ── Kopie + Autoresponder an Absender ─────────────────────────── +// ── Autoresponder an Absender ──────────────────────────────────── $subject_copy = 'Deine Anfrage bei triathlon-coaching.com'; $body_copy = <<\r\n"; +$headers_copy .= 'Reply-To: <' . RECIPIENT . ">\r\n"; $headers_copy .= "Content-Type: text/plain; charset=UTF-8\r\n"; $headers_copy .= "X-Mailer: laktatnebel-ssg/1.0\r\n"; // Autoresponder – Fehler hier nicht kritisch, nur loggen -if (!mail($email, $subject_copy, $body_copy, $headers_copy)) { +if (!mail($email, $subject_copy, $body_copy, $headers_copy, '-f ' . SENDER)) { error_log('[kontakt.php] Autoresponder fehlgeschlagen für ' . $email); } diff --git a/db/articles/001_index.sql b/db/articles/001_index.sql index 8d7e013..d716247 100644 --- a/db/articles/001_index.sql +++ b/db/articles/001_index.sql @@ -7,7 +7,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'index', NULL, 'home', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); -- ============================================================ -- 2. Naviagation anlegen @@ -41,7 +41,7 @@ NULL, -- card_media_id, NULL, NULL, -- meta_title, meta_desc NULL, -- canonical_url 'published', -- status -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); -- ============================================================ diff --git a/db/articles/002_kontakt.sql b/db/articles/002_kontakt.sql index 2fe0663..5f07080 100644 --- a/db/articles/002_kontakt.sql +++ b/db/articles/002_kontakt.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'kontakt', NULL, 'contact', -5, true, NULL, NULL, NULL, now(), now()); +5, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".nav_items VALUES (DEFAULT, NULL, (SELECT id FROM :"schema".pages WHERE slug='kontakt'), NULL, 'Kontakt', @@ -20,4 +20,4 @@ NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); diff --git a/db/articles/003_blog.sql b/db/articles/003_blog.sql index a71034c..cab9f11 100644 --- a/db/articles/003_blog.sql +++ b/db/articles/003_blog.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog', NULL, 'blog-grid', -2, true, NULL, NULL, NULL, now(), now()); +2, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".nav_items VALUES (DEFAULT, NULL, (SELECT id FROM :"schema".pages WHERE slug='blog'), NULL, 'Blog', @@ -20,4 +20,4 @@ INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"sche '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); diff --git a/db/articles/003_impressum.sql b/db/articles/003_impressum.sql index 6b97b6f..8bdee3c 100644 --- a/db/articles/003_impressum.sql +++ b/db/articles/003_impressum.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'impressum', NULL, 'legal', -6, false, NULL, NULL, NULL, now(), now()); +6, false, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='impressum'), 1, NULL, 'Impressum', @@ -20,4 +20,4 @@ Quelle: [http://www.e-recht24.de](http://www.e-recht24.de/impressum-generator.ht '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); diff --git a/db/articles/004_datenschutz.sql b/db/articles/004_datenschutz.sql index 66499f2..b2f5908 100644 --- a/db/articles/004_datenschutz.sql +++ b/db/articles/004_datenschutz.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'datenschutz', NULL, 'legal', -7, false, NULL, NULL, NULL, now(), now()); +7, false, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='datenschutz'), 1, NULL, 'Datenschutz', @@ -142,4 +142,4 @@ Die Datenschutzerklärung wurde mit dem [Datenschutzerklärungs-Generator der ac '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); diff --git a/db/articles/005_agb.sql b/db/articles/005_agb.sql index 2306213..ceaf49d 100644 --- a/db/articles/005_agb.sql +++ b/db/articles/005_agb.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'agb', NULL, 'legal', -8, false, NULL, NULL, NULL, now(), now()); +8, false, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='agb'), 1, NULL, 'AGB', @@ -96,4 +96,4 @@ NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); diff --git a/db/articles/080_tools.sql b/db/articles/080_tools.sql index a88f969..e04d1c7 100644 --- a/db/articles/080_tools.sql +++ b/db/articles/080_tools.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'tools', NULL, 'tool-grid', -4, true, NULL, NULL, NULL, now(), now()); +4, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".nav_items VALUES (DEFAULT, NULL, (SELECT id FROM :"schema".pages WHERE slug='tools'), NULL, 'Tools & more', @@ -20,5 +20,5 @@ INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"sche '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); diff --git a/db/articles/081_swim.sql b/db/articles/081_swim.sql index 93d4c30..6740927 100644 --- a/db/articles/081_swim.sql +++ b/db/articles/081_swim.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'tools/swim', (SELECT id FROM pages WHERE slug='tools'), 'tool-card', -0, false, NULL, 'https://swim.triathlon-coaching.com', NULL, now(), now()); +0, false, NULL, 'https://swim.triathlon-coaching.com', NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".nav_items VALUES (DEFAULT, (SELECT id FROM :"schema".nav_items WHERE label='Tools & more'), NULL, 'https://swim.triathlon-coaching.com', @@ -22,5 +22,5 @@ INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pa '', NULL, NULL, NULL, NULL, NULL, 'swim.triathlon-coaching.com', 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); diff --git a/db/articles/082_roadtokona.sql b/db/articles/082_roadtokona.sql index 92a569a..c15fc1f 100644 --- a/db/articles/082_roadtokona.sql +++ b/db/articles/082_roadtokona.sql @@ -6,7 +6,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'tools/roadtokona', (SELECT id FROM pages WHERE slug='tools'), 'tool-card', -1, false, NULL, 'https://roadtokona.triathlon-coaching.com', NULL, now(), now()); +1, false, NULL, 'https://roadtokona.triathlon-coaching.com', NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".nav_items VALUES (DEFAULT, (SELECT id FROM :"schema".nav_items WHERE label='Tools & more'), NULL, 'https://roadtokona.triathlon-coaching.com', @@ -22,4 +22,4 @@ INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pa '', NULL, NULL, NULL, NULL, NULL, 'roadtokona.triathlon-coaching.com', 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); diff --git a/db/articles/100_blog_warum-einen-coach.sql b/db/articles/100_blog_warum-einen-coach.sql index 3964787..54cf393 100644 --- a/db/articles/100_blog_warum-einen-coach.sql +++ b/db/articles/100_blog_warum-einen-coach.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/warum-einen-coach', (SELECT id FROM :"schema".pages WHERE slug='blog'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/warum-einen-coach'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), 'Warum einen Coach? - Coach vs. Software vs. Literatur', @@ -77,7 +77,7 @@ Er hat das Coaches-Eye - das hat selbst eine KI nicht.', '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/warum-einen-coach'), (SELECT id FROM :"schema".categories WHERE slug='coaching')); diff --git a/db/articles/101_blog_gesundheit.sql b/db/articles/101_blog_gesundheit.sql index 06bf448..3bb2f70 100644 --- a/db/articles/101_blog_gesundheit.sql +++ b/db/articles/101_blog_gesundheit.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/gesundheit', (SELECT id FROM :"schema".pages WHERE slug='coaching'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/gesundheit'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), 'Gesundheit!', @@ -21,7 +21,7 @@ Und [während des Trainings](https://www.triathlon-coaching.com/blog/wenn-du-kra '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/gesundheit'), (SELECT id FROM :"schema".categories WHERE slug='coaching')); diff --git a/db/articles/102_blog_mittwochs-faengt-die-woche-an.sql b/db/articles/102_blog_mittwochs-faengt-die-woche-an.sql index ed2ccd6..400a342 100644 --- a/db/articles/102_blog_mittwochs-faengt-die-woche-an.sql +++ b/db/articles/102_blog_mittwochs-faengt-die-woche-an.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/mittwochs-faengt-die-woche-an', (SELECT id FROM :"schema".pages WHERE slug='coaching'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/mittwochs-faengt-die-woche-an'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), 'Mittwochs fängt die Woche an', @@ -22,7 +22,7 @@ Und deshalb hat es sich als praktisch und sinnvoll erwiesen immer von Mittwoch b '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/mittwochs-faengt-die-woche-an'), (SELECT id FROM :"schema".categories WHERE slug='coaching')); diff --git a/db/articles/103_blog_mein-coaching-ansatz.sql b/db/articles/103_blog_mein-coaching-ansatz.sql index 23615df..d76f428 100644 --- a/db/articles/103_blog_mein-coaching-ansatz.sql +++ b/db/articles/103_blog_mein-coaching-ansatz.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/mein-coaching-ansatz', (SELECT id FROM :"schema".pages WHERE slug='coaching'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/mein-coaching-ansatz'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), 'Mein Coaching-Ansatz', @@ -31,7 +31,7 @@ Oder man hat jemand, der sich damit auskennt und man kann sich auf das Wesentlic '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/mein-coaching-ansatz'), (SELECT id FROM :"schema".categories WHERE slug='coaching')); diff --git a/db/articles/104_blog_grenzen-wofur-ich-nicht-da-bin.sql b/db/articles/104_blog_grenzen-wofur-ich-nicht-da-bin.sql index 01d4718..bda9c74 100644 --- a/db/articles/104_blog_grenzen-wofur-ich-nicht-da-bin.sql +++ b/db/articles/104_blog_grenzen-wofur-ich-nicht-da-bin.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/grenzen-wofur-ich-nicht-da-bin', (SELECT id FROM :"schema".pages WHERE slug='coaching'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/grenzen-wofur-ich-nicht-da-bin'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), 'Grenzen: Wofür ich nicht da bin', @@ -38,7 +38,7 @@ Allerdings: **DU** musst wollen. '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/grenzen-wofur-ich-nicht-da-bin'), (SELECT id FROM :"schema".categories WHERE slug='coaching')); diff --git a/db/articles/105_blog_ziele-setzen-aber-richtig.sql b/db/articles/105_blog_ziele-setzen-aber-richtig.sql index bfd0939..d350827 100644 --- a/db/articles/105_blog_ziele-setzen-aber-richtig.sql +++ b/db/articles/105_blog_ziele-setzen-aber-richtig.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/ziele-setzen-aber-richtig', (SELECT id FROM :"schema".pages WHERE slug='blog'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/ziele-setzen-aber-richtig'), 1, (SELECT id FROM :"schema".categories WHERE slug='blog'), 'Ziele setzen – aber richtig!', @@ -71,7 +71,7 @@ Auch für die Motivation ist es förderlich und eigentlich unabdingbar, sich von '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2025-09-27'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/ziele-setzen-aber-richtig'), (SELECT id FROM :"schema".categories WHERE slug='blog')); diff --git a/db/articles/106_blog_wenn-du-krank-bist.sql b/db/articles/106_blog_wenn-du-krank-bist.sql index 9274fba..99d3303 100644 --- a/db/articles/106_blog_wenn-du-krank-bist.sql +++ b/db/articles/106_blog_wenn-du-krank-bist.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/wenn-du-krank-bist', (SELECT id FROM :"schema".pages WHERE slug='personal-coaching'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/wenn-du-krank-bist'), 1, (SELECT id FROM :"schema".categories WHERE slug='angebot'), '... wenn Du krank bist ...', @@ -29,7 +29,7 @@ Ich möchte nicht, dass Du den Gedanken entwickelst, durch das Gefühl „für n '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/wenn-du-krank-bist'), (SELECT id FROM :"schema".categories WHERE slug='angebot')); diff --git a/db/articles/107_blog_was-nicht-auf-strava-ist-ist-nicht-passiert.sql b/db/articles/107_blog_was-nicht-auf-strava-ist-ist-nicht-passiert.sql index 7f3a8d3..51080bc 100644 --- a/db/articles/107_blog_was-nicht-auf-strava-ist-ist-nicht-passiert.sql +++ b/db/articles/107_blog_was-nicht-auf-strava-ist-ist-nicht-passiert.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/was-nicht-auf-strava-ist-ist-nicht-passiert', (SELECT id FROM :"schema".pages WHERE slug='blog'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/was-nicht-auf-strava-ist-ist-nicht-passiert'), 1, (SELECT id FROM :"schema".categories WHERE slug='blog'), 'Was nicht auf Strava ist, ist nicht passiert?', @@ -29,7 +29,7 @@ Voller Fokus auf die Trainingseinheit statt Posing und Siege statt Segmente ;-) '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-12-17'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/was-nicht-auf-strava-ist-ist-nicht-passiert'), (SELECT id FROM :"schema".categories WHERE slug='blog')); diff --git a/db/articles/108_blog_laufschuhe-kann-man-zu-viele-haben.sql b/db/articles/108_blog_laufschuhe-kann-man-zu-viele-haben.sql index 8d96b52..ac3f6b6 100644 --- a/db/articles/108_blog_laufschuhe-kann-man-zu-viele-haben.sql +++ b/db/articles/108_blog_laufschuhe-kann-man-zu-viele-haben.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/laufschuhe-kann-man-zu-viele-haben', (SELECT id FROM :"schema".pages WHERE slug='blog'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/laufschuhe-kann-man-zu-viele-haben'), 1, (SELECT id FROM :"schema".categories WHERE slug='blog'), 'Laufschuhe – Kann man zu viele haben?', @@ -74,7 +74,7 @@ Guckt der Versender zu, wenn Du den Schuh auf dem Laufband testet? '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2025-08-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/laufschuhe-kann-man-zu-viele-haben'), (SELECT id FROM :"schema".categories WHERE slug='blog')); diff --git a/db/articles/109_blog_bahn-knigge-die-ungeschriebenen-gesetze-auf-der-bahn.sql b/db/articles/109_blog_bahn-knigge-die-ungeschriebenen-gesetze-auf-der-bahn.sql index 5365663..fc967df 100644 --- a/db/articles/109_blog_bahn-knigge-die-ungeschriebenen-gesetze-auf-der-bahn.sql +++ b/db/articles/109_blog_bahn-knigge-die-ungeschriebenen-gesetze-auf-der-bahn.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/bahn-knigge-die-ungeschriebenen-gesetze-auf-der-bahn', (SELECT id FROM :"schema".pages WHERE slug='blog'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2025-06-07'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/bahn-knigge-die-ungeschriebenen-gesetze-auf-der-bahn'), 1, (SELECT id FROM :"schema".categories WHERE slug='blog'), 'Bahn-Knigge: Die ungeschriebenen Gesetze auf der Bahn', @@ -68,7 +68,7 @@ Das ist Triathleten in etwa so fremd, wie einem Beckenschwimmer, der beim Triath '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2025-06-07'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/bahn-knigge-die-ungeschriebenen-gesetze-auf-der-bahn'), (SELECT id FROM :"schema".categories WHERE slug='blog')); diff --git a/db/articles/110_blog_warm-up-vor-einem-laufwettkampf.sql b/db/articles/110_blog_warm-up-vor-einem-laufwettkampf.sql index 9f01a05..d7faa92 100644 --- a/db/articles/110_blog_warm-up-vor-einem-laufwettkampf.sql +++ b/db/articles/110_blog_warm-up-vor-einem-laufwettkampf.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/warm-up-vor-einem-laufwettkampf', (SELECT id FROM :"schema".pages WHERE slug='blog'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/warm-up-vor-einem-laufwettkampf'), 1, (SELECT id FROM :"schema".categories WHERE slug='blog'), 'Warm-Up vor einem Laufwettkampf', @@ -52,7 +52,7 @@ Oder wenn es zu ungemütlich ist, zu Hause 30min locker auf der Rolle ausfahren '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2025-02-05'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/warm-up-vor-einem-laufwettkampf'), (SELECT id FROM :"schema".categories WHERE slug='blog')); diff --git a/db/articles/111_blog_saisonplanung-wie-geht-man-vor.sql b/db/articles/111_blog_saisonplanung-wie-geht-man-vor.sql index 7d66f1b..8b30d15 100644 --- a/db/articles/111_blog_saisonplanung-wie-geht-man-vor.sql +++ b/db/articles/111_blog_saisonplanung-wie-geht-man-vor.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/saisonplanung-wie-geht-man-vor', (SELECT id FROM :"schema".pages WHERE slug='blog'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/saisonplanung-wie-geht-man-vor'), 1, (SELECT id FROM :"schema".categories WHERE slug='blog'), 'Saisonplanung – wie geht man vor?', @@ -41,7 +41,7 @@ Saisonplanung ist vor allem auch eine ehrliche Auseinandersetzung mit sich selbs '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2025-10-11'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/saisonplanung-wie-geht-man-vor'), (SELECT id FROM :"schema".categories WHERE slug='blog')); diff --git a/db/articles/112_blog_fairplay-beim-coaching.sql b/db/articles/112_blog_fairplay-beim-coaching.sql index 41a8bb7..e21ed30 100644 --- a/db/articles/112_blog_fairplay-beim-coaching.sql +++ b/db/articles/112_blog_fairplay-beim-coaching.sql @@ -3,7 +3,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/fairplay-beim-coaching', (SELECT id FROM :"schema".pages WHERE slug='personal-coaching'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/fairplay-beim-coaching'), 1, (SELECT id FROM :"schema".categories WHERE slug='angebot'), 'Fairplay beim Coaching', @@ -33,7 +33,7 @@ Ach so, wenn es Dir bei mir gefällt und Du wirbst jemanden, der wenigstens 3 Mo '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/fairplay-beim-coaching'), (SELECT id FROM :"schema".categories WHERE slug='angebot')); diff --git a/db/articles/113_blog_was-kostet-personal-coaching.sql b/db/articles/113_blog_was-kostet-personal-coaching.sql index 0269a2a..499c48c 100644 --- a/db/articles/113_blog_was-kostet-personal-coaching.sql +++ b/db/articles/113_blog_was-kostet-personal-coaching.sql @@ -6,7 +6,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/was-kostet-personal-coaching', (SELECT id FROM :"schema".pages WHERE slug='personal-coaching'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/was-kostet-personal-coaching'), 1, (SELECT id FROM :"schema".categories WHERE slug='angebot'), 'Was kostet das?', @@ -30,7 +30,7 @@ Coaching in einer Einzelsportart sind 10 Euro weniger, also **30 Euro / Woche in '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/was-kostet-personal-coaching'), (SELECT id FROM :"schema".categories WHERE slug='angebot')); diff --git a/db/articles/114_blog_dein-trainingsplan.sql b/db/articles/114_blog_dein-trainingsplan.sql index 959f53c..eaeb730 100644 --- a/db/articles/114_blog_dein-trainingsplan.sql +++ b/db/articles/114_blog_dein-trainingsplan.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/dein-trainingsplan', (SELECT id FROM :"schema".pages WHERE slug='personal-coaching'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/dein-trainingsplan'), 1, (SELECT id FROM :"schema".categories WHERE slug='angebot'), 'Dein Trainingsplan', @@ -28,7 +28,7 @@ Das ist selbst bei Profis, die das ganze Jahr überall auf der Welt ihre Zelte a '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/dein-trainingsplan'), (SELECT id FROM :"schema".categories WHERE slug='angebot')); diff --git a/db/articles/115_blog_welche-rolle-hast-du.sql b/db/articles/115_blog_welche-rolle-hast-du.sql index b46644b..8935547 100644 --- a/db/articles/115_blog_welche-rolle-hast-du.sql +++ b/db/articles/115_blog_welche-rolle-hast-du.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/welche-rolle-ahleten-haben', (SELECT id FROM :"schema".pages WHERE slug='coaching'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/welche-rolle-ahleten-haben'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), 'Welche Rolle hast Du?', @@ -51,7 +51,7 @@ Je höher Dein Ziel ist, je mehr mehr wirst Du einbringen müssen ...', '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/welche-rolle-ahleten-haben'), (SELECT id FROM :"schema".categories WHERE slug='coaching')); diff --git a/db/articles/116_blog_wie-legen-wir-los-wie-lauft-das-ab.sql b/db/articles/116_blog_wie-legen-wir-los-wie-lauft-das-ab.sql index d768ca7..2d2fe86 100644 --- a/db/articles/116_blog_wie-legen-wir-los-wie-lauft-das-ab.sql +++ b/db/articles/116_blog_wie-legen-wir-los-wie-lauft-das-ab.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/wie-legen-wir-mit-dem-training-los', (SELECT id FROM :"schema".pages WHERE slug='personal-coaching'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/wie-legen-wir-mit-dem-training-los'), 1, (SELECT id FROM :"schema".categories WHERE slug='angebot'), 'Wie legen wir los? Wie läuft das ab?', @@ -45,7 +45,7 @@ Ach ja: Wer dopt, fliegt raus. Achtkantig.', '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/wie-legen-wir-mit-dem-training-los'), (SELECT id FROM :"schema".categories WHERE slug='angebot')); diff --git a/db/articles/117_blog_wie-funktioniert-individuelles-coaching.sql b/db/articles/117_blog_wie-funktioniert-individuelles-coaching.sql index 0fd0e76..d14d072 100644 --- a/db/articles/117_blog_wie-funktioniert-individuelles-coaching.sql +++ b/db/articles/117_blog_wie-funktioniert-individuelles-coaching.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/wie-funktioniert-individuelles-coaching', (SELECT id FROM :"schema".pages WHERE slug='coaching'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/wie-funktioniert-individuelles-coaching'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), 'Wie funktioniert individuelles Coaching?', @@ -31,7 +31,7 @@ Auch wenn die moderne Technik eine tolle Unterstützung darstellt – das persö '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/wie-funktioniert-individuelles-coaching'), (SELECT id FROM :"schema".categories WHERE slug='coaching')); diff --git a/db/articles/118_blog_wie-ich-mit-athleten-und-athletinnen-arbeite.sql b/db/articles/118_blog_wie-ich-mit-athleten-und-athletinnen-arbeite.sql index 1042845..2387b36 100644 --- a/db/articles/118_blog_wie-ich-mit-athleten-und-athletinnen-arbeite.sql +++ b/db/articles/118_blog_wie-ich-mit-athleten-und-athletinnen-arbeite.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/wie-ich-mit-athleten-und-athletinnen-arbeite', (SELECT id FROM :"schema".pages WHERE slug='coaching'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/wie-ich-mit-athleten-und-athletinnen-arbeite'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), 'Wie ich mit Athleten und Athletinnen arbeite(te)', @@ -36,7 +36,7 @@ Als Coach finde ich die Zahlen äußerst hilfreich, um zu erkennen, wie gut der '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/wie-ich-mit-athleten-und-athletinnen-arbeite'), (SELECT id FROM :"schema".categories WHERE slug='coaching')); diff --git a/db/articles/119_blog_about_me.sql b/db/articles/119_blog_about_me.sql index 5d05426..d37b255 100644 --- a/db/articles/119_blog_about_me.sql +++ b/db/articles/119_blog_about_me.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/about-me', NULL, 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/about-me'), 1, NULL, 'Über mich', @@ -91,7 +91,7 @@ Ironman Europe in Roth – seitdem darf ich mich Ironman nennen. NRW-Liga, Lakta Lizensierter Trainer des Deutschen Triathlon Union – die offizielle Bestätigung eines langen Wegs aus Erfahrung, Leidenschaft und Sportwissenschaft.', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/about-me'), (SELECT id FROM :"schema".categories WHERE slug='blog')); diff --git a/db/articles/120_blog_raceday-und-bloss-nichts-vergessen.sql b/db/articles/120_blog_raceday-und-bloss-nichts-vergessen.sql index 8c294b7..1ef89fd 100644 --- a/db/articles/120_blog_raceday-und-bloss-nichts-vergessen.sql +++ b/db/articles/120_blog_raceday-und-bloss-nichts-vergessen.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/raceday-und-bloss-nichts-vergessen', (SELECT id FROM :"schema".pages WHERE slug='blog'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/raceday-und-bloss-nichts-vergessen'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), 'Raceday - und bloß nichts vergessen!', @@ -100,7 +100,7 @@ Meine Liste – ohne Anspruch auf Vollständigkeit: '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2025-07-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/raceday-und-bloss-nichts-vergessen'), (SELECT id FROM :"schema".categories WHERE slug='blog')); diff --git a/db/articles/121_blog_in-peace-with_pace-der-schmale-grat-zwischen-verballern-und-doch-nur-95prozent.sql b/db/articles/121_blog_in-peace-with_pace-der-schmale-grat-zwischen-verballern-und-doch-nur-95prozent.sql index 5cd9af1..a67c0d4 100644 --- a/db/articles/121_blog_in-peace-with_pace-der-schmale-grat-zwischen-verballern-und-doch-nur-95prozent.sql +++ b/db/articles/121_blog_in-peace-with_pace-der-schmale-grat-zwischen-verballern-und-doch-nur-95prozent.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/in-peace-with_pace-der-schmale-grat-zwischen-verballern-und-doch-nur-95prozent', (SELECT id FROM :"schema".pages WHERE slug='blog'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/in-peace-with_pace-der-schmale-grat-zwischen-verballern-und-doch-nur-95prozent'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), 'In Peace with Pace - der schmale Grat zwischen verballern und doch nur 95%', @@ -18,7 +18,7 @@ sisu-training.de/wp-content/uploads/2019/05/wie_fuehlst_du_dich-01.jpg '', NULL, NULL, NULL, NULL, NULL, NULL, 'draft', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/in-peace-with_pace-der-schmale-grat-zwischen-verballern-und-doch-nur-95prozent'), (SELECT id FROM :"schema".categories WHERE slug='blog')); diff --git a/db/articles/122_blog_athletiktraining.sql b/db/articles/122_blog_athletiktraining.sql index ceed737..0fa17f1 100644 --- a/db/articles/122_blog_athletiktraining.sql +++ b/db/articles/122_blog_athletiktraining.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/athletiktraining', (SELECT id FROM :"schema".pages WHERE slug='blog'), 'article', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/athletiktraining'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), 'Athletiktraining', @@ -25,7 +25,7 @@ Jedoch wenn der Körper beim Schwimmen wie ein Lappen im Wasser liegt anstelle w '', NULL, NULL, NULL, NULL, NULL, NULL, 'draft', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/athletiktraining'), (SELECT id FROM :"schema".categories WHERE slug='blog')); diff --git a/db/articles/123_blog_kraft-vs-kraftausdauer-vs-k3-vs-dicker-gang.sql b/db/articles/123_blog_kraft-vs-kraftausdauer-vs-k3-vs-dicker-gang.sql new file mode 100644 index 0000000..c37e440 --- /dev/null +++ b/db/articles/123_blog_kraft-vs-kraftausdauer-vs-k3-vs-dicker-gang.sql @@ -0,0 +1,199 @@ + +SET search_path TO :"schema"; + + +INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/kraft-vs-kraftausdauer-vs-k3-vs-dicker-gang', +(SELECT id FROM :"schema".pages WHERE slug='blog'), +'article', +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); + +INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/kraft-vs-kraftausdauer-vs-k3-vs-dicker-gang'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), +'Kraft, Kraftausdauer, K3/2/1 und dicker Gang - was steckt wirklich dahinter?', +NULL, NULL, +'Kraft, Kraftausdauer, K3/2/1 und dicker Gang und was das im Training für Dich bedeutet.', +'# Kraft, Kraftausdauer, K3/2/1 und „dicker Gang“ - was steckt wirklich dahinter? + +Wer im Radsport oder Triathlon gezielt trainieren will, stolpert früher oder später über Begriffe wie *Maximalkraft*, *Kraftausdauer*, *K3-Training* oder den „dicken Gang“. +Oft werden diese Begriffe unscharf verwendet - dabei beschreiben sie unterschiedliche **neuromuskuläre und metabolische Anforderungen**. + + +## Was bedeutet „Kraft“ im Ausdauersport? + +**Kraft** per definitionem ist die Fähigkeit des neuromuskulären Systems, Widerstände zu überwinden. +Relevante Kraftformen im Ausdauersport: +- **Maximalkraft** : Grundlage für alle weiteren Kraftfähigkeiten +- **Schnellkraft** : relevant für Antritte, Tempowechsel +- **Kraftausdauer** : entscheidend für lange Belastungen (z. B. Anstiege, Zeitfahren) +Wichtig: Im Radsport ist nicht die absolute Kraft entscheidend, sondern wie effizient sie über Zeit eingesetzt werden kann. + + +## Kraftausdauer - das ist Deine Schlüsselfähigkeit + +**Kraftausdauer** = Fähigkeit, über längere Zeit hohe Kraftleistungen zu erbringen, ohne dass die Leistung stark abfällt. + +#### Neuromuskulär +- Rekrutierung von **Typ-I- und Typ-IIa-Fasern** +- Verbesserte **intramuskuläre Koordination** +- Höhere **motorische Effizienz** + +#### Energiestoffwechsel + +Kraftausdauertraining wirkt stark auf mehrere Energiesysteme: +- **Aerober Stoffwechsel (oxidativ)** + - Verbesserte **Mitochondriendichte** + - Erhöhte **Fettoxidation** + - Ökonomischere Energiegewinnung +- **Anaerob-laktazider Stoffwechsel** + - Höhere **Laktattoleranz** + - Verbesserte **Pufferkapazität (Bicarbonat-System)** +- **Substratnutzung** + - Bessere Nutzung von **Fetten bei gleicher Leistung** + - Verzögerte **Glykogenverarmung** + +Ergebnis: Du kannst bei gleicher Leistung länger durchhalten oder bei gleicher Ermüdung mehr Leistung bringen. + + +## K3, K2, K1 - Einordnung der Begriffe aus der Trainingspraxis + +Diese Begriffe stammen aus der Trainingslehre des Radsports und sind **praxisorientierte Intensitätsformen**, keine strikt wissenschaftlichen Kategorien. + +#### K3 +- 40-60 rpm +- Hoher Widerstand +- Fokus: **Kraftausdauer und Maximalkraftanteile** + +#### K2 +- 60-75 rpm +- Moderate Last +- Übergang zwischen Kraft und klassischer Ausdauer + +#### K1 +- 80-100 rpm +- Fokus: **Tretökonomie und Bewegungseffizienz** + + +## „Dicker Gang“ - was ist das wirklich? + +„Dicker Gang“ = hohe Last bei niedriger Kadenz. Das ist damit gemeint und ist sehr umgangssprachlich formuliert. + +#### Neuromuskuläre Effekte +- Höhere **Kraft pro Pedaltritt** +- Rekrutierung zusätzlicher **schneller Muskelfasern (Typ II)** + +#### Metabolische Effekte +- Lokal höhere **muskuläre Sauerstoffausschöpfung** +- Schnellere **Laktatbildung** bei unzureichender Anpassung +- Erhöhter **ATP-Bedarf pro Kontraktion** + +Gleichzeitig bei guter Anpassung: +- Effizientere **aerobe Energiebereitstellung bei hoher Last** +- Verbesserte **Kopplung von Kraft und Stoffwechsel** + +#### Mechanische Belastung +- Höhere **Gelenk- und Sehnenbelastung** +- Saubere Technik und Progression sind entscheidend + + +## Unterschiede als Übersicht + +| Begriff | Kategorie | Hauptziel | Stoffwechselwirkung | +|----------------|----------------------|----------------------------------|------------------------------------------| +| Maximalkraft | Fähigkeit | Maximale Kraft | Neuromuskulär dominant | +| Kraftausdauer | Fähigkeit | Ermüdungsresistenz | Aerob + anaerob verbessert | +| K3 | Trainingsmethode | Kraftausdauer steigern | Laktattoleranz + aerobe Anpassung | +| „Dicker Gang“ | Umgangssprache | Hohe Kraftbelastung simulieren | Höherer Energiebedarf pro Tritt | + +Wichtig: +**Trainingsmethoden (K3, dicker Gang) beeinflussen physiologische Fähigkeiten (hier: Kraftausdauer)** + + +## Trainingsbeispiele + +#### Einheit 1 - Klassische Kraftausdauer / K3 +- 4 × 8 min +- 50-60 rpm +- Intensität: GA2 / Sweet Spot +- Pause: 4 min locker +**Ziel:** +- Verbesserung der Laktattoleranz +- Erhöhung der muskulären Belastbarkeit + + +#### Einheit 2 - Progressiver „dicker Gang“ +- 3 × 10 min +- Start: 70 rpm → Ende: 50 rpm +- Konstante Leistung +**Ziel:** +- Anpassung an steigende Kraftanforderungen +- Ökonomisierung unter Last + + +#### Einheit 3 - Kombination Kraft + Kadenz +- 6 × 5 min + - 2 min @ 55 rpm + - 3 min @ 95 rpm +**Ziel:** +- Verbesserung der neuromuskulären Flexibilität +- Effizienter Wechsel zwischen Belastungsformen + + +## Bedeutung für Triathleten + +Gezieltes Kraft- und Kraftausdauertraining bringt: +- **Bessere Tretökonomie** bedeutet weniger Energieverbrauch +- **Stabilere Leistung am Berg** +- **Schonung der Glykogenreserven** +- **Geringere muskuläre Ermüdung fürs Laufen** + +#### Kombination sinnvoll: +- Krafttraining im Gym (z. B. Kniebeugen) +- K3-/Kraftausdauertraining auf dem Rad +- Techniktraining (Kadenz) + + +## Fazit +- **Kraft** ist die Grundlage +- **Kraftausdauer** ist die wettkampfrelevante Fähigkeit, um konstant hohe Kraft auf dem Pedal entfalten zu können. +- **K3 und „dicker Gang“** sind spezifische Werkzeuge im Training + +#### Der entscheidende Punkt: +Nicht nur Muskeln passen sich an, sondern auch der **Energiestoffwechsel**: +- effizientere aerobe Energiegewinnung +- bessere Laktatverarbeitung +- optimierte Substratnutzung +Wer diese Systeme gezielt trainiert, fährt nicht nur stärker, sondern auch **ökonomischer und ausdauernder**. + + +## weitere Quellen und Literaturempfehlungen + +Auswahl, wissenschaftlich: +- Aagaard, P., & Andersen, J. L. (2010). Effects of strength training on endurance capacity in top-level endurance athletes. *Scandinavian Journal of Medicine & Science in Sports*. +- Coyle, E. F. (1995). Integration of the physiological factors determining endurance performance ability. *Exercise and Sport Sciences Reviews*. +- Holloszy, J. O., & Coyle, E. F. (1984). Adaptations of skeletal muscle to endurance exercise. *Journal of Applied Physiology*. +- Seiler, S. (2010). What is best practice for training intensity and duration distribution in endurance athletes? *International Journal of Sports Physiology and Performance*. +- Rønnestad, B. R., & Mujika, I. (2014). Optimizing strength training for running and cycling endurance performance. *Scandinavian Journal of Medicine & Science in Sports*. +- Millet, G. P., & Lepers, R. (2004). Alterations of neuromuscular function after prolonged running. *Sports Medicine*. +- Jeukendrup, A. E., & Killer, S. C. (2010). The myths surrounding pre-exercise carbohydrate feeding. *Annals of Nutrition & Metabolism*. +- Brooks, G. A. (2020). The science and translation of lactate shuttle theory. *Cell Metabolism*. + +Ergänzend praxisorientiert: +- Friel, J. (2016). *The Cyclist’s Training Bible*. +- Coggan, A. R., & Allen, H. (2012). *Training and Racing with a Power Meter*.', +'', +NULL, NULL, NULL, NULL, NULL, NULL, +'published', +NULL, NULL, '2024-10-01', '2026-05-03'); + +INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/kraft-vs-kraftausdauer-vs-k3-vs-dicker-gang'), (SELECT id FROM :"schema".categories WHERE slug='blog')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/kraft-vs-kraftausdauer-vs-k3-vs-dicker-gang'), (SELECT id FROM :"schema".tags WHERE slug='k3')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/kraft-vs-kraftausdauer-vs-k3-vs-dicker-gang'), (SELECT id FROM :"schema".tags WHERE slug='kraftausdauer')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/kraft-vs-kraftausdauer-vs-k3-vs-dicker-gang'), (SELECT id FROM :"schema".tags WHERE slug='training')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/kraft-vs-kraftausdauer-vs-k3-vs-dicker-gang'), (SELECT id FROM :"schema".tags WHERE slug='triathlon')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/kraft-vs-kraftausdauer-vs-k3-vs-dicker-gang'), (SELECT id FROM :"schema".tags WHERE slug='bike')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/kraft-vs-kraftausdauer-vs-k3-vs-dicker-gang'), (SELECT id FROM :"schema".tags WHERE slug='kraft')); \ No newline at end of file diff --git a/db/articles/124_blog_fettstoffwechsel_fettverbrennung_fatmax.sql b/db/articles/124_blog_fettstoffwechsel_fettverbrennung_fatmax.sql new file mode 100644 index 0000000..2be16f9 --- /dev/null +++ b/db/articles/124_blog_fettstoffwechsel_fettverbrennung_fatmax.sql @@ -0,0 +1,191 @@ + +SET search_path TO :"schema"; + + +INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/fettstoffwechsel_fettverbrennung_fatmax', +(SELECT id FROM :"schema".pages WHERE slug='blog'), +'article', +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); + +INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/fettstoffwechsel_fettverbrennung_fatmax'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), +'Fettstoffwechsel, Fettverbrennung & FatMax - was bedeutet was genau?', +NULL, NULL, +'Lerne die Unterschiede uvon Fettstoffwechsel, Fettverbrennung & FatMax und die bedeutung in Deinem Training', +'# Fettstoffwechsel, Fettverbrennung & FatMax - ein kurzer Überblick + +## Einordnung der Begriffe: Fettstoffwechsel vs. Fettverbrennung + +Im sportphysiologischen Kontext werden die Begriffe **Fettstoffwechsel** und **Fettverbrennung** häufig synonym verwendet - tatsächlich beschreiben sie jedoch unterschiedliche Ebenen. + +#### Fettstoffwechsel +Der Fettstoffwechsel umfasst das gesamte System der Energiegewinnung aus Lipiden: +- Lipolyse (Freisetzung von Fettsäuren aus Fettgewebe) +- Transport freier Fettsäuren im Blut (Albumin-gebunden) +- Aufnahme in die Muskelzelle +- mitochondriale β-Oxidation +- oxidative Phosphorylierung +Der Fettstoffwechsel ist damit ein **übergeordneter metabolischer Prozess**. + + +#### Fettverbrennung (Fat Oxidation) +Die Fettverbrennung beschreibt den **akuten oxidativen Abbau von Fettsäuren zur ATP-Gewinnung** in der Muskulatur. +Wichtig: +Energie wird im Sport **immer gemischt aus Fett und Kohlenhydraten bereitgestellt**, die prozentuale Verteilung ist jedoch intensitätsabhängig. + + +## Intensitätsabhängige Substratnutzung + +Die Substratwahl verschiebt sich systematisch mit steigender Belastungsintensität: +- **niedrige Intensität:** hoher Fettanteil, niedrige Gesamtumsatzrate +- **moderate Intensität:** maximale Fettflussrate möglich +- **hohe Intensität:** Verschiebung zu Kohlenhydratoxidation +Diese Verschiebung ist primär durch enzymatische Regulation und hormonelle Signale (Insulin, Katecholamine) gesteuert. + + +## FatMax - maximale Fettverbrennungsrate + +Der Begriff **FatMax** beschreibt die Intensität, bei der die **absolute Fettoxidationsrate (g/min)** ihr Maximum erreicht. +Typischer Bereich: +- ca. **45-75 % VO₂max** +- individuell stark abhängig von Trainingszustand und Substratadaptation und ohne Leistungsdiagnostik nicht feststellbar. +Entscheidend: FatMax ist **nicht die Zone mit dem höchsten Fettanteil**, sondern die Zone mit der höchsten Fettflussrate. + + +## Fettverbrennung oberhalb der anaeroben Schwelle + +Mit steigender Intensität nähert sich der Stoffwechsel der **anaeroben Schwelle (LT1/LT2-Kontext)**. + +#### Metabolische Verschiebung: +- zunehmende Glykolyse +- steigende Laktatproduktion +- sinkende Fettoxidationsrate + +#### Zentrale Mechanismen: +1. **Laktatinhibition der Lipolyse** + - erhöhte Laktat- und H⁺-Konzentrationen hemmen hormon-sensitive Lipase (HSL) + - reduzierte Freisetzung freier Fettsäuren aus Fettgewebe +2. **Substratkompetition** + - schnelle ATP-Bereitstellung über Kohlenhydrate verdrängt Fettoxidation +3. **mitochondriale Limitierung** + - Pyruvatfluss steigt schneller als β-Oxidation nachkommen kann + +Ergebnis: +- **relative Fettbeteiligung sinkt stark** +- **absolute Fettverbrennung nimmt ab oder plateauiert** + + +## VLamax vs. Fettverbrennung - der entscheidende Zusammenhang + +Ein zentraler moderner Leistungsparameter ist **VLamax** (maximale Laktatbildungsrate). + +#### Definition und Zusammenhang mit Fettstoffwechsel +VLamax beschreibt die **anaerobe Glykolysekapazität**, also die Geschwindigkeit der Laktatbildung. +Es besteht ein **inverse Beziehung zwischen VLamax und Fettoxidation**: +- hohes VLamax → hohe Glykolyseaktivität → starke Laktatbildung +- hohes Laktat → Hemmung der Lipolyse +- niedrige Fettverbrennungsrate + +Umgekehrt: +- niedriges VLamax bedeutet oxidative Dominanz und das wiederum bedeutet bessere Fettadaptation + +Praktisch: +Ein „schneller Glykolyseathlet“ (Sprinttyp) hat oft eine schlechtere Fettverbrennung als ein Ausdauerathlet. + + +## Trainingseinflüsse auf den Fettstoffwechsel + +#### Grundlagenausdauer (GA1) +- 60-75 % HFmax +- lange Dauer (60-180 min) +- niedrige Laktatwerte (<2 mmol/L) +Ziel: mitochondriale Dichte, Fettsäureoxidation + +#### FatMax-Training +- individuell ermittelte Zone +- 45-90 min konstant +- stabile oxidative Stoffwechsellage +Ziel: maximale Fettflussrate + +#### Schwellentraining +- nahe anaerober Schwelle +- 20-40 min Gesamtbelastung +Effekt: +- Verbesserung der Laktat-Clearance +- indirekte metabolische Anpassungen + +#### HIIT / hochintensive Intervalle +- >90 % VO₂max +- hohe Laktatproduktion +trotz geringer akuter Fettverbrennung: +- erhöhte mitochondriale Biogenese +- verbesserte Insulinsensitivität +- hoher Gesamtenergieumsatz + + +## Trainingseinheiten (praxisnah) + +#### GA1 Einheit (Fettstoffwechselbasis) +- 90 min lockeres Laufen oder Radfahren +- konstante Intensität +- Laktat stabil niedrig + +#### FatMax Einheit +- 15 min Einrollen +- 50 min im FatMax-Bereich +- 10 min Auslaufen +Fokus: maximale Fettoxidationsrate + +#### Schwellenintervalle +- 3 × 12 min knapp unter LT2 +- 3-4 min Pause +Fokus: Laktatmanagement, Leistungssteigerung + +#### HIIT Einheit +- 10 × 1 min hochintensiv +- 2 min locker dazwischen +Fokus: glykolytische Kapazität, EPOC-Effekt + + +## Wissenschaftliches Gesamtmodell + +Der Fettstoffwechsel lässt sich als Ergebnis eines **dynamischen Konkurrenzsystems** verstehen: +- Fettoxidation ↔ Kohlenhydratoxidation +- Oxidative Kapazität ↔ glykolytische Kapazität (VLamax) +- Laktat als regulatorischer Metabolit + + +## Fazit + +- Fettstoffwechsel ist ein hochregulierter, mehrstufiger Prozess +- FatMax beschreibt die **maximale Fettflussrate**, nicht die „Fettverbrennungszone“ +- Oberhalb der anaeroben Schwelle sinkt die Fettoxidation deutlich, bleibt aber nicht null +- Laktat wirkt indirekt als **zentraler Inhibitor der Lipolyse** +- VLamax ist ein Schlüsselparameter zur Erklärung individueller Unterschiede im Fettstoffwechsel + + +## Kernaussage + +Die Fettverbrennung ist kein statischer Zustand, sondern das Ergebnis eines **metabolischen Gleichgewichts zwischen oxidativen und glykolytischen Systemen** - moduliert durch Intensität, Laktatdynamik und Trainingsadaptation. + + +## weitere Quellen und Literaturempfehlungen (Auswahl) +- Jeukendrup, A. (2017). Fat metabolism during exercise. +- Romijn, J. A. et al. (1993). Substrate utilization and intensity. +- Brooks, G. A. (2021). Exercise Physiology. +- Lafontan, M. & Langin, D. (2009). Lipolysis regulation. +- Hottenrott, K. & Neumann, G. Ausdauertraining. +- Mader, A. et al. Metabolic model of performance.', +'', +NULL, NULL, NULL, NULL, NULL, NULL, +'published', +NULL, NULL, '2024-10-01', '2026-05-05'); + +INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/fettstoffwechsel_fettverbrennung_fatmax'), (SELECT id FROM :"schema".categories WHERE slug='blog')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/fettstoffwechsel_fettverbrennung_fatmax'), (SELECT id FROM :"schema".tags WHERE slug='fatmax')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/fettstoffwechsel_fettverbrennung_fatmax'), (SELECT id FROM :"schema".tags WHERE slug='training')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/fettstoffwechsel_fettverbrennung_fatmax'), (SELECT id FROM :"schema".tags WHERE slug='triathlon')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/fettstoffwechsel_fettverbrennung_fatmax'), (SELECT id FROM :"schema".tags WHERE slug='ernaehrung')); \ No newline at end of file diff --git a/db/articles/125_blog_bikefitting.sql b/db/articles/125_blog_bikefitting.sql new file mode 100644 index 0000000..08e40da --- /dev/null +++ b/db/articles/125_blog_bikefitting.sql @@ -0,0 +1,206 @@ + +SET search_path TO :"schema"; + + +INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/bikefitting', +(SELECT id FROM :"schema".pages WHERE slug='blog'), +'article', +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); + +INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/bikefitting'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), +'Soll ich zum Bikefitting?', +NULL, NULL, +'Kurzer Einstieg, was Bikefitting bringt. Wie erkennt man einen guten Bikefitter?', +'# Bikefitting: Wann es sich lohnt, wie du den richtigen Fitter findest - und was du selbst tun kannst + +Bikefitting ist längst kein Thema mehr nur für Profis. Gerade im Triathlon und Radsport kann eine optimierte Sitzposition über Komfort, Leistung und Verletzungsfreiheit entscheiden. In diesem Artikel bekommst du einen fundierten, wissenschaftlich basierten Überblick - verständlich erklärt und direkt umsetzbar. + + +## Was ist Bikefitting überhaupt? + +Unter *Bikefitting* versteht man die individuelle Anpassung des Fahrrads an die körperlichen Voraussetzungen, Ziele und Anforderungen des Fahrers. Ziel ist eine optimale Kombination aus: +- **Biomechanischer Effizienz** +- **Komfort** +- **Aerodynamik** +- **Verletzungsprävention** + +Dabei werden u. a. folgende Parameter angepasst: +- Sattelhöhe und -position +- Lenkerhöhe und -reach +- Cleat-Position (Schuhplatten) +- Kurbelarmlänge +- Bewegungsmuster (z. B. Knie-Tracking) + + +## Warum ist Bikefitting wichtig? + +#### Leistungssteigerung +Eine effizientere Kraftübertragung kann die Leistung messbar verbessern. Studien zeigen, dass eine optimierte Sitzposition die **mechanische Effizienz** steigert und Energieverluste reduziert. +> Beispiel: Eine falsche Sattelhöhe kann die Sauerstoffaufnahme (VO₂) negativ beeinflussen (Bini et al., 2011). + +#### Verletzungsprävention +Fehlstellungen führen häufig zu Überlastungen, etwa: +- Patellaspitzensyndrom +- IT-Band-Syndrom +- Rückenschmerzen +Ein korrektes Setup reduziert diese Risiken signifikant. + + +#### Komfort auf langen Distanzen +Gerade im Triathlon (Mitteldistanz/Langdistanz) entscheidet Komfort über die Laufleistung danach. + + +## Wann lohnt sich ein Bikefitting? + +Ein Bikefitting ist besonders sinnvoll, wenn: +- du **regelmäßig trainierst** (ab ~5-6 h/Woche) +- du **Wettkämpfe** bestreitest +- du **Schmerzen oder Beschwerden** hast +- du ein **neues Rad** oder Setup hast +- du deine **Aeroposition optimieren** willst +Kurz gesagt: Je höher dein Trainingsumfang und deine Ambitionen, desto größer der Nutzen. + + +## Wie findest du einen guten Bikefitter? + +Die Qualität eines Bikefittings hängt stark vom Fitter ab. Achte auf: + +#### Ausbildung & Hintergrund +- Sportwissenschaftlicher oder physiotherapeutischer Background +- Zertifizierungen (z. B. Retül, BG Fit, Shimano Bikefitting) + +#### Methodik +Ein guter Fitter arbeitet datenbasiert: +- Videoanalyse / 3D Motion Capture +- Druckmessung im Sattel +- Bewegungsanalyse (Knie, Hüfte, Sprunggelenk) + +#### Individualisierung +Kein „One-size-fits-all“. Deine Ziele (z. B. Triathlon vs. Straße) müssen berücksichtigt werden. + +#### Kommunikation +Du solltest verstehen, *warum* etwas verändert wird. + + +## Was macht einen wirklich guten Bikefitter aus? + +Ein guter Bikefitter kombiniert mehrere Kompetenzen: + +#### Biomechanisches Verständnis +Kenntnisse über: +- Gelenkwinkel (z. B. Kniebeugung 25-35° am unteren Totpunkt) +- Muskelketten +- Bewegungsmuster + + +#### Erfahrung & Praxis +Erfahrung mit verschiedenen Athletentypen: +- Anfänger vs. Elite +- Triathleten vs. Radfahrer +- verschiedene Körperproportionen + + +#### Ganzheitlicher Ansatz +Ein guter Fitter schaut über das Rad hinaus: +- Beweglichkeit (Mobility) +- Stabilität (Core) +- frühere Verletzungen + +#### Iterativer Prozess +Bikefitting ist kein einmaliges Event. Anpassungen erfolgen oft über mehrere Termine. + + +## Was kannst du selbst tun? + +Auch ohne Profi-Fitting kannst du viel optimieren. Mit ein paar Einstellungen kann man auf jedem Leihrad im Trainingscamp schon gut sitzen. + +#### Sattelhöhe grob einstellen +Eine klassische Faustregel: +- Bein fast gestreckt bei Ferse auf Pedal (unterer Totpunkt) +Oder genauer: +- Kniebeugung ca. **25-35°** + + +#### Cleat-Position prüfen +- Cleat unter dem Großzehenballen +- Neutraler Fußwinkel +- Knie sollte gerade über dem Pedal laufen + + +#### Grundposition checken +- Rückenwinkel angenehm (nicht maximal flach erzwingen) +- Schultern entspannt +- Kein „Einfallen“ im Oberkörper + + +#### Mobility & Stabilität +Viele Probleme entstehen nicht am Rad, sondern im Körper: +- Hüftbeuger verkürzt → Probleme in Aeroposition +- Schwache Core-Muskulatur → instabiler Oberkörper +Ergänze dein Training um: +- Mobility (Hüfte, Rücken) +- Core-Training + + +#### Videoanalyse nutzen +Ein einfacher Trick: +- Seitliche Videoaufnahme auf der Rolle +- Analyse von: + - Knieverlauf + - Hüftstabilität + - Oberkörperhaltung + +#### Häufige Fehler +- Zu niedriger oder zu hoher Sattel +- Zu aggressive Aeroposition ohne Voraussetzung +- Ignorieren von Schmerzen +- Blindes Kopieren von Profis + + +## Fazit + +Bikefitting ist kein Luxus, sondern ein zentraler Baustein für jeden ambitionierten Radfahrer oder Triathleten. Es verbessert nicht nur deine Leistung, sondern schützt dich auch vor Verletzungen und sorgt für mehr Spaß auf dem Rad. +- Wenn du regelmäßig trainierst oder Beschwerden hast, lohnt sich ein professionelles Fitting fast immer. +- Gleichzeitig kannst du mit etwas Wissen auch selbst schon viel optimieren. + + +## Quellen & weiterführende Literatur + +#### Fachliteratur & Bücher +- Schoberer, H. (Hrsg.). *Faszination Radsport – Biomechanik, Training, Technik*. Meyer & Meyer Verlag. +- Hottenrott, K., & Neumann, G. *Das große Buch vom Radsport*. Spitta Verlag. +- Albrecht, M. *Bikefitting in Theorie und Praxis*. Covadonga Verlag. +- Zintl, F. *Ausdauertraining – Grundlagen, Methoden, Trainingssteuerung*. BLV Verlag. +- Bini, R. R., Hume, P. A., & Croft, J. L. (2011). *Effects of bicycle saddle height on knee injury risk and cycling performance*. Sports Medicine. +- Fonda, B., & Sarabon, N. (2010). *Biomechanics and energetics of uphill cycling*. European Journal of Applied Physiology. +- Peveler, W. W. (2008). *Effects of saddle height on economy and anaerobic power in cycling*. Journal of Strength and Conditioning Research. +- Silberman, M. R. et al. (2005). *Road bicycle fit*. Clinical Journal of Sport Medicine. +- Burke, E. (2003). *High-Tech Cycling*. Human Kinetics. + +#### Wissenschaftliche & institutionelle Quellen +- Deutsche Zeitschrift für Sportmedizin (DZSM) Themen zu Biomechanik, Leistungsphysiologie und Überlastungsbeschwerden im Ausdauersport. [DZSM – Deutsche Zeitschrift für Sportmedizin](https://www.zeitschrift-sportmedizin.de/?utm_source=chatgpt.com) +- Inhalte zu Trainingssteuerung, Material und Athletik im Triathlon. [DTU Wissensbereich](https://www.triathlondeutschland.de/?utm_source=chatgpt.com) +- Grundlagen zu Radsporttechnik und Trainingslehre. [Bund Deutscher Radfahrer](https://www.rad-net.de/?utm_source=chatgpt.com) +- Veröffentlichungen zu Biomechanik und Ausdauersport. [Deutsche Sporthochschule Köln](https://www.dshs-koeln.de/?utm_source=chatgpt.com) + +#### Gute deutschsprachige Praxisquellen +> Nicht wissenschaftlich peer-reviewed, aber qualitativ hochwertig und in der Szene etabliert: +- [TOUR Magazin](https://www.tour-magazin.de/?utm_source=chatgpt.com) Sehr gute Artikel zu Sitzposition, Aerodynamik und Bikefitting. +- [tri-mag.de](https://tri-mag.de/?utm_source=chatgpt.com) Triathlon-spezifische Inhalte zu Aero-Position und Laufperformance nach dem Radfahren. +- [RennRad Magazin](https://www.rennrad-magazin.de/?utm_source=chatgpt.com) Technik- und Ergonomieartikel für Rennradfahrer. + +', +'', +NULL, NULL, NULL, NULL, NULL, NULL, +'published', +NULL, NULL, '2024-10-01', '2026-05-03'); + +INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/bikefitting'), (SELECT id FROM :"schema".categories WHERE slug='blog')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/bikefitting'), (SELECT id FROM :"schema".tags WHERE slug='equipment')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/bikefitting'), (SELECT id FROM :"schema".tags WHERE slug='training')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/bikefitting'), (SELECT id FROM :"schema".tags WHERE slug='triathlon')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/bikefitting'), (SELECT id FROM :"schema".tags WHERE slug='bike')); \ No newline at end of file diff --git a/db/articles/126_blog_aero-gadgets_spielzeug-oder-gamechanger.sql b/db/articles/126_blog_aero-gadgets_spielzeug-oder-gamechanger.sql new file mode 100644 index 0000000..e60c7b5 --- /dev/null +++ b/db/articles/126_blog_aero-gadgets_spielzeug-oder-gamechanger.sql @@ -0,0 +1,484 @@ + +SET search_path TO :"schema"; + + +INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/aero-gadgets_spielzeug-oder-gamechanger', +(SELECT id FROM :"schema".pages WHERE slug='blog'), +'article', +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); + +INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/aero-gadgets_spielzeug-oder-gamechanger'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), +'Aero-Gadgets - Spielzeug oder Gamechanger? Wann lohnt sich Aero wirklich?', +NULL, NULL, +'Aero-Gadgets - Spielzeug für Nerds oder Gamechanger? Was sich lohnt und wieviel - eine Übersicht', +'# Aero-Gadgets - Spielzeug oder Gamechanger? Wann lohnt sich Aero wirklich? + +**Spoiler: Ja!** + +Für Triathleten und ambitionierte Radfahrer stellt sich früher oder später dieselbe Frage: Wie viel bringen Aero-Optimierungen wirklich - und ab wann wird es einfach nur teures Nerd-Spielzeug? + +Die kurze Antwort: **Aero wirkt. Und zwar massiv.** + +Spätestens als 1989 Gerd Lemond dank seine Triatrhlonlenkers beim abschließenden Einzelzeitfahren Laurent Fongon das gelbe Trikot entriss, sollte dies klar sein. + +Die etwas längere Antwort: Nicht jedes Aero-Gadget bringt gleich viel. Manche Maßnahmen sparen erstaunlich viele Watt für wenig Geld, andere kosten vierstellige Beträge und bringen am Ende weniger als ein gut sitzender Helm oder rasierte Beine. +In diesem Artikel schauen wir uns die wichtigsten Aero-Themen im Triathlon und Radsport an -fundiert, aber ohne Doktorarbeit. Und die Zahlen sind grobe Richtwerte, zeigen aber die Potentiale deutlich auf. + +## Warum Aerodynamik überhaupt so wichtig ist + +Ab ungefähr 30 km/h wird Luftwiderstand zum dominierenden Widerstand auf dem Rad. Bei 40 km/h gehen bereits rund 80-90 % der Leistung allein dafür drauf, Luft zu verdrängen. Das bedeutet: +> **Kleine Verbesserungen im Luftwiderstand (CdA) können enorme Auswirkungen auf Geschwindigkeit, Energieverbrauch und Ermüdung haben.** + + +## Ein bisschen Physik muss sein - die Formel hinter dem Luftwiderstand +Der Luftwiderstand auf dem Rad lässt sich physikalisch relativ gut beschreiben. +Die grundlegende Formel lautet: + +F = 1/2 × ρ × Cd × A × v² + +In Prosa: Je **größer die Stirnfläche, die Luftdichte und die Geschwindigkeit** und je **ungünstiger der Luftwiderstandsbeiwert** ist, je mehr Kraft brauchst Du um mit einer bestimmten Geschwindigkeit v zu fahren. + +Deutlich wird es, wenn man die Formnel nach die Geschwindigkeit v umstellt: + +v = √(2 × F / (ρ × Cd × A)) + +In Prosa: Je **kleiner die Stirnfläche, die Luftdichte und je ungünstiger der Luftwiderstandsbeiwert** und je **größer die Kraft** ist, je **größer wird die Geschwindigkeit**. Hat jemand schnell gesagt? Ah, jetzt sind alle wieder wach ;-) + +Dabei gilt: +| Symbol | Bedeutung | Details | +|---------|------------------------|----------------------------------------------------| +| F | Luftwiderstandskraft | in Newton, dahinter steht Deine Leistungsfähigkeit | +| ρ | Luftdichte | ist in unserer Praxis immer gleich | +| Cd | Luftwiderstandsbeiwert | , der "cw-Wert" | +| A | Stirnfläche | in m² - je kleiner Du Dich machst, je besser | +| v | Geschwindigkeit | in m/s | + +Da Deine Leitungsfähigkeit nicht ad hoch zu ändern ist und die Luftdichte konstant ist, bleiben für uns als Eonflussfaktoren nur +- Cd = Luftwiderstandsbeiwert +- A = Stirnfläche + +> **Je kleiner die CdA, desto weniger Leistung braucht man für dieselbe Geschwindigkeit.** + +Die schlechte Nachricht: **Der Fahrer verursacht den größten Teil** des Luftwiderstands. + +Die gute Nachricht: Genau dort liegt auch das **größte Potenzial**. + +Physikunterricht beendet. + + +## Die wichtigste Aero-Regel überhaupt +Position schlägt Material + +Windkanalstudien zeigen seit Jahren dieselbe Reihenfolge: +1. Fahrerposition +2. Bekleidung & Helm +3. Cockpit & Hydration +4. Laufräder +5. Rahmen +Oder anders gesagt: +Ein Fahrer mit guter Position auf einem mittelmäßigen Rad ist oft schneller als ein schlecht positionierter Fahrer auf einem 15.000-€-Superbike. + + +## Aero-Position lange halten - der größte Gamechanger + +Wenn man nur eine einzige Sache optimieren dürfte, wäre es nicht das Scheibenrad. + +Es wäre die Fähigkeit, die Aero-Position **stabil, entspannt und lange** halten zu können. + +Warum? Weil jede Bewegung, jeder hochgezogene Kopf, jedes Trinken un aufrechter Position und jedes „Sitzen wie ein Fallschirm“ die CdA massiv verschlechtert. + +Eine aggressive Position bringt nur dann etwas, wenn sie: +- biomechanisch funktioniert +- nachhaltig fahrbar ist +- die Leistungsabgabe nicht zerstört +- über 40, 90 oder 180 km gehalten werden kann + +Viele Athleten machen den Fehler, im [Bikefit](/blog/bikefitting) extrem tief zu gehen - und sitzen dann nach 20 Minuten doch wieder aufrecht. + +Die schnellste Position ist nicht die theoretisch aerodynamischste. + +Die **schnellste Position** ist die, die man **tatsächlich halten kann**. + +Und im Triathlon darf das **Laufen nicht vergessen** werden: Wenn 2 herausoptimierte Minuten Deine Laufperformance zerstören, hast Du über das Ziel hinausgeschossen. + + +## Laufräder - deutlich wichtiger als viele denken + +#### Aero-Laufräder bringen echte Wattgewinne +Tiefe Felgen reduzieren Verwirbelungen und verbessern die Anströmung. + +Besonders relevant: +- Frontwheel beeinflusst das **Lenkverhalten und den Luftstrom** massiv +- Hinterrad erzeugt ebenfalls relevante Einsparungen +Mit steigender Geschwindigkeit steigen die Vorteile deutlich. + +#### Typische Einsparungen +| Setup | Ersparnis vs. Standardlaufräder | +|--------------------|---------------------------------| +| 50-60 mm Felgen | ~5-10 W | +| 80 mm vorne | ~8-15 W | +| Scheibenrad hinten | ~10-20 W | + +Das Scheibenrad ist dabei eines der effektivsten Einzel-Upgrades überhaupt. + +Nicht nur wegen des geringeren Luftwiderstands - sondern auch wegen der stabileren Strömung hinter dem Fahrer. + +#### Nachteile +- Seitenwindempfindlichkeit +- höheres Gewicht +- träges Fahrverhalten +- teuer +- im Alltag oft nervig bis untauglich +Für Triathlon und flache Zeitfahren ist das Scheibenrad aber nach wie vor ein echter Gamechanger. + + +## Rahmenform - wichtig, aber überschätzt + +Aero-Rahmen sehen schnell aus. Und sie sind auch schneller, aber: + +Der Rahmen macht nur einen **relativ kleinen Anteil am Gesamtsystem** aus; der **Fahrer dominiert den Luftwiderstand**. + +#### Typische Realität + +Ein moderner Aero-Rahmen spart gegenüber einem klassischen Rundrohrrahmen häufig etwa 5-15 Watt bei 45 km/h - oft deutlich weniger bei Agegrouper-Geschwindigkeiten. + +Das ist messbar, aber häufig schlechter investiertes Geld als: +- Helm +- Position +- Bekleidung +- Reifen & Laufräder +Wer bereits alles andere optimiert hat, profitiert von einem Aero-Rahmen. + +Wer noch mit flatterndem Trikot fährt, eher nicht. + + +## Flaschenhalter + +### BTA-Flaschenhalter (Between The Arms) + +Das ist einer der spannendsten Bereiche überhaupt. + +Denn ein Flaschenhalter zwischen den Armen kann **nicht nur „nicht schlechter“ sein - sondern tatsächlich schneller**. + +Warum? +Zwischen den Unterarmen entsteht häufig ein Luftloch mit turbulenter Strömung. + +Eine sauber platzierte BTA-Flasche kann: +- die **Strömung glätten** +- den **Luftstrom zum Oberkörper** verbessern + + +Wichtig: +- Höhe + -Breite + -Übergang zu den Armen +- Computerhalterung +- Trinksystem +... alles beeinflusst das Ergebnis. + +Hier zeigt sich ein generelles Aero-Prinzip: Aero ist hochgradig individuell. + +Was bei Profi A funktioniert, kann Athlet B sogar langsamer machen. + + +### Aeroflaschen im Rahmen + +Viele moderne TT- und Triathlonräder nutzen integrierte Trinksysteme oder spezielle Aero-Bottles. + +**Der Vorteil**: +- Die Flasche sitzt dort, wo der Luftstrom ohnehin geführt wird. +- Im Idealfall verbessert sie sogar die Strömung entlang des Unterrohrs. + +Wichtig: + +Nicht jede Aero-Flasche ist automatisch schnell. + +Manche Systeme sind aerodynamisch hervorragend - aber schwer zu reinigen, klappern oder sind im Rennen unpraktisch. + +Und im Triathlon gilt: + +Die schnellste Lösung ist oft die, die zuverlässig funktioniert. + + +### Flaschenhalter hinter dem Sattel + +Die klassische Triathlon-Lösung. + +Aerodynamisch ist sie überraschend oft neutral oder leicht positiv. + +Warum? + +Der Bereich hinter dem Fahrer ist ohnehin eine turbulente Wake-Zone, dort stört zusätzliche Fläche häufig deutlich weniger. + +**Vorteile** +- gute Verpflegungskapazität +- einfaches Nachladen +- häufig aero-neutral +**Nachteile** +- Risiko für Bottle-Ejects +- Handling +- zusätzliche Masse weit hinten + +Für Langdistanz-Triathlon praktisch oft sinnvoller als maximal „clean“. + +##### Typische Einsparungen +| Setup | Aero-Effekt | +|----------------------------------|---------------------------------| +| Gut integrierte BTA-Flasche | ~2-8 W | +| Schlechte BTA-Positionierung | auch negativ möglich | +| Aero-Bottle im Rahmendreieck | ~2-5 W | +| Runde Standardflasche | neutral bis leicht negativ | +| Flaschenhalter hinter dem Sattel | 0- 5 W | + + + +## Verkleidete OSPW-Systeme - Aero oder Instagram? + +Oversized Pulley Wheels (OSPW) sind inzwischen überall. + +Die Theorie: +- weniger Kettenreibung +- effizienterer Antriebsstrang +- eventuell bessere Aerodynamik mit Verkleidung + +Die Realität: Die tatsächlichen Gewinne sind meist klein. + +#### Typische Einsparungen +| Maßnahme | Ersparnis | +|----------------------|--------------------------| +| OSPW mechanisch | ~1-3 W | +| Verkleidete Systeme | evtl. zusätzlich 1-2 W | + +Das Problem: +- teuer +- empfindlich +- wartungsintensiv +- oft schlechtere Alltagstauglichkeit + +Für Profis relevant. + +Für die meisten Agegrouper eher „letzte 1 %“. + + +## Beine rasieren - ja, wirklich + +Der Klassiker. + +Und nein: Das ist nicht nur ein Ritual für Massage und Wundversorgung. + +Rasierte Beine sind **tatsächlich aerodynamischer**. +Die Haare erzeugen zusätzliche Turbulenzen und erhöhen den Widerstand: Windkanaltests zeigten Einsparungen im Bereich von mehreren Watt. + +#### Typische Einsparungen +| Maßnahme | Ersparnis | +|------------------|-----------| +| Rasierte Beine | ~5-15 W | + +Das macht rasierte Beine zu einem der **günstigsten Aero-Upgrades** überhaupt. + +**Preis-Leistungs-Sieger**. + +Und: Geiler siehts auch aus ;-) + +Definitiv. + + +## Aero-Helm - eines der stärksten Aero-Upgrades + +Ein guter Aero-Helm kann dramatisch viel bringen. + +Warum? + +Der Kopf sitzt **komplett im angeströmten Bereich**. + +Schon **kleine Veränderungen beeinflussen die Strömung** über Rücken und Schultern. + +#### Typische Einsparungen +| Helmtyp | Ersparnis | +|---------------------------|------------| +| Aero-Road-Helm | ~5-10 W | +| TT-Helm optimal passend | ~10-20 W | + +Aber Achtung: + +Helme **funktionieren extrem individuell**. + +**Kopfhaltung, Schulterbreite und Position** verändern das Ergebnis massiv. + +Ein Helm, der bei einem Athleten 15 Watt spart, kann bei einem anderen praktisch nichts bringen. + +Und: + +Überhitzung kostet ebenfalls Leistung. + +**Gerade bei Hitzerennen kann ein schlecht belüfteter TT-Helm am Ende langsamer sein*. + + +## Aero-Socken und Aero-Stulpen + +Ja, auch Socken sparen Watt. + +Die Struktur moderner Aero-Stoffe beeinflusst die Grenzschicht der Luftströmung, ähnlich wie **Dimples beim Golfball**. + +#### Typische Einsparungen +| Maßnahme | Ersparnis | +|------------------|-----------| +| Aero-Socken | ~2- 8 W | +| Aero-Skinsuit | ~10-25 W | + +Das Verhältnis aus: +- Preis +- Komfort +- Wattgewinn +...ist hier oft überraschend gut. + +Deshalb sieht man Aero-Socken inzwischen praktisch überall - vom WorldTour-Profi bis zum ambitionierten Agegrouper. + + +## Übersicht - Wie viel bringen einzelne Aero-Gadgets wirklich? + +Die Werte sind typische Größenordnungen aus Windkanaltests, Feldtests und CFD-Simulationen bei ca. 35-45 km/h. +Individuelle Unterschiede durch Position, Körperbau, Yaw-Winkel und Setup können erheblich sein. + +| Maßnahme | Typische Ersparnis | Preis-/Leistung | Kommentar | +|--------------------------------------------|---------------------|------------------|----------------------------------------------------------| +| Aeroposition sauber halten | 20-60+ W | extrem hoch | Größter Einzelhebel überhaupt | +| Bikefit / optimierte Position | 10-40 W | extrem hoch | Oft wichtiger als Material | +| Aero-Skinsuit / enger Einteiler | 10-25 W | sehr hoch | Überraschend effektiv | +| TT- / Aero-Helm | 10-20 W | sehr hoch | Sehr individuell | +| Rasierte Beine | 5-15 W | extrem hoch | Eines der günstigsten Aero-Upgrades | +| Scheibenrad hinten | 10-20 W | hoch | Besonders bei hohen Geschwindigkeiten | +| Tiefe Frontfelge (60-80 mm) | 5-15 W | hoch | Starker Einfluss auf Luftströmung | +| Aero-Laufradsatz komplett | 10-25 W | hoch | Kombination aus Front + Rear | +| Aero-Socken / Aero-Stulpen | 2- 8 W | sehr hoch | Erstaunlich effektiv | +| BTA-Flasche zwischen den Armen | 2- 8 W | hoch | Kann Strömung sogar verbessern | +| Aero-Flasche im Rahmen | 2- 5 W | mittel | Häufig aero-neutral bis positiv | +| Flaschenhalter hinter dem Sattel | 0- 5 W | mittel | Oft neutral | +| Aero-Rahmen gegenüber Standardrahmen | 5-15 W | mittel | Häufig überschätzt | +| Integriertes Cockpit | 2-10 W | mittel | Stark abhängig von Position | +| Verkleidetes OSPW-System | 1- 3 W | gering | Sehr teuer pro eingespartem Watt | +| Keramiklager | <1- 2 W | gering | Im Alltag oft kaum messbar | +| Latex-/TPU-Schläuche oder schnelle Reifen | 5-15 W | extrem hoch | RollwiderstandTechnisch nicht Aero, aber extrem schnell | + + +### Erweiterte Tabelle - Was bringen 10-50 Watt Aero-Ersparnis wirklich? +Annahmen +- Fahrer: 75 kg +- Flaches Terrain +- Kein Wind +- Konstante Leistung +- Gute Aeroposition + +**Zeitgewinn** bei gleichem physiologischem Aufwand **ODER Energieeinsparnis** bei gleichem Tempo; Werte sind realistische Näherungen aus CdA-/Leistungsmodellen. + +#### 30 km/h Ausgangsgeschwindigkeit +| Aero-Ersparnis | Zeitgewinn 40 km | Zeitgewinn 90 km | Zeitgewinn 180 km | Energieersparnis 180 km | Kohlenhydrate | +|-----------------|---------------------|------------------|-------------------|-------------------------|---------------| +| 10 W | ~1:10 min | ~2:40 min | ~5:20 min | ~216 kJ | ~62 g | +| 20 W | ~2:20 min | ~5:20 min | ~10:40 min | ~432 kJ | ~124 g | +| 30 W | ~3:30 min | ~8:00 min | ~16:00 min | ~648 kJ | ~186 g | +| 40 W | ~4:40 min | ~10:40 min | ~21:20 min | ~864 kJ | ~248 g | +| 50 W | ~5:50 min | ~13:20 min | ~26:40 min | ~1080 kJ | ~310 g | + +#### 35 km/h Ausgangsgeschwindigkeit +| Aero-Ersparnis | Zeitgewinn 40 km | Zeitgewinn 90 km | Zeitgewinn 180 km | Energieersparnis 180 km | Kohlenhydrate | +|-----------------|---------------------|------------------|-------------------|-------------------------|---------------| +| 10 W | ~1:20 min | ~3:00 min | ~6:00 min | ~185 kJ | ~53 g | +| 20 W | ~2:40 min | ~6:00 min | ~12:00 min | ~370 kJ | ~106 g | +| 30 W | ~4:00 min | ~9:00 min | ~18:00 min | ~555 kJ | ~159 g | +| 40 W | ~5:20 min | ~12:00 min | ~24:00 min | ~740 kJ | ~212 g | +| 50 W | ~6:40 min | ~15:00 min | ~30:00 min | ~925 kJ | ~265 g | + +#### 40 km/h Ausgangsgeschwindigkeit +| Aero-Ersparnis | Zeitgewinn 40 km | Zeitgewinn 90 km | Zeitgewinn 180 km | Energieersparnis 180 km | Kohlenhydrate | +|-----------------|---------------------|------------------|-------------------|-------------------------|---------------| +| 10 W | ~1:30 min | ~3:30 min | ~7:00 min | ~162 kJ | ~46 g | +| 20 W | ~3:00 min | ~7:00 min | ~14:00 min | ~324 kJ | ~92 g | +| 30 W | ~4:30 min | ~10:30 min | ~21:00 min | ~486 kJ | ~138 g | +| 40 W | ~6:00 min | ~14:00 min | ~28:00 min | ~648 kJ | ~184 g | +| 50 W | ~7:30 min | ~17:30 min | ~35:00 min | ~810 kJ | ~230 g | + + +### Was diese Zahlen wirklich bedeuten + +Das Faszinierende an Aerodynamik ist: +Die Effekte addieren sich. + +Ein Athlet mit: +- guter Aero-Position +- engem Aero-Suit +- Aero-Helm +- tiefen Laufrädern +- sauberem Cockpit +- optimierter Hydration +- rasierten Beinen +kann durchaus **30-50 Watt gegenüber einem „normalen“ Setup sparen**. + +Und genau dann reden wir plötzlich nicht mehr über „Nerd-Tuning“. + +Sondern über: +- **20-35 Minuten auf der Langdistanz** +- oder mehrere hundert Gramm gesparte Kohlenhydrate +- niedrigere metabolische Belastung +- **bessere Laufperformance** nach dem Radfahren +Das ist der Punkt, an dem Aero vom Spielzeug zum echten Performance-Faktor wird. + + +## Die wahrscheinlich wichtigste Erkenntnis + +Viele Athleten unterschätzen, wie stark sich kleine Maßnahmen addieren. +Ein **realistisches modernes Aero-Setup** kann schnell enthalten: +- +15 W durch Position +- +10 W durch Helm +- +15 W durch Kleidung +- +10 W durch Laufräder +- +5 W durch rasierte Beine +- +5 W durch Cockpit/Hydration +In Summe sind 40-60 Watt absolut realistisch. + +Und genau ab diesem Bereich sprechen wir plötzlich nicht mehr über marginal Gains - sondern über **massive Zeitgewinne** und deutlich geringere metabolische Kosten. +Damit erklären sich zu einem großen Teil auch die massiven Zeitgewinne in den letzten Jahren - und **um so höher sind Leistungen von Hellriegel, Zäck & Co einzuschätzen**. + +Gerade auf der Mittel- und Langdistanz kann das am Ende der Unterschied sein zwischen: +- „nur überleben“ +- oder noch solide laufen können. +- **Du fährst auf die verdammte Insel oder bleibst daheim und quälst Dich nachts mit dem Livestream!** + + + +## Weiterführende Quellen & deutschsprachige Artikel + +#### Wissenschaftliche Literatur +1. Sports Engineering - Riding against the wind: a review of competition cycling aerodynamics - Sehr gute Übersichtsarbeit zur Aerodynamik im Radsport. +2. Sports Biomechanics - Aerodynamic drag in cycling: Methods of assessment - Grundlagen zu CdA, Messmethoden und Windkanaltests. - Cyclist aerodynamics through time: Better, faster, stronger +3. Moderne Analyse der Entwicklung von Aerodynamik im Radsport. +4. Aerodynamics of Cycling Skinsuits - Sehr spannend zu Aero-Stoffen, Anzügen und Oberflächenstrukturen. +5. Estimation of mechanical power and energy cost wearing aero helmets - Untersuchung zum Einfluss von Aero-Helmen auf Leistung und Energieverbrauch. + +#### Gute deutschsprachige Artikel & Ressourcen +- Allgemeine Aerodynamik + - ilovecycling.de - Aerodynamik und Aeromythen im Radsport - Sehr guter Überblick mit praxisnahen Beispielen und realistischen Wattzahlen. + - Radsport-Rennrad.de - Aerodynamik-Tuning: Schneller werden bei gleicher Leistung - Gute Übersicht zu Watt-Ersparnissen verschiedener Komponenten. + - MHW Bike Magazin - Aerodynamik beim Rennrad - Verständlicher Einstieg in Aero-Grundlagen und Materialwahl. +- Triathlon & Aero-Position + - triathlon.de - Aero Fitting: was es ist und was es bringt - Gute Zusammenfassung zu Bikefit, CdA und Position. + - Radsport-Rennrad.de - Aerodynamik auf dem Rennrad beim Triathlon - Interessant zu Kleidung, Position und Laufrädern. + - Triafreunde - Aero Equipment für Triathleten - Gute praxisorientierte Übersicht speziell für Triathleten.', +'', +NULL, NULL, NULL, NULL, NULL, NULL, +'published', +NULL, NULL, '2024-10-01', '2026-05-03'); + +INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/aero-gadgets_spielzeug-oder-gamechanger'), (SELECT id FROM :"schema".categories WHERE slug='blog')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/aero-gadgets_spielzeug-oder-gamechanger'), (SELECT id FROM :"schema".tags WHERE slug='equipment')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/aero-gadgets_spielzeug-oder-gamechanger'), (SELECT id FROM :"schema".tags WHERE slug='rennrad')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/aero-gadgets_spielzeug-oder-gamechanger'), (SELECT id FROM :"schema".tags WHERE slug='training')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/aero-gadgets_spielzeug-oder-gamechanger'), (SELECT id FROM :"schema".tags WHERE slug='triathlon')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/aero-gadgets_spielzeug-oder-gamechanger'), (SELECT id FROM :"schema".tags WHERE slug='bike')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/aero-gadgets_spielzeug-oder-gamechanger'), (SELECT id FROM :"schema".tags WHERE slug='radfahren')); \ No newline at end of file diff --git a/db/articles/127_blog_carboloading-muskelglykogen-leberglykogen-blutzucker.sql b/db/articles/127_blog_carboloading-muskelglykogen-leberglykogen-blutzucker.sql new file mode 100644 index 0000000..2f3ac48 --- /dev/null +++ b/db/articles/127_blog_carboloading-muskelglykogen-leberglykogen-blutzucker.sql @@ -0,0 +1,141 @@ + +SET search_path TO :"schema"; + + +INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/carboloading-muskelglykogen-leberglykogen-blutzucker', +(SELECT id FROM :"schema".pages WHERE slug='blog'), +'article', +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); + +INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/carboloading-muskelglykogen-leberglykogen-blutzucker'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), +'Carboloading, Glykogen & Performance - kompakte Zusammenfassung für Ausdauersportler', +NULL, NULL, +'Carboloading, Glykogen & Performance - kompakte Zusammenfassung für Ausdauersportler', +'# Carboloading, Glykogen & Performance - kompakte Zusammenfassung für Ausdauersportler +## Warum das Thema entscheidend ist + +Im Triathlon und Radsport hängt deine Leistungsfähigkeit maßgeblich von der Verfügbarkeit von **Kohlenhydraten** ab. Entscheidend sind dabei: + +Muskelglykogen -> Energie für die arbeitende Muskulatur +Leberglykogen -> Stabilisierung des Blutzuckers +Blutzucker -> zentrale Energieversorgung (v. a. fürs Gehirn) + +Sind diese Systeme nicht optimal gefüllt, droht der klassische Leistungseinbruch („Hungerast“). + +## Die drei zentralen Systeme im Überblick +#### Muskelglykogen +- Hauptenergiequelle bei mittlerer bis hoher Intensität +- lokal im Muskel gespeichert und genutzt +- begrenzt (ca. 300-700 g) +Bestimmt maßgeblich Deine **Leistungsfähigkeit im Wettkampf** + +#### Leberglykogen +- speichert ca. 80-120 g Glukose +- reguliert den **Blutzuckerspiegel** +- gibt Glukose ins Blut ab +Verhindert Unterzuckerung während Belastung + +#### Blutzucker +- konstant halten = Ziel +- wichtig für Gehirn & zentrale Steuerung +Fällt er ab -> Leistungseinbruch + + +## Carboloading - Speicher maximal füllen + +Ziel: **Superkompensation der Glykogenspeicher** +Umsetzung (modern): +- 2-3 Tage vor Belastung +- 8-12 g KH/kg/Tag +- Trainingsumfang reduzieren +Ergebnis: maximal gefüllte Speicher + bessere Ausdauerleistung + + +## Wie schnell füllen sich die Speicher? +Direkt nach Belastung: +- 1,0-1,2 g KH/kg/h +- schnellste Auffüllphase +Innerhalb von 24 h: +- weitgehende Wiederauffüllung bei 7-10 g/kg/Tag +Vollständige Optimierung: +- 24-72 Stunden (Carboloading) +Wichtig: Regelmäßige Zufuhr über den Tag ist effektiver als große Einzelmengen + + +## Was passiert nachts? +- **Leberglykogen sinkt deutlich** (bis zu 50-70 %) +- hält den Blutzucker während des Schlafs stabil +- **Muskelglykogen bleibt weitgehend erhalten** + +Konsequenz: +Ohne Frühstück startest du mit **reduzierter Verfügbarkeit** + +## Der Vortag harter Einheiten - Best Practice + +#### Ernährung +- **5-8 g KH/kg/Tag** +- gleichmäßig über den Tag verteilt +- Fokus auf leicht verdauliche Kohlenhydrate +#### Training +- keine harten Einheiten spät am Abend +- locker oder moderat trainieren +#### Hydration +- ausreichend trinken +- Glykogenspeicherung benötigt Wasser (~3 g pro g Glykogen) + + +## Ideales Abendessen (Praxisbeispiel) + +Ziel: Speicher auffüllen ohne Verdauungsstress + +Beispiel: +- große Portion Pasta oder Reis +- leichte Tomatensauce +- mageres Protein (Hähnchen, Fisch, Tofu) +- wenig Fett +- Weißbrot als Beilage + +Optional: +- Dessert (z. B. Reisbrei oder Banane) + +Leicht verdaulich + kohlenhydratreich = optimal + +## Wettkampftag nicht vergessen +- Frühstück: **1-4 g KH/kg** +- während Belastung: **60-120 g KH/h** +=> stabiler Blutzucker = stabile Leistung + +## Fazit +- *Muskelglykogen* bestimmt deine physische Leistung +- *Leberglykogen* schützt dich vor dem „Hungerast“ +- *Blutzucker* ist das zentrale Steuerungselement + +=> Erfolgreiche Athleten managen **nicht nur Training**, sondern auch gezielt ihre **Energieverfügbarkeit**. + +## Quellen und Literaturempfehlungen + +Auswahl +- Burke, L. M., Hawley, J. A., Wong, S. H., & Jeukendrup, A. E. (2011): Carbohydrates for training and competition. Journal of Sports Sciences. +- Jeukendrup, A. E. (2014): A step towards personalized sports nutrition: carbohydrate intake during exercise. Sports Medicine. +- Coyle, E. F. (1995): Substrate utilization during exercise in active people. American Journal of Clinical Nutrition. +- Berg, J. M., Tymoczko, J. L., & Gatto, G. J. (2019): Biochemistry. W.H. Freeman. +- Brooks, G. A., Fahey, T. D., & Baldwin, K. M. (2005): Exercise Physiology: Human Bioenergetics and Its Applications. McGraw-Hill. +- Ivy, J. L. (2004): Regulation of muscle glycogen repletion, muscle protein synthesis and repair following exercise. Journal of Sports Science & Medicine.', +'', +NULL, NULL, NULL, NULL, NULL, NULL, +'published', +NULL, NULL, '2024-10-01', '2026-04-28'); + +INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/carboloading-muskelglykogen-leberglykogen-blutzucker'), (SELECT id FROM :"schema".categories WHERE slug='blog')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/carboloading-muskelglykogen-leberglykogen-blutzucker'), (SELECT id FROM :"schema".tags WHERE slug='kohlenhydrate')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/carboloading-muskelglykogen-leberglykogen-blutzucker'), (SELECT id FROM :"schema".tags WHERE slug='fueling')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/carboloading-muskelglykogen-leberglykogen-blutzucker'), (SELECT id FROM :"schema".tags WHERE slug='training')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/carboloading-muskelglykogen-leberglykogen-blutzucker'), (SELECT id FROM :"schema".tags WHERE slug='triathlon')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/carboloading-muskelglykogen-leberglykogen-blutzucker'), (SELECT id FROM :"schema".tags WHERE slug='raceday')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/carboloading-muskelglykogen-leberglykogen-blutzucker'), (SELECT id FROM :"schema".tags WHERE slug='ernaehrung')); \ No newline at end of file diff --git a/db/articles/128_blog_gibt-es-alternativen-zu-teuren-gels.sql b/db/articles/128_blog_gibt-es-alternativen-zu-teuren-gels.sql new file mode 100644 index 0000000..83509b8 --- /dev/null +++ b/db/articles/128_blog_gibt-es-alternativen-zu-teuren-gels.sql @@ -0,0 +1,148 @@ + +SET search_path TO :"schema"; + + +INSERT INTO :"schema".pages VALUES (DEFAULT, 'blog/gibt-es-alternativen-zu-teuren-gels', +(SELECT id FROM :"schema".pages WHERE slug='blog'), +'article', +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); + +INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"schema".pages WHERE slug='blog/gibt-es-alternativen-zu-teuren-gels'), 1, (SELECT id FROM :"schema".categories WHERE slug='coaching'), +'Kann man teure Gels im Ausdauertraining ersetzen?', +NULL, NULL, +'Wie kannst Du teure Gels im Ausdauertraining ersetze um hohe Kosten zu vermeiden.', +'# Teure Gels im Ausdauertraining ersetzen + +Energie-Gels und -Riegel gehören für viele Ausdauersportler zum Standard - egal ob im Triathlon, auf dem Rennrad oder beim Laufen. Das Problem: Auf Dauer wird das teuer: 20 Euro für eine längere Ausfahrt sind schnell erreicht. Die gute Nachricht: Du kannst dir eine mindestens genauso effektive, oft sogar besser steuerbare Alternative selbst zusammenstellen - wissenschaftlich fundiert und deutlich günstiger. + + +## Warum überhaupt Kohlenhydrate im Training? + +Bei längeren Belastungen (>60 Minuten) wird die Energieversorgung zum limitierenden Faktor. Deine Glykogenspeicher sind begrenzt - besonders im Muskel. Ziel der Ernährung während der Belastung ist es daher, den Blutzuckerspiegel stabil zu halten und die **exogene Kohlenhydratzufuhr** zu optimieren. +Ein zentraler Begriff ist die **Kohlenhydrat-Oxidationsrate**. Der Körper kann pro Stunde nur eine begrenzte Menge Kohlenhydrate aufnehmen. Entscheidend sind dabei die Transportmechanismen im Darm: +* **Glukose (z. B. Maltodextrin)** -> Transport über *SGLT1* +* **Fruktose** -> Transport über *GLUT5* +Durch die Kombination beider Zucker nutzt du zwei unterschiedliche Transportwege und kannst die Aufnahme auf bis zu **90-120 g Kohlenhydrate pro Stunde** steigern (abhängig vom Trainingszustand des Darms - Stichwort: *Train the Gut*). + + +## DIY-Ansatz: Maltodextrin + Fruktose (2:1) + +Das ist exakt das Verhältnis, das auch in der Sporternährungsforschung empfohlen wird. + +#### Vorteile des 2:1-Verhältnisses: +* Maximierte Kohlenhydrataufnahme +* Geringeres Risiko für Magen-Darm-Probleme +* Konstante Energieversorgung + +#### Praxisbeispiel: +* 60 g Maltodextrin +* 30 g Fruktose +* 750 ml Wasser +* Elektrolyte +-> ergibt ~90 g Kohlenhydrate, vergleichbar mit mehreren Gels - aber deutlich günstiger. + + +## Elektrolyte: Warum sie wichtig sind + +Elektrolyte - insbesondere **Natrium** - sind entscheidend für: +* Flüssigkeitsaufnahme (*Osmolalität*) +* Nerven- und Muskelfunktion +* Vermeidung von Hyponatriämie (zu niedrige Natriumkonzentration im Blutserum) +**Richtwert:** +300-800 mg Natrium pro Liter (je nach Schweißrate) + + +## Wann ist diese Strategie sinnvoll? + +#### Sinnvoll: +* Lange Einheiten (>90 Minuten) +* Intensive Trainings (Intervalle, Koppeltraining) +* Wettkampfsimulationen +* Mehrstündige Radausfahrten + +#### Weniger sinnvoll: +* Kurze, lockere Einheiten +* Gezieltes Nüchterntraining +* Regenerationseinheiten + + +## Trainingsbeispiele +#### Radfahren (3-4 Stunden) +* Ziel: 80-100 g KH pro Stunde +* Umsetzung: 2-3 Flaschen DIY-Mix +* Fokus: Gleichmäßige Energiezufuhr + +#### Langer Lauf (90-120 Minuten) +* Ziel: 60-80 g KH pro Stunde +* Umsetzung: Soft Flask oder konzentrierter Mix + Wasser +* Wichtig: Verträglichkeit testen + +#### Koppeltraining +* Frühe Kohlenhydratzufuhr auf dem Rad (erste 15 Minuten nutzen) + + +## Vorteile gegenüber klassischen Gels +* Deutlich günstiger +* Flexible Dosierung +* Volle Kontrolle über Inhaltsstoffe +* Weniger Zusatzstoffe + + +## Der oft unterschätzte Faktor: Darmtraining + +Der Darm ist trainierbar. Hohe Kohlenhydratzufuhr muss geübt werden: +* Schrittweise steigern +* Regelmäßig im Training testen +* Flüssigkeitszufuhr anpassen + + +## Wichtiger Hinweis: Nahrungsergänzung & Dopingrisiko + +Ein kritischer Punkt: **Verunreinigungen in Nahrungsergänzungsmitteln**. +Selbst scheinbar harmlose Produkte können Spuren verbotener Substanzen enthalten - etwa durch Produktionsprozesse. +Besonders riskant: Hersteller, die **gleichzeitig Medikamente und Supplements produzieren** (Stichwort: Kreuzkontamination). + +#### Empfehlungen: +* Möglichst einfache Rohstoffe nutzen (Maltodextrin, Fruktose) +* Auf geprüfte Produkte achten (z. B. Kölner Liste) +* Komplexe Mischungen vermeiden + + +## Wettkampfspezifischer Hinweis (sehr wichtig!) + +So sinnvoll DIY-Lösungen im Training sind: +**In Wettkampfnähe solltest du gezielt die Produkte nutzen, die du im Wettkampf einsetzen wirst - oder die vor Ort angeboten werden.** + +Warum? +* Der Magen reagiert unter Wettkampfbelastung empfindlicher +* Fremde Produkte können zu Problemen führen +* Aid Stations haben oft feste Marken/Produkte + +#### Praxis: +* 2-4 Wochen vor dem Wettkampf: gezielt umstellen +* Ernährung exakt wie im Wettkampf testen +* Keine Experimente am Wettkampftag + + +## Fazit + +Mit einer Mischung aus Maltodextrin und Fruktose im Verhältnis 2:1 hast du eine fundierte, kostengünstige und leistungsstarke Alternative zu klassischen Gels. Kombiniert mit der richtigen Elektrolytstrategie und gezieltem Darmtraining kannst du deine Performance deutlich verbessern. +Wichtig bleibt: +Im Training kannst du optimieren - +**im Wettkampf solltest du auf Bewährtes setzen.**', +'', +NULL, NULL, NULL, NULL, NULL, NULL, +'published', +NULL, NULL, '2024-10-01', '2026-05-07'); + +INSERT INTO :"schema".content_pages VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/gibt-es-alternativen-zu-teuren-gels'), (SELECT id FROM :"schema".categories WHERE slug='blog')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/gibt-es-alternativen-zu-teuren-gels'), (SELECT id FROM :"schema".tags WHERE slug='radfahren')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/gibt-es-alternativen-zu-teuren-gels'), (SELECT id FROM :"schema".tags WHERE slug='training')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/gibt-es-alternativen-zu-teuren-gels'), (SELECT id FROM :"schema".tags WHERE slug='triathlon')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/gibt-es-alternativen-zu-teuren-gels'), (SELECT id FROM :"schema".tags WHERE slug='fueling')); + +INSERT INTO :"schema".content_tags VALUES ((SELECT id FROM :"schema".pages WHERE slug='blog/gibt-es-alternativen-zu-teuren-gels'), (SELECT id FROM :"schema".tags WHERE slug='ernaehrung')); \ No newline at end of file diff --git a/db/articles/700_camps.sql b/db/articles/700_camps.sql index 6701b48..26572a4 100644 --- a/db/articles/700_camps.sql +++ b/db/articles/700_camps.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'camps', NULL, 'camps-grid', -3, true, NULL, NULL, NULL, now(), now()); +3, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".nav_items VALUES (DEFAULT, NULL, (SELECT id FROM :"schema".pages WHERE slug='camps'), NULL, 'Camps', @@ -20,4 +20,4 @@ NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); diff --git a/db/articles/701_camps_2026_cesenatico.sql b/db/articles/701_camps_2026_cesenatico.sql index 2729481..dabccf1 100644 --- a/db/articles/701_camps_2026_cesenatico.sql +++ b/db/articles/701_camps_2026_cesenatico.sql @@ -23,7 +23,7 @@ INSERT INTO :"schema".events VALUES ( DEFAULT, '2026/cesenatico', (SELECT id FROM :"schema".pages WHERE slug='camps/2026/cesenatico'), 'camp', -'open', +'past', 'Trainingslager Cesenatico 2026', '2 Wochen Schwimmen, Radfahren und Laufen an der Adria.', 'Cesenatico, Italien', diff --git a/db/articles/900_coaching.sql b/db/articles/900_coaching.sql index ccce4b3..024b1e0 100644 --- a/db/articles/900_coaching.sql +++ b/db/articles/900_coaching.sql @@ -7,7 +7,7 @@ NULL, 'category-grid', 1, true, 'coaching', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".nav_items VALUES (DEFAULT, NULL, (SELECT id FROM :"schema".pages WHERE slug='coaching'), NULL, 'Coaching', @@ -22,4 +22,4 @@ INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"sche '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); diff --git a/db/articles/901_personal-coaching.sql b/db/articles/901_personal-coaching.sql index e0c9259..ee9cd02 100644 --- a/db/articles/901_personal-coaching.sql +++ b/db/articles/901_personal-coaching.sql @@ -7,7 +7,7 @@ INSERT INTO :"schema".pages VALUES (DEFAULT, 'category-grid', 0, true, 'angebot', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".nav_items VALUES (DEFAULT, (SELECT id FROM :"schema".nav_items WHERE label='Coaching'), (SELECT id FROM :"schema".pages WHERE slug='personal-coaching'), NULL, @@ -23,4 +23,4 @@ INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"sche '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); diff --git a/db/articles/910_athleten.sql b/db/articles/910_athleten.sql index ab54212..149b210 100644 --- a/db/articles/910_athleten.sql +++ b/db/articles/910_athleten.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'athleten', (SELECT id FROM :"schema".pages WHERE slug='personal-coaching'), 'category-grid', -0, true, 'athleten', NULL, NULL, now(), now()); +0, true, 'athleten', NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".nav_items VALUES (DEFAULT, (SELECT id FROM :"schema".nav_items WHERE label='Personal Coaching'), (SELECT id FROM :"schema".pages WHERE slug='athleten'), NULL, @@ -21,5 +21,5 @@ INSERT INTO :"schema".page_content VALUES (DEFAULT, (SELECT id FROM :"sche '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); diff --git a/db/articles/950_standard-plaene.sql b/db/articles/950_standard-plaene.sql index 11ebfc6..b8df7bd 100644 --- a/db/articles/950_standard-plaene.sql +++ b/db/articles/950_standard-plaene.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'plaene-auf_trainingpeaks', (SELECT id FROM :"schema".pages WHERE slug='coaching'), 'content-page', -1, true, NULL, NULL, NULL, now(), now()); +1, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".nav_items VALUES (DEFAULT, (SELECT id FROM :"schema".nav_items WHERE label='Coaching'), (SELECT id FROM :"schema".pages WHERE slug='plaene-auf_trainingpeaks'), NULL, @@ -63,4 +63,4 @@ Und es kann auch schneller oder langsamer werden, abhängig von Wetter, Strecken '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); diff --git a/db/articles/960_langdistanz.sql b/db/articles/960_langdistanz.sql index 8cab950..5051aa8 100644 --- a/db/articles/960_langdistanz.sql +++ b/db/articles/960_langdistanz.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'langdistanz', (SELECT id FROM :"schema".pages WHERE slug='plaene-auf_trainingpeaks'), 'content-page', -0, true, NULL, NULL, NULL, now(), now()); +0, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".nav_items VALUES (DEFAULT, (SELECT id FROM :"schema".nav_items WHERE label='Dein Trainingsplan auf Trainingpeaks'), (SELECT id FROM :"schema".pages WHERE slug='langdistanz'), NULL, @@ -66,7 +66,7 @@ Zielzeit unter 8:45 (m) / 9:30 (w) '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); -- ============================================================ diff --git a/db/articles/970_mitteldistanz.sql b/db/articles/970_mitteldistanz.sql index b6f2d6c..a3ab280 100644 --- a/db/articles/970_mitteldistanz.sql +++ b/db/articles/970_mitteldistanz.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'mitteldistanz', (SELECT id FROM :"schema".pages WHERE slug='plaene-auf_trainingpeaks'), 'content-page', -1, true, NULL, NULL, NULL, now(), now()); +1, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".nav_items VALUES (DEFAULT, (SELECT id FROM :"schema".nav_items WHERE label='Dein Trainingsplan auf Trainingpeaks'), (SELECT id FROM :"schema".pages WHERE slug='mitteldistanz'), NULL, @@ -68,7 +68,7 @@ Zielzeit unter 4:15 (m) / 4:45 (w) '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); -- ============================================================ -- 2. hero_style auf 'carousel' setzen diff --git a/db/articles/980_kurzdistanz.sql b/db/articles/980_kurzdistanz.sql index a8a4c16..9622b2b 100644 --- a/db/articles/980_kurzdistanz.sql +++ b/db/articles/980_kurzdistanz.sql @@ -5,7 +5,7 @@ SET search_path TO :"schema"; INSERT INTO :"schema".pages VALUES (DEFAULT, 'kurzdistanz', (SELECT id FROM :"schema".pages WHERE slug='plaene-auf_trainingpeaks'), 'content-page', -2, true, NULL, NULL, NULL, now(), now()); +2, true, NULL, NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO :"schema".nav_items VALUES (DEFAULT, (SELECT id FROM :"schema".nav_items WHERE label='Dein Trainingsplan auf Trainingpeaks'), (SELECT id FROM :"schema".pages WHERE slug='kurzdistanz'), NULL, @@ -58,7 +58,7 @@ Zielzeit unter 2:10 (m) / 2:25 (w) '', NULL, NULL, NULL, NULL, NULL, NULL, 'published', -NULL, NULL, now(), now()); +NULL, NULL, '2024-10-01', '2024-10-01'); INSERT INTO content_media VALUES ( (SELECT id FROM :"schema".page_content WHERE page_id = (SELECT id FROM pages WHERE slug = 'kurzdistanz')), diff --git a/scripts/triathlon-coaching.conf b/scripts/triathlon-coaching.conf index 1b12dba..3120b48 100644 --- a/scripts/triathlon-coaching.conf +++ b/scripts/triathlon-coaching.conf @@ -75,3 +75,85 @@ CustomLog /var/log/apache2/triathlon-coaching.com/www.access.log combined + + +neu: + +# sites-available/www.triathlon-coaching.com.port443.conf +# Modified by: Ole B. Rosentreter +# Last modified: 20240815_000829 + +# WWW ########## + + ServerName triathlon-coaching.com + ServerAlias www.triathlon-coaching.com + + DocumentRoot /var/www/triathlon-coaching.com/www + DirectoryIndex index.html + + # -- SSL ---------------------------------------------------- + SSLEngine on + SSLCertificateFile /etc/letsencrypt/live/www.triathlon-coaching.com/fullchain.pem + SSLCertificateKeyFile /etc/letsencrypt/live/www.triathlon-coaching.com/privkey.pem + Include /etc/letsencrypt/options-ssl-apache.conf + + + # -- Statische Seiten: Clean URLs --------------------------- + # /coaching -> /coaching/index.html (bereits so generiert) + # Apache liefert index.html automatisch, kein Rewrite nötig. + + # -- Hauptverzeichnis: kein PHP ----------------------------- + # PHP ist hier bewusst nicht aktiv - nur statische Dateien + + Options -Indexes -ExecCGI + AllowOverride None + Require all granted + + + # -- API-Verzeichnis: PHP erlaubt --------------------------- + + Options -Indexes -ExecCGI + AllowOverride None + Require all granted + + # Nur PHP-Dateien ausführen, alles andere sperren + + SetHandler application/x-httpd-php + + + Require all denied + + + + # -- PHP-Kontrolle ------------------------------------------ + # PHP nur in /api erlaubt, überall sonst gesperrt + + Require all denied + + + # -- Rate-Limit Verzeichnis: nie ausliefern ----------------- + + Require all denied + + + # -- Security Headers --------------------------------------- + Header always set X-Frame-Options "DENY" + Header always set X-Content-Type-Options "nosniff" + Header always set Referrer-Policy "strict-origin-when-cross-origin" + Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()" + Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data:; connect-src 'self'" + + # -- Caching für statische Assets --------------------------- + + Header set Cache-Control "public, max-age=31536000, immutable" + + + + Header set Cache-Control "public, max-age=300, must-revalidate" + + + # -- Logging ------------------------------------------------ + ErrorLog /var/log/apache2/triathlon-coaching.com/www.error.log + CustomLog /var/log/apache2/triathlon-coaching.com/www.access.log combined + + \ No newline at end of file