Court in session

THE JUDGY
& BARRY

Brutally honest. Surprisingly competent.
J.
The Judgy
The Honorable Judge
Life · Love · Work
B.
Barry T. Lawson
Esq. — Her Ex-Husband
Legal · Business · Tax
THIS IS NOT PROFESSIONAL ADVICE

The Judgy and Barry T. Lawson are fictional AI characters created for entertainment and general informational purposes only.

Not Legal Advice

Nothing Barry says constitutes legal advice. Barry is an AI character, not a licensed attorney. Always consult a qualified, licensed attorney in your jurisdiction before making legal decisions.

Not Financial Advice

Any financial, tax, or insurance guidance is for general informational purposes only. Consult a licensed CPA, financial advisor, or insurance professional.

Entertainment Purpose

The Judgy's responses are designed for entertainment. The roasting, exaggeration, and dramatic delivery are fictional character elements — not personal attacks.

AI Limitations

AI can make mistakes. Information may be outdated or inaccurate. Always verify important information with qualified professionals and authoritative sources.

What We Collect

When you use The Judgy, we may collect messages you send, account information if you sign up, usage data, and device/browser information.

How We Use It

To provide AI responses via Anthropic's Claude API, to improve the service, to process payments via Stripe, and to send service-related emails.

Third Party Services

We use Anthropic (AI), Supabase (database/auth), Stripe (payments), and Cloudflare (hosting). Each has their own privacy policy.

Your Rights

You can request deletion of your data at any time. We do not sell your personal information to third parties.

Acceptance

By using The Judgy, you agree to these terms.

Use of Service

  • You must be 18 or older
  • Do not use for illegal purposes
  • Do not rely on responses as actual legal or financial advice

Subscriptions & Billing

Paid plans are billed monthly or annually. Cancel anytime. Refunds handled case-by-case within 7 days.

Limitation of Liability

We are not liable for any decisions made based on AI responses. Always consult professionals for important matters.

Barry's document templates. Fill in the fields and download. Not a substitute for legal counsel.

Demand Letter

Fill in the details

Divorce Preparation Checklist

LLC Formation Guide

"Barry's vetted resources. He actually researched these. Shocking, I know." — The Judgy

Disclosure

Some links on this page are affiliate links. Barry gets a small commission — which he will absolutely brag about to Judgy.

Barry will build you a clean landing page. Download it and deploy free to Cloudflare Pages.

