Surface "Your name" as its own top Settings section

The name field was the first row of the third "Transcription" section, below
the fold — users couldn't find where to set their name (it's the setting that
labels the mic channel and reserves the name so the LLM never assigns it to
another speaker). Move it into a dedicated "Your name" section at the top of
Settings, and show an orange nudge while it's still the placeholder "Me"/empty.
This commit is contained in:
Grant Gilliam
2026-06-08 13:25:33 -05:00
parent a95f27ecd1
commit a2328de4d3
+22 -3
View File
@@ -7,6 +7,21 @@ struct SettingsView: View {
var body: some View { var body: some View {
Form { 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 its never assigned to another speaker.")
.font(.caption)
.foregroundStyle(.secondary)
}
}
Section("SparkControl backend") { Section("SparkControl backend") {
TextField("Base URL", text: $settings.backendBaseURL) TextField("Base URL", text: $settings.backendBaseURL)
.textFieldStyle(.roundedBorder) .textFieldStyle(.roundedBorder)
@@ -22,8 +37,6 @@ struct SettingsView: View {
} }
Section("Transcription") { Section("Transcription") {
TextField("Your name", text: $settings.selfName)
.textFieldStyle(.roundedBorder)
Toggle("Auto-send recordings to backend", isOn: $settings.autoSendOnStop) Toggle("Auto-send recordings to backend", isOn: $settings.autoSendOnStop)
Toggle("Reconcile speakers (merge splits + name from content)", isOn: $settings.reconcileSpeakers) Toggle("Reconcile speakers (merge splits + name from content)", isOn: $settings.reconcileSpeakers)
Toggle("Build readable recap (topics + highlights)", isOn: $settings.recapEnabled) Toggle("Build readable recap (topics + highlights)", isOn: $settings.recapEnabled)
@@ -33,7 +46,7 @@ struct SettingsView: View {
} }
Button("Manage…") { TemplatesWindow.shared.show(settings: settings) } 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) .font(.caption)
.foregroundStyle(.secondary) .foregroundStyle(.secondary)
} }
@@ -63,6 +76,12 @@ struct SettingsView: View {
.navigationTitle("Settings") .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<Bool> { private func binding(for key: String) -> Binding<Bool> {
Binding( Binding(
get: { settings.adapterEnabled[key] ?? true }, get: { settings.adapterEnabled[key] ?? true },