From 279456f45c40b069ae9b6bcc418d07bbae18fc62 Mon Sep 17 00:00:00 2001
From: Braden Wong <13159333+braden-w@users.noreply.github.com>
Date: Sat, 20 Jun 2026 17:55:37 -0700
Subject: [PATCH 1/3] feat(whispering): redesign first-run onboarding as a
two-column layout
The setup screen wore the narrow max-w-lg centered shape meant for the
capture column, so a tall setup card sat stranded beside ~560px of dead
horizontal space and, with sm:py-0, hugged the top and bottom window
edges.
Split the first-run branch into a two-column grid: a left value-prop
column (hero plus Private/On-device/Open-source trust items) beside the
existing setup card on the right, stacking to a single column below lg.
The hero is now a shared snippet so the capture view keeps its centered
single-column layout. Columns are top-aligned so the headings share a
line, and the container always keeps vertical padding so content never
touches the window edges.
---
apps/whispering/src/routes/(app)/+page.svelte | 492 ++++++++++--------
1 file changed, 278 insertions(+), 214 deletions(-)
diff --git a/apps/whispering/src/routes/(app)/+page.svelte b/apps/whispering/src/routes/(app)/+page.svelte
index 45d18a73cb..50b0161f28 100644
--- a/apps/whispering/src/routes/(app)/+page.svelte
+++ b/apps/whispering/src/routes/(app)/+page.svelte
@@ -2,10 +2,14 @@
import { Button } from '@epicenter/ui/button';
import { confirmationDialog } from '@epicenter/ui/confirmation-dialog';
import { FileDropZone } from '@epicenter/ui/file-drop-zone';
+ import * as Item from '@epicenter/ui/item';
import * as Kbd from '@epicenter/ui/kbd';
import { Link } from '@epicenter/ui/link';
import * as SectionHeader from '@epicenter/ui/section-header';
import * as ToggleGroup from '@epicenter/ui/toggle-group';
+ import Cpu from '@lucide/svelte/icons/cpu';
+ import Heart from '@lucide/svelte/icons/heart';
+ import ShieldCheck from '@lucide/svelte/icons/shield-check';
import XIcon from '@lucide/svelte/icons/x';
import { createQuery } from '@tanstack/svelte-query';
import type { UnlistenFn } from '@tauri-apps/api/event';
@@ -179,10 +183,15 @@
- {transcriptionReadiness.primaryIssue ?? - 'Choose how Whispering turns your speech into text.'} -
-+ {transcriptionReadiness.primaryIssue ?? + 'Choose how Whispering turns your speech into text.'} +
+
- {#if manualShortcutLabel}
- Click the microphone to record{tauri ? ' here' : ''}, or press
-
+
- {#if vadShortcutLabel} - Click the microphone to listen{tauri ? ' here' : ''}, or press +
+ {#if manualShortcutLabel}
+ Click the microphone to record{tauri ? ' here' : ''}, or press
+
+
+ {#if vadShortcutLabel}
+ Click the microphone to listen{tauri ? ' here' : ''}, or press
+
+
+ {#if !tauri}
+ Tired of switching tabs?
-
- {#if !tauri} - Tired of switching tabs? - - Get the native desktop app - - {/if} -
+