DumpIt is an open-source, AI-powered knowledge vault. Save links, notes, and PDFs from wherever you already are — the web app, the browser extension, email, or your phone's share sheet — then ask questions in plain English and get cited answers grounded in what you actually saved, not hallucinated from general knowledge.
- Features
- Platform
- How RAG works
- Tech stack
- Repository structure
- Quick start
- Environment variables
- Firestore vector indexes
- Commands
- Documentation
- Contributing
- Capture from anywhere
- Links — auto-enriched titles, descriptions, and tags via server-side scraping.
- Notes — plain-text ideas, code snippets, structured thoughts.
- PDFs — in-memory text extraction for uploads up to 10MB.
- Browser extension — one-click save, side-panel review, and text-selection capture (Chrome, Manifest V3).
- Mobile share sheet — share directly into DumpIt from any Android app (PWA, Web Share Target).
- Email-to-save — forward anything to
save@dumpit.page(built; pending DNS/Resend dashboard setup on our end before it's reachable).
- AI search & cited Q&A
My Dump/Shared/Allsearch scopes across your private vault and community-shared resources.- Answers include inline citations and source cards you can verify.
- Organization
- Collections, tags, filtering, cursor-based pagination, duplicate detection.
- Public profiles at
/u/[username]with per-resource visibility control.
- Developer access
- REST API secured by long-lived API keys (generate/revoke from Settings).
- MCP server — query and save to your vault directly from Claude Desktop or Cursor.
- Infrastructure
- Sentry error monitoring (client, server, edge).
- Upstash Redis rate limiting on authenticated, public, and AI-query routes.
- Dodo Payments (Merchant of Record — handles global tax compliance automatically).
| Surface | What it's for |
|---|---|
| Web app | Full dashboard — search, capture, collections, profile, settings. |
| Browser extension | One-click save from any tab without leaving the browser. |
| REST API | Programmatic add/search/ask, authenticated with an API key from Settings. |
| MCP server | ask_vault, search_vault, save_to_vault tools for Claude Desktop / Cursor. |
| Mobile share sheet | Share a link straight into your vault from Android's native share menu. |
Saving a resource creates a resources document in Firestore. AI search relies on server-side background indexing:
- Extraction
- Links — fetches page content and extracts readable text.
- PDFs — parses the binary in memory via
pdf-parse. - Notes / emails — uses the content directly.
- Chunking & embedding — splits text into contextual chunks, generates 768-dimensional vectors via Gemini's embedding model.
- Storage & search — stores vectors in Firestore
resource_chunks, runs vector similarity search against user queries, and returns an answer with inline citations.
flowchart TD
Input["Link / Note / PDF / Email"] --> Extract["Extract Text (Fetch / pdf-parse)"]
Extract --> Chunk["Chunk Text"]
Chunk --> Embed["Gemini Embedding (768d)"]
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"]
| Layer | What |
|---|---|
| Framework | Next.js 14 (App Router), TypeScript |
| Styling | Tailwind CSS — Zinc palette, Space Grotesk + Inter |
| Auth | Firebase Auth (Google sign-in only) |
| Database | Firebase Admin SDK + Firestore (incl. native vector search) |
| AI | Google Gemini — embeddings & generation |
| Rate limiting | Upstash Redis |
| Error tracking | Sentry (client, server, edge) |
| Resend (inbound save-by-email) | |
| Payments | Dodo Payments (Merchant of Record) |
| Deployment | Vercel (web app), Firebase (backend/db) |
app/ Next.js App Router pages and API routes
api/ Server-side route handlers
resources/ CRUD for saved items (links, notes, PDFs)
ai/ Search + RAG "ask" endpoints
webhooks/ Dodo Payments + Resend inbound-email webhooks
settings/api-keys/ API key generate/list/revoke
share/ Mobile share-sheet capture page
u/[username]/ Public user profile pages
dumpit-extension/ Chrome extension (Manifest V3, separate package)
dumpit-mcp/ MCP server for Claude Desktop / Cursor (separate package)
docs/ Internal documentation
public/ Static assets, PWA manifest
types/ Shared TypeScript types
git clone https://github.com/Rayan9064/dumpit.git
cd dumpit
npm install
cp .env.example .env.local
npm run devOpen http://localhost:3000.
To try the browser extension or MCP server locally, see their own READMEs: dumpit-extension/README.md · dumpit-mcp/README.md.
Configure in .env.local (and in Vercel for production):
# 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-001
# App URL & SEO
NEXT_PUBLIC_APP_URL=https://www.dumpit.page
# Rate limiting
UPSTASH_REDIS_REST_URL=
UPSTASH_REDIS_REST_TOKEN=
# Monitoring & analytics (optional)
NEXT_PUBLIC_SENTRY_DSN=
NEXT_PUBLIC_POSTHOG_KEY=
NEXT_PUBLIC_POSTHOG_HOST=
# Resend (email-to-save)
RESEND_API_KEY=
RESEND_INBOUND_WEBHOOK_SECRET=
# Dodo Payments
DODO_PAYMENTS_API_KEY=
DODO_WEBHOOK_SECRET=Ask DumpIt requires Firestore vector indexes for semantic search:
# 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=embedding
# 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=embeddingnpm run dev # Run Next.js dev server
npm run typecheck # TypeScript type checking
npm run build # Build production bundle
npm test # Run Vitest unit testsContributions are welcome — see CONTRIBUTING.md for setup and workflow, and CODE_OF_CONDUCT.md for community guidelines. DumpIt is MIT licensed.
