From 9dd92d225a325833014c5b6e2cf957cac7e67a07 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Jul 2026 23:56:12 +0000 Subject: [PATCH 01/11] Redesign landing page as a full one-pager in the davit.app mold Restructure the single-hero site into a scrolling page: centered hero with badge row (open source / MIT / signed & notarized) and framed screenshot, a six-card feature grid, a native split section, privacy cards, numbered install steps, and a fuller footer. Body type moves from Space Mono to a system sans for the cleaner native-app look while keeping the dark palette, pixel wordmark, and ice/hot accents. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_013mTvMH8wN7yfTntjQZhDF4 --- site/index.html | 275 ++++++++++++++++++++----- site/sitemap.xml | 2 +- site/styles.css | 516 ++++++++++++++++++++++++++++++----------------- 3 files changed, 564 insertions(+), 229 deletions(-) diff --git a/site/index.html b/site/index.html index 1652805..de15883 100644 --- a/site/index.html +++ b/site/index.html @@ -38,7 +38,7 @@ @@ -68,8 +68,8 @@ -
- +
-
- - - Blurt - -

Native macOS dictation

-

Incredibly fast, accurate voice dictation by AssemblyAI

-

- A small, open-source Mac dictation app that turns speech into - polished text in the app you're already using — cued by real Yamaha - DX7 and Roland Juno-106 synths. -

+ + + Blurt + -
    -
  • Built on the world's most accurate transcription model
  • -
  • Works in 18 languages
  • -
  • Blazing fast at <100ms
  • -
+

Incredibly fast, accurate voice dictation by AssemblyAI

+

+ Blurt is a small, native Mac app for Apple Silicon. Tap or hold a key, + speak, and polished text lands in the app you're already using — no + model downloads, no separate cleanup pass. +

- -

- Free for macOS 26+ on Apple Silicon. BYO AssemblyAI key. -

+
    +
  • Free & open source
  • +
  • MIT licensed
  • +
  • Signed & notarized
  • +
+ + +

+ Requires macOS 26 or later on Apple Silicon, plus a free + AssemblyAI API key. +

-
+
Incredibly fast, accurate voice dictation by AssemblyAI
-
+
+

Features

+

Everything you need to stop typing

+
+
+

Under 100 ms

+

+ AssemblyAI's Sync STT model responds in under 100 milliseconds, so + text lands about as soon as you stop speaking. +

+
+
+

Seriously accurate

+

+ Transcription runs on the world's most accurate speech-to-text + model — trained for real speech, not demo speech. +

+
+
+

18 languages

+

+ Dictate in the language you think in. Blurt works in 18 languages + out of the box. +

+
+
+

Works anywhere you can type

+

+ The transcript is pasted straight into the focused Mac app — + email, code, chat, anywhere with a cursor. +

+
+
+

Polished in one step

+

+ Audio goes out, clean text comes back. One API call — no model + downloads and no second LLM pass over your words. +

+
+
+

Real synth cues

+

+ Start and stop are cued by real Yamaha DX7 and Roland Juno-106 + sounds. Or turn them off and dictate in silence. +

+
+
+
+ +
+
+
+

Native

+

Built for macOS, not ported to it

+

+ Blurt is AppKit and SwiftUI all the way down — no Electron, no web + views, and zero external dependencies. The dictation engine is a + standalone Swift package behind protocol seams. +

+
    +
  • + A rebindable hotkey — tap right ⌘ to toggle, or + hold it for push-to-talk +
  • +
  • + A one-window setup that walks through Microphone, Accessibility, + and your API key +
  • +
  • A tiny overlay that stays out of the way while you speak
  • +
  • + Your API key lives in the macOS Keychain — never in a config + file +
  • +
+
+
+ Blurt's settings window with hotkey, language, and sound options +
+
+
+ +
+

Privacy

+

Private by design

+

+ Audio is captured only while you're dictating, sent over HTTPS to + AssemblyAI for transcription, and never touches disk. +

+
+
+

No audio stored

+

+ Blurt keeps no recordings and no transcripts. When the text is + pasted, it's gone. +

+
+
+

No telemetry

+

+ No crash reporting, no analytics, no usage tracking. The app + phones exactly one place: the transcription API. +

