Skip to content

feat: compact single-panel widget with logo bolt - #60

Merged
TimInTech merged 3 commits into
mainfrom
feat/single-panel-widget-branding
Sep 16, 2026
Merged

TimInTech merged 3 commits into
mainfrom
feat/single-panel-widget-branding

Conversation

@TimInTech

@TimInTech TimInTech commented Sep 15, 2026

Copy link
Copy Markdown
Owner

Summary

The main window is now a single compact, frameless dark surface instead of a native window with separate floating panels. The PR now also carries the documentation, screenshots and settings fixes that go with it.

  • One surface: title, minimize/close, gold microphone with recording waves and processing ring, status/timer and the tool row (editor, history, TTS, settings, overflow menu). Workflows, collect dictation and discard stay in the transient popup.
  • Window chrome: frameless; the window moves via QWindow.startSystemMove() (works on Wayland). The close button hides to the tray, minimize minimizes the real window, and the tray restores a minimized window with showNormal().
  • Compact size: 242 × 213 px on GNOME/Wayland (previously 288 × 300 px with two floating surfaces).
  • Branding: the official Blitztext bolt is read locally from app/assets/logo-mark-dark.svg (identical to the website brand asset) and cut out of the microphone capsule as a vector path. No network access at runtime.
  • Crash fix: a PyQt6 QPoint/QPointF TypeError aborted RecordButton.paintEvent.
  • Neumorphic restyling of the compose, history and TTS windows.

Settings and i18n fixes (9213108)

  • The API key status word was hardcoded German, so the English settings tab read "Status: nicht gesetzt".
  • Emoji density offered the raw German config values in both languages; the caption is translated now while the stored value stays wenig/mittel/viel.
  • Qt swallowed the & in captions such as "Insert & Close", "Text & AI" and "Dictate & improve". The new i18n.tq() escapes it for tabs, buttons and menu actions.
  • Field help now reaches editors that sit inside layout rows (base URL), so keyboard and screen reader users keep the HTTPS guidance. This addresses the open review comment on app/blitztext_linux.py.

Documentation and assets (0de779a)

  • All screenshots are generated into docs/screenshots/linux/ again; the legacy aliases (main-window*, settings-ai-workflows*, Banner.png) are gone and there is exactly one current set.
  • New views: idle / recording / processing / options menu, the compose prompt editor, and a regenerated banner, social preview and demo GIFs.
  • README.md and README.de.md document the widget, the five text actions (instead of the removed nine writing-style presets), the current workflow names and the "Text & AI" settings tab.
  • Settings screenshots are sized per tab, and the read-aloud shot shows Piper instead of a cloud error.
  • scratch/ and prototypes/ are ignored locally.

Test plan

  • WHISPER_GUI_TESTS=1 QT_QPA_PLATFORM=offscreen pytest: 684 passed
  • QT_QPA_PLATFORM=offscreen pytest: 547 passed, 137 skipped
  • git diff --check and py_compile clean
  • Real GNOME/Wayland state cycle (idle → recording → transcribing → AI processing → idle) without paint errors, stable window size
  • App started via ./run.sh without errors
  • Every image referenced by both READMEs exists; no orphaned screenshots left
  • Manual check on GNOME: drag, minimize, restore from tray

Related

The website repository TimInTech/blitztextweb was updated in lockstep (same screenshots, same wording) in 1428b8a.

🤖 Generated with Claude Code

https://claude.ai/code/session_01QpE6yNpSWEnYfvJd4hyJK3

Merge the main window into one frameless dark surface: title and
window controls, gold microphone with recording waves and processing
ring, status/timer and the tool row (editor, history, TTS, settings,
overflow menu). Workflows, collect dictation and discard stay in the
transient popup.

- Frameless window, moved via QWindow.startSystemMove (Wayland)
- Close button hides to tray, minimize minimizes the real window
- Tray restores a minimized window with showNormal()
- Compact geometry: 242x213 px on GNOME/Wayland
- Official Blitztext bolt read locally from app/assets/logo-mark-dark.svg
  and cut out of the microphone capsule as a vector path
- Fix PyQt6 QPoint/QPointF TypeError that aborted RecordButton.paintEvent
- Neumorphic restyling of compose, history and TTS windows

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QpE6yNpSWEnYfvJd4hyJK3

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: eff35f831c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread app/blitztext_linux.py Outdated
TimInTech and others added 2 commits September 16, 2026 05:40
The API key status word was hardcoded German, so the English settings tab
showed "Status: nicht gesetzt". Emoji density offered the raw German config
values ("wenig/mittel/viel") in both languages. Qt also swallowed the "&" in
captions such as "Insert & Close", "Text & AI" and "Dictate & improve",
because tabs, buttons and menu actions read it as a mnemonic marker.

- add settings.api_key.status_set/status_unset and emoji density captions
- translate the emoji density combo while storing the language independent value
- add i18n.tq() and use it for tab, button and QAction captions
- attach field help to editors that sit inside layout rows (base URL), so
  keyboard and screen reader users keep the HTTPS guidance

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The READMEs still described the old main window, the nine writing-style
presets and the former workflow brand names, and the regenerated assets
lived in a separate single-panel/ folder next to stale duplicates.

- generate every screenshot into docs/screenshots/linux again and drop the
  legacy aliases (main-window*, settings-ai-workflows*, Banner.png)
- add the new widget states, the compose prompt editor and the options menu
- document the five text actions, the current workflow names and the
  "Text & AI" settings tab in README.md and README.de.md
- size the settings dialog per tab and show Piper instead of a cloud error
- ignore the local scratch/ and prototypes/ directories

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@TimInTech
TimInTech merged commit 2fd6a6e into main Sep 16, 2026
9 checks passed
@TimInTech
TimInTech deleted the feat/single-panel-widget-branding branch September 16, 2026 03:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant