| import React, { useState } from 'react' | |
| export default function App(){ | |
| const [prompt, setPrompt] = useState(''); | |
| const [out, setOut] = useState(''); | |
| const [loading, setLoading] = useState(false); | |
| const callServer = async () => { | |
| setLoading(true); setOut(''); | |
| try{ | |
| const resp = await fetch('/api/ask', { method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify({ prompt, model: 'gpt-4o-mini' }) }); | |
| const j = await resp.json(); | |
| if(j.ok) setOut(j.answer); | |
| else setOut('Error: ' + (j.error||JSON.stringify(j))); | |
| }catch(e){ setOut('Network error: ' + e.message) } | |
| setLoading(false); | |
| } | |
| return ( | |
| <div style={{padding:24,fontFamily:'Inter,Arial',color:'#0b1220'}}> | |
| <h1>Marketing Workflow — Demo Client</h1> | |
| <p>Type a question for the marketing expert (server-side AI).</p> | |
| <textarea value={prompt} onChange={e=>setPrompt(e.target.value)} style={{width:'100%',height:120}}/> | |
| <div style={{marginTop:8,display:'flex',gap:8}}> | |
| <button onClick={callServer} disabled={loading}>{loading ? 'Thinking...' : 'Ask AI'}</button> | |
| <button onClick={()=>{ setPrompt('Create 3 messaging pillars for a handcrafted apparel DTC brand targeting women 28-45 in Tier 1 cities. Provide offers and ad formats.') }}>Sample prompt</button> | |
| </div> | |
| <h3>Answer</h3> | |
| <pre style={{background:'#f2f4f7',padding:12,borderRadius:8}}>{out}</pre> | |
| </div> | |
| ) | |
| } | |