Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions COMMUNITY_POSTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@ Sendefertiger Content-Pack mit aktuellen, verifizierten Links aus der Website-St
- Release Status: https://www.typewhisper.com/en/release-status/
- Benchmark: https://www.typewhisper.com/en/benchmark/
- Changelog: https://www.typewhisper.com/en/changelog/
- iOS: https://apps.apple.com/app/typewhisper/id6759319267

## Product Status

- macOS: stable
- Windows: stable
- iOS: coming soon (pending Apple review)
- iOS: stable (App Store)

## German Reddit

Expand All @@ -50,7 +51,7 @@ Discord: https://discord.gg/pUFR4a65SD
Aktueller Plattform-Stand:
macOS = stable
Windows = stable
iOS = coming soon (pending Apple review)
iOS = stable: https://apps.apple.com/app/typewhisper/id6759319267

TypeWhisper ist inzwischen nicht nur eine Dictation-App, sondern eher eine Speech-to-Text-/Workflow-Plattform mit lokalen Engines, Add-ons, Profilen sowie CLI/API für Integrationen. Falls ihr in anderen passenden Communities unterwegs seid, etwa rund um macOS, AI-Tools, Accessibility, Productivity oder DevTools, könnt ihr die Links dort gern auch weiterposten.
```
Expand Down Expand Up @@ -96,7 +97,7 @@ For setup issues or quick workflow questions around TypeWhisper, these are the u
### 7. Platform Status

```text
Current TypeWhisper platform status is pretty straightforward: macOS and Windows are stable, while iOS is pending Apple review. Reference page: https://www.typewhisper.com/en/release-status/
Current TypeWhisper platform status is straightforward: macOS, Windows, and iOS are stable. iOS: https://apps.apple.com/app/typewhisper/id6759319267 Reference page: https://www.typewhisper.com/en/release-status/
```

### 8. Productivity / macOS
Expand Down Expand Up @@ -135,7 +136,7 @@ Support: https://www.typewhisper.com/en/support/
Current platform status:
macOS = stable
Windows = stable
iOS = coming soon (pending Apple review)
iOS = stable (App Store)

If you know other builder or productivity communities where this would be relevant, feel free to repost it there.
```
Expand All @@ -155,7 +156,7 @@ Add-ons: https://www.typewhisper.com/en/addons/
Plugin SDK: https://www.typewhisper.com/en/addons/develop/
Support: https://www.typewhisper.com/en/support/

Current release status is macOS and Windows stable, with iOS pending Apple review.
Current release status is macOS, Windows, and iOS stable. iOS: https://apps.apple.com/app/typewhisper/id6759319267

