<?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"><channel><title><![CDATA[Akash Blog]]></title><description><![CDATA[Akash Blog]]></description><link>https://blog.akashy.com.np</link><image><url>https://cdn.hashnode.com/uploads/logos/696145068d01756c35953242/ec6324c6-ebbb-41da-a1a8-3b43970f292c.png</url><title>Akash Blog</title><link>https://blog.akashy.com.np</link></image><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 05:08:03 GMT</lastBuildDate><atom:link href="https://blog.akashy.com.np/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[The Complete Guide to Favicons, App Icons & Social Images in Next.js (2026 Checklist)]]></title><description><![CDATA[Whenever I start a new Next.js project, I always end up asking the same questions again:

What favicon sizes do I need?

What image size does Twitter use?

Where should icons go in Next.js App Router?]]></description><link>https://blog.akashy.com.np/the-complete-guide-to-favicons-app-icons-social-images-in-next-js-2026-checklist</link><guid isPermaLink="true">https://blog.akashy.com.np/the-complete-guide-to-favicons-app-icons-social-images-in-next-js-2026-checklist</guid><category><![CDATA[Next.js]]></category><category><![CDATA[favicons]]></category><category><![CDATA[Icons]]></category><category><![CDATA[logo]]></category><category><![CDATA[webdev]]></category><category><![CDATA[Frontend Development]]></category><category><![CDATA[SEO]]></category><dc:creator><![CDATA[Akash Yadav]]></dc:creator><pubDate>Thu, 12 Mar 2026 02:00:53 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/696145068d01756c35953242/4ff431a6-7f5e-4000-ba19-723932bbb9f5.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Whenever I start a new Next.js project, I always end up asking the same questions again:</p>
<ul>
<li><p>What favicon sizes do I need?</p>
</li>
<li><p>What image size does Twitter use?</p>
</li>
<li><p>Where should icons go in Next.js App Router?</p>
</li>
<li><p>Do I need a maskable icon?</p>
</li>
</ul>
<p>So I wrote this <strong>short checklist for my future self</strong>.</p>
<p>If I follow this post step-by-step, my app will have <strong>all required icons and social images</strong>.</p>
<p>This guide assumes:</p>
<ul>
<li><p><strong>Next.js App Router</strong></p>
</li>
<li><p>icons placed in <strong>/app</strong></p>
</li>
<li><p>metadata handled by <strong>Next.js metadata system</strong></p>
</li>
</ul>
<p>Next.js automatically detects files like <code>favicon.ico</code>, <code>opengraph-image.png</code>, and <code>twitter-image.png</code> when placed in the <code>app</code> folder and adds them to the page metadata automatically. (<a href="https://nextjs.org/docs/app/api-reference/file-conventions/metadata/opengraph-image?utm_source=chatgpt.com">Next.js</a>)</p>
<hr />
<h2>🖼️ 1. Start With One High-Resolution Logo</h2>
<p>Always begin with a square PNG.</p>
<p>Recommended:</p>
<pre><code class="language-plaintext">logo.png
1024 × 1024
transparent background
</code></pre>
<p>Everything else will be generated from this.</p>
<hr />
<h2>🌐 2. Favicons (Browser Tabs)</h2>
<p>Favicons are still required for browser tabs and bookmarks.</p>
<p>The <code>.ico</code> format can contain <strong>multiple sizes inside a single file</strong>, allowing browsers to select the best resolution automatically. (<a href="http://Favicon.io">Favicon.io</a>)</p>
<p>Typical sizes inside favicon:</p>
<pre><code class="language-plaintext">16×16
32×32
48×48
64×64
</code></pre>
<h3>🔧 Tool I use</h3>
<p><a href="https://realfavicongenerator.net">https://realfavicongenerator.net</a></p>
<p><a href="https://www.png2ico.com/">https://www.png2ico.com/</a></p>
<p>Upload your logo and generate <code>favicon.ico</code>.</p>
<hr />
<h3>📁 Folder placement</h3>
<pre><code class="language-plaintext">/app
  favicon.ico
</code></pre>
<p>Next.js automatically detects the file and adds it to <code>&lt;head&gt;</code>. (<a href="http://wisp.blog">wisp.blog</a>)</p>
<hr />
<h3>🔍 Test your favicon</h3>
<ol>
<li><p>Open your site in Chrome</p>
</li>
<li><p>Check the browser tab icon</p>
</li>
</ol>
<p>Or verify using:</p>
<p><a href="https://realfavicongenerator.net/favicon_checker">https://realfavicongenerator.net/favicon_checker</a></p>
<p><a href="https://cards-dev.x.com/validator">https://cards-dev.x.com/validator</a> - For <a href="https://x.com">x.com</a></p>
<hr />
<h2>📱 3. PWA App Icons (Installable Apps)</h2>
<p>These icons appear when a user <strong>installs your web app</strong>.</p>
<p>Minimum required sizes:</p>
<pre><code class="language-plaintext">icon-192.png
icon-512.png
</code></pre>
<p>PWAs typically require <strong>192×192 and 512×512 icons</strong> for installation and splash screens. (<a href="https://stackoverflow.com/questions/57662418/adaptive-icons-on-android-9-with-web-app-manifest?utm_source=chatgpt.com">Stack Overflow</a>)</p>
<h3>Folder structure</h3>
<pre><code class="language-plaintext">/public
  icon-192.png
  icon-512.png
  icon-maskable-512.png
</code></pre>
<h3>Example manifest.js</h3>
<pre><code class="language-plaintext">export default function manifest() {
  return {
    name: "Your App",
    short_name: "App",
    start_url: "/",
    display: "standalone",
    icons: [
      {
        src: "/icon-192.png",
        sizes: "192x192",
        type: "image/png"
      },
      {
        src: "/icon-512.png",
        sizes: "512x512",
        type: "image/png"
      },
      {
        src: "/icon-maskable-512.png",
        sizes: "512x512",
        type: "image/png",
        purpose: "maskable"
      }
    ]
  }
}
</code></pre>
<p>The <strong>manifest file defines how your web app behaves when installed</strong> and includes the icons used by devices. (<a href="https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Manifest/Reference/icons?utm_source=chatgpt.com">MDN Web Docs</a>)</p>
<hr />
<h2>🎨 4. Maskable Icons (Android Adaptive Icons)</h2>
<p>Modern PWAs should also include <strong>maskable icons</strong>.</p>
<p>Android launchers crop icons into shapes (circle, squircle, etc.).<br />Maskable icons allow your icon to <strong>fill the entire shape correctly</strong>. (<a href="http://web.dev">web.dev</a>)</p>
<p>Add this icon:</p>
<pre><code class="language-plaintext">/public
    icon-maskable-512.png
</code></pre>
<h3>Updated manifest entry</h3>
<pre><code class="language-plaintext">{
  src: "/icon-maskable-512.png",
  sizes: "512x512",
  type: "image/png",
  purpose: "maskable"
}
</code></pre>
<p>Recommended icon set:</p>
<pre><code class="language-plaintext">icon-192.png
icon-512.png
icon-maskable-512.png
</code></pre>
<hr />
<h2>🔗 5. Social Sharing Images</h2>
<p>These images appear when someone shares your site on:</p>
<ul>
<li><p>Twitter / X</p>
</li>
<li><p>LinkedIn</p>
</li>
<li><p>Facebook</p>
</li>
<li><p>Slack</p>
</li>
<li><p>Discord</p>
</li>
</ul>
<p>Next.js supports special file names for them.</p>
<pre><code class="language-plaintext">opengraph-image.png
twitter-image.png
</code></pre>
<p>Next.js automatically detects these files when placed in the <code>app</code> folder. (<a href="https://nextjs.org/docs/app/api-reference/file-conventions/metadata/opengraph-image?utm_source=chatgpt.com">Next.js</a>)</p>
<h3>Recommended size</h3>
<p>This works across most social platforms.</p>
<ol>
<li><p><code>opengraph-image.png</code> -- <strong>1200x630</strong> pixels</p>
</li>
<li><p><code>twitter-image.png</code> -- <strong>1200x675</strong> pixels</p>
</li>
</ol>
<hr />
<h3>Folder structure</h3>
<pre><code class="language-plaintext">/app
  opengraph-image.png
  twitter-image.png
</code></pre>
<hr />
<h2>⚡ 6. Dynamic Social Images (My Favorite)</h2>
<p>Instead of static images, I generate them dynamically.</p>
<p>Example:</p>
<pre><code class="language-plaintext">/app/api/og/route.js
/app/api/twitter-card/route.js
</code></pre>
<p>Using:</p>
<pre><code class="language-plaintext">ImageResponse from next/og
</code></pre>
<p>Next.js supports <strong>both static and dynamically generated OG images</strong>. (<a href="https://nextjs.org/docs/app/api-reference/file-conventions/metadata?utm_source=chatgpt.com">Next.js</a>)</p>
<p>Benefits:</p>
<ul>
<li><p>centralized branding</p>
</li>
<li><p>dynamic titles</p>
</li>
<li><p>dynamic backgrounds</p>
</li>
<li><p>easy updates</p>
</li>
</ul>
<hr />
<h2>📂 Final Folder Structure</h2>
<p>When everything is done, <code>/app</code> should look like this:</p>
<pre><code class="language-plaintext">/app
  favicon.ico
  opengraph-image.png
  twitter-image.png
  manifest.js
