<?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[Sreenidhi Sreesha]]></title><description><![CDATA[all things software engineering, AI/ML , fitness]]></description><link>https://sreenidhisreesha.com</link><image><url>https://substackcdn.com/image/fetch/$s_!KccW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e1be7f-a164-4d8d-81b1-5bbf51cd4d28_1280x1280.png</url><title>Sreenidhi Sreesha</title><link>https://sreenidhisreesha.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 08 Apr 2026 07:09:06 GMT</lastBuildDate><atom:link href="https://sreenidhisreesha.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[sreenidhi sreesha]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[sreenidhi@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[sreenidhi@substack.com]]></itunes:email><itunes:name><![CDATA[sreenidhi sreesha]]></itunes:name></itunes:owner><itunes:author><![CDATA[sreenidhi sreesha]]></itunes:author><googleplay:owner><![CDATA[sreenidhi@substack.com]]></googleplay:owner><googleplay:email><![CDATA[sreenidhi@substack.com]]></googleplay:email><googleplay:author><![CDATA[sreenidhi sreesha]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Lessons Learned Building a RAG-Based Application on a Serverless Platform]]></title><description><![CDATA[Building a RAG-Based SaaS App on a Serverless Platform]]></description><link>https://sreenidhisreesha.com/p/lessons-learned-building-a-rag-based</link><guid isPermaLink="false">https://sreenidhisreesha.com/p/lessons-learned-building-a-rag-based</guid><dc:creator><![CDATA[sreenidhi sreesha]]></dc:creator><pubDate>Fri, 18 Apr 2025 23:32:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KccW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e1be7f-a164-4d8d-81b1-5bbf51cd4d28_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Building a RAG-Based SaaS App on a Serverless Platform</strong></p><p>Let me tell you a secret: building a SaaS product is like trying to assembling imaginary furniture without the manual&#8212;exhilarating when a piece finally clicks, rage-inducing when you realize you&#8217;ve been holding the screwdriver backward the whole time. As someone who is obsessed with AI&#8217;s potential, I recently threw myself into building a retrieval-augmented generation (RAG) chatbot. What started as a weekend project turned into a three-month journey of weekend debugging, existential dread over serverless timeouts, and one glorious moment where someone thought it was paying $1.99 to try out my product. Here&#8217;s my story, the roadblocks I hit, and how I overcame them.</p><div><hr></div><h3><strong>Why RAG?</strong></h3><p>RAG combines the power of large language models (LLMs) with domain-specific data retrieval, making it ideal for applications like document Q&amp;A systems, research assistants, or customer support bots. What drew me to RAG was its complex workflow and components:</p><ol><li><p><strong>Chunking</strong>: Breaking documents into digestible sections.</p></li><li><p><strong>Embeddings</strong>: Converting text into numerical representations.</p></li><li><p><strong>Retrieval</strong>: Using cosine similarity to fetch relevant content.</p></li><li><p><strong>Generation</strong>: Synthesizing answers with an LLM.</p></li></ol><p>Each step offered opportunities to optimize for accuracy, speed, or cost&#8212;a playground for tinkerers. My journey began with a <a href="https://youtu.be/ibzlEQmgPPY?si=jlxs_n_sfcZekpFW">Supabase tutorial</a> that promised a &#8220;production-ready&#8221; RAG app. While the tutorial was a goldmine for understanding core concepts, its markdown-only support felt limiting. Real users need <strong>PDFs</strong>&#8212;and that&#8217;s where the real learning began.</p><div><hr></div><h3><strong>The PDF Problem: Parsing Isn&#8217;t as Simple as It Seems</strong></h3><p>The Supabase template handled only markdown but not PDFs.</p><p>Here&#8217;s what I discovered:</p><ul><li><p><strong>Complexity</strong>: PDFs can include images, tables, scanned text, and multi-column layouts. Most TypeScript/JavaScript parsing libraries (like pdf-parse) struggled with non-text elements. There was no one single solution which worked well for all PDFs</p></li><li><p><strong>Edge Cases</strong>: A 20MB SEC report with embedded charts broke my initial setup. A resume with tables and headers? Even worse.</p></li></ul><p><strong>My Workaround</strong>:</p><ol><li><p><strong>Azure Document Intelligence</strong>: Leveraged its API to convert PDFs to markdown.</p></li></ol><p>While this worked for small files, larger documents exposed a critical flaw: <strong>serverless CPU timeouts</strong>.</p><div><hr></div><h3><strong>Serverless Growing Pains: CPU Timeouts &amp; Storage Traps</strong></h3><h3><strong>1. CPU Timeouts: The Hidden Cost of &#8220;Free&#8221; Tiers</strong></h3><p>Serverless platforms like Supabase Edge Functions impose strict <strong>execution and CPU time limits</strong> (e.g., 10&#8211;30 seconds). For RAG workflows, this became a bottleneck:</p><ul><li><p><strong>Problem</strong>: Embedding generation for a 50-page PDF (split into 1,000+ chunks) often timed out.</p></li><li><p><strong>Root Cause</strong>: Local embedding models which ran on edge runtime are CPU-intensive.</p></li></ul><p><strong>Solution</strong>:</p><ul><li><p><strong>Offload to OpenAI</strong>: Replaced local embeddings with text-embedding-3-small via API calls.</p></li></ul><p>This trade-off sacrificed latency but kept the app running.</p><h3><strong>2. Storage Tier Limitation</strong></h3><p>The Supabase tutorial stored files in Supabase Storage (1GB free tier). While convenient, this wasn&#8217;t a serverless limitation&#8212;it was a <strong>platform choice</strong>.</p><ul><li><p><strong>Problem</strong>: 1GB fills fast with user uploads. A single 50MB PDF from 20 users would exhaust the tier.</p></li><li><p><strong>Solution</strong>: Look at other storage providers:</p><ol><li><p><strong>Cloudflare R2</strong>: Stored raw PDFs (10GB free tier, $0.015/GB-month). No egress fee</p></li><li><p><strong>AWS S3</strong>:</p></li></ol></li></ul><div><hr></div><h3><strong>Key Architecture Decisions</strong></h3><p><strong>Component</strong> <strong>Challenge</strong> <strong>Solution</strong> <strong>PDF Parsing</strong> Complex layouts, large files Azure API <strong>Embeddings</strong> CPU timeouts OpenAI API <strong>Storage</strong> Platform tier limits Cloudflare R2 for files, Supabase for DB <strong>User Experience</strong> Processing delays Progress indicators + webhook notifications</p><div><hr></div><h3><strong>Lessons Learned (The Hard Way)</strong></h3><ol><li><p><strong>Start with Managed Services</strong>: APIs like <a href="https://platform.openai.com/docs/assistants">OpenAI Assistants</a> abstract RAG&#8217;s complexity. Build RAG from scratch only if benefits outweigh complexity.</p></li><li><p><strong>Design for Async Early</strong>: Assume large files will break sync workflows. Use queues (e.g., Cloudflare, RabbitMQ) from day one.</p></li><li><p><strong>Test with Real-World Data</strong>: A &#8220;toy&#8221; PDF works until a user uploads a 100-page scanned manual.</p></li><li><p><strong>Serverless &#8800; Free</strong>: Optimize for API costs (e.g., batch embedding requests) and monitor usage.</p></li></ol><div><hr></div><h3><strong>The Launch: From Code to Customer</strong></h3><p>After months of iteration, I launched with a <strong>$1.99/month tier</strong>&#8212;and the first payment notification felt great. Stripe made monetization seamless, but the real win was seeing strangers use (and pay for!) something I&#8217;d built. A tweet about this milestone even went viral, validating the effort.</p><div><hr></div><h3><strong>Final Thoughts: Why Build now?</strong></h3><p>Today&#8217;s tools&#8212;Supabase, OpenAI, Vercel&#8212;democratize SaaS development. You don&#8217;t need a team or VC funding (at least for MVP); you need grit and a willingness to learn.</p><p>Whether you&#8217;re a seasoned engineer or a curious beginner, there&#8217;s never been a better time to ship something.</p>]]></content:encoded></item><item><title><![CDATA[How I Built My Monster Synology NAS 1821+]]></title><description><![CDATA[Setting up a NAS (Network Attached Storage) server at home has been on my to-do list for a while, and I finally took the plunge with the Synology NAS 1821+. In this blog post, I&#8217;ll walk you through my journey of unboxing, upgrading, and setting up this beast of a NAS server. Whether you&#8217;re a NAS newbie or a seasoned pro, I hope you&#8217;ll find some useful tips and insights here.]]></description><link>https://sreenidhisreesha.com/p/how-i-built-my-monster-synology-nas</link><guid isPermaLink="false">https://sreenidhisreesha.com/p/how-i-built-my-monster-synology-nas</guid><dc:creator><![CDATA[sreenidhi sreesha]]></dc:creator><pubDate>Sat, 25 Jan 2025 23:31:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/NcBuNXLWYvU" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Setting up a NAS (Network Attached Storage) server at home has been on my to-do list for a while, and I finally took the plunge with the <strong>Synology NAS 1821+</strong>. In this blog post, I&#8217;ll walk you through my journey of unboxing, upgrading, and setting up this beast of a NAS server. Whether you&#8217;re a NAS newbie or a seasoned pro, I hope you&#8217;ll find some useful tips and insights here.</p><div><hr></div><h2>Why I Decided to Build a NAS Server</h2><p>It all started with a data disaster. I had stored my travel pictures and drone footage on an external hard drive, only to find out I couldn&#8217;t access them when I needed to edit. After a weekend of frantic data recovery, I realized I needed a more stable and reliable solution. That&#8217;s when I decided to invest in a <strong>Synology NAS 1821+</strong>.</p><p>A NAS server not only provides centralized storage but also offers redundancy (thanks to RAID configurations) and the ability to access files from anywhere. Plus, with the right upgrades, it can handle demanding tasks like video editing and backups with ease.</p><div><hr></div><h2>What I Bought for My NAS Build</h2><p>Here&#8217;s a breakdown of the components I used for my Synology NAS 1821+ setup:</p><ol><li><p><strong>Synology NAS 1821+</strong></p><ul><li><p>An 8-bay NAS enclosure with a sleek black matte finish.</p></li><li><p>Highly recommended by friends and tech enthusiasts.</p></li></ul></li><li><p><strong>10GbE Ethernet Card</strong></p><ul><li><p>A Synology E10G18-T1 card to enable blazing-fast 10GbE networking.</p></li></ul></li><li><p><strong>32GB RAM</strong></p><ul><li><p>Upgraded from the default 4GB to 32GB for better performance.</p></li></ul></li><li><p><strong>Hard Drives</strong></p><ul><li><p>Four Seagate IronWolf Pro 16TB NAS drives (with plans to expand later).</p></li></ul></li><li><p><strong>Thunderbolt to 10GbE Adapter</strong></p><ul><li><p>To connect the NAS to my CalDigit TS4 dock for high-speed transfers.</p></li></ul></li></ol><div><hr></div><h2>Unboxing and First Impressions</h2><p>The Synology NAS 1821+ arrived in a compact box, and unboxing it felt like opening a mini microwave. The black matte finish gave it a premium look, and the build quality was solid. The 8-bay design means I can start with four drives and expand as my storage needs grow.</p><div><hr></div><h2>Step-by-Step Setup Process</h2><h3>1. Installing the Hard Drives</h3><p>I started by installing the two Seagate IronWolf Pro 16TB drives. The process was straightforward:</p><ul><li><p>Remove the drive trays.</p></li><li><p>Secure the drives in place.</p></li><li><p>Slide the trays back into the NAS.</p></li></ul><p>I set them up in SHR for redundancy, giving me 44TB of usable storage.</p><h3>2. Adding the 10GbE Ethernet Card</h3><p>Next, I installed the Synology E10G18-T1 10GbE card. This involved:</p><ul><li><p>Opening the NAS enclosure.</p></li><li><p>Inserting the card into the PCIe slot.</p></li><li><p>Securing it with screws.</p></li></ul><h3>3. Upgrading the RAM</h3><p>The NAS came with 4GB of RAM, but I upgraded it to 32GB using Crucial RAM sticks. The process was simple:</p><ul><li><p>Remove the existing RAM.</p></li><li><p>Insert the new sticks.</p></li><li><p>Secure them in place.</p></li></ul><h3>4. Connecting the NAS to My Network</h3><p>I connected the NAS to my CalDigit TS4 dock using a Thunderbolt to 10GbE adapter. However, I ran into some networking issues.</p><div><hr></div><h2>Troubleshooting the 10GbE Networking Issue</h2><p>After setting everything up, I couldn&#8217;t get the 10GbE connection to work. The Ethernet card wasn&#8217;t blinking, and the NAS wasn&#8217;t being detected on the network. Here&#8217;s how I fixed it:</p><ol><li><p><strong>Switched to a Static IP</strong></p><ul><li><p>Instead of using DHCP, I assigned a static IP to the NAS.</p></li><li><p>This involved configuring the subnet mask, gateway, and MTU settings.</p></li></ul></li><li><p><strong>Reconnected the Ethernet Cable</strong></p><ul><li><p>I switched to the built-in Ethernet port temporarily to access the NAS interface.</p></li></ul></li><li><p><strong>Followed Online Instructions</strong></p><ul><li><p>Thanks to a helpful thread by Bob Zelin, I was able to configure the 10GbE card correctly.</p></li></ul></li></ol><p>Once the settings were in place, the 10GbE connection worked flawlessly. I tested the speed by transferring a 5GB file, and it copied in just 4 seconds!</p><div><hr></div><h2>Final Thoughts and Next Steps</h2><p>Setting up the Synology NAS 1821+ was a rewarding experience. It&#8217;s now the central hub for all my data, and the 10GbE connection makes file transfers incredibly fast.</p><p>Here&#8217;s what I plan to do next:</p><ul><li><p>Transfer all my data from external drives to the NAS.</p></li><li><p>Set up Time Machine backups for my Mac.</p></li><li><p>Explore Synology&#8217;s photo and video management tools.</p></li><li><p>Consider adding NVMe SSDs for caching if my workload demands it.</p></li></ul><div><hr></div><h2>Key Takeaways</h2><ol><li><p><strong>Invest in a NAS for Reliable Storage</strong></p><p>A NAS server is a game-changer for data storage and accessibility.</p></li><li><p><strong>Upgrade for Future-Proofing</strong></p><p>Adding a 10GbE card and extra RAM ensures your NAS can handle demanding tasks.</p></li><li><p><strong>Troubleshooting is Part of the Process</strong></p><p>Don&#8217;t be discouraged by initial hiccups&#8212;most issues can be resolved with a bit of research.</p></li><li><p><strong>Start Small, Expand Later</strong></p><p>You don&#8217;t need to fill all the drive bays at once. Start with what you need and expand as your storage requirements grow.</p></li></ol><div><hr></div><p>If you&#8217;re considering building your own NAS, I highly recommend the Synology NAS 1821+. It&#8217;s powerful, expandable, and perfect for both beginners and advanced users. Let me know in the comments if you have any questions or need help with your own NAS setup!</p><div id="youtube2-NcBuNXLWYvU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;NcBuNXLWYvU&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/NcBuNXLWYvU?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><p><em>Thanks for reading, and happy building!</em></p>]]></content:encoded></item><item><title><![CDATA[How I Recovered Data from an Unmountable External Hard Drive: My Experience]]></title><description><![CDATA[How I Recovered Data from an Unmountable External Hard Drive: A Personal Journey]]></description><link>https://sreenidhisreesha.com/p/how-i-recovered-data-from-an-unmountable</link><guid isPermaLink="false">https://sreenidhisreesha.com/p/how-i-recovered-data-from-an-unmountable</guid><dc:creator><![CDATA[sreenidhi sreesha]]></dc:creator><pubDate>Fri, 24 Jan 2025 23:26:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KccW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e1be7f-a164-4d8d-81b1-5bbf51cd4d28_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>How I Recovered Data from an Unmountable External Hard Drive: A Personal Journey</h1><p>If you've ever faced that horrible moment when your external hard drive won't mount on your MacBook, you're not alone. Recently, I found myself in this exact situation with my Western Digital My Passport Ultra. While the drive showed up in Disk Utility, it refused to mount. Here's how I managed to recover my data and what I learned about backup strategies along the way.</p><h2>The Data Recovery Process</h2><h3>Initial Attempts and Tools</h3><p>The data recovery journey requires three things: time, patience, and potentially some money. After researching online, I found two main tools recommended for data recovery:</p><ol><li><p>R-Studio: Highly recommended by the Reddit community, known for its powerful recovery capabilities</p></li><li><p>Disk Drill: Known for its user-friendly interface but with mixed reviews from Reddit users</p></li></ol><h3>My Recovery Journey</h3><h3>First Attempt with R-Studio</h3><p>I started with R-Studio based on Reddit recommendations. The process involved:</p><ul><li><p>Creating a byte-by-byte image of my 2TB drive (took about 6 hours)</p></li><li><p>Attempting to access files, only to find garbled filenames</p></li><li><p>Later discovering my drive was encrypted, requiring a different approach in R-Studio</p></li><li><p>Unfortunately, I had already deleted the image due to storage constraints</p></li></ul><h3>Second Attempt with Disk Drill</h3><p>Despite mixed reviews, I decided to try Disk Drill:</p><ul><li><p>Purchased the software ($60-70)</p></li><li><p>Created another byte-by-byte image (another 6 hours)</p></li><li><p>Used the catalog tree repair feature</p></li><li><p>Successfully mounted the drive and accessed my files</p></li><li><p>Copied all data to an SSD</p></li></ul><h2>The 3-2-1 Backup Rule</h2><p>This experience taught me the importance of proper backup strategies. The 3-2-1 backup rule states:</p><ul><li><p>Keep 3 copies of your data (original plus two backups)</p></li><li><p>Store on 2 different types of media</p></li><li><p>Keep 1 copy offsite (ideally several miles away)</p></li></ul><p>This redundancy ensures that even if one copy fails or a catastrophic event occurs, you'll still have access to your data.</p><h2>Key Takeaways</h2><ol><li><p>Don't panic if your drive won't mount - there are recovery options available</p></li><li><p>Create an image of your drive before attempting any recovery to prevent further damage</p></li><li><p>Consider encryption status when choosing recovery tools</p></li><li><p>Implement a robust backup strategy to prevent future data loss</p></li><li><p>Be prepared to invest time and possibly money in the recovery process</p></li></ol><h2>Next Steps</h2><p>After this experience, I'm building a more robust storage system using a Synology NAS (Network Attached Storage) to prevent future data loss incidents. This will help maintain the 3-2-1 backup rule and provide better data protection.</p><p>Remember, the best data recovery strategy is prevention through proper backup practices. Don't wait until it's too late to protect your valuable data.</p>]]></content:encoded></item><item><title><![CDATA[Solving PDF Image Recognition in OpenAI Assistants ]]></title><description><![CDATA[Solving PDF Image Recognition in OpenAI Assistants]]></description><link>https://sreenidhisreesha.com/p/solving-pdf-image-recognition-in</link><guid isPermaLink="false">https://sreenidhisreesha.com/p/solving-pdf-image-recognition-in</guid><dc:creator><![CDATA[sreenidhi sreesha]]></dc:creator><pubDate>Sun, 19 Jan 2025 23:24:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KccW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e1be7f-a164-4d8d-81b1-5bbf51cd4d28_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Solving PDF Image Recognition in OpenAI Assistants</h1><p>Over this weekend, I tackled and solved a significant limitation in OpenAI Assistants' capabilities when dealing with image-based PDFs, particularly in the context of immigration documents. This technical deep dive shares my journey in implementing a solution that greatly improves document processing capabilities.</p><h2>The Challenge: PDF Recognition Limitations</h2><p>OpenAI Assistants, while powerful, have a notable limitation: they can't actually "read" PDFs containing scanned documents or images. Even though the API allows you to attach PDFs, the Assistant remains blind to their contents. This creates a substantial roadblock when dealing with immigration documents, which are predominantly scanned PDFs.</p><p>This limitation has become more apparent recently. While OpenAI might have had this capability at some point, I've noticed that their current implementation struggles with PDFs containing scanned document images. For an application designed to help users understand their immigration documents, this was a critical problem that needed solving.</p><h2>Building the Solution</h2><h3>Initial Approach: The Messy Start</h3><p>My first attempt at solving this involved creating a custom function with the following structure:</p><pre><code><code>function: {
    name: "get_document_metadata",
    parameters: {
        fileIds: ["array of file IDs"]
    }
}

