A full-stack AI-powered application that lets users upload and chat with their PDF documents. It combines seamless PDF processing, intelligent responses, and a minimalistic design to deliver a smooth and intuitive user experience.
- PDF Upload & Processing: Upload and process PDF documents
- AI-Powered Chat: Ask questions about your documents and get AI-generated responses
- PDF Viewer & Sources: View uploaded PDFs and see sources for each AI response
- Session Persistence: Continue conversations without losing context across sessions
- Sample PDF: Test the app instantly using a built-in example PDF
- Minimalistic Design: Clean and distraction-free user interface
- Responsive Design: Works seamlessly on desktop and mobile devices
Frontend
- React (Vite, TypeScript)
- TailwindCSS + shadcn/ui
- react-pdf (PDF rendering)
- react-markdown (chat/message rendering)
Backend
- Node.js + Express
- Multer (file uploads)
- Pinecone (vector database for document embeddings)
AI Tools
- LangChain (orchestration)
- Google Gemini (LLM)
Tooling & Dev Experience
- Bun Workspaces (monorepo management)
- Husky + lint-staged (git hooks)
- ESLint + Prettier (code quality & formatting)
Deployment
-
Clone the repository
git clone https://github.com/thedreamydev/pdf-chat-app.git cd pdf-chat-app -
Install dependencies
bun install
-
Set up environment variables
- Copy
.env.exampleto.envin bothpackages/clientandpackages/server - Update the environment variables with your configuration
- Copy
-
Start the development servers
# Start both client and server in development mode bun run dev- Frontend will be available at
http://localhost:5173 - Backend API will be available at
http://localhost:3000
- Frontend will be available at
.
├── packages/
│ ├── client/ # Frontend React application
│ │ ├── public/ # Static files
│ │ ├── src/ # Source files
│ │ └── ...
│ │
│ └── server/ # Backend Node.js server
│ ├── controllers/ # Request handlers
│ ├── routes/ # API routes
│ ├── services/ # Business logic
│ └── ...
│
├── .gitignore
├── bun.lock
├── package.json
└── README.md
bun run dev- Start development servers for both client and serverbun run format- Format code using Prettierbun run prepare- Set up Git hooks using Husky
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- 🐦 X (Twitter)
- 🌐 Portfolio