Skip to content

Answer-shaped SEO content: six guides, FAQ schema, llms.txt - #197

Merged
darioalessandro merged 1 commit into
masterfrom
seo-answer-content
Aug 10, 2026
Merged

Answer-shaped SEO content: six guides, FAQ schema, llms.txt#197
darioalessandro merged 1 commit into
masterfrom
seo-answer-content

Conversation

@darioalessandro

Copy link
Copy Markdown
Member

Why

App Store analytics now attribute real installs to AI assistants: ChatGPT (com.openai.chat) is our top named first-time-download referrer, with Gemini and Bing showing up too. But assistants retrieve passages, and remoteshutter.app had almost nothing to retrieve — a 123-word homepage and a single welcome post. When ChatGPT recommends us today it links the App Store page; content on our own domain closes the citation loop.

What

Six new guides in website/posts/ — one per question people actually ask assistants, each opening with a direct answer, steps, and a FAQ:

  • use-old-iphone-as-remote-camera — spare phone as wireless camera (wildlife, check-ins, hard angles)
  • group-photos-everyone-in-the-shot — vs self-timer / strangers / clickers
  • iphone-camera-remote-without-bluetooth — vs Bluetooth shutter buttons
  • iphone-as-second-camera-mac-monitor — overhead/product rigs with iPad or Mac as monitor
  • apple-watch-camera-remote — honest take on the built-in Watch remote
  • camera-remote-comparison — three-way comparison, includes the "when a $10 clicker is the right tool" case

FAQ pipeline: posts can declare faq: entries in frontmatter; blog.ts parses them and the post page renders a visible FAQ section plus FAQPage JSON-LD.

Homepage: new "What is Remote Shutter?" prose section (quotable facts: P2P, no account, 50 ft, nothing uploaded), six-question FAQ with FAQPage schema, HowTo schema on the existing steps. Existing design/copy untouched.

public/llms.txt: markdown site map for AI crawlers (emerging standard; GPTBot and ClaudeBot already crawl us cleanly).

Deliberately not included: aggregateRating schema — worldwide average is 3.32★ right now; add it after the review-prompt play lifts it.

Verification

  • npx jest: 12/12 pass (2 new tests for the homepage sections)
  • npm run build: clean static export, all 7 posts prerendered, FAQPage/HowTo schema and llms.txt confirmed in out/
  • npx eslint .: clean

🤖 Generated with Claude Code

App Store analytics show ChatGPT (com.openai.chat) is now our top named
first-time-download referrer, with Gemini and Bing appearing too — but the
site had almost nothing for an assistant to retrieve: a 123-word homepage
and one welcome post. This gives assistants and search engines real
passages to cite:

- Six guides in posts/, one per question people actually ask assistants
  (old iPhone as remote camera, group photos, no-Bluetooth remote,
  iPad/Mac as monitor, Apple Watch remote, three-way comparison)
- Optional faq: frontmatter on posts renders a visible FAQ section plus
  FAQPage JSON-LD
- Homepage: What-is prose section, six-question FAQ with FAQPage schema,
  HowTo schema on the existing steps
- public/llms.txt site map for AI crawlers

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

📊 Test Coverage Report

626/638 tests passed · ⏭️ 12 skipped

Metric Coverage
App code (excl. generated + vendored Theater) █████████░░░░░░░░░░░ 44.6% 🔴
Whole target █████████░░░░░░░░░░░ 45.8% 🔴

🎥 Capture & session core

