diff --git a/.env.example b/.env.example index 288d36c..9c81850 100644 --- a/.env.example +++ b/.env.example @@ -1,11 +1,11 @@ OPENAI_API_KEY=your_openai_key -FIRECRAWL_API_KEY=your_firecrawl_key +NEXT_PUBLIC_FIRECRAWL_API_KEY=your_firecrawl_key SERPER_API_KEY=your_serper_key UPSTASH_REDIS_REST_URL=your_redis_url UPSTASH_REDIS_REST_TOKEN=your_redis_token -API_ROUTE=http://localhost:3000 \ No newline at end of file +NEXT_PUBLIC_API_ROUTE=http://localhost:3000 \ No newline at end of file diff --git a/README.md b/README.md index f6b8f54..8477a86 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,8 @@ npm install 3. Create a `.env` file with the following variables: ```env OPENAI_API_KEY=your_openai_key -FIRECRAWL_API_KEY=your_firecrawl_key +NEXT_PUBLIC_FIRECRAWL_API_KEY=your_firecrawl_key +SERPER_API_KEY=your_serper_key UPSTASH_REDIS_REST_URL=your_redis_url UPSTASH_REDIS_REST_TOKEN=your_redis_token NEXT_PUBLIC_API_ROUTE=http://localhost:3000 # Your API base URL diff --git a/app/page.tsx b/app/page.tsx index c4b79ac..868f45e 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -124,6 +124,9 @@ export default function Home() { const [isSearching, setIsSearching] = useState(false); const [searchQuery, setSearchQuery] = useState(''); + // Add state for custom URL input + const [customUrl, setCustomUrl] = useState(''); + // Steps configuration const steps = [ { number: 1, title: 'Describe Your API', description: 'Tell us what data you want to extract' }, @@ -310,7 +313,12 @@ export default function Home() { }; const handleExtractData = async () => { - if (!searchResults.some(r => r.selected)) { + const selectedUrls = [ + ...searchResults.filter(r => r.selected).map(r => r.url), + ...(customUrl ? [customUrl] : []) + ]; + + if (selectedUrls.length === 0) { setError('Please select at least one source'); return; } @@ -321,7 +329,6 @@ export default function Home() { setTransitionMessage('Extracting data from sources...'); try { - const selectedUrls = searchResults.filter(r => r.selected).map(r => r.url); const schemaRequest = JSON.parse(schemaStr) as JsonSchema; console.log('OpenAI Generated Schema:', schemaRequest); @@ -507,8 +514,8 @@ export default function Home() { }; const handleSourcesSubmit = async () => { - if (!searchResults.some(r => r.selected)) { - setError('Please select at least one source'); + if (!searchResults.some(r => r.selected) && !customUrl) { + setError('Please select at least one source or enter a custom URL'); return; } @@ -713,7 +720,10 @@ export default function Home() { metadata: { query: query, schema: JSON.parse(schemaStr), - sources: searchResults.filter(r => r.selected).map(r => r.url), + sources: [ + ...searchResults.filter(r => r.selected).map(r => r.url), + ...(customUrl ? [customUrl] : []) + ], lastUpdated: new Date().toISOString() } }, @@ -1025,6 +1035,27 @@ export default function Home() { + {/* Custom URL input */} +