diff --git a/Ten31Transcripts/UI/SettingsView.swift b/Ten31Transcripts/UI/SettingsView.swift index 51bc5d0..be625e2 100644 --- a/Ten31Transcripts/UI/SettingsView.swift +++ b/Ten31Transcripts/UI/SettingsView.swift @@ -7,6 +7,21 @@ struct SettingsView: View { var body: some View { Form { + Section("Your name") { + TextField("Your name", text: $settings.selfName) + .textFieldStyle(.roundedBorder) + if isDefaultName { + Label("Still set to the default. Enter your real name so your own voice is labeled correctly — and so the AI never gives your name to someone else.", + systemImage: "exclamationmark.triangle.fill") + .font(.caption) + .foregroundStyle(.orange) + } else { + Text("Labels your microphone channel as you in every transcript, and reserves this name so it’s never assigned to another speaker.") + .font(.caption) + .foregroundStyle(.secondary) + } + } + Section("SparkControl backend") { TextField("Base URL", text: $settings.backendBaseURL) .textFieldStyle(.roundedBorder) @@ -22,8 +37,6 @@ struct SettingsView: View { } Section("Transcription") { - TextField("Your name", text: $settings.selfName) - .textFieldStyle(.roundedBorder) Toggle("Auto-send recordings to backend", isOn: $settings.autoSendOnStop) Toggle("Reconcile speakers (merge splits + name from content)", isOn: $settings.reconcileSpeakers) Toggle("Build readable recap (topics + highlights)", isOn: $settings.recapEnabled) @@ -33,7 +46,7 @@ struct SettingsView: View { } Button("Manage…") { TemplatesWindow.shared.show(settings: settings) } } - Text("Your name labels your mic channel. Auto-send transcribes on stop; the recap writes transcript.md + recap.html. Templates define the takeaways categories per meeting type.") + Text("Auto-send transcribes on stop; the recap writes transcript.md + recap.html. Templates define the takeaways categories per meeting type.") .font(.caption) .foregroundStyle(.secondary) } @@ -63,6 +76,12 @@ struct SettingsView: View { .navigationTitle("Settings") } + /// True while the user still has the placeholder name — drives the inline nudge. + private var isDefaultName: Bool { + let n = settings.selfName.trimmingCharacters(in: .whitespacesAndNewlines) + return n.isEmpty || n.caseInsensitiveCompare("Me") == .orderedSame + } + private func binding(for key: String) -> Binding { Binding( get: { settings.adapterEnabled[key] ?? true },