From 76ac912769aeff95ec98a0a84eeb92956f7a5d84 Mon Sep 17 00:00:00 2001 From: promisepreston Date: Sat, 15 Aug 2026 10:56:50 +0200 Subject: [PATCH] fix: improve mobile preview navigation --- README.md | 2 ++ site/assets/recordcove-app-preview.svg | 32 ++++++++++++++++++++++++++ site/downloads.html | 2 +- site/index.html | 13 ++++++++++- site/install.html | 2 +- site/styles.css | 30 ++++++++++++++++++++---- site/testing.html | 2 +- test/site.test.mjs | 25 ++++++++++++++++++++ 8 files changed, 99 insertions(+), 9 deletions(-) create mode 100644 site/assets/recordcove-app-preview.svg diff --git a/README.md b/README.md index ae336a0..9cf4f73 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,8 @@ This is a current release-scope and supply-chain qualification decision. It is n 5. Upload the exact archive only to the manifest-pinned public prerelease. 6. Verify the portal, download, checksum, extraction, and first-launch guide from an independent browser session. 7. Keep Developer ID signing, notarization, Homebrew, trusted CI, and public product launch outside this preview lane. +8. Use only privacy-safe product imagery with synthetic content. Public screenshots must never show a real recording, transcript, summary, prompt, model output, filename, path, category, tag, or other user data. +9. Version static CSS and image URLs when their bytes change so cached preview pages cannot combine new markup with stale presentation rules. Tester instructions are in [INSTALL.md](INSTALL.md) and [TESTING.md](TESTING.md). The distribution boundary is in [PRIVATE_PREVIEW_NOTICE.md](PRIVATE_PREVIEW_NOTICE.md). diff --git a/site/assets/recordcove-app-preview.svg b/site/assets/recordcove-app-preview.svg new file mode 100644 index 0000000..6bf2ac9 --- /dev/null +++ b/site/assets/recordcove-app-preview.svg @@ -0,0 +1,32 @@ + + RecordCove macOS application preview + A privacy-safe illustration of the RecordCove All Recordings workspace using synthetic sample recordings. + + + + + + + + Record + RecordCove + Search recordings and transcripts + FeedbackSettings + LIBRARY + All Recordings3 + ●New Recording▧Transcribe File▤Quick Notes♲Recently Deleted + CATEGORIES▱ Projects▱ Interviews + LOCAL MODELS▣ ModelsON THIS MACAudio and text stay local. + ALL RECORDINGS3 recordings + Show All⌄Sort Created: newest⌄ + + + Weekly project reviewCreated today · Modified todayREADY + SOURCE SAVEDTranscribe locally + Sample recordingCreated yesterday · Modified yesterdayProjects #planning + SOURCE SAVEDTranscribe locally + Research interviewCreated this week · Modified this weekInterviews #research + SOURCE SAVEDTranscribe locally + + Local only. Nothing is uploaded.Models load only for local processing + diff --git a/site/downloads.html b/site/downloads.html index 8315317..8ae9f9a 100644 --- a/site/downloads.html +++ b/site/downloads.html @@ -7,7 +7,7 @@ RecordCove preview downloads - +
diff --git a/site/index.html b/site/index.html index da006f9..b7c5c46 100644 --- a/site/index.html +++ b/site/index.html @@ -7,7 +7,7 @@ RecordCove preview - +
@@ -25,6 +25,17 @@

Your voice, kept.

Choose a RecordCove preview

Version 0.1.0 · Apple silicon · macOS 14 or later · Pre-release

+
+
+

Inside the app

+

A calm workspace for local recordings

+

Browse recordings, organize notes, and choose local transcription and Understanding models in one native macOS workspace.

+
+
+ RecordCove on macOS showing an All Recordings library with sample recordings and local-model controls. +
Privacy-safe product preview using sample content. No real recording, transcript, filename, or path is shown.
+
+

Read this before you open it

This is an early public preview for testing. It is ad-hoc signed and is not yet Apple-notarized. macOS will warn you that Apple cannot verify the developer.

diff --git a/site/install.html b/site/install.html index f7006d1..b4cfcdb 100644 --- a/site/install.html +++ b/site/install.html @@ -1,3 +1,3 @@ -Install RecordCove preview +Install RecordCove preview

Install RecordCove

These steps are written for someone who does not normally install preview software.

Before you start

You need an Apple silicon Mac, macOS 14 or later, about 1 GB of free disk space, and an internet connection.