</code></code></pre><p>This approach had several drawbacks:</p><ul><li><p>The Assistant had to guess which files it needed</p></li><li><p>It required multiple back-and-forth interactions to fetch OCR data</p></li><li><p>The process was inefficient and time-consuming</p></li></ul><h3>The Refined Solution: Streamlined Architecture</h3><p>After iterating on the initial design, I developed a much more elegant solution:</p><ol><li><p><strong>Removed Parameters Entirely</strong>: Instead of making the Assistant guess which files it needed, the new approach is more comprehensive.</p></li><li><p><strong>Streamlined Process Flow</strong>:</p><ul><li><p>Locate the Assistant's vector store</p></li><li><p>Retrieve ALL files in that store</p></li><li><p>Fetch saved OCR data for all documents</p></li><li><p>Provide complete context to the Assistant</p></li></ul></li></ol><h3>Technical Implementation</h3><p>The backend infrastructure works as follows:</p><ol><li><p><strong>OCR Processing</strong>:</p><ul><li><p>Each PDF is processed using Google Cloud Document AI</p></li><li><p>The extracted OCR data is stored in our database</p></li><li><p>This makes the data instantly available when the Assistant needs it</p></li></ul></li><li><p><strong>Data Retrieval</strong>:</p><ul><li><p>No more guessing games about which documents to process</p></li><li><p>All document contents are immediately accessible</p></li><li><p>The system provides comprehensive context to the Assistant</p></li></ul></li></ol><h2>Results and Improvements</h2><p>The new implementation brought several significant improvements:</p><ol><li><p><strong>Complete Document Visibility</strong>: The Assistant can now "see" ALL document contents without any blind spots</p></li><li><p><strong>Enhanced Processing</strong>:</p><ul><li><p>Comprehensive document understanding</p></li><li><p>Improved retrieval capabilities</p></li><li><p>Faster response times</p></li></ul></li><li><p><strong>Better User Experience</strong>:</p><ul><li><p>More accurate document analysis</p></li><li><p>Reduced processing time</p></li><li><p>More reliable results</p></li></ul></li></ol><h2>Development Insights</h2><p>One interesting lesson learned during this project involved tool calling implementation. I spent good amount of time trying to implement tool calling on the client-side before discovering that Vercel AI SDK examples implement it server-side.</p><h2>Conclusion</h2><p>Building AI-powered document processing systems often requires creative problem-solving beyond just using off-the-shelf solutions. <a href="http://visamonkey.com">visamonkey.com</a> demonstrates how combining different technologies - OpenAI Assistants, Google Cloud Document AI - can create a more powerful solution than any single component could provide.</p><p>The decision path from a parameter-heavy, guess-based approach to a streamlined, comprehensive system exemplifies a crucial lesson in software engineering: sometimes complexity isn't the answer. By stepping back and questioning our initial assumptions, we were able to design a simpler yet more powerful solution.</p><p>This implementation not only solves the immediate challenge of processing immigration documents but also lays the groundwork for handling similar document processing challenges across different domains. The architecture can be adapted for any scenario where AI assistants need to understand the contents of image-based PDFs, from legal documents to medical records.</p><p>A key consideration that made this approach particularly effective is the nature of immigration document processing. In this domain, each case typically involves a handful of critical documents - visa applications, passport scans, employment letters, and other supporting materials. This relatively small document set per user means we can comfortably process and store and return all documents upfront without significant performance implications.</p><p>However, it's worth noting that this approach might need modification for domains dealing with larger document volumes. In scenarios where an Assistant needs to process hundreds or thousands of documents, fetching all OCR data might not be the most efficient solution. Such cases might require more sophisticated approaches like document chunking, selective processing, or implementing a caching strategy.</p>]]></content:encoded></item><item><title><![CDATA[2024 Wrapped: Building 7 AI Projects – From Document Search to Immigration Tools]]></title><description><![CDATA[As 2024 comes to an end, I&#8217;m taking a moment to reflect on my year of building seven AI projects&#8212;all while working a full-time job.]]></description><link>https://sreenidhisreesha.com/p/2024-wrapped-building-7-ai-projects</link><guid isPermaLink="false">https://sreenidhisreesha.com/p/2024-wrapped-building-7-ai-projects</guid><dc:creator><![CDATA[sreenidhi sreesha]]></dc:creator><pubDate>Wed, 01 Jan 2025 23:21:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KccW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e1be7f-a164-4d8d-81b1-5bbf51cd4d28_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As 2024 comes to an end, I&#8217;m taking a moment to reflect on my year of building seven AI projects&#8212;all while working a full-time job. This isn&#8217;t one of those stories about hitting big milestones like $1M ARR or going viral on Product Hunt. It&#8217;s more about what happens when you follow your curiosity, work on ideas that excite you, and enjoy the process itself. From tackling server timeout issues in my first RAG (Retrieval-Augmented Generation) project to building a Tesla referral tool over a weekend, and finally making something I really needed for my own immigration journey&#8212;it&#8217;s been a year of growth and learning.</p><p>If you&#8217;re a developer, an indie hacker, or just curious about how to build multiple projects in a year, I&#8217;ll share the lessons I learned, the tech decisions I made, and why scratching your own itch can lead to the most fulfilling products.</p><div><hr></div><h2><strong>Diving into RAG: Building <a href="http://searchmydocs.ai/">searchmydocs.ai</a></strong></h2><p>In October 2023, I became fascinated with RAG (Retrieval-Augmented Generation). While many were already busy creating ChatGPT wrappers, I knew I was late to the game&#8212;but I wanted to dive in and learn anyway.</p><p>Over Thanksgiving, I stumbled upon an incredible two-hour tutorial by Greg (@ggrdson) from Supabase that explained how to build RAG systems step by step. Inspired and excited, I decided to build <a href="http://searchmydocs.ai/">searchmydocs.ai</a> to put those concepts into practice.</p><p>Here&#8217;s the catch&#8212;I wasn&#8217;t very confident in frontend development. I spent a week learning React.js and relied heavily on ChatGPT to help me bridge the gaps. I even tried convincing some frontend friends to partner with me, but no one shared the same excitement for building an indie SaaS. Looking back, it was a blessing in disguise&#8212;it forced me to figure things out on my own and grow in the process.</p><p>The journey wasn&#8217;t without hurdles. At first, the system would fail when processing PDFs larger than a few pages, hitting CPU timeouts during embedding generation. Greg&#8217;s tutorial was fantastic, and I initially wondered why he was giving away so much knowledge for free. But once I started implementing it, I realized there were limitations&#8212;particularly with serverless workers struggling under heavier loads.</p><p>To address these issues, I switched the embedding generation to OpenAI&#8217;s API instead of native serverless workers. This improved the functionality somewhat, but the overall engine still wasn&#8217;t as robust as I wanted.</p><p>Even with its imperfections, this project was a huge learning experience. I set up an LLC, joined Microsoft for Startups, and even got my first payment from a stranger. Building a RAG engine as a first SaaS felt like running a marathon while still learning to walk, but it was an invaluable journey that taught me so much.</p><p><a href="https://x.com/sreeenidhi/status/1743740144912584810">https://x.com/sreeenidhi/status/1743740144912584810</a></p><p><a href="https://x.com/sreeenidhi/status/1752733697781203306">https://x.com/sreeenidhi/status/1752733697781203306</a></p><p><a href="https://x.com/sreeenidhi/status/1755416671781781767">https://x.com/sreeenidhi/status/1755416671781781767</a></p><p><a href="https://x.com/sreeenidhi/status/1758698057552785430">https://x.com/sreeenidhi/status/1758698057552785430</a></p><h2><strong>Exploring AI Images: <a href="http://roomreimagined.com/">roomreimagined.com</a> and <a href="http://imageenhancerai.com/">imageenhancerai.com</a></strong></h2><p>After the highs and lows of working on RAG, I wanted to try something fresh and park searchmydocs for a bit. AI image generation caught my attention, and seeing <a href="http://interiorai.com/">interiorai.com</a> by @levelsio thriving made it clear&#8212;this idea had already been validated. It was the perfect opportunity to dive into the world of image-generation products, so I decided to take a shot at creating an AI-powered interior design tool.</p><p>I had purchased the domain <a href="http://roomreimagined.com/">roomreimagined.com</a> back in October 2023 but decided to park it until I finished shipping <a href="http://searchmydocs.ai/">searchmydocs.ai</a>. Once that MVP was out the door, I was excited to dive into the next project and finally bring <a href="http://roomreimagined.com/">roomreimagined.com</a> to life.</p><p>The timing felt perfect. The best part? I didn&#8217;t have to start from scratch. Someone on Replicate had already developed the core technology I needed, so I could focus on simplifying the user experience and making it accessible. I also decided to skip the usual subscription model and went with a pay-as-you-go credit system, letting users pay only for what they needed. This approach kept things flexible and user-friendly.</p><p>By the time I launched, the market was crowded with similar tools. That didn&#8217;t bother me. Over time, I&#8217;ve learned that if I&#8217;m genuinely excited about building something, it&#8217;s worth doing regardless of how saturated the space is. That excitement and momentum carried over to <a href="http://imageenhancerai.com/">imageenhancerai.com</a>, a broader tool for enhancing AI-generated images.</p><p>Each project built on the experience of the last, helping me ship faster. I was enjoying the process and getting better with each step.</p><div><hr></div><h2><strong>Making Tesla Referrals Easier: <a href="http://teslareferralhub.com/">teslareferralhub.com</a></strong></h2><p>Next up was <a href="http://teslareferralhub.com/">teslareferralhub.com</a>. Tesla&#8217;s referral program is amazing, but there&#8217;s a catch&#8212;you only really earn rewards if you have a strong social media following. I wanted to create something where anyone could participate, even if they didn&#8217;t have a big online presence.</p><p>So, I built a platform where users could submit their referral links for $20. These links were added to a queue and displayed in a round-robin format, ensuring everyone got a fair shot. By this time, Claude had become incredibly good, making it super fast to put together a UI. I managed to build this project in just a weekend.</p><p>Shaan Puri recently mentioned something on the MFM podcast about Mike Posner that really resonated with me. After years of chasing his past successes, Mike realized the key is to do what you think is cool. Sometimes, a large portion of the population agrees, and it takes off in ways you couldn&#8217;t predict. For me, this project felt exactly like that&#8212;I thought building a referral-sharing platform was cool, so I went for it. I had a blast putting it together, and the process itself was incredibly rewarding.</p><div><hr></div><h2>Expanding the Concept: <a href="http://referralsearchengine.com/">referralsearchengine.com</a></h2><p>After <a href="http://teslareferralhub.com">teslareferralhub.com</a>, I wanted to take the concept to the next level&#8212;a generic platform for sharing referral links, not just for Tesla, but for any product. In the SaaS world, it&#8217;s common advice to start with a niche, focus on making it work, and then expand. Think about how Amazon started with books before becoming the everything store. Even though <a href="http://teslareferralhub.com">teslareferralhub.com</a> wasn&#8217;t a massive success (though I did get two referral bonuses!), I believed in the idea enough to build a broader version of it.</p><p>That&#8217;s how <a href="http://referralsearchengine.com/">referralsearchengine.com</a> was born. This time, I built it on Cloudflare&#8217;s stack, mostly because I liked their free tier better. The platform allowed anyone to share one referral link for free, no matter the product. If they needed more links, they could buy additional slots.</p><p>This project gave me some great experience with Cloudflare Workers and made me appreciate their power and flexibility. By this point, I&#8217;d become more efficient with shipping products, and each project was helping me get faster at putting ideas into action.</p><p>However, one key thing I realized with teslareferralhub and referralsearchengine is that these kinds of platforms live and die by distribution. And here&#8217;s the thing&#8212;I don&#8217;t find joy in the grind of improving distribution through SEO, building backlinks, or manually promoting links across different platforms. I love building products, but the marketing side just doesn&#8217;t excite me as much.</p><div><hr></div><h2><strong>Returning to Document Analysis: <a href="http://secanalytica.com/">secanalytica.com</a></strong></h2><p>My next product was <a href="http://secanalytica.com/">secanalytica.com</a>, a tool that leverages OpenAI&#8217;s Assistants framework. By this point, the costs of using the Assistants API had come down to manageable levels, making it feasible to build a scalable product. Most of my time on secanalytica was spent creating a robust wrapper around the framework&#8212;something versatile enough to be applied across different domains.</p><p>For the initial use case, I chose SEC filings. The idea came after seeing tweets from @virattt, who was working on financial datasets. The domain seemed rich with possibilities, and I knew there was enough value to justify focusing on this area.</p><p>With secanalytica, users can upload SEC files, which are then analyzed to provide actionable insights. The wrapper I built has the potential to expand into other domains in the future, but for now, SEC filings serve as a great starting point.</p><p>The next logical step is to implement report generation using RAG (Retrieval-Augmented Generation). However, I&#8217;ve temporarily paused this feature because another project caught my attention and felt too exciting to delay. I plan to circle back to secanalytica soon and pick up where I left off.</p><div><hr></div><h2><strong>Building for a Personal Need: <a href="http://visamonkey.com/">visamonkey.com</a></strong></h2><p>The next project on my journey was <a href="http://visamonkey.com/">visamonkey.com</a>, a document management tool designed for immigrants and non-immigrants alike. It&#8217;s a platform for managing visas, passports, H1B documents, and more, with features like intelligent search, timeline tracking, deadline reminders, chat with documents, and application tracking.</p><p>This project is still a work in progress, but it holds a special place in my journey. I built it because I needed a solution for myself and for others who face the same struggles. As someone who has dealt with the challenges of visa documentation, I know how overwhelming it can be to stay on top of deadlines, keep everything organized, and avoid mistakes that could have serious consequences.</p><p>Visamonkey was born out of that experience. Building something to address my own problems brought a lot of clarity to the process&#8212;every feature felt obvious because I understood the pain points deeply. While there&#8217;s still a lot to do, I&#8217;m excited about the potential of this platform to make life easier for people navigating the complexities of immigration and document management.</p><div><hr></div><h2><strong>Launching the Future: <a href="http://raglauncher.com/">raglauncher.com</a> and <a href="http://thirdbrain.io/">thirdbrain.io</a></strong></h2><p>With the RAG wrapper now in place, my next project is <a href="http://raglauncher.com/">raglauncher.com</a>&#8212;a boilerplate for launching RAG applications quickly using OpenAI&#8217;s Assistants framework. The goal is to simplify the process of creating robust RAG-based tools, enabling developers to focus on building solutions rather than reinventing the wheel.</p><p>Raglauncher will serve as the backbone for multiple projects, including <a href="http://secanalytica.com/">secanalytica.com</a>, <a href="http://visamonkey.com/">visamonkey.com</a>, and <a href="http://thirdbrain.io/">thirdbrain.io</a>. Each of these projects showcases the flexibility of the wrapper applied to different domains, from SEC filings to immigration management.</p><h3><strong>Reimagining SearchMyDocs as ThirdBrain</strong></h3><p>As part of this journey, <a href="http://searchmydocs.ai/">searchmydocs.ai</a> will be rebranded as <a href="http://thirdbrain.io/">thirdbrain.io</a>. The vision for ThirdBrain is ambitious&#8212;it aims to evolve into a platform that learns across various dimensions of a user&#8217;s data and helps provide clarity of thought. While the specifics are still abstract, the goal is to create a tool that goes beyond traditional document search, offering deeper insights and understanding.</p><h3><strong>A Unified Vision</strong></h3><p>With <a href="http://raglauncher.com">raglauncher.com</a>, the idea is to bring everything I&#8217;ve learned into a cohesive system. It&#8217;s the culmination of experiences from building specialized tools for different domains and figuring out what works best. Each project, whether secanalytica, visamonkey, or thirdbrain, will benefit from this shared foundation, ensuring faster iterations and consistent improvements.</p><p>I&#8217;m excited to see where this next step takes me and how it can empower others to build their own RAG-based applications efficiently.</p>]]></content:encoded></item><item><title><![CDATA[Building Referral Search Engine: My Journey from TeslaReferralHub to ReferralSearchEngine]]></title><description><![CDATA[Building Referral Search Engine: My Journey from TeslaReferralHub to ReferralSearchEngine]]></description><link>https://sreenidhisreesha.com/p/building-referral-search-engine-my</link><guid isPermaLink="false">https://sreenidhisreesha.com/p/building-referral-search-engine-my</guid><dc:creator><![CDATA[sreenidhi sreesha]]></dc:creator><pubDate>Sun, 13 Oct 2024 23:16:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QaPJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fb4c56f-a29b-4a8f-b3e0-5b20e8118809_1271x416.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QaPJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fb4c56f-a29b-4a8f-b3e0-5b20e8118809_1271x416.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QaPJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fb4c56f-a29b-4a8f-b3e0-5b20e8118809_1271x416.png 424w, https://substackcdn.com/image/fetch/$s_!QaPJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fb4c56f-a29b-4a8f-b3e0-5b20e8118809_1271x416.png 848w, https://substackcdn.com/image/fetch/$s_!QaPJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fb4c56f-a29b-4a8f-b3e0-5b20e8118809_1271x416.png 1272w, https://substackcdn.com/image/fetch/$s_!QaPJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fb4c56f-a29b-4a8f-b3e0-5b20e8118809_1271x416.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QaPJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fb4c56f-a29b-4a8f-b3e0-5b20e8118809_1271x416.png" width="1271" height="416" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2fb4c56f-a29b-4a8f-b3e0-5b20e8118809_1271x416.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:416,&quot;width&quot;:1271,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:103678,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://sreenidhi.substack.com/i/167481254?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fb4c56f-a29b-4a8f-b3e0-5b20e8118809_1271x416.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QaPJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fb4c56f-a29b-4a8f-b3e0-5b20e8118809_1271x416.png 424w, https://substackcdn.com/image/fetch/$s_!QaPJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fb4c56f-a29b-4a8f-b3e0-5b20e8118809_1271x416.png 848w, https://substackcdn.com/image/fetch/$s_!QaPJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fb4c56f-a29b-4a8f-b3e0-5b20e8118809_1271x416.png 1272w, https://substackcdn.com/image/fetch/$s_!QaPJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fb4c56f-a29b-4a8f-b3e0-5b20e8118809_1271x416.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><br>Building Referral Search Engine: My Journey from TeslaReferralHub to ReferralSearchEngine</strong></p><p>I recently launched a SaaS side project called <em>Referral Search Engine</em>, and this post will walk you through everything about it&#8212;why I built it, the tools I used, the decisions I made, and the new technologies I tried. If you're interested in building SaaS products using AI tools, this might be the perfect read for you.</p><p>Some of you might remember one of my earlier projects, <em>Tesla Referral Hub</em>. Tesla Referral Hub allowed users to share their Tesla referral links in a fair, rotating system. Each time someone viewed a link, it would refresh and display a different user's link. I built this system because I lacked the social media influence to promote my referral links, and I realized others like me could benefit from a more equitable way to share referral opportunities.</p><h3>Expanding from a Niche Product to Something Bigger</h3><p>Like many successful products, I started by focusing on a specific niche. <em>Tesla Referral Hub</em> allowed me to experiment with the referral link model, and while the results were modest&#8212;two referrals earning me about $2,000 worth of Tesla credits&#8212;it sparked the idea of a more general solution. That&#8217;s when I decided to build <em>Referral Search Engine</em>.</p><h3>What is Referral Search Engine and What Problem Does It Solve?</h3><p>Referral Search Engine helps users find referral links for products they want to buy without needing a friend who has purchased the product. For example, if you&#8217;re interested in buying a Peloton but don&#8217;t know anyone who owns one, you can use <em>Referral Search Engine</em> to find a referral link, benefiting both you and the person who shared the link.</p><p>The concept is simple: users who have referral codes share them on the platform, and others can search for and use them. It&#8217;s a win-win for everyone&#8212;the user sharing the referral benefits, the buyer benefits from the discount, and the company gets more customers. I haven&#8217;t come across many similar products, probably because it isn&#8217;t easy to monetize. But I wanted to build the solution and see where it goes.</p><h3>How Referral Search Engine Works</h3><p>Using <em>Referral Search Engine</em> is straightforward. Users can search for a product, and the platform will show available referral links. For example, you can search for a Tesla referral link, copy it, and apply it directly on Tesla&#8217;s site to get benefits like $500 off your purchase.</p><p>Adding referral links is easy as well. After logging in with Google or email, users can submit a URL, product name, company name, and description. The referral link goes through an admin approval process to ensure its legitimacy before it appears in search results.</p><h3>Tools and Technologies I Used</h3><p>Building Referral Search Engine gave me a chance to experiment with several exciting tools. Here's a breakdown of the tech stack I used:</p><h3>1. <strong>Vercel</strong></h3><p>Vercel is my go-to tool for handling front-end deployment, particularly with Next.js. It simplifies the process by automatically deploying new changes each time you push a commit to Git. Vercel&#8217;s rollback feature ensures that if a deployment fails, the last successful version stays live. I use Vercel for all my side projects because it makes front-end development and deployment incredibly easy.</p><h3>2. <strong>Supabase</strong></h3><p>Supabase offers an all-in-one backend solution with authentication and managed PostgreSQL databases. I use it to manage user authentication and handle database operations for all my projects. Their generous free tier and easy-to-use API make it a great choice for indie developers.</p><h3>3. <strong>Cloudflare D1</strong></h3><p>I chose Cloudflare D1 for the main database. One key reason was that I wanted to try out Cloudflare&#8217;s stack, and their free tier was very attractive, especially for read-heavy applications like <em>Referral Search Engine</em>. With D1, the SQLite databases are placed on the edge, allowing faster data access for users.</p><h3>4. <strong>Vercel V0</strong></h3><p>Vercel V0 is an AI-powered tool that helps generate user interfaces quickly. As someone more comfortable with backend development, Vercel V0 has been a game-changer for me in building polished front-end designs without spending too much time on it. It allows you to describe what you want, and it generates a UI based on those requirements.</p><h3>Database Schema</h3><p>The database schema for <em>Referral Search Engine</em> is designed to handle various key functions. There are tables for users, searches, referral links, and companies. For example:</p><ul><li><p><strong>Users table</strong> tracks user data, including tiers (free or paid), and how many referral links they are allowed.</p></li><li><p><strong>Referral links table</strong> stores the link, user ID, and product ID, as well as metrics like views and clicks to ensure fair rotation of links.</p></li><li><p><strong>Searches table</strong> tracks what users are searching for, which could potentially be useful for businesses interested in advertising on the platform.</p></li></ul><h3>Monetization and Marketing</h3><p>The primary challenge with <em>Referral Search Engine</em> isn't the technical implementation&#8212;it&#8217;s the marketing. For a platform like this to succeed, it needs strong SEO and distribution efforts to drive traffic. Some monetization strategies I&#8217;m considering include partnering with companies to provide exclusive referral links or selling advertising spots to businesses looking to reach potential customers.</p><h3>Conclusion</h3><p>In the end, <em>Referral Search Engine</em> took about three or four days to develop. But the hard part lies ahead&#8212;gaining traction, marketing the platform, and exploring monetization opportunities. If you&#8217;re interested in SaaS projects, building with AI, or have questions about any part of this journey, feel free to ask. And if you enjoyed this post and want to learn more about building side projects, drop a comment!</p>]]></content:encoded></item><item><title><![CDATA[Overcoming Storage Limits: Migrating from Supabase storage to Cloudflare R2]]></title><description><![CDATA[As developers and indiehackers, we often start our projects with free-tier services that offer generous limits.]]></description><link>https://sreenidhisreesha.com/p/overcoming-storage-limits-migrating</link><guid isPermaLink="false">https://sreenidhisreesha.com/p/overcoming-storage-limits-migrating</guid><dc:creator><![CDATA[sreenidhi sreesha]]></dc:creator><pubDate>Sat, 10 Aug 2024 23:11:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tLoc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c5653f-21ec-4eaf-a5fd-3439fc5e7783_843x330.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tLoc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c5653f-21ec-4eaf-a5fd-3439fc5e7783_843x330.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tLoc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c5653f-21ec-4eaf-a5fd-3439fc5e7783_843x330.png 424w, https://substackcdn.com/image/fetch/$s_!tLoc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c5653f-21ec-4eaf-a5fd-3439fc5e7783_843x330.png 848w, https://substackcdn.com/image/fetch/$s_!tLoc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c5653f-21ec-4eaf-a5fd-3439fc5e7783_843x330.png 1272w, https://substackcdn.com/image/fetch/$s_!tLoc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c5653f-21ec-4eaf-a5fd-3439fc5e7783_843x330.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tLoc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c5653f-21ec-4eaf-a5fd-3439fc5e7783_843x330.png" width="843" height="330" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85c5653f-21ec-4eaf-a5fd-3439fc5e7783_843x330.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:330,&quot;width&quot;:843,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21920,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://sreenidhi.substack.com/i/167480752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c5653f-21ec-4eaf-a5fd-3439fc5e7783_843x330.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tLoc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c5653f-21ec-4eaf-a5fd-3439fc5e7783_843x330.png 424w, https://substackcdn.com/image/fetch/$s_!tLoc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c5653f-21ec-4eaf-a5fd-3439fc5e7783_843x330.png 848w, https://substackcdn.com/image/fetch/$s_!tLoc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c5653f-21ec-4eaf-a5fd-3439fc5e7783_843x330.png 1272w, https://substackcdn.com/image/fetch/$s_!tLoc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85c5653f-21ec-4eaf-a5fd-3439fc5e7783_843x330.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As developers and indiehackers, we often start our projects with free-tier services that offer generous limits. However, as our projects grow, we may find ourselves bumping up against these limits. Recently, I faced this exact situation with one of my Supabase projects. In this blog post, I'll share my experience of migrating from Supabase to Cloudflare R2 to overcome storage limitations, and provide some insights that might help you in similar situations.</p><h2>The Challenge: Outgrowing Supabase's Free Tier</h2><p>One of my indie hacking projects was happily running on Supabase's free tier, which offers 1GB of free storage. However, as the project evolved, I found myself using 2.9GB of storage - nearly three times the free limit!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sreenidhisreesha.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Sreenidhi Sreesha! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>The Solution: Cloudflare R2</h2><p>After researching various options, I decided to migrate my data to Cloudflare R2. Here's why:</p><ol><li><p><strong>Generous Free Tier</strong>: Cloudflare R2 offers a whopping 10GB per month on their free plan.</p></li><li><p><strong>Free Egress</strong>: Unlike many cloud storage providers, Cloudflare doesn't charge for data transfer out of their network.</p></li><li><p><strong>Ample Request Limits</strong>: The free tier includes 1 million Class A operations and 10 million Class B operations per month.</p></li><li><p><strong>Cost-Effective Scaling</strong>: Even if my usage grows beyond the free tier, Cloudflare R2 remains one of the most cost-effective options available.</p></li></ol><h2>The Migration Process</h2><p>To migrate my data, I used a Python script leveraging the boto3 library. Here's a high-level overview of the process:</p><ol><li><p><strong>Supabase to Local</strong>: First, I downloaded all the files from Supabase to my local machine.</p></li><li><p><strong>Local Processing</strong>: I performed some necessary computations on the data locally.</p></li><li><p><strong>Local to Cloudflare R2</strong>: Finally, I uploaded the processed data to Cloudflare R2.</p></li></ol><p>You might wonder why I didn't migrate directly from Supabase to Cloudflare R2. The reason is that I needed to perform some local computations on the data anyway, so having it on my local machine was a necessary step.<br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2tgg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d20c368-2154-4c83-8968-a22dc96dea65_1368x601.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2tgg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d20c368-2154-4c83-8968-a22dc96dea65_1368x601.png 424w, https://substackcdn.com/image/fetch/$s_!2tgg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d20c368-2154-4c83-8968-a22dc96dea65_1368x601.png 848w, https://substackcdn.com/image/fetch/$s_!2tgg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d20c368-2154-4c83-8968-a22dc96dea65_1368x601.png 1272w, https://substackcdn.com/image/fetch/$s_!2tgg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d20c368-2154-4c83-8968-a22dc96dea65_1368x601.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2tgg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d20c368-2154-4c83-8968-a22dc96dea65_1368x601.png" width="1368" height="601" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d20c368-2154-4c83-8968-a22dc96dea65_1368x601.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:601,&quot;width&quot;:1368,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:83269,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://sreenidhi.substack.com/i/167480752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d20c368-2154-4c83-8968-a22dc96dea65_1368x601.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2tgg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d20c368-2154-4c83-8968-a22dc96dea65_1368x601.png 424w, https://substackcdn.com/image/fetch/$s_!2tgg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d20c368-2154-4c83-8968-a22dc96dea65_1368x601.png 848w, https://substackcdn.com/image/fetch/$s_!2tgg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d20c368-2154-4c83-8968-a22dc96dea65_1368x601.png 1272w, https://substackcdn.com/image/fetch/$s_!2tgg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d20c368-2154-4c83-8968-a22dc96dea65_1368x601.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><br>The Migration Script</h2><p>To automate this process, I used Claude (an AI assistant) to help me write a Python script using boto3. This script handled the migration from Supabase to my local machine and then to Cloudflare R2.</p><p>Here's a simplified version of what the script might look like:</p><pre><code>import boto3
from supabase import create_client, Client

