Skip to content

Add official website (static landing page) - #1

Merged
YJack0000 merged 1 commit into
mainfrom
website
Jun 16, 2026
Merged

YJack0000 merged 1 commit into
mainfrom
website

Conversation

@YJack0000

Copy link
Copy Markdown
Contributor

What

A modern, zero-build static landing page for Parley, living in website/.

Plain HTML/CSS/vanilla JS — no dependencies, no build step, never touches the Tauri app build.

Design

  • Dark theme matching Parley's brand: the teal→sky→indigo gradient (#5eead4 → #38bdf8 → #818cf8), Geist font, and the "P" monogram.
  • Sections: hero, features grid (all 8 features), how-it-works, alternating showcase rows, tech stack, and a two-command install CTA.
  • Ambient glow + grid background, scroll-reveal animations, copy-to-clipboard, fully responsive (mobile menu included).

Showcase media slots

Marked slots for your GIFs/screenshots. Drop a file into website/assets/ named showcase-hero, showcase-transcript, showcase-qa, or showcase-eval (.gif/.png/.jpg/.webp/.mp4) and it auto-loads — no markup edits needed. Until then, each slot shows a styled placeholder telling you the exact filename.

Deploy

  • .github/workflows/deploy-website.yml publishes website/ to GitHub Pages on push to main.
  • website/README.md documents local dev, the media slots, and the Cloudflare custom-domain path (DNS records, SSL Full, Enforce HTTPS).

Verify

Previewed across desktop + mobile during development (hero, features, showcase rows, tech, CTA, mobile nav). No console errors except expected 404s from the media auto-probe before assets are added.

Follow-ups for the maintainer

  1. Settings → Pages → Source: GitHub Actions (one-time).
  2. Add showcase media to website/assets/.
  3. (Optional) Add website/CNAME + Cloudflare DNS for a custom domain — see website/README.md.

🤖 Generated with Claude Code

A zero-build static landing page in website/ — dark, modern, matching
Parley's brand gradient and "P" monogram. Includes:

- Hero, features grid, how-it-works, alternating showcase rows, tech
  stack, and install CTA sections.
- Marked media slots that auto-load showcase GIFs/screenshots/MP4s from
  website/assets/ by filename (no markup edits needed).
- Responsive layout, scroll-reveal, copy-to-clipboard install snippet.
- GitHub Pages deploy workflow + README covering local dev, media slots,
  and Cloudflare custom-domain setup.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@YJack0000
YJack0000 merged commit 66d9e34 into main Jun 16, 2026
@YJack0000
YJack0000 deleted the website branch June 16, 2026 13:28
YJack0000 added a commit that referenced this pull request Jun 25, 2026
… download (#50)

* [feature] cloud sync: cross-device freshness, dirty re-push, streamed audio download

Closes the three deferred multi-device/perf gaps from the sync review.

1. Cross-device staleness (#1): a new localStorage side-channel (src/lib/cloud/
   syncState.ts) records, per entry, the cloud updatedAt the local copy matches.
   listMergedHistory now marks an entry "stale" when the cloud is strictly newer
   (another device re-analyzed it) and not locally dirty; opening a stale card
   re-pulls it first. Existing synced entries backfill as synced on first sight,
   so nothing flips stale spuriously. New amber RefreshCw badge + i18n.

2. Stale-cloud repair (#2): save/re-analyze marks the entry dirty (cleared on a
   confirmed push), so a failed inline push is retried by the background sweep —
   which now pushes missing OR dirty entries, skips the pass if the cloud list
   fails, and aborts on the first auth failure instead of hammering every entry.

3. Download perf (#3): save_remote_history_entry is now async and fetches the
   audio itself (reqwest, bearer auth), streaming it to disk — the multi-MB blob
   no longer crosses the JS<->Rust IPC as a JSON number[].

Single-device behavior is unchanged: entries are pushed-then-synced immediately
(never stale, never dirty-after-push), and downloads only happen for cloud-only/
stale cards, which don't arise on one device.

* [fix] cloud sync: review fixes — atomic download, rename dirty, dirty-safe backfill, serialized pushes

From the adversarial review of the multi-device sync:
- save_remote_history_entry fetches the audio BEFORE writing anything, so a
  failed download leaves nothing partial (new cloud-only entry) and doesn't
  disturb the existing files (stale re-pull) — kills the phantom-audio /
  mutated-good-copy corruption (was HIGH).
- renameHistoryEntry now pushes via pushToCloud (marks dirty), so a failed
  rename push is retried by the sweep instead of leaving the cloud title stale.
- listMergedHistory's first-sight backfill no longer clears a live dirty flag
  (would have dropped a pending re-push and shown the entry falsely synced).
- pushLocalEntry is serialized per id, so two concurrent same-id pushes can't
  complete out of order and record stale content as synced.

Deferred nits: download records the list-snapshot updatedAt (one redundant
re-pull on a concurrent remote bump); localStorage eviction can mask staleness;
res.bytes() buffers the blob (still off the IPC). All cosmetic/best-effort.

tsc + cargo check + 79 tests green.
YJack0000 added a commit that referenced this pull request Jun 29, 2026
… audio download

Closes the three deferred multi-device/perf gaps from the sync review.

1. Cross-device staleness (#1): a new localStorage side-channel (src/lib/cloud/
   syncState.ts) records, per entry, the cloud updatedAt the local copy matches.
   listMergedHistory now marks an entry "stale" when the cloud is strictly newer
   (another device re-analyzed it) and not locally dirty; opening a stale card
   re-pulls it first. Existing synced entries backfill as synced on first sight,
   so nothing flips stale spuriously. New amber RefreshCw badge + i18n.

2. Stale-cloud repair (#2): save/re-analyze marks the entry dirty (cleared on a
   confirmed push), so a failed inline push is retried by the background sweep —
   which now pushes missing OR dirty entries, skips the pass if the cloud list
   fails, and aborts on the first auth failure instead of hammering every entry.

3. Download perf (#3): save_remote_history_entry is now async and fetches the
   audio itself (reqwest, bearer auth), streaming it to disk — the multi-MB blob
   no longer crosses the JS<->Rust IPC as a JSON number[].

Single-device behavior is unchanged: entries are pushed-then-synced immediately
(never stale, never dirty-after-push), and downloads only happen for cloud-only/
stale cards, which don't arise on one device.
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.

1 participant