<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sreegeethesh</title>
    <description>The latest articles on DEV Community by Sreegeethesh (@sreegeetheshdhananjayan).</description>
    <link>https://dev.to/sreegeetheshdhananjayan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4060232%2F1d454583-ac2b-4fba-baa2-8a7066e3d411.png</url>
      <title>DEV Community: Sreegeethesh</title>
      <link>https://dev.to/sreegeetheshdhananjayan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sreegeetheshdhananjayan"/>
    <language>en</language>
    <item>
      <title>Your SaaS Isn't Production-Ready Just Because `npm run build` Works</title>
      <dc:creator>Sreegeethesh</dc:creator>
      <pubDate>Wed, 02 Sep 2026 11:48:48 +0000</pubDate>
      <link>https://dev.to/sreegeetheshdhananjayan/your-saas-isnt-production-ready-just-because-npm-run-build-works-1i43</link>
      <guid>https://dev.to/sreegeetheshdhananjayan/your-saas-isnt-production-ready-just-because-npm-run-build-works-1i43</guid>
      <description>&lt;p&gt;A few days ago, I was going through one of my SaaS applications before shipping it.&lt;/p&gt;

&lt;p&gt;The product worked.&lt;/p&gt;

&lt;p&gt;The UI looked good.&lt;/p&gt;

&lt;p&gt;The API worked.&lt;/p&gt;

&lt;p&gt;Authentication worked.&lt;/p&gt;

&lt;p&gt;And technically, I could have deployed it and called it done.&lt;/p&gt;

&lt;p&gt;But opening DevTools, viewing the page source, checking how Google would understand the site, and looking at the production bundle told a different story.&lt;/p&gt;

&lt;p&gt;A working application is not necessarily a production-ready application.&lt;/p&gt;

&lt;p&gt;So I ended up doing a complete frontend production-hardening pass.&lt;/p&gt;

&lt;p&gt;Here is the checklist I now use before calling a SaaS frontend ready for production.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Build a Proper Page Source
&lt;/h2&gt;

&lt;p&gt;Modern React applications can easily produce pages where the initial HTML tells crawlers almost nothing about the application.&lt;/p&gt;

&lt;p&gt;The browser eventually renders everything correctly, but crawlers, link previews, search engines, and other machines still benefit from meaningful HTML.&lt;/p&gt;

&lt;p&gt;I started checking the actual page source instead of judging the application only from what React rendered on screen.&lt;/p&gt;

&lt;p&gt;The page should expose enough meaningful information for machines to understand what it represents.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Build a Custom 404 Page
&lt;/h2&gt;

&lt;p&gt;A default server error or blank React page is a terrible dead end.&lt;/p&gt;

&lt;p&gt;A proper 404 page should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clearly explain that the requested page doesn't exist,&lt;/li&gt;
&lt;li&gt;maintain the product's branding,&lt;/li&gt;
&lt;li&gt;provide navigation back into the product,&lt;/li&gt;
&lt;li&gt;link to important pages,&lt;/li&gt;
&lt;li&gt;and return the correct HTTP status where possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even error pages are part of the product experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Give Every Page a Unique Title
&lt;/h2&gt;

&lt;p&gt;One of the easiest mistakes in a SPA is having every route use the same title.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;My SaaS&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;is much less useful than:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;AI Video Editor | ProductName&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Pricing | ProductName&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Every important route now gets its own descriptive title.&lt;/p&gt;

&lt;p&gt;This improves search visibility, browser-tab usability, bookmarks, and link previews.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Write Useful Meta Descriptions
&lt;/h2&gt;

&lt;p&gt;I also stopped using generic descriptions such as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The best platform for everything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every important public page gets a description explaining what that specific page actually offers.&lt;/p&gt;

&lt;p&gt;Good metadata should help someone decide whether the page is relevant before they even open it.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Add Canonical URLs
&lt;/h2&gt;

