-
Willkommen
+
+
Willkommen und vielen Dank für deine Teilnahme!
{/* Info Section */}
-
Was ist das Ziel?
+
Worum geht es?
- Vielen Dank, dass Sie an diesem Experiment teilnehmen. Bevor Sie mit der Annotation beginnen, möchten wir gerne ein paar grundlegende Informationen über Sie und Ihre Erfahrung mit Dialekten sammeln.
+ Im Rahmen unserer Bachelorarbeit an der ZHAW untersuchen wir, wie authentisch ein KI-Modell Schweizerdeutsche Dialekte synthetisieren kann. Dazu sind wir auf deine Einschätzung angewiesen.
- Diese Informationen helfen uns, Ihre Annotationsergebnisse besser zu verstehen und zu bewerten. Alle Angaben werden vertraulich behandelt.
+ Deine Aufgabe ist es, kurze Audioaufnahmen anzuhören und zu bewerten, wie authentisch sie nach einem bestimmten Dialekt klingen. Es gibt dabei keine richtigen oder falschen Antworten – wichtig ist deine persönliche Einschätzung.
{/* Instructions Section */}
-
Wie funktioniert es?
+
So läuft die Teilnahme ab:
1
- Sie beantworten ein kurzes Umfrage-Formular
+ Du beantwortest zuerst ein paar kurze Fragen zu dir und deiner Erfahrung mit Schweizer Dialekten
2
- Die Antworten werden gespeichert
+ Danach folgt eine kurze Kalibrierungsphase mit echten Dialektaufnahmen
3
- Danach geht es zur Kalibrierungsphase
-
-
-
- 4
-
- Anschließend können Sie mit der Annotation beginnen
+ Anschliessend beginnt die eigentliche Bewertung der synthetischen Aufnahmen
+
+ {/* Participation Section */}
+
+
+ Du entscheidest selbst, wie viele Aufnahmen du bewertest. Die gesamte Teilnahme inklusive Formular, Kalibrierung und 50 bewerteten Aufnahmen dauert etwa 30 Minuten. Unter allen Teilnehmenden, die 50 oder mehr Aufnahmen bewertet haben, verlosen wir 3x [Platzhalter]-Gutscheine im Wert von je [x].- CHF!
+
+
+ Alle Angaben werden anonym ausgewertet und ausschliesslich zu Forschungszwecken verwendet.
+
+
+
{/* Status */}
{hasExistingAnswers && (
@@ -77,9 +82,9 @@ export default function OnboardingInfoView({
- Weiter zum Formular
+ Jetzt starten
diff --git a/src/components/OnboardingViews/OnboardingPhase.tsx b/src/components/OnboardingViews/OnboardingPhase.tsx
index 650a5d5..06be2e1 100644
--- a/src/components/OnboardingViews/OnboardingPhase.tsx
+++ b/src/components/OnboardingViews/OnboardingPhase.tsx
@@ -69,5 +69,5 @@ export default function OnboardingPhase({ experimentId }: OnboardingPhaseProps)
}
- return
;
+ return
{ scrollToTop(); setShowInfoPage(true); }} />;
}
From 5674792536d3a827c062690ff7f1104b9b19ac65 Mon Sep 17 00:00:00 2001
From: smaubio <118258478+smaubio@users.noreply.github.com>
Date: Fri, 3 Apr 2026 16:13:21 +0200
Subject: [PATCH 2/7] Improve SingleChoiceEntryView
---
.../AnnotationViews/SingleChoiceEntryView.tsx | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/src/components/AnnotationViews/SingleChoiceEntryView.tsx b/src/components/AnnotationViews/SingleChoiceEntryView.tsx
index bccd648..d66a23c 100644
--- a/src/components/AnnotationViews/SingleChoiceEntryView.tsx
+++ b/src/components/AnnotationViews/SingleChoiceEntryView.tsx
@@ -9,6 +9,7 @@ const AUTO_ADVANCE_DELAY_MS = 600;
export default function SingleChoiceEntryView({
entry,
+ index,
onSave,
isSaving,
ratingOptions,
@@ -47,7 +48,7 @@ export default function SingleChoiceEntryView({
{/* Sample header */}
- Aufnahme {entry.externalId}
+ Aufnahme {index + 1}
{fullyPlayed && (
@@ -65,14 +66,14 @@ export default function SingleChoiceEntryView({
{/* Must-listen hint */}
{!fullyPlayed && (
-
+
Bitte die Aufnahme vollständig anhören, bevor du eine Bewertung abgibst.
)}
{/* Dialect + question */}
-
@@ -109,6 +110,11 @@ export default function SingleChoiceEntryView({
);
})}
+
+ {/* Footnote */}
+
+ Vertrau deinem ersten Eindruck – klingt die Aufnahme authentisch nach diesem Dialekt? Es gibt keine richtige oder falsche Antwort.
+
);
}
From da02c73a443e0611cb2d39e6ca503f4dc90a49ec Mon Sep 17 00:00:00 2001
From: smaubio <118258478+smaubio@users.noreply.github.com>
Date: Fri, 3 Apr 2026 16:25:15 +0200
Subject: [PATCH 3/7] Improve CalibrationEntryView
---
src/components/CalibrationViews/CalibrationEntryView.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/CalibrationViews/CalibrationEntryView.tsx b/src/components/CalibrationViews/CalibrationEntryView.tsx
index bc9dd78..5537c64 100644
--- a/src/components/CalibrationViews/CalibrationEntryView.tsx
+++ b/src/components/CalibrationViews/CalibrationEntryView.tsx
@@ -87,7 +87,7 @@ export default function CalibrationEntryView({
{/* Must-listen hint */}
{!fullyPlayed && (
-
+
Bitte die Aufnahme vollständig anhören, bevor du eine Bewertung abgibst.
)}
From 990fecbcb91933a10a1c5f3e6fc6ad9bdbc07a5c Mon Sep 17 00:00:00 2001
From: smaubio <118258478+smaubio@users.noreply.github.com>
Date: Fri, 3 Apr 2026 16:46:16 +0200
Subject: [PATCH 4/7] Correct text to actual calibration size
---
src/components/CalibrationViews/CalibrationInfoView.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/CalibrationViews/CalibrationInfoView.tsx b/src/components/CalibrationViews/CalibrationInfoView.tsx
index f5f3a61..c07866d 100644
--- a/src/components/CalibrationViews/CalibrationInfoView.tsx
+++ b/src/components/CalibrationViews/CalibrationInfoView.tsx
@@ -74,7 +74,7 @@ export default function CalibrationInfoView({
{/* Participation Section */}
- Die Kalibrierung umfasst 35 Aufnahmen und dauert etwa 5–10 Minuten.
+ Die Kalibrierung umfasst 28 Aufnahmen und dauert etwa 5–10 Minuten.
From daed668a056f664506d4772fe60c7d127276bfc2 Mon Sep 17 00:00:00 2001
From: smaubio <118258478+smaubio@users.noreply.github.com>
Date: Fri, 3 Apr 2026 16:47:55 +0200
Subject: [PATCH 5/7] fix completion handler
---
.../CalibrationViews/CalibrationPageView.tsx | 23 ++++++++++++-------
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/src/components/CalibrationViews/CalibrationPageView.tsx b/src/components/CalibrationViews/CalibrationPageView.tsx
index ca0318e..ac81227 100644
--- a/src/components/CalibrationViews/CalibrationPageView.tsx
+++ b/src/components/CalibrationViews/CalibrationPageView.tsx
@@ -1,7 +1,7 @@
'use client';
import { useState, useTransition, useMemo, useEffect } from 'react';
-import Link from 'next/link';
+import { useRouter } from 'next/navigation';
import { saveCalibrationAnswers, getCalibrationAnswers } from '@/app/actions/calibration';
import { getDialectScoresFromCalibration } from '@/app/actions/calibration-scoring';
import { ExperimentCalibration } from '@/lib/model/experiment_calibration';
@@ -26,11 +26,13 @@ export default function CalibrationPageView({
entries,
experimentId,
}: CalibrationPageViewProps) {
+ const router = useRouter();
const [isPending, startTransition] = useTransition();
const [answers, setAnswers] = useState({});
const [isLoading, setIsLoading] = useState(true);
const [currentIndex, setCurrentIndex] = useState(0);
const [dialectScores, setDialectScores] = useState>({});
+ const [isCompleting, setIsCompleting] = useState(false);
// Load existing answers on component mount
useEffect(() => {
@@ -154,11 +156,16 @@ export default function CalibrationPageView({
};
const handleCompleteCalibration = async () => {
- startTransition(async () => {
- // All answers are already saved, just trigger a page reload or redirect
- // Reload the page to check calibration status again
- window.location.reload();
- });
+ setIsCompleting(true);
+
+ try {
+ await saveCalibrationAnswers(experimentId, answers);
+ router.refresh();
+ } catch (error) {
+ console.error('Error finalizing calibration:', error);
+ } finally {
+ setIsCompleting(false);
+ }
};
if (isComplete) {
@@ -192,10 +199,10 @@ export default function CalibrationPageView({
- {isPending ? 'Wird gespeichert...' : 'Zur Bewertung'}
+ {isPending || isCompleting ? 'Wird gespeichert...' : 'Zur Bewertung'}
From 9b4de446afdd268c090981271d35dd2a07c23fbe Mon Sep 17 00:00:00 2001
From: smaubio <118258478+smaubio@users.noreply.github.com>
Date: Fri, 3 Apr 2026 16:52:59 +0200
Subject: [PATCH 6/7] didnt fix, revert to previous state
---
.../CalibrationViews/CalibrationPageView.tsx | 23 +++++++------------
1 file changed, 8 insertions(+), 15 deletions(-)
diff --git a/src/components/CalibrationViews/CalibrationPageView.tsx b/src/components/CalibrationViews/CalibrationPageView.tsx
index ac81227..ca0318e 100644
--- a/src/components/CalibrationViews/CalibrationPageView.tsx
+++ b/src/components/CalibrationViews/CalibrationPageView.tsx
@@ -1,7 +1,7 @@
'use client';
import { useState, useTransition, useMemo, useEffect } from 'react';
-import { useRouter } from 'next/navigation';
+import Link from 'next/link';
import { saveCalibrationAnswers, getCalibrationAnswers } from '@/app/actions/calibration';
import { getDialectScoresFromCalibration } from '@/app/actions/calibration-scoring';
import { ExperimentCalibration } from '@/lib/model/experiment_calibration';
@@ -26,13 +26,11 @@ export default function CalibrationPageView({
entries,
experimentId,
}: CalibrationPageViewProps) {
- const router = useRouter();
const [isPending, startTransition] = useTransition();
const [answers, setAnswers] = useState