+
+
+

Your key, your account

+

+ You bring your own AssemblyAI API key, stored in the macOS + Keychain, so your usage is yours alone. +

+
+
+
+ +
+

Install

+

Up and running in a minute

+
    +
  1. + 1 +

    + Download Blurt.dmg + and drag Blurt.app into Applications. +

    +
  2. +
  3. + 2 +

    + Launch Blurt and follow setup: Microphone, Accessibility, and your + AssemblyAI API key + (free tier available). +

    +
  4. +
  5. + 3 +

    + Dictate with right ⌘ — tap to toggle, hold for + push-to-talk. +

    +
  6. +
+ +

+ Prefer to build it yourself? Blurt is MIT licensed — + clone the repo and + run scripts/dev-build.sh. +

+
+
+ + -
+ + diff --git a/site/sitemap.xml b/site/sitemap.xml index 6d6a166..ab1be1d 100644 --- a/site/sitemap.xml +++ b/site/sitemap.xml @@ -2,7 +2,7 @@ https://blurtblurt.com/ - 2026-07-01 + 2026-07-07 monthly 1.0 diff --git a/site/styles.css b/site/styles.css index bd04944..9a508f6 100644 --- a/site/styles.css +++ b/site/styles.css @@ -1,20 +1,24 @@ -/* Blurt — compact pixel-neon landing page */ +/* Blurt — dark, native-app landing page */ :root { - --void: #09090e; - --panel: #14141c; - --panel-2: #20202d; - --line: #2b2b3e; + --void: #0a0a0f; + --panel: #12121a; + --panel-2: #1a1a26; + --line: #26263a; --ice: #00d8ef; --hot: #f32a91; --text: #f4f1ff; - --dim: #aaa8ba; + --dim: #b0aec2; --muted: #767589; - --grad: linear-gradient(180deg, var(--ice) 0%, var(--hot) 100%); + --grad: linear-gradient(135deg, var(--ice) 0%, var(--hot) 100%); --display: "Bricolage Grotesque", system-ui, sans-serif; + --sans: + system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif; --mono: "Space Mono", ui-monospace, "SF Mono", Menlo, monospace; - --pixel: "Silkscreen", var(--mono); + + --container: 1080px; + --radius: 14px; } * { @@ -28,22 +32,15 @@ html { body { margin: 0; background-color: var(--void); - background-image: - radial-gradient( - 1100px 520px at 82% -140px, - rgba(0, 216, 239, 0.09), - transparent 68% - ), - radial-gradient( - 900px 480px at 8% 6%, - rgba(243, 42, 145, 0.07), - transparent 66% - ), - linear-gradient(180deg, var(--void) 0%, #0d0d14 56%, #08080d 100%); + background-image: radial-gradient( + 900px 480px at 50% -180px, + rgba(0, 216, 239, 0.08), + transparent 70% + ); color: var(--text); - font-family: var(--mono); + font-family: var(--sans); font-size: 16px; - line-height: 1.55; + line-height: 1.6; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; overflow-x: clip; @@ -55,7 +52,23 @@ img { } a { - color: inherit; + color: var(--ice); + text-decoration-color: rgba(0, 216, 239, 0.4); +} + +a:hover { + text-decoration-color: var(--ice); +} + +code, +kbd { + font-family: var(--mono); + font-size: 0.86em; + background: var(--panel-2); + border: 1px solid var(--line); + border-radius: 6px; + padding: 1px 6px; + white-space: nowrap; } :focus-visible { @@ -64,19 +77,22 @@ a { border-radius: 4px; } -.page { - width: min(1180px, calc(100% - 44px)); - min-height: 100vh; - min-height: 100svh; - margin: 0 auto; - padding: 18px 0 16px; - display: flex; - flex-direction: column; -} - /* ---- Header ---- */ .site-header { + position: sticky; + top: 0; + z-index: 10; + background: rgba(10, 10, 15, 0.82); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border-bottom: 1px solid var(--line); +} + +.header-inner { + width: min(var(--container), calc(100% - 44px)); + margin: 0 auto; + padding: 12px 0; display: flex; align-items: center; justify-content: space-between; @@ -87,15 +103,17 @@ a { display: inline-flex; align-items: center; gap: 10px; + color: var(--text); text-decoration: none; - font-family: var(--pixel); - font-size: 0.95rem; - letter-spacing: 0.08em; + font-family: var(--display); + font-weight: 700; + font-size: 1.02rem; + letter-spacing: 0.02em; } .brand-icon { - width: 30px; - height: 30px; + width: 28px; + height: 28px; border-radius: 7px; flex: 0 0 auto; image-rendering: pixelated; @@ -104,7 +122,7 @@ a { .site-nav { display: flex; align-items: center; - gap: 20px; + gap: 22px; font-size: 0.9rem; } @@ -115,101 +133,81 @@ a { } .site-nav a:hover { - color: var(--ice); + color: var(--text); } /* ---- Hero ---- */ .hero { - flex: 1; - display: grid; - grid-template-columns: minmax(360px, 620px) minmax(0, 1fr); - align-items: center; - gap: clamp(32px, 5vw, 64px); - padding: clamp(24px, 5vh, 54px) 0 22px; -} - -.hero-copy { + width: min(var(--container), calc(100% - 44px)); + margin: 0 auto; + padding: clamp(48px, 9vh, 92px) 0 0; display: flex; flex-direction: column; - align-items: flex-start; - gap: 14px; + align-items: center; + text-align: center; } .hero-wordmark { display: block; - width: min(250px, 72vw); - margin-bottom: 6px; + width: min(280px, 74vw); + margin-bottom: 26px; } .wordmark { width: 100%; height: auto; image-rendering: pixelated; - filter: drop-shadow(0 0 24px rgba(243, 42, 145, 0.22)); -} - -.eyebrow { - margin: 0; - color: var(--ice); - font-family: var(--pixel); - font-size: 0.72rem; - letter-spacing: 0.18em; - line-height: 1.1; - text-transform: uppercase; + filter: drop-shadow(0 0 28px rgba(243, 42, 145, 0.2)); } h1 { margin: 0; - max-width: 22ch; + max-width: 20ch; font-family: var(--display); font-weight: 800; - font-size: clamp(1.7rem, 2.6vw, 2.35rem); - line-height: 1.04; - letter-spacing: 0; + font-size: clamp(2rem, 4.6vw, 3.1rem); + line-height: 1.05; + letter-spacing: -0.01em; text-wrap: balance; } .lede { - max-width: 52ch; - margin: 2px 0 0; + max-width: 56ch; + margin: 18px 0 0; color: var(--dim); - font-size: 1.02rem; - line-height: 1.6; + font-size: 1.08rem; text-wrap: pretty; } -.hero-points { - margin: 2px 0 0; +.badges { + margin: 22px 0 0; padding: 0; list-style: none; display: flex; - flex-direction: column; - gap: 7px; - color: var(--dim); - font-size: 0.92rem; - line-height: 1.45; -} - -.hero-points li { - display: flex; - align-items: baseline; + flex-wrap: wrap; + justify-content: center; gap: 10px; - text-align: left; } -.hero-points li::before { - content: "▸"; - color: var(--hot); - font-family: var(--pixel); - font-size: 0.78rem; +.badges li { + padding: 6px 14px; + border: 1px solid var(--line); + border-radius: 999px; + background: var(--panel); + color: var(--dim); + font-family: var(--mono); + font-size: 0.76rem; + letter-spacing: 0.04em; + line-height: 1.4; } .actions { display: flex; flex-wrap: wrap; + justify-content: center; gap: 12px; - margin-top: 10px; + margin-top: 26px; } .button { @@ -217,15 +215,14 @@ h1 { align-items: center; justify-content: center; min-height: 50px; - min-width: 232px; - padding: 14px 24px; + padding: 14px 26px; border: 1px solid var(--line); - border-radius: 9px; + border-radius: 10px; background: var(--panel); color: var(--text); - font-family: var(--mono); - font-weight: 700; - font-size: 0.94rem; + font-family: var(--sans); + font-weight: 600; + font-size: 0.96rem; line-height: 1; text-decoration: none; transition: @@ -247,6 +244,7 @@ h1 { border: 0; background: var(--grad); color: #06060a; + font-weight: 700; box-shadow: 0 18px 44px -18px rgba(243, 42, 145, 0.72); } @@ -255,31 +253,227 @@ h1 { } .fine-print { - margin: 0; + margin: 16px 0 0; color: var(--muted); - font-size: 0.78rem; - line-height: 1.45; + font-size: 0.82rem; +} + +.fine-print a { + color: var(--dim); } -/* ---- Demo ---- */ +/* ---- Screenshots ---- */ .demo { - margin: 0; - width: min(100%, 520px); - justify-self: end; + margin: clamp(40px, 7vh, 64px) 0 0; + width: min(100%, 860px); + padding: 10px; + border: 1px solid var(--line); + border-radius: calc(var(--radius) + 6px); + background: var(--panel); + box-shadow: 0 40px 90px -40px rgba(0, 0, 0, 0.8); } .shot { width: 100%; height: auto; - filter: drop-shadow(0 30px 48px rgba(0, 0, 0, 0.3)); + border-radius: var(--radius); +} + +/* ---- Sections ---- */ + +.section { + width: min(var(--container), calc(100% - 44px)); + margin: 0 auto; + padding: clamp(64px, 11vh, 110px) 0 0; +} + +.eyebrow { + margin: 0 0 10px; + color: var(--ice); + font-family: var(--mono); + font-size: 0.74rem; + font-weight: 700; + letter-spacing: 0.2em; + text-transform: uppercase; +} + +h2 { + margin: 0; + max-width: 24ch; + font-family: var(--display); + font-weight: 700; + font-size: clamp(1.5rem, 3vw, 2.1rem); + line-height: 1.12; + letter-spacing: -0.01em; + text-wrap: balance; +} + +.section-lede { + max-width: 58ch; + margin: 14px 0 0; + color: var(--dim); + text-wrap: pretty; +} + +/* ---- Feature grid ---- */ + +.feature-grid { + margin-top: 34px; + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 16px; +} + +.feature { + padding: 22px 22px 24px; + border: 1px solid var(--line); + border-radius: var(--radius); + background: var(--panel); + transition: border-color 0.16s ease; +} + +.feature:hover { + border-color: #3a3a56; +} + +.feature h3 { + margin: 0; + font-family: var(--display); + font-weight: 700; + font-size: 1.06rem; + line-height: 1.25; +} + +.feature p { + margin: 8px 0 0; + color: var(--dim); + font-size: 0.92rem; +} + +/* ---- Split (native) ---- */ + +.split { + display: grid; + grid-template-columns: minmax(320px, 460px) minmax(0, 1fr); + align-items: center; + gap: clamp(32px, 5vw, 64px); +} + +.split-copy p { + color: var(--dim); + margin: 14px 0 0; + text-wrap: pretty; +} + +.checklist { + margin: 20px 0 0; + padding: 0; + list-style: none; + display: flex; + flex-direction: column; + gap: 12px; + color: var(--dim); + font-size: 0.95rem; +} + +.checklist li { + display: flex; + align-items: baseline; + gap: 12px; +} + +.checklist li::before { + content: "▸"; + color: var(--hot); + font-family: var(--mono); + font-size: 0.8rem; + flex: 0 0 auto; +} + +.split-shot { + margin: 0; + padding: 8px; + border: 1px solid var(--line); + border-radius: calc(var(--radius) + 4px); + background: var(--panel); + box-shadow: 0 32px 70px -36px rgba(0, 0, 0, 0.75); +} + +/* ---- Install steps ---- */ + +.steps { + margin: 34px 0 0; + padding: 0; + list-style: none; + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 16px; + counter-reset: step; +} + +.steps li { + padding: 22px; + border: 1px solid var(--line); + border-radius: var(--radius); + background: var(--panel); +} + +.step-num { + display: inline-flex; + align-items: center; + justify-content: center; + width: 30px; + height: 30px; + border-radius: 999px; + background: var(--panel-2); + border: 1px solid var(--line); + color: var(--ice); + font-family: var(--mono); + font-weight: 700; + font-size: 0.82rem; +} + +.steps p { + margin: 12px 0 0; + color: var(--dim); + font-size: 0.94rem; +} + +.actions-center { + justify-content: center; + margin-top: 36px; +} + +.fine-print-center { + text-align: center; +} + +#install { + text-align: center; +} + +#install h2, +#install .eyebrow { + margin-left: auto; + margin-right: auto; +} + +#install .steps li { + text-align: left; } /* ---- Footer ---- */ .site-footer { - padding-top: 14px; + margin-top: clamp(64px, 11vh, 110px); border-top: 1px solid var(--line); +} + +.footer-inner { + width: min(var(--container), calc(100% - 44px)); + margin: 0 auto; + padding: 22px 0 26px; color: var(--muted); display: flex; flex-wrap: wrap; @@ -290,18 +484,18 @@ h1 { .footer-note { margin: 0; - font-size: 0.82rem; + font-size: 0.84rem; } .footer-note a { - color: var(--text); + color: var(--dim); } .footer-links { display: flex; flex-wrap: wrap; gap: 20px; - font-size: 0.82rem; + font-size: 0.84rem; } .footer-links a { @@ -311,108 +505,64 @@ h1 { } .footer-links a:hover { - color: var(--ice); + color: var(--text); } /* ---- Responsive ---- */ -@media (max-width: 820px) { - .page { - width: min(100% - 32px, 620px); - padding-top: 16px; +@media (max-width: 900px) { + .feature-grid, + .steps { + grid-template-columns: repeat(2, 1fr); } - .hero { + .split { grid-template-columns: 1fr; - align-content: start; - gap: 24px; - padding: 34px 0 20px; - } - - .hero-copy { - align-items: center; - text-align: center; - } - - .hero-wordmark { - width: min(220px, 70vw); - margin-bottom: 2px; } - h1 { - max-width: 16ch; - font-size: clamp(1.5rem, 6.5vw, 2.2rem); - } - - .lede { - max-width: 42ch; - font-size: 0.98rem; - } - - .hero-points { - align-items: center; - } - - .actions { - justify-content: center; - } - - .demo { - width: min(100%, 520px); - justify-self: center; - } - - .site-footer { - justify-content: center; - text-align: center; + .split-shot { + order: -1; } } -@media (max-width: 440px) { - .site-header { - gap: 12px; +@media (max-width: 600px) { + .header-inner, + .hero, + .section, + .footer-inner { + width: calc(100% - 32px); } - .brand { - gap: 8px; + .site-nav { + gap: 14px; font-size: 0.84rem; } - .brand-icon { - width: 28px; - height: 28px; + .site-nav a:not(:last-child) { + display: none; } - .button { - width: 100%; - min-width: 0; - } - - .fine-print { - max-width: 32ch; - } -} - -@media (max-height: 760px) and (min-width: 821px) { - .hero { - padding-top: 22px; - gap: clamp(28px, 4.5vw, 54px); + .feature-grid, + .steps { + grid-template-columns: 1fr; } .hero-wordmark { - width: 210px; + width: min(230px, 70vw); } - h1 { - font-size: clamp(1.6rem, 2.4vw, 2.2rem); + .button { + width: 100%; } - .lede { - font-size: 0.96rem; + .actions { + width: 100%; } - .demo { - width: min(100%, 585px); + .footer-inner { + flex-direction: column; + justify-content: center; + text-align: center; } } From 956fd03832e3c9da7a1675e04fa9ea6413022576 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 8 Jul 2026 00:05:58 +0000 Subject: [PATCH 02/11] Drop the native and privacy sections from the landing page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the "Built for macOS, not ported to it" split section and the "Private by design" cards, along with their nav link and now-unused split/checklist/section-lede styles. The page now flows hero → features → install. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_013mTvMH8wN7yfTntjQZhDF4 --- site/index.html | 72 ------------------------------------------------- site/styles.css | 64 ------------------------------------------- 2 files changed, 136 deletions(-) diff --git a/site/index.html b/site/index.html index de15883..7beb60c 100644 --- a/site/index.html +++ b/site/index.html @@ -82,7 +82,6 @@ @@ -196,77 +195,6 @@