</code></pre>
<hr />
<h2><strong>✅ My Personal Icon Checklist</strong></h2>
<p>Whenever I launch a new project:</p>
<p>✔ favicon.ico<br />✔ icon-192.png<br />✔ icon-512.png<br />✔ icon-maskable-512.png<br />✔ opengraph-image.png (1200×630)<br />✔ twitter-image.png (1200×630)</p>
<p>That’s it.</p>
<p>No guessing.<br />No Googling again.</p>
]]></content:encoded></item><item><title><![CDATA[IDOR Explained: How Insecure Direct Object Reference Breaks Your Authorization]]></title><description><![CDATA[🚨 Introduction
You can build beautiful APIs.You can have authentication.You can even have JWTs, OAuth, and encrypted traffic.
And still ship a critical vulnerability.
That vulnerability is IDOR — Ins]]></description><link>https://blog.akashy.com.np/idor-explained-how-insecure-direct-object-reference-breaks-your-authorization</link><guid isPermaLink="true">https://blog.akashy.com.np/idor-explained-how-insecure-direct-object-reference-breaks-your-authorization</guid><category><![CDATA[Security]]></category><category><![CDATA[development]]></category><category><![CDATA[attack]]></category><category><![CDATA[vulnerability]]></category><category><![CDATA[cybersecurity]]></category><dc:creator><![CDATA[Akash Yadav]]></dc:creator><pubDate>Sun, 01 Mar 2026 09:55:55 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/696145068d01756c35953242/9750e646-1409-4cb9-9aa6-2e60a9abcf59.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>🚨 Introduction</h2>
<p>You can build beautiful APIs.<br />You can have authentication.<br />You can even have JWTs, OAuth, and encrypted traffic.</p>
<p>And still ship a critical vulnerability.</p>
<p>That vulnerability is <strong>IDOR — Insecure Direct Object Reference</strong>.</p>
<p>It’s simple.<br />It’s common.<br />And it’s responsible for some of the most serious real-world data leaks.</p>
<p>Let’s break it down properly — what it is, how it happens, how attackers exploit it, and how modern teams prevent it in 2026.</p>
<hr />
<h2>🧠 What Is IDOR?</h2>
<p><strong>IDOR (Insecure Direct Object Reference)</strong> occurs when an application exposes a direct reference to an internal object (like a database ID) <strong>without properly checking whether the user is authorized to access it</strong>.</p>
<p>In simple terms:</p>
<blockquote>
<p>The system verifies who you are — but not what you’re allowed to access.</p>
</blockquote>
<p>That’s an authorization failure.</p>
<p>And in modern security standards, this falls under:</p>
<blockquote>
<p><strong>Broken Access Control</strong> (OWASP Top 10)</p>
</blockquote>
<hr />
<h2>💥 The Classic Example</h2>
<p>Let’s say your API has this route:</p>
<pre><code class="language-plaintext">GET /api/users/123
</code></pre>
<p>Backend code:</p>
<pre><code class="language-js">app.get('/api/users/:id', async (req, res) =&gt; {
  const user = await User.findById(req.params.id)
  res.json(user)
})
</code></pre>
<p>Now imagine:</p>
<ul>
<li><p>You are logged in as user ID <strong>101</strong></p>
</li>
<li><p>You change the request to:</p>
</li>
</ul>
<pre><code class="language-plaintext">GET /api/users/102
</code></pre>
<p>If the server does not verify ownership, you now have access to another user's data.</p>
<p>No hacking tools required.<br />No brute force.<br />Just changing a number.</p>
<p>That’s IDOR.</p>
<hr />
<h2>🔥 Why It’s So Dangerous</h2>
<p>With IDOR, attackers can:</p>
<ul>
<li><p>View other users’ personal data</p>
</li>
<li><p>Download invoices</p>
</li>
<li><p>Access private files</p>
</li>
<li><p>Modify someone else’s account</p>
</li>
<li><p>Delete resources they don’t own</p>
</li>
</ul>
<p>It’s not a theoretical issue.<br />It’s one of the most exploited vulnerabilities in production systems.</p>
<hr />
<h2>🧩 Where IDOR Commonly Appears</h2>
<p>IDOR doesn’t just happen in user profiles.</p>
<p>It often shows up in:</p>
<h3>📦 Orders</h3>
<pre><code class="language-plaintext">GET /orders/98765
</code></pre>
<h3>📄 Documents</h3>
<pre><code class="language-plaintext">GET /documents/abc123
</code></pre>
<h3>🧾 Invoices</h3>
<pre><code class="language-plaintext">GET /invoice/4455
</code></pre>
<h3>📁 File Downloads</h3>
<pre><code class="language-plaintext">GET /files/report.pdf
</code></pre>
<p>If access control isn’t enforced properly, all of these can be exposed.</p>
<hr />
<h2>⚠️ Authentication ≠ Authorization</h2>
<p>This is the mistake many developers make.</p>
<ul>
<li><p><strong>Authentication</strong> → Who are you?</p>
</li>
<li><p><strong>Authorization</strong> → What are you allowed to access?</p>
</li>
</ul>
<p>IDOR happens when authentication exists but authorization checks are missing or incomplete.</p>
<hr />
<h2>🛠️ The Correct Way to Fix It</h2>
<h3>❌ Wrong Approach</h3>
<pre><code class="language-js">const order = await Order.findById(req.params.id)
</code></pre>
<h3>✅ Correct Approach</h3>
<pre><code class="language-js">const order = await Order.findOne({
  _id: req.params.id,
  userId: req.user.id
})
</code></pre>
<p>Now the query ensures:</p>
<ul>
<li><p>The order exists</p>
</li>
<li><p>It belongs to the logged-in user</p>
</li>
</ul>
<p>This simple pattern eliminates most IDOR cases.</p>
<hr />
<h2>🔐 Best Practices to Prevent IDOR (2026 Standard)</h2>
<p>Modern engineering teams follow these rules:</p>
<hr />
<h3>1️⃣ Always Scope Database Queries by Ownership</h3>
<p>Every resource should be tied to:</p>
<ul>
<li><p>userId</p>
</li>
<li><p>organizationId</p>
</li>
<li><p>role</p>
</li>
<li><p>permission policy</p>
</li>
</ul>
<p>Never fetch by ID alone.</p>
<hr />
<h3>2️⃣ Centralize Authorization Logic</h3>
<p>Instead of scattering checks everywhere:</p>
<p>Use:</p>
<ul>
<li><p>Middleware</p>
</li>
<li><p>Policy layers</p>
</li>
<li><p>Access control services</p>
</li>
</ul>
<p>For example:</p>
<pre><code class="language-js">if (!canAccess(req.user, resource)) {
  return res.status(403).json({ error: "Forbidden" })
}
</code></pre>
<p>Centralizing reduces human error.</p>
<hr />
<h3>3️⃣ Use Role-Based or Attribute-Based Access Control</h3>
<p>Modern systems use:</p>
<ul>
<li><p><strong>RBAC</strong> (Role-Based Access Control)</p>
</li>
<li><p><strong>ABAC</strong> (Attribute-Based Access Control)</p>
</li>
</ul>
<p>This makes permission decisions consistent and scalable.</p>
<hr />
<h3>4️⃣ Avoid Predictable IDs (Optional but Helpful)</h3>
<p>Sequential IDs:</p>
<pre><code class="language-plaintext">/user/1
/user/2
/user/3
</code></pre>
<p>Very easy to enumerate.</p>
<p>Better:</p>
<pre><code class="language-plaintext">/user/550e8400-e29b-41d4-a716-446655440000
</code></pre>
<p>UUIDs reduce guessing — but they do NOT replace proper authorization checks.</p>
<hr />
<h3>5️⃣ Log Suspicious Access Patterns</h3>
<p>If a user tries:</p>
<pre><code class="language-plaintext">/user/100
/user/101
/user/102
/user/103
</code></pre>
<p>That’s enumeration behavior.</p>
<p>Modern systems log and alert on this.</p>
<hr />
<h2>🧪 How to Test Your App for IDOR</h2>
<p>Here’s a simple developer checklist:</p>
<ol>
<li><p>Log in as User A</p>
</li>
<li><p>Capture a request like:</p>
<pre><code class="language-plaintext">GET /api/orders/123
</code></pre>
</li>
<li><p>Change the ID to another value</p>
</li>
<li><p>Replay the request</p>
</li>
</ol>
<p>If you get valid data → you have an IDOR vulnerability.</p>
<p>Security engineers test this constantly.</p>
<hr />
<h2>🏗️ How Modern Teams Design Against IDOR</h2>
<p>In mature systems, you’ll see:</p>
<ul>
<li><p>Object queries always scoped to ownership</p>
</li>
<li><p>Middleware handling authorization</p>
</li>
<li><p>Centralized permission services</p>
</li>
<li><p>Automated security tests in CI</p>
</li>
<li><p>API contracts enforcing access rules</p>
</li>
<li><p>Security reviews during PR</p>
</li>
</ul>
<p>Security is built into the architecture — not patched afterward.</p>
<hr />
<h2>📌 Real-World Example (Multi-Tenant SaaS)</h2>
<p>Imagine a SaaS dashboard:</p>
<pre><code class="language-plaintext">GET /api/projects/abc123
</code></pre>
<p>Correct query:</p>
<pre><code class="language-js">const project = await Project.findOne({
  id: req.params.id,
  organizationId: req.user.organizationId
})
</code></pre>
<p>This prevents users from accessing projects outside their organization.</p>
<p>This is how serious SaaS platforms avoid cross-tenant data leaks.</p>
<hr />
<h2>🧠 Why IDOR Is Still So Common</h2>
<p>Because it’s easy to overlook.</p>
<p>Developers think:</p>
<ul>
<li><p>“The user is logged in.”</p>
</li>
<li><p>“The UI hides the button.”</p>
</li>
<li><p>“Nobody will try changing the ID.”</p>
</li>
</ul>
<p>Attackers absolutely will.</p>
<hr />
<h2>🎯 Key Takeaways</h2>
<ul>
<li><p>IDOR is an authorization failure.</p>
</li>
<li><p>It allows users to access resources they don’t own.</p>
</li>
<li><p>It’s part of OWASP’s Broken Access Control category.</p>
</li>
<li><p>Fixing it requires proper ownership checks in every query.</p>
</li>
<li><p>Modern systems centralize and automate authorization.</p>
</li>
</ul>
<hr />
<h2>🚀 Final Thoughts</h2>
<p>IDOR is dangerous because it’s simple.</p>
<p>No SQL injection.<br />No complex exploit chains.<br />Just changing a number in a request.</p>
<p>In 2026, secure development isn’t optional.<br />Authorization logic is core infrastructure.</p>
<p>If you build APIs, SaaS products, dashboards, or file systems —<br />you must treat access control as seriously as authentication.</p>
]]></content:encoded></item><item><title><![CDATA[Best Vibe Coding Practices in 2026]]></title><description><![CDATA[Vibe coding isn’t just another buzzword — it’s the mindset of writing clean code, using smart documentation, staying test-driven, and leveraging the right tools to write better code faster.
Today, modern software teams use:

structured documentation ...]]></description><link>https://blog.akashy.com.np/best-vibe-coding-practices-in-2026</link><guid isPermaLink="true">https://blog.akashy.com.np/best-vibe-coding-practices-in-2026</guid><category><![CDATA[AI]]></category><category><![CDATA[vibe coding]]></category><category><![CDATA[Google Antigravity]]></category><category><![CDATA[best practices]]></category><category><![CDATA[2026]]></category><category><![CDATA[Web Development]]></category><dc:creator><![CDATA[Akash Yadav]]></dc:creator><pubDate>Mon, 09 Feb 2026 09:57:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1770630907390/ec26d1a9-88f9-4c30-8f08-cd186b488da4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Vibe coding</em> isn’t just another buzzword — it’s the mindset of writing clean code, using smart documentation, staying test-driven, and leveraging the right tools to write better code faster.</p>
<p>Today, modern software teams use:</p>
<ul>
<li><p>structured documentation formats like <a target="_blank" href="http://AGENTS.md"><strong>AGENTS.md</strong></a> and <a target="_blank" href="http://SKILL.md"><strong>SKILL.md</strong></a></p>
</li>
<li><p>automated tests at all levels (unit → integration → end-to-end)</p>
</li>
<li><p>continuous integration / deployment (CI/CD)</p>
</li>
<li><p>secure coding workflows</p>
</li>
<li><p><em>AI and agent-assisted development tools</em></p>
</li>
</ul>
<p>This isn’t future-talk — it’s already how top engineering teams worldwide work in 2026.</p>
<hr />
<h2 id="heading-1-must-have-docs-for-any-project">📘 1. Must-Have Docs for Any Project</h2>
<p>Good documentation is no longer optional — even AI tools depend on it.</p>
<h3 id="heading-agentsmdhttpagentsmd-machine-readable-project-guide">📝 <a target="_blank" href="http://AGENTS.md">AGENTS.md</a> — <em>Machine-Readable Project Guide</em></h3>
<p><a target="_blank" href="http://AGENTS.md">AGENTS.md</a> tells <em>coding agents</em> how to behave in your project:</p>
<ul>
<li><p>how to install</p>
</li>
<li><p>how to build</p>
</li>
<li><p>commands for tests</p>
</li>
<li><p>style rules</p>
</li>
<li><p>guardrails</p>
</li>
</ul>
<p>These aren’t just nice to have — they reduce ambiguity and help both humans and AI collaborate without confusion.</p>
<blockquote>
<p>Modern coding ecosystems treat docs as part of the codebase — versioned and always up-to-date.<br />This approach is known as <em>docs-as-code</em>.</p>
</blockquote>
<hr />
<h3 id="heading-skillmdhttpskillmd-domain-knowledge-module">📗 <a target="_blank" href="http://SKILL.md">SKILL.md</a> — <em>Domain Knowledge Module</em></h3>
<p>Some tasks are complex and repeatable. <a target="_blank" href="http://SKILL.md">SKILL.md</a> encapsulates <em>how</em> to do them consistently:</p>
<ul>
<li><p>writing API docs</p>
</li>
<li><p>refactoring guidelines</p>
</li>
<li><p>test generation patterns</p>
</li>
<li><p>architectural standards</p>
</li>
</ul>
<p>If you think of <a target="_blank" href="http://AGENTS.md">AGENTS.md</a> as <em>“how the project runs”</em>, <a target="_blank" href="http://SKILL.md">SKILL.md</a> is <em>“how we do specific things well”</em>.</p>
<p>These files are critical when teams want agents to perform high-value tasks reliably.</p>
<hr />
<h2 id="heading-2-coding-standards-that-still-matter">🧼 2. Coding Standards That Still Matter</h2>
<p>Before any tests or release pipelines, clean code matters.</p>
<h3 id="heading-consistent-style-amp-naming">🧠 Consistent Style &amp; Naming</h3>
<p>Use:</p>
<ul>
<li><p>solid naming conventions</p>
</li>
<li><p>agreed linting rules (Prettier, ESLint, RuboCop, etc.)</p>
</li>
<li><p>clear formatting guidelines</p>
</li>
</ul>
<p>Consistency helps teams onboard faster and reduces bugs caused by misunderstandings.</p>
<h3 id="heading-commit-message-standards">🏷️ Commit Message Standards</h3>
<p>Using structured commit conventions (like <strong>Conventional Commits</strong>) supports:</p>
<ul>
<li><p>automated changelogs</p>
</li>
<li><p>semantic versioning</p>
</li>
<li><p>better traceability</p>
</li>
</ul>
<p>Example:</p>
<pre><code class="lang-plaintext">feat(auth): add password reset
fix(api): handle edge case in token validation
docs: update AGENTS.md
</code></pre>
<p>Structured commits are now expected by modern release pipelines.</p>
<hr />
<h2 id="heading-3-secure-coding-practices-safety-first">🔐 3. Secure Coding Practices — Safety First</h2>
<p>Security is <em>every developer’s responsibility</em>.</p>
<p>Secure coding isn’t a separate phase — it’s a constant habit.</p>
<p>Best practices include:</p>
<ul>
<li><p>input validation</p>
</li>
<li><p>output encoding</p>
</li>
<li><p>using prepared queries</p>
</li>
<li><p>avoiding hard-coded secrets</p>
</li>
<li><p>dependency scanning</p>
</li>
<li><p>threat modeling</p>
</li>
</ul>
<p>This ensures your code is safe from common attacks and tools catch mistakes early.</p>
<hr />
<h2 id="heading-4-testing-your-codes-safety-net">🧪 4. Testing — Your Code’s Safety Net</h2>
<p>Testing makes your code reliable and predictable.</p>
<h3 id="heading-types-of-tests-to-know">🔍 Types of Tests to Know</h3>
<ul>
<li><p><strong>Unit Tests</strong> — test small units in isolation</p>
</li>
<li><p><strong>Integration Tests</strong> — test modules working together</p>
</li>
<li><p><strong>End-to-End Tests</strong> — simulate real user workflows</p>
</li>
<li><p><strong>Performance &amp; Regression Tests</strong></p>
</li>
</ul>
<p>Top teams write tests early — sometimes <em>before</em> writing production code (TDD).</p>
<hr />
<h3 id="heading-quick-test-example-javascript-jest">🧪 Quick Test Example (JavaScript + Jest)</h3>
<p><strong>sum.js</strong></p>
<pre><code class="lang-plaintext">export function sum(a, b) {
  return a + b;
}
</code></pre>
<p><strong>sum.test.js</strong></p>
<pre><code class="lang-plaintext">import { sum } from './sum';

