import React, { useState } from 'react'; import { FileText, Mail, Copy, Check, Loader2, AlertCircle } from 'lucide-react'; const NewsletterBuilder = () => { const [urls, setUrls] = useState(['', '', '']); const [articles, setArticles] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [copied, setCopied] = useState(false); const [apiEndpoint, setApiEndpoint] = useState('https://newsletter-builder-tawny.vercel.app/api/fetch-article'); const extractMetadata = async (url) => { try { const response = await fetch(apiEndpoint, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ url }) }); if (!response.ok) { throw new Error('Failed to fetch article'); } return await response.json(); } catch (err) { console.error('Error fetching:', url, err); throw err; } }; const handleFetchArticles = async () => { setLoading(true); setError(''); setArticles([]); const validUrls = urls.filter(url => url.trim()); if (validUrls.length < 2) { setError('Please enter at least 2 article URLs'); setLoading(false); return; } try { const results = await Promise.allSettled( validUrls.map(url => extractMetadata(url)) ); const validArticles = results .filter(result => result.status === 'fulfilled') .map(result => result.value); if (validArticles.length === 0) { setError('Could not fetch any articles. Make sure the backend API is accessible.'); setLoading(false); return; } validArticles.sort((a, b) => b.wordCount - a.wordCount); setArticles(validArticles); if (validArticles.length < validUrls.length) { setError(`Successfully fetched ${validArticles.length} out of ${validUrls.length} articles.`); } } catch (err) { setError('Error fetching articles. Please check the API endpoint.'); console.error(err); } setLoading(false); }; const generateNewsletterHTML = () => { if (articles.length === 0) return ''; const mainArticle = articles[0]; const subArticles = articles.slice(1); return `
Transform article URLs into beautiful newsletters
✓ Backend is hosted on Vercel (no local setup needed)
✓ Just paste your article URLs and click Generate
Using API: {apiEndpoint}
Default uses deployed Vercel backend
Enter article URLs and click Generate Newsletter