feat(deploy): enhance deployment scripts with skip options for backend and frontend
All checks were successful
Deploy to production / deploy (push) Successful in 1m31s

- Updated `deploy-yourpart-bluegreen.sh` to pass additional arguments for skipping backend or frontend updates.
- Enhanced `update.sh` to handle `--skip-backend` and `--skip-frontend` flags, allowing for more flexible deployment based on changes detected.
- Modified deployment workflow to conditionally execute based on changes in frontend or backend files, improving deployment efficiency.
This commit is contained in:
Torsten Schulz (local)
2026-04-17 11:33:02 +02:00
parent 2461e98fb0
commit 1f10e7c519
8 changed files with 887 additions and 168 deletions

View File

@@ -1,4 +1,4 @@
export const BISAYA_LESSONS_24_43 = [
const BISAYA_LESSONS_24_43_BASE = [
{ week: 3, day: 1, num: 24, type: 'conversation', title: 'Gefühle im Alltag', desc: 'Gefühle ausdrücken und im Gespräch passend darauf reagieren', targetMin: 18, targetScore: 80, review: false, cultural: 'Gefühle werden oft indirekt und mit Fürsorge beantwortet.' },
{ week: 3, day: 1, num: 25, type: 'vocab', title: 'Gefühlswortschatz & Reaktionen', desc: 'Freude, Sorge, Müdigkeit, Vermissen und Beruhigung sicher unterscheiden', targetMin: 20, targetScore: 85, review: true, cultural: null },
{ week: 3, day: 2, num: 26, type: 'conversation', title: 'Gesundheit & Wohlbefinden', desc: 'Einfache Beschwerden erfragen und fürsorglich reagieren', targetMin: 18, targetScore: 80, review: false, cultural: null },
@@ -21,6 +21,34 @@ export const BISAYA_LESSONS_24_43 = [
{ week: 4, day: 5, num: 43, type: 'culture', title: 'Kultur: Höflichkeit, Familie, Alltag', desc: 'Respekt, indirekte Bitte und Familiennähe sprachlich einordnen', targetMin: 16, targetScore: 0, review: false, cultural: 'Kulturelles Verständnis hilft, Sätze passend und nicht nur wörtlich zu verwenden.' }
];
const BISAYA_LESSON_24_43_TARGET_MINUTES = {
24: 24,
25: 24,
26: 24,
27: 24,
28: 26,
29: 24,
30: 24,
31: 24,
32: 34,
33: 24,
34: 28,
35: 34,
36: 28,
37: 32,
38: 30,
39: 34,
40: 30,
41: 24,
42: 38,
43: 22
};
export const BISAYA_LESSONS_24_43 = BISAYA_LESSONS_24_43_BASE.map((lesson) => ({
...lesson,
targetMin: BISAYA_LESSON_24_43_TARGET_MINUTES[lesson.num] || lesson.targetMin
}));
export const BISAYA_LESSONS_24_43_BY_NUMBER = Object.fromEntries(
BISAYA_LESSONS_24_43.map((lesson) => [lesson.num, lesson])
);
@@ -83,7 +111,238 @@ export const BISAYA_RELATIONSHIP_ANCHOR_DIDACTICS = {
}
};
export const BISAYA_DIDACTICS_24_43 = {
const BISAYA_DIDACTICS_24_43_ENRICHMENTS = {
'Gefühle im Alltag': {
corePatterns: [
{ target: 'Nalipay ko karon.', gloss: 'Ich bin heute froh.' },
{ target: 'Naguol ka?', gloss: 'Bist du besorgt / traurig?' },
{ target: 'Naa ra ko diri.', gloss: 'Ich bin hier.' }
],
speakingPrompts: [
{ title: 'Gefühl plus Fürsorge', prompt: 'Sage dein Gefühl, frage nach dem Gefühl der anderen Person und reagiere fürsorglich.', cue: 'Kapoy ko karon. Naguol ka? Naa ra ko diri.' }
]
},
'Gefühlswortschatz & Reaktionen': {
corePatterns: [
{ target: 'kabalaka', gloss: 'Sorge' },
{ target: 'hilom', gloss: 'still / ruhig' },
{ target: 'Nalipay ko para nimo.', gloss: 'Ich freue mich für dich.' }
],
grammarFocus: [
{ title: 'Wort zu Satz', text: 'Aus einem Gefühlswort wird mit ko oder ka schnell ein alltagstauglicher Satz.', example: 'Kapoy ko. Naguol ka?' }
]
},
'Gesundheit & Wohlbefinden': {
corePatterns: [
{ target: 'Aduna kay hilanat?', gloss: 'Hast du Fieber?' },
{ target: 'Sakit pa?', gloss: 'Tut es noch weh?' },
{ target: 'Tawag ta og doktor?', gloss: 'Sollen wir einen Arzt rufen?' }
],
speakingPrompts: [
{ title: 'Gesundheitsverlauf', prompt: 'Frage nach Fieber, Schmerz, Medizin und Besserung.', cue: 'Aduna kay hilanat? Sakit pa? Niinom ka og tambal? Mas maayo na ka?' }
]
},
'Körper & Symptome': {
corePatterns: [
{ target: 'likod', gloss: 'Rücken' },
{ target: 'tutunlan', gloss: 'Hals / Kehle' },
{ target: 'Sakit akong tutunlan.', gloss: 'Mein Hals tut weh.' }
],
grammarFocus: [
{ title: 'Symptom konkretisieren', text: 'Körperwörter werden nützlicher, wenn du sie direkt mit sakit oder hilanat in Sätze setzt.', example: 'Sakit akong tutunlan.' }
]
},
'Höflichkeitsformen praktisch': {
corePatterns: [
{ target: 'Sunod na lang.', gloss: 'Dann ein anderes Mal.' },
{ target: 'Okay ra.', gloss: 'Ist okay.' },
{ target: 'Ayaw kabalaka.', gloss: 'Mach dir keine Sorgen.' }
],
speakingPrompts: [
{ title: 'Weich ablehnen', prompt: 'Lehne etwas heute weich ab, schlage später vor und bedanke dich.', cue: 'Dili lang sa karon. Sunod na lang. Salamat sa pagsabot.' }
]
},
'Bitten & Nachfragen': {
corePatterns: [
{ target: 'Balika palihug.', gloss: 'Wiederhole es bitte.' },
{ target: 'Unsa gani?', gloss: 'Was war das nochmal?' },
{ target: 'Pwede nimo isulat?', gloss: 'Kannst du es aufschreiben?' }
],
grammarFocus: [
{ title: 'Reparatur in Stufen', text: 'Beginne mit Nichtverstehen, bitte um Wiederholung und frage dann nach Bedeutung oder Schriftform.', example: 'Wala ko kasabot. Balika palihug. Pwede nimo isulat?' }
]
},
'Kinder & Familie': {
corePatterns: [
{ target: 'Ayaw pagdali.', gloss: 'Beeil dich nicht / Kein Stress.' },
{ target: 'Dali na.', gloss: 'Komm, beeil dich.' },
{ target: 'Kuhaa imong bag.', gloss: 'Hol deine Tasche.' }
],
grammarFocus: [
{ title: 'Kinderfreundliche Kürze', text: 'Kurze klare Aufforderungen funktionieren im Alltag besser als lange Erklärungen.', example: 'Kuhaa imong bag. Dali na.' }
]
},
'Kinder, Spiel & Routine': {
corePatterns: [
{ target: 'Ayaw kalimot.', gloss: 'Vergiss es nicht.' },
{ target: 'Hugas sa kamot.', gloss: 'Wasch dir die Hände.' },
{ target: 'Patya ang suga.', gloss: 'Mach das Licht aus.' }
],
grammarFocus: [
{ title: 'Routineketten', text: 'Routinen bestehen aus kurzen Handlungsaufforderungen in fester Reihenfolge.', example: 'Hugas sa kamot. Matulog na ta. Patya ang suga.' }
]
},
'Woche 3 - Intensivwiederholung': {
corePatterns: [
{ target: 'Naa ra ko diri.', gloss: 'Ich bin hier.' },
{ target: 'Hugas sa kamot.', gloss: 'Wasch dir die Hände.' },
{ target: 'Balika palihug.', gloss: 'Wiederhole es bitte.' }
],
speakingPrompts: [
{ title: 'Acht schnelle Antworten', prompt: 'Reagiere auf acht gemischte Situationen aus Gefühl, Gesundheit, Kind und Verständnisproblem.', cue: 'Naa ra ko diri. Sakit pa? Hugas sa kamot. Balika palihug.' }
]
},
'Woche 3 - Checkpoint': {
corePatterns: [
{ target: 'Sakit pa?', gloss: 'Tut es noch weh?' },
{ target: 'Ayaw pagdali.', gloss: 'Kein Stress.' },
{ target: 'Pwede nimo isulat?', gloss: 'Kannst du es aufschreiben?' }
],
grammarFocus: [
{ title: 'Checkpoint als Diagnose', text: 'Der Checkpoint soll zeigen, ob du spontan reagieren kannst, nicht nur wiedererkennst.', example: 'Naguol ka? Naa ra ko diri.' }
]
},
'Alltagsszene: Zuhause morgens': {
corePatterns: [
{ target: 'Hugas sa nawong.', gloss: 'Wasch dein Gesicht.' },
{ target: 'Kuhaa imong bag.', gloss: 'Hol deine Tasche.' },
{ target: 'Mogawas na ta.', gloss: 'Wir gehen jetzt raus.' }
],
speakingPrompts: [
{ title: 'Morgenroutine komplett', prompt: 'Sprich eine Morgenroutine mit Aufstehen, Waschen, Essen, Tasche und Losgehen.', cue: 'Bangon na. Hugas sa nawong. Nikaon na ka? Kuhaa imong bag. Mogawas na ta.' }
]
},
'Spiralreview: Woche 1-2 im Alltag': {
corePatterns: [
{ target: 'Maayong gabii.', gloss: 'Guten Abend.' },
{ target: 'Katulog og maayo.', gloss: 'Schlaf gut.' },
{ target: 'Tagpila ni?', gloss: 'Wie viel kostet das?' }
],
grammarFocus: [
{ title: 'Alte Muster aktivieren', text: 'Alte Sätze sollen in neuen Szenen auftauchen, damit sie nicht nur passiv bekannt bleiben.', example: 'Maayong gabii. Katulog og maayo.' }
]
},
'Alltagsszene: Besuch am Nachmittag': {
corePatterns: [
{ target: 'Kumusta ang biyahe?', gloss: 'Wie war die Reise?' },
{ target: 'Kaon sa.', gloss: 'Iss erst einmal.' },
{ target: 'Naa mi diri.', gloss: 'Wir sind hier.' }
],
grammarFocus: [
{ title: 'Besuch als Fürsorge', text: 'Besuchssprache verbindet Willkommen, Angebot und Nähe.', example: 'Sulod lang. Lingkod sa. Kaon sa.' }
]
},
'Spiralreview: Gefühle & Gesundheit': {
corePatterns: [
{ target: 'Aduna kay hilanat?', gloss: 'Hast du Fieber?' },
{ target: 'Naa ra ko diri.', gloss: 'Ich bin hier.' },
{ target: 'Tawag ta og doktor?', gloss: 'Sollen wir einen Arzt rufen?' }
],
grammarFocus: [
{ title: 'Problem und Reaktion', text: 'Die Wiederholung koppelt jedes Problem an eine konkrete Antwort.', example: 'Sakit akong ulo. Magpahuway sa.' }
]
},
'Längeres Gespräch: Planung und Familie': {
corePatterns: [
{ target: 'Kinsa imong kuyog?', gloss: 'Mit wem bist du unterwegs?' },
{ target: 'Human sa trabaho.', gloss: 'Nach der Arbeit.' },
{ target: 'Texti lang ko.', gloss: 'Schreib mir einfach.' }
],
speakingPrompts: [
{ title: 'Plan plus Rückfrage', prompt: 'Erzähle deinen Plan und frage nach Begleitung oder Uhrzeit.', cue: 'Una, moadto ko sa merkado. Kinsa imong kuyog? Human sa trabaho. Texti lang ko.' }
]
},
'Gesamtwiederholung mit Fehlerclustern': {
corePatterns: [
{ target: 'Dili ko pwede karon.', gloss: 'Ich kann heute nicht.' },
{ target: 'Pwede ugma?', gloss: 'Geht morgen?' },
{ target: 'Dili mao akong pasabot.', gloss: 'Das meinte ich nicht.' }
],
speakingPrompts: [
{ title: 'Fehlercluster Termin und Bitte', prompt: 'Kontrastiere Vergangenheit, Zukunft, Absage, Wiederholung und Missverständnis.', cue: 'Ni-adto ko ganiha. Mo-adto ko ugma. Dili ko pwede karon. Palihug ka mubalik?' }
]
},
'Praktische Übung: Markt + Familie': {
corePatterns: [
{ target: 'Pila tanan?', gloss: 'Wie viel insgesamt?' },
{ target: 'Barato ra.', gloss: 'Es ist günstig.' },
{ target: 'Mahal ra.', gloss: 'Es ist zu teuer.' }
],
grammarFocus: [
{ title: 'Kaufen mit Grund', text: 'Ein Marktsatz wird alltagstauglich, wenn Preis, Menge und Grund zusammenkommen.', example: 'Mupalit ko para sa pamilya.' }
]
},
'Abschlusstest Wortschatz aktiv': {
corePatterns: [
{ target: 'Sulod lang.', gloss: 'Komm herein.' },
{ target: 'Sakit akong ulo.', gloss: 'Mein Kopf tut weh.' },
{ target: 'Tagpila ni?', gloss: 'Wie viel kostet das?' }
],
grammarFocus: [
{ title: 'Aktiver Wortschatztest', text: 'Der Test verlangt nicht nur Einzelwörter, sondern kurze abrufbare Satzanker.', example: 'Tubig -> Gusto ka og tubig?' }
]
},
'Abschlussprüfung Grundphase': {
corePatterns: [
{ target: 'Sulod lang. Lingkod sa.', gloss: 'Komm herein. Setz dich erst einmal.' },
{ target: 'Sakit imong ulo? Magpahuway sa.', gloss: 'Tut dein Kopf weh? Ruh dich erst einmal aus.' },
{ target: 'Tagpila ni? Mupalit ko para sa pamilya.', gloss: 'Wie viel kostet das? Ich kaufe für die Familie.' }
],
grammarFocus: [
{ title: 'Prüfung über Szenen', text: 'Die Abschlussprüfung bewertet, ob du mehrere bekannte Muster zu einer verständlichen Szene verbinden kannst.', example: 'Kumusta ka? Nikaon na ka? Magpahuway sa.' }
]
},
'Kultur: Höflichkeit, Familie, Alltag': {
corePatterns: [
{ target: 'Sunod na lang.', gloss: 'Dann ein anderes Mal.' },
{ target: 'Tabang ta.', gloss: 'Lass uns helfen.' },
{ target: 'Salamat sa pagsabot.', gloss: 'Danke fürs Verständnis.' }
],
speakingPrompts: [
{ title: 'Kultur in Antwortwahl', prompt: 'Formuliere eine direkte deutsche Ablehnung weicher auf Bisaya.', cue: 'Dili lang sa karon. Sunod na lang. Salamat sa pagsabot.' }
]
}
};
function normalizePatternKey(entry) {
return typeof entry === 'string' ? entry : entry?.target;
}
function mergePatternLists(base = [], extra = []) {
const merged = [];
const seen = new Set();
for (const entry of [...base, ...extra]) {
const key = normalizePatternKey(entry);
if (!key || seen.has(key)) continue;
seen.add(key);
merged.push(entry);
}
return merged;
}
function mergeDidactics(base = {}, enrichment = {}) {
return {
...base,
...enrichment,
learningGoals: [...(base.learningGoals || []), ...(enrichment.learningGoals || [])],
corePatterns: mergePatternLists(base.corePatterns || [], enrichment.corePatterns || []),
grammarFocus: [...(base.grammarFocus || []), ...(enrichment.grammarFocus || [])],
speakingPrompts: [...(base.speakingPrompts || []), ...(enrichment.speakingPrompts || [])],
practicalTasks: [...(base.practicalTasks || []), ...(enrichment.practicalTasks || [])]
};
}
const BISAYA_DIDACTICS_24_43_BASE = {
'Gefühle im Alltag': {
learningGoals: [
'Eigene Gefühle mit kurzen, natürlichen Sätzen ausdrücken.',
@@ -538,3 +797,10 @@ export const BISAYA_DIDACTICS_24_43 = {
]
}
};
export const BISAYA_DIDACTICS_24_43 = Object.fromEntries(
Object.entries(BISAYA_DIDACTICS_24_43_BASE).map(([title, didactics]) => [
title,
mergeDidactics(didactics, BISAYA_DIDACTICS_24_43_ENRICHMENTS[title])
])
);