test('adds two numbers', () =&gt; {
  expect(sum(2, 3)).toBe(5);
});
</code></pre>
<p>Run:</p>
<pre><code class="lang-plaintext">pnpm test
</code></pre>
<p>Your tests become part of continuous integration workflows — automatically verifying code quality on every push.</p>
<hr />
<h2 id="heading-5-cicd-automated-builds-amp-deployment">🚀 5. CI/CD — Automated Builds &amp; Deployment</h2>
<p>Modern teams automate releases using CI/CD pipelines:</p>
<ul>
<li><p>Run tests on every push</p>
</li>
<li><p>Lint &amp; static analysis</p>
</li>
<li><p>Deployment to staging/production</p>
</li>
<li><p>Canary releases / feature flags</p>
</li>
</ul>
<p>CI/CD is expected, not optional — it ensures reliable, repeatable delivery.</p>
<hr />
<h2 id="heading-6-best-ai-amp-agent-assisted-coding-tools-free-amp-paid">🤖 6. Best AI &amp; Agent-Assisted Coding Tools (Free &amp; Paid)</h2>
<p>In 2026, AI coding tools have matured into <strong>core developer tools</strong> — not just nice extras.</p>
<p>Here’s an overview of the most impactful <em>vibe coding tools</em> you should know:</p>
<hr />
<h3 id="heading-cursor-ai-first-code-editor">💡 Cursor — AI-First Code Editor</h3>
<ul>
<li><p>Works like VS Code but infused with an AI agent</p>
</li>
<li><p>Understands multi-file contexts and suggestions</p>
</li>
<li><p>Great for rapid iteration and editing</p>
</li>
<li><p>Smooth IDE-style workflow with AI support</p>
</li>
</ul>
<p>Cursor is widely loved by developers for its deep editor integration and strong productivity boost.</p>
<hr />
<h3 id="heading-github-copilot-built-in-agents">🤖 GitHub Copilot + Built-In Agents</h3>
<ul>
<li><p>AI suggestions directly in GitHub &amp; VS Code</p>
</li>
<li><p>Now supports multiple AI agents (Copilot, Claude, Codex) inside GitHub workflows</p>
</li>
<li><p>Generates code, tests, docs, and pull requests</p>
</li>
</ul>
<p>GitHub is integrating rival AI code agents like Anthropic’s Claude and OpenAI’s Codex right into its platform, making them available inside repositories where developers already work.</p>
<hr />
<h3 id="heading-claude-code-cli-amp-web-coding-agent">⚡ Claude Code — CLI &amp; Web Coding Agent</h3>
<ul>
<li><p>Strong at reasoning and complex changes</p>
</li>
<li><p>Works well in terminal or automation workflows</p>
</li>
<li><p>Great for building CLI tools, scripts, and deeper architectural edits</p>
</li>
</ul>
<p>Claude Code continues to be a top choice when deep understanding and logical reasoning are needed.</p>
<hr />
<h3 id="heading-google-antigravity-agent-first-coding">🌌 Google Antigravity — Agent-First Coding</h3>
<ul>
<li><p>Google’s ambitious AI coding platform</p>
</li>
<li><p>Acts as <em>autonomous agents</em> capable of planning tasks, refactors, and logic flows</p>
</li>
<li><p>Best when you want the tool to <em>execute workflows</em>, not just suggest lines</p>
</li>
</ul>
<p>Tools like Antigravity are shifting towards agentic development models, where AI coordinates large tasks on its own.</p>
<hr />
<h3 id="heading-opencode-open-source-coding-agent">🆓 OpenCode — Open-Source Coding Agent</h3>
<ul>
<li><p>Community-driven alternative</p>
</li>
<li><p>Works in terminal or IDE</p>
</li>
<li><p>Gives flexibility to connect different models</p>
</li>
<li><p>No vendor lock-in, customizable</p>
</li>
</ul>
<p>OpenCode is becoming popular among developers who want agent capabilities without locking into specific commercial ecosystems.</p>
<hr />
<h3 id="heading-github-copilot-standard">💻 GitHub Copilot (Standard)</h3>
<ul>
<li><p>Familiar tool for many</p>
</li>
<li><p>Works inside IDEs (VS Code, JetBrains, etc.)</p>
</li>
<li><p>Generates code on demand</p>
</li>
<li><p>Suggests tests and docs</p>
</li>
</ul>
<p>Copilot is still a staple in many workflows, especially integrated with GitHub repos.</p>
<hr />
<h2 id="heading-free-amp-low-cost-vibe-coding-tools">🆓 Free &amp; Low-Cost Vibe Coding Tools</h2>
<p>Not all tools require pricey subscriptions. Here are <em>budget-friendly</em> options:</p>
<ul>
<li><p><strong>OpenCode</strong> — open source coding agent you can self-host or extend.</p>
</li>
<li><p><strong>Cursor (Free tier)</strong> — many features available without full subscription.</p>
</li>
<li><p><strong>Gemini Code Assist (Free tier)</strong> — powerful coding assistant with generous free usage limits.</p>
</li>
<li><p><strong>Free agent libraries &amp; open agents</strong> — community tools that connect open models to editors.</p>
</li>
</ul>
<p>These tools let you begin vibe coding with little or no upfront cost.</p>
<hr />
<h2 id="heading-how-to-pick-the-right-tool">🧠 How to Pick the Right Tool</h2>
<p>Here’s a quick guide based on your workflow:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>What You Need</td><td>Best Fit</td></tr>
</thead>
<tbody>
<tr>
<td>IDE-style coding with deep context</td><td>Cursor</td></tr>
<tr>
<td>GitHub-centric workflows</td><td>GitHub Copilot + Agents</td></tr>
<tr>
<td>CLI and automation</td><td>Claude Code</td></tr>
<tr>
<td>Autonomous task automation</td><td>Antigravity</td></tr>
<tr>
<td>Open-source &amp; flexible</td><td>OpenCode</td></tr>
<tr>
<td>Free / hackable</td><td>OpenCode, Gemini Code Assist</td></tr>
</tbody>
</table>
</div><p>There isn’t a single <em>best</em> tool — the right choice depends on your workflow and team.</p>
<hr />
<h2 id="heading-7-real-world-team-practices">📊 7. Real-World Team Practices</h2>
<p>Top engineering teams integrate:</p>
<ul>
<li><p>detailed <a target="_blank" href="http://AGENTS.md"><strong>AGENTS.md</strong></a> <strong>/</strong> <a target="_blank" href="http://SKILL.md"><strong>SKILL.md</strong></a></p>
</li>
<li><p>automated <strong>CI/CD</strong></p>
</li>
<li><p>thorough <strong>testing practices</strong></p>
</li>
<li><p>security checks (SAST, dependency scans)</p>
</li>
<li><p>agent guidelines and guardrails</p>
</li>
<li><p>structured doc review processes</p>
</li>
</ul>
<p>This reduces ambiguity, ensures quality, and keeps development <em>vibing at scale</em>.</p>
<hr />
<h2 id="heading-final-thoughts">🎯 Final Thoughts</h2>
<p>By adopting modern documentation standards, strong coding practices, testing &amp; CI automation, and the right AI tools, you’ll be positioned to write <strong>better code faster and more reliably</strong>.</p>
<p><strong>Vibe coding in 2026 = process + tools + discipline.</strong></p>
]]></content:encoded></item><item><title><![CDATA[Clawd.bot: The AI Tool That Turns Messaging Apps Into Your AI Assistant]]></title><description><![CDATA[Introduction
What if your AI wasn’t just a chat partner but a digital colleague — one that lives in the messaging apps you already use and can take real actions on your behalf? That’s the pitch behind Clawd.bot, the open-source AI assistant that went...]]></description><link>https://blog.akashy.com.np/clawdbot-the-ai-tool-that-turns-messaging-apps-into-your-ai-assistant</link><guid isPermaLink="true">https://blog.akashy.com.np/clawdbot-the-ai-tool-that-turns-messaging-apps-into-your-ai-assistant</guid><category><![CDATA[clawdbot]]></category><category><![CDATA[AI assistant]]></category><category><![CDATA[automation]]></category><category><![CDATA[developers]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[home automation]]></category><dc:creator><![CDATA[Akash Yadav]]></dc:creator><pubDate>Tue, 27 Jan 2026 04:50:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1769489356660/5588db8d-6e1d-4ba6-ac68-3cf6291ae319.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Introduction</strong></p>
<p>What if your AI wasn’t just a <em>chat partner</em> but a <strong>digital colleague</strong> — one that lives in the messaging apps you already use and can take real actions on your behalf? That’s the pitch behind <strong>Clawd.bot</strong>, the open-source AI assistant that went viral in 2026. It’s fast shaping up to be one of the most exciting AI tools for developers and power users alike. (<a target="_blank" href="https://vercel.com/docs/ai-gateway/chat-platforms/clawd-bot?utm_source=chatgpt.com">Vercel</a>)</p>
<hr />
<h2 id="heading-what-is-clawdbothttpsclawdbot">🧠 What Is <a target="_blank" href="https://clawd.bot/">Clawd.bot</a>?</h2>
<p>At its core, <a target="_blank" href="https://clawd.bot/"><strong>Clawd.bot</strong></a> <strong>is an open-source personal AI assistant</strong> you run locally or on a server you control. Unlike traditional web-based chatbots, it bridges powerful AI agents with the messaging apps you already use — like WhatsApp, Telegram, Slack, Discord, Signal, iMessage, Microsoft Teams, and more. (<a target="_blank" href="https://vercel.com/docs/ai-gateway/chat-platforms/clawd-bot?utm_source=chatgpt.com">Vercel</a>)</p>
<p>Here’s a <em>simple architectural view</em>:</p>
<pre><code class="lang-plaintext">Messaging App (WhatsApp/Telegram/Slack/etc.)  
        ↕  
   Clawd.bot Gateway  
        ↕  
   AI Agent + Skills (Claude, GPT, local models)  
        ↕  
    Real Actions (scripts, reminders, browser control)
