Bolt is an innovative platform that allows users to upload PDFs and interact with them through a chat interface. Built with Next.js, TypeScript, and TailwindCSS, Bolt offers a seamless and responsive user experience. It leverages advanced technologies like Pinecone for vector storage, OpenAI for natural language processing, and Stripe for subscription management, providing both Free and Pro versions. Whether you need to extract information or simply interact with your documents more intuitively, Bolt transforms the way you engage with PDFs.
- Frameworks & Libraries: Next.js, TypeScript, TailwindCSS, Mantine/hooks, react-pdf, react-dropzone, react-resize-detector, react-hook-form, hookform/resolvers, simplebar-react, react-textarea-autosize
- UI Components: shadcn-ui, lucide-react
- Authentication: @kinde-oss/kinde-auth-nextjs
- Communication: tRPC
- Database: Prisma, Neon.tech
- Vector Database: Pinecone, @pinecone-database/pinecone
- Natural Language Processing: Langchain, OpenAI
- Payment Processing: Stripe
- Utilities: react-loading-skeleton, date-fns
- Upload PDFs and interact with them through a chat interface.
- Two versions: Free and Pro.
- User authentication using Kinde.
- Secure and scalable vector storage with Pinecone.
- Natural language understanding and responses powered by OpenAI.
- Subscription management with Stripe.
- Responsive and modern UI with TailwindCSS and Shadcn UI components.
Developing "Bolt" was an exciting journey. I started by outlining the core functionality: enabling users to upload and interact with PDFs via a chat interface. Here’s a step-by-step breakdown of the process:
- Planning: I drafted the project scope, user stories, and designed the system architecture.
- Setup: Initialized the project using Next.js with TypeScript, and set up TailwindCSS for styling.
- Authentication: Integrated user authentication with @kinde-oss/kinde-auth-nextjs.
- Backend Development: Set up tRPC for seamless client-server communication and Prisma with Neon.tech for database management.
- Vector Database: Integrated Pinecone for efficient vector storage and retrieval.
- NLP Integration: Used Langchain and OpenAI to enable natural language processing capabilities.
- Frontend Development: Built the user interface with shadcn-ui and lucide-react, and added various interactive components using Mantine/hooks.
- File Handling: Implemented file upload and PDF rendering with react-dropzone and react-pdf.
- Responsive Design: Ensured responsiveness using TailwindCSS and additional components like react-resize-detector.
- Forms: Managed form states and validations with react-hook-form and hookform/resolvers.
- Enhancements: Added utilities like react-loading-skeleton for loading states, date-fns for date handling, and simplebar-react for custom scrollbars.
- Subscription Management: Integrated Stripe for handling Pro subscriptions.
- Testing & Debugging: Rigorously tested the application to ensure robustness and smooth user experience.
- Effective integration of various libraries and frameworks to create a cohesive application.
- Efficient state management and form handling in React.
- Implementing authentication and subscription models in a web application.
- Using vector databases and natural language processing to enhance application functionality.
- Implement additional NLP models to support more complex queries.
- Enhance the PDF parsing capabilities to better handle various formats and structures.
- Improve the UI/UX based on user feedback and usability testing.
- Add support for more file types beyond PDFs.
- Implement more robust error handling and logging mechanisms.
To run the project locally, follow these steps:
-
Clone the repository:
git clone git@github.com:HuzaifaIlyas02/Bolt.git cd bolt
-
Clone the repository:
npm install
-
Set up environment variables: Create a .env file in the root directory and add your environment variables. Refer to .env.example for required variables.
-
Initialize the database:
npx prisma init
npx prisma migrate dev
-
Start the development server:
npm run dev
Bolt_Final_Demo.mp4
Feel free to contribute, report issues, or suggest improvements!