This early preview is ad-hoc signed and is not Apple-notarized. Install it only if you trust Preston Core Systems Limited, downloaded it from preview.recordcove.com, and the filename and checksum match the page.

Download and unzip

  1. Open the Preview downloads page and choose a version.
  2. Wait for the download to finish.
  3. Open Finder and select Downloads in the left sidebar.
  4. Double-click the downloaded RecordCove ZIP. Your Mac creates a folder containing RecordCove.
  5. Drag RecordCove into the Applications folder in Finder.

First launch

  1. Open Applications in Finder.
  2. Hold the Control key while clicking RecordCove, then select Open.
  3. macOS explains that Apple cannot verify the developer. Select Open only if the file and checksum match the Downloads page.
  4. RecordCove should open. If macOS says the app is damaged, stop and tell the maintainer.

Do not disable Gatekeeper and do not run a Terminal command to remove quarantine.

Microphone permission

RecordCove asks for microphone permission only when it needs to record. Select Allow if you intend to record.

Updating later

Finish any active recording, quit RecordCove, open Preview downloads, choose the newer preview, and replace the app in Applications. Your local recording library is stored separately.

Copyright Preston Core Systems Limited.
diff --git a/site/styles.css b/site/styles.css index 7bff35b..fe4105e 100644 --- a/site/styles.css +++ b/site/styles.css @@ -2,10 +2,11 @@ * { box-sizing: border-box; } body { margin: 0; } main { width: min(760px, calc(100% - 32px)); margin: 0 auto; padding: 72px 0 40px; } -.site-nav { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin-bottom: 24px; } -.site-nav a { border: 1px solid transparent; border-radius: 999px; color: #5b5d59; padding: 9px 14px; font-size: 14px; font-weight: 750; text-decoration: none; } -.site-nav a:hover { border-color: #c9c6c0; color: #20211f; } -.site-nav a[aria-current="page"] { border-color: #bd3455; background: #fcecf0; color: #a92d4b; } +.site-nav { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 4px; width: min(100%, 520px); margin: 0 auto 24px; border: 1px solid #dedbd5; border-radius: 14px; background: rgb(255 255 255 / 82%); padding: 4px; box-shadow: 0 8px 24px rgb(32 33 31 / 4%); } +.site-nav a { min-width: 0; border: 1px solid transparent; border-radius: 10px; color: #5b5d59; padding: 9px 8px; font-size: 14px; font-weight: 750; text-align: center; text-decoration: none; white-space: nowrap; } +.site-nav a:hover { border-color: #c9c6c0; background: #f8f6f2; color: #20211f; } +.site-nav a:focus-visible { outline: 3px solid #20211f; outline-offset: 2px; } +.site-nav a[aria-current="page"] { border-color: #bd3455; background: #bd3455; color: white; } .hero { text-align: center; padding: 48px 28px; } .mark { width: 72px; height: 72px; } .eyebrow { color: #b62f50; font-size: 13px; font-weight: 750; letter-spacing: .12em; text-transform: uppercase; } @@ -18,6 +19,13 @@ h1 { margin: 12px 0; font-family: Georgia, serif; font-size: clamp(42px, 8vw, 68 .button-disabled:hover { background: #777a75; } .button:focus-visible, .links a:focus-visible { outline: 3px solid #20211f; outline-offset: 4px; } .facts { margin-top: 18px; color: #777a75; font-size: 14px; } +.app-preview { margin: 6px 0 30px; } +.app-preview-copy { max-width: 620px; margin: 0 auto 18px; text-align: center; } +.app-preview-copy h2 { margin-bottom: 8px; } +.app-preview-copy p:last-child { margin: 0; color: #5b5d59; } +.product-shot { margin: 0; } +.product-shot img { display: block; width: 100%; height: auto; border: 1px solid #c9c6c0; border-radius: 16px; background: #f0f2f5; box-shadow: 0 18px 50px rgb(32 33 31 / 13%); } +.product-shot figcaption { margin: 11px 8px 0; color: #777a75; font-size: 12px; line-height: 1.5; text-align: center; } .panel { margin-top: 22px; border: 1px solid #dedbd5; border-radius: 16px; background: white; padding: 28px; box-shadow: 0 10px 30px rgb(32 33 31 / 5%); } h2 { margin-top: 0; font-family: Georgia, serif; font-size: 27px; } p, li { line-height: 1.6; } @@ -55,4 +63,16 @@ footer { padding: 28px 16px 42px; color: #777a75; text-align: center; font-size: .release-checksum summary { cursor: pointer; font-weight: 700; } .release-checksum code { display: block; margin-top: 8px; overflow-wrap: anywhere; } .release-empty { color: #777a75; font-style: italic; } -@media (max-width: 520px) { main { padding-top: 30px; } .hero { padding: 34px 8px; } .panel { padding: 22px; } .button { width: 100%; } } +@media (max-width: 520px) { + main { width: min(100% - 24px, 760px); padding-top: 18px; } + .site-nav { position: sticky; z-index: 10; top: 8px; margin-bottom: 14px; border-radius: 12px; background: rgb(255 255 255 / 96%); box-shadow: 0 8px 24px rgb(32 33 31 / 10%); } + .site-nav a { padding: 9px 3px; font-size: clamp(11px, 3.2vw, 13px); } + .hero { padding: 30px 8px 36px; } + .mark { width: 64px; height: 64px; } + .lede { font-size: 17px; } + .app-preview { margin-bottom: 24px; } + .app-preview-copy { padding: 0 8px; } + .product-shot img { border-radius: 12px; } + .panel { padding: 22px; } + .button { width: 100%; } +} diff --git a/site/testing.html b/site/testing.html index e3fd282..2a2ee52 100644 --- a/site/testing.html +++ b/site/testing.html @@ -1,3 +1,3 @@ -Test RecordCove preview +Test RecordCove preview

Test RecordCove

Use only recordings you are legally allowed to make. You never need to share the recording or its written content.

A simple first test

  1. Complete onboarding and confirm Whisper Small English is included and verified.
  2. Make a short, non-private recording.
  3. Select Stop and Save.
  4. Confirm it appears in All Recordings without a recovery or review pop-up.
  5. Play it, transcribe it, and confirm the transcript covers the full recording.

Everyday checks

  • Confirm Copy changes back after a short moment.
  • Generate a Summary with an installed Understanding model.
  • Try Enhance and Clean up, then confirm the original remains in Version History.
  • Create a Quick Note, type a title, press Return, and confirm the cursor moves to the body.
  • Move an item to Recently Deleted, restore it, and confirm the 30-day notice.

Long recording test

If you have a long recording you are allowed to use, let RecordCove transcribe it without interruption. Check the beginning, middle, and end. Confirm processing boundaries do not cut off words, omit sections, repeat passages, or introduce unrelated paragraph breaks.

Report useful feedback

Select Feedback in RecordCove, or open the RecordCove Feedwish board. You can submit without an account and may add a display name if you want. Save the private management code shown after submission; it lets you check or permanently withdraw that feedback later. Signing in is optional and is only needed to follow feedback.

Include your macOS version, Mac type, RecordCove version and revision, selected model, screen, action, expected behavior, and high-level result.

Never send audio, transcripts, summaries, prompts, model output, tokens, credentials, personal filenames, or full file paths.

Copyright Preston Core Systems Limited.
diff --git a/test/site.test.mjs b/test/site.test.mjs index 20f616c..b3e2377 100644 --- a/test/site.test.mjs +++ b/test/site.test.mjs @@ -248,6 +248,31 @@ test("downloads page exposes accepted preview history and browser-local update t } }); +test("all public pages use the versioned responsive stylesheet", async () => { + for (const filename of ["index.html", "downloads.html", "install.html", "testing.html"]) { + const page = await readFile(path.join("site", filename), "utf8"); + assert.match(page, /href="\/styles\.css\?v=3"/); + assert.doesNotMatch(page, /href="\/styles\.css"/); + } + + const styles = await readFile("site/styles.css", "utf8"); + assert.match(styles, /grid-template-columns: repeat\(4, minmax\(0, 1fr\)\)/); + assert.match(styles, /@media \(max-width: 520px\)/); + assert.match(styles, /\.site-nav \{ position: sticky/); +}); + +test("overview shows a privacy-safe local app preview", async () => { + const page = await readFile("site/index.html", "utf8"); + const image = await readFile("site/assets/recordcove-app-preview.svg", "utf8"); + assert.match(page, /A calm workspace for local recordings/); + assert.match(page, /recordcove-app-preview\.svg\?v=1/); + assert.match(page, /Privacy-safe product preview using sample content/); + assert.match(image, /RecordCove/); + assert.match(image, /Sample recording/); + assert.doesNotMatch(image, /\/Users\//); + assert.doesNotMatch(image, /KeepVox/); +}); + test("release catalog accepts only manifest-bounded exact GitHub assets", async () => { const manifest = JSON.parse(await readFile("site/release-manifest.json", "utf8")); const release = (tag, overrides = {}) => ({