@@ -477,11 +608,12 @@ tailwind.config = {
let pendingFiles = [];
// ─── Navigation ──────────────────────────────────────────
- const sections = ['overview', 'media', 'homepage', 'career', 'community', 'settings'];
+ const sections = ['overview', 'media', 'homepage', 'uebermich', 'career', 'community', 'settings'];
const pageTitles = {
overview: ['Übersicht', 'Willkommen zurück. Hier ist dein aktueller Stand.'],
media: ['Galerie', 'Fotos hochladen und verwalten.'],
homepage: ['Startseite', 'Hero-Bild und Text der Startseite bearbeiten.'],
+ uebermich: ['Über mich', 'Seite "Über mich" bearbeiten – Text, Bild, Erfolge, Zitat.'],
career: ['Erfolge', 'Meilensteine und Gürtelprüfungen.'],
community: ['Gästebuch', 'Kommentare und Einträge.'],
settings: ['Einstellungen', 'Konfiguration des Admin-Bereichs.']
@@ -504,6 +636,7 @@ tailwind.config = {
document.getElementById('pageSubtitle').textContent = sub;
if (name === 'media') loadPhotos();
if (name === 'homepage') loadHomepage();
+ if (name === 'uebermich') loadUebermich();
if (name === 'settings') renderCatManage();
}
@@ -1122,6 +1255,167 @@ tailwind.config = {
} catch (err) { console.error('Save error:', err); }
});
+ // ─── Über mich ────────────────────────────────────────────
+ function createWeitereRow(titel, detail, beschreibung, jahr, ort, kategorie) {
+ const row = document.createElement('div');
+ row.className = 'bg-surface-container-low rounded-xl p-4 flex flex-col gap-2';
+ row.innerHTML =
+ '
' +
+ '' +
+ '' +
+ '' +
+ '
' +
+ '
' +
+ '
' +
+ '' +
+ '' +
+ '' +
+ '
';
+ row.querySelector('.we-delete').addEventListener('click', function() { row.remove(); });
+ return row;
+ }
+
+ document.getElementById('umWeitereAdd').addEventListener('click', function() {
+ document.getElementById('umWeitereFields').appendChild(createWeitereRow('', ''));
+ });
+
+ async function loadUebermich() {
+ try {
+ const r = await fetch('/api/uebermich');
+ const d = await r.json();
+ document.getElementById('umBadge').value = d.hero.badge || '';
+ document.getElementById('umRang').value = d.hero.rang_value || '';
+ document.getElementById('umH1').value = d.hero.heading_line1 || '';
+ document.getElementById('umH2').value = d.hero.heading_line2 || '';
+ document.getElementById('umHSuffix').value = d.hero.heading_suffix || '';
+ document.getElementById('umDesc').value = d.hero.description || '';
+ document.getElementById('umGurt').value = d.gurtweg.aktiver_gurt || 'Blau';
+ document.getElementById('umHeTitel').value = d.haupterfolg.titel || '';
+ document.getElementById('umHePlatz').value = d.haupterfolg.platz || '';
+ document.getElementById('umHeJahr').value = d.haupterfolg.jahr || '';
+ document.getElementById('umHeOrt').value = d.haupterfolg.ort || '';
+ document.getElementById('umHeKat').value = d.haupterfolg.kategorie || '';
+ document.getElementById('umHeDesc').value = d.haupterfolg.beschreibung || '';
+ document.getElementById('umZitat').value = d.zitat.text || '';
+ document.getElementById('umZitatAutor').value = d.zitat.autor || '';
+
+ // Weitere Erfolge
+ const wf = document.getElementById('umWeitereFields');
+ wf.innerHTML = '';
+ (d.weitere_erfolge || []).forEach(function(e) {
+ wf.appendChild(createWeitereRow(e.titel, e.detail, e.beschreibung, e.jahr, e.ort, e.kategorie));
+ });
+
+ // Stats
+ const sf = document.getElementById('umStatsFields');
+ sf.innerHTML = '';
+ (d.stats || []).forEach(function(s) {
+ const row = document.createElement('div');
+ row.className = 'flex gap-3 items-center';
+ row.innerHTML =
+ '
' +
+ '
';
+ sf.appendChild(row);
+ });
+
+ if (d.hero.image) {
+ document.getElementById('umPreview').src = '/uebermich/' + d.hero.image + '?t=' + Date.now();
+ document.getElementById('umPreview').classList.remove('hidden');
+ document.getElementById('umPlaceholder').classList.add('hidden');
+ }
+ } catch(err) { console.error('Uebermich load error:', err); }
+ }
+
+ document.getElementById('umFileInput').addEventListener('change', function() {
+ const file = this.files[0];
+ if (!file) return;
+ document.getElementById('umPreview').src = URL.createObjectURL(file);
+ document.getElementById('umPreview').classList.remove('hidden');
+ document.getElementById('umPlaceholder').classList.add('hidden');
+ document.getElementById('umUploadBtn').disabled = false;
+ document.getElementById('umUploadStatus').textContent = file.name;
+ });
+
+ document.getElementById('umUploadBtn').addEventListener('click', async function() {
+ const file = document.getElementById('umFileInput').files[0];
+ if (!file) return;
+ this.disabled = true;
+ document.getElementById('umUploadStatus').textContent = 'Wird hochgeladen…';
+ try {
+ const fd = new FormData();
+ fd.append('image', file);
+ const r = await fetch('/api/uebermich/image', { method: 'POST', body: fd });
+ if (r.ok) {
+ showToast('✓ Bild gespeichert');
+ document.getElementById('umUploadStatus').textContent = 'Gespeichert!';
+ } else {
+ document.getElementById('umUploadStatus').textContent = 'Fehler beim Upload';
+ }
+ } catch(err) {
+ document.getElementById('umUploadStatus').textContent = 'Verbindungsfehler';
+ }
+ this.disabled = false;
+ });
+
+ document.getElementById('umSaveBtn').addEventListener('click', async function() {
+ try {
+ const r = await fetch('/api/uebermich');
+ const data = await r.json();
+
+ data.hero.badge = document.getElementById('umBadge').value;
+ data.hero.rang_value = document.getElementById('umRang').value;
+ data.hero.heading_line1 = document.getElementById('umH1').value;
+ data.hero.heading_line2 = document.getElementById('umH2').value;
+ data.hero.heading_suffix = document.getElementById('umHSuffix').value;
+ data.hero.description = document.getElementById('umDesc').value;
+ data.gurtweg.aktiver_gurt = document.getElementById('umGurt').value;
+ data.haupterfolg.titel = document.getElementById('umHeTitel').value;
+ data.haupterfolg.platz = document.getElementById('umHePlatz').value;
+ data.haupterfolg.jahr = document.getElementById('umHeJahr').value;
+ data.haupterfolg.ort = document.getElementById('umHeOrt').value;
+ data.haupterfolg.kategorie = document.getElementById('umHeKat').value;
+ data.haupterfolg.beschreibung = document.getElementById('umHeDesc').value;
+ data.zitat.text = document.getElementById('umZitat').value;
+ data.zitat.autor = document.getElementById('umZitatAutor').value;
+
+ const weRows = document.getElementById('umWeitereFields').querySelectorAll(':scope > div');
+ data.weitere_erfolge = Array.from(weRows).map(function(row) {
+ return {
+ titel: row.querySelector('[data-we="titel"]').value,
+ detail: row.querySelector('[data-we="detail"]').value,
+ beschreibung: row.querySelector('[data-we="beschreibung"]').value,
+ jahr: row.querySelector('[data-we="jahr"]').value,
+ ort: row.querySelector('[data-we="ort"]').value,
+ kategorie: row.querySelector('[data-we="kategorie"]').value
+ };
+ });
+
+ const stRows = document.getElementById('umStatsFields').querySelectorAll('div.flex');
+ data.stats = Array.from(stRows).map(function(row) {
+ return {
+ wert: row.querySelector('[data-us="wert"]').value,
+ label: row.querySelector('[data-us="label"]').value
+ };
+ });
+
+ const res = await fetch('/api/uebermich', {
+ method: 'PUT',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(data)
+ });
+ if (res.ok) showToast('✓ Über mich gespeichert & Deploy gestartet');
+ } catch(err) { console.error('Save error:', err); }
+ });
+
// ─── Init ─────────────────────────────────────────────────
loadCategories().then(function () { loadStats(); });
})();
diff --git a/data/categories.json b/data/categories.json
index d7d1b39..ff0ce56 100644
--- a/data/categories.json
+++ b/data/categories.json
@@ -1 +1,6 @@
-["Training", "Wettkämpfe", "Gürtelprüfungen"]
+[
+ "Training",
+ "Wettkämpfe",
+ "Gürtelprüfungen",
+ "test"
+]
\ No newline at end of file
diff --git a/data/uebermich.json b/data/uebermich.json
new file mode 100644
index 0000000..6f79590
--- /dev/null
+++ b/data/uebermich.json
@@ -0,0 +1,112 @@
+{
+ "hero": {
+ "badge": "Meine Reise h",
+ "heading_line1": "KINETISCHE h",
+ "heading_line2": "ELEGANZ h",
+ "heading_suffix": "IN JEDEM SCHLAG. h",
+ "description": "Seit ich sechs Jahre alt bin, ist das Dojo mein zweites Zuhause. Für mich ist Karate mehr als Medaillen – es ist eine Symphonie aus Fokus, Disziplin und explosiver Energie in einer einzigen Bewegung. hhh",
+ "image": "portrait.webp",
+ "image_alt": "Miya beim Karate-Kick",
+ "rang_label": "Aktueller Rang",
+ "rang_value": "Lila "
+ },
+ "gurtweg": {
+ "title": "Der Weg zur Meisterschaft",
+ "subtitle": "Jeder Gürtel erzählt eine Geschichte aus Hingabe und Wachstum.",
+ "aktiver_gurt": "Lila",
+ "gurte": [
+ {
+ "name": "Weiß",
+ "farbe": "bg-white border-2 border-zinc-300"
+ },
+ {
+ "name": "Gelb",
+ "farbe": "bg-yellow-400"
+ },
+ {
+ "name": "Orange",
+ "farbe": "bg-orange-500"
+ },
+ {
+ "name": "Grün",
+ "farbe": "bg-green-600"
+ },
+ {
+ "name": "Blau",
+ "farbe": "bg-blue-600"
+ },
+ {
+ "name": "Lila",
+ "farbe": "bg-purple-700"
+ },
+ {
+ "name": "Braun",
+ "farbe": "bg-red-700"
+ },
+ {
+ "name": "Schwarz",
+ "farbe": "bg-zinc-900"
+ }
+ ]
+ },
+ "haupterfolg": {
+ "titel": "Landesmeisterschaft Berlin h",
+ "platz": "Gold – Kata U14 h",
+ "beschreibung": "Mein bisher größter Erfolg. Monatelanges hartes Training gipfelte in einer Vorführung, die meinen Wettkampfgeist unter Beweis stellte. hh ",
+ "jahr": "2024 ",
+ "ort": "Esslingen am Neckar h",
+ "kategorie": "U14"
+ },
+ "weitere_erfolge": [
+ {
+ "titel": "Norddeutsche Meisterschaft",
+ "detail": "Silber – Kata 2024",
+ "beschreibung": "fdfffdfdfdfd\nfdf",
+ "jahr": "2099",
+ "ort": "Heilbronn",
+ "kategorie": "haha"
+ },
+ {
+ "titel": "Dojo Champion",
+ "detail": "Kiai Berlin, intern",
+ "beschreibung": "fdffdfdfde",
+ "jahr": "",
+ "ort": "",
+ "kategorie": ""
+ },
+ {
+ "titel": "Fairness-Preis",
+ "detail": "Dojo-Auszeichnung 2023",
+ "beschreibung": "hghghfghfghfghfg",
+ "jahr": "",
+ "ort": "",
+ "kategorie": ""
+ },
+ {
+ "titel": "Der beste",
+ "detail": "Ganz oben auf dem Treppchen",
+ "beschreibung": "eqweqweqw",
+ "jahr": "",
+ "ort": "",
+ "kategorie": ""
+ }
+ ],
+ "stats": [
+ {
+ "wert": "5+",
+ "label": "Jahre Training"
+ },
+ {
+ "wert": "32",
+ "label": "Turniere"
+ },
+ {
+ "wert": "12",
+ "label": "Goldmedaillen"
+ }
+ ],
+ "zitat": {
+ "text": "Karate ist nicht nur ein Sport. Es ist eine Linse, durch die ich die Welt sehe – mit Präzision, Respekt und unbeugsamer Konzentration.",
+ "autor": "Emy"
+ }
+}
\ No newline at end of file
diff --git a/layouts/uebermich/list.html b/layouts/uebermich/list.html
index 1e56ce0..f8cff4c 100644
--- a/layouts/uebermich/list.html
+++ b/layouts/uebermich/list.html
@@ -62,6 +62,7 @@
.editorial-shadow { box-shadow: 0 24px 40px -10px rgba(44, 47, 48, 0.06); }
+{{ $um := .Site.Data.uebermich }}
@@ -86,19 +87,21 @@
-
Meine Reise
+
{{ $um.hero.badge }}
- Seit ich sechs Jahre alt bin, ist das Dojo mein zweites Zuhause. Für mich ist Karate mehr als Medaillen – es ist eine Symphonie aus Fokus, Disziplin und explosiver Energie in einer einzigen Bewegung.
+ {{ $um.hero.description }}
-