&lt;p&gt;Applications often accidentally expose the same content through multiple URLs.&lt;/p&gt;

&lt;p&gt;Query parameters, alternate paths, trailing slashes, campaign URLs, and routing behavior can all create duplicate versions of a page.&lt;/p&gt;

&lt;p&gt;Canonical tags tell search engines which URL should be considered the authoritative one.&lt;/p&gt;

&lt;p&gt;A small detail, but an important one.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Use One Clear Primary Heading Per Page
&lt;/h2&gt;

&lt;p&gt;Design systems make it surprisingly easy to build pages that look visually correct while having terrible document structure underneath.&lt;/p&gt;

&lt;p&gt;Each page should have a clear purpose.&lt;/p&gt;

&lt;p&gt;The primary heading should communicate that purpose.&lt;/p&gt;

&lt;p&gt;Then the remaining headings should form a logical hierarchy.&lt;/p&gt;

&lt;p&gt;Not because an SEO plugin says so.&lt;/p&gt;

&lt;p&gt;Because semantic HTML makes the page easier for search engines, accessibility tools, browsers, and humans to understand.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Generate a Sitemap
&lt;/h2&gt;

&lt;p&gt;If the application contains publicly indexable pages, I add a &lt;code&gt;sitemap.xml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It contains the canonical public URLs I actually want crawled.&lt;/p&gt;

&lt;p&gt;The important part is not merely generating a sitemap.&lt;/p&gt;

&lt;p&gt;It is making sure the sitemap doesn't advertise pages that should never be indexed in the first place.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Configure &lt;code&gt;robots.txt&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Then comes &lt;code&gt;robots.txt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It communicates which sections crawlers should or shouldn't access and points them toward the sitemap.&lt;/p&gt;

&lt;p&gt;For SaaS products, this becomes especially useful when separating public marketing pages from dashboards, authenticated routes, internal tools, or temporary environments.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Add &lt;code&gt;llms.txt&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;This one is newer.&lt;/p&gt;

&lt;p&gt;Alongside traditional search-engine optimization, I also started thinking about how AI systems understand products.&lt;/p&gt;

&lt;p&gt;I added an &lt;code&gt;llms.txt&lt;/code&gt; file containing a concise, machine-readable explanation of the product and its important resources.&lt;/p&gt;

&lt;p&gt;Whether &lt;code&gt;llms.txt&lt;/code&gt; becomes a universal standard or not, the underlying idea is worth paying attention to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;websites are increasingly being consumed by machines other than traditional search crawlers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SEO is slowly becoming broader than Google.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Stop Treating the Favicon as an Afterthought
&lt;/h2&gt;

&lt;p&gt;That tiny icon appears everywhere:&lt;/p&gt;

&lt;p&gt;browser tabs, history, bookmarks, shortcuts, search interfaces, and sometimes mobile surfaces.&lt;/p&gt;

&lt;p&gt;I replaced the placeholder favicon with something simple, recognizable, high-contrast, and consistent with the product identity.&lt;/p&gt;

&lt;p&gt;Small visual elements can have an outsized effect on how finished a product feels.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Add Internal Links and Breadcrumbs
&lt;/h2&gt;

&lt;p&gt;A lot of SaaS landing pages behave like isolated islands.&lt;/p&gt;

&lt;p&gt;I started deliberately connecting related pages.&lt;/p&gt;

&lt;p&gt;Features → relevant use cases.&lt;/p&gt;

&lt;p&gt;Blog posts → related documentation.&lt;/p&gt;

&lt;p&gt;Documentation → product pages.&lt;/p&gt;

&lt;p&gt;Child pages → parent sections.&lt;/p&gt;

&lt;p&gt;Where the information hierarchy justified it, I added breadcrumbs as well.&lt;/p&gt;

&lt;p&gt;Good internal linking helps users navigate while also helping crawlers understand the structure and relationships between pages.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Add Structured Data
&lt;/h2&gt;

