An AI-powered Chrome extension that lets you chat with your data. Upload a CSV/Excel file or scrape tables from any webpage, then ask questions, get insights, and generate visualizations — all inside the browser.
Chrome Extension (React + Vite)
└─ Side Panel UI
├─ Upload CSV/Excel ──► POST /ingest/upload
├─ Scrape page tables ──► POST /ingest/scrape
└─ Chat ──► POST /chat
│
FastAPI Backend
│
Groq (LLM)
| Layer | Technology |
|---|---|
| Extension UI | React 18, TypeScript, Vite |
| Charts | Recharts |
| Backend | FastAPI, Python 3.10+ |
| Data | pandas, openpyxl |
| Scraping | BeautifulSoup4 |
| LLM | Groq (Llama 3.3 70B via groq) |
# From repo root
cp .env.example .env
# Edit .env and add your GROQ_API_KEY (get one at console.groq.com)
pip install -r requirements.txt
uvicorn app:app --reload --port 8000The backend runs at http://localhost:8000. Verify with:
curl http://localhost:8000/healthcd extension
npm install
npm run buildThen in Chrome:
- Go to
chrome://extensions - Enable Developer mode (top right)
- Click Load unpacked and select
extension/dist/ - Click the DataTalk icon (or the puzzle piece) to open the side panel
The extension's .env.development already points to http://localhost:8000.
Render (recommended): See DEPLOY_RENDER.md for a full step-by-step guide.
Summary:
-
Deploy backend on Render
Connect the repo, set build commandpip install -r requirements.txt, start commanduvicorn app:app --host 0.0.0.0 --port $PORT, and addGROQ_API_KEYin the dashboard. The repo includes arender.yamlyou can use. -
Point the extension at your API
From repo root:./deploy.sh https://YOUR-RENDER-URL
This sets the production API URL and builds the extension intoextension/dist/. -
Ship the extension
Zip the contents ofextension/dist/and share with users (Load unpacked) or publish to the Chrome Web Store.
| Endpoint | Method | Description |
|---|---|---|
/health |
GET | Health check |
/ingest/upload |
POST | Upload CSV/Excel (multipart) |
/ingest/scrape |
POST | Ingest scraped tables (JSON) |
/session/{id}/datasets |
GET | List datasets for a session |
/session/clear |
POST | Clear session or dataset |
/chat |
POST | Chat with dataset |
DataTalk/
├── app.py # FastAPI backend (all endpoints)
├── requirements.txt # Python dependencies
├── .env.example # Env var template
├── datasets/ # Sample datasets
└── extension/
├── manifest.json # Chrome Manifest V3
├── sidepanel.html # Side panel entry point
├── vite.config.ts # Vite build config
├── .env.development # API URL for dev
├── .env.production # API URL for prod
├── public/
│ ├── manifest.json # Copied for build output
│ └── icons/ # Extension icons
└── src/
├── main.tsx # React entry
├── App.tsx # Main app (tabs, session, chat, upload, scrape)
├── App.css # Styles (dark theme)
├── api.ts # Typed API client
├── background.ts # Service worker (opens side panel on click)
├── content.ts # Content script placeholder
└── components/
├── Chart.tsx # Recharts chart renderer
├── DataSource.tsx # Upload/scrape/dataset selector
└── Message.tsx # Chat message (text + chart)