feat: podcast demo mode with ALWRITY_ENABLED_FEATURES support

- Add ALWRITY_ENABLED_FEATURES env var for feature gating
- Podcast-only mode: skip LLM bootstrap, scheduler, persona services
- Enhance video generation prompt with scene context, analysis, narration
- Add voice cloning support via custom_voice_id in WaveSpeed
- Add text-to-speech for research results (browser speechSynthesis)
- Fix render queue to sync images from script phase
- Add WaveSpeed LLM pricing (gpt-oss-120b)
- Fix podcast bible generation error handling
- Refactor RouterManager for feature-based router loading
This commit is contained in:
ajaysi
2026-04-03 06:59:59 +05:30
parent c52b1eabc9
commit 63bb937796
58 changed files with 3568 additions and 1597 deletions

View File

@@ -0,0 +1,36 @@
import React from "react";
import { Stack, Box, Typography, Chip, Paper } from "@mui/material";
import { Quiz as TalkIcon } from "@mui/icons-material";
import { PodcastAnalysis } from "../../types";
import { AnalysisTabContent } from "../AnalysisTabNav";
interface GuestTabProps {
analysis: PodcastAnalysis;
}
export const GuestTab: React.FC<GuestTabProps> = ({ analysis }) => {
if (!analysis.guest_talking_points || analysis.guest_talking_points.length === 0) {
return (
<AnalysisTabContent title="Guest Talking Points" icon={<TalkIcon />}>
<Typography variant="body2" sx={{ color: "#64748b" }}>
No guest talking points generated yet. Add a guest speaker to get interview questions.
</Typography>
</AnalysisTabContent>
);
}
return (
<AnalysisTabContent title="Guest Talking Points" icon={<TalkIcon />}>
<Stack spacing={2}>
{analysis.guest_talking_points.map((point: string, idx: number) => (
<Paper key={idx} elevation={0} sx={{ p: 2, bgcolor: "#faf5ff", border: "1px solid rgba(168,85,247,0.2)", borderRadius: 2, display: "flex", alignItems: "flex-start", gap: 1.5 }}>
<Chip label="Q" size="small" sx={{ minWidth: 24, bgcolor: "#a855f7", color: "#fff" }} />
<Typography variant="body2" sx={{ color: "#6b21a8" }}>
{point}
</Typography>
</Paper>
))}
</Stack>
</AnalysisTabContent>
);
};