import { useAILookup, useIdentity } from '@deplixo/sdk';
import ScriptView from './components/ScriptView.jsx';
import BriefForm from './components/BriefForm.jsx';
import EmptyState from './components/EmptyState.jsx';
function App() {
const { user } = useIdentity();
const [subject, setSubject] = useState('');
const [script, setScript] = useState(null);
const [error, setError] = useState(null);
const [activeTab, setActiveTab] = useState('script');
const lookup = useAILookup({
example: {
titre: 'ChatGPT caché : le mode qui change tout',
hookAlternatif: 'Ce raccourci ChatGPT économise 2h par jour.',
legende: 'Sauvegarde cette vidéo avant qu\'elle disparaisse 🔖 #IA #Astuce',
commentaireEpingle: 'Quel outil underground tu veux que je décortique ensuite ?',
outil: {
nom: 'Nom exact de l\'outil',
url: 'https://exemple.com',
gratuit: 'Ce qui est gratuit',
payant: 'Ce qui nécessite un abonnement',
},
scenes: [
{
timecode: '0–2 s',
phase: 'Hook',
voixOff: 'Phrase courte, percutante, en français naturel.',
texteEcran: 'TEXTE GROS ET LISIBLE',
visuel: 'Description précise de ce que l\'on voit (capture, zoom, curseur).',
sonBruitage: 'Whoosh grave + glitch léger',
montage: 'Cut sec, zoom 110%, flash 1 frame',
},
],
instructionsMontage: [
'Format vertical 1080x1920, 30 fps',
'Fond #0a0a0a, accent néon vert menthe',
],
checklistSansSon: [
'Sous-titres mot-à-mot karaoké',
'Nom de l\'outil visible 4 secondes minimum',
],
avertissements: 'Rappeler ce qui est vérifié vs supposé.',
},
});
const handleGenerate = async (sujet) => {
setError(null);
setScript(null);
setSubject(sujet);
try {
const prompt = `Tu es directeur créatif spécialisé dans les vidéos virales courtes sur les astuces IA underground, les outils méconnus et les workflows sous-exploités.
Crée un script COMPLET de vidéo verticale 9:16 de 30 à 40 secondes sur le sujet suivant :
"${sujet}"
Contraintes NON NÉGOCIABLES :
- Utiliser une astuce CONCRÈTE et REPRODUCTIBLE qui existe réellement.
- Donner le nom EXACT de l'outil et l'URL réelle quand ils sont connus.
- Ne JAMAIS inventer de fonctionnalité, de bouton, de menu, ou de résultat.
- Si tu n'es pas certain d'un détail, utilise une formulation prudente ou ne l'inclus pas.
- Distinguer clairement ce qui est gratuit de ce qui est payant.
- Éviter les promesses exagérées ("x10 ta productivité", "secret caché", etc.).
- Voix off en FRANÇAIS naturel, phrases courtes.
- Compréhensible même sans le son (sous-titres + texte à l'écran).
Structure OBLIGATOIRE des scènes avec horodatages précis :
1. 0–2 s : hook audacieux, intriguant, SPÉCIFIQUE (pas générique).
2. 2–7 s : exposer un problème ou une croyance courante.
3. 7–22 s : démonstration visuelle ÉTAPE PAR ÉTAPE (clics exacts, menus réels).
4. 22–30 s : révélation du résultat + pourquoi c'est utile.
5. 30–40 s : résultat final, question engageante, boucle visuelle vers le début.
Esthétique : montage nerveux, tech underground, fond sombre, typo lisible, captures d'écran réalistes, zooms, curseur visible, bruitages subtils.
Fournis AUSSI : titre court (<40 car), hook alternatif, légende avec hashtags, commentaire épinglé, checklist "compréhensible sans son", instructions de montage précises (format, fps, palette, typo), et un champ "avertissements" si tu as dû faire des hypothèses.
Au moins 6 scènes couvrant toute la timeline.`;
const result = await lookup.run(prompt);
setScript(result);
setActiveTab('script');
} catch (e) {
setError(e?.message || 'Erreur de génération. Réessaie.');
}
};
return (