Dish RAG

Completed

Dish RAG is a full-stack RAG (retrieval-augmented generation) chatbot for exploring food recipes. Users chat in natural language, and the assistant retrieves relevant recipes from a Postgres/pgvector store, answers questions about them, and can search, look up, and manage favorites on the user's behalf via tool calling.

Dish RAG screenshot 1
Project Overview

Dish RAG is a full-stack RAG (retrieval-augmented generation) chatbot for exploring food recipes. Users chat in natural language, and the assistant retrieves relevant recipes from a Postgres/pgvector store, answers questions about them, and can search, look up, and manage favorites on the user's behalf via tool calling.

Beyond the chat itself, the app keeps a full conversation history per user, with renaming, pinning, and deleting conversations, and titles that are auto-generated from the first message. A separate recipe browsing view offers a paginated, sortable, and searchable list with autocomplete, plus a personal favorites collection.

Authentication supports local email/password login with JWT, alongside Google and GitHub OAuth2. Rather than relying on a shared OpenAI budget, each user brings their own OpenAI API key, stored encrypted at rest; the backend builds a per-user chat/embedding client from it, so there is no shared LLM billing.

The backend is built with Java 25, Spring Boot 4, and Spring AI for OpenAI chat and embeddings, backed by PostgreSQL with pgvector for semantic search. The frontend is a React 19 + TypeScript app built with Vite, using TanStack Query, Zustand, and Tailwind CSS. Everything ships as a single Docker image: a multi-stage build bundles the frontend into the backend jar as static resources, deployed through a GitHub Actions CI/CD pipeline.