DumpIt is an AI knowledge vault for saved links. Save useful resources, organize them into collections, and ask questions across your private dump plus public shared resources with cited source cards.
Built with Next.js 14, TypeScript, Tailwind CSS, Firebase Auth, Firestore, Firebase Admin SDK, and Gemini.
- Firebase authentication with email/password and Google sign-in.
- Private resource library with tags, notes, collections, search, and visibility controls.
- Shared Dump for discovering public resources from other users.
- URL capture and metadata enrichment.
- Server-side RAG indexing for saved links:
- fetch URL content
- extract readable text
- chunk text
- create Gemini embeddings
- store chunks in Firestore
resource_chunks
- Ask DumpIt AI search modes:
My Dump: your indexed resourcesShared: public resources from other usersAll: your resources plus shared public resources
- Answers include citations and source cards when matching indexed chunks exist.
Saving a link creates a resources document, but AI search depends on indexing. The server fetches the saved URL, extracts readable page text, chunks it, embeds each chunk with Gemini, and writes vectorized chunks to Firestore.
flowchart TD
URL["Saved URL"] --> Fetch["Server fetches page"]
Fetch --> Extract["Extract readable text"]
Extract --> Chunk["Chunk text"]
Chunk --> Embed["Gemini embedding"]
Embed --> Store["Firestore resource_chunks"]
Ask["User question"] --> QueryEmbed["Gemini query embedding"]
QueryEmbed --> Vector["Firestore vector search"]
Store --> Vector
Vector --> Answer["Gemini answer with citations"]
A saved resource is useful to Ask DumpIt only after index_status becomes indexed.
Indexing can fail or be skipped when:
- the page blocks server-side fetches
- content is behind login
- content is rendered only by client-side JavaScript
- the page has little readable text
- Gemini or Firestore configuration is missing
git clone https://github.com/Rayan9064/dumpit.git
cd dumpit
npm install
cp .env.example .env.local
npm run devOpen http://localhost:3000.
DumpIt includes a Chrome extension for one-click capturing, side panel search, and text selection clipping. For details on local installation and configuration, see the Extension README.
Use Firebase variables for Firebase only, and Gemini variables for AI only. Do not reuse Firebase keys as Gemini keys.
# Firebase Client SDK (browser-safe)
NEXT_PUBLIC_FIREBASE_API_KEY=
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
NEXT_PUBLIC_FIREBASE_PROJECT_ID=
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
NEXT_PUBLIC_FIREBASE_APP_ID=
NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=
# Firebase Admin SDK (server-only)
FIREBASE_PROJECT_ID=
FIREBASE_CLIENT_EMAIL=
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
# Gemini AI (server-only)
GEMINI_API_KEY=
GEMINI_MODEL=gemini-2.5-flash
GEMINI_EMBEDDING_MODEL=gemini-embedding-001Important:
GEMINI_API_KEYmust come from Google AI Studio / Gemini API.NEXT_PUBLIC_FIREBASE_API_KEYis the Firebase Web SDK key and is not valid for Gemini.- Keep
GEMINI_MODEL=gemini-2.5-flashfor v1.gemini-2.5-promay have no free-tier quota and can return 429 errors. - Set Gemini variables in Vercel without quotes or
Bearer. - Redeploy Vercel after changing environment variables.
Ask DumpIt requires Firestore vector indexes for the query shapes used by the app.
Create the private search index:
gcloud firestore indexes composite create \
--project=YOUR_PROJECT_ID \
--collection-group=resource_chunks \
--query-scope=COLLECTION \
--field-config=order=ASCENDING,field-path=user_id \
--field-config=vector-config='{"dimension":"768","flat": "{}"}',field-path=embeddingCreate the shared/all search index:
gcloud firestore indexes composite create \
--project=YOUR_PROJECT_ID \
--collection-group=resource_chunks \
--query-scope=COLLECTION \
--field-config=order=ASCENDING,field-path=is_public \
--field-config=order=ASCENDING,field-path=user_id \
--field-config=vector-config='{"dimension":"768","flat": "{}"}',field-path=embeddingMonitor index creation:
gcloud firestore operations list --project=YOUR_PROJECT_IDWait for state: SUCCESSFUL and state: READY before testing AI search.
npm run dev
npm run typecheck
npm test -- --run
npm run build
npm run secret-scanSee docs/deployment.md for the Vercel, Firebase, Gemini, and Firestore index runbook.
Production checklist:
- Firebase Auth enabled.
- Firestore enabled.
- Firebase Admin service account variables set in Vercel.
- Gemini API key from AI Studio set as
GEMINI_API_KEY. GEMINI_MODEL=gemini-2.5-flash.- Both Firestore vector indexes are
READY. - Save a resource and confirm it becomes
indexed. - Test Ask DumpIt in
My Dump, thenShared, thenAll.