Add Vietnam Bike Price Scout cookbook example#68
Add Vietnam Bike Price Scout cookbook example#68simantak-dabhade merged 6 commits intotinyfish-io:mainfrom
Conversation
…cout Add Vietnam Bike Price Scout cookbook example
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
simantak-dabhade
left a comment
There was a problem hiding this comment.
Hey @giaphutran12 — really impressive submission! The parallel SSE fan-out across 18 rental sites is a great showcase of TinyFish, the cache-aside pattern with Supabase is well-implemented, and the Zod env validation is a nice touch. A few things to clean up:
🔴 Must Fix
1. Rename Mino → TinyFish throughout
The actual code already uses the correct API URL (agent.tinyfish.ai) and TINYFISH_API_KEY env var — nice. But variable/type/function names and docs still reference "Mino" heavily (~80 occurrences). Key renames:
In code (src/app/api/search/route.ts, src/components/live-preview-grid.tsx, src/app/layout.tsx):
MINO_SSE_URL→TINYFISH_SSE_URLMinoEvent→TinyFishEventrunMinoSseForSite→runTinyFishSseForSite[MINO]log prefixes →[TINYFISH]- Meta descriptions: "TinyFish Mino" → "TinyFish"
- iframe title: "Mino agent" → "TinyFish agent"
In docs (README.md, use-case-brief.md, vietnam-bike-price-scout/PRD.md, vietnam-bike-price-scout/README.md, vietnam-bike-price-scout/social-post.md):
- Replace all "Mino" / "TinyFish Mino" references with "TinyFish"
- Fix links:
mino.ai→tinyfish.ai,tinyfish.io→tinyfish.ai
2. Add .env.example
The .gitignore blocks .env* so there's no example for setup. Add one:
TINYFISH_API_KEY=
NEXT_PUBLIC_SUPABASE_URL=
SUPABASE_SERVICE_ROLE_KEY=
🟡 Should Fix
3. Remove the vietnam-bike-price-scout/ subfolder
This looks like planning/brainstorming docs (a second README, PRD, social media post draft, duplicate screenshots). The actual project lives in the root of viet-bike-scout/ — this subfolder shouldn't ship in the cookbook. The screenshots are already in public/.
🟢 Everything Else Looks Great
- Correct API URL and env var naming in actual code
- Parallel SSE with
Promise.allSettled+ AbortController timeouts - Supabase cache with graceful degradation (app works without it)
- Great extraction prompt — handles cookie banners, pagination, VND→USD conversion
- Zod env validation
- No committed secrets, no dead code, clean deps
Solid work — just needs the naming cleanup and doc trimming!
|
Almost there! Just missing the |
simantak-dabhade
left a comment
There was a problem hiding this comment.
Almost there! Just missing the .env.example file — your .gitignore blocks .env* so new users won't know what keys to set. Please add one with placeholder values for TINYFISH_API_KEY, NEXT_PUBLIC_SUPABASE_URL, and SUPABASE_SERVICE_ROLE_KEY. Everything else looks great.
simantak-dabhade
left a comment
There was a problem hiding this comment.
Approving this for now, just add the .env.example then merge it in!
## Summary **Vietnam Bike Price Scout** — compare motorbike rental prices across Vietnam in seconds. No rental shop has an API; this app sends TinyFish browser agents to 18 websites simultaneously and streams structured pricing data back to a real-time dashboard. **Live Demo → [viet-bike-scout.vercel.app](https://viet-bike-scout.vercel.app)** ## Screenshots | Empty State | Searching | Results | |---|---|---| |  |  |  | ## How it uses TinyFish - **Parallel SSE fan-out**: One Mino agent per rental website, all fired concurrently — up to 18 agents across 4 cities - **Structured JSON extraction**: Consistent bike data (name, engine CC, type, daily/weekly/monthly price in USD, deposit, availability) from wildly different site layouts (WordPress, Wix, custom builds) - **Live browser agent iframes**: Real-time visibility into what each agent is doing — up to 5 active windows per search, auto-removed on completion - **Multi-step navigation**: Agents handle cookie banners, currency switchers, pagination, and "Load More" buttons autonomously - **SSE streaming to client**: Results appear live as each agent finishes, not after all complete ## What makes this use case unique - **Zero API territory** — not a single rental shop exposes pricing data programmatically - **Zero aggregator exists** — there is no "Kayak for Vietnam motorbikes" - **Real user pain** — millions of tourists visit Vietnam annually; nearly all rent a motorbike - **Parallel scale demo** — visually demonstrates Mino's core advantage as results stream in from 18 sites ## Tech Stack | Layer | Choice | |---|---| | Framework | Next.js 16 (App Router, Node.js runtime) | | UI | React 19 + Tailwind CSS v4 + shadcn/ui | | Scraping | TinyFish Mino API (SSE streaming) | | Caching | Supabase (PostgreSQL, 6h TTL, graceful degradation) | | Hosting | Vercel | ## Included - Full Next.js source (`src/`, config files) - Supabase migration for cache table - README with architecture diagram, setup instructions, and covered shops - PRD with Mino goal prompt, sample JSON output, and architecture overview - App screenshots (empty state, searching, results)
Summary
Vietnam Bike Price Scout — compare motorbike rental prices across Vietnam in seconds. No rental shop has an API; this app sends TinyFish browser agents to 18 websites simultaneously and streams structured pricing data back to a real-time dashboard.
Live Demo → viet-bike-scout.vercel.app
Screenshots
How it uses TinyFish
What makes this use case unique
Tech Stack
Included
src/, config files)