&lt;p&gt;Humans understand a page through visual context.&lt;/p&gt;

&lt;p&gt;Machines don't always get that luxury.&lt;/p&gt;

&lt;p&gt;Structured data gives additional context about what the page represents.&lt;/p&gt;

&lt;p&gt;Depending on the page, this can describe things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the organization,&lt;/li&gt;
&lt;li&gt;software/application information,&lt;/li&gt;
&lt;li&gt;articles,&lt;/li&gt;
&lt;li&gt;breadcrumbs,&lt;/li&gt;
&lt;li&gt;FAQs,&lt;/li&gt;
&lt;li&gt;or other supported entities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For breadcrumb-enabled pages, I also added breadcrumb structured data rather than relying only on the visual component.&lt;/p&gt;




&lt;h2&gt;
  
  
  13. Fix Every Production Console Error
&lt;/h2&gt;

&lt;p&gt;One rule I started following:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;a production browser console should be boring.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No mysterious errors.&lt;/p&gt;

&lt;p&gt;No failed requests.&lt;/p&gt;

&lt;p&gt;No hydration problems.&lt;/p&gt;

&lt;p&gt;No missing assets.&lt;/p&gt;

&lt;p&gt;No repeated warnings that everyone has learned to ignore.&lt;/p&gt;

&lt;p&gt;Warnings have a tendency to become background noise.&lt;/p&gt;

&lt;p&gt;And when the important error finally appears, nobody notices it.&lt;/p&gt;




&lt;h2&gt;
  
  
  14. Disable Production Source Maps When They Aren't Needed
&lt;/h2&gt;

&lt;p&gt;Development source maps are incredibly useful.&lt;/p&gt;

&lt;p&gt;Production source maps require more thought.&lt;/p&gt;

&lt;p&gt;Depending on the deployment model, publicly accessible source maps can expose significantly more information about the application's source than intended.&lt;/p&gt;

&lt;p&gt;For applications that don't need publicly shipped source maps, I disable them in the production build or upload private maps only to the monitoring platform that requires them.&lt;/p&gt;




&lt;h2&gt;
  
  
  15. Reduce Massive JavaScript Bundles
&lt;/h2&gt;

&lt;p&gt;Then I opened the bundle output.&lt;/p&gt;

&lt;p&gt;This is where things usually get interesting.&lt;/p&gt;

&lt;p&gt;A beautiful landing page shouldn't require downloading a ridiculous amount of JavaScript before becoming useful.&lt;/p&gt;

&lt;p&gt;I started looking for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;oversized dependencies,&lt;/li&gt;
&lt;li&gt;libraries imported globally,&lt;/li&gt;
&lt;li&gt;components that could be lazy-loaded,&lt;/li&gt;
&lt;li&gt;routes that could be code-split,&lt;/li&gt;
&lt;li&gt;duplicate dependencies,&lt;/li&gt;
&lt;li&gt;unused packages,&lt;/li&gt;
&lt;li&gt;and features that shouldn't be in the initial bundle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bundle size is not just a Lighthouse metric.&lt;/p&gt;

&lt;p&gt;It affects actual humans using slower hardware and slower networks.&lt;/p&gt;




&lt;h2&gt;
  
  
  16. Remove Every Default Vite/React Placeholder
&lt;/h2&gt;

&lt;p&gt;This sounds obvious.&lt;/p&gt;

&lt;p&gt;Yet production applications constantly ship with traces of their scaffolding.&lt;/p&gt;

&lt;p&gt;Vite logos.&lt;/p&gt;

&lt;p&gt;React favicons.&lt;/p&gt;

&lt;p&gt;Default metadata.&lt;/p&gt;

&lt;p&gt;Placeholder page titles.&lt;/p&gt;

&lt;p&gt;Starter README text.&lt;/p&gt;

&lt;p&gt;Example assets.&lt;/p&gt;

