Skip to content

UX review: Dynamic Type fixes + website accuracy & polish#2

Merged
lukataylo merged 4 commits into
mainfrom
claude/app-ux-review-go33jf
Jun 18, 2026
Merged

UX review: Dynamic Type fixes + website accuracy & polish#2
lukataylo merged 4 commits into
mainfrom
claude/app-ux-review-go33jf

Conversation

@lukataylo

@lukataylo lukataylo commented Jun 9, 2026

Copy link
Copy Markdown
Owner

A UX-review pass across the app and the marketing site.

App (Swift)

The codebase already handles Dynamic Type, VoiceOver, and Reduce Motion/Transparency deliberately — these fix the few outliers.

  • Ask Halen detail view used fixed point sizes (size: 10.512) for reading text, so it stayed frozen when the user increases system text size. Converted to semantic .caption/.callout; folded the bespoke cardHeader into the shared cardLabel.
  • Plugin Store "External"/"Example" tag was size: 8 — below legible threshold and non-scaling → .caption2.
  • Ask Halen palette: added a Send (⏎) tooltip to match the Close/Insert shortcut hints.

Website

  • Privacy page accuracy (priority). The page claimed "only loopback connections" and "no auto-updater", but the app ships Sparkle (SUFeedURL = halen.dev/appcast.xml, daily checks, signed DMGs from GitHub). Added a Software updates section honestly disclosing the one outbound connection (static appcast + EdDSA-verified DMG, no content/identifiers sent, how to disable), corrected the loopback/updater claims and the callout, and added a "Last updated" line + meta fix.
  • Copy — 4 one-word, high-leverage swaps: Plugins → Tools (demo H2), sits → lives (manifesto, matches README), only → native (download specs), classifier → model (drops ML jargon).
  • Demo: relabelled the duplicate second "Word Replacements" chip to "Banned Words"; polished product-mockup model tags gemma4:e4b → Gemma 4 E4B (left the terminal-style swarm tags lowercase); fixed the swarm's 26b → 27b to match the CTA card.
  • Removed interactions.js — a stale, unreferenced demo script.

Test plan

  • App: Ask Halen detail + Store tags render and scale with Larger Accessibility Sizes; Send tooltip shows
  • Site: privacy page reads accurately; demo rail shows distinct chips; copy renders correctly
  • No broken layout on index.html / privacy.html

App changes built/tested on macOS — prepared in a Linux container with no Swift toolchain, so the app boxes need a local Apple Silicon run. Website changes are static HTML/CSS/JS.

https://claude.ai/code/session_01X7Ph1RYZ13kMwTeeEKe6i8

claude added 2 commits June 9, 2026 20:11
The Ask Halen plugin detail view and the Plugin Store's "External"/
"Example" tag used fixed point sizes for reading text (size 8–12),
unlike the rest of the app which uses semantic fonts that respect
Dynamic Type / Larger Accessibility Sizes. Increasing the system text
size left these labels frozen and, in the tag's case, near-illegible
at 8pt.

- Ask Halen detail: convert hero/description/toggle/privacy text to
  .caption and .callout; fold the bespoke `cardHeader` into the shared
  `cardLabel` helper so section labels match every other detail view.
- Plugin Store tag: size-8 → scalable .caption2.
- Ask Halen palette: add a "Send (⏎)" tooltip on the send button to
  match the Close and Insert buttons' shortcut hints.
Privacy page was the priority — it claimed "only loopback connections"
and "no auto-updater", but the app ships Sparkle (SUFeedURL =
halen.dev/appcast.xml, automatic daily checks, signed DMGs from GitHub
Releases). An inaccurate privacy page undermines the whole trust pitch,
so this honestly discloses the one outbound connection:

- New "Software updates" section documenting the Sparkle check: what's
  fetched (static appcast + signed DMG), EdDSA verification, that no
  content/identifiers are sent, and how to disable automatic checks.
- Correct the "only loopback" / "no auto-updater" claims and the
  callout ("nothing you write leaves the machine").
- Add a "Last updated" line + meta description fix.

Copy (4 one-word, high-leverage):
- "Plugins for the cursor" → "Tools for the cursor" (less jargon)
- "Halen sits in your menu bar" → "lives" (matches README voice)
- "Apple Silicon only" → "Apple Silicon native" (reframe at the CTA)
- "a small local classifier" → "model" (drop ML jargon)

Demo:
- Rail showed two identical "Word Replacements" chips; relabel the
  style path "Banned Words" so it reads as a distinct capability.
- Polish the product-mockup model tags "gemma4:e4b" → "Gemma 4 E4B"
  (left the terminal-style swarm tags lowercase, where they belong);
  fix the swarm's "gemma4:26b" → "27b" to match the CTA model card.

Remove interactions.js — a stale, unreferenced demo script (the live
demo is the inline script in index.html).
@lukataylo lukataylo changed the title Scale Ask Halen detail + store tag text with Dynamic Type UX review: Dynamic Type fixes + website accuracy & polish Jun 9, 2026
claude added 2 commits June 9, 2026 20:53
Wiki + README accuracy pass.

Privacy (docs/wiki/privacy.md) — same fix already applied to the
website: the page claimed egress "all hit localhost" and "no
auto-updater", but Halen ships Sparkle (daily check of
halen.dev/appcast.xml, signed DMGs from GitHub Releases).
- Intro now scopes the promise to "nothing you write leaves the
  machine" and names the two content-free internet requests.
- New "Software-update check" bullet documenting Sparkle (static
  appcast, EdDSA-verified DMG, empty request body, how to disable).
- Drop the false "no auto-updater" claim.
- Notifications row: add Ask Halen (clipboard-fallback alerts), which
  the table omitted.

README:
- "small bundled model" → "small local model … downloaded once on
  first use", reconciling the contradiction with the existing
  "Model weights aren't bundled; they download from Hugging Face".

architecture.md:
- Stale stats: ~13k → ~20k lines, 168 → 169 tests (verified).
- Clarify that the ten in-process plugin classes back the six
  marketplace entries after the v0.3 merges.

getting-started.md:
- Notifications section was titled "Meeting Prep only"; Ask Halen and
  the ;reply drafter also post fallback notifications.

index.html:
- Revert last commit's swarm tag "gemma4:27b" → "gemma4:26b" to match
  the code-true Ollama large-tier tag (OllamaInferenceClient maps
  large → gemma4:26b; getting-started's `ollama pull` uses 26b too).
The CTA model card listed "Gemma 4 27B" — the only 27B reference in the
repo. Verified against Google's Gemma 4 release (E2B / E4B / 26B MoE /
31B Dense): there is no 27B. The code's large tier is the 26B MoE
(OllamaInferenceClient → gemma4:26b; ModelTier → google/gemma-4-26B-A4B-it,
the variant that activates ~4B params per token). Aligns the card with
the code and every other surface, all of which already say 26b.
@lukataylo lukataylo merged commit 7415e00 into main Jun 18, 2026
1 check passed
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.

2 participants