feat: Add scraper version selector to frontend

- Add version selector dropdown in scrape confirmation modal
- Default to v1.1.0 (Multi-Sort) which bypasses ~1000 review limit
- Pass scraper_version through API proxy to backend
- Update /new page fallback to show v1.1.0 as available
- Show version description explaining multi-sort benefits

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Alejandro Gutiérrez
2026-01-24 19:13:52 +00:00
parent 824634aa76
commit 9f714913db
3 changed files with 38 additions and 4 deletions

View File

@@ -5,23 +5,25 @@ const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8000';
export async function POST(request: NextRequest) {
try {
const body = await request.json();
const { url, business_name, business_address, rating_snapshot, total_reviews_snapshot } = body;
const { url, business_name, business_address, rating_snapshot, total_reviews_snapshot, scraper_version } = body;
if (!url) {
return NextResponse.json({ error: 'URL is required' }, { status: 400 });
}
// Call the containerized scraper API with business metadata
// Call the containerized scraper API with business metadata and version
const response = await fetch(`${API_BASE_URL}/scrape`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
url,
scraper_version, // Pass version to backend for routing
metadata: {
business_name,
business_address,
rating_snapshot,
total_reviews_snapshot,
scraper_version, // Also store in metadata for job tracking
},
}),
});

View File

@@ -134,12 +134,12 @@ export default function NewScrapePage() {
} catch (err) {
console.error('Failed to fetch scrapers:', err);
setError('Failed to load available scrapers');
// Fallback to showing Google Reviews as available
// Fallback to showing Google Reviews as available with both versions
setScrapers([{
job_type: 'google-reviews',
...SCRAPER_METADATA['google-reviews'],
available: true,
versions: ['v1.0.0'],
versions: ['v1.1.0 (Multi-Sort)', 'v1.0.0'],
}]);
} finally {
setLoading(false);