Real synth cues

-
-
-
-

Native

-

Built for macOS, not ported to it

-

- Blurt is AppKit and SwiftUI all the way down — no Electron, no web - views, and zero external dependencies. The dictation engine is a - standalone Swift package behind protocol seams. -

-
    -
  • - A rebindable hotkey — tap right ⌘ to toggle, or - hold it for push-to-talk -
  • -
  • - A one-window setup that walks through Microphone, Accessibility, - and your API key -
  • -
  • A tiny overlay that stays out of the way while you speak
  • -
  • - Your API key lives in the macOS Keychain — never in a config - file -
  • -
-
-
- Blurt's settings window with hotkey, language, and sound options -
-
-
- -
-

Privacy

-

Private by design

-

- Audio is captured only while you're dictating, sent over HTTPS to - AssemblyAI for transcription, and never touches disk. -

-
-
-

No audio stored

-

- Blurt keeps no recordings and no transcripts. When the text is - pasted, it's gone. -

-
-
-

No telemetry

-

- No crash reporting, no analytics, no usage tracking. The app - phones exactly one place: the transcription API. -

-
-
-

Your key, your account

-

- You bring your own AssemblyAI API key, stored in the macOS - Keychain, so your usage is yours alone. -

-
-
-
-

Install

Up and running in a minute