&lt;p&gt;Development console messages.&lt;/p&gt;

&lt;p&gt;Boilerplate copy.&lt;/p&gt;

&lt;p&gt;I now search the repository before release and remove anything that makes the application look like a starter template instead of an actual product.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Bigger Lesson
&lt;/h1&gt;

&lt;p&gt;None of these changes individually feels revolutionary.&lt;/p&gt;

&lt;p&gt;That is exactly why they get ignored.&lt;/p&gt;

&lt;p&gt;Developers naturally focus on the difficult parts:&lt;/p&gt;

&lt;p&gt;authentication,&lt;br&gt;
databases,&lt;br&gt;
payments,&lt;br&gt;
AI pipelines,&lt;br&gt;
background jobs,&lt;br&gt;
infrastructure,&lt;br&gt;
and application logic.&lt;/p&gt;

&lt;p&gt;Then we finish the feature and mentally declare the product complete.&lt;/p&gt;

&lt;p&gt;But production quality lives in hundreds of smaller decisions surrounding the feature.&lt;/p&gt;

&lt;p&gt;Can Google understand the page?&lt;/p&gt;

&lt;p&gt;Can an AI system understand the product?&lt;/p&gt;

&lt;p&gt;Does the browser console stay clean?&lt;/p&gt;

&lt;p&gt;Does a broken URL still feel like part of the application?&lt;/p&gt;

&lt;p&gt;Are users downloading JavaScript they don't need?&lt;/p&gt;

&lt;p&gt;Does the website still advertise the framework used to scaffold it?&lt;/p&gt;

&lt;p&gt;Does every page actually explain what it is?&lt;/p&gt;

&lt;p&gt;These aren't glamorous engineering tasks.&lt;/p&gt;

&lt;p&gt;But together they make the difference between:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“I built a React app.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“I shipped a product.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My current pre-production frontend checklist:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Meaningful page source&lt;/li&gt;
&lt;li&gt;Custom 404&lt;/li&gt;
&lt;li&gt;Unique page titles&lt;/li&gt;
&lt;li&gt;Page-specific meta descriptions&lt;/li&gt;
&lt;li&gt;Canonical URLs&lt;/li&gt;
&lt;li&gt;Semantic page headings&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sitemap.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;robots.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;llms.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Product-specific favicon&lt;/li&gt;
&lt;li&gt;Internal links + breadcrumbs&lt;/li&gt;
&lt;li&gt;Structured data&lt;/li&gt;
&lt;li&gt;Zero unexplained console errors&lt;/li&gt;
&lt;li&gt;Production source-map strategy&lt;/li&gt;
&lt;li&gt;JavaScript bundle optimization&lt;/li&gt;
&lt;li&gt;Zero framework placeholders&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I'm probably going to keep extending this checklist as I ship more products.&lt;/p&gt;

&lt;p&gt;Because shipping the feature is only half the job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The other half is making the web understand what you shipped.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>performance</category>
      <category>saas</category>
      <category>seo</category>
    </item>
    <item>
      <title># I Built My Developer Portfolio as Peter Parker's Lab 🕷️</title>
      <dc:creator>Sreegeethesh</dc:creator>
      <pubDate>Thu, 13 Aug 2026 06:21:19 +0000</pubDate>
      <link>https://dev.to/sreegeetheshdhananjayan/-i-built-my-developer-portfolio-as-peter-parkers-lab-49hd</link>
      <guid>https://dev.to/sreegeetheshdhananjayan/-i-built-my-developer-portfolio-as-peter-parkers-lab-49hd</guid>
      <description>&lt;p&gt;I could have built another developer portfolio.&lt;/p&gt;

&lt;p&gt;You know the one.&lt;/p&gt;

&lt;p&gt;Dark background.&lt;/p&gt;

&lt;p&gt;Glowing buttons.&lt;/p&gt;

&lt;p&gt;"Full Stack Developer | AI | Cloud | DevOps"&lt;/p&gt;

