Audio Playback Page (Slug)
Overview
This is the public audio playback page that loads when someone clicks a shareable link. It requires no authentication and is accessible to anyone with the unique slug URL.
URL Format: https://micdots.com/play/{slug}
Epic 1: Shareable links for audio playback
Related API: See Text-to-Speech Submission API for the backend endpoint that powers this page.
Key Features:
- ✅ Public access with auto-play audio and minimal, distraction-free interface
- ✅ Mobile-optimized, works on any device with a web browser
Live Preview
🎙️
MicDots Audio
Your audio is ready to play
Auto-play enabled: Audio will start automatically when you land on this page
Powered by MicDots
Text-to-Speech Audio QR Platform
API Endpoints
This page uses the following API endpoint:
Get Submission by Slug (Public)
Endpoint: GET /api/v1/play/{slug}
Description: Retrieves audio submission data by unique slug. This is a public endpoint that requires no authentication.
Path Parameters:
- slug: string. Unique URL-safe identifier for the audio submission.
Response: Returns slug, audioUrl (S3 link), original text, and metadata. This data is used to populate the audio player and display information.
Page Characteristics
Design Philosophy
- Minimal UI: Only essential controls, no distractions
- Audio-First: Player is the primary focus
- Mobile-Optimized: Large touch targets, readable on small screens
- Fast Loading: Lightweight page for quick access
Visual Elements
Page Layout
- Branded header with logo, title, and subtitle
- Audio player card with waveform, play/pause button, and progress bar
- Auto-play notice banner
- Footer with branding and platform description
User Experience Flow
Epic 1 (Shareable Link)
- User receives link from result page or QR code
- User clicks link or shares it (can be the QR code link too)
- Browser opens the playback page URL (
/play/{slug}) - API fetches audio data from text-to-speech submission
- Page loads in 1-2 seconds
- Audio auto-plays immediately (if browser allows)
- User can control playback using on-screen controls
Epic 2 (QR Code - Future)
- User scans QR code with their phone camera
- Browser opens the playback page URL (
/play/{slug}) - Same experience as shareable link above
Data Flow
This page is the final step in the text-to-speech submission flow:
- User submits text → TTS Submission Form
- Audio generated → Text-to-speech API creates audio and shareable link
- User receives link → Shareable URL returned immediately (can also be embedded in QR code)
- Link clicked/QR scanned → Opens this playback page (
/play/{slug}) - Audio plays → User hears the generated audio
Data Retrieved:
{
"slug": "happy-birthday-john",
"audioUrl": "https://s3.amazonaws.com/micdots-audio/happy-birthday-john.mp3",
"text": "Happy birthday John! Wishing you all the best on your special day.",
"createdAt": "2024-01-22T14:30:00Z"
}
This data comes from the Text-to-Speech Submission created by the authenticated user.
Technical Behavior
Page Load Flow
- Fetch submission data from API endpoint:
GET /api/v1/play/{slug}- Returns: slug, audioUrl, text, createdAt
- Load audio player with S3 URL from response
- Display text (optional - can show the original text)
- Auto-play audio if browser allows
Auto-Play Implementation
Auto-play Rules:
- Most mobile browsers allow auto-play after user interaction (QR scan)
- Desktop browsers may require user click (show large play button)
- Fallback: If auto-play is blocked, show prominent play button
Audio Source
- Audio file hosted on AWS S3 (from text-to-speech submission or custom upload)
- Generated via ElevenLabs API or uploaded by user
- Permanent storage (manual deletion feature coming in future)
- Format: MP3 (widely supported)
- Bitrate: Varies based on ElevenLabs output or original uploaded file quality
Mobile Considerations
- Responsive Design: Full viewport height, touch-friendly controls, works in portrait and landscape
- Performance: Minimal JavaScript using native HTML5 audio, fast page load, works on slow connections
Access Control
✅ Public Access - No Authentication Required
- Anyone with the link can listen
- No login or account needed
- No rate limiting on playback
- Shareable via any channel (SMS, email, social media)
Use Cases:
- Restaurant menu item descriptions
- Museum exhibit audio guides
- Business card voice introductions
- Product information at retail stores
- Event announcements and schedules
URL Structure
Format
https://micdots.com/play/{slug}
Example
https://micdots.com/play/happy-birthday-john
Properties
- Unique Slug: URL-safe identifier generated from text content
- No Query Parameters: Clean URL for QR encoding (Epic 2)
- Short & Scannable: Optimal for QR code size (Epic 2)
- Human-Readable: Slug is descriptive and easier to share
- Permanent Link: URL works indefinitely until manually deleted
API Endpoint
The page fetches audio data from:
GET /api/v1/play/{slug}
See Text-to-Speech Submission API for technical details.
Browser Compatibility
| Browser | Auto-play | Controls | Status |
|---|---|---|---|
| Chrome Mobile | ✅ Yes | ✅ Full | Supported |
| Safari iOS | ✅ Yes* | ✅ Full | Supported |
| Firefox Mobile | ✅ Yes | ✅ Full | Supported |
| Chrome Desktop | ⚠️ May block | ✅ Full | Supported |
| Safari Desktop | ⚠️ May block | ✅ Full | Supported |
| Edge | ⚠️ May block | ✅ Full | Supported |
*iOS Safari allows auto-play after user gesture (QR scan counts)
Error Handling
Submission Not Found (404)
When GET /api/v1/play/{slug} returns 404, show error message:
"Audio not found or has been deleted.
Please contact the creator if you believe this is an error."
API Response:
{
"success": false,
"error": {
"code": "SUBMISSION_NOT_FOUND",
"message": "Submission with slug 'xxx' not found."
}
}
Playback Error
When audio file fails to load or play, show fallback message:
"Unable to play audio. Please check your internet connection and try again."
Browser Not Supported
Show message for browsers without HTML5 audio support:
"Your browser doesn't support audio playback.
Please try opening this link in a modern browser."
API Service Error (500)
When API is unavailable, show:
"Service temporarily unavailable. Please try again in a few moments."
Related Pages
- TTS Submission Form - Where users submit text and get shareable link
- Text-to-Speech Submission API - Backend API powering this page
- User Flow - Complete journey including audio playback