DEV Community

VoiceDeveloper
VoiceDeveloper

Posted on

How to Deploy a Voice AI Web App: ElevenLabs + WordPress on Bluehost

How to Deploy a Voice AI Web App: ElevenLabs + WordPress on Bluehost

1. Why Voice AI Matters

Voice AI is reshaping how we interact with websites. From dynamic FAQs to personalized audio tours, text‑to‑speech (TTS) and voice cloning let you deliver content in a human‑like voice that adapts to your audience. If you’ve been itching to add a voice layer to your WordPress site, the combination of ElevenLabs for TTS and Bluehost for hosting makes the process fast, affordable, and developer‑friendly.


2. Get Started with ElevenLabs

ElevenLabs offers a robust, cloud‑based TTS API that supports realistic voice cloning. Sign up with the affiliate link below to unlock the full suite of voices and start experimenting.

2.1 Create an API Key

  1. Log in to your ElevenLabs dashboard.
  2. Navigate to API Settings → Create New Key.
  3. Copy the key; you’ll need it in your code.

2.2 Explore Voice Options

ElevenLabs lets you preview hundreds of voices. Pick one that matches your brand tone. For example, the “en‑US‑female‑1” voice is a popular starting point.


3. Build a Minimal TTS Endpoint

Below is a tiny Python Flask app that forwards user input to ElevenLabs and streams back the audio. Feel free to swap Python for Node, Go, or whatever you’re comfortable with.

# tts_server.py
from flask import Flask, request, Response
import requests
import os

app = Flask(__name__)
ELEVENLABS_API_KEY = os.getenv("ELEVENLABS_API_KEY")
ELEVENLABS_URL = "https://api.elevenlabs.io/v1/text-to-speech/en-US-female-1"

@app.route("/tts", methods=["POST"])
def tts():
    data = request.json
    text = data.get("text", "")
    if not text:
        return {"error": "No text provided"}, 400

    headers = {
        "xi-api-key": ELEVENLABS_API_KEY,
        "Content-Type": "application/json"
    }
    payload = {
        "text": text,
        "voice_settings": {
            "stability": 0.75,
            "similarity_boost": 0.85
        }
    }

    resp = requests.post(ELEVENLABS_URL, json=payload, headers=headers, stream=True)

    return Response(
        resp.iter_content(chunk_size=4096),
        status=resp.status_code,
        content_type="audio/mpeg"
    )

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)
Enter fullscreen mode Exit fullscreen mode

Run it locally

export ELEVENLABS_API_KEY="YOUR_KEY"
python tts_server.py
Enter fullscreen mode Exit fullscreen mode

You can test it with curl:

curl -X POST http://localhost:5000/tts \
     -H "Content-Type: application/json" \
     -d '{"text":"Hello, world!"}' \
     --output hello.mp3
Enter fullscreen mode Exit fullscreen mode

4. Hook the Endpoint Into WordPress

4.1 Create a Shortcode Plugin

Add the following to wp-content/plugins/voice-tts/voice-tts.php:

<?php
/*
Plugin Name: Voice TTS
Description: Simple shortcode to generate speech from text.
Version: 1.0
Author: Your Name
*/

function voice_tts_shortcode($atts) {
    $atts = shortcode_atts(
        array(
            'text' => '',
        ),
        $atts,
        'voice_tts'
    );

    $text = esc_html($atts['text']);
    $api_url = 'https://your-domain.com/tts'; // Update if you host the API elsewhere

    $audio_url = $api_url . '?text=' . urlencode($text);

    return '<audio controls src="' . esc_url($audio_url) . '"></audio>';
}
add_shortcode('voice_tts', 'voice_tts_shortcode');
Enter fullscreen mode Exit fullscreen mode

Usage in a post or page

[voice_tts text="Welcome to our new product line!"]
Enter fullscreen mode Exit fullscreen mode

4.2 Deploy the API to Bluehost

  1. Choose a Plan

    Bluehost offers shared, VPS, and dedicated options. For most voice‑AI prototypes, a shared plan is enough.

  2. Upload Your Code

    • Use cPanel’s File Manager or an SFTP client.
    • Create a folder like /voice-api and upload tts_server.py.
    • If you’re using the shared plan, install Python and Flask via the terminal (or use the “Setup” wizard for PHP if you rewrite the server in PHP).
  3. Set Up a Reverse Proxy (Optional)

    If you’re running the Flask app on port 5000, you can expose it via Apache/Nginx using a proxy. Example for Apache:

   <VirtualHost *:80>
       ServerName your-domain.com

       ProxyPreserveHost On
       ProxyPass /tts http://127.0.0.1:5000/tts
       ProxyPassReverse /tts http://127.0.0.1:5000/tts
   </VirtualHost>
Enter fullscreen mode Exit fullscreen mode
  1. Secure the Endpoint Add a simple API key header or use WordPress’s nonce system to prevent abuse. For a production app, consider OAuth or JWT.

5. Fine‑Tuning and Scaling

  • Caching: Store generated MP3s in a short‑term cache (e.g., Redis) to reduce API calls.
  • Batch Requests: ElevenLabs supports batch synthesis; useful for large pages.
  • Voice Customization: Use ElevenLabs’ voice cloning to match your brand’s voice.
  • Error Handling: Wrap your API calls in try/except blocks and log failures.

6. Final Thoughts

Deploying a voice‑enabled web app has never been easier. ElevenLabs gives you the cutting‑edge TTS engine, while Bluehost’s straightforward hosting and affordable plans let you focus on building rather than managing infrastructure. Whether you’re adding a “listen to article” feature or creating a voice‑controlled chatbot, the stack outlined here will get you up and running in under an hour.

Ready to give your site a voice?

Happy coding, and may your audio be ever natural!

Top comments (0)