&lt;p&gt;Six project cards.&lt;/p&gt;

&lt;p&gt;GitHub link.&lt;/p&gt;

&lt;p&gt;Done.&lt;/p&gt;

&lt;p&gt;But honestly, that doesn't feel like me.&lt;/p&gt;

&lt;p&gt;Before I was interested in AI, software engineering, cloud, automation and all the other things I keep breaking and rebuilding, I was just a kid who loved Spider-Man.&lt;/p&gt;

&lt;p&gt;And the older I got, the more I realized that I didn't actually relate to Spider-Man because he was a superhero.&lt;/p&gt;

&lt;p&gt;I related to &lt;strong&gt;Peter Parker&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The curious kid.&lt;/p&gt;

&lt;p&gt;The awkward kid.&lt;/p&gt;

&lt;p&gt;The kid who builds things.&lt;/p&gt;

&lt;p&gt;The kid who experiments.&lt;/p&gt;

&lt;p&gt;The kid who fails and somehow keeps going.&lt;/p&gt;

&lt;p&gt;That felt familiar.&lt;/p&gt;

&lt;p&gt;So when I started building my portfolio, I wanted it to represent that.&lt;/p&gt;

&lt;p&gt;I called it:&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Peter Parker's Lab
&lt;/h2&gt;

&lt;p&gt;The idea is that my portfolio is basically my digital lab.&lt;/p&gt;

&lt;p&gt;A place where I can show what I'm building, what I'm learning and what I'm experimenting with.&lt;/p&gt;

&lt;p&gt;🕷️ &lt;strong&gt;Peter Parker&lt;/strong&gt; → curiosity&lt;/p&gt;

&lt;p&gt;🕸️ &lt;strong&gt;Spider-Man&lt;/strong&gt; → persistence&lt;/p&gt;

&lt;p&gt;💻 &lt;strong&gt;Developer&lt;/strong&gt; → everything I'm building today&lt;/p&gt;

&lt;p&gt;And honestly, "lab" describes my development journey pretty well.&lt;/p&gt;

&lt;p&gt;I build something.&lt;/p&gt;

&lt;p&gt;It breaks.&lt;/p&gt;

&lt;p&gt;I investigate why.&lt;/p&gt;

&lt;p&gt;I fix it.&lt;/p&gt;

&lt;p&gt;Then I get another idea and break something else.&lt;/p&gt;

&lt;p&gt;😂&lt;/p&gt;

&lt;p&gt;That's the fun part.&lt;/p&gt;

&lt;p&gt;I'm currently interested in building things around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI&lt;/li&gt;
&lt;li&gt;AI agents&lt;/li&gt;
&lt;li&gt;automation&lt;/li&gt;
&lt;li&gt;full-stack applications&lt;/li&gt;
&lt;li&gt;developer tools&lt;/li&gt;
&lt;li&gt;cloud infrastructure&lt;/li&gt;
&lt;li&gt;DevOps&lt;/li&gt;
&lt;li&gt;local-first software&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm not trying to pretend I've mastered all of it.&lt;/p&gt;

&lt;p&gt;I'm trying to keep learning by &lt;strong&gt;building real things&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's what I want this portfolio to show.&lt;/p&gt;

&lt;p&gt;Not just a list of technologies.&lt;/p&gt;

&lt;p&gt;Not just a list of GitHub repositories.&lt;/p&gt;

&lt;p&gt;But the problems I'm curious about and the things I'm actually trying to create.&lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;Peter Parker's Lab&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://peterparker-lab.vercel.app/" rel="noopener noreferrer"&gt;https://peterparker-lab.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is version one.&lt;/p&gt;

&lt;p&gt;I'll keep changing it as I change.&lt;/p&gt;

&lt;p&gt;New projects.&lt;/p&gt;

&lt;p&gt;New experiments.&lt;/p&gt;

&lt;p&gt;New ideas.&lt;/p&gt;