</code></pre>
<p>The gateway handles connections and context, the AI agent processes your input and manages persistent memory, and the skills layer performs real tasks on your behalf — from running shell commands to automating workflows. (<a target="_blank" href="https://vercel.com/docs/ai-gateway/chat-platforms/clawd-bot?utm_source=chatgpt.com">Vercel</a>)</p>
<hr />
<h2 id="heading-getting-started-with-clawdbot-high-level">🛠️ Getting Started with Clawd.bot (High Level)</h2>
<p>Here’s the <strong>conceptual setup</strong> that turns Clawd.bot into your personal assistant:</p>
<ol>
<li><p><strong>Install Clawd.bot</strong> locally, on a VPS, or with Docker</p>
<ul>
<li>One-liner installers and Docker options are supported. (<a target="_blank" href="https://dev.to/sivarampg/you-dont-need-a-mac-mini-to-run-clawdbot-heres-how-to-run-it-anywhere-217l?utm_source=chatgpt.com">DEV Community</a>)</li>
</ul>
</li>
<li><p><strong>Connect your messaging platforms</strong> through the gateway</p>
<ul>
<li>Telegram, WhatsApp, Slack, Discord, Signal, iMessage, Teams, WebChat, etc. (<a target="_blank" href="https://clawd.bot/integrations?utm_source=chatgpt.com">Clawdbot</a>)</li>
</ul>
</li>
<li><p><strong>Choose your model(s)</strong></p>
<ul>
<li>Options include Claude, GPT-like APIs, or local models of your choice. (<a target="_blank" href="https://vercel.com/docs/ai-gateway/chat-platforms/clawd-bot?utm_source=chatgpt.com">Vercel</a>)</li>
</ul>
</li>
<li><p><strong>Add Skills</strong></p>
<ul>
<li>Prebuilt or custom extensions unlock real actions.</li>
</ul>
</li>
<li><p><strong>Authorize devices</strong> and set appropriate permissions</p>
<ul>
<li>Permissions control what your assistant can access and act upon.</li>
</ul>
</li>
<li><p><strong>Start chatting and automation begins</strong></p>
<ul>
<li>It listens, remembers, and acts.</li>
</ul>
</li>
</ol>
<p>⚠️ Some skills require higher privileges (like system access or script execution) — configure them with care. (<a target="_blank" href="https://docs.clawd.bot/start/clawd?utm_source=chatgpt.com">Clawdbot</a>)</p>
<hr />
<h2 id="heading-core-features-that-make-clawdbot-stand-out">🔧 Core Features That Make Clawd.bot Stand Out</h2>
<h3 id="heading-1-multi-platform-messaging-support">✅ 1. Multi-Platform Messaging Support</h3>
<p>Clawd.bot connects to apps you already use:</p>
<ul>
<li><p>WhatsApp</p>
</li>
<li><p>Telegram</p>
</li>
<li><p>Discord</p>
</li>
<li><p>Slack</p>
</li>
<li><p>Signal</p>
</li>
<li><p>iMessage</p>
</li>
<li><p>Microsoft Teams</p>
</li>
<li><p>WebChat<br />  …and more. (<a target="_blank" href="https://clawd.bot/integrations?utm_source=chatgpt.com">Clawdbot</a>)</p>
</li>
</ul>
<p>You chat with it like a colleague — no new app to learn.</p>
<hr />
<h3 id="heading-2-persistent-memory-amp-context">🧠 2. Persistent Memory &amp; Context</h3>
<p>Most AI tools forget everything after a session ends. Clawd.bot <em>remembers you</em> — your context, preferences, routines, and long-running conversations — giving it continuity and personalization you won’t get from ephemeral web chatbots. (<a target="_blank" href="https://vercel.com/docs/ai-gateway/chat-platforms/clawd-bot?utm_source=chatgpt.com">Vercel</a>)</p>
<hr />
<h3 id="heading-3-real-actions-not-just-replies">⚙️ 3. Real Actions, Not Just Replies</h3>
<p>Clawd.bot can do way more than reply to text. It’s effectively a <strong>programmable agent</strong> that can:</p>
<ul>
<li><p>Execute shell commands on your host machine</p>
</li>
<li><p>Automate file and directory tasks</p>
</li>
<li><p>Perform browser automation (navigate and interact with web pages)</p>
</li>
<li><p>Fetch and summarize emails</p>
</li>
<li><p>Create GitHub issues or tickets</p>
</li>
<li><p>Manage calendars and reminders</p>
</li>
<li><p>Schedule tasks and proactive notifications</p>
</li>
</ul>
<p>That’s what turns it from a chatbot into a <em>true digital worker</em>. (<a target="_blank" href="https://www.banani.co/blog/clawd.bot-review-features-pricing-and-alternatives?utm_source=chatgpt.com">banani.co</a>)</p>
<hr />
<h2 id="heading-real-world-use-case-examples">💡 Real-World Use Case Examples</h2>
<p>Below are <strong>hands-on ways developers and power users are already using Clawd.bot</strong> to go beyond simple chat.</p>
<hr />
<h3 id="heading-1-developer-automation-amp-workflow-integration">🛠 1. Developer Automation &amp; Workflow Integration</h3>
<p>Clawd.bot is becoming a favorite for developers because it can act like a <strong>hands-free dev assistant</strong>:</p>
<ul>
<li><p>Run CI/CD scripts from chat prompts</p>
</li>
<li><p>Generate code snippets or refactor functions on request</p>
</li>
<li><p>Summarize logs and test results</p>
</li>
<li><p>Integrate with GitHub — create issues, track PRs, generate release notes</p>
</li>
<li><p>Retrieve and analyze analytics or metric data</p>
</li>
</ul>
<p>Example:</p>
<pre><code class="lang-plaintext">@clawd: “Run tests on the staging branch”
Clawd.bot: “Starting tests... 42 passed, 3 failed. See log below.”
</code></pre>
<p>This turns your messaging interface into a <em>command center</em> for your development workflows. (<a target="_blank" href="https://clawd.bot/showcase?utm_source=chatgpt.com">Clawdbot</a>)</p>
<hr />
<h3 id="heading-2-home-automation-and-smart-device-control">🏡 2. Home Automation and Smart Device Control</h3>
<p>Clawd.bot isn’t limited to your keyboard — it can also integrate with <strong>smart home platforms</strong> via scripts and API calls:</p>
<ul>
<li><p>Turn lights on/off or adjust brightness</p>
</li>
<li><p>Change thermostat settings</p>
</li>
<li><p>Trigger scenes or routines (e.g., “Good night” → all lights off)</p>
</li>
<li><p>Control smart speakers and media devices</p>
</li>
<li><p>Schedule recurring actions</p>
</li>
</ul>
<p>Example:</p>
<pre><code class="lang-plaintext">@clawd: “Dim living room lights to 30% at 10 PM”
Clawd.bot: “Scheduled.”
</code></pre>
<p>This transforms simple text messages into real physical automation across your devices. (<a target="_blank" href="https://www.macstories.net/stories/clawdbot-showed-me-what-the-future-of-personal-ai-assistants-looks-like/?utm_source=chatgpt.com">MacStories</a>)</p>
<hr />
<h3 id="heading-3-inbox-zero-and-email-workflows">✉️ 3. Inbox Zero and Email Workflows</h3>
<p>TIred of sifting through hundreds of emails? Clawd.bot can help:</p>
<ul>
<li><p>Summarize unread messages</p>
</li>
<li><p>Flag important threads</p>
</li>
<li><p>Draft responses or follow-ups</p>
</li>
<li><p>Automatically archive low-priority emails</p>
</li>
</ul>
<p>All delivered right into your chat app. (<a target="_blank" href="https://www.banani.co/blog/clawd.bot-review-features-pricing-and-alternatives?utm_source=chatgpt.com">banani.co</a>)</p>
<hr />
<h3 id="heading-4-proactive-personal-assistant-tasks">📆 4. Proactive Personal Assistant Tasks</h3>
<p>Clawd.bot can <em>initiate messages</em>, not just respond:</p>
<ul>
<li><p>Daily agendas and briefing summaries</p>
</li>
<li><p>Alerts before meetings or deadlines</p>
</li>
<li><p>Weather forecasts or travel updates</p>
</li>
<li><p>Scheduled reminders based on context</p>
</li>
</ul>
<p>This moves Clawd.bot from reactive to <strong>proactive</strong>, making it feel more like a personal AI companion than a chatbot. (<a target="_blank" href="https://vercel.com/docs/ai-gateway/chat-platforms/clawd-bot?utm_source=chatgpt.com">Vercel</a>)</p>
<hr />
<h2 id="heading-pitfalls-to-watch-out-for">⚠️ Pitfalls to Watch Out For</h2>
<p>Clawd.bot is powerful, but not <strong>plug-and-play</strong> for everyone:</p>
<p>❗ Setup can be technical and requires comfort with infrastructure and messaging platform APIs. (<a target="_blank" href="https://medium.com/modelmind/how-to-set-up-clawdbot-step-by-step-guide-to-setup-a-personal-bot-3e7957ed2975?utm_source=chatgpt.com">Medium</a>)<br />⚠️ You’re responsible for security — running automation with powerful permissions can be risky if misconfigured. (<a target="_blank" href="https://github.com/clawdbot/clawdbot?utm_source=chatgpt.com">GitHub</a>)<br />🧠 Persistent memory means <em>data stays longer</em> — you need thoughtful management and good hygiene. (<a target="_blank" href="https://medium.com/data-science-in-your-pocket/what-is-clawdbot-the-viral-ai-assistant-b432d275de66?utm_source=chatgpt.com">Medium</a>)</p>
<p>This tool is best suited for <strong>builders, tinkerers, and automation geeks</strong> who want fine-grained control over their AI assistant.</p>
<hr />
<h2 id="heading-why-this-matters-for-developers">🧠 Why This Matters for Developers</h2>
<p>Clawd.bot isn’t just “another chatbot” — it’s a <strong>self-hosted programmable assistant</strong> that:</p>
<ul>
<li><p>Runs where you control it</p>
</li>
<li><p>Integrates with daily tools and workflows</p>
</li>
<li><p>Allows you to extend functionality with custom scripts and plugins</p>
</li>
<li><p>Turns AI from passive Q&amp;A into <em>active automation</em></p>
</li>
</ul>
<p>In many ways, it feels like the bridge between traditional automation (cron jobs and scripts) and the next generation of conversational AI as actual <em>digital teammates</em>. (<a target="_blank" href="https://www.banani.co/blog/clawd.bot-review-features-pricing-and-alternatives?utm_source=chatgpt.com">banani.co</a>)</p>
<hr />
<h2 id="heading-final-thoughts">🧠 Final Thoughts</h2>
<p>Clawd.bot is one of the most exciting advancements in personal AI assistants in 2026.<br />It transforms AI from a reactive chat interface into a <strong>context-aware automation engine you control — not a cloud megacorp</strong>. (<a target="_blank" href="https://medium.com/%40gemQueenx/clawdbot-ai-the-revolutionary-open-source-personal-assistant-transforming-productivity-in-2026-6ec5fdb3084f?utm_source=chatgpt.com">Medium</a>)</p>
<p>For developers seeking autonomy, customization, and true productivity gains, Clawd.bot isn’t just another tool — it’s a platform for unleashing AI as your everyday team member. 🚀</p>
<hr />
<h3 id="heading-official-amp-community-resources-for-clawdbot">🔗 <strong>Official &amp; Community Resources for Clawd.bot</strong></h3>
<p>🔹 <strong>Official Website</strong> – Home page &amp; quick intro to the tool<br />👉 <a target="_blank" href="https://clawd.bot?utm_source=chatgpt.com">https://clawd.bot</a></p>
<p>📘 <strong>Official Documentation</strong> – Setup guides, concepts, config, and more<br />👉 <a target="_blank" href="https://docs.clawd.bot?utm_source=chatgpt.com">https://docs.clawd.bot</a></p>
<p>📦 <strong>GitHub Repository (Source Code + CLI)</strong> – Issue tracker, code, releases<br />👉 <a target="_blank" href="https://github.com/clawdbot/clawdbot?utm_source=chatgpt.com">https://github.com/clawdbot/clawdbot</a></p>
<p>📥 <strong>Releases Page</strong> – Download stable builds &amp; view changelogs<br />👉 <a target="_blank" href="https://github.com/clawdbot/clawdbot/releases?utm_source=chatgpt.com">https://github.com/clawdbot/clawdbot/releases</a></p>
<p>💬 <strong>GitHub Discussions (Forum)</strong> – Community Q&amp;A, tips, collaboration<br />👉 <a target="_blank" href="https://github.com/clawdbot/clawdbot/discussions?utm_source=chatgpt.com">https://github.com/clawdbot/clawdbot/discussions</a></p>
<p>🛠 <strong>Getting Started (Official Guide)</strong> – Step-by-step first chat setup<br />👉 <a target="_blank" href="https://docs.clawd.bot/start/getting-started?utm_source=chatgpt.com">https://docs.clawd.bot/start/getting-started</a></p>
<p>📘 <strong>Clawdbot Configuration Docs</strong> – Customize and configure your assistant<br />👉 <a target="_blank" href="https://github.com/clawdbot/clawdbot/blob/main/docs/configuration.md?utm_source=chatgpt.com">https://github.com/clawdbot/clawdbot/blob/main/docs/configuration.md</a></p>
]]></content:encoded></item><item><title><![CDATA[Restore a Supabase Database from SQL Backups (Step-by-Step Guide)]]></title><description><![CDATA[So you’ve got your Supabase database backups (roles.sql, schema.sql, data.sql) safely stored in GitHub — nice 👏Now comes the slightly nerve-wracking part: restoring everything into a fresh Supabase project without breaking things.
This guide walks t...]]></description><link>https://blog.akashy.com.np/restore-a-supabase-database-from-sql-backups-step-by-step-guide</link><guid isPermaLink="true">https://blog.akashy.com.np/restore-a-supabase-database-from-sql-backups-step-by-step-guide</guid><category><![CDATA[supabase]]></category><category><![CDATA[PostgreSQL]]></category><category><![CDATA[database restore]]></category><category><![CDATA[Databases]]></category><category><![CDATA[Web Development]]></category><dc:creator><![CDATA[Akash Yadav]]></dc:creator><pubDate>Wed, 14 Jan 2026 02:32:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768357826601/9cda8420-7260-4b72-a47c-c15b23ee8b57.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>So you’ve got your Supabase database backups (<code>roles.sql</code>, <code>schema.sql</code>, <code>data.sql</code>) safely stored in GitHub — nice 👏<br />Now comes the slightly nerve-wracking part: <strong>restoring everything into a fresh Supabase project without breaking things</strong>.</p>
<p>This guide walks through a <strong>clean, repeatable, and production-safe way</strong> to restore a Supabase database using <code>psql</code>, with a few extra tips I wish someone had told me earlier.</p>
<hr />
<h2 id="heading-step-1-create-a-new-supabase-project">Step 1: Create a New Supabase Project</h2>
<p>Head over to the <strong>Supabase Dashboard</strong> and create a brand-new project.</p>
<p><strong>Important tips here:</strong></p>
<ul>
<li><p>✅ <strong>Use the same region</strong> as the original project (helps with latency + future migrations)</p>
</li>
<li><p>⏱️ Wait until the database status shows <em>healthy</em></p>
</li>
</ul>
<h3 id="heading-get-the-direct-database-connection-string">Get the Direct Database Connection String</h3>
<ol>
<li><p>Go to <strong>Settings → Database</strong></p>
</li>
<li><p>Copy the <strong>Direct connection string</strong> (port <strong>5432</strong>)</p>
</li>
<li><p>If the password was recently changed:</p>
<ul>
<li><p>Reset it once more</p>
</li>
<li><p>Wait ~1 minute so it propagates everywhere</p>
</li>
</ul>
</li>
</ol>
<p>📌 You’ll use this connection string later as <code>[NEW_DB_URL]</code>.</p>
<hr />
<h2 id="heading-step-2-install-required-tools-locally">Step 2: Install Required Tools Locally</h2>
<p>You’ll need two things:</p>
<ul>
<li><p>PostgreSQL client (<code>psql</code>)</p>
</li>
<li><p>Supabase CLI (optional, but useful)</p>
</li>
</ul>
<h3 id="heading-install-postgresql-client">Install PostgreSQL Client</h3>
<p><strong>Windows</strong></p>
<pre><code class="lang-plaintext">winget install postgresql
</code></pre>
<p>Or download directly from <a target="_blank" href="http://postgresql.org">postgresql.org</a>.</p>
<p><strong>macOS</strong></p>
<pre><code class="lang-plaintext">brew install postgresql supabase/tap/supabase
</code></pre>
<p><strong>Linux (Debian/Ubuntu)</strong></p>
<pre><code class="lang-plaintext">sudo apt install postgresql-client supabase
</code></pre>
<h3 id="heading-verify-installation">Verify Installation</h3>
<pre><code class="lang-plaintext">psql --version
</code></pre>
<p>If this works, you’re good to go 🚀</p>
<hr />
<h2 id="heading-step-3-download-backup-files-from-github">Step 3: Download Backup Files from GitHub</h2>
<p>From your repository, download these files into <strong>one local folder</strong>:</p>
<pre><code class="lang-plaintext">roles.sql
schema.sql
data.sql
</code></pre>
<p>⚠️ <strong>Do not rename them</strong><br />⚠️ <strong>Order matters</strong> — this exact sequence is critical for a successful restore.</p>
<hr />
<h2 id="heading-step-4-restore-the-database-the-safe-way">Step 4: Restore the Database (The Safe Way)</h2>
<p>Now comes the main event.</p>
<p>Run this single command from the folder containing your SQL files:</p>
<pre><code class="lang-plaintext">psql \
  --single-transaction \
  --variable ON_ERROR_STOP=1 \
  --file roles.sql \
  --file schema.sql \
  --set session_replication_role=replica \
  --file data.sql \
  --dbname "[NEW_DB_URL]"
