BookPulse AI é uma aplicação full-stack em Next.js para criar uma biblioteca privada de leitura com IA. Os usuários podem enviar livros em PDF, organizá-los em uma coleção pessoal e iniciar conversas por voz sobre cada livro com um assistente de IA.
O sistema oferece:
- Autenticação e gerenciamento de usuário com Clerk
- Upload de PDF com imagem de capa opcional
- Extração e segmentação automática do texto para busca contextual
- Conversas por voz com IA usando Vapi
- Limites por assinatura para livros e sessões de voz
- Busca na biblioteca por título ou autor
Este projeto foi criado para transformar livros enviados pelo usuário em uma experiência de leitura mais interativa.
O objetivo é combinar um fluxo simples de biblioteca pessoal com recursos práticos de IA:
- manter a biblioteca privada por usuário
- permitir o upload de PDFs próprios
- tornar as conversas sobre livros contextuais, e não genéricas
- controlar o uso por meio de planos de assinatura
- Projeto com App Router usando server components, client components, server actions e route handlers
- Persistência em MongoDB para livros, segmentos dos livros e histórico de sessões de voz
- Integração com autenticação e assinatura via Clerk
- Armazenamento de PDFs e imagens com Vercel Blob
- Página da biblioteca pessoal com busca por título ou autor
- Página protegida para upload de livros
- Validação de PDF com limite de 50MB
- Upload opcional de imagem de capa
- Capa gerada automaticamente a partir do PDF quando disponível
- Verificação de título duplicado por usuário
- Geração automática de slug para as rotas dos livros
- Página de conversa por voz para cada livro enviado
- Controles de microfone com feedback visual do estado da chamada
- Transcrição em tempo real das mensagens do usuário e do assistente
- Ferramenta de busca contextual para recuperar trechos relevantes do livro durante a conversa
- Voz do assistente configurada no momento do upload
Free: 1 livro, 5 sessões de voz por mês, 5 minutos por sessãoStandard: 10 livros, 100 sessões de voz por mês, 15 minutos por sessãoPro: 100 livros, sessões ilimitadas, 60 minutos por sessão- Limites de upload e de sessão aplicados no servidor
- Página de preços integrada com o Clerk Pricing Table
- Faça login com Clerk
- Abra
Add New - Envie um PDF e, se quiser, uma imagem de capa
- Escolha a voz do assistente
- Aguarde a extração e segmentação do texto
- Navegue pelo livro na sua biblioteca privada
- Abra um livro e inicie uma conversa por voz sobre o conteúdo
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS 4
- Clerk
- MongoDB + Mongoose
- Vercel Blob
- Vapi Web SDK
- PDF.js
- shadcn/ui
- Radix UI
- React Hook Form
- Zod
- Sonner
- Lucide React
- Clone o repositório:
git clone https://github.com/pitercoding/bookpulse-ai.git
cd bookpulse-ai- Instale as dependências:
npm install- Crie um arquivo
.env.localcom suas próprias credenciais:
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
CLERK_SECRET_KEY=your_clerk_secret_key
MONGODB_URI=your_mongodb_connection_string
BLOB_READ_WRITE_TOKEN=your_vercel_blob_token
NEXT_PUBLIC_ASSISTANT_ID=your_vapi_assistant_id
NEXT_PUBLIC_VAPI_API_KEY=your_vapi_public_key- Execute o servidor de desenvolvimento:
npm run dev- Abra:
- App:
http://localhost:3000
- Não faça commit de segredos reais no
.env.local. - O Clerk precisa estar configurado com os planos de assinatura usados pela aplicação.
- O Vapi precisa ter um assistente compatível com conversas sobre livros.
- O MongoDB deve estar acessível para a aplicação local.
- O Vercel Blob é necessário para upload de PDFs e imagens.
- Usuários não autenticados podem navegar pela camada pública da interface, mas o upload de livros e as conversas por voz exigem login.
- Os livros são privados para o usuário autenticado no Clerk.
- Os PDFs enviados são processados e divididos em segmentos para que o assistente consiga buscar conteúdo do livro durante a conversa.
- Os limites de sessão e de quantidade de livros dependem do plano de assinatura ativo.
Status atual:
- os fluxos centrais parecem preparados para validação manual
- ainda não existe uma suíte de testes automatizados configurada no
package.json
Próximo escopo recomendado:
- testes de server actions para upload, verificação de duplicidade e limites de assinatura
- testes de route handlers para autorização de upload e tool calls do Vapi
- testes de componentes para fluxo de upload, renderização da transcrição e bloqueios por assinatura
- Adicionar progresso de leitura e insights por livro
- Adicionar histórico de sessões e resumo de conversas
- Adicionar fluxos de edição e remoção de livros
- Melhorar a recuperação semântica dos trechos do livro
- Adicionar resumos, destaques e navegação por capítulos
- Expandir as ferramentas do assistente além da busca textual
- Adicionar testes unitários e de integração
- Adicionar pipeline de CI com lint, build e testes
- Melhorar observabilidade e tratamento de erros nos fluxos de upload e voz
- Frontend/App runtime: Vercel
- Banco de dados: MongoDB Atlas
- Autenticação e billing: Clerk
- Armazenamento de arquivos: Vercel Blob
bookpulse-ai/
|- app/
| |- (root)/page.tsx # Home da biblioteca e busca
| |- books/
| | |- new/page.tsx # Upload de novo livro
| | \- [slug]/page.tsx # Página de conversa por voz
| |- subscriptions/page.tsx # Preços e gerenciamento de plano
| \- api/
| |- upload/route.ts # Autorização de upload no Blob
| \- vapi/search-book/route.ts # Endpoint de busca contextual para a IA
|- components/ # Componentes de UI e features
|- database/
| |- mongoose.ts # Conexão com MongoDB
| \- models/ # Models do Mongoose
|- hooks/
| \- useVapi.ts # Ciclo de vida da sessão por voz e transcrição
|- lib/
| |- actions/ # Server actions
| |- subscription-*.ts # Definições e helpers de planos
| |- pdf.ts # Helpers de extração de PDF
| \- search-book-segments.ts # Recuperação de segmentos do livro
|- public/
| \- assets/ # Imagens estáticas e branding
|- README.md # Documentação (English)
\- README.pt.md # Documentação (Portuguese)
Este projeto está licenciado sob a MIT License.
Piter Gomes — Computer Science Student (6th Semester) & Full-Stack Developer