&lt;p&gt;Probably new bugs too.&lt;/p&gt;

&lt;p&gt;Because maybe the best portfolio isn't one that says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Look how much I know."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Maybe it's one that says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Look what I'm curious enough to build next."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🕷️❤️&lt;/p&gt;

&lt;p&gt;And yes...&lt;/p&gt;

&lt;p&gt;I still think Spider-Man is one of the coolest characters ever.&lt;/p&gt;

&lt;p&gt;Some things don't change.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Built an Open-Source AI Video Clipping Pipeline</title>
      <dc:creator>Sreegeethesh</dc:creator>
      <pubDate>Sat, 08 Aug 2026 06:46:05 +0000</pubDate>
      <link>https://dev.to/sreegeetheshdhananjayan/i-built-an-open-source-ai-video-clipping-pipeline-13c6</link>
      <guid>https://dev.to/sreegeetheshdhananjayan/i-built-an-open-source-ai-video-clipping-pipeline-13c6</guid>
      <description>&lt;h1&gt;
  
  
  I Built an Open-Source AI Video Clipping Pipeline
&lt;/h1&gt;

&lt;p&gt;I wanted a tool that could take a long video and turn it into social-ready clips without uploading the entire video to some SaaS platform.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;AutoClip&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;YouTube URL / Video File
          ↓
      Transcription
          ↓
   LLM Clip Selection
          ↓
   Vertical Reframing
          ↓
    Speaker Tracking
          ↓
   Animated Captions
          ↓
     MP4 Export
          ↓
    Buffer Scheduling
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The interesting part is that the video processing happens locally.&lt;/p&gt;

&lt;p&gt;AutoClip uses an LLM to identify moments worth clipping, but only the transcript text is sent to the LLM. The actual video stays on the user's machine.&lt;/p&gt;

&lt;p&gt;It supports multiple caption styles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Word Pop&lt;/li&gt;
&lt;li&gt;Karaoke Fill&lt;/li&gt;
&lt;li&gt;Clean Lower Third&lt;/li&gt;
&lt;li&gt;Boxed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The final clips are rendered as 9:16 MP4s ready for social platforms.&lt;/p&gt;
&lt;h2&gt;
  
  
  Publishing Architecture
&lt;/h2&gt;

&lt;p&gt;I also wanted publishing to follow the same privacy model.&lt;/p&gt;

&lt;p&gt;Instead of building a cloud scheduler, AutoClip uses a BYOK approach.&lt;/p&gt;

&lt;p&gt;The stack is:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your PC
  ↓
AutoClip processes video
  ↓
Cloudflare R2
  ↓
Buffer
  ↓
Social Platform
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The R2 bucket acts as temporary media storage so Buffer can access the video.&lt;/p&gt;

&lt;p&gt;Once the job is handed off, the user's computer doesn't need to stay online.&lt;/p&gt;

&lt;p&gt;No central media storage.&lt;/p&gt;

&lt;p&gt;No SaaS layer.&lt;/p&gt;

&lt;p&gt;No subscription.&lt;/p&gt;

&lt;p&gt;No watermark.&lt;/p&gt;

&lt;p&gt;No telemetry.&lt;/p&gt;

&lt;p&gt;Just your infrastructure and your API keys.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why I Built It
&lt;/h2&gt;

&lt;p&gt;There are plenty of AI video tools already.&lt;/p&gt;

&lt;p&gt;I wanted one where I could actually understand and control what happens to my content.&lt;/p&gt;

