Skip to content

feat(features): show real product screenshots on /features - #51

Merged
ralyodio merged 1 commit into
masterfrom
feat/features-screenshots
Aug 10, 2026
Merged

feat(features): show real product screenshots on /features#51
ralyodio merged 1 commit into
masterfrom
feat/features-screenshots

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

What

/features illustrated all eight features with the same gradient box and a scaled-up Lucide icon, so the page never actually showed the product. This replaces those placeholders with screenshots captured from a signed-in walkthrough of the live app.

Section Screenshot
Hero dashboard
Real-time Screen Sharing host console — join code, participants, quality selector
Explicit Consent Model viewer console — guest must press Request Control
PWA Viewer browser join screen — "Watch for free", no account
Cross-Platform Desktop download page
Screen Recording recording preferences

What still uses the placeholder, and why

  • Remote Mouse & Keyboard — remote control only exists in the desktop app; the web host page states "Not available in web sharing".
  • Simultaneous Input — needs two peers actively driving one screen.
  • Text Chat — marked Coming Soon; no shipped UI.

Rather than borrow an unrelated screen for these, they keep the illustrated placeholder. Rendering is now conditional on a Feature.image, so dropping a file in later is a one-line change.

Notes

  • Screenshots are real captures from pairux.com taken with a throwaway account (pairux-screenshots@profullstack.com, display name Alex Rivera). Join codes shown belong to sessions that have since ended.
  • The live video pane in the host console reads "Click below to start sharing your screen" — the capture environment is headless with no display, so no frame could be shared. Worth re-shooting that one from a real desktop if you want video in the frame.
  • Images are 2880×1620 PNGs served through next/image (renders at 720×405 / 1024×576), ~1.4 MB total.

Verification

turbo run typecheck, lint and build for @pairux/web all pass; prettier --check clean. Built the app and loaded /features in a browser — all six images return 200 and render in the right slots.

🤖 Generated with Claude Code

The feature list illustrated every entry with the same gradient box and a
scaled-up Lucide icon, so the page never showed what PairUX looks like.

Captures a signed-in walkthrough of the shipped app and uses it where the
product actually demonstrates the feature:

- hero: the dashboard
- Real-time Screen Sharing: the host console (join code, participants, quality)
- Explicit Consent Model: the viewer console, where a guest must Request Control
- PWA Viewer: the browser join screen ("Watch for free", no account)
- Cross-Platform Desktop: the download page
- Screen Recording: the recording preferences

Remote Mouse & Keyboard, Simultaneous Input and Text Chat keep the illustrated
placeholder — remote control is desktop-app only and chat has not shipped, so
there is no honest screen to show yet.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

160 finding(s)

HIGH/CRITICAL: 5 | MEDIUM: 49 | LOW: 106

Severity Rule Location
HIGH secret-generic-credential apps/livekit/fly.toml:12
HIGH manifest-typosquat apps/mobile/package.json:43
HIGH secret-generic-credential apps/turn/fly.toml:11
HIGH secret-generic-credential docs/API.md:648
HIGH secret-generic-credential docs/API.md:654
MEDIUM insecure-temp-file apps/desktop/src/main/streaming/index.test.ts:64
MEDIUM sql-template-interpolation apps/desktop/src/renderer/components/capture/CameraBubble.tsx:129
MEDIUM insecure-temp-file apps/installer/scripts/install.sh:370
MEDIUM insecure-temp-file apps/installer/scripts/install.sh:393
MEDIUM insecure-temp-file apps/installer/scripts/install.sh:402
MEDIUM insecure-temp-file apps/installer/scripts/install.sh:438
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:48
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:73
MEDIUM js-unescaped-html-sink apps/web/src/app/c/[handle]/page.tsx:191
MEDIUM js-unescaped-html-sink apps/web/src/app/l/[joinCode]/page.tsx:165
MEDIUM js-unescaped-html-sink apps/web/src/app/layout.tsx:128
MEDIUM js-unescaped-html-sink apps/web/src/app/live/page.tsx:145
MEDIUM js-unescaped-html-sink apps/web/src/app/page.tsx:122
MEDIUM js-unescaped-html-sink apps/web/src/app/pricing/page.tsx:284
MEDIUM js-open-redirect apps/web/src/app/pricing/UpgradeButton.tsx:50
MEDIUM js-unescaped-html-sink apps/web/src/app/u/[username]/page.tsx:282
MEDIUM manifest-install-lifecycle-script package.json:54
MEDIUM sql-template-interpolation packages/ai-core/src/prompts.ts:36
MEDIUM insecure-temp-file packages/remote-input/src/backends/waylandYdotool.test.ts:81
MEDIUM insecure-temp-file packages/remote-input/src/backends/waylandYdotool.test.ts:96
MEDIUM insecure-temp-file packages/remote-input/src/backends/waylandYdotool.test.ts:112
MEDIUM insecure-temp-file packages/remote-input/src/backends/waylandYdotool.test.ts:132
MEDIUM insecure-temp-file packages/remote-input/src/backends/waylandYdotool.test.ts:152
MEDIUM insecure-temp-file packages/remote-input/src/backends/waylandYdotool.test.ts:178
MEDIUM insecure-temp-file packages/remote-input/src/backends/waylandYdotool.test.ts:200
MEDIUM sql-template-interpolation scripts/lib/package-managers/apt.ts:55
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/apt.ts:154
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/apt.ts:160
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/apt.ts:208
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/apt.ts:313
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/aur.ts:310
MEDIUM sql-template-interpolation scripts/lib/package-managers/aur.ts:341
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/aur.ts:341
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/chocolatey.ts:264
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/chocolatey.ts:288
MEDIUM sql-template-interpolation scripts/lib/package-managers/gentoo.ts:274
MEDIUM sql-template-interpolation scripts/lib/package-managers/homebrew.ts:152
MEDIUM sql-template-interpolation scripts/lib/package-managers/nix.ts:225
MEDIUM sql-template-interpolation scripts/lib/package-managers/rpm.ts:55
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/rpm.ts:201
MEDIUM js-shell-exec-interpolation scripts/lib/package-managers/rpm.ts:261
MEDIUM sql-template-interpolation scripts/lib/package-managers/scoop.ts:145
MEDIUM js-shell-exec-interpolation scripts/release.mjs:145
MEDIUM js-shell-exec-interpolation scripts/release.mjs:146
MEDIUM js-shell-exec-interpolation scripts/release.mjs:147

…and 110 more. Full results in the Security tab.

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio marked this pull request as ready for review August 10, 2026 14:59
@ralyodio
ralyodio merged commit e2311b8 into master Aug 10, 2026
13 checks passed
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