# ai-studio > AI Studio feature development. Use when creating AI-powered tools, video generators, or content creation features. - Author: DAEJIN UM - Repository: Applr-techport/MetaCast - Version: 20260102142252 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-06 - Source: https://github.com/Applr-techport/MetaCast - Web: https://mule.run/skillshub/@@Applr-techport/MetaCast~ai-studio:20260102142252 --- --- name: ai-studio description: AI Studio feature development. Use when creating AI-powered tools, video generators, or content creation features. --- # MetaCast AI Studio Rules ## AI Studio Structure ``` src/app/(dashboard)/ai-studio/ ├── page.tsx # AI Studio dashboard ├── video-generator/ │ ├── page.tsx # Video generator hub │ ├── shortform/page.tsx # Short-form video creator │ ├── video/page.tsx # Long-form video creator │ ├── image-to-video/page.tsx │ └── from-stream/page.tsx # Create from stream recording ├── tools/ │ ├── page.tsx # AI Tools hub │ ├── script/page.tsx # Script generator │ ├── caption/page.tsx # Caption generator │ ├── thumbnail/page.tsx # Thumbnail generator │ ├── brand-voice/page.tsx # Brand voice analyzer │ ├── content-analyzer/page.tsx │ └── product-description/page.tsx └── live-stream/ └── page.tsx # AI-enhanced live streaming ``` ## AI Tool Page Template ```tsx 'use client' import { useState } from 'react' import { Sparkles, Loader2, Download, Copy, RefreshCw } from 'lucide-react' interface GeneratedContent { id: string content: string createdAt: Date } export default function AIToolPage() { // Input state const [prompt, setPrompt] = useState('') const [style, setStyle] = useState('professional') // Generation state const [isGenerating, setIsGenerating] = useState(false) const [results, setResults] = useState([]) const [error, setError] = useState(null) const handleGenerate = async () => { if (!prompt.trim()) return setIsGenerating(true) setError(null) try { const response = await fetch('/api/ai/generate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ prompt, style }) }) if (!response.ok) throw new Error('Generation failed') const data = await response.json() setResults(prev => [data, ...prev]) } catch (err) { setError('Failed to generate. Please try again.') } finally { setIsGenerating(false) } } return (
{/* Header */}

Tool Name

Description of what this tool does

{/* Input Panel */}

Input

{/* Prompt input */}