If this is useful elsewhere, reposts in other relevant communities are welcome.
```
Expand Down Expand Up @@ -185,7 +186,7 @@ https://discord.gg/pUFR4a65SD
Current platform status:
macOS stable
Windows stable
iOS coming soon (pending Apple review)
iOS stable: https://apps.apple.com/app/typewhisper/id6759319267

TypeWhisper seems increasingly useful both as a dictation app and as a speech-to-text workflow platform, especially with profiles, add-ons, and local model options. If you're in other macOS, AI, productivity, accessibility, or devtool communities, feel free to repost this there too.
```
Expand All @@ -212,7 +213,7 @@ For anyone getting started or going deeper:
Platform status:
- macOS: stable
- Windows: stable
- iOS: coming soon (pending Apple review)
- iOS: stable (https://apps.apple.com/app/typewhisper/id6759319267)

If you're in other relevant communities, feel free to repost this there.
```
Expand All @@ -237,7 +238,7 @@ Discord: https://discord.gg/pUFR4a65SD
Current platform status:
macOS stable
Windows stable
iOS coming soon (pending Apple review)
iOS stable: https://apps.apple.com/app/typewhisper/id6759319267

Feel free to forward this to other relevant teams or communities if useful.
```
2 changes: 1 addition & 1 deletion DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Always read this file before making visual changes. Do not deviate without expli

## Product Context

- **What this is:** Marketing site for TypeWhisper, a privacy-first dictation app (macOS and Windows stable, iOS pending Apple review).
- **What this is:** Marketing site for TypeWhisper, a privacy-first dictation app with stable macOS, Windows, and iOS editions.
- **Who it's for:** Developers, writers, professionals; secondary: business/legal buyers.
- **Positioning:** Free, local-first, open ecosystem (add-on marketplace + SDK), made in Germany.
- **Project type:** Marketing site + docs, statically built with Astro 6 + Tailwind 4 + React islands, EN/DE.
Expand Down
9 changes: 5 additions & 4 deletions src/components/landing/hero.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
IOSLogo,
} from "@/components/ui/platform-logos";
import { HeroDemo } from "@/components/landing/hero-demo";
import { getPlatformDownloadTarget } from "@/lib/platform-download";
import { getPlatformDownloadTarget, iosVersion } from "@/lib/platform-download";
import {
useLandingPlatformSelection,
type LandingPlatform,
Expand Down Expand Up @@ -37,11 +37,10 @@ function shortVersion(version: string | null | undefined): string | null {
return match ? `${match[1]}.${match[2]}` : null;
}

// iOS is not public yet, so there is no public version to advertise.
const versionByPlatform: Record<HeroPlatform, string | null> = {
mac: shortVersion(downloads.mac.version),
windows: shortVersion(downloads.windows.version),
ios: null,
ios: shortVersion(iosVersion),
};

const logoByPlatform: Record<
Expand Down Expand Up @@ -95,7 +94,9 @@ export function Hero({ locale = "en" }: { locale?: Locale }) {
{versionByPlatform[selectedPlatform]
? ` ${versionByPlatform[selectedPlatform]}`
: ""}
<span className="mx-2 text-muted-foreground/60" aria-hidden="true">·</span>
<span className="mx-2 text-muted-foreground/60" aria-hidden="true">
·
</span>
{t(locale, `hero.eyebrow.${selectedPlatform}`)}
</p>

Expand Down
33 changes: 25 additions & 8 deletions src/components/landing/platform-download-menu.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ChevronDown, Clock3, Download, Monitor } from "lucide-react";
import { ChevronDown, Download, Monitor, Smartphone } from "lucide-react";
import { getPlatformDownloadTarget } from "@/lib/platform-download";
import { t, type Locale } from "@/i18n/index";

Expand All @@ -11,9 +11,19 @@ export function PlatformDownloadMenu({
}) {
const resolvedLabel = label ?? t(locale, "platformMenu.label");
const macDownload = getPlatformDownloadTarget("mac", locale, "landing");
const windowsDownload = getPlatformDownloadTarget("windows", locale, "landing");
const windowsDownload = getPlatformDownloadTarget(
"windows",
locale,
"landing",
);
const iosDownload = getPlatformDownloadTarget("ios", locale, "landing");

if (!macDownload.available || !windowsDownload.available) return null;
if (
!macDownload.available ||
!windowsDownload.available ||
!iosDownload.available
)
return null;

return (
<details className="group relative w-full sm:w-auto">
Expand Down Expand Up @@ -50,13 +60,20 @@ export function PlatformDownloadMenu({
<Monitor className="size-4" />
{t(locale, "platformMenu.win")}
</a>
<span
aria-disabled="true"
className="flex cursor-not-allowed items-center gap-2 rounded-lg px-3 py-2.5 text-sm text-muted-foreground"
<a
href={iosDownload.href}
target={iosDownload.opensNewTab ? "_blank" : undefined}
rel={iosDownload.opensNewTab ? "noopener noreferrer" : undefined}
data-download-social-trigger
data-download-platform={iosDownload.platform}
data-download-target={iosDownload.target}
data-download-version={iosDownload.version}
data-tracking-placement="platform_menu"
className="flex items-center gap-2 rounded-lg px-3 py-2.5 text-sm text-popover-foreground transition-colors hover:bg-accent"
>
<Clock3 className="size-4" />
<Smartphone className="size-4" />
{t(locale, "platformMenu.ios")}
</span>
</a>
</div>
</details>
);
Expand Down
6 changes: 4 additions & 2 deletions src/components/landing/platforms-coming-soon.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ function getPlatforms(locale: Locale): PlatformInfo[] {
description: t(locale, "platforms.ios.description"),
status: t(locale, "platforms.ios.status"),
statusClassName:
"bg-amber-500/10 text-amber-700 dark:text-amber-300",
"bg-emerald-500/10 text-emerald-700 dark:text-emerald-300",
download: getPlatformDownloadTarget("ios", locale, "landing"),
docsPath: "/docs/ios",
screenshot: screenshotPath(locale, "/screenshots/ios/04-history.webp"),
Expand Down Expand Up @@ -144,7 +144,9 @@ export function AvailablePlatforms({ locale = "en" }: { locale?: Locale }) {
<Button size="pill" asChild>
<a
href={item.download.href}
target={item.download.opensNewTab ? "_blank" : undefined}
target={
item.download.opensNewTab ? "_blank" : undefined
}
rel={
item.download.opensNewTab
? "noopener noreferrer"
Expand Down
4 changes: 2 additions & 2 deletions src/components/layout/footer.astro
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
import { Logo } from "@/components/ui/logo";
import { Waveform } from "@/components/ui/waveform";
import { discordUrl } from "@/lib/platform-download";
import { discordUrl, iosAppStoreUrl, iosVersion } from "@/lib/platform-download";
import type { Locale } from "@/i18n/index";
import { t, localePath } from "@/i18n/index";

Expand Down Expand Up @@ -53,7 +53,7 @@ const { locale = "en" } = Astro.props;
<a href={localePath(locale, "/support")} class="transition-colors hover:text-foreground">{t(locale, "footer.support")}</a>
<a href={localePath(locale, "/changelog")} class="transition-colors hover:text-foreground">{t(locale, "footer.changelog")}</a>
<a href="https://github.com/TypeWhisper/typewhisper-win/releases" target="_blank" rel="noopener noreferrer" class="transition-colors hover:text-foreground">{t(locale, "footer.windows")}</a>
<span>{t(locale, "footer.iosPending")}</span>
<a href={iosAppStoreUrl} target="_blank" rel="noopener noreferrer" data-download-social-trigger data-download-platform="ios" data-download-target="ios_app_store" data-download-version={iosVersion} data-tracking-placement="landing" class="transition-colors hover:text-foreground">{t(locale, "footer.ios")}</a>
</div>
<div class="flex flex-wrap gap-x-6 gap-y-2">
<a href={discordUrl} target="_blank" rel="noopener noreferrer" class="transition-colors hover:text-foreground">{t(locale, "footer.discord")}</a>
Expand Down
20 changes: 10 additions & 10 deletions src/data/ios-docs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ const en: Record<IosDocSlug, IosDocPage> = {
description:
"Requirements, permissions, local model setup, keyboard activation, and the first test recording for TypeWhisper on iPhone and iPad.",
intro:
"TypeWhisper 1.0 is being prepared for its public App Store release. There is no public download link yet, but this guide documents the release setup so you know exactly what to expect.",
"TypeWhisper 1.0 is available from the App Store for iPhone and iPad. This guide takes you from installation through permissions, local models, keyboard setup, and your first recording.",
sections: [
{
title: "Before you install",
Expand All @@ -68,7 +68,7 @@ const en: Record<IosDocSlug, IosDocPage> = {
callout: {
title: "Current availability",
description:
"The public App Store release is still in preparation. Do not install builds or profiles offered by an unofficial source.",
"Download TypeWhisper only from the official App Store page linked in this documentation. Do not install builds or profiles offered by an unofficial source.",
},
},
{
Expand Down Expand Up @@ -518,7 +518,7 @@ const en: Record<IosDocSlug, IosDocPage> = {
{
title: "Open Settings > Premium",
description:
"Sign in with Apple and activate or restore Premium when the public App Store version is available.",
"Sign in with Apple, then activate or restore Premium.",
},
{
title: "Choose the sync mode",
Expand Down Expand Up @@ -549,9 +549,9 @@ const en: Record<IosDocSlug, IosDocPage> = {
"Start with the exact entry point that failed. A recording in the app, keyboard dictation, Watch transfer, file import, and sync each have a different dependency.",
sections: [
{
title: "The app is not in the App Store",
title: "The App Store download does not work",
paragraphs: [
"That is currently expected. TypeWhisper 1.0 is still being prepared for public App Store release. This documentation is available ahead of the download so setup and privacy behavior are transparent.",
"Open the official App Store product page from the iOS overview. If the download is unavailable, confirm that the device runs iOS 18 or iPadOS 18 or later, check that you are signed in to the App Store, and retry. Include Apple's exact message when contacting support.",
],
},
{
Expand Down Expand Up @@ -608,7 +608,7 @@ const de: Record<IosDocSlug, IosDocPage> = {
description:
"Voraussetzungen, Berechtigungen, lokale Modelle, Tastatur-Aktivierung und die erste Testaufnahme mit TypeWhisper auf iPhone und iPad.",
intro:
"TypeWhisper 1.0 wird für die öffentliche App-Store-Veröffentlichung vorbereitet. Einen öffentlichen Download-Link gibt es noch nicht, aber diese Anleitung beschreibt bereits den vollständigen Release-Ablauf.",
"TypeWhisper 1.0 ist für iPhone und iPad im App Store verfügbar. Diese Anleitung führt dich von der Installation über Berechtigungen und lokale Modelle bis zur Tastatur-Einrichtung und ersten Aufnahme.",
sections: [
{
title: "Vor der Installation",
Expand All @@ -621,7 +621,7 @@ const de: Record<IosDocSlug, IosDocPage> = {
callout: {
title: "Aktuelle Verfügbarkeit",
description:
"Das öffentliche App-Store-Release wird noch vorbereitet. Installiere keine Builds oder Profile aus inoffiziellen Quellen.",
"Lade TypeWhisper nur über die offizielle App-Store-Seite aus dieser Dokumentation. Installiere keine Builds oder Profile aus inoffiziellen Quellen.",
},
},
{
Expand Down Expand Up @@ -1071,7 +1071,7 @@ const de: Record<IosDocSlug, IosDocPage> = {
{
title: "Einstellungen > Premium öffnen",
description:
"Melde dich mit Apple an und aktiviere oder stelle Premium wieder her, sobald die öffentliche App-Store-Version verfügbar ist.",
"Melde dich mit Apple an und aktiviere Premium oder stelle den Kauf wieder her.",
},
{
title: "Sync-Modus wählen",
Expand Down Expand Up @@ -1102,9 +1102,9 @@ const de: Record<IosDocSlug, IosDocPage> = {
"Beginne beim genauen Einstiegspunkt des Fehlers. App-Aufnahme, Tastatur-Diktat, Watch-Transfer, Dateiimport und Sync haben jeweils andere Voraussetzungen.",
sections: [
{
title: "Die App ist nicht im App Store",
title: "Der App-Store-Download funktioniert nicht",
paragraphs: [
"Das ist derzeit erwartbar. TypeWhisper 1.0 wird noch für die öffentliche App-Store-Veröffentlichung vorbereitet. Die Dokumentation ist schon verfügbar, damit Einrichtung und Datenschutz transparent sind.",
"Öffne die offizielle App-Store-Produktseite über die iOS-Übersicht. Falls der Download nicht verfügbar ist, prüfe iOS 18 beziehungsweise iPadOS 18 oder neuer, die Anmeldung im App Store und versuche es erneut. Nenne beim Support die genaue Meldung von Apple.",
],
},
{
Expand Down
Loading