Skip to content

Conversation

@chasepoirier
Copy link

Summary

This PR introduces the Broadcast app, a new Contentful Sidebar App that integrates with ElevenLabs Neural Text-to-Speech API to convert entry text into audio assets.

Features

  • Secure API Integration: ElevenLabs API key stored as a secret installation parameter, only accessible in backend functions
  • Voice Selection: Fetches available voices from ElevenLabs and presents them in a dropdown
  • Field Selection: Supports Symbol, Text, and RichText field types for audio conversion
  • Asset Management: Automatically creates and processes audio assets in Contentful
  • Error Handling: User-friendly error messages for API errors, quota limits, and configuration issues

Architecture

  • Frontend: React + TypeScript + Forma 36 components
  • Backend: Contentful Functions for secure API calls
  • Communication: App Actions for frontend-to-backend RPC

Files Added

Path Purpose
contentful-app-manifest.json Functions, actions, and network allowlist
functions/common.ts Shared CMA client and types
functions/getVoices.ts Fetches ElevenLabs voices
functions/generateAudio.ts TTS generation and asset upload
src/locations/ConfigScreen.tsx API key input and content type selector
src/locations/Sidebar.tsx Voice selector, field selector, generate button

Testing

  • TypeScript compilation passes
  • Vite build succeeds
  • Functions build succeeds

Next Steps

  • Add unit tests for functions and components
  • Create README.md with setup instructions
  • End-to-end testing in a Contentful environment

- Add sidebar location with voice/field selection
- Add backend functions for secure ElevenLabs API integration
- Add config screen for API key and content type setup
- Support Symbol, Text, and RichText field types
@chasepoirier chasepoirier requested a review from a team as a code owner January 20, 2026 20:43
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.

2 participants