</code></pre>
<h3 id="heading-why-this-works-so-well">Why this works so well</h3>
<ul>
<li><p><code>--single-transaction</code><br />  → Either everything restores, or nothing does (no half-broken DBs)</p>
</li>
<li><p><code>ON_ERROR_STOP=1</code><br />  → Stops immediately if something goes wrong</p>
</li>
<li><p><code>session_replication_role=replica</code><br />  → Temporarily disables triggers &amp; foreign-key checks<br />  (super important for bulk <code>COPY</code> inserts)</p>
</li>
</ul>
<hr />
<h2 id="heading-step-5-understand-the-restore-order-dont-skip-this">Step 5: Understand the Restore Order (Don’t Skip This)</h2>
<p>Here’s <strong>why</strong> the order matters:</p>
<ol>
<li><p><code>roles.sql</code></p>
<ul>
<li><p>Database users</p>
</li>
<li><p>Permissions &amp; grants<br />  Without this → schema permissions can fail</p>
</li>
</ul>
</li>
<li><p><code>schema.sql</code></p>
<ul>
<li><p>Tables, views, functions, indexes</p>
</li>
<li><p>Constraints &amp; relationships</p>
</li>
</ul>
</li>
<li><p><code>data.sql</code></p>
<ul>
<li><p>Actual records</p>
</li>
<li><p>Usually uses <code>COPY</code> for speed</p>
</li>
</ul>
</li>
</ol>
<p>Mess this order up and you’ll meet cryptic Postgres errors 😅</p>
<hr />
<h2 id="heading-step-6-verify-the-restoration">Step 6: Verify the Restoration</h2>
<h3 id="heading-quick-sanity-check-via-terminal">Quick sanity check via terminal</h3>
<pre><code class="lang-plaintext">psql "[NEW_DB_URL]" -c "SELECT COUNT(*) FROM your_table;"
</code></pre>
<h3 id="heading-visual-check-in-supabase">Visual check in Supabase</h3>
<ul>
<li><p>Open <strong>Table Editor</strong></p>
</li>
<li><p>Browse a few tables</p>
</li>
<li><p>Confirm row counts look right</p>
</li>
</ul>
<p>If both checks pass — congrats 🎉 your database is officially back.</p>
<hr />
<h2 id="heading-step-7-things-that-are-not-restored-automatically">Step 7: Things That Are <em>Not</em> Restored Automatically</h2>
<p>SQL backups <strong>do not include</strong>:</p>
<ul>
<li><p>🔐 Auth providers (Google, GitHub, email, etc.)</p>
</li>
<li><p>🗄️ Storage buckets &amp; policies</p>
</li>
<li><p>🔑 API keys &amp; secrets</p>
</li>
<li><p>⚙️ Edge Functions config</p>
</li>
</ul>
<p>You’ll need to reconfigure these manually in the Supabase dashboard.</p>
<p>👉 Pro tip: keep a <strong>post-restore checklist</strong> in your repo for this stuff.</p>
<hr />
<h2 id="heading-optional-improvements-highly-recommended">Optional Improvements (Highly Recommended)</h2>
<ul>
<li><p>✅ Test restore on a <strong>staging project</strong> first</p>
</li>
<li><p>🧪 Run a few app queries against the new DB</p>
</li>
<li><p>📄 Log restore output to a file for debugging:</p>
<pre><code class="lang-plaintext">  psql ... &gt; restore.log 2&gt;&amp;1
</code></pre>
</li>
<li><p>🔁 Automate restore later via GitHub Actions (carefully!)</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Automate Supabase Database Backups Using GitHub Actions]]></title><description><![CDATA[Backing up a database is one of those things everyone knows they should do…until something breaks and there’s no backup 😅
If you’re using Supabase, the good news is:you can fully automate PostgreSQL backups using GitHub Actions + Supabase CLI in jus...]]></description><link>https://blog.akashy.com.np/automate-supabase-database-backups-using-github-actions</link><guid isPermaLink="true">https://blog.akashy.com.np/automate-supabase-database-backups-using-github-actions</guid><category><![CDATA[github-actions]]></category><category><![CDATA[Database Backup]]></category><category><![CDATA[PostgreSQL]]></category><category><![CDATA[Devops]]></category><category><![CDATA[automation]]></category><category><![CDATA[backend]]></category><category><![CDATA[Cloud Engineering ]]></category><dc:creator><![CDATA[Akash Yadav]]></dc:creator><pubDate>Wed, 14 Jan 2026 02:18:41 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768352492586/b8e34804-72b8-474b-9e4a-34339f1845ff.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Backing up a database is one of those things everyone <em>knows</em> they should do…<br />until something breaks and there’s no backup 😅</p>
<p>If you’re using <strong>Supabase</strong>, the good news is:<br />you can fully automate PostgreSQL backups using <strong>GitHub Actions + Supabase CLI</strong> in just a few minutes.</p>
<p>This setup:</p>
<ul>
<li><p>Runs automatically</p>
</li>
<li><p>Stores backups securely</p>
</li>
<li><p>Requires <strong>zero manual effort</strong> after setup</p>
</li>
</ul>
<hr />
<h2 id="heading-why-automate-supabase-backups">Why Automate Supabase Backups?</h2>
<p>Supabase handles infrastructure well — but <strong>your data is still your responsibility</strong>.</p>
<p>Automation gives you:</p>
<ul>
<li><p>✅ Regular backups (daily / PR / manual)</p>
</li>
<li><p>✅ Versioned SQL dumps</p>
</li>
<li><p>✅ Easy recovery</p>
</li>
<li><p>✅ Peace of mind</p>
</li>
</ul>
<p>⚠️ <strong>Important:</strong> Always use a <strong>private GitHub repository</strong> for backups.</p>
<hr />
<h2 id="heading-what-were-building">What We’re Building</h2>
<p>A GitHub Actions workflow that:</p>
<ul>
<li><p>Uses <strong>Supabase CLI</strong></p>
</li>
<li><p>Backs up:</p>
<ul>
<li><p>roles</p>
</li>
<li><p>schema</p>
</li>
<li><p>data</p>
</li>
</ul>
</li>
<li><p>Runs:</p>
<ul>
<li><p>On push to <code>main</code></p>
</li>
<li><p>On pull requests</p>
</li>
<li><p>Daily (cron)</p>
</li>
<li><p>Manually</p>
</li>
</ul>
</li>
<li><p>Commits backups automatically</p>
</li>
</ul>
<hr />
<h2 id="heading-step-1-get-your-supabase-database-url">Step 1: Get Your Supabase Database URL</h2>
<p>Go to your <strong>Supabase Dashboard</strong> → select your project → click <strong>Connect</strong> (top-right).</p>
<p>You’ll see multiple connection options.</p>
<hr />
<h3 id="heading-direct-connection-vs-pooler-important-read">⚠️ Direct Connection vs Pooler (Important Read)</h3>
<p>Initially, I tried using the <strong>Direct Connection</strong> (port <code>5432</code>) like this:</p>
<pre><code class="lang-text">postgresql://postgres:[PASSWORD]@db.[project-ref].supabase.co:5432/postgres
</code></pre>
<p>But in GitHub Actions, this caused the following error:</p>
<pre><code class="lang-text">pg_dumpall: error: connection to server at "db.xxx.supabase.co" (2406:da18:...)
port 5432 failed: Network is unreachable
</code></pre>
<h4 id="heading-why-this-happens">Why This Happens</h4>
<ul>
<li><p>Supabase <strong>Free projects do not have dedicated IPv4</strong></p>
</li>
<li><p>DNS resolves the database host to <strong>IPv6</strong></p>
</li>
<li><p>GitHub Actions runners (<code>ubuntu-latest</code>) <strong>cannot reach Supabase IPv6 on port 5432</strong></p>
</li>
<li><p>Result: ❌ backup job fails</p>
</li>
</ul>
<p>You can fix this on <strong>paid Supabase plans</strong> by forcing IPv4 —<br />but on the <strong>Free tier</strong>, the reliable solution is the <strong>Connection Pooler</strong>.</p>
<hr />
<h3 id="heading-use-the-connection-pooler-recommended">✅ Use the Connection Pooler (Recommended)</h3>
<p>From the <strong>Connect</strong> dialog:</p>
<ul>
<li><p>Choose <strong>Connection Pooler</strong></p>
</li>
<li><p>Use <strong>Transaction mode</strong></p>
</li>
<li><p>Port: <strong>6543</strong></p>
</li>
</ul>
<p>Example:</p>
<pre><code class="lang-text">postgresql://postgres.[project-ref]:[PASSWORD]@db.[project-ref].supabase.co:6543/postgres
</code></pre>
<p>This works reliably in GitHub Actions and is perfect for backups.</p>
<hr />
<h2 id="heading-step-2-add-the-database-url-as-a-github-secret">Step 2: Add the Database URL as a GitHub Secret</h2>
<p>In your GitHub repository:</p>
<ol>
<li><p>Go to <strong>Settings → Secrets and variables → Actions</strong></p>
</li>
<li><p>Click <strong>New repository secret</strong></p>
</li>
<li><p>Add:</p>
</li>
</ol>
<pre><code class="lang-text">Name: SUPABASE_DB_URL  
Value: &lt;pooler connection string&gt;
</code></pre>
<p>Your credentials stay encrypted and never appear in logs.</p>
<hr />
<h2 id="heading-step-3-create-the-github-actions-workflow">Step 3: Create the GitHub Actions Workflow</h2>
<p>Create the file:</p>
<pre><code class="lang-text">.github/workflows/backup.yml
</code></pre>
<p>Paste this:</p>
<pre><code class="lang-yaml"><span class="hljs-attr">name:</span> <span class="hljs-string">Supabase</span> <span class="hljs-string">Backup</span>

