2 Commits

Author SHA1 Message Date
ordinarthur
6034da7153 fix(web): responsive guards for iOS WKWebView
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 40s
The native shell exposed a few latent issues:
- viewport lacked viewport-fit=cover + maximum-scale so content could
  zoom and leak under the notch,
- body had no overflow-x guard, so any one-line string pushed the layout
  wider than the device,
- #root had no env(safe-area-inset-*) padding, hiding content behind
  the status bar now that Capacitor's contentInset is off.

Flipping contentInset from "always" to "never" lets the CSS env()
values drive the inset (single source of truth, no double padding).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-20 16:13:29 +02:00
ordinarthur
9674b19590 feat(ios): Capacitor shell + Share Extension scaffold
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 1m14s
Phase 4 (mobile) kickoff. Ships the native iOS wrapper that lets users
share photos/videos from the iOS Share Sheet into AnyDrop — the one
thing the PWA alone cannot do on iOS because Apple still ignores the
Web Share Target API.

Architecture:
- web/ios/ — Capacitor-generated Xcode project pointing the WKWebView
  at https://anydrop.arthurbarre.fr (real web app; only native code
  is the share-in path, so no "thin wrapper" App Store concern).
- AnyDropShare (Share Extension target) — stashes selected items into
  an App Group shared container then opens anydrop://share.
- SharedInboxPlugin (custom Capacitor plugin) — drains that container
  from JS after the URL fires, returning base64 blobs.
- web/src/lib/nativeShare.ts — bridge that rehydrates File objects and
  routes them into the existing /share page flow (same one Android uses).

Xcode-side target registration + signing isn't scriptable; runbook is
in docs/ios-setup.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-20 15:59:51 +02:00