Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
Binary file added fastlane/AppIcon-512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added fastlane/feature_image.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified website/public/screenshots/android-main.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
47 changes: 45 additions & 2 deletions website/src/layouts/Layout.astro
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ const releaseUrl = `${githubUrl}/releases`;
const nav = [
['Home', '/'],
['Setup', '/setup/'],
['Testing', '/testing/'],
['FAQ', '/faq/'],
['Other Projects', '/projects/'],
];
Expand All @@ -39,7 +40,7 @@ const nav = [
</>
)
}
<style>
<style is:global>
:root {
color-scheme: light;
--bg: #f7f9fc;
Expand Down Expand Up @@ -148,9 +149,46 @@ const nav = [
}
.footer-links {
display: flex;
align-items: center;
gap: 16px;
flex-wrap: wrap;
}
.github-link {
display: inline-flex;
width: 44px;
height: 44px;
align-items: center;
justify-content: center;
border: 1px solid var(--border);
border-radius: 50%;
color: var(--muted);
background: var(--surface);
}
.github-link:hover {
color: var(--ink);
text-decoration: none;
background: var(--surface-strong);
}
.github-link svg {
width: 22px;
height: 22px;
fill: currentColor;
}
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
a:focus-visible {
outline: 3px solid rgba(37, 99, 235, 0.42);
outline-offset: 3px;
}
h1, h2, h3, p { margin-top: 0; }
h1 {
font-size: clamp(2.2rem, 6vw, 4.4rem);
Expand Down Expand Up @@ -249,7 +287,6 @@ const nav = [
</a>
<nav aria-label="Main navigation">
{nav.map(([label, href]) => <a href={`${base}${href}`}>{label}</a>)}
<a href={githubUrl} target="_blank" rel="noopener">GitHub</a>
</nav>
</div>
</header>
Expand All @@ -267,6 +304,12 @@ const nav = [
<a href={`${base}/faq/`}>FAQ</a>
<a href={`${base}/privacy/`}>Privacy</a>
<a href={`${base}/legal/`}>Legal</a>
<a class="github-link" href={githubUrl} target="_blank" rel="noopener" title="Voice Inbox source code on GitHub">
<span class="visually-hidden">Voice Inbox source code on GitHub</span>
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M12 2C6.48 2 2 6.59 2 12.25c0 4.53 2.87 8.37 6.84 9.73.5.1.68-.22.68-.49 0-.24-.01-.89-.01-1.75-2.78.62-3.37-1.37-3.37-1.37-.46-1.18-1.11-1.5-1.11-1.5-.91-.64.07-.62.07-.62 1 .07 1.53 1.06 1.53 1.06.9 1.57 2.35 1.12 2.92.85.09-.66.35-1.12.64-1.37-2.22-.26-4.56-1.14-4.56-5.07 0-1.12.39-2.04 1.03-2.76-.1-.26-.45-1.31.1-2.72 0 0 .84-.28 2.75 1.05A9.3 9.3 0 0 1 12 6.69a9.3 9.3 0 0 1 2.5.34c1.91-1.33 2.75-1.05 2.75-1.05.55 1.41.2 2.46.1 2.72.64.72 1.03 1.64 1.03 2.76 0 3.94-2.34 4.8-4.57 5.06.36.32.68.94.68 1.9 0 1.37-.01 2.47-.01 2.81 0 .27.18.59.69.49A10.27 10.27 0 0 0 22 12.25C22 6.59 17.52 2 12 2Z" />
</svg>
</a>
</span>
</div>
</footer>
Expand Down
36 changes: 18 additions & 18 deletions website/src/pages/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
import Layout from '../layouts/Layout.astro';

const githubUrl = 'https://github.com/maxistar/Voice-Inbox';
const releaseUrl = `${githubUrl}/releases`;
const base = import.meta.env.BASE_URL.replace(/\/$/, '');
const testingUrl = `${base}/testing/`;
const androidScreenshot = `${base}/screenshots/android-main.jpg`;
---
<Layout
Expand Down Expand Up @@ -103,13 +103,13 @@ const androidScreenshot = `${base}/screenshots/android-main.jpg`;
<h1>Turn voice notes into a Markdown inbox.</h1>
<p>
Voice Inbox turns accumulated recordings into a readable text inbox. Android has the mature
folder workflow today; iOS now has an active MVP for importing, previewing, transcribing,
task-list workflow today; iOS now has an active MVP for importing, previewing, transcribing,
and appending individual recordings locally.
</p>
<div class="button-row">
<a class="button primary" href={releaseUrl} target="_blank" rel="noopener">Download from GitHub Releases</a>
<a class="button" href={githubUrl} target="_blank" rel="noopener">View source</a>
<a class="button primary" href={testingUrl}>Join Android closed test</a>
<a class="button" href={`${base}/setup/`}>Setup guide</a>
<a class="button" href={githubUrl} target="_blank" rel="noopener">View source</a>
</div>
</div>

Expand All @@ -123,12 +123,12 @@ const androidScreenshot = `${base}/screenshots/android-main.jpg`;

<section class="section">
<p class="eyebrow">Platform status</p>
<h2>Android is ready; iOS is catching up fast.</h2>
<h2>Android is in closed testing; iOS is catching up fast.</h2>
<div class="grid">
<div class="card platform-card">
<span class="status-badge">Android ready</span>
<h3>Full folder workflow</h3>
<p>Scan a selected audio folder, preview recordings, transcribe individual files or all New files, append to Markdown or text, retry failures, and schedule best-effort background runs.</p>
<span class="status-badge">Android closed test</span>
<h3>Flexible task workflow</h3>
<p>Import or receive individual recordings, optionally scan a selected audio folder, preview tasks, transcribe one file or a batch, retry failures, and schedule best-effort background runs.</p>
</div>
<div class="card platform-card">
<span class="status-badge">iOS MVP</span>
Expand All @@ -148,16 +148,16 @@ const androidScreenshot = `${base}/screenshots/android-main.jpg`;
<h2>Built for accumulated recordings, not live dictation.</h2>
<div class="grid">
<div class="card">
<h3>Incremental folder transcription</h3>
<p>Select one folder, review discovered recordings, and process only files that are new or changed.</p>
<h3>Individual or folder transcription</h3>
<p>Import or share individual recordings, or optionally select one folder and process only files that are new or changed.</p>
</div>
<div class="card">
<h3>Local recognition</h3>
<p>After the first model download, recognition runs on device instead of sending audio to an app cloud service.</p>
<p>Download the model or install it from a compatible local folder. After installation, recognition runs on device instead of sending audio to an app cloud service.</p>
</div>
<div class="card">
<h3>Markdown or plain text output</h3>
<p>Each successful note is appended to an existing writable <code>.md</code> or <code>.txt</code> document.</p>
<p>Create a new <code>.md</code> or <code>.txt</code> document, or choose an existing writable file. Each successful note is appended without replacing earlier content.</p>
</div>
<div class="card">
<h3>Preview before processing</h3>
Expand All @@ -178,11 +178,11 @@ const androidScreenshot = `${base}/screenshots/android-main.jpg`;
<p class="eyebrow">Workflow</p>
<h2>From recordings to notes in five steps.</h2>
<div class="grid flow">
<div class="card"><h3>Install the model</h3><p>Download and verify the speech model on first launch.</p></div>
<div class="card"><h3>Select output</h3><p>Choose an existing writable Markdown or text file.</p></div>
<div class="card"><h3>Select recordings</h3><p>Pick the folder that contains your audio notes.</p></div>
<div class="card"><h3>Review New files</h3><p>Preview recordings and check what will be processed.</p></div>
<div class="card"><h3>Transcribe all</h3><p>Append one entry per successful file with filename, recording time, and recognized text.</p></div>
<div class="card"><h3>Install the model</h3><p>Download and verify the model, or install it from a compatible local folder.</p></div>
<div class="card"><h3>Prepare output</h3><p>Create or choose a writable Markdown or text document.</p></div>
<div class="card"><h3>Add recordings</h3><p>Import files, share audio to Voice Inbox, or optionally select an audio folder.</p></div>
<div class="card"><h3>Review tasks</h3><p>Preview recordings and check what is ready to process.</p></div>
<div class="card"><h3>Transcribe</h3><p>Append one entry per successful file with filename, recording time, and recognized text.</p></div>
</div>
</section>

Expand All @@ -194,7 +194,7 @@ const androidScreenshot = `${base}/screenshots/android-main.jpg`;
need network access for the first model download and enough free storage for model installation.
</p>
<div class="button-row">
<a class="button primary" href={releaseUrl} target="_blank" rel="noopener">Get the APK</a>
<a class="button primary" href={testingUrl}>Join Android closed test</a>
<a class="button" href={`${base}/faq/`}>Read FAQ</a>
</div>
</section>
Expand Down
40 changes: 23 additions & 17 deletions website/src/pages/setup.astro
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import Layout from '../layouts/Layout.astro';

const githubUrl = 'https://github.com/maxistar/Voice-Inbox';
const releaseUrl = `${githubUrl}/releases`;
const base = import.meta.env.BASE_URL.replace(/\/$/, '');
---
<Layout title="Setup" description="How to install and configure Voice Inbox on Android and use the current iOS MVP.">
<style>
Expand All @@ -29,47 +30,52 @@ const releaseUrl = `${githubUrl}/releases`;
<p class="eyebrow">Setup guide</p>
<h1>Get Voice Inbox ready for your recordings.</h1>
<p>
Voice Inbox works with an existing output document and user-selected audio. Android is the full
folder workflow today; iOS currently supports a manual import MVP. The first model download is large,
but after verification recognition runs locally.
Voice Inbox writes recognized speech to a user-selected output document and processes audio that you
import, share, or discover in an optional folder. Android has the mature task-list workflow today;
iOS is an active MVP. Model installation is large, but recognition runs locally after it completes.
</p>
</section>

<section class="steps">
<div class="step">
<h2>1. Install the app</h2>
<p>
Download the latest Android APK from
<a href={releaseUrl} target="_blank" rel="noopener">GitHub Releases</a>
and install it on an ARM64 Android device running Android 7.0 or later.
Voice Inbox is currently available through a restricted Google Play closed test. Follow the
<a href={`${base}/testing/`}>closed-testing instructions</a> to join the tester group, opt in with
the same Google account, and install the app on an ARM64 Android device running Android 7.0 or later.
</p>
<p class="note">
iOS is currently an MVP built from source rather than a store release. When Google Play or App Store
listings exist, this page can link to them as the primary install paths.
Android source builds and APKs remain available from
<a href={releaseUrl} target="_blank" rel="noopener">GitHub Releases</a>. iOS is currently an MVP built
from source rather than an App Store release.
</p>
</div>

<div class="step">
<h2>2. Download the speech model</h2>
<p>
On first launch, download and verify the pinned int8 Parakeet model. The download is about
640 MiB, and installation needs about 704 MiB of free storage.
Download and verify the pinned int8 Parakeet model from the model task. The download is about
640 MiB, and installation needs about 704 MiB of free storage. If the download source is unavailable,
Android can instead install the same model from a compatible local folder.
</p>
<p>Network access is required for this first model download. Recognition runs locally after the model is installed.</p>
<p>Network access is required for the normal download, but not for a valid local-folder installation. Recognition runs locally after the model is installed.</p>
</div>

<div class="step">
<h2>3. Select an output document</h2>
<p>
Choose an existing writable <code>.txt</code> or <code>.md</code> file. Voice Inbox appends new entries
and preserves existing document content. On iOS, this uses the document picker and security-scoped access.
Use <strong>Create New</strong> to create a writable <code>.txt</code> or <code>.md</code> document, or
<strong>Choose Existing</strong> to select one you already use. Voice Inbox appends new entries and
preserves existing content. On iOS, output selection uses the document picker and security-scoped access.
</p>
</div>

<div class="step">
<h2>4. Select recordings</h2>
<h2>4. Add recordings</h2>
<p>
On Android, choose one readable folder that contains audio recordings. The app scans direct children only and does not traverse nested folders.
On Android, use <strong>Import Audio Files</strong> for one or more recordings, or share an audio file to
Voice Inbox from another app. Selecting an audio folder is optional and useful for batch processing;
the app scans direct children only and does not traverse nested folders.
</p>
<p>
On iOS, use the current manual import workflow to add audio files to the app-local catalog.
Expand All @@ -79,8 +85,8 @@ const releaseUrl = `${githubUrl}/releases`;
<div class="step">
<h2>5. Review and transcribe</h2>
<p>
The New tab lists files that are pending or being processed. Use Play to preview a recording, then choose
<strong>Transcribe All</strong> when you are ready.
The main screen presents setup and audio work as a task list. Use Play to preview a recording, transcribe
it individually, or choose <strong>Transcribe All</strong> when multiple tasks are ready.
</p>
<p>
Failed files move to the Processed tab with their latest error and a Retry action. Successful files are appended to the output document.
Expand Down
Loading
Loading