<span class="hljs-attr">on:</span>
  <span class="hljs-attr">push:</span>
    <span class="hljs-attr">branches:</span> [ <span class="hljs-string">main</span> ]
  <span class="hljs-attr">pull_request:</span>
    <span class="hljs-attr">branches:</span> [ <span class="hljs-string">main</span> ]
  <span class="hljs-attr">workflow_dispatch:</span>
  <span class="hljs-attr">schedule:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">cron:</span> <span class="hljs-string">'0 0 * * *'</span> <span class="hljs-comment"># Daily</span>

<span class="hljs-attr">jobs:</span>
  <span class="hljs-attr">run_db_backup:</span>
    <span class="hljs-attr">runs-on:</span> <span class="hljs-string">ubuntu-latest</span>
    <span class="hljs-attr">permissions:</span>
      <span class="hljs-attr">contents:</span> <span class="hljs-string">write</span>
    <span class="hljs-attr">env:</span>
      <span class="hljs-attr">DATABASE_URL:</span> <span class="hljs-string">${{</span> <span class="hljs-string">secrets.SUPABASE_DB_URL</span> <span class="hljs-string">}}</span>

    <span class="hljs-attr">steps:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/checkout@v3</span>

      <span class="hljs-bullet">-</span> <span class="hljs-attr">uses:</span> <span class="hljs-string">supabase/setup-cli@v1</span>
        <span class="hljs-attr">with:</span>
          <span class="hljs-attr">version:</span> <span class="hljs-string">latest</span>

      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Create</span> <span class="hljs-string">backup</span> <span class="hljs-string">folder</span>
        <span class="hljs-attr">run:</span> <span class="hljs-string">mkdir</span> <span class="hljs-string">-p</span> <span class="hljs-string">supabase_backup</span>

      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Backup</span> <span class="hljs-string">roles</span>
        <span class="hljs-attr">run:</span> <span class="hljs-string">supabase</span> <span class="hljs-string">db</span> <span class="hljs-string">dump</span> <span class="hljs-string">--db-url</span> <span class="hljs-string">"$DATABASE_URL"</span> <span class="hljs-string">-f</span> <span class="hljs-string">supabase_backup/roles.sql</span> <span class="hljs-string">--role-only</span>

      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Backup</span> <span class="hljs-string">schema</span>
        <span class="hljs-attr">run:</span> <span class="hljs-string">supabase</span> <span class="hljs-string">db</span> <span class="hljs-string">dump</span> <span class="hljs-string">--db-url</span> <span class="hljs-string">"$DATABASE_URL"</span> <span class="hljs-string">-f</span> <span class="hljs-string">supabase_backup/schema.sql</span>

      <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Backup</span> <span class="hljs-string">data</span>
        <span class="hljs-attr">run:</span> <span class="hljs-string">supabase</span> <span class="hljs-string">db</span> <span class="hljs-string">dump</span> <span class="hljs-string">--db-url</span> <span class="hljs-string">"$DATABASE_URL"</span> <span class="hljs-string">-f</span> <span class="hljs-string">supabase_backup/data.sql</span> <span class="hljs-string">--data-only</span> <span class="hljs-string">--use-copy</span>

      <span class="hljs-bullet">-</span> <span class="hljs-attr">uses:</span> <span class="hljs-string">stefanzweifel/git-auto-commit-action@v4</span>
        <span class="hljs-attr">with:</span>
          <span class="hljs-attr">commit_message:</span> <span class="hljs-string">"Automated Supabase backup"</span>