File Coverage Lines
CaptureEngine.swift ██░░░░░░░░░░░░░░░░░░ 10.7% 164/1529 🔴
RecordingPipeline.swift ████████████░░░░░░░░ 59.7% 284/476 🟡
FrameStreamingCoordinator.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/124 🔴
FrameStreamer.swift ██████████████░░░░░░ 69.2% 72/104 🟡
RemoteCmdFlatBuffers.swift ███████████████████░ 96.2% 1200/1247 🟢
📁 Full report — 87 files
File Coverage Lines
CountdownTimer.swift ████████████████████ 100.0% 48/48 🟢
JPEGFrameEncoder.swift ████████████████████ 100.0% 12/12 🟢
CameraPreviewMode.swift ████████████████████ 100.0% 13/13 🟢
AppActivityMonitor.swift ████████████████████ 100.0% 31/31 🟢
AppTheme.swift ████████████████████ 100.0% 33/33 🟢
ZoomScale.swift ████████████████████ 100.0% 76/76 🟢
DebugLog.swift ████████████████████ 100.0% 2/2 🟢
Messages.swift ████████████████████ 100.0% 7/7 🟢
MonitorChrome.swift ████████████████████ 100.0% 56/56 🟢
MultipeerMessages.swift ████████████████████ 100.0% 12/12 🟢
StreamingConfig.swift ████████████████████ 100.0% 34/34 🟢
Locked.swift ████████████████████ 100.0% 19/19 🟢
ScannerLobby.swift ████████████████████ 100.0% 5/5 🟢
FrameCreditWindow.swift ████████████████████ 100.0% 9/9 🟢
AppDelegate.swift ████████████████████ 100.0% 17/17 🟢
HEICFrameEncoder.swift ████████████████████ 100.0% 17/17 🟢
PeerCompatibility.swift ████████████████████ 100.0% 42/42 🟢
DeviceScannerViewModel.swift ████████████████████ 99.1% 112/113 🟢
FrameSender.swift ████████████████████ 98.4% 187/190 🟢
FocusPointMapping.swift ████████████████████ 97.6% 40/41 🟢
RemoteCmdFlatBuffers.swift ███████████████████░ 96.2% 1200/1247 🟢
RemoteCmds.swift ███████████████████░ 95.9% 301/314 🟢
WatchSharedTypes.swift ███████████████████░ 94.0% 236/251 🟢
WatchPreviewStreamer.swift ███████████████████░ 93.6% 44/47 🟢
VP9FrameEncoder.swift ███████████████████░ 92.7% 153/165 🟢
WelcomeView.swift ██████████████████░░ 89.3% 492/551 🟢
VideoTransferProgressView.swift █████████████████░░░ 84.0% 295/351 🟢
UIImage+gif.swift █████████████████░░░ 83.2% 129/155 🟢
UIAlertController.swift █████████████████░░░ 83.0% 44/53 🟢
CameraDeviceDescriptor.swift ████████████████░░░░ 81.0% 34/42 🟢
CameraProgressOverlayView.swift ████████████████░░░░ 78.5% 186/237 🟡
MonitorView.swift ███████████████░░░░░ 76.8% 1178/1534 🟡
FlatBufferSchemas_generated.swift (excluded from app-code metric) ███████████████░░░░░ 75.6% 742/982 🟡
RolePickerView.swift ███████████████░░░░░ 75.4% 306/406 🟡
RecordingTimer.swift ███████████████░░░░░ 73.5% 61/83 🟡
CameraRecordingTimerView.swift ███████████████░░░░░ 73.4% 127/173 🟡
WelcomeViewModel.swift ███████████████░░░░░ 73.3% 96/131 🟡
SettingsViewModel.swift ██████████████░░░░░░ 70.9% 90/127 🟡
DeviceScannerView.swift ██████████████░░░░░░ 70.3% 1132/1611 🟡
SessionCoordinator.swift ██████████████░░░░░░ 69.8% 1732/2480 🟡
FrameStreamer.swift ██████████████░░░░░░ 69.2% 72/104 🟡
MonitorPresenter.swift █████████████░░░░░░░ 65.3% 154/236 🟡
WelcomeViewController.swift █████████████░░░░░░░ 64.1% 41/64 🟡
UIAlertPresenter.swift ████████████░░░░░░░░ 60.5% 26/43 🟡
RecordingPipeline.swift ████████████░░░░░░░░ 59.7% 284/476 🟡
MediaProcessors.swift ████████████░░░░░░░░ 58.3% 7/12 🟡
StoreManager.swift ███████████░░░░░░░░░ 53.2% 75/141 🟡
UICmds.swift ██████████░░░░░░░░░░ 50.0% 96/192 🟡
CameraViewModel.swift ██████████░░░░░░░░░░ 49.6% 126/254 🔴
ZoomPill.swift ██████████░░░░░░░░░░ 49.4% 168/340 🔴
UIViewController+SwiftUIHosting.swift ██████████░░░░░░░░░░ 48.4% 15/31 🔴
FrameCodecs.swift ██████████░░░░░░░░░░ 48.1% 25/52 🔴
FrameStreamReceiver.swift █████████░░░░░░░░░░░ 46.3% 238/514 🔴
SceneDelegate.swift █████████░░░░░░░░░░░ 45.8% 11/24 🔴
MonitorViewModel.swift █████████░░░░░░░░░░░ 44.1% 186/422 🔴
PurchaseManaging.swift ████████░░░░░░░░░░░░ 42.0% 21/50 🔴
HEVCFrameEncoder.swift ████████░░░░░░░░░░░░ 40.1% 93/232 🔴
MonitorViewController.swift ███████░░░░░░░░░░░░░ 37.3% 84/225 🔴
EnumExtensions.swift ███████░░░░░░░░░░░░░ 33.9% 40/118 🔴
CameraScreenView.swift ██████░░░░░░░░░░░░░░ 28.5% 148/520 🔴
DeviceScannerViewController.swift ██████░░░░░░░░░░░░░░ 28.1% 107/381 🔴
WatchSessionManager.swift ████░░░░░░░░░░░░░░░░ 20.8% 37/178 🔴
SoundManager.swift ████░░░░░░░░░░░░░░░░ 20.0% 4/20 🔴
MonitorViewController+SwiftUI.swift ███░░░░░░░░░░░░░░░░░ 14.4% 67/465 🔴
CaptureEngine.swift ██░░░░░░░░░░░░░░░░░░ 10.7% 164/1529 🔴
SwiftConstants.swift ██░░░░░░░░░░░░░░░░░░ 10.3% 6/58 🔴
RolePickerController.swift ██░░░░░░░░░░░░░░░░░░ 10.2% 23/226 🔴
PeerLinkStatus.swift █░░░░░░░░░░░░░░░░░░░ 7.1% 10/141 🔴
WatchRemoteCameraController.swift █░░░░░░░░░░░░░░░░░░░ 3.2% 9/279 🔴
CameraPermissionsView.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/640 🔴
CameraHostController.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/197 🔴
RemoteShutterHelpView.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/1373 🔴
CameraPermissionErrorView.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/416 🔴
PhotosAccessDeniedView.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/606 🔴
FrameStreamingCoordinator.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/124 🔴
MicrophonePermissionPromptView.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/347 🔴
SettingsView.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/760 🔴
Photos.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/12 🔴
LocalNetworkPermissionView.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/747 🔴
OrientationUtils.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/18 🔴
PermissionManager.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/159 🔴
PhotosAccessHelper.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/324 🔴
CameraRig.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/574 🔴
StreamLog.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/1 🔴
MultipeerService.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/116 🔴
Data+MD5.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/4 🔴
CameraCountdownTorch.swift ░░░░░░░░░░░░░░░░░░░░ 0.0% 0/61 🔴

Generated from 029c008 · workflow run

@darioalessandro
darioalessandro merged commit f474fc6 into master Aug 10, 2026
6 checks passed
@darioalessandro
darioalessandro deleted the seo-answer-content branch August 10, 2026 21:45
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