From 51b275a5d54fdf5a413699709de5fd82088aeada Mon Sep 17 00:00:00 2001 From: vriesd Date: Sat, 5 Sep 2026 01:21:28 +0200 Subject: [PATCH 1/2] feat(ui): redesign the Echo workspace for 1.0 --- CHANGELOG.md | 12 ++ Cargo.lock | 12 +- Cargo.toml | 2 +- docs/qa/echo-1.0/README.md | 40 +++++ docs/qa/echo-1.0/home-dark.png | Bin 0 -> 51936 bytes docs/qa/echo-1.0/home-light.png | Bin 0 -> 50849 bytes frontend/e2e/design.spec.ts | 117 +++++++++++++++ frontend/scripts/capture-design.mjs | 40 +++++ frontend/src/App.test.tsx | 19 +++ frontend/src/App.tsx | 47 +++--- frontend/src/app/AppHistory.test.tsx | 3 +- frontend/src/home/HomeView.tsx | 100 +++++++------ frontend/src/home/SetupChecklist.tsx | 30 ++-- frontend/src/styles/base.css | 15 +- frontend/src/styles/shell.css | 84 ++++------- frontend/src/styles/tokens.css | 95 ++++++------ frontend/src/styles/view-foundations.css | 44 ++---- frontend/src/styles/view-polish.css | 177 +++++++++++------------ frontend/src/styles/view-responsive.css | 42 +++--- 19 files changed, 533 insertions(+), 346 deletions(-) create mode 100644 docs/qa/echo-1.0/README.md create mode 100644 docs/qa/echo-1.0/home-dark.png create mode 100644 docs/qa/echo-1.0/home-light.png create mode 100644 frontend/e2e/design.spec.ts create mode 100644 frontend/scripts/capture-design.mjs diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ac5bcb3..7adbcc39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## v1.0.0 + +Echo 1.0 introduces a redesigned desktop workspace for private, local dictation. + +- Home, History, Dictionary, and Settings share warm light and charcoal dark themes, clearer typography, consistent controls, and quieter borders. +- Labeled navigation stays visible at the default and minimum desktop window sizes. Compact windows keep all four section names available. +- Home puts a labeled recording action above a full-width transcript, with recent history and compact usage counts below. A new View history action opens saved transcripts directly. +- Recording, transcription, text insertion, and failure have distinct messages. Recording controls wait while Echo processes or inserts text, and recording retains its live level meter and elapsed-time limit. +- Setup progress takes less space while keeping microphone, speech, and shortcut repair actions visible. Keyboard focus, reduced motion, and text contrast have browser regression coverage. + +Existing settings, models, history, dictionary entries, and the dictation shortcut remain compatible. No data migration is required. Linux Debian, RPM, AppImage, and standalone binary downloads remain available. + ## v0.14.15 - Dictionary replacements now preserve shorter valid matches when a longer overlapping phrase takes priority. Adding unrelated dictionary entries no longer changes which replacements apply. diff --git a/Cargo.lock b/Cargo.lock index db000f38..ea39e43e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1166,7 +1166,7 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "echo" -version = "0.14.15" +version = "1.0.0" dependencies = [ "bzip2", "cpal", @@ -1190,7 +1190,7 @@ dependencies = [ [[package]] name = "echo-core" -version = "0.14.15" +version = "1.0.0" dependencies = [ "caseless", "fs2", @@ -1204,7 +1204,7 @@ dependencies = [ [[package]] name = "echo-desktop" -version = "0.14.15" +version = "1.0.0" dependencies = [ "ashpd", "clap", @@ -1223,7 +1223,7 @@ dependencies = [ [[package]] name = "echo-ipc" -version = "0.14.15" +version = "1.0.0" dependencies = [ "echo", "echo-core", @@ -1234,7 +1234,7 @@ dependencies = [ [[package]] name = "echo-ipc-gen" -version = "0.14.15" +version = "1.0.0" dependencies = [ "echo-ipc", ] @@ -6087,7 +6087,7 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xtask" -version = "0.14.15" +version = "1.0.0" dependencies = [ "png 0.18.1", "resvg", diff --git a/Cargo.toml b/Cargo.toml index d456ffc7..135d200c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" license = "MIT" repository = "https://github.com/ddv1982/echo" rust-version = "1.89" -version = "0.14.15" +version = "1.0.0" [workspace.lints.rust] unsafe_code = "forbid" diff --git a/docs/qa/echo-1.0/README.md b/docs/qa/echo-1.0/README.md new file mode 100644 index 00000000..2a15b1f3 --- /dev/null +++ b/docs/qa/echo-1.0/README.md @@ -0,0 +1,40 @@ +# Echo 1.0 frontend + +Echo uses a full-width workspace with labeled navigation and a text recording button. The latest transcript sits above recent history and compact usage counts. Warm light and charcoal dark themes share the same controls and spacing. + +We compared a sidebar studio with a horizontal workspace at the 920 × 680 default window and 760 × 560 minimum. The horizontal layout preserves more room for transcripts and Settings. The final design uses that layout, the studio's warm palette, and a distinct recording color. Existing controllers and generated IPC types still own application state. + +![Home in light mode](home-light.png) + +![Home in dark mode](home-dark.png) + +## Reproduce the screenshots + +The browser preview uses disposable fixtures, not real audio or local transcripts. These Home screenshots represent completed shortcut verification. The capture command also saves setup, recording, History, Dictionary, and Settings at four widths in both themes. + +Start the preview in one terminal: + +```sh +npm run dev --prefix frontend -- --host 127.0.0.1 --port 4178 +``` + +Run the capture in another terminal from the repository root: + +```sh +node frontend/scripts/capture-design.mjs +``` + +Images are written to `frontend/test-results/design`. Pass a destination as the first argument to choose another directory. + +## Verify interactions + +```sh +./scripts/verify-settings-ux.sh +npm run build --prefix frontend +npm run lint --prefix frontend +npm run test --prefix frontend +``` + +The browser suite checks navigation at 390, 680, 681, 760, 920, and 1280 pixels, keyboard recording, processing controls, search, dictionary edits and long phrases, dialog focus, reduced motion, and secondary-text contrast. The existing Settings suite also checks breakpoint edges, microphone controls, theme selection, and long diagnostics. + +Browser verification covers the React interface with the preview API. Native microphone capture, global shortcuts, text insertion, and Linux packaging remain covered by the repository's native tests and release workflows. diff --git a/docs/qa/echo-1.0/home-dark.png b/docs/qa/echo-1.0/home-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..94eb1564cb35e4bf43f0de2219e8486e9c3fedf0 GIT binary patch literal 51936 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 literal 0 HcmV?d00001 diff --git a/docs/qa/echo-1.0/home-light.png b/docs/qa/echo-1.0/home-light.png new file mode 100644 index 0000000000000000000000000000000000000000..13f2e545156285623388f0671432ca4a7c768915 GIT binary patch literal 50849 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 { + await page.addInitScript((mode) => localStorage.setItem('echo-theme', mode), theme) + for (const width of [390, 680, 681, 760, 920, 1280]) { + await page.setViewportSize({ width, height: 680 }) + await page.goto('/') + const nav = page.getByRole('navigation', { name: 'Echo sections' }) + for (const name of ['Home', 'History', 'Dictionary', 'Settings']) { + const button = nav.getByRole('button', { name, exact: true }) + await expect(button.locator('span')).toBeVisible() + await button.click() + await expect(button).toHaveAttribute('aria-current', 'page') + if (name !== 'Home') await expect(page.getByRole('heading', { name, exact: true })).toBeVisible() + } + const fits = await page.evaluate(() => { + const buttons = [...document.querySelectorAll('.topbar button')] + const bounds = buttons.map((button) => button.getBoundingClientRect()) + return bounds.every((a, index) => a.left >= 0 && a.right <= innerWidth && a.height >= 32 && + bounds.every((b, other) => index === other || a.right <= b.left || b.right <= a.left || a.bottom <= b.top || b.bottom <= a.top)) + }) + expect(fits, `header controls at ${width}px`).toBe(true) + } + }) + + test(`secondary text stays readable on every ${theme} surface`, async ({ page }) => { + await page.addInitScript((mode) => localStorage.setItem('echo-theme', mode), theme) + await page.goto('/') + await expect(page.locator('html')).toHaveAttribute('data-theme', theme) + const ratios = await page.evaluate(() => { + const sample = document.createElement('span') + document.body.append(sample) + const luminance = (token: string) => { + sample.style.color = `hsl(var(${token}))` + const [red, green, blue] = getComputedStyle(sample).color.match(/[\d.]+/g)?.slice(0, 3).map(Number) ?? [] + if (red === undefined || green === undefined || blue === undefined) throw new Error(`Cannot resolve ${token}`) + const linear = (channel: number) => { + const value = channel / 255 + return value <= 0.04045 ? value / 12.92 : ((value + 0.055) / 1.055) ** 2.4 + } + return linear(red) * 0.2126 + linear(green) * 0.7152 + linear(blue) * 0.0722 + } + const text = luminance('--text-tertiary') + const result = ['--surface-app', '--surface-card', '--surface-raised'].map((surface) => { + const background = luminance(surface) + return { surface, ratio: (Math.max(text, background) + 0.05) / (Math.min(text, background) + 0.05) } + }) + sample.remove() + return result + }) + for (const { surface, ratio } of ratios) expect(ratio, `${theme} ${surface}`).toBeGreaterThanOrEqual(4.5) + }) +} + +test('recording, processing and history work with the keyboard', async ({ page }) => { + await page.goto('/') + const start = page.getByRole('button', { name: 'Start recording', exact: true }) + await start.focus() + await expect(start).toBeFocused() + await page.keyboard.press('Enter') + const stop = page.getByRole('button', { name: 'Stop and transcribe', exact: true }) + await expect(stop).toBeFocused() + await expect(page.getByRole('heading', { name: 'Listening…', exact: true })).toBeVisible() + await expect(page.locator('.readout-timer')).toContainText('/ 10:00') + await page.keyboard.press('Enter') + await expect(page.getByRole('button', { name: 'Transcribing', exact: true })).toBeDisabled() + await expect(start).toBeEnabled() + await page.getByRole('button', { name: 'View history', exact: true }).click() + await expect(page.getByRole('heading', { name: 'History', exact: true })).toBeVisible() + await page.getByRole('textbox', { name: 'Search history' }).fill('no transcript matches this phrase') + await expect(page.getByText('No matching transcripts', { exact: true })).toBeVisible() +}) + +test('dictionary edits and voice dialog preserve focus through the redesigned shell', async ({ page }) => { + await page.goto('/') + await page.getByRole('button', { name: 'Dictionary', exact: true }).click() + await page.getByRole('textbox', { name: 'What Echo hears', exact: true }).fill('design studio') + await page.getByRole('textbox', { name: 'What Echo should write', exact: true }).fill('Design Studio') + await page.getByRole('button', { name: 'Add', exact: true }).click() + const remove = page.getByRole('button', { name: 'Remove Design Studio', exact: true }) + await expect(remove).toBeVisible() + await page.getByRole('button', { name: 'Home', exact: true }).click() + await page.getByRole('button', { name: 'Dictionary', exact: true }).click() + await expect(remove).toBeVisible() + const trigger = page.getByRole('button', { name: 'Teach by voice', exact: true }) + await trigger.click() + await expect(page.getByRole('dialog', { name: 'Teach Echo by voice' })).toBeVisible() + await page.keyboard.press('Escape') + await expect(trigger).toBeFocused() + await remove.click() + await expect(remove).toHaveCount(0) +}) + +test('reduced motion stops the processing animation', async ({ page }) => { + await page.emulateMedia({ reducedMotion: 'reduce' }) + await page.goto('/') + await page.getByRole('button', { name: 'Start recording', exact: true }).click() + await page.getByRole('button', { name: 'Stop and transcribe', exact: true }).click() + const spinner = page.locator('.processing-icon') + await expect(spinner).toBeVisible() + const duration = await spinner.evaluate((node) => getComputedStyle(node).animationDuration) + expect(parseFloat(duration)).toBeLessThanOrEqual(0.00001) +}) + +test('long dictionary phrases wrap inside a narrow window', async ({ page }) => { + await page.setViewportSize({ width: 390, height: 844 }) + await page.goto('/') + await page.getByRole('button', { name: 'Dictionary', exact: true }).click() + await page.getByRole('textbox', { name: 'What Echo hears', exact: true }).fill('s'.repeat(200)) + await page.getByRole('textbox', { name: 'What Echo should write', exact: true }).fill('W'.repeat(200)) + await page.getByRole('button', { name: 'Add', exact: true }).click() + await expect(page.getByRole('button', { name: `Remove ${'W'.repeat(200)}`, exact: true })).toBeVisible() + const fits = await page.locator('.dictionary-row').last().evaluate((node) => + node.scrollWidth <= node.clientWidth && document.documentElement.scrollWidth <= innerWidth) + expect(fits).toBe(true) +}) diff --git a/frontend/scripts/capture-design.mjs b/frontend/scripts/capture-design.mjs new file mode 100644 index 00000000..946914f1 --- /dev/null +++ b/frontend/scripts/capture-design.mjs @@ -0,0 +1,40 @@ +import { mkdir } from 'node:fs/promises' +import { resolve } from 'node:path' +import { chromium } from '@playwright/test' + +const destination = resolve(process.argv[2] ?? resolve(import.meta.dirname, '../test-results/design')) +const baseURL = process.env.ECHO_PREVIEW_URL ?? 'http://127.0.0.1:4178' +await mkdir(destination, { recursive: true }) +const browser = await chromium.launch() +try { + for (const theme of ['light', 'dark']) { + for (const [width, height] of [[920, 680], [760, 560], [390, 844], [1440, 1000]]) { + const page = await browser.newPage({ viewport: { width, height }, reducedMotion: 'reduce' }) + await page.addInitScript((mode) => localStorage.setItem('echo-theme', mode), theme) + await page.goto(baseURL) + await page.getByRole('button', { name: 'Start recording', exact: true }).waitFor() + await page.getByRole('region', { name: 'Finish setup' }).waitFor() + await page.evaluate(() => document.fonts.ready) + for (const view of ['Home', 'History', 'Dictionary', 'Settings']) { + await page.getByRole('button', { name: view, exact: true }).click() + if (view === 'Settings') await page.getByRole('button', { name: 'Test selected', exact: true }).waitFor() + await page.screenshot({ path: resolve(destination, `${theme}-${width}-${view.toLowerCase()}.png`), fullPage: true }) + } + await page.evaluate(() => { + localStorage.setItem('echo-shortcut-verified-at', String(Math.floor(Date.now() / 1000))) + localStorage.setItem('echo-shortcut-verified-identity', 'portal:Super+Alt+Space') + }) + await page.reload() + await page.getByRole('button', { name: 'Start recording', exact: true }).waitFor() + await page.getByRole('region', { name: 'Finish setup' }).waitFor({ state: 'hidden' }) + await page.screenshot({ path: resolve(destination, `${theme}-${width}-home-ready.png`), fullPage: true }) + await page.getByRole('button', { name: 'Start recording', exact: true }).click() + await page.getByRole('button', { name: 'Stop and transcribe', exact: true }).waitFor() + await page.screenshot({ path: resolve(destination, `${theme}-${width}-recording.png`), fullPage: true }) + await page.close() + } + } +} finally { + await browser.close() +} +console.log(`Design screenshots saved to ${destination}`) diff --git a/frontend/src/App.test.tsx b/frontend/src/App.test.tsx index 1a1f1e5f..0176c2b9 100644 --- a/frontend/src/App.test.tsx +++ b/frontend/src/App.test.tsx @@ -318,6 +318,25 @@ describe('Echo desktop shell', () => { await waitFor(() => expect(screen.getByRole('button', { name: 'Add' })).toBeEnabled()) }) + it.each([ + ['Transcribing', 'Transcribing locally…', 'Transcribing'], + ['Injecting', 'Inserting your text…', 'Inserting text'], + ] satisfies Array<[AppStatus['phase'], string, string]>)('keeps %s visible and prevents a second recording', async (phase, title, action) => { + seedPreviewStatus({ phase }) + render() + expect(await screen.findByRole('heading', { name: title })).toBeInTheDocument() + expect(screen.getByRole('button', { name: action })).toBeDisabled() + expect(screen.queryByRole('button', { name: 'Start recording' })).not.toBeInTheDocument() + }) + + it('offers a fresh recording after a failed transcription without claiming readiness', async () => { + seedPreviewStatus({ phase: 'Failed', lastError: 'Speech engine stopped' }) + render() + expect(await screen.findByRole('heading', { name: 'Let’s try that again' })).toBeInTheDocument() + expect(screen.getByRole('button', { name: 'Start recording' })).toBeEnabled() + expect(screen.queryByRole('heading', { name: 'Ready when you are' })).not.toBeInTheDocument() + }) + it('uses the snapped recording limit on Home', async () => { seedPreviewStatus({ phase: 'Recording', diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index cfb66610..40b438f4 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -5,6 +5,7 @@ import { Home, Power, Settings, + ShieldCheck, } from 'lucide-react' import { BrandMark, StatusPill } from './app/chrome' import { useAppController } from './app/useAppController' @@ -12,7 +13,6 @@ import { DictionaryView } from './dictionary/DictionaryView' import { HistoryView } from './history/HistoryView' import { HomeView } from './home/HomeView' import { SettingsView } from './settings/SettingsView' -import { presentShortcut } from './shortcut' import type { View } from './types' const navigation: Array<{ id: View; label: string; icon: typeof Home }> = [ @@ -43,7 +43,6 @@ function App() { addDictionaryEntriesBatch, removeDictionaryEntry, } = useAppController() - const shortcut = presentShortcut(status.shortcut) return (
@@ -52,22 +51,7 @@ function App() {

Echo

-
- - -
- - -
-
-
-
Not sure what Echo hears?Say the phrase five times and review the pronunciations together.
+
Record five examples of a word or phrase.
@@ -58,7 +58,7 @@ export function DictionaryView({
Spoken phraseWritten form
{items.map((item) => (
- {item.spoken} + {item.spoken} {item.written}
diff --git a/frontend/src/history/HistoryView.tsx b/frontend/src/history/HistoryView.tsx index d8856089..fffb48b1 100644 --- a/frontend/src/history/HistoryView.tsx +++ b/frontend/src/history/HistoryView.tsx @@ -55,7 +55,7 @@ export function HistoryView({ } return (
- +