<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Build With Anant: Build in Action]]></title><description><![CDATA[Step-by-step videos of full software builds using AI tools like Cursor, v0, Replit, ChatGPT Canvas and more. Watch and learn as I tackle real-world coding challenges.
]]></description><link>https://anantgarg.com/s/build-in-action</link><image><url>https://substackcdn.com/image/fetch/$s_!W4To!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d9b8c19-a0ed-4111-b848-275e3b5e7cb6_225x225.png</url><title>Build With Anant: Build in Action</title><link>https://anantgarg.com/s/build-in-action</link></image><generator>Substack</generator><lastBuildDate>Fri, 17 Apr 2026 20:24:11 GMT</lastBuildDate><atom:link href="https://anantgarg.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Anant Garg]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[buildwithanant@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[buildwithanant@substack.com]]></itunes:email><itunes:name><![CDATA[Anant Garg]]></itunes:name></itunes:owner><itunes:author><![CDATA[Anant Garg]]></itunes:author><googleplay:owner><![CDATA[buildwithanant@substack.com]]></googleplay:owner><googleplay:email><![CDATA[buildwithanant@substack.com]]></googleplay:email><googleplay:author><![CDATA[Anant Garg]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Chatbot Platform #6 - MVP!]]></title><description><![CDATA[Step-by-Step Guide to Adding CometChat and Preparing the MVP]]></description><link>https://anantgarg.com/p/chatbot-platform-6-mvp</link><guid isPermaLink="false">https://anantgarg.com/p/chatbot-platform-6-mvp</guid><dc:creator><![CDATA[Anant Garg]]></dc:creator><pubDate>Thu, 30 Jan 2025 09:37:57 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/156082668/1279d619c611573c325be6e4015a5883.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Thanks for joining in today. I'm really excited because I've finally been able to get the flow up and running&#8212;the entire flow&#8212;for our bot platform. Users can now create a bot, upload files to it, and interact with it using CometChat. This means the entire circle is complete! When users chat via CometChat, the bot references the uploaded files to provide accurate responses, which is incredibly gratifying for me.</p><p><strong>Getting Started from Where We Left Off</strong></p><p>Let's jump right in from where we concluded our last session. Previously, I had enabled ngrok, but I hadn't set up the service to accept data yet. Today, I'm addressing that by creating a basic API endpoint. I have given an example of the type of content coming in from CometChat, and the endpoint has now been created. Let&#8217;s send a message and see what happens.</p><p>Upon sending a message, I noticed it was redirected to login. To bypass this during the demo, I&#8217;ve decided not to implement additional authentication right now. In the future, we can certainly add more security layers. For now, I've integrated the bot ID into the URL, allowing us to determine which bot is making the call. I've also included this information on the configuration page.</p><p><strong>Configuring the URL and Testing the Response</strong></p><p>With the bot ID, I've updated the URL in the CometChat dashboard for the bot. After testing, I found out it was still redirecting. Once fixed, we tried again, and this time the response returned a status OK. Then, I modified the setup to send out a response by integrating relevant code from CometChat's API documentation. Now, upon completion, there should be a response from the system&#8212;although initially, the response looped back to itself, sending the same message repeatedly. This was due to an incorrect URL end-point, which has since been corrected.</p><p><strong>The Breakthrough with Gym Bot</strong></p><p>After rectifying the endpoint, we successfully received a response from Gym bot. Moving forward, I decided to enhance echo bot further by fetching responses from OpenAI and forwarding these to the user. I've associated a workout file with Gym bot, configured all the settings with CometChat, and thoroughly tested this several times.</p><p>Running the test on a local system takes a bit longer than it would on a server, but ultimately, I received the desired response, which was extracted from the file. The next step in this developmental journey will be to remove markdown syntax and replace it with standard content to simplify responses.</p><p><strong>What&#8217;s Next?</strong></p><p>There you have it! We've built the whole flow with CometChat. In future episodes, I'll be adding other integrations, such as with Facebook Messenger and WhatsApp. Stay tuned for more advancements.</p><p>Thank you for following along.</p><p>Bye!</p>]]></content:encoded></item><item><title><![CDATA[Chatbot Platform #5 - Integrations]]></title><description><![CDATA[A step-by-step guide to adding integrations for bots]]></description><link>https://anantgarg.com/p/chatbot-platform-5-integrations</link><guid isPermaLink="false">https://anantgarg.com/p/chatbot-platform-5-integrations</guid><dc:creator><![CDATA[Anant Garg]]></dc:creator><pubDate>Tue, 28 Jan 2025 15:01:33 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/155926082/cebd183128334eea57baaeb41b7d0017.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Thanks for joining in on this journey. Today, I tackled the task of adding an integration feature to our chatbot. This integration is designed to allow connections to various destinations, including platforms like WhatsApp and Facebook Messenger. My first step was integrating with CometChat, enabling the chatbot builder to be entirely managed by CometChat's frontend capabilities. Let me walk you through the process.</p><p><strong>Beginning with Integrations</strong></p><p>To kick things off, I went ahead and prompted the system to add an integrations page for each bot. However, despite following the setup instructions, I noticed it wasn't taking effect as expected. After some trial and error, including messaging the same error message again, it still didn't work. When I checked the file, it appeared that the relevant code had been added, yet it wasn't reflecting in the final product. After a bit of investigation, I realized I had added it to the wrong file. Finally, after correcting the location, the integrations page appeared as intended.</p><p><strong>Integrating with CometChat</strong></p><p>Next was the exciting part: moving on to CometChat. I started by downloading CometChat's React v5 UI Kit and executed a series of commands, one at a time. Progressing to the dashboard, I navigated to the 'Bots' section to ensure I had created a gym bot. This was crucial because I was using a product called "ngrok." Ngrok is quite handy for turning localhost into an accessible web interface.</p><p>Once set up, I confirmed the gym bot's presence in the group's list. Sending a message to the group should trigger a receipt of that message on the other end, and indeed, upon checking ngrok, the message was successfully received.</p><p><strong>Looking Ahead</strong></p><p>In our next session, I'll be working on connecting all the dots to complete this communication flow. When a message comes in, the plan is to process it through OpenAI, enabling us to send an appropriate response back. This will wrap up the integration process neatly. Following this, I plan to focus on expanding the range of integrations even further.</p><p>That&#8217;s all for now. Thank you for reading, and I hope you found this insight into the integration process useful.</p><p>Until next time,</p><p>Anant</p>]]></content:encoded></item><item><title><![CDATA[Chatbot Platform #4 - Multi-tenancy]]></title><description><![CDATA[A step-by-step guide to add multi-tenancy support to the chatbot platform]]></description><link>https://anantgarg.com/p/chatbot-platform-multi-tenancy</link><guid isPermaLink="false">https://anantgarg.com/p/chatbot-platform-multi-tenancy</guid><dc:creator><![CDATA[Anant Garg]]></dc:creator><pubDate>Thu, 16 Jan 2025 13:00:07 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/154946067/1a0ad92a3010d586a5ca416d38615fff.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Hi folks,</p><p>Thanks for joining me. Today, I'm diving deeper into the exciting world of multi-tenancy as I continue to refine my chatbot platform.</p><h3>Debugging the Files Tab</h3><p>The journey begins where I left off last time - the files tab wasn't yet fully equipped for multi-tenancy. Previously, accessing the files tab fetched and displayed a list of files directly from OpenAI, which wasn't ideal. Now, I've revamped the code to pull these files from the database instead. However, after making this change, I encountered an error message: "failed to upload file." To troubleshoot, I looked into the issue and found that while the file was getting uploaded to OpenAI, it wasn't being added to my database. It turned out that the user ID being fetched wasn't correct. After checking and rectifying this problem, things seemed to work smoothly. A quick look at the files table confirmed - an entry had been added.</p><p>Next, I logged out and tried the process with a different user. I noticed the same file was showing up. To solve this, I uploaded a second file. The upload went through, but it became clear the files list was incorrect - it was displaying files like "mega guide" and "golden rules" across different users. I'd instructed the system to show files specifically for the logged-in user, prompting another round of code revisions. After these adjustments, each user could now see their respective files: user one saw "mega guide," and another user saw "golden rules."</p><h3>Fixing the Bot's Endpoint and Navigation</h3><p>While reviewing, I encountered an issue with the bot's endpoint and noted that the navigation panel looked awkward as it was only half the length. I made some modifications, extending the navigation to full length and fixing the bot's tab link. Both now work as intended.</p><h3>Enhancing the Files Tab</h3><p>Another task was to refine the associate feature within the files tab. The associate functionality was supposed to add the feature to the database, but wasn't doing so. Upon examining the issue, I discovered it was attempting to associate the same file twice in OpenAI, causing an error. Cursor was tasked to address this issue for me.</p><p>Furthermore, I wanted to ensure if a bot was removed from an association, it would also be erased from the vector store. This process would extend to bots too - deleting a bot should remove it from the database, the assistant, and the vector store. I pasted relevant code snippets to avoid confusion for Cursor. Subsequently, deleting Gym bot 2 confirmed the success of these steps, as it vanished from both the database and the vector store.</p><h3>Reaching the Goal</h3><p>With these hurdles overcome, my chatbot platform now stands fully functional. Users can log in, register, create bots, upload files, associate these files with multiple bots, and then interact with the bots to get responses. I feel I am one step closer to developing something genuinely impactful. I look forward to sharing more updates in the next episode.</p><p>Thank you for joining me on this journey.</p>]]></content:encoded></item><item><title><![CDATA[Chatbot Platform #3- Auth & Multi-tenancy]]></title><description><![CDATA[A step-by-step guide to adding authentication and multi-tenancy to the chatbot builder]]></description><link>https://anantgarg.com/p/chatbot-auth-and-multi-tenancy</link><guid isPermaLink="false">https://anantgarg.com/p/chatbot-auth-and-multi-tenancy</guid><dc:creator><![CDATA[Anant Garg]]></dc:creator><pubDate>Tue, 14 Jan 2025 10:58:21 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/154810595/65bc1ba07e951ec3b59c5f290d8dc3cb.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In today's tech journey, I'm excited to bring you along as I dive deeper into enhancing my chatbot solution. If you tuned in for the previous episode, you might remember that I laid the foundation by creating a basic chatbot product using OpenAI to answer simple questions by uploading files. Now, I'm taking it a step further by adding an authentication layer and working towards enabling multi-tenancy for the application.</p><p>Let's get right into it. First on the agenda is adding a user login and registration feature. I informed the tool I'm using, Cursor, that this is what I want, and it efficiently handled the task. However, it didn't automatically restrict access to the dashboard I built, so I had to prompt it specifically to implement that feature as well.</p><p>Once accomplished, a login and registration screen became visible. I opted to sign up first and then attempted to log in using the same credentials. This is where I encountered a roadblock&#8212;a persistent error message indicating a mismatch in the expected string pattern. Debugging revealed that the registration input wasn't being recorded in the database, leading to this repetitive error.</p><p>I spent some time iterating with Cursor to resolve this. Even when experimenting with different versions of language models like GPT-4o and another variant, I initially couldn't identify the root cause. It finally dawned on me that the registration API endpoint was being protected and requests were rerouted to the login screen, causing the error. It was a testament to the fact that while language models can handle many tasks, there are times when a manual inspection, like reviewing console logs and network responses, is necessary for troubleshooting. Fortunately, once I recognized the issue and communicated it to Cursor, it was quick to correct it.</p><p>Having successfully registered an account, I verified its presence in the database and logged in without issues. However, there was a minor hiccup: I wasn't being redirected to the correct pages. After some more prompts to Cursor, I achieved the smooth navigation post-sign-in that I was aiming for.</p><p>The next major step was implementing multi-tenancy, where distinct users could have personalized access to their own sets of bots and files. For instance, when user 1 logs in, they should see a different suite compared to user 2. I initiated the process by directing Cursor to ensure logged-in users could only view bots or files they had created.</p><p>I went ahead and crafted several test accounts and checked them against the database. In the process, I ran into a 404 error triggered by an endpoint modification&#8212;from /bots to just /. Adjusting this was straightforward, and it was addressed promptly. Testing showed that after a minor code change to correctly fetch bots for the logged-in user, different accounts were consistently displaying unique data sets, aligning with the multi-tenancy objective.</p><p>With this progress, I'm getting progressively closer to building a fully operational SaaS-based multi-tenant chatbot creator. Soon, it will be robust enough for production use, and I'm thrilled to be expanding its capabilities. Stay tuned for upcoming updates, where I'll continue refining file management and other features, slowly but surely bringing this vision to fruition.</p><p>Thank you for joining me on this voyage. Until the next step in our development journey!</p>]]></content:encoded></item><item><title><![CDATA[Create a Chatbot Platform with Cursor]]></title><description><![CDATA[A step-by-step guide to creating a chatbot platform with Cursor, OpenAI & Next.js]]></description><link>https://anantgarg.com/p/create-a-chatbot-platform-with-cursor</link><guid isPermaLink="false">https://anantgarg.com/p/create-a-chatbot-platform-with-cursor</guid><dc:creator><![CDATA[Anant Garg]]></dc:creator><pubDate>Tue, 07 Jan 2025 09:16:40 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/154320519/80151e512ecef20ce3c26c785abf00af.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Creating a chatbot is a fascinating journey into the world of automated communication. Today, we'll guide you through the process of building a simple yet effective chatbot platform using Next.js, SQLite, and OpenAI. This platform will enable you to create multiple bots, send them messages, and receive responses.</p><h3>Getting Started with Next.js</h3><p>The adventure begins with setting up a simple Next.js project. When you start, be sure to choose the 'agent' option instead of the normal one. This crucial step allows the running of commands, which you'll find immensely useful as we proceed. Once configured, you'll be able to view the output in your web browser.</p><h3>Building an Admin Dashboard</h3><p>Next, we move on to creating an admin dashboard. This interface will have a look and feel akin to the popular project management tool, Linear. The functionalities include the ability to create, update, and edit bots, a versatile setup to manage your bots efficiently.</p><h3>Addressing Data Persistence</h3><p>One challenge you'll encounter is that initially, none of the bot states are saved. This is because there's no real database on the backend. To solve this, we'll set up a database. In this guide, we use SQLite, a convenient lightweight database. However, feel free to choose any database system you prefer, such as MySQL or PostgreSQL. Once implemented, your bots' states will be saved, and they will persist across page reloads.</p><h3>Creating an API for Bot Communication</h3><p>With the database in place, the next step is to create an API. This will allow you to invoke individual bots. We'll connect this API to OpenAI to enhance functionality. Additionally, the admin dashboard will feature an option to test messages easily. Connect to OpenAI by securing an API key, allowing interaction with their powerful servers.</p><h3>Troubleshooting and Enhancements</h3><p>While testing, you might encounter issues like improper model usage. For instance, there might be a prompt to use the <code>gpt-4o-mini</code> model, although it defaults to the <code>turbo-preview</code> model. It&#8217;s vital to ensure the correct model is used. A simple prompt adjustment can direct the system to utilize your desired model, <code>4o-mini</code>.</p><p>Another enhancement is updating the design to a light mode for a more soothing interface and implementing the <code>shadcn</code> library&#8212;though its pronunciation is a fun mystery&#8212;to achieve a clean, modern look.</p><h3>Testing With Real Scenarios</h3><p>With everything set up, it's time to test the bots in action. For variety, you might try scenarios like a gym trainer simulation. The bot's ability to provide a coherent response using the custom instruction will be a testament to the platform's efficacy.</p><h3>Conclusion and What's Next</h3><p>This brings us to the end of this section of our chatbot-building journey. In our next installment, we will explore how to upload and integrate your own content into the platform. Stay tuned for more insights and enhancements to your chatbot adventure.</p><p><strong>Thank you for exploring the fascinating world of chatbots with me!</strong></p>]]></content:encoded></item><item><title><![CDATA[Building a Canny Clone with Replit]]></title><description><![CDATA[A step-by-step guide to create a clone of Canny, a popular user feedback software using Replit]]></description><link>https://anantgarg.com/p/building-a-canny-clone-with-replit</link><guid isPermaLink="false">https://anantgarg.com/p/building-a-canny-clone-with-replit</guid><dc:creator><![CDATA[Anant Garg]]></dc:creator><pubDate>Fri, 03 Jan 2025 12:08:40 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/154062002/6b2d31d8e59f8ac13616a81d57af8c56.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Have you ever wanted to build your own version of Canny, a popular feature request software? Today, we're giving you a step-by-step guide on how you can create a Canny clone using Replit, a dynamic and user-friendly coding platform.</p><h3>Introduction to the Canny Clone</h3><p>Creating a feature request software like Canny allows users to upvote feature requests, post their own, and comment on any requests. Utilizing Replit simplifies the process, even for those with limited programming knowledge. Let&#8217;s dive into how you can leverage this platform to bring your vision to life.</p><h3>Getting Started with Replit</h3><p>For this tutorial, we begin by accessing Replit. With the prompt ready, hit <strong>start building</strong> to initiate your project. At this stage, it&#8217;s essential to focus on your initial plan. Adding too many features upfront can complicate things, so let&#8217;s keep it simple to start.</p><h3>The Building Process</h3><p>Replit makes building intuitive. As the product compilation process completes, it provides real-time results. One distinct advantage of using Replit is its ability to access the actual output and provide screenshots for verification. This helps ensure that your features are functioning as expected.</p><h3>Testing Your Canny Clone</h3><p>Now, let&#8217;s dive into some testing. Begin by registering with a test account. Though we encountered a minor login issue, it was swiftly resolved, allowing us to proceed with ease. The subsequent steps reaffirm the clone&#8217;s functionality&#8212;logging in, submitting new feedback, upvoting posts, commenting, and, ultimately, logging out.</p><h3>Why Replit?</h3><p>Replit stands out by making the building process as seamless as possible. You don't need deep programming knowledge. Simply input your feature requests, and Replit does the heavy lifting. If you aim to develop internal tools or simple software solutions, then Replit should be your platform of choice due to its simplicity and effectiveness.</p><h3>Conclusion</h3><p>Congratulations! By following these steps, you now have your very own Canny clone. This endeavor shows how Replit can transform complex ideas into reality with minimal effort. Whether you're a beginner or an experienced developer, Replit provides the tools and resources necessary to bring your projects to life.</p><p>We hope you found this guide helpful in navigating the creation of a Canny clone. Happy building, and thank you for reading!</p>]]></content:encoded></item><item><title><![CDATA[Building a Canny Clone with Cursor]]></title><description><![CDATA[A step-by-step guide to create a clone of Canny, a popular user feedback software using Cursor & Claude]]></description><link>https://anantgarg.com/p/building-a-canny-clone-with-cursor</link><guid isPermaLink="false">https://anantgarg.com/p/building-a-canny-clone-with-cursor</guid><dc:creator><![CDATA[Anant Garg]]></dc:creator><pubDate>Thu, 02 Jan 2025 12:44:53 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/153974805/3d86f54e69cafc096dc322a01a706d2a.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><strong>Introduction</strong></p><p>Are you looking to create a feature-rich user feedback platform? Canny, a popular user feedback software, allows users to create and upvote feature requests with ease. In this post, I'll guide you through building a Canny clone using modern web technologies. This clone will help you gather and manage user feedback effectively.</p><p><strong>Setting Up the Project</strong></p><p>To get started, we'll create a new Next.js project. Next.js will serve as our frontend framework, enabling seamless integration with our backend services. Go ahead and run your Next.js project. You should see a default page indicating that your setup was successful.</p><p><strong>Choosing a Database: Prisma and SQLite</strong></p><p>Our next step is to choose a database. We&#8217;ll use Prisma, an ORM that simplifies database interactions. For this project, we're integrating Prisma with SQLite, a lightweight and efficient database. Although we're using SQLite here, you can opt for any database that suits your needs. Our database will store all feedback, track upvotes, and manage comments.</p><p><strong>Design and UI Customization</strong></p><p>With the database set, let&#8217;s focus on the UI. We want our Canny clone to mirror the look and feel of the original software. By closely emulating the Canny interface, users will have a familiar experience. Spend some time refining the UI until it matches your envisioned design.</p><p><strong>Connecting the Frontend and Backend</strong></p><p>Now that our interface is in place, let&#8217;s connect it to the backend. Initially, our app might not communicate in real time, so we&#8217;ll implement updates to ensure feature requests and upvotes are reflected instantly. Testing is crucial here; check if the data updates without reloading the page.</p><p><strong>Testing Functionality: Upvote and Comment Features</strong></p><p>Once the connection is established, it&#8217;s time to test key functionalities. Start with the upvote feature. After implementing it, try upvoting a feature request and see if it records in the database. Currently, it allows multiple upvotes per user, which we&#8217;ll limit to one per anonymous user to avoid skewing results.</p><p>Next, introduce individual feature request pages and the ability to add comments. Testing these features ensures the user can engage meaningfully with the feedback platform.</p><p><strong>Conclusion</strong></p><p>In a few simple steps, we've managed to build a nearly identical clone of Canny's feature request capability. While this tutorial covers the basics, there&#8217;s plenty more you can add to enhance your feedback platform. This foundation should get you started on creating an efficient tool for collecting user feedback. Happy coding, and thank you for following along!</p>]]></content:encoded></item><item><title><![CDATA[Hello World!]]></title><description><![CDATA[Create a simple Hello World app with Cursor]]></description><link>https://anantgarg.com/p/hello-world-e46</link><guid isPermaLink="false">https://anantgarg.com/p/hello-world-e46</guid><dc:creator><![CDATA[Anant Garg]]></dc:creator><pubDate>Mon, 30 Dec 2024 04:39:27 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/153787859/580375427bce4287f6e7043fccba7fb0.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p></p>]]></content:encoded></item></channel></rss>