&lt;p&gt;The goal was:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your machine edits.&lt;br&gt;
Your Buffer publishes.&lt;br&gt;
Your content stays yours.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AutoClip is open source.&lt;/p&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/SREEGEETHES" rel="noopener noreferrer"&gt;
        SREEGEETHES
      &lt;/a&gt; / &lt;a href="https://github.com/SREEGEETHES/Autoclip" rel="noopener noreferrer"&gt;
        Autoclip
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;AutoClip&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The local-first AI clipper that finishes the job.&lt;/strong&gt; Drop in a long video → get ranked, caption-burned, speaker-tracked 9:16 clips out — and schedule them to post while your PC is off.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/artbyjazi/autoclip/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/artbyjazi/autoclip/actions/workflows/ci.yml/badge.svg" alt="CI"&gt;&lt;/a&gt;
&lt;a href="https://github.com/SREEGEETHES/Autoclip/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://www.python.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a8bc94425f437747429dfc6929f451b6e81b6081d311bb6120d68ca668ee2768/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e3131253230253743253230332e31322d626c75652e737667" alt="Python 3.11 | 3.12"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Paste a YouTube link or drop a file. AutoClip transcribes it, uses an LLM to find the moments actually worth clipping, reframes them to vertical while tracking whoever is speaking, burns in animated captions, exports platform-ready MP4s — then hands the finished clips to Buffer to publish on schedule. No accounts with us. No uploads to our servers. No watermarks. No subscription.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your machine edits. Your Buffer publishes. Your R2 bridges the media. Nobody owns your content but you.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What it does&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ingest anything&lt;/strong&gt; — a YouTube URL or a local file, hours long or minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Find the real hooks&lt;/strong&gt; — an LLM reads the transcript and ranks the moments worth clipping, down to the word. Timing…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SREEGEETHES/Autoclip" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;I'd love feedback from anyone building content automation, video tooling, or local-first AI applications.&lt;/p&gt;

</description>
      <category>opusclipalternative</category>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>How I built an offline semantic photo search app (Python + Vector DB)</title>
      <dc:creator>Sreegeethesh</dc:creator>
      <pubDate>Mon, 03 Aug 2026 10:51:14 +0000</pubDate>
      <link>https://dev.to/sreegeetheshdhananjayan/how-i-built-an-offline-semantic-photo-search-app-python-vector-db-3da9</link>
      <guid>https://dev.to/sreegeetheshdhananjayan/how-i-built-an-offline-semantic-photo-search-app-python-vector-db-3da9</guid>
      <description>&lt;h1&gt;
  
  
  Show DEV 🚀
&lt;/h1&gt;

&lt;p&gt;I built &lt;strong&gt;OmniCard&lt;/strong&gt;, a local-first AI media manager.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;p&gt;• Semantic image search&lt;/p&gt;

&lt;p&gt;• AI captions&lt;/p&gt;

&lt;p&gt;• Smart tags&lt;/p&gt;

&lt;p&gt;• Duplicate detection&lt;/p&gt;

&lt;p&gt;• SQLite + LanceDB&lt;/p&gt;

&lt;p&gt;• Desktop application with pywebview&lt;/p&gt;

&lt;p&gt;The goal was simple:&lt;/p&gt;

&lt;p&gt;Search photos by what's inside them instead of by filename.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;"Drone over mountains"&lt;/p&gt;

&lt;p&gt;instead of&lt;/p&gt;

&lt;p&gt;IMG_4829.jpg&lt;/p&gt;

&lt;p&gt;The app stores everything locally, so your media never leaves your computer.&lt;/p&gt;

&lt;p&gt;Live demo:&lt;br&gt;
&lt;a href="https://sreegeethes.github.io/Omnicard/" rel="noopener noreferrer"&gt;https://sreegeethes.github.io/Omnicard/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;a href="https://github.com/SREEGEETHES/Omnicard" rel="noopener noreferrer"&gt;https://github.com/SREEGEETHES/Omnicard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Release:&lt;br&gt;
&lt;a href="https://github.com/SREEGEETHES/Omnicard/releases/tag/v1.0.0" rel="noopener noreferrer"&gt;https://github.com/SREEGEETHES/Omnicard/releases/tag/v1.0.0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love feedback from other Python and AI developers.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>database</category>
      <category>python</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