+ {{ if $um.hero.image }}
+

+ {{ else }}
+
Kein Bild hochgeladen
+ {{ end }}
@@ -106,8 +109,8 @@
workspace_premium
-
Aktueller Rang
-
Blaugurt
+
{{ $um.hero.rang_label }}
+
{{ $um.hero.rang_value }}
@@ -120,8 +123,8 @@
-
Der Weg zur Meisterschaft
-
Jeder Gürtel erzählt eine Geschichte aus Hingabe und Wachstum.
+
{{ $um.gurtweg.title }}
+
{{ $um.gurtweg.subtitle }}
Aktiver Status
@@ -129,115 +132,87 @@
-
-
-
-
-
-
-
-
-
-
Schwarz
+ {{ range $um.gurtweg.gurte }}
+ {{ $aktiv := eq .name $um.gurtweg.aktiver_gurt }}
+
+
+
{{ .name }}{{ if $aktiv }} ✓{{ end }}
+ {{ end }}
-
+
MEILENSTEINE DES ERFOLGS
-
+
military_tech
-
+
-
Gold – Kata U14
-
Mein bisher größter Erfolg. Monatelanges hartes Training gipfelte in einer Vorführung, die meinen Wettkampfgeist unter Beweis stellte.
+
{{ $um.haupterfolg.platz }}
+
{{ $um.haupterfolg.beschreibung }}
-
2024
-
Berlin
+
{{ $um.haupterfolg.jahr }}
+
{{ $um.haupterfolg.ort }}
-
U14
+
{{ $um.haupterfolg.kategorie }}
Kategorie
sports_martial_arts
-
+
Weitere Erfolge
-
+ {{ $icons := slice "star" "emoji_events" "rewarded_ads" "military_tech" "workspace_premium" }}
+ {{ range $i, $e := $um.weitere_erfolge }}
+
- star
+ {{ index $icons $i }}
-
Norddeutsche Meisterschaft
-
Silber – Kata 2024
-
-
-
-
- emoji_events
-
-
-
Dojo Champion
-
Kiai Berlin, intern
-
-
-
-
- rewarded_ads
-
-
-
Fairness-Preis
-
Dojo-Auszeichnung 2023
+
{{ $e.titel }}
+
{{ $e.detail }}
+ {{ end }}
+ {{ range $i, $s := $um.stats }}
+ {{ if eq $i 0 }}
- 5+
- Jahre Training
+ {{ $s.wert }}
+ {{ $s.label }}
+ {{ else if eq $i 1 }}
- 32
- Turniere
+ {{ $s.wert }}
+ {{ $s.label }}
+ {{ else }}
- 12
- Goldmedaillen
+ {{ $s.wert }}
+ {{ $s.label }}
+ {{ end }}
+ {{ end }}
@@ -245,9 +220,9 @@
format_quote
- "Karate ist nicht nur ein Sport. Es ist eine Linse, durch die ich die Welt sehe – mit Präzision, Respekt und unbeugsamer Konzentration."
+ "{{ $um.zitat.text }}"
- — Miya
+ — {{ $um.zitat.autor }}
@@ -264,5 +239,31 @@
+