</code></pre>
<hr />
<h2 id="heading-note-about-the-supabasebackup-folder">📁 Note About the <code>supabase_backup</code> Folder</h2>
<p>GitHub Actions can create folders during a run, but <strong>Git only tracks folders once a file exists</strong>.</p>
<p>To avoid confusion on the first run, it’s best to create the folder once.</p>
<h3 id="heading-quick-options">Quick Options</h3>
<p><strong>Option 1: Locally</strong></p>
<pre><code class="lang-bash">mkdir supabase_backup
git add supabase_backup
git commit -m <span class="hljs-string">"Add supabase backup folder"</span>
git push
</code></pre>
<p><strong>Option 2: On GitHub</strong></p>
<ul>
<li><p>Create a file named:</p>
<pre><code class="lang-text">  supabase_backup/.gitkeep
</code></pre>
</li>
<li><p>Commit it</p>
</li>
</ul>
<p>After this, the workflow will automatically dump backups into the folder.</p>
<hr />
<h2 id="heading-where-are-the-backups-stored">Where Are the Backups Stored?</h2>
<p>After each run, your repo will contain:</p>
<pre><code class="lang-text">supabase_backup/
├── roles.sql
├── schema.sql
└── data.sql
</code></pre>
<p>You can pull the repository anytime to access them.</p>
<hr />
<h2 id="heading-restoring-from-backup-quick-note">Restoring from Backup (Quick Note)</h2>
<p>To restore:</p>
<ol>
<li><p>Create a new Supabase project</p>
</li>
<li><p>Connect using <code>psql</code></p>
</li>
<li><p>Restore in order:</p>
<ul>
<li><p><code>roles.sql</code></p>
</li>
<li><p><code>schema.sql</code></p>
</li>
<li><p><code>data.sql</code></p>
</li>
</ul>
</li>
</ol>
<p>This article focuses on <strong>creating reliable, automated backups</strong>.</p>
<p>The <strong>step-by-step restore process</strong> deserves its own dedicated post, because it involves:</p>
<ul>
<li><p>Creating a fresh Supabase project</p>
</li>
<li><p>Restoring roles, schema, and data in the correct order</p>
</li>
<li><p>Handling extensions, ownership, and permissions safely</p>
</li>
</ul>
<p>👉 In the <strong>next blog</strong>, we’ll walk through the <strong>complete restore process</strong></p>
<hr />
<h2 id="heading-key-takeaways">Key Takeaways</h2>
<ul>
<li><p>Supabase backups can be fully automated</p>
</li>
<li><p>Free tier users should use the <strong>Connection Pooler</strong></p>
</li>
<li><p>Back up <strong>roles, schema, and data</strong></p>
</li>
<li><p>Store backups in a dedicated folder</p>
</li>
<li><p>Always use private repositories</p>
</li>
</ul>
<hr />
<h2 id="heading-reference">Reference</h2>
<p>Supabase Docs:<br /><a target="_blank" href="https://supabase.com/docs/guides/deployment/ci/backups">https://supabase.com/docs/guides/deployment/ci/backups</a></p>
<hr />
]]></content:encoded></item><item><title><![CDATA[Developers Guide to Running LLMs Locally with Ollama]]></title><description><![CDATA[Introduction: Why Run Your Own LLMs Locally?
Ever wondered what actually happens when you type a prompt into ChatGPT?Or better — what if you could run the same experience locally, without APIs, rate limits, or data leaving your machine? 🤯
That curio...]]></description><link>https://blog.akashy.com.np/developers-guide-to-running-llms-locally-with-ollama</link><guid isPermaLink="true">https://blog.akashy.com.np/developers-guide-to-running-llms-locally-with-ollama</guid><category><![CDATA[LLM's ]]></category><category><![CDATA[free]]></category><category><![CDATA[ollama]]></category><category><![CDATA[AI]]></category><dc:creator><![CDATA[Akash Yadav]]></dc:creator><pubDate>Sun, 11 Jan 2026 12:53:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768400244913/050c1e6d-6c61-4ce4-8f0c-9b168b99ac94.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction-why-run-your-own-llms-locally">Introduction: Why Run Your Own LLMs Locally?</h2>
<p>Ever wondered what actually happens when you type a prompt into ChatGPT?<br />Or better — what if you could run the same experience locally, without APIs, rate limits, or data leaving your machine? 🤯</p>
<p>That curiosity is exactly what led me to Ollama.</p>
<p>Running LLMs locally is no longer a “research lab only” thing. With modern tools and optimized models, developers can now spin up a personal AI assistant that feels shockingly close to ChatGPT — all on a laptop.</p>
<p>In this article, we’ll build our own ChatGPT-like setup locally using Ollama, understand what’s happening under the hood, and explore how far you can push it.</p>
<hr />
<h2 id="heading-what-problem-are-we-solving">What Problem Are We Solving?</h2>
<p>Cloud-based LLMs are amazing, but they come with trade-offs:</p>
<p>❌ Data privacy concerns<br />❌ API costs &amp; usage limits<br />❌ Internet dependency<br />❌ Limited control over models</p>
<p>Local LLMs solve this by giving you:</p>
<p>✅ Full control<br />✅ Offline usage<br />✅ Zero per-request cost<br />✅ Customization freedom</p>
<p>That’s where Ollama shines.</p>
<hr />
<h2 id="heading-what-is-ollama">What Is Ollama?</h2>
<p>Ollama is a developer-friendly tool that lets you download, manage, and run large language models <strong>both locally and via Ollama Cloud</strong> using a simple CLI and API.</p>
<p>Think of it as:</p>
<p><strong>Docker for LLMs 🐳🤖</strong></p>
<p>Instead of building inference pipelines from scratch, Ollama abstracts away:</p>
<ul>
<li><p>Model downloads</p>
</li>
<li><p>Quantization</p>
</li>
<li><p>GPU/CPU optimizations</p>
</li>
<li><p>Runtime management</p>
</li>
</ul>
<p>You just run a command — and boom, your local ChatGPT is alive.</p>
<hr />
<h2 id="heading-step-1-install-ollama">Step 1: Install Ollama</h2>
<h3 id="heading-macos-linux">macOS / Linux</h3>
<pre><code class="lang-bash">curl -fsSL https://ollama.com/install.sh | sh
</code></pre>
<h3 id="heading-windows">Windows</h3>
<p>Download directly from:<br />👉 <a target="_blank" href="https://ollama.com/">https://ollama.com</a></p>
<p>Once installed, verify:</p>
<pre><code class="lang-bash">ollama --version
</code></pre>
<p>If that works, you’re good to go ✅</p>
<hr />
<h2 id="heading-step-2-log-in-to-ollama-local-vs-cloud-models">Step 2: Log In to Ollama (Local vs Cloud Models)</h2>
<p>Before running models, it’s important to understand that <strong>Ollama supports both local and cloud-based models</strong>.</p>
<p>To access cloud features, you’ll need to log in:</p>
<pre><code class="lang-bash">ollama login
</code></pre>
<p>This connects your CLI to your Ollama account.</p>
<h3 id="heading-why-this-matters">Why this matters</h3>
<ul>
<li><p><strong>Local models</strong></p>
<ul>
<li><p>Run entirely on your machine</p>
</li>
<li><p>Fully offline</p>
</li>
<li><p>No usage limits</p>
</li>
<li><p>Maximum privacy</p>
</li>
</ul>
</li>
<li><p><strong>Cloud models</strong></p>
<ul>
<li><p>Run on Ollama’s infrastructure</p>
</li>
<li><p>Faster startup for large models</p>
</li>
<li><p>Subject to <strong>hourly and weekly usage limits</strong></p>
</li>
<li><p>Useful when your hardware is limited</p>
</li>
</ul>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768233661627/f7b36423-694f-44ae-8b0c-f0a57003f290.png" alt class="image--center mx-auto" /></p>
<p>The key thing I love:<br /><strong>you choose per model whether it runs locally or in the cloud.</strong></p>
<hr />
<h2 id="heading-step-3-run-your-first-local-llm">Step 3: Run Your First Local LLM</h2>
<p>Let’s start with a popular ChatGPT-like local model:</p>
<pre><code class="lang-bash">ollama run llama3
</code></pre>
<p>That’s it. This will download and run llama3 on your local</p>
<p>No API keys.<br />No environment variables.<br />No cloud setup.</p>
<p>You’re now chatting with a <strong>local LLM running on your own machine</strong>.</p>
<hr />
<h2 id="heading-step-4-understanding-whats-happening-under-the-hood">Step 4: Understanding What’s Happening Under the Hood</h2>
<p>Behind the scenes, Ollama:</p>
<ul>
<li><p>Downloads the model weights</p>
</li>
<li><p>Optimizes them for your hardware</p>
</li>
<li><p>Starts a local inference server</p>
</li>
<li><p>Streams responses token-by-token</p>
</li>
</ul>
<p>If you’ve used ChatGPT before, the experience feels… familiar 👀</p>
<hr />
<h2 id="heading-step-5-running-ollama-as-a-local-chatgpt-api">Step 5: Running Ollama as a Local ChatGPT API</h2>
<p>Ollama also exposes a local HTTP API, which means you can connect it to:</p>
<ul>
<li><p>Web apps</p>
</li>
<li><p>Desktop apps</p>
</li>
<li><p>VS Code extensions</p>
</li>
<li><p>Custom UIs</p>
</li>
</ul>
<p>Start the Ollama server:</p>
<pre><code class="lang-bash">ollama serve
</code></pre>
<p>Example API request:</p>
<pre><code class="lang-bash">curl http://localhost:11434/api/generate -d <span class="hljs-string">'{
  "model": "llama3",
  "prompt": "Explain transformers like I am a developer"
}'</span>
</code></pre>
<p>Congrats — you now have a <strong>self-hosted ChatGPT backend</strong> 🔥</p>
<hr />
<h2 id="heading-step-6-building-a-simple-chat-ui-concept">Step 6: Building a Simple Chat UI (Concept)</h2>
<p>At this point, the architecture looks like this:</p>
<pre><code class="lang-plaintext">Frontend (React / Next.js / CLI)
        ↓
