docs: Create comprehensive README documentation
- Updated main README with detailed setup, Kokoro model configuration, and troubleshooting - Enhanced backend README with API documentation, Docker setup, and testing instructions - Improved frontend README with component details, deployment guide, and development tips - Added workflow testing steps and common error solutions - Documented all supported languages, voices, and configuration options Implements task 14 from text-to-audiobook spec Requirements: 13.1, 13.2, 13.3, 13.4, 13.5
This commit is contained in:
@@ -1,60 +1,555 @@
|
||||
# Text to Audiobook Frontend
|
||||
|
||||
React TypeScript frontend for the Text to Audiobook application.
|
||||
React TypeScript single-page application for converting text to multi-voice audiobooks.
|
||||
|
||||
## Setup
|
||||
## Overview
|
||||
|
||||
### Prerequisites
|
||||
The frontend provides an intuitive interface for:
|
||||
- Text input with role marker support
|
||||
- Automatic role detection
|
||||
- Voice assignment per role
|
||||
- Language and speed configuration
|
||||
- Audio playback and download
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Node.js 20.19+ or 22.12+
|
||||
- npm or yarn
|
||||
- Backend service running (see [Backend README](../backend/README.md))
|
||||
|
||||
### Installation
|
||||
## Installation
|
||||
|
||||
1. Install dependencies:
|
||||
```bash
|
||||
# Install dependencies
|
||||
npm install
|
||||
```
|
||||
|
||||
2. Create environment file:
|
||||
```bash
|
||||
# Create environment file
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
3. Update `.env` with your backend URL (default: `http://localhost:8000`)
|
||||
## Configuration
|
||||
|
||||
Edit `.env` to configure the backend URL:
|
||||
|
||||
```bash
|
||||
VITE_API_BASE_URL=http://localhost:8000
|
||||
```
|
||||
|
||||
**For production:**
|
||||
```bash
|
||||
VITE_API_BASE_URL=https://your-backend-domain.com
|
||||
```
|
||||
|
||||
## Development
|
||||
|
||||
Start the development server:
|
||||
### Start Development Server
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
The application will be available at `http://localhost:5173`
|
||||
The application will be available at http://localhost:5173
|
||||
|
||||
## Build
|
||||
### Development Features
|
||||
|
||||
- Hot Module Replacement (HMR)
|
||||
- Fast refresh for React components
|
||||
- TypeScript type checking
|
||||
- ESLint integration
|
||||
|
||||
### Development Commands
|
||||
|
||||
```bash
|
||||
# Start dev server
|
||||
npm run dev
|
||||
|
||||
# Type check
|
||||
npm run type-check
|
||||
|
||||
# Lint code
|
||||
npm run lint
|
||||
|
||||
# Format code
|
||||
npm run format
|
||||
```
|
||||
|
||||
## Production Build
|
||||
|
||||
### Build for Production
|
||||
|
||||
Build for production:
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
Preview production build:
|
||||
Built files will be in `dist/` directory.
|
||||
|
||||
### Preview Production Build
|
||||
|
||||
```bash
|
||||
npm run preview
|
||||
```
|
||||
|
||||
Preview server runs on http://localhost:4173
|
||||
|
||||
### Build Optimization
|
||||
|
||||
The production build includes:
|
||||
- Code minification
|
||||
- Tree shaking
|
||||
- Asset optimization
|
||||
- CSS purging (Tailwind)
|
||||
- Source maps (optional)
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
src/
|
||||
├── api/ # API client modules
|
||||
├── components/ # React components
|
||||
├── App.tsx # Main application component
|
||||
├── main.tsx # Application entry point
|
||||
└── index.css # Global styles (Tailwind)
|
||||
frontend/
|
||||
├── src/
|
||||
│ ├── api/
|
||||
│ │ └── tts.ts # API client & TypeScript interfaces
|
||||
│ ├── components/
|
||||
│ │ ├── TextInputSection.tsx # Text input component
|
||||
│ │ ├── VoiceAssignmentSection.tsx # Voice assignment UI
|
||||
│ │ └── AudioPlayerSection.tsx # Audio playback component
|
||||
│ ├── App.tsx # Main application & state management
|
||||
│ ├── App.css # Application styles
|
||||
│ ├── main.tsx # Application entry point
|
||||
│ └── index.css # Global styles (Tailwind)
|
||||
├── public/
|
||||
│ └── vite.svg # Public assets
|
||||
├── index.html # HTML template
|
||||
├── package.json # Dependencies & scripts
|
||||
├── tsconfig.json # TypeScript configuration
|
||||
├── vite.config.ts # Vite configuration
|
||||
├── tailwind.config.js # Tailwind CSS configuration
|
||||
├── postcss.config.js # PostCSS configuration
|
||||
├── eslint.config.js # ESLint configuration
|
||||
├── .env.example # Environment template
|
||||
└── README.md # This file
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
## Components
|
||||
|
||||
- `VITE_API_BASE_URL` - Backend API base URL (default: http://localhost:8000)
|
||||
### App Component (`App.tsx`)
|
||||
|
||||
Main application container managing workflow state.
|
||||
|
||||
**State:**
|
||||
- Text input
|
||||
- Detected roles
|
||||
- Voice assignments
|
||||
- Language selection
|
||||
- Speed setting
|
||||
- Audio URL
|
||||
- Loading states
|
||||
- Error handling
|
||||
|
||||
**Phases:**
|
||||
1. Input - Text entry
|
||||
2. Assignment - Voice selection
|
||||
3. Generated - Audio playback
|
||||
|
||||
### TextInputSection Component
|
||||
|
||||
Text input interface with validation.
|
||||
|
||||
**Features:**
|
||||
- Large multiline textarea
|
||||
- Character count (optional)
|
||||
- Validation for empty text
|
||||
- "Next: Assign voices" button
|
||||
- Loading state support
|
||||
|
||||
### VoiceAssignmentSection Component
|
||||
|
||||
Voice assignment and configuration interface.
|
||||
|
||||
**Features:**
|
||||
- Role list with voice dropdowns
|
||||
- Language selector (American English, British English, French, Japanese)
|
||||
- Speed slider (0.5x - 1.5x)
|
||||
- "Generate Audiobook" button
|
||||
- Validation (all roles must have voices)
|
||||
|
||||
### AudioPlayerSection Component
|
||||
|
||||
Audio playback and download interface.
|
||||
|
||||
**Features:**
|
||||
- HTML5 audio player with controls
|
||||
- Download button
|
||||
- Blob URL management
|
||||
|
||||
## API Client
|
||||
|
||||
### TypeScript Interfaces
|
||||
|
||||
```typescript
|
||||
interface Role {
|
||||
id: string;
|
||||
label: string;
|
||||
}
|
||||
|
||||
interface RoleWithVoice extends Role {
|
||||
voice: string;
|
||||
}
|
||||
|
||||
interface RolesResponse {
|
||||
roles: Role[];
|
||||
}
|
||||
|
||||
interface GenerateRequest {
|
||||
text: string;
|
||||
lang: string;
|
||||
roles: { id: string; voice: string }[];
|
||||
speed?: number;
|
||||
}
|
||||
```
|
||||
|
||||
### API Functions
|
||||
|
||||
```typescript
|
||||
// Detect roles in text
|
||||
async function detectRoles(text: string): Promise<RolesResponse>
|
||||
|
||||
// Generate audiobook
|
||||
async function generateAudiobook(payload: GenerateRequest): Promise<Blob>
|
||||
|
||||
// Health check
|
||||
async function checkHealth(): Promise<{ status: string }>
|
||||
```
|
||||
|
||||
## Styling
|
||||
|
||||
### Tailwind CSS
|
||||
|
||||
The application uses Tailwind CSS for styling:
|
||||
|
||||
- Utility-first CSS framework
|
||||
- Responsive design
|
||||
- Dark mode support (optional)
|
||||
- Custom color palette
|
||||
|
||||
### Responsive Design
|
||||
|
||||
Breakpoints:
|
||||
- Mobile: < 640px
|
||||
- Tablet: 640px - 1024px
|
||||
- Desktop: > 1024px
|
||||
|
||||
All components are mobile-friendly with:
|
||||
- Touch-friendly controls (min 44x44px)
|
||||
- Responsive layouts
|
||||
- Readable text sizes
|
||||
- Appropriate spacing
|
||||
|
||||
## Usage Workflow
|
||||
|
||||
### 1. Text Input Phase
|
||||
|
||||
User enters text with role markers:
|
||||
|
||||
```
|
||||
Narrator: Once upon a time...
|
||||
Alice: Hello there!
|
||||
Bob: Hi Alice!
|
||||
```
|
||||
|
||||
Supported patterns:
|
||||
- `RoleName:` - Colon pattern
|
||||
- `[RoleName]` - Bracket pattern
|
||||
|
||||
### 2. Voice Assignment Phase
|
||||
|
||||
- System detects roles automatically
|
||||
- User assigns voice to each role
|
||||
- User selects language
|
||||
- User adjusts speed (optional)
|
||||
|
||||
### 3. Audio Generation Phase
|
||||
|
||||
- Click "Generate Audiobook"
|
||||
- Loading indicator shows progress
|
||||
- Warning for long texts
|
||||
|
||||
### 4. Playback Phase
|
||||
|
||||
- Audio player appears
|
||||
- Play/pause/seek controls
|
||||
- Download button available
|
||||
|
||||
## Error Handling
|
||||
|
||||
### Network Errors
|
||||
|
||||
- Connection failures
|
||||
- Timeout errors
|
||||
- Server unavailable
|
||||
|
||||
**Display:** User-friendly error messages
|
||||
|
||||
### Validation Errors
|
||||
|
||||
- Empty text
|
||||
- Missing voice assignments
|
||||
- Invalid configurations
|
||||
|
||||
**Display:** Inline validation messages
|
||||
|
||||
### API Errors
|
||||
|
||||
- 400 Bad Request
|
||||
- 500 Internal Server Error
|
||||
- Custom error messages
|
||||
|
||||
**Display:** Error banner with details
|
||||
|
||||
## Testing
|
||||
|
||||
### Run Tests
|
||||
|
||||
```bash
|
||||
npm test
|
||||
```
|
||||
|
||||
### Test Coverage
|
||||
|
||||
```bash
|
||||
npm run test:coverage
|
||||
```
|
||||
|
||||
### Test Files
|
||||
|
||||
- Component tests
|
||||
- API client tests
|
||||
- Integration tests
|
||||
- E2E tests (optional)
|
||||
|
||||
## Browser Support
|
||||
|
||||
### Supported Browsers
|
||||
|
||||
- Chrome/Edge 90+
|
||||
- Firefox 88+
|
||||
- Safari 14+
|
||||
- Opera 76+
|
||||
|
||||
### Required Features
|
||||
|
||||
- ES2020 support
|
||||
- Fetch API
|
||||
- HTML5 Audio
|
||||
- Blob API
|
||||
- Local Storage (optional)
|
||||
|
||||
## Performance
|
||||
|
||||
### Optimization Techniques
|
||||
|
||||
1. **Code splitting**: Dynamic imports for large components
|
||||
2. **Lazy loading**: Load components on demand
|
||||
3. **Memoization**: React.memo for expensive components
|
||||
4. **Debouncing**: Input handlers
|
||||
5. **Asset optimization**: Image compression, lazy loading
|
||||
|
||||
### Performance Monitoring
|
||||
|
||||
```bash
|
||||
# Analyze bundle size
|
||||
npm run build -- --analyze
|
||||
|
||||
# Lighthouse audit
|
||||
npm run lighthouse
|
||||
```
|
||||
|
||||
## Deployment
|
||||
|
||||
### Static Hosting
|
||||
|
||||
The built application can be deployed to:
|
||||
- Vercel
|
||||
- Netlify
|
||||
- GitHub Pages
|
||||
- AWS S3 + CloudFront
|
||||
- Any static file server
|
||||
|
||||
### Deployment Steps
|
||||
|
||||
1. Build the application:
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
2. Configure environment variables for production
|
||||
|
||||
3. Deploy `dist/` directory to hosting service
|
||||
|
||||
### Environment Variables in Production
|
||||
|
||||
Set `VITE_API_BASE_URL` to your production backend URL:
|
||||
|
||||
**Vercel:**
|
||||
```bash
|
||||
vercel env add VITE_API_BASE_URL
|
||||
```
|
||||
|
||||
**Netlify:**
|
||||
Add to `netlify.toml`:
|
||||
```toml
|
||||
[build.environment]
|
||||
VITE_API_BASE_URL = "https://api.yourdomain.com"
|
||||
```
|
||||
|
||||
### Example nginx Configuration
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name yourdomain.com;
|
||||
root /var/www/text-to-audiobook;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
# Cache static assets
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Cannot connect to backend
|
||||
|
||||
**Error:** Network request failed
|
||||
|
||||
**Solutions:**
|
||||
1. Verify backend is running: `curl http://localhost:8000/api/health`
|
||||
2. Check `VITE_API_BASE_URL` in `.env`
|
||||
3. Verify CORS settings in backend
|
||||
4. Check browser console for details
|
||||
|
||||
### Audio won't play
|
||||
|
||||
**Error:** Audio playback failed
|
||||
|
||||
**Solutions:**
|
||||
1. Check browser console for errors
|
||||
2. Verify audio format support (WAV)
|
||||
3. Try different browser
|
||||
4. Check audio permissions
|
||||
|
||||
### Build fails
|
||||
|
||||
**Error:** Build errors
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# Clear cache
|
||||
rm -rf node_modules dist
|
||||
npm install
|
||||
|
||||
# Check Node version
|
||||
node --version # Should be 20.19+ or 22.12+
|
||||
|
||||
# Update dependencies
|
||||
npm update
|
||||
```
|
||||
|
||||
### TypeScript errors
|
||||
|
||||
**Error:** Type checking fails
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# Run type check
|
||||
npm run type-check
|
||||
|
||||
# Check tsconfig.json
|
||||
# Verify all dependencies have types
|
||||
```
|
||||
|
||||
### Styling issues
|
||||
|
||||
**Error:** Tailwind classes not working
|
||||
|
||||
**Solutions:**
|
||||
```bash
|
||||
# Rebuild Tailwind
|
||||
npm run build
|
||||
|
||||
# Check tailwind.config.js
|
||||
# Verify PostCSS configuration
|
||||
```
|
||||
|
||||
## Development Tips
|
||||
|
||||
### Hot Reload Issues
|
||||
|
||||
If HMR stops working:
|
||||
```bash
|
||||
# Restart dev server
|
||||
npm run dev
|
||||
|
||||
# Clear Vite cache
|
||||
rm -rf node_modules/.vite
|
||||
```
|
||||
|
||||
### Debugging
|
||||
|
||||
```typescript
|
||||
// Enable debug mode
|
||||
localStorage.setItem('debug', 'true');
|
||||
|
||||
// View API requests
|
||||
// Open browser DevTools → Network tab
|
||||
```
|
||||
|
||||
### Code Quality
|
||||
|
||||
```bash
|
||||
# Format code
|
||||
npm run format
|
||||
|
||||
# Lint and fix
|
||||
npm run lint -- --fix
|
||||
|
||||
# Type check
|
||||
npm run type-check
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
### Code Style
|
||||
|
||||
- Use TypeScript for type safety
|
||||
- Follow React best practices
|
||||
- Use functional components with hooks
|
||||
- Write meaningful component names
|
||||
- Add comments for complex logic
|
||||
|
||||
### Component Guidelines
|
||||
|
||||
1. Keep components small and focused
|
||||
2. Use props for configuration
|
||||
3. Lift state up when needed
|
||||
4. Use custom hooks for reusable logic
|
||||
5. Handle errors gracefully
|
||||
|
||||
## Additional Resources
|
||||
|
||||
- [React Documentation](https://react.dev/)
|
||||
- [TypeScript Documentation](https://www.typescriptlang.org/)
|
||||
- [Vite Documentation](https://vitejs.dev/)
|
||||
- [Tailwind CSS Documentation](https://tailwindcss.com/)
|
||||
- [Main Project README](../README.md)
|
||||
- [Backend Documentation](../backend/README.md)
|
||||
- [Design Document](../.kiro/specs/text-to-audiobook/design.md)
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
||||
Reference in New Issue
Block a user