diff --git a/site/styles.css b/site/styles.css index 9a508f6..3529fd6 100644 --- a/site/styles.css +++ b/site/styles.css @@ -309,13 +309,6 @@ h2 { text-wrap: balance; } -.section-lede { - max-width: 58ch; - margin: 14px 0 0; - color: var(--dim); - text-wrap: pretty; -} - /* ---- Feature grid ---- */ .feature-grid { @@ -351,55 +344,6 @@ h2 { font-size: 0.92rem; } -/* ---- Split (native) ---- */ - -.split { - display: grid; - grid-template-columns: minmax(320px, 460px) minmax(0, 1fr); - align-items: center; - gap: clamp(32px, 5vw, 64px); -} - -.split-copy p { - color: var(--dim); - margin: 14px 0 0; - text-wrap: pretty; -} - -.checklist { - margin: 20px 0 0; - padding: 0; - list-style: none; - display: flex; - flex-direction: column; - gap: 12px; - color: var(--dim); - font-size: 0.95rem; -} - -.checklist li { - display: flex; - align-items: baseline; - gap: 12px; -} - -.checklist li::before { - content: "▸"; - color: var(--hot); - font-family: var(--mono); - font-size: 0.8rem; - flex: 0 0 auto; -} - -.split-shot { - margin: 0; - padding: 8px; - border: 1px solid var(--line); - border-radius: calc(var(--radius) + 4px); - background: var(--panel); - box-shadow: 0 32px 70px -36px rgba(0, 0, 0, 0.75); -} - /* ---- Install steps ---- */ .steps { @@ -515,14 +459,6 @@ h2 { .steps { grid-template-columns: repeat(2, 1fr); } - - .split { - grid-template-columns: 1fr; - } - - .split-shot { - order: -1; - } } @media (max-width: 600px) { From bd085e3251dfabdc60172a5840bc310d0e9d9673 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 8 Jul 2026 00:08:27 +0000 Subject: [PATCH 03/11] Drop the install section from the landing page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the "Up and running in a minute" steps, the repeated download CTA, and the Install nav link, along with the now-unused steps and code/kbd styles. The page is now hero → features → footer. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_013mTvMH8wN7yfTntjQZhDF4 --- site/index.html | 48 ----------------------------- site/styles.css | 80 ++----------------------------------------------- 2 files changed, 2 insertions(+), 126 deletions(-) diff --git a/site/index.html b/site/index.html index 7beb60c..0806a52 100644 --- a/site/index.html +++ b/site/index.html @@ -82,7 +82,6 @@ @@ -194,53 +193,6 @@

Real synth cues

- -
-

Install

-

Up and running in a minute

-
    -
  1. - 1 -

    - Download Blurt.dmg - and drag Blurt.app into Applications. -

    -
  2. -
  3. - 2 -

    - Launch Blurt and follow setup: Microphone, Accessibility, and your - AssemblyAI API key - (free tier available). -

    -
  4. -
  5. - 3 -

    - Dictate with right ⌘ — tap to toggle, hold for - push-to-talk. -

    -
  6. -
- -

- Prefer to build it yourself? Blurt is MIT licensed — - clone the repo and - run scripts/dev-build.sh. -

-