Local Ollama API
        ↓
LLM Model (LLaMA, Mistral, etc.)
</code></pre>
<p>You can:</p>
<ul>
<li><p>Build a React chat UI</p>
</li>
<li><p>Store conversation history</p>
</li>
<li><p>Add system prompts</p>
</li>
<li><p>Create AI agents</p>
</li>
<li><p>Run everything offline</p>
</li>
</ul>
<p>This is where things get really fun.</p>
<hr />
<h2 id="heading-useful-models-to-try">Useful Models to Try</h2>
<p>List installed models:</p>
<pre><code class="lang-bash">ollama list
</code></pre>
<p>Popular options:</p>
<ul>
<li><p><strong>llama3</strong> – Best ChatGPT-like experience</p>
</li>
<li><p><strong>mistral</strong> – Fast &amp; lightweight</p>
</li>
<li><p><strong>codellama</strong> – Code-focused</p>
</li>
<li><p><strong>phi</strong> – Small &amp; efficient</p>
</li>
</ul>
<p>Switch instantly:</p>
<pre><code class="lang-bash">ollama run mistral
</code></pre>
<hr />
<h2 id="heading-common-pitfalls-learned-the-hard-way">Common Pitfalls (Learned the Hard Way)</h2>
<p>🧠 RAM matters — 8GB works, 16GB is smoother<br />🔥 CPU-only works, GPU is a big win<br />📦 Larger models ≠ always better<br />📝 Prompt quality matters more than model size</p>
<p>Local LLMs reward clear intent, not brute force.</p>
<hr />
<h2 id="heading-when-should-you-use-local-llms">When Should You Use Local LLMs?</h2>
<p>Perfect for:</p>
<ul>
<li><p>Learning how LLMs work</p>
</li>
<li><p>Prototyping AI products</p>
</li>
<li><p>Internal tools</p>
</li>
<li><p>Privacy-sensitive data</p>
</li>
<li><p>AI experimentation &amp; agents</p>
</li>
</ul>
<p>Not ideal for:</p>
<ul>
<li><p>Massive production scale</p>
</li>
<li><p>Multi-user public apps (yet)</p>
</li>
</ul>
<hr />
<h2 id="heading-what-i-personally-love-about-this-setup">What I Personally Love About This Setup</h2>
<p>Running ChatGPT locally feels empowering.</p>
<p>You stop being a <strong>consumer of AI</strong><br />and start becoming a <strong>builder with AI</strong> 🛠️🤖</p>
<p>It completely changes how you think about:</p>
<ul>
<li><p>App architecture</p>
</li>
<li><p>Privacy</p>
</li>
<li><p>AI UX</p>
</li>
<li><p>Tooling</p>
</li>
</ul>
<p>And honestly?<br />Once you try this, cloud-only AI feels limiting.</p>
<hr />
<h2 id="heading-conclusion-your-ai-your-rules">Conclusion: Your AI, Your Rules</h2>
<p>With Ollama, building your own ChatGPT is no longer magic — it’s just good tooling.</p>
<p>If you’re a developer exploring AI, this is one of those setups that:</p>
<ul>
<li><p>Teaches you fast</p>
</li>
<li><p>Unlocks experimentation</p>
</li>
<li><p>Makes AI feel tangible</p>
</li>
</ul>
<h3 id="heading-next-steps">Next steps</h3>
<ul>
<li><p>Build a chat UI</p>
</li>
<li><p>Add memory</p>
</li>
<li><p>Connect tools</p>
</li>
<li><p>Create AI agents</p>
</li>
</ul>
<p>Local AI is here — and it’s 🔥</p>
<hr />
<h2 id="heading-key-takeaways">Key Takeaways</h2>
<ul>
<li><p>Ollama supports <strong>both local and cloud models</strong></p>
</li>
<li><p>Cloud usage comes with <strong>hourly &amp; weekly limits</strong></p>
</li>
<li><p>Local models give full privacy and control</p>
</li>
<li><p>You can build a ChatGPT-like experience in minutes</p>
</li>
<li><p>Perfect playground for hands-on AI experimentation</p>
</li>
</ul>
<hr />
]]></content:encoded></item></channel></rss>