A Nuxt.js + TypeScript dashboard that accepts prompts, searches the web with Tavily, and returns Tavily's generated answer with source links.
Try the deployed dashboard at https://tavily-rag-dashboard-20260603.netlify.app/.
Use the prompt chips to fetch real-time web data through Tavily:
What's the Nebius stock today?Anthropic latest funding roundWhat are the latest npm vulnerabilities in agent plugins?
- Copy
.env.exampleto.envand fill in the keys. - Install JavaScript dependencies:
npm install- Start the app:
npm run devOpen http://localhost:3000.
For production builds:
npm run build
npm startThis project includes netlify.toml with the Nuxt build settings:
- Build command:
npm run build - Publish directory:
dist - Node version:
22
Set the required environment variables in Netlify under
Site configuration -> Environment variables before deploying. Do not commit real API keys.
TAVILY_API_KEY: Tavily Search API key.PINECONE_API_KEY: Pinecone API key.PINECONE_HOST: Pinecone index host for an index with integrated embedding enabled.
Optional knobs include TAVILY_MAX_RESULTS, PINECONE_NAMESPACE, PINECONE_TEXT_FIELD, and PINECONE_API_VERSION.
- The Nitro API route searches Tavily for fresh web context.
- It stores every Tavily source in Pinecone, linked to the original
user_queryand a stablequery_id. - It returns Tavily's generated answer when one is available.
- If Tavily does not provide a direct answer, it returns a short fallback built from top source snippets.
- The API returns the answer and Tavily sources to the UI.
The app uses Pinecone's integrated embedding upsert endpoint:
POST /records/namespaces/{namespace}/upsert
Each Tavily source is stored as a text record. The text field defaults to text, but you can change it with PINECONE_TEXT_FIELD to match your index field_map.
Each record includes metadata linking it back to the user prompt:
user_queryquery_idsource_ranksource_titlesource_urlsource_typequeried_at