{"id":50897616,"url":"https://github.com/adrianhajdin/jsm_bookified","last_synced_at":"2026-06-16T01:31:02.960Z","repository":{"id":340211224,"uuid":"1164869829","full_name":"adrianhajdin/jsm_bookified","owner":"adrianhajdin","description":"Voice-first AI book companion platform built with Next.js 16; featuring real-time Vapi voice, ElevenLabs persona synthesis, Clerk authentication, and an interface built with shadcn/ui and Tailwind.","archived":false,"fork":false,"pushed_at":"2026-02-27T14:07:27.000Z","size":12004,"stargazers_count":50,"open_issues_count":2,"forks_count":33,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-29T09:35:12.352Z","etag":null,"topics":["clerk-auth","coderabbit","mongodb","mongoose","nextjs16","posthog","tailwindcss","typescript","vapi"],"latest_commit_sha":null,"homepage":"https://spoken-pages.vercel.app/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adrianhajdin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-23T15:19:13.000Z","updated_at":"2026-05-21T22:01:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/adrianhajdin/jsm_bookified","commit_stats":null,"previous_names":["adrianhajdin/jsm_bookified"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/adrianhajdin/jsm_bookified","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianhajdin%2Fjsm_bookified","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianhajdin%2Fjsm_bookified/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianhajdin%2Fjsm_bookified/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianhajdin%2Fjsm_bookified/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adrianhajdin","download_url":"https://codeload.github.com/adrianhajdin/jsm_bookified/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrianhajdin%2Fjsm_bookified/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34387472,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clerk-auth","coderabbit","mongodb","mongoose","nextjs16","posthog","tailwindcss","typescript","vapi"],"created_at":"2026-06-16T01:31:02.419Z","updated_at":"2026-06-16T01:31:02.954Z","avatar_url":"https://github.com/adrianhajdin.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cbr /\u003e\n    \u003ca href=\"https://youtu.be/NiwawEe92Co\" target=\"_blank\"\u003e\n      \u003cimg src=\"public/readme/readme-hero-new.webp\" alt=\"Project Banner\"\u003e\n    \u003c/a\u003e\n  \u003cbr /\u003e\n\n  \u003cdiv\u003e\n\u003cimg src=\"https://img.shields.io/badge/-Next.js_16-000000?style=for-the-badge\u0026logo=Next.js\u0026logoColor=white\" /\u003e\n\u003cimg src=\"https://img.shields.io/badge/-ElevenLabs-FFFFFF?style=for-the-badge\u0026logo=ElevenLabs\u0026logoColor=black\" /\u003e\n\u003cimg src=\"https://img.shields.io/badge/-Vapi-62F6B5?style=for-the-badge\u0026logo=Vapi\u0026logoColor=black\" /\u003e\n\u003cimg src=\"https://img.shields.io/badge/-Clerk-6C47FF?style=for-the-badge\u0026logo=Clerk\u0026logoColor=white\" /\u003e\u003cbr/\u003e\n\u003cimg src=\"https://img.shields.io/badge/-MongoDB-47A248?style=for-the-badge\u0026logo=MongoDB\u0026logoColor=white\" /\u003e\n\u003cimg src=\"https://img.shields.io/badge/-Typescript-3178C6?style=for-the-badge\u0026logo=Typescript\u0026logoColor=white\" /\u003e\n\u003cimg src=\"https://img.shields.io/badge/-Tailwind-06B6D4?style=for-the-badge\u0026logo=Tailwind-CSS\u0026logoColor=white\" /\u003e\n\u003cimg src=\"https://img.shields.io/badge/-Shadcn/UI-000000?style=for-the-badge\u0026logo=shadcnui\u0026logoColor=white\" /\u003e\n\n  \u003c/div\u003e\n\n  \u003ch3 align=\"center\"\u003eAI Book Companion | Vapi, ElevenLabs\u003c/h3\u003e\n\n   \u003cdiv align=\"center\"\u003e\n     Build this project step by step with our detailed tutorial on \u003ca href=\"https://www.youtube.com/watch?v=XUkNR-JfHwo\" target=\"_blank\"\u003e\u003cb\u003eJavaScript Mastery\u003c/b\u003e\u003c/a\u003e YouTube. Join the JSM family!\n    \u003c/div\u003e\n\u003c/div\u003e\n\n## 📋 \u003ca name=\"table\"\u003eTable of Contents\u003c/a\u003e\n\n1. ✨ [Introduction](#introduction)\n2. ⚙️ [Tech Stack](#tech-stack)\n3. 🔋 [Features](#features)\n4. 🤸 [Quick Start](#quick-start)\n5. 🔗 [Assets](#links)\n6. 🚀 [More](#more)\n\n## 🚨 Tutorial\n\nThis repository contains the code corresponding to an in-depth tutorial available on our YouTube channel, \u003ca href=\"https://www.youtube.com/@javascriptmastery/videos\" target=\"_blank\"\u003e\u003cb\u003eJavaScript Mastery\u003c/b\u003e\u003c/a\u003e.\n\nIf you prefer visual learning, this is the perfect resource for you. Follow our tutorial to learn how to build projects like these step-by-step in a beginner-friendly manner!\n\n\u003ca href=\"https://youtu.be/NiwawEe92Co\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/sujatagunale/EasyRead/assets/151519281/1736fca5-a031-4854-8c09-bc110e3bc16d\" /\u003e\u003c/a\u003e\n\n## \u003ca name=\"introduction\"\u003e✨ Introduction\u003c/a\u003e\n\nBookified is an AI-powered platform that lets you have real-time voice conversations with your books. Built with Next.js 16, Vapi, and MongoDB, it transforms PDFs into interactive entities using natural voice synthesis. Choose from custom ElevenLabs personas to chat with your library, request summaries, and view live transcripts—all wrapped in a sleek Shadcn UI with Clerk authentication. \n\nIf you're getting started and need assistance or face any bugs, join our active Discord community with over **50k+** members. It's a place where people help each other out.\n\n\u003ca href=\"https://discord.com/invite/n6EdbFJ\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/sujatagunale/EasyRead/assets/151519281/618f4872-1e10-42da-8213-1d69e486d02e\" /\u003e\u003c/a\u003e\n\n## \u003ca name=\"tech-stack\"\u003e⚙️ Tech Stack\u003c/a\u003e\n\n- **[Clerk](https://jsm.dev/books-clerk)** is a comprehensive user management and authentication platform. It provides secure, pre-built components for email and social logins, enabling seamless session management and protected routes with minimal configuration.\n\n- **[CodeRabbit](https://jsm.dev/books-coderabbit)** is an AI-powered code review platform that provides contextual, line-by-line feedback on pull requests. It automates the review process by identifying bugs, suggesting optimizations, and ensuring coding standards are met, significantly reducing the manual effort for developers and improving code quality.\n\n- **[ElevenLabs](https://elevenlabs.io/docs)** is an advanced AI audio platform providing lifelike text-to-speech. It powers the voice previews in Bookified, allowing users to hear and select from a variety of natural-sounding AI personas before starting a conversation.\n\n- **[MongoDB](https://www.mongodb.com/docs/)** is a flexible, document-based NoSQL database designed for scalability and developer ease. Combined with Mongoose, it serves as the core storage for user libraries, book metadata, and conversation transcripts.\n\n- **[Next.js](https://nextjs.org/docs)** is a powerful React framework for building full-stack web applications. It handles the core application logic, server-side rendering, and API routes, enabling a fast and responsive interface for the Bookified platform.\n\n- **[Shadcn UI](https://ui.shadcn.com/)** is a collection of re-usable, accessible components built with Tailwind CSS and Radix UI. It allows for the creation of a clean, modular, and professional-grade user interface that is easy to customize and theme.\n\n- **[TypeScript](https://www.typescriptlang.org/)** is a superset of JavaScript that adds static typing, providing better tooling, code quality, and error detection. It ensures the application remains maintainable and robust as the codebase scales.\n\n- **[Vapi](https://jsm.dev/books-vapi)** is a specialized Voice AI platform that enables real-time, low-latency conversational audio. It serves as the primary engine for Bookified, allowing users to have seamless, back-and-forth verbal interactions with their uploaded content.\n\n## \u003ca name=\"features\"\u003e🔋 Features\u003c/a\u003e\n\n👉 **PDF Upload \u0026 Ingestion**: Seamlessly upload PDF books with automated text extraction, intelligent chunking, and high-dimensional embeddings for precise context retrieval.\n\n👉 **Voice-First Conversations**: Engage in natural, real-time voice dialogues with your uploaded books, allowing you to ask questions or explore complex concepts verbally via Vapi.\n\n👉 **AI Voice Personas**: Choose from a variety of distinct AI personalities and hear instant high-fidelity previews powered by ElevenLabs to find the perfect reading companion.\n\n👉 **Smart Summaries \u0026 Insights**: Quickly extract the essence of any chapter or request deep-dive summaries, making long-form content more accessible and digestible.\n\n👉 **Session Transcripts**: Keep a complete record of every vocal interaction with auto-generated text transcripts, ensuring you never lose a key insight from your discussions.\n\n👉 **Library Management**: Effortlessly organize and search through your personal uploads or the global collection with a high-performance search interface.\n\n👉 **Auth \u0026 Subscription**: Secure user access via email and social login, paired with a robust billing system to manage premium features and platform subscriptions.\n\nAnd many more, including code architecture and reusability.\n\n## \u003ca name=\"quick-start\"\u003e🤸 Quick Start\u003c/a\u003e\n\nFollow these steps to set up the project locally on your machine.\n\n**Prerequisites**\n\nMake sure you have the following installed on your machine:\n\n- [Git](https://git-scm.com/)\n- [Node.js](https://nodejs.org/en)\n- [npm](https://www.npmjs.com/) (Node Package Manager)\n\n**Cloning the Repository**\n\n```bash\ngit clone https://github.com/adrianhajdin/jsm_bookified.git\ncd jsm_bookified\n```\n\n**Installation**\n\nInstall the project dependencies using npm:\n\n```bash\nnpm install\n```\n\n**Set Up Environment Variables**\n\nCreate a new file named `.env` in the root of your project and add the following content:\n\n```env\nNODE_ENV='development'\nNEXT_PUBLIC_BASE_URL=\n\n# CLERK\nNEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=\nCLERK_SECRET_KEY=\nNEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in\nNEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up\nNEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL=/\nNEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL=/\n\n# VERCEL BLOB\nBLOB_READ_WRITE_TOKEN=\n\n# MONGODB\nMONGODB_URI=\n\n# VAPI\nNEXT_PUBLIC_VAPI_API_KEY=\nVAPI_SERVER_SECRET=\n\n# Google Gemini API for embeddings\nGOOGLE_GEMINI_API_KEY=\n\n# ELEVENLABS\nELEVENLABS_API_KEY=\n```\n\nReplace the placeholder values with your real credentials. You can get these by signing up at: [**Clerk**](https://clerk.com), [**Vercel**](https://vercel.com), [**MongoDB**](https://www.mongodb.com), [**Vapi**](https://vapi.ai), [**Google AI Studio**](https://aistudio.google.com), [**ElevenLabs**](https://elevenlabs.io).\n\n**Running the Project**\n\n```bash\nnpm run dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) in your browser to view the project.\n\n## \u003ca name=\"links\"\u003e🔗 Assets\u003c/a\u003e\n\nAssets and snippets used in the project can be found in the **[video kit](https://jsmastery.com/video-kit/8127ec28-61db-4295-a85b-c649df6ee408)**.\n\n\u003ca href=\"https://jsmastery.com/video-kit/8127ec28-61db-4295-a85b-c649df6ee408\" target=\"_blank\"\u003e\n  \u003cimg src=\"public/readme/readme-videokit.webp\" alt=\"Video Kit Banner\"\u003e\n\u003c/a\u003e\n\n## \u003ca name=\"more\"\u003e🚀 More\u003c/a\u003e\n\n**Advance your skills with Next.js Pro Course**\n\nEnjoyed creating this project? Dive deeper into our PRO courses for a richer learning adventure. They're packed with\ndetailed explanations, cool features, and exercises to boost your skills. Give it a go!\n\n\u003ca href=\"https://jsm.dev/books-jsm\" target=\"_blank\"\u003e\n  \u003cimg src=\"public/readme/readme-jsmpro.webp\" alt=\"Project Banner\"\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadrianhajdin%2Fjsm_bookified","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadrianhajdin%2Fjsm_bookified","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadrianhajdin%2Fjsm_bookified/lists"}