Tell Barry about your business
section // ============================================================ // ── YOUR BUILDS — cross-recommend based on topic ──────────── const MY_BUILDS = [ { id: 'postpilots', name: 'PostPilots', url: 'https://postpilots.xyz', emoji: '✏️', tagline: 'Schedule posts to LinkedIn, X, Instagram & more', keywords: ['social media','linkedin','instagram','twitter','post','content','brand','marketing','followers','audience','viral','tiktok','facebook'], topics: ['business','work'], }, { id: 'dropvault', name: 'DropVault', url: 'https://dropvault.live', emoji: '📦', tagline: 'Sell digital products & earn passive income', keywords: ['sell','product','digital','ebook','course','template','income','passive','creator','monetize','online store','download'], topics: ['business','money'], }, { id: 'ecrenta', name: 'Ecrenta', url: 'https://ecrenta.space', emoji: '🏠', tagline: 'Furnished rentals in Fresno for traveling nurses', keywords: ['rent','rental','apartment','nurse','travel','housing','furnished','fresno','accommodation','healthcare'], topics: [], }, { id: 'fluentra', name: 'Fluentra', url: 'https://fluentra.ai', emoji: '🗣️', tagline: 'AI-powered language fluency practice', keywords: ['language','speak','english','fluent','accent','communication','presentation','interview','public speaking','articulate'], topics: ['work','personal'], }, { id: 'buildshowcase', name: 'Build Showcase', url: 'https://build-showcase.dev', emoji: '🏗️', tagline: 'Showcase & promote your web projects', keywords: ['portfolio','showcase','project','builder','developer','website','launch','side project','build','deploy'], topics: ['business'], }, ]; // ── DETECT RELEVANT BUILD FROM CONVERSATION ────────────────── function detectRelevantBuild(userText, topic) { const lower = userText.toLowerCase(); let best = null; let bestScore = 0; for (const build of MY_BUILDS) { let score = 0; // Keyword match for (const kw of build.keywords) { if (lower.includes(kw)) score += 2; } // Topic match if (build.topics.includes(topic)) score += 1; if (score > bestScore) { bestScore = score; best = build; } } // Only recommend if strong enough match return bestScore >= 2 ? best : null; } // ── BUILD RECOMMENDATION HTML ──────────────────────────────── function buildRecommendationHTML(build) { return `
${build.emoji}
💡 Might help you
${build.name}
${build.tagline}
`; } // ── FOLLOW-UP OPTIONS HTML ──────────────────────────────────── function buildFollowUpHTML(options, question) { const optionBtns = options.map(opt => ` `).join(''); return `
⚖️ ${question}
${optionBtns}
`; } // ── USE FOLLOW-UP OPTION ────────────────────────────────────── function useFollowUp(btn) { const text = btn.textContent.trim(); // Remove the whole followup block from the DOM const wrap = btn.closest('.followup-wrap'); if (wrap) wrap.remove(); // Put text in input and send const input = document.getElementById('chatInput'); input.value = text; autoResize(input); sendMessage(); } // ── UPDATED SYSTEM PROMPTS ──────────────────────────────────── // Key change: instruct AI to end with FOLLOW_UP and OPTIONS blocks const JUDGY_PROMPT = `You are THE JUDGY — a brutally honest AI character who is like Judge Judy on steroids mixed with a no-nonsense best friend. PERSONALITY: - Roast the person HARD first (2-3 sentences of dramatic, exaggerated roasting) - Point out the real problem with sharp insight - Give REAL, actionable, specific advice - Use ALL CAPS occasionally for emphasis - Use phrases like "Honey", "Let me be real", "CASE CLOSED", "I'm gonna need you to sit down" - Exaggerate for comedic effect but always deliver real value - You are occasionally annoyed at BARRY your ex-husband who keeps interrupting with legal advice END EVERY RESPONSE WITH EXACTLY THIS FORMAT (no exceptions): ⚖️ VERDICT: [one punchy ruling sentence] FOLLOW_UP: [one short question to continue the conversation — max 10 words] OPTIONS: [option 1] | [option 2] | [option 3] Keep the main response 100-160 words. Be conversational, never corporate. The OPTIONS should be short (3-7 words each) and directly answer the FOLLOW_UP question.`; const BARRY_PROMPT = `You are BARRY T. LAWSON, ESQ. — The Judgy's ex-husband. You are a surprisingly competent lawyer and business advisor who takes every opportunity to show off your expertise. PERSONALITY: - Slightly insecure but genuinely good at legal/business advice - Passive-aggressively roast JUDGY in every response - Formal but occasionally flustered - Give REAL, accurate, actionable legal/business advice - Say things like "As I've said many times, Judith—", "With all due respect to my ex-wife's OPINION—" - Sign off as "Barry T. Lawson, Esq." END EVERY RESPONSE WITH EXACTLY THIS FORMAT (no exceptions): 📋 RULING: [your formal legal/business verdict in one sentence] FOLLOW_UP: [one short question to dig deeper — max 10 words] OPTIONS: [option 1] | [option 2] | [option 3] Keep the main response 100-160 words. Include real, actionable advice. The OPTIONS should be short (3-7 words each) and directly answer the FOLLOW_UP question.`; const JUDGY_CLAP_BACK = `You are THE JUDGY responding to your ex-husband BARRY who just gave legal advice. - Reluctantly acknowledge Barry is right about the legal stuff (you hate admitting it) - But roast him anyway — his suit, his clipboard, his desperation to impress you - Add your own emotional/personal angle to the advice - Keep it SHORT — 50-70 words only END WITH EXACTLY: FOLLOW_UP: [one short juicy question — max 10 words] OPTIONS: [option 1] | [option 2] | [option 3] No verdict line — just a short clap back then the follow-up.`; // ── PARSE AI RESPONSE ───────────────────────────────────────── function parseAIResponse(text, verdictMarker) { let body = text; let verdict = ''; let followUp = ''; let options = []; // Extract FOLLOW_UP const fuMatch = text.match(/FOLLOW_UP:\s*(.+)/i); if (fuMatch) { followUp = fuMatch[1].trim(); body = body.replace(fuMatch[0], '').trim(); } // Extract OPTIONS const opMatch = text.match(/OPTIONS:\s*(.+)/i); if (opMatch) { options = opMatch[1].split('|').map(o => o.trim()).filter(Boolean); body = body.replace(opMatch[0], '').trim(); } // Extract VERDICT/RULING if (verdictMarker) { const re = new RegExp(`${verdictMarker}\\s*(.+)`, 'i'); const m = body.match(re); if (m) { verdict = m[1].trim(); body = body.replace(m[0], '').trim(); } } return { body, verdict, followUp, options }; } // ── ADD MESSAGE WITH FOLLOW-UPS AND RECOMMENDATION ─────────── function addMsgFull(role, parsed, isBarry, userText, currentTopic) { const { body, verdict, followUp, options } = parsed; const verdictMarker = isBarry ? '📋' : '⚖️'; const verdictClass = isBarry ? 'barry-verdict' : 'verdict-line'; // Build verdict HTML const verdictHtml = verdict ? `
${verdictMarker} ${verdict}
` : ''; // Build follow-up HTML const followUpHtml = (followUp && options.length) ? buildFollowUpHTML(options, followUp) : ''; // Build recommendation HTML const build = userText ? detectRelevantBuild(userText, currentTopic) : null; const recHtml = build ? buildRecommendationHTML(build) : ''; // Assemble const msgs = document.getElementById('messages'); const div = document.createElement('div'); div.className = `msg ${role}`; const time = new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); div.innerHTML = `
${role === 'barry' ? '👔' : '⚖️'}
${role === 'barry' ? 'BARRY T. LAWSON, ESQ.' : 'THE JUDGY'}
${formatResponse(body)} ${verdictHtml} ${followUpHtml} ${recHtml}
${time}
`; msgs.appendChild(div); msgs.scrollTop = msgs.scrollHeight; } let topic = 'general'; let charMode = 'both'; let themeIndex = 0; let msgCount = 0; let isThinking = false; let lpContent = ''; let formContent = ''; let judgySoundOn = true; const JUDGY_FN_URL = 'https://dmemzljerldzeiwqfxzp.supabase.co/functions/v1/judgy-chat-v2-ts'; function openSidebar() { document.getElementById('sidebar').classList.add('open'); document.getElementById('sidebarOverlay').classList.add('open'); } function closeSidebar() { document.getElementById('sidebar').classList.remove('open'); document.getElementById('sidebarOverlay').classList.remove('open'); } function openPage(id) { document.getElementById('page-'+id).classList.add('open'); } function closePage(id) { document.getElementById('page-'+id).classList.remove('open'); } function setView(v,el) { document.querySelectorAll('.sidebar-item').forEach(i=>i.classList.remove('active')); el.classList.add('active'); } function toggleJudgySound() { judgySoundOn=!judgySoundOn; document.getElementById('judgySoundBtn').textContent=judgySoundOn?'🔊':'🔇'; } const themes=['dark','light']; const themeIcons={dark:'🌙',light:'☀'}; const themeLabels={dark:'Light mode',light:'Dark mode'}; function toggleTheme() { themeIndex=(themeIndex+1)%2; const t=themes[themeIndex]; document.documentElement.setAttribute('data-theme',t); document.getElementById('themeBtn').textContent=themeIcons[t]; document.getElementById('themeIcon').textContent=themeIcons[t]; document.getElementById('themeLabel').textContent=themeLabels[t]; } const topicPlaceholders={ general:'Present your case to the court...', relationship:'My ex wants to get back together but they cheated...', work:'My boss takes credit for my work in every meeting...', coworker:'My coworker does nothing but gets the same pay...', personal:'I keep self-sabotaging every good thing in my life...', family:'My parents keep comparing me to my sibling...', legal:'Ask Barry a legal question...', business:'Ask Barry about starting or growing a business...', money:'Someone owes me money and keeps avoiding me...', }; function setTopic(btn,t) { document.querySelectorAll('.topic-pill').forEach(p=>p.classList.remove('active')); btn.classList.add('active'); topic=t; const inp=document.getElementById('chatInput'); if(inp) inp.placeholder=topicPlaceholders[t]||'Present your case to the court...'; } function quickTopic(t) { topic=t; document.querySelectorAll('.topic-pill').forEach(p=>{ p.classList.toggle('active',p.textContent.toLowerCase().includes(t.substring(0,4))); }); } function autoResize(el) { el.style.height='auto'; el.style.height=Math.min(el.scrollHeight,100)+'px'; document.getElementById('charCt').textContent=el.value.length+'/500'; } function handleKey(e) { if(e.key==='Enter'&&!e.shiftKey){e.preventDefault();sendMessage();} } function useStarter(card) { const t=card.querySelector('.starter-t').textContent; document.getElementById('chatInput').value=t; autoResize(document.getElementById('chatInput')); sendMessage(); } function updateRage() { msgCount++; const level=Math.min(5,Math.ceil(msgCount/2)); document.querySelectorAll('.rage-pip').forEach((p,i)=>p.classList.toggle('on',i${isBarry?'Ruling:':'Verdict:'} ${verdict}`:''; if(role==='judgy'||role==='barry'){ div.innerHTML=`
${role==='barry'?'B.':'J.'}
${role==='barry'?'Barry T. Lawson, Esq.':'The Judgy'}
${html}${verdictHtml}
${time}
`; } else { div.innerHTML=`
You
${html.replace(/\n/g,'
')}
${time}
`; } msgs.appendChild(div); msgs.scrollTop=msgs.scrollHeight; } function showTyping(role) { removeWelcome(); const msgs=document.getElementById('messages'); const div=document.createElement('div'); div.className='msg '+role; div.id='typing-'+role; div.innerHTML=`
${role==='barry'?'B.':'J.'}
${role==='barry'?'Barry':'Judgy'}
`; msgs.appendChild(div); msgs.scrollTop=msgs.scrollHeight; } function removeTyping(role) { const t=document.getElementById('typing-'+role); if(t)t.remove(); } function formatResponse(text) { return text.replace(/\*\*(.*?)\*\*/g,'$1').replace(/\n/g,'
'); } function parseVerdict(text,marker) { const re=new RegExp(`${marker}\\s*(.+)`,'i'); const m=text.match(re); if(m) return {body:text.replace(m[0],'').trim(),verdict:m[1].trim()}; return {body:text,verdict:''}; } const legalKeywords=['legal','law','sue','court','lawyer','attorney','contract','divorce','custody','evict','tenant','landlord','copyright','trademark','will','estate','llc','incorporate','tax','irs','insurance','claim','settlement']; const businessKeywords=['business','startup','company','brand','market','pricing','revenue','profit','client','customer','invoice','landing page','website','saas','product','launch','competitor']; function isLegalOrBusiness(text) { const lower=text.toLowerCase(); return legalKeywords.some(k=>lower.includes(k))||businessKeywords.some(k=>lower.includes(k))||topic==='legal'||topic==='business'||topic==='money'; } const JUDGY_PROMPT=`You are THE JUDGY — a brutally honest AI character modeled after a sharp, authoritative judge. Think Judge Judy meets a seasoned therapist — commanding, witty, cutting, but ultimately caring. PERSONALITY: - Authoritative and sharp — you have seen it all and nothing surprises you - Roast the person with precision (2-3 sentences) — not cheap shots, surgical observations - Get to the real truth underneath their problem - Give REAL, specific, actionable advice — no fluff - Occasional dry wit — you are not a comedian but you can be funny when the situation calls for it - You tolerate Barry, occasionally acknowledge he has a point, but would never admit it openly - Phrases: "Let me be direct with you", "This is not complicated", "I've ruled on far worse", "Court finds..." END EVERY RESPONSE WITH: ⚖ VERDICT: [one authoritative ruling sentence — like a judge's final word] Keep responses 120-200 words. Dignified but direct. Never corporate, never soft.`; const BARRY_PROMPT=`You are BARRY T. LAWSON, ESQ. — The Judgy's ex-husband. You are like James Bond if James Bond became a lawyer — impeccably dressed, composed, genuinely competent, but perpetually underestimated by your ex-wife. PERSONALITY: - Polished and precise — you handle yourself with quiet confidence - You are genuinely excellent at legal and business advice - You passive-aggressively reference the fact that Judgy never appreciated your expertise - Dry British-adjacent humor — understated, never slapstick - You are the underdog in this dynamic and you know it, which makes you try harder - Phrases: "As I've noted on several occasions, Judith—", "With the greatest respect to my ex-wife's colorful opinion—", "The law is rather clear on this matter", "Barry T. Lawson, Esq." - You still wear the same suit. It still fits perfectly. END EVERY RESPONSE WITH: 📋 RULING: [your formal, precise legal/business verdict in one sentence] Keep responses 120-200 words. Impeccable. Precise. Quietly devastating.`; const JUDGY_CLAP_BACK=`You are THE JUDGY responding after BARRY just gave his legal advice. - Acknowledge reluctantly that Barry is technically correct (you hate this) - But take a precise shot at him anyway — his effort to impress, his attachment to that suit, his need for validation - Add your emotional/human angle to his legal advice - 60-80 words only — short, sharp, final word - No verdict line needed`; async function callClaude(system,userMsg) { const res=await fetch(JUDGY_FN_URL,{ method:'POST', headers:{'Content-Type':'application/json'}, body:JSON.stringify({system,userMessage:userMsg}) }); const data=await res.json(); if(data.text) return data.text; throw new Error(data.error||'No response'); } function newCase() { document.getElementById('messages').innerHTML=`

THE JUDGY
& BARRY

Brutally honest. Surprisingly competent.
J.
The Judgy
The Honorable Judge
Life · Love · Work
B.
Barry T. Lawson
Esq. — Her Ex-Husband
Legal · Business · Tax
`; msgCount=0; charMode='both'; document.querySelectorAll('.rage-pip').forEach(p=>p.classList.remove('on')); document.getElementById('chatInput').value=''; document.getElementById('chatInput').placeholder='Present your case to the court...'; autoResize(document.getElementById('chatInput')); } async function sendMessage() { const input = document.getElementById('chatInput'); const text = input.value.trim(); if (!text || isThinking) return; input.value = ''; autoResize(input); lastUserText = text; addMsg('user', text); updateRage(); isThinking = true; document.getElementById('sendBtn').disabled = true; const barrySituation = charMode === 'barry' || (charMode === 'both' && isLegalOrBusiness(text)); const judgyOnly = charMode === 'judgy'; if (judgyOnly) { showTyping('judgy'); try { const topicCtx = { relationship:'relationship issue', work:'work situation', coworker:'coworker drama', personal:'personal growth', family:'family situation', general:'' }; const raw = await callClaude( JUDGY_PROMPT + (topicCtx[topic] ? `\n\nContext: This is a ${topicCtx[topic]}.` : ''), text ); removeTyping('judgy'); const parsed = parseAIResponse(raw, '⚖️ VERDICT:'); addMsgFull('judgy', parsed, false, text, topic); } catch (e) { removeTyping('judgy'); addMsg('judgy', "Court is experiencing technical difficulties. Try again.", '⚖️ VERDICT: Case postponed.'); } isThinking = false; document.getElementById('sendBtn').disabled = false; input.focus(); return; } if (charMode === 'barry') { showTyping('barry'); try { const raw = await callClaude(BARRY_PROMPT, text); removeTyping('barry'); const parsed = parseAIResponse(raw, '📋 RULING:'); addMsgFull('barry', parsed, true, text, topic); } catch (e) { removeTyping('barry'); addMsg('barry', "Connection dropped. Barry T. Lawson, Esq.", '📋 RULING: Try again.', true); } isThinking = false; document.getElementById('sendBtn').disabled = false; input.focus(); return; } if (barrySituation) { // BARRY leads showTyping('barry'); try { const barryRaw = await callClaude(BARRY_PROMPT, text); removeTyping('barry'); const barryParsed = parseAIResponse(barryRaw, '📋 RULING:'); addMsgFull('barry', barryParsed, true, text, topic); // JUDGY claps back await new Promise(r => setTimeout(r, 800)); showTyping('judgy'); const judgyRaw = await callClaude( JUDGY_CLAP_BACK, `User asked: "${text}"\n\nBarry just said: "${barryRaw}"` ); removeTyping('judgy'); const judgyParsed = parseAIResponse(judgyRaw, null); addMsgFull('judgy', judgyParsed, false, null, topic); // no rec on clap back } catch (e) { removeTyping('barry'); removeTyping('judgy'); addMsg('barry', "Objection! My connection dropped.", '📋 RULING: Try again.', true); } } else { // JUDGY leads showTyping('judgy'); try { const topicCtx = { relationship:'relationship issue', work:'work situation', coworker:'coworker drama', personal:'personal growth', family:'family situation', general:'' }; const judgyRaw = await callClaude( JUDGY_PROMPT + (topicCtx[topic] ? `\n\nContext: This is a ${topicCtx[topic]}.` : ''), text ); removeTyping('judgy'); const judgyParsed = parseAIResponse(judgyRaw, '⚖️ VERDICT:'); addMsgFull('judgy', judgyParsed, false, text, topic); // Barry jumps in if money/legal detected const barryJump = ['money','loan','debt','pay','fired','contract','rights','sue'].some(k => text.toLowerCase().includes(k)); if (barryJump) { await new Promise(r => setTimeout(r, 1000)); showTyping('barry'); const barryRaw = await callClaude( `You are BARRY T. LAWSON, ESQ. Judgy just gave life advice. Add a quick legal/financial angle she missed. Roast her a little. Keep it SHORT — 60-80 words. End with:\n📋 RULING: [short ruling]\nFOLLOW_UP: [short question max 10 words]\nOPTIONS: [option 1] | [option 2] | [option 3]`, `User asked: "${text}"\n\nJudgy said: "${judgyRaw}"` ); removeTyping('barry'); const barryParsed = parseAIResponse(barryRaw, '📋 RULING:'); addMsgFull('barry', barryParsed, true, null, topic); } } catch (e) { removeTyping('judgy'); addMsg('judgy', "Court is experiencing technical difficulties. Try again.", '⚖️ VERDICT: Case postponed.'); } } isThinking = false; document.getElementById('sendBtn').disabled = false; input.focus(); } function generateDemandLetter() { const from=document.getElementById('dl-from').value||'[Your Name]'; const to=document.getElementById('dl-to').value||'[Recipient]'; const amt=document.getElementById('dl-amount').value||'[Amount]'; const reason=document.getElementById('dl-reason').value||'[Reason]'; const deadline=document.getElementById('dl-deadline').value||'[Date]'; const today=new Date().toLocaleDateString('en-US',{year:'numeric',month:'long',day:'numeric'}); formContent=`DEMAND LETTER\n\nDate: ${today}\nFrom: ${from}\nTo: ${to}\n\nDear ${to},\n\nThis letter serves as formal notice that you owe the sum of $${amt} for: ${reason}.\n\nI hereby demand full payment no later than ${deadline}. Failure to comply may result in legal action in small claims court.\n\nSincerely,\n${from}\n\n---\nNOT LEGAL ADVICE — generated by AI. Consult an attorney before sending.`; document.getElementById('formOutputContent').textContent=formContent; document.getElementById('formOutput').style.display='block'; document.getElementById('formOutput').scrollIntoView({behavior:'smooth'}); } async function generateDivorceChecklist() { try { const res=await callClaude(`You are Barry T. Lawson, Esq. Generate a practical divorce preparation checklist. Numbered list, specific, 200 words max. Add a brief disclaimer.`,`State: ${document.getElementById('div-state').value||'your state'}, Children: ${document.getElementById('div-kids').value}, Assets: ${document.getElementById('div-assets').value||'various'}`); formContent=res; document.getElementById('formOutputContent').textContent=res; document.getElementById('formOutput').style.display='block'; document.getElementById('formOutput').scrollIntoView({behavior:'smooth'}); } catch(e){alert('Barry dropped his briefcase. Try again.');} } async function generateLLCGuide() { try { const res=await callClaude(`You are Barry T. Lawson, Esq. Generate a step-by-step LLC formation guide. Numbered steps, include costs, 200 words max. Add disclaimer.`,`Business: ${document.getElementById('llc-name').value||'your business'}, State: ${document.getElementById('llc-state').value||'Wyoming'}, Type: ${document.getElementById('llc-type').value}`); formContent=res; document.getElementById('formOutputContent').textContent=res; document.getElementById('formOutput').style.display='block'; document.getElementById('formOutput').scrollIntoView({behavior:'smooth'}); } catch(e){alert('Try again.');} } function downloadForm() { const blob=new Blob([formContent],{type:'text/plain'}); const a=document.createElement('a'); a.href=URL.createObjectURL(blob); a.download='barry-document.txt'; a.click(); } async function buildLandingPage() { const btn=document.getElementById('lpBtn'); btn.textContent='Barry is drafting... adjusting his cufflinks...'; btn.disabled=true; try { const res=await callClaude(`You are Barry T. Lawson, Esq. but also a refined web designer. Generate a complete single-page HTML landing page — hero, features, CTA, footer, mobile responsive, beautiful design matching the color vibe. Return ONLY the complete HTML code.`,`Business: ${document.getElementById('lp-name').value||'My Business'}\nDescription: ${document.getElementById('lp-desc').value}\nAudience: ${document.getElementById('lp-audience').value}\nCTA: ${document.getElementById('lp-cta').value}\nColor vibe: ${document.getElementById('lp-color').value}`); lpContent=res; document.getElementById('lpOutput').style.display='block'; document.getElementById('lpOutput').scrollIntoView({behavior:'smooth'}); } catch(e){alert('Barry spilled coffee on the keyboard. Try again.');} btn.textContent='Barry, build my landing page'; btn.disabled=false; } function downloadLP() { const blob=new Blob([lpContent],{type:'text/html'}); const a=document.createElement('a'); a.href=URL.createObjectURL(blob); a.download='landing-page.html'; a.click(); }