A lightweight AI-powered summarization tool that transforms long-form content into concise, digestible recaps. Perfect for students, researchers, and professionals who need quick insights from documents, articles, or text.
🔗 Live Demo: tldrify.dvy9.dev
- Text: Paste any free-form text directly
 - URLs: Summarize web content with intelligent link ingestion
 - Documents: Support for PDF, Office docs, CSV, PPT, EPUB, images, and more
 
- Writing Style: Choose from concise, formal, technical, creative, or scientific tones
 - Length Control: Adjust summary length from 100-500 words
 - AI Models: Select between Gemini 2.5 Flash, Gemini 2.0 Flash, or GPT-5 Nano
 
- Offline Access: Client-side storage via IndexedDB for previous summaries
 - Security: Cloudflare Turnstile protection against abuse
 - Reliable Processing: Jina Reader integration for robust URL content extraction
 - File Handling: 5 MiB upload limit with server-side validation
 
graph LR
    A[Frontend] --> B[Backend API]
    B --> C[Cloudflare Turnstile]
    B --> D[Jina Reader]
    B --> E[Gemini AI]
    A --> F[IndexedDB]
    Technical Stack:
- Frontend: Vite + React (TypeScript), Tailwind v4 via Origin UI
 - Backend: FastAPI with Python 3.12+
 - Storage: IndexedDB for client-side data persistence
 - Processing: markitdown for document conversion, Gemini API for summarization
 
- Node.js 20+ & 
pnpm(corepack enable) - Python 3.12+
 uv- API keys for Gemini, Jina, and Cloudflare Turnstile
 
- 
Clone and setup frontend:
cd frontend cp .env.example .env # Add your VITE_TURNSTILE_SITE_KEY pnpm install pnpm dev
 - 
Setup backend:
cd backend cp .env.example .env # Add GEMINI_API_KEY, JINA_API_KEY, TURNSTILE_SECRET_KEY uv sync uv run --env-file=.env uvicorn main:app --reload
 - 
Access applications:
- Frontend: http://localhost:5173
 - Backend API: http://localhost:8000
 - API Documentation: http://localhost:8000/docs
 
 
Frontend (.env):
VITE_TURNSTILE_SITE_KEY=your_public_site_keyBackend (.env):
GEMINI_API_KEY=your_gemini_key
JINA_API_KEY=your_jina_reader_key
TURNSTILE_SECRET_KEY=your_turnstile_secretSummarizes content from text, URLs, or uploaded files.
Form Data:
| Field | Type | Required | Description | 
|---|---|---|---|
message | 
string | Conditional | Text content or URL to summarize | 
settings | 
JSON | Yes | {"model": "gemini-2.5-flash", "writingStyle": "concise", "maxWords": 200} | 
turnstileToken | 
string | Yes | Cloudflare Turnstile verification token | 
file | 
file | Optional | Document file (≤ 5 MiB) | 
Example Request:
curl -X POST http://localhost:8000/api/summarize \
  -F "message=https://example.com/article" \
  -F 'settings={"model":"gemini-2.5-flash","writingStyle":"concise","maxWords":200}' \
  -F "turnstileToken=your_verification_token"Success Response:
{
  "title": "Summary Title",
  "answer": "Concise summary content..."
}Error Responses:
400- Validation error403- Turnstile verification failed413- File too large422- Processing error
pnpm dev      # Development server
pnpm build    # Production build
pnpm preview  # Preview production build
pnpm lint     # Run lintinguv run --env-file=.env uvicorn main:app --reload  # Development serverfrontend/
  dist/           # Build artifacts (safe to delete)
  src/            # React application source
backend/
  main.py         # FastAPI application and route handlersProprietary - contact the author for reuse permissions.
- Missing environment variables will cause 
500errors - ensure all keys are set - Large files (>5 MiB) will be rejected with 
413status - Invalid Turnstile tokens return 
403errors - Build issues - delete 
frontend/dist/and rebuild 
For additional support, check the API documentation at /docs when running locally.