Electronics Catalog: API, MCP server, frontend and deployment

Verified catalogue of mobiles and laptops sold in India, collected from
real retail listings (FastAPI backend, React frontend, Postgres/pgvector).

- REST API under /api/elec (read-only catalogue; admin endpoints need login)
- MCP server (FastMCP) at /mcp/ with list_categories, search_products,
  get_product and price_history tools
- Real ratings and reviews read from product pages and search results
- Production Dockerfile (requirements-api.txt, no PyTorch) and
  .env.production.example; remote database only via an explicit
  ELEC_ALLOW_REMOTE_DB host/name allowlist
- docs/API.md: endpoint and MCP reference with live examples

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
sriram
2026-10-01 12:17:42 +05:30
commit c7e4d59188
115 changed files with 14329 additions and 0 deletions

30
frontend/vite.config.js Normal file
View File

@@ -0,0 +1,30 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite'
// Both dev and preview forward /api/* to FastAPI, so a same-origin (relative)
// request works whichever local server is delivering the page. Keep the two in
// sync: `preview` serves dist/, and without this it would answer /api with a
// 404 index.html, which surfaces in the UI as a login failure.
const apiProxy = {
'/api': {
// Proxy all /api/* requests straight to FastAPI on port 8000
target: 'http://127.0.0.1:8000',
changeOrigin: true,
secure: false,
ws: true,
},
}
// https://vite.dev/config/
export default defineConfig({
plugins: [react(), tailwindcss()],
server: {
port: 5173,
proxy: apiProxy,
},
preview: {
port: 4173,
proxy: apiProxy,
},
})