Skip to content

Conversation

@viteinfinite
Copy link

Summary

  • Add separate audio track recording (host and guest saved as individual files)
  • Implement checkpoint system with IndexedDB (auto-saves every 60s)
  • Add checkpoint management UI (view, download, delete checkpoints)
  • Improve browser close confirmation during recording
  • Fix XSS vulnerability in checkpoint modal

Features

  • Separate tracks: Host and guest audio saved as -host.webm and -guest.webm
  • Checkpoints: Auto-save to browser IndexedDB every 60 seconds, accessible via modal UI
  • Close protection: Warns user when closing browser during active recording
  • Security: XSS vulnerability fixed with HTML escaping for dynamic content

Security

  • Fixed XSS vulnerability in checkpoint modal (HTML escaping for IndexedDB data)

Notes

  • Checkpoints stored in IndexedDB with automatic cleanup of previous session checkpoints
  • Modal UI allows downloading/deleting checkpoints from all sessions

Co-Authored-By: Claude noreply@anthropic.com

viteinfinite and others added 10 commits January 12, 2026 10:55
Features:
- Save host and guest audio tracks separately (-host.webm, -guest.webm)
- Auto-save checkpoints every 60 seconds to IndexedDB
- Checkpoint management UI (view, download, delete)
- Improved browser close confirmation during recording
- XSS vulnerability fix in checkpoint modal

Co-Authored-By: Claude <noreply@anthropic.com>
- Add proper body padding
- Add spacing between buttons in chosenAction row
- Add margins to containers
- Style duration badge
- Improve footer layout with centered text and border
- Add spacing to modal content
- Add margins to small buttons

Co-Authored-By: Claude <noreply@anthropic.com>
- Add stop confirmation modal with "Are you sure you want to end the recording?"
- Modify stop button to show confirmation modal instead of directly stopping
- Add confirmStop button handler that actually calls stopCall()

Co-Authored-By: Claude <noreply@anthropic.com>
- Add restart confirmation modal asking "Are you sure you want to clear the current recording and start over?"
- Add Restart button with refresh icon (hidden by default)
- Add restartCall() function that reloads the page to start fresh
- Show restart button after call ends
- Wire up click handlers for restart button and confirm button

Co-Authored-By: Claude <noreply@anthropic.com>
- Add a readonly text input field in the share modal to display the URL
- Populate the URL field when the QR code is generated
- Makes it easy to copy and paste the link

Co-Authored-By: Claude <noreply@anthropic.com>
- Change github link from pipe/podcall to viteinfinite/podcall

Co-Authored-By: Claude <noreply@anthropic.com>
…attachments

The stop button click handlers were being attached inside onsignalingstatechange,
which fires multiple times. This could cause issues. Move them to document ready
so they're only attached once.

Co-Authored-By: Claude <noreply@anthropic.com>
- Add getSupportedMimeType() to detect browser-supported MIME types
- Add getBlobMimeType() to return appropriate MIME type for Safari (audio/mp4)
- Update MediaRecorder creation to use supported MIME type
- Update all blob creations to use dynamic MIME type
- Update file extensions: .mp4 for Safari, .webm for other browsers
- Fix saveData() and downloadBlob() to use correct extensions

Safari doesn't support audio/webm codec well, preferring audio/mp4 instead.

Co-Authored-By: Claude <noreply@anthropic.com>
1. Start Recording Button:
   - Add green "Start Recording" button (hidden until connection)
   - Modify addStream() to not auto-start recording
   - Add startRecording() function to manually start recorders
   - Show start button when connected, hide when recording starts

2. Mic Level Indicator:
   - Add progress bar showing microphone input level
   - Color-coded: red (too quiet), yellow (ok), green (good), yellow (too loud)
   - Updates 10 times per second using Web Audio API analyser
   - Shows gray when muted

Co-Authored-By: Claude <noreply@anthropic.com>
When guest clicks "Accept" before host has finished setupRTC(),
the offer fails because pc object doesn't exist yet.

- Extract offer processing into processOffer() function
- Check if pc exists before processing offer
- If pc doesn't exist, queue the offer and retry every 100ms
- This fixes the issue where guest has to refresh for host to see session

Co-Authored-By: Claude <noreply@anthropic.com>
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