Skip to content

Add Welcome Party trigger#78

Merged
stephendolan merged 4 commits intotupleapp:mainfrom
stephendolan:welcome-party
Mar 6, 2026
Merged

Add Welcome Party trigger#78
stephendolan merged 4 commits intotupleapp:mainfrom
stephendolan:welcome-party

Conversation

@stephendolan
Copy link
Copy Markdown
Contributor

Summary

  • Over-the-top participant-joined trigger that announces callers with AI-generated voice and sound effects
  • Uses ElevenLabs v3 with the Xavier voice (Dominating, Metallic Announcer) and audio tags for expressive delivery
  • Randomly picks from 5 themed entrances: WWE, Royal Fanfare, Sports Arena, Movie Trailer, DJ Hype
  • Full-screen confetti animation with themed emoji and subtitles
  • Voice lines cached by content hash so repeat callers don't burn API credits
  • Requires ELEVENLABS_API_KEY environment variable

Test plan

  • Tested all 5 themes with TUPLE_TRIGGER_THEME_OVERRIDE
  • Tested with special characters in names (apostrophes, etc.)
  • Verified confetti page auto-closes when audio finishes
  • Verified voice line caching works on repeat runs
  • Verified graceful fallback when API key is missing

🤖 Generated with Claude Code

Over-the-top participant-joined trigger using ElevenLabs v3 TTS
with Xavier voice and audio tags. Randomly picks from 5 themes
(WWE, Royal, Sports, Movie Trailer, DJ Hype) with matching sound
effects, confetti animation, and AI voice announcements.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 6, 2026

Thanks for your contribution, @stephendolan! 🎉

We've done some automated sense checks on your trigger, welcome-party. All looks great! Someone from Tuple will now manually review your trigger's code and get back to you.

stephendolan and others added 3 commits March 6, 2026 14:30
- Validate ElevenLabs responses before caching: check HTTP 200 status
  and verify the response is actually an audio file, not a JSON error
  body. Write to a temp file first and only promote to cache on success.
- Replace window.close() with AppleScript tab close, since browsers
  block window.close() on tabs not opened by script.
- Add CSS fade-out transition before tab closes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tuple triggers run in an isolated XPC service and don't inherit
shell environment variables. Added a commented-out source line
so users know where to point it.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace browser-based confetti display with a compiled Swift WebKit
window. Opens as a centered 800x500 floating overlay, fades out and
closes itself when audio finishes. No browser tabs to clean up.

Also fix mktemp on macOS (doesn't support suffixes after X pattern).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@stephendolan stephendolan merged commit a2a495b into tupleapp:main Mar 6, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant