16 Commits

Author SHA1 Message Date
ordinarthur
62aeb895c1 perf: 16x larger chunks + native backpressure for faster transfers
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 41s
- CHUNK_SIZE: 16 KB → 256 KB (16x fewer send calls)
- MAX_BUFFER: 1 MB → 4 MB (more data in flight)
- waitForDrain: polling setTimeout → native bufferedamountlow event

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 12:53:36 +02:00
ordinarthur
8212bc7391 refactor: simplify layout flow
Some checks failed
Build & Deploy / build-and-deploy (push) Has been cancelled
1. Peers (available devices)
2. Pair device + Public link (side by side buttons, modals for details)
3. File drop + Text send (only when a peer is selected)
4. Transfer progress

Removed the always-visible drop zone and join-code input from
PeerList. Pairing and public room now open as overlay modals.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 12:52:54 +02:00
ordinarthur
612222ccde feat: transfer resume after page refresh
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 43s
Transfers now survive page refreshes:
- beforeunload warning prevents accidental refresh during transfer
- Sender's files cached in IndexedDB before sending
- Receiver's chunks persisted in IndexedDB as they arrive
- On reconnect, receiver sends transfer-resume with bytes received
- Sender resumes from offset, skipping already-sent data
- Old transfer data auto-cleaned after 1 hour

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 12:45:05 +02:00
ordinarthur
d6f7a2374b feat: permanent device pairing for cross-network sharing
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 43s
Adds a groupId-based pairing system so devices can always see
each other regardless of network. Scan a QR code once from the
other device, and they're permanently linked via a shared group
stored in localStorage. No account, no email — just one-time QR
scan like Bluetooth pairing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 12:39:21 +02:00
ordinarthur
2e3408e8d7 fix: local IP detection regex + add join code UI when no peers found
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 38s
The ICE candidate regex was matching the wrong part of the candidate
string. Also, iOS Safari blocks local IP detection via WebRTC (mDNS
obfuscation), so when no peers are found, show a prominent "create
link" button and a join-by-code input for easy cross-network pairing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 12:34:01 +02:00
ordinarthur
99a182a831 feat: LAN detection fallback via WebRTC local IP
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 41s
iCloud Private Relay hides iPhones' real public IP, breaking
IP-based LAN grouping. Devices now detect their local IP
(192.168.x.x) via WebRTC ICE candidates and send it to the
server. The server groups devices by local subnet as a fallback
when public IPs differ.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 12:27:36 +02:00
ordinarthur
d1c4b3d196 feat: offline peers visible + push wake + iOS share sheet + no self-notification
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 44s
- Offline push-subscribed devices appear dimmed in peer list
- Tap offline peer to send wake push notification
- Skip self-notification (own deviceId excluded)
- iOS/Android share sheet via Web Share Target API
- Online/offline indicator dot on peer avatars
2026-04-14 12:12:08 +02:00
ordinarthur
0034e91672 feat: push notifications + iOS share sheet integration
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 37s
- Web Push API for offline device notifications (VAPID)
- Custom service worker with push + share target handlers
- iOS/Android share sheet support via Web Share Target API
- Dedicated /share page with one-tap send to nearby peer
- Background tab notifications for incoming transfers
- Persistent deviceId per device
2026-04-14 12:05:59 +02:00
ordinarthur
fd249abbf1 feat: push notifications + background transfer alerts
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 1m1s
- Web Push API for offline device notifications
- Custom service worker with push event handling
- Local notifications for background tab transfers
- VAPID keys in K8s config
- Persistent deviceId per device
2026-04-14 12:03:43 +02:00
ordinarthur
d8d747276a fix: gate signaling behind profile setup, fix SW cache
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 37s
2026-04-14 11:55:51 +02:00
ordinarthur
e3085ea7a2 feat: local device profile replaces animal naming
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 35s
- Users set their own device name and optional profile photo
- Profile persisted in localStorage, no account needed
- Auto-detect device type from user agent
- Server validates client-provided profile defensively
- PeerAvatar shows photo or device icon
- ProfileSetup modal on first visit, editable from header
2026-04-14 11:53:03 +02:00
ordinarthur
4dbdfedae0 feat: local device profile (name + photo) replaces animal naming
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 43s
- Users set their own device name and optional profile picture
- Profile persisted in localStorage (no account needed)
- Auto-detect device type from user agent (iPhone, Mac, Android...)
- Server uses client-provided profile instead of generating names
- PeerAvatar shows photo or device icon instead of animal emojis
- ProfileSetup modal on first visit + editable from header
2026-04-14 11:47:38 +02:00
ordinarthur
953f3cb8a1 ci: retry after worker reboot
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 3m2s
2026-04-14 10:52:49 +02:00
ordinarthur
94339a1cb2 ci: retry after docker dns fix
Some checks are pending
Build & Deploy / build-and-deploy (push) Waiting to run
2026-04-14 10:44:44 +02:00
ordinarthur
fea93dc121 ci: trigger first deployment
Some checks failed
Build & Deploy / build-and-deploy (push) Failing after 10s
2026-04-14 10:39:24 +02:00
ordinarthur
9d6e4da4ae feat: initial commit with full deployment setup
Some checks failed
Build & Deploy / build-and-deploy (push) Failing after 8s
Includes React PWA frontend, WebSocket signaling server, shared types,
K8s manifests, Gitea CI/CD workflow, nginx config, and Dockerfiles.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 10:30:45 +02:00