# Supabase setup
supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)

# Cloudflare R2 setup
s3 = boto3.client('s3',
    endpoint_url = 'https://&lt;accountid&gt;.r2.cloudflarestorage.com',
    aws_access_key_id = '&lt;access_key_id&gt;',
    aws_secret_access_key = '&lt;access_key_secret&gt;'
)

# Download from Supabase
def download_from_supabase(bucket_name, file_name, local_path):
    with open(local_path, 'wb+') as f:
        res = supabase.storage.from_(bucket_name).download(file_name)
        f.write(res)

# Upload to Cloudflare R2
def upload_to_r2(local_path, bucket_name, file_name):
    s3.upload_file(local_path, bucket_name, file_name)

# Main migration process
def migrate_file(supabase_bucket, r2_bucket, file_name):
    local_path = f"./temp/{file_name}"
    download_from_supabase(supabase_bucket, file_name, local_path)
    # Perform any necessary local computations here
    upload_to_r2(local_path, r2_bucket, file_name)

# Run the migration for each file
files_to_migrate = [...]  # List of files to migrate
for file in files_to_migrate:
    migrate_file('supabase-bucket-name', 'r2-bucket-name', file)</code></pre><p><br>This script provides a basic framework for the migration process. You'd need to customize it with your specific bucket names, file lists, and any local processing you need to perform.</p><h2>Conclusion</h2><p>Migrating from Supabase to Cloudflare R2 allowed me to overcome the storage limitations I was facing, while keeping costs low and maintaining high performance. If you're in a similar situation, consider exploring Cloudflare R2 as a potential solution.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sreenidhisreesha.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Sreenidhi Sreesha! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[From Idea to Reality: What Led to the Creation of TeslaReferralHub.com]]></title><description><![CDATA[In the realm of creativity, ideas often come to us like persistent whispers, gently nudging us towards action.]]></description><link>https://sreenidhisreesha.com/p/from-idea-to-reality-what-led-to</link><guid isPermaLink="false">https://sreenidhisreesha.com/p/from-idea-to-reality-what-led-to</guid><dc:creator><![CDATA[sreenidhi sreesha]]></dc:creator><pubDate>Thu, 04 Jul 2024 18:19:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XjEV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c5cf6d9-f76e-4954-a6ad-ac9b11f5faae_1184x370.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XjEV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c5cf6d9-f76e-4954-a6ad-ac9b11f5faae_1184x370.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XjEV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c5cf6d9-f76e-4954-a6ad-ac9b11f5faae_1184x370.png 424w, https://substackcdn.com/image/fetch/$s_!XjEV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c5cf6d9-f76e-4954-a6ad-ac9b11f5faae_1184x370.png 848w, https://substackcdn.com/image/fetch/$s_!XjEV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c5cf6d9-f76e-4954-a6ad-ac9b11f5faae_1184x370.png 1272w, https://substackcdn.com/image/fetch/$s_!XjEV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c5cf6d9-f76e-4954-a6ad-ac9b11f5faae_1184x370.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XjEV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c5cf6d9-f76e-4954-a6ad-ac9b11f5faae_1184x370.png" width="1184" height="370" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c5cf6d9-f76e-4954-a6ad-ac9b11f5faae_1184x370.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:370,&quot;width&quot;:1184,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:23595,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XjEV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c5cf6d9-f76e-4954-a6ad-ac9b11f5faae_1184x370.png 424w, https://substackcdn.com/image/fetch/$s_!XjEV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c5cf6d9-f76e-4954-a6ad-ac9b11f5faae_1184x370.png 848w, https://substackcdn.com/image/fetch/$s_!XjEV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c5cf6d9-f76e-4954-a6ad-ac9b11f5faae_1184x370.png 1272w, https://substackcdn.com/image/fetch/$s_!XjEV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c5cf6d9-f76e-4954-a6ad-ac9b11f5faae_1184x370.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In the realm of creativity, ideas often come to us like persistent whispers, gently nudging us towards action. For me, that whisper was <a href="https://teslareferralhub.com">TeslaReferralHub</a>.</p><h2>The Seed of an Idea</h2><p>I'm a huge fan of Tesla, and I was excited at the idea of getting some cool products from its referral program <strong>for free</strong>. Three months of free FSD or a free acceleration boost sounds great to me. While driving, I haven't felt a pressing need for speed, but I still think it would be cool to experience acceleration boost once in a while.</p><p>The only way one could make use of the referral program is: a) You are a social media influencer with a large following b) You have friends who want to buy a Tesla</p><p>I don't qualify for either of those. Everyone in my network has already heard of Tesla, and if they want to own one, they just go to the website and buy one. They're not sitting around waiting for someone to convince them. And I'm not a social media influencer with a huge following.</p><p>My brain solved this problem subconsciously. What if I could bring together all Tesla owners who want to share their referral links in one place and give them more exposure, but keep it fair? This led to a system design session with ChatGPT, and I had rough blueprints for <a href="http://teslareferralhub.com/">TeslaReferralHub.com</a>.</p><p>Once the seed was planted in my brain, for weeks, the concept of TeslaReferralHub had been haunting me, resurfacing in my thoughts every few days. I was also reading "The Creative Act" at the same time. (I know what you're going to read next might sound a bit woo-woo.) I began to understand that this recurring idea wasn't just a random thought&#8212;it was the universe presenting me with an opportunity, a source of creativity waiting to be tapped.</p><p>The book taught me a valuable lesson: ideas seek expression through willing vessels. If I chose not to act, this concept would eventually find its way into the world through someone else. This realization instilled in me a sense of urgency and purpose.</p><h2>From Concept to Creation</h2><p>Armed with this newfound perspective, I set out to bring TeslaReferralHub to life. The development process was surprisingly fast, with the help of Claude Sonnet. In a short time, I had a functioning website with a minimum feature set.</p><p>The success of TeslaReferralHub opened my eyes to broader possibilities. Could this concept be expanded into a more general platform? This thought led to the inception of ReferralList, a project that aims to apply the same principles to a wider array of referral programs. This is my next project.</p><h2>Lessons in Creativity</h2><p>This journey has taught me several valuable lessons about creativity:</p><ol><li><p>Pay attention to recurring ideas&#8212;they might be the universe trying to tell you something.</p></li><li><p>Act on your ideas; if you don't, someone else might.</p></li><li><p>Bringing one idea to life can create space for others to flourish.</p></li><li><p>Embrace tools and technologies that can help you realize your vision more efficiently.</p></li></ol><p>As I continue to explore the intersection of technology and creativity, I'm excited to see where these lessons will lead me next.</p>]]></content:encoded></item><item><title><![CDATA[Moving to Hawaii, H4V4Training, Duolingo's Ted Talk ]]></title><description><![CDATA[Moving to Hawaii from San Francisco]]></description><link>https://sreenidhisreesha.com/p/moving-to-hawaii-h4v4training-duolingos</link><guid isPermaLink="false">https://sreenidhisreesha.com/p/moving-to-hawaii-h4v4training-duolingos</guid><dc:creator><![CDATA[sreenidhi sreesha]]></dc:creator><pubDate>Mon, 13 Nov 2023 16:00:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/P6FORpg0KVo" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>Moving to Hawaii from San Francisco</strong></h3><p>I&#8217;m moving to Honolulu from San Francisco.</p><p>Some of my stuff is already in a container on a ship on the way to Honolulu.</p><p>I&#8217;ve visited Hawaii 3 times and each time i have fallen in love with the weather and the place.</p><p>With the remote job, this is my opportunity to try out island living.</p><p>I will be waking up early and working PST hours.</p><p>San Francisco is great but its too cold for me. 2022 Winter was brutal.</p><p>Its getting dark at 5pm these days and I&#8217;m glad ill be spending this winter in Hawaii.</p><p>This week will be stressful with packing and i haven&#8217;t seen the gym in the last month.</p><p></p><div><hr></div><h3><strong>Fitness</strong></h3><p>According to apple watch ultra, my VO2 max is 34.5</p><p>In Sep 2022, It was 42.2. Over a span of one year, it has dropped significantly.</p><p>After listening to Peter Attia&#8217;s Outlive book, my goal is to bring it back and push it above 50</p><p>I did my first peloton bike workout this week which was aimed at improving VO2 max.</p><p>4 rounds of 4min intervals of all out sprint and 4 mins of rest.</p><p>I&#8217;m curious to find out how long it will take me to get back to 42. I will update my progress here.</p><p><strong>Deriving fitness insights from Iphone camera and blood flow</strong></p><p>The method of finding vo2max score sparked the question of how accurate is apple watch ultra in measuring VO2 max. A few hours of searching online led to finding <strong>HRV4Training</strong> app which is supposedly more accurate. This uses a new technology where it uses your iphone camera to measure blood flow and derives fitness trends from this information.</p><p>I&#8217;m using this app and will follow up on how it differs once i add sufficient amount of data</p><p></p><div><hr></div><p></p><h3><a href="https://www.youtube.com/watch?v=P6FORpg0KVo">Youtube</a></h3><p>This video popped up on my youtube feed. I watched it during my weekly zone 2 training.</p><p>They are hundreds of things that are competing for your attention and most of it helps very little in picking up new skill or learning what matters. So of course i am interested in ways i can improve my learning. This title definitely caught my attention.</p><p>One of the cool things I learnt is how Duolingo is transferring wealth indirectly from people in rich countries to pay for people in poorer countries with freemium and premium model. when a well to do person in developed country pays duolingo to remove ads, they are effectively paying for education for someone in developing countries.</p><div id="youtube2-P6FORpg0KVo" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;P6FORpg0KVo&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/P6FORpg0KVo?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div>]]></content:encoded></item><item><title><![CDATA[Things that caught my attention this week.]]></title><description><![CDATA[Things that caught my attention this week]]></description><link>https://sreenidhisreesha.com/p/things-that-caught-my-attention-this</link><guid isPermaLink="false">https://sreenidhisreesha.com/p/things-that-caught-my-attention-this</guid><dc:creator><![CDATA[sreenidhi sreesha]]></dc:creator><pubDate>Sun, 29 Oct 2023 13:00:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/zulGMYg0v6U" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Things that caught my attention this week</h1><p>Hello friends,</p><p>In this newsletter, every week I share things that catch my attention and what I learnt that week.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sreenidhisreesha.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Sreenidhi&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Topics usually range from software engineering, AI, ML to fitness.</p><h3><strong>Getting started With Data Science/ AI/ ML</strong> :</h3><p>This is my favorite video from Dave Ebbelar for setting up VS code for DataScience. I have started playing around numpy, scikit-learn and trying to pick up new skills.My focus is develop ML/AI skills and i found myself going back to this video for setting up environmentin my local machine as well as work ones. This worked like a charm!</p><div id="youtube2-zulGMYg0v6U" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;zulGMYg0v6U&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/zulGMYg0v6U?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3><strong>Supabase for SASS backend</strong></h3><p>I believe software is the biggest high leverage product to start a business. I came across Supabase from an indie project on twitter which was making 3k in MRR. It was basically a Chatgpt wrapper which takes text as input and generates MCQ as output which is a neat idea. I have worked on some projects years ago on google app engine which is platform as a service. Here, my goal is to learn to build a SASS product so when i have a really good idea, I&#8217;m not limited by what i can build. Its been a while since i worked on frontend so its going to be a steep learning curve</p><h3><strong>Fitness</strong></h3><p>I&#8217;m currently listening to Outlive by Peter Attia. I highly recommend this book to all my friends and family.</p><p><a href="https://www.amazon.com/Outlive-Longevity-Peter-Attia-MD/dp/0593236599">https://www.amazon.com/Outlive-Longevity-Peter-Attia-MD/dp/0593236599</a></p><p>I&#8217;ve been a long time follower of Peter Attia and have listened to his numerous podcasts. This book helped solidify my understanding on what i should be focussing to improve my quality of life while aiming for longevity. Peter defines 4 bogeyman of death (Cancer, Neuro-Degenerative Diseases, Heart Attacks, Metabolic Dysfunction). I have a much better understanding of these topics than before.</p><p>Peter has done an excellent job in delivering this content by making it easy to digest without making it overwhelming. I&#8217;m only half way through this book and i cannot wait to finish this.</p><p><strong>Productivity Tip</strong>:</p><p>Listen to an audio book while walking your dog every morning.</p><p></p><h3>Favorite Podcast of the week</h3><p>I highly recommend listening to Lex Fridman podcast with Jared Kushner.  I was impressed with how articulate and eloquent Jared was and improved my understanding of what goes into foreign policy work.</p><div id="youtube2-co_MeKSnyAo" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;co_MeKSnyAo&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/co_MeKSnyAo?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>  </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://sreenidhisreesha.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Sreenidhi&#8217;s Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Coming soon]]></title><description><![CDATA[This is Sreenidhi Sreesha, a newsletter about tbd.]]></description><link>https://sreenidhisreesha.com/p/coming-soon</link><guid isPermaLink="false">https://sreenidhisreesha.com/p/coming-soon</guid><dc:creator><![CDATA[sreenidhi sreesha]]></dc:creator><pubDate>Fri, 21 Jan 2022 19:50:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KccW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e1be7f-a164-4d8d-81b1-5bbf51cd4d28_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>This is Sreenidhi Sreesha</strong>, a newsletter about tbd.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://sreenidhisreesha.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://sreenidhisreesha.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item></channel></rss>