<?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>Forem: Adithyan G</title>
    <description>The latest articles on Forem by Adithyan G (@adithyan_g_6f3e606905eed7).</description>
    <link>https://forem.com/adithyan_g_6f3e606905eed7</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3680021%2Fb0a9cb0c-6db1-43d9-8187-6abf715fed57.png</url>
      <title>Forem: Adithyan G</title>
      <link>https://forem.com/adithyan_g_6f3e606905eed7</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/adithyan_g_6f3e606905eed7"/>
    <language>en</language>
    <item>
      <title>Bulk Applicant Dispatcher — A Privacy-First MERN Stack Application for Smart Job Hunting</title>
      <dc:creator>Adithyan G</dc:creator>
      <pubDate>Wed, 25 Feb 2026 07:09:46 +0000</pubDate>
      <link>https://forem.com/adithyan_g_6f3e606905eed7/bulk-applicant-dispatcher-a-privacy-first-mern-stack-application-for-smart-job-hunting-l4n</link>
      <guid>https://forem.com/adithyan_g_6f3e606905eed7/bulk-applicant-dispatcher-a-privacy-first-mern-stack-application-for-smart-job-hunting-l4n</guid>
      <description>&lt;p&gt;Applying to jobs as a fresher can feel repetitive, overwhelming, and unstructured.&lt;/p&gt;

&lt;p&gt;You find dozens of openings.&lt;br&gt;&lt;br&gt;
You copy-paste emails.&lt;br&gt;&lt;br&gt;
You attach resumes repeatedly.&lt;br&gt;&lt;br&gt;
You try to track who you’ve contacted.&lt;br&gt;&lt;br&gt;
You worry about accidentally emailing the same recruiter twice.&lt;/p&gt;

&lt;p&gt;To solve this, I built &lt;strong&gt;Bulk Applicant Dispatcher&lt;/strong&gt; — a locally hosted MERN stack application designed to help job seekers send multiple applications efficiently, professionally, and safely.&lt;/p&gt;

&lt;p&gt;This is not a marketing spam tool.&lt;br&gt;&lt;br&gt;
It is a structured, privacy-first job application system.&lt;/p&gt;


&lt;h1&gt;
  
  
  💡 The Problem
&lt;/h1&gt;

&lt;p&gt;Most job seekers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Send applications manually&lt;/li&gt;
&lt;li&gt;Struggle to track recruiter responses&lt;/li&gt;
&lt;li&gt;Risk duplicate emailing&lt;/li&gt;
&lt;li&gt;Use third-party tools that store sensitive data externally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Existing bulk email tools are usually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designed for marketing campaigns&lt;/li&gt;
&lt;li&gt;Cloud-based&lt;/li&gt;
&lt;li&gt;Not privacy-focused&lt;/li&gt;
&lt;li&gt;Lacking cooldown safeguards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted a system that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runs entirely on localhost
&lt;/li&gt;
&lt;li&gt;Uses my own Gmail securely
&lt;/li&gt;
&lt;li&gt;Enforces responsible email scheduling
&lt;/li&gt;
&lt;li&gt;Keeps all personal data under my control
&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;
  
  
  🔐 Core Philosophy: Privacy First
&lt;/h1&gt;

&lt;p&gt;Bulk Applicant Dispatcher runs &lt;strong&gt;100% locally&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No external server&lt;/li&gt;
&lt;li&gt;No cloud database&lt;/li&gt;
&lt;li&gt;No third-party email relay&lt;/li&gt;
&lt;li&gt;No external storage of resumes or contacts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything — templates, company lists, history logs — is stored in a local MongoDB instance.&lt;/p&gt;

&lt;p&gt;Your data never leaves your machine.&lt;/p&gt;


&lt;h1&gt;
  
  
  ✨ Key Features
&lt;/h1&gt;
&lt;h2&gt;
  
  
  🧠 Smart Cooldown Mechanism (15 Days)
&lt;/h2&gt;

&lt;p&gt;One of the most important features.&lt;/p&gt;

&lt;p&gt;The system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tracks every dispatched email&lt;/li&gt;
&lt;li&gt;Stores recipient email + timestamp&lt;/li&gt;
&lt;li&gt;Prevents sending duplicate applications within 15 days&lt;/li&gt;
&lt;li&gt;Allows a &lt;strong&gt;Force Send override&lt;/strong&gt; when necessary&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Cooldown Logic Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lastEmailDate&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;daysSinceLastEmail&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;forceSend&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;skipEmail&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;sendEmail&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This ensures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Professional outreach&lt;/li&gt;
&lt;li&gt;Reduced spam risk&lt;/li&gt;
&lt;li&gt;Safer Gmail usage&lt;/li&gt;
&lt;li&gt;Controlled automation&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Editable Plain-Text Templates
&lt;/h2&gt;

&lt;p&gt;Instead of copying and pasting from Word documents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write professional cover letters directly in the app&lt;/li&gt;
&lt;li&gt;Save multiple template variations&lt;/li&gt;
&lt;li&gt;Easily switch between them&lt;/li&gt;
&lt;li&gt;Use structured profile data for personalization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app reads user details from a local profile.json file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"name"&lt;/span&gt;: &lt;span class="s2"&gt;"Your Full Name"&lt;/span&gt;,
  &lt;span class="s2"&gt;"my_place"&lt;/span&gt;: &lt;span class="s2"&gt;"Your City, Country"&lt;/span&gt;,
  &lt;span class="s2"&gt;"phone_no"&lt;/span&gt;: &lt;span class="s2"&gt;"+91 1234567890"&lt;/span&gt;,
  &lt;span class="s2"&gt;"my_email"&lt;/span&gt;: &lt;span class="s2"&gt;"your_email_id@gmail.com"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Templates dynamically populate this data during dispatch.&lt;/p&gt;

&lt;p&gt;No HTML required. Just clean, readable English.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built-In Contact Manager
&lt;/h2&gt;

&lt;p&gt;Managing contacts through spreadsheets becomes messy quickly.&lt;/p&gt;

&lt;p&gt;This system allows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manual company entry via UI&lt;/li&gt;
&lt;li&gt;Bulk import using JSON&lt;/li&gt;
&lt;li&gt;Easy editing and deletion&lt;/li&gt;
&lt;li&gt;Structured storage inside MongoDB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As companies are added, a companies.json file is automatically generated inside the server directory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dashboard &amp;amp; Application Tracking
&lt;/h2&gt;

&lt;p&gt;The dashboard provides structured visibility into your job hunt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total applications sent&lt;/li&gt;
&lt;li&gt;Pending contacts&lt;/li&gt;
&lt;li&gt;Total companies added&lt;/li&gt;
&lt;li&gt;Full application history&lt;/li&gt;
&lt;li&gt;Timestamped logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns job hunting into a measurable workflow instead of chaos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Force Sending Override
&lt;/h2&gt;

&lt;p&gt;Sometimes urgency matters.&lt;/p&gt;

&lt;p&gt;The app allows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Force sending to a specific recruiter&lt;/li&gt;
&lt;li&gt;Force sending an entire batch&lt;/li&gt;
&lt;li&gt;Bypassing cooldown when required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Automation with control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technology Stack
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;React (v19)&lt;/li&gt;
&lt;li&gt;Vite
### Backend&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Node.js &amp;amp; Express.js&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email dispatch logic&lt;/li&gt;
&lt;li&gt;Cooldown validation&lt;/li&gt;
&lt;li&gt;API routing&lt;/li&gt;
&lt;li&gt;Template processing&lt;/li&gt;
&lt;li&gt;Communication between frontend and backend&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Nodemailer&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gmail SMTP connection&lt;/li&gt;
&lt;li&gt;Secure authentication via App Password&lt;/li&gt;
&lt;li&gt;Resume attachment&lt;/li&gt;
&lt;li&gt;Bulk email dispatching&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Uses Google App Password authentication (not your regular Gmail password).&lt;/p&gt;

&lt;h3&gt;
  
  
  MongoDB &amp;amp; Mongoose
&lt;/h3&gt;

&lt;p&gt;Local database storing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Contact list&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Templates&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Email history&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cooldown metadata&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dispatch logs&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using MongoDB provides flexible and structured storage for scalable tracking.&lt;br&gt;
Environment Configuration&lt;/p&gt;

&lt;p&gt;Inside server/.env:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;EMAIL_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_real_email_id@gmail.com
&lt;span class="nv"&gt;EMAIL_PASS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_gmail_app_password
&lt;span class="nv"&gt;MONGO_URI&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mongodb://localhost:27017/bulk_email_sender
&lt;span class="nv"&gt;PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3000
&lt;span class="nv"&gt;resumePath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_resume_name.pdf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Important: Gmail App Password
&lt;/h3&gt;

&lt;p&gt;You must generate an App Password:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to Google Account → Security&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable 2-Step Verification&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generate App Password&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Paste the 16-character key into .env&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Never use your actual Gmail password.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage Flow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add contacts manually or import JSON.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Edit or create email templates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure resume is placed inside server/resumes/.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click Start Run.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;System checks cooldown.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Eligible contacts receive emails.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;History updates automatically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Everything runs locally.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What This Project Demonstrates
&lt;/h2&gt;

&lt;p&gt;This project goes beyond CRUD operations.&lt;/p&gt;

&lt;p&gt;It demonstrates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;SMTP automation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cooldown / rate-limiting logic&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Secure environment configuration&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Structured MERN architecture&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Privacy-first system design&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real-world application tracking&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Responsible Usage Notice
&lt;/h2&gt;

&lt;p&gt;This tool is strictly for ethical, professional job applications.&lt;/p&gt;

&lt;p&gt;It is not intended for spam, unsolicited marketing, or misuse.&lt;/p&gt;

&lt;p&gt;The cooldown system exists to promote respectful communication and protect both users and recruiters.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Written by Adithyan G&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Portfolio: &lt;a href="https://adithyan-phi.vercel.app/" rel="noopener noreferrer"&gt;https://adithyan-phi.vercel.app/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Clowbot AI Complete Guide: Setup, Installation, Security Risks &amp; Best Practices</title>
      <dc:creator>Adithyan G</dc:creator>
      <pubDate>Mon, 23 Feb 2026 16:19:46 +0000</pubDate>
      <link>https://forem.com/adithyan_g_6f3e606905eed7/clowbot-ai-complete-guide-setup-installation-security-risks-best-practices-57li</link>
      <guid>https://forem.com/adithyan_g_6f3e606905eed7/clowbot-ai-complete-guide-setup-installation-security-risks-best-practices-57li</guid>
      <description>&lt;h2&gt;
  
  
  Introduction to Clowbot AI
&lt;/h2&gt;

&lt;p&gt;Clowbot AI is an AI-powered chatbot platform designed to automate conversations across websites and digital channels. It enables businesses to deploy intelligent bots capable of answering FAQs, capturing leads, guiding users through workflows, and supporting customer service operations.&lt;/p&gt;

&lt;p&gt;With natural language processing (NLP) capabilities, Clowbot AI can interpret user intent and provide contextual responses in real time. The platform is typically used in industries such as e-commerce, SaaS, education, and online services to reduce response time, improve engagement, and streamline repetitive communication tasks.&lt;/p&gt;

&lt;p&gt;However, like all AI-driven automation systems, proper configuration, security awareness, and ongoing monitoring are critical for safe and effective deployment.&lt;/p&gt;




&lt;h1&gt;
  
  
  System Requirements
&lt;/h1&gt;

&lt;p&gt;Clowbot AI is generally cloud-based, meaning no heavy local installation is required. Most users only need a compatible browser and stable internet connection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Minimum PC Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Operating System:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows 10 or later&lt;/li&gt;
&lt;li&gt;macOS 10.13 or later&lt;/li&gt;
&lt;li&gt;Linux (Ubuntu 18.04+ or equivalent)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Processor:&lt;/strong&gt; Dual-core 2.0 GHz or higher  &lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;RAM:&lt;/strong&gt; 4 GB minimum (8 GB recommended)  &lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Storage:&lt;/strong&gt; At least 500 MB free  &lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Browser:&lt;/strong&gt; Latest version of Chrome, Firefox, or Edge  &lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Internet:&lt;/strong&gt; Stable broadband connection (5 Mbps or higher recommended)&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;For developers integrating APIs, additional tools such as Node.js or Python may be required.&lt;/p&gt;




&lt;h1&gt;
  
  
  Installation Guide (All Platforms)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Web-Based Installation (Recommended)
&lt;/h2&gt;

&lt;p&gt;Clowbot AI is typically accessed through a web dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open your browser.&lt;/li&gt;
&lt;li&gt;Visit the official Clowbot AI website.&lt;/li&gt;
&lt;li&gt;Sign up or log in.&lt;/li&gt;
&lt;li&gt;Access your dashboard.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There is &lt;strong&gt;no command-line installation required&lt;/strong&gt; for standard usage.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Windows Installation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Browser-Based
&lt;/h3&gt;

&lt;p&gt;No installation command is needed. Use a supported browser.&lt;/p&gt;

&lt;h3&gt;
  
  
  Desktop Client (If Provided)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Download the &lt;code&gt;.exe&lt;/code&gt; installer.&lt;/li&gt;
&lt;li&gt;Run the installer.&lt;/li&gt;
&lt;li&gt;Follow on-screen instructions.&lt;/li&gt;
&lt;li&gt;Launch from the Start Menu.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  3. macOS Installation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Browser-Based
&lt;/h3&gt;

&lt;p&gt;Access directly through Safari or Chrome.&lt;/p&gt;

&lt;h3&gt;
  
  
  Desktop App (If Available)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Download the &lt;code&gt;.dmg&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;Drag the app to Applications.&lt;/li&gt;
&lt;li&gt;Launch normally.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  4. Linux Installation
&lt;/h2&gt;

&lt;p&gt;For browser usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;firefox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then log in through the browser.&lt;br&gt;
If a Linux AppImage is provided:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x clowbot.AppImage
./clowbot.AppImage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only use commands officially provided by the vendor.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Set Up Clowbot AI
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Create an Account
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Register on the official website.&lt;/li&gt;
&lt;li&gt;Verify your email.&lt;/li&gt;
&lt;li&gt;Log in to the dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Create a New Bot
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to the dashboard.&lt;/li&gt;
&lt;li&gt;Click Create New Bot.&lt;/li&gt;
&lt;li&gt;Enter:

&lt;ul&gt;
&lt;li&gt;Item one&lt;/li&gt;
&lt;li&gt;Bot name&lt;/li&gt;
&lt;li&gt;Business name&lt;/li&gt;
&lt;li&gt;Use case (Support, FAQ, Lead  Generation)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Choose a template or start from scratch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Configure Basic Settings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Add a welcome message.&lt;/li&gt;
&lt;li&gt;Upload branding elements.&lt;/li&gt;
&lt;li&gt;Customize colors.&lt;/li&gt;
&lt;li&gt;Set fallback responses for unknown queries.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 4: Build Conversation Flows
&lt;/h3&gt;

&lt;p&gt;Using the visual builder:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add structured FAQ blocks.&lt;/li&gt;
&lt;li&gt;Create button-based responses.&lt;/li&gt;
&lt;li&gt;Configure conditional logic.&lt;/li&gt;
&lt;li&gt;Add lead capture forms.
Keep flows clear and goal-oriented.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 5: Train the AI
&lt;/h3&gt;

&lt;p&gt;Improve performance by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding FAQs.&lt;/li&gt;
&lt;li&gt;Including multiple variations of * user questions.&lt;/li&gt;
&lt;li&gt;Defining precise answers.&lt;/li&gt;
&lt;li&gt;Updating training data regularly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 6: Integrate with Your Website
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Copy the embed script.&lt;/li&gt;
&lt;li&gt;Paste it before the

&lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt;

tag.&lt;/li&gt;
&lt;li&gt;Publish your website.
Alternatively, use CMS plugins if supported.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 7: Test Before Going Live
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Test all conversation paths.&lt;/li&gt;
&lt;li&gt;Verify lead capture.&lt;/li&gt;
&lt;li&gt;Test fallback responses.&lt;/li&gt;
&lt;li&gt;Use incognito mode for realistic testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 8: Monitor &amp;amp; Optimize
&lt;/h3&gt;

&lt;p&gt;Track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chat volume&lt;/li&gt;
&lt;li&gt;Engagement rates&lt;/li&gt;
&lt;li&gt;Conversions&lt;/li&gt;
&lt;li&gt;Drop-off points
Refine workflows based on analytics.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security Concerns &amp;amp; Industry Risks
&lt;/h2&gt;

&lt;p&gt;While chatbot platforms provide automation benefits, related projects in the ecosystem (including similarly named AI agents) have faced security discussions.&lt;/p&gt;

&lt;h4&gt;
  
  
  Reported Technical Risks (OpenClaw / Related Projects)
&lt;/h4&gt;

&lt;p&gt;Some AI agent projects have disclosed vulnerabilities such as:&lt;/p&gt;

&lt;h5&gt;
  
  
  Log-Poisoning
&lt;/h5&gt;

&lt;p&gt;A vulnerability where attackers could inject malicious instructions into system logs, potentially influencing agent behavior.&lt;/p&gt;

&lt;h5&gt;
  
  
  Prompt Injection
&lt;/h5&gt;

&lt;p&gt;Attackers may embed hidden instructions within user inputs, leading AI systems to perform unintended actions—especially dangerous if connected to crypto tools or sensitive APIs.&lt;/p&gt;

&lt;p&gt;These are software-level risks and not confirmed large-scale financial breaches, but they highlight architectural concerns in AI agent systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scam &amp;amp; Token Misuse Risks
&lt;/h3&gt;

&lt;p&gt;Reports have indicated scammers used similar branding to launch fake tokens (e.g., “CLAWD”) claiming affiliation with AI projects.&lt;/p&gt;

&lt;p&gt;Typical pattern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Launch token with familiar branding.&lt;/li&gt;
&lt;li&gt;Inflate price via hype.&lt;/li&gt;
&lt;li&gt;Dump holdings.&lt;/li&gt;
&lt;li&gt;Token crashes (reportedly ~90% in one case).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Always verify official channels before purchasing tokens associated with AI projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Trading &amp;amp; Automation Risks
&lt;/h3&gt;

&lt;p&gt;If Clowbot or related systems are integrated into financial automation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bots can execute unintended large trades.&lt;/li&gt;
&lt;li&gt;Market volatility can amplify losses.&lt;/li&gt;
&lt;li&gt;Misconfiguration can multiply risk exposure.
Automation increases efficiency—but also magnifies errors.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Important Disclaimer
&lt;/h3&gt;

&lt;p&gt;This blog is for informational purposes only and does not constitute financial, legal, or cybersecurity advice.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI bots require proper configuration and monitoring.&lt;/li&gt;
&lt;li&gt;Automated trading carries financial risk.&lt;/li&gt;
&lt;li&gt;Always verify official sources before investing.&lt;/li&gt;
&lt;li&gt;Use limited API permissions when connecting to exchanges.&lt;/li&gt;
&lt;li&gt;Start with minimal capital when testing automation systems.
AI automation tools are powerful—but they must be used responsibly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Written by Adithyan G, MERN stack developer.&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Portfolio: &lt;a href="https://adithyan-phi.vercel.app/" rel="noopener noreferrer"&gt;adithyan-phi.vercel.app/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>clowbot</category>
      <category>openclaw</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Understanding Git and GitHub as a Beginner</title>
      <dc:creator>Adithyan G</dc:creator>
      <pubDate>Sat, 24 Jan 2026 10:37:34 +0000</pubDate>
      <link>https://forem.com/adithyan_g_6f3e606905eed7/understanding-git-and-github-as-a-345j</link>
      <guid>https://forem.com/adithyan_g_6f3e606905eed7/understanding-git-and-github-as-a-345j</guid>
      <description>&lt;p&gt;When I first started learning to code, &lt;strong&gt;Git&lt;/strong&gt; and &lt;strong&gt;GitHub&lt;/strong&gt; were two things that completely confused me.&lt;br&gt;&lt;br&gt;
I kept asking myself questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are Git and GitHub the same thing?&lt;/li&gt;
&lt;li&gt;Why do I need them?&lt;/li&gt;
&lt;li&gt;What does &lt;code&gt;commit&lt;/code&gt;, &lt;code&gt;push&lt;/code&gt;, or &lt;code&gt;pull&lt;/code&gt; even mean?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re a beginner and feel the same way, this post is for you. I’ll explain Git and GitHub &lt;strong&gt;in simple terms&lt;/strong&gt;, without assuming prior knowledge.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Is Git?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Git is a version control system.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That sounds complex, but here’s a simple way to think about it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Git is like a &lt;strong&gt;save history&lt;/strong&gt; for your code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of having files like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;project-final&lt;/li&gt;
&lt;li&gt;project-final-v2&lt;/li&gt;
&lt;li&gt;project-final-really-final&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Git keeps track of &lt;strong&gt;every change&lt;/strong&gt; you make in an organized way. You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go back to older versions&lt;/li&gt;
&lt;li&gt;See what changed and when&lt;/li&gt;
&lt;li&gt;Experiment without fear of breaking everything&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Git works &lt;strong&gt;locally on your computer&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Is GitHub?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub is a platform that stores Git repositories online.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If Git is your local save history, then GitHub is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;backup&lt;/strong&gt; of your code on the internet&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;collaboration platform&lt;/strong&gt; for working with others&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;portfolio&lt;/strong&gt; to show your projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Git&lt;/strong&gt; → version control tool
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt; → place to host Git repositories&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Repository (Repo)
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;repository&lt;/strong&gt; is just a project folder that Git is tracking.&lt;/p&gt;

&lt;p&gt;It contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your project files&lt;/li&gt;
&lt;li&gt;The entire history of changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can have repositories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Locally (on your machine)&lt;/li&gt;
&lt;li&gt;Remotely (on GitHub)&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Basic Git Workflow (Beginner-Friendly)
&lt;/h2&gt;

&lt;p&gt;Here’s the basic flow most beginners use:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make changes to your code&lt;/li&gt;
&lt;li&gt;Tell Git which files you want to save&lt;/li&gt;
&lt;li&gt;Save those changes with a message&lt;/li&gt;
&lt;li&gt;Send them to GitHub&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let’s break that down.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;code&gt;git init&lt;/code&gt; – Start Tracking a Project
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This command tells Git:&lt;/p&gt;

&lt;p&gt;“Start tracking this folder.”&lt;/p&gt;

&lt;p&gt;It creates a hidden .git folder that stores the history&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;code&gt;git status&lt;/code&gt; – Check What’s Going On
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Which files were changed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which files are ready to be saved&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which files are not tracked yet&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is one of the most useful Git commands.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;code&gt;git add&lt;/code&gt; – Stage Changes
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This tells Git:&lt;/p&gt;

&lt;p&gt;“I want to include these changes in the next save.”&lt;/p&gt;

&lt;p&gt;Think of this like selecting files before clicking Save.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;code&gt;git commit&lt;/code&gt; – Save Changes
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Add initial project files"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A commit is a snapshot of your project at a point in time.&lt;/p&gt;

&lt;p&gt;The message should briefly explain what changed.&lt;/p&gt;

&lt;p&gt;Good commit messages matter more than you think.&lt;/p&gt;
&lt;h2&gt;
  
  
  Connecting Git to GitHub
&lt;/h2&gt;

&lt;p&gt;Once your project is on GitHub, you connect it to your local project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote add origin &amp;lt;repository-url&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now Git knows where your remote repository lives.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;git push&lt;/code&gt; – Send Code to GitHub
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This uploads your commits from your computer to GitHub.&lt;/p&gt;

&lt;p&gt;If GitHub is empty and your local project has code, this is how you publish it.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;git pull&lt;/code&gt; – Get Updates from GitHub
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git pull origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This brings changes from GitHub to your local machine.&lt;/p&gt;

&lt;p&gt;Useful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You’re working on multiple devices&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You’re collaborating with others&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Branches (Very Simple Explanation)
&lt;/h2&gt;

&lt;p&gt;A branch is a separate line of development.&lt;/p&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Experiment safely&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Work on features without breaking the main code&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Beginners usually start with the &lt;code&gt;main&lt;/code&gt; branch, and that’s perfectly fine.&lt;/p&gt;

&lt;p&gt;Common Beginner Mistakes (I Made These)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Being afraid of Git commands&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Forgetting to commit often&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Writing vague commit messages&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Thinking GitHub automatically saves code&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Git only saves when you tell it to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Git and GitHub Matter
&lt;/h2&gt;

&lt;p&gt;Even as a beginner, Git and GitHub help you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Build good habits early&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Track progress over time&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Collaborate confidently&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a public coding portfolio&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don’t need to master everything at once. Just understanding the basics is enough to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Git and GitHub feel overwhelming at first, but they become clearer with practice.&lt;br&gt;
The key is to use them regularly, even for small projects.&lt;/p&gt;

&lt;p&gt;If you’re learning to code, start using Git now, not later.&lt;/p&gt;

&lt;p&gt;Thanks for reading. If you’re also a beginner, feel free to share your experience or ask questions in the comments.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Written by Adithyan G, MERN stack developer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Portfolio:&lt;/em&gt; &lt;a href="https://adithyan-phi.vercel.app" rel="noopener noreferrer"&gt;adithyan-phi.vercel.app/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>git</category>
      <category>github</category>
    </item>
    <item>
      <title>Will AI Replace Web Developers? Or Are We Entering the Era of Vibe Coding?</title>
      <dc:creator>Adithyan G</dc:creator>
      <pubDate>Mon, 05 Jan 2026 09:10:04 +0000</pubDate>
      <link>https://forem.com/adithyan_g_6f3e606905eed7/will-ai-replace-web-developers-or-are-we-entering-the-era-of-vibe-coding-22cm</link>
      <guid>https://forem.com/adithyan_g_6f3e606905eed7/will-ai-replace-web-developers-or-are-we-entering-the-era-of-vibe-coding-22cm</guid>
      <description>&lt;p&gt;AI tools like ChatGPT, GitHub Copilot, and Cursor have changed how we write code.&lt;br&gt;&lt;br&gt;
A question every developer is asking now is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Will AI replace web developers?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No, It’s changing &lt;em&gt;how&lt;/em&gt; we code — not &lt;em&gt;who&lt;/em&gt; codes.&lt;/p&gt;

&lt;p&gt;Welcome to the era of &lt;strong&gt;Vibe Coding&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 What Is Vibe Coding?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Vibe coding&lt;/strong&gt; means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You focus on &lt;strong&gt;what you want to build&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;AI helps you with &lt;strong&gt;how to write it faster&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of writing every line manually, you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Describe features&lt;/li&gt;
&lt;li&gt;Ask AI for boilerplate&lt;/li&gt;
&lt;li&gt;Refactor, optimize, and validate the output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’re still the &lt;strong&gt;architect&lt;/strong&gt; — AI is the &lt;strong&gt;assistant&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ❌ Why AI Won’t Replace Web Developers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1️⃣ AI Doesn’t Understand Business Context
&lt;/h3&gt;

&lt;p&gt;AI can generate code, but it doesn’t understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Client requirements&lt;/li&gt;
&lt;li&gt;User behavior&lt;/li&gt;
&lt;li&gt;Business goals&lt;/li&gt;
&lt;li&gt;Real-world constraints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers translate &lt;strong&gt;human problems into technical solutions&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
AI only reacts to prompts.&lt;/p&gt;




&lt;h3&gt;
  
  
  2️⃣ AI Can Write Code, But Not Systems
&lt;/h3&gt;

&lt;p&gt;AI is good at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Components&lt;/li&gt;
&lt;li&gt;Functions&lt;/li&gt;
&lt;li&gt;Simple logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But web development involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Architecture decisions&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Scalability&lt;/li&gt;
&lt;li&gt;Performance optimization&lt;/li&gt;
&lt;li&gt;Trade-offs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These require &lt;strong&gt;experience and judgment&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  3️⃣ Someone Has to Verify the Code
&lt;/h3&gt;

&lt;p&gt;AI-generated code can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Be inefficient&lt;/li&gt;
&lt;li&gt;Be insecure&lt;/li&gt;
&lt;li&gt;Break edge cases&lt;/li&gt;
&lt;li&gt;Use outdated practices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers are still responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debugging&lt;/li&gt;
&lt;li&gt;Reviewing&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;Maintaining&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI doesn’t take responsibility — &lt;strong&gt;you do&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ How AI Is Actually Helping Developers
&lt;/h2&gt;

&lt;p&gt;AI is &lt;strong&gt;boosting productivity&lt;/strong&gt;, not replacing jobs.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔥 Real Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Faster prototyping&lt;/li&gt;
&lt;li&gt;Less boilerplate code&lt;/li&gt;
&lt;li&gt;Quick debugging help&lt;/li&gt;
&lt;li&gt;Learning new frameworks faster&lt;/li&gt;
&lt;li&gt;Better documentation generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers who use AI well are &lt;strong&gt;10x more productive&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 The New Role of a Web Developer
&lt;/h2&gt;

&lt;p&gt;The role is shifting from:&lt;/p&gt;

&lt;p&gt;❌ &lt;em&gt;Write every line of code&lt;/em&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;em&gt;Design systems, guide AI, and solve problems&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Modern developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Think in architecture&lt;/li&gt;
&lt;li&gt;Focus on UX and performance&lt;/li&gt;
&lt;li&gt;Use AI as a tool, not a crutch&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 Skills That Matter More Than Ever
&lt;/h2&gt;

&lt;p&gt;To stay relevant, developers should focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript fundamentals&lt;/li&gt;
&lt;li&gt;Framework knowledge (React, Next.js, etc.)&lt;/li&gt;
&lt;li&gt;System design basics&lt;/li&gt;
&lt;li&gt;Debugging skills&lt;/li&gt;
&lt;li&gt;Prompt engineering&lt;/li&gt;
&lt;li&gt;Code review mindset&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚠️ Who &lt;em&gt;Is&lt;/em&gt; at Risk?
&lt;/h2&gt;

&lt;p&gt;Let’s be honest.&lt;/p&gt;

&lt;p&gt;People at risk are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Those who only copy-paste&lt;/li&gt;
&lt;li&gt;Those who don’t understand the code they use&lt;/li&gt;
&lt;li&gt;Those who refuse to learn new tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI replaces &lt;strong&gt;low-effort coding&lt;/strong&gt;, not real developers.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Final Verdict
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AI will not replace web developers.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
But &lt;strong&gt;developers who use AI will replace those who don’t&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Vibe coding is not about laziness.&lt;br&gt;&lt;br&gt;
It’s about &lt;strong&gt;working smarter, not harder&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 What Do You Think?
&lt;/h2&gt;

&lt;p&gt;Are you excited about AI-assisted coding or worried about it?&lt;br&gt;&lt;br&gt;
Let’s discuss in the comments 👇&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://adithyan-phi.vercel.app/" rel="noopener noreferrer"&gt;Portfolio&lt;/a&gt;&lt;/p&gt;

</description>
      <category>web</category>
      <category>developer</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>What Building One Real Project Taught Me More Than 5 Tutorials</title>
      <dc:creator>Adithyan G</dc:creator>
      <pubDate>Tue, 30 Dec 2025 10:49:16 +0000</pubDate>
      <link>https://forem.com/adithyan_g_6f3e606905eed7/what-building-one-real-project-taught-me-more-than-5-221i</link>
      <guid>https://forem.com/adithyan_g_6f3e606905eed7/what-building-one-real-project-taught-me-more-than-5-221i</guid>
      <description>&lt;p&gt;When I started learning web development, I did what most beginners do: I followed tutorials. A lot of them.&lt;/p&gt;

&lt;p&gt;React crash courses. MERN playlists. “Build this app in 1 hour” videos. I finished them, felt productive, and assumed I was learning.&lt;/p&gt;

&lt;p&gt;Then I tried to build &lt;strong&gt;one real project on my own&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That single project exposed more gaps in my understanding than five tutorials combined.&lt;/p&gt;

&lt;p&gt;This post is about what actually changed when I stopped following along and started building.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tutorials Give You Confidence. Projects Take It Away.
&lt;/h2&gt;

&lt;p&gt;Tutorials are clean and controlled.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The folder structure is decided for you
&lt;/li&gt;
&lt;li&gt;Dependencies magically work
&lt;/li&gt;
&lt;li&gt;Errors are rare and predictable
&lt;/li&gt;
&lt;li&gt;The app always runs at the end
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Real projects are the opposite.&lt;/p&gt;

&lt;p&gt;In my project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nothing worked the first time&lt;/li&gt;
&lt;li&gt;I didn’t know where files should go&lt;/li&gt;
&lt;li&gt;Errors made no sense&lt;/li&gt;
&lt;li&gt;Deployment broke everything again&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That discomfort wasn’t a failure.&lt;br&gt;&lt;br&gt;
That was the learning.&lt;/p&gt;




&lt;h2&gt;
  
  
  I Finally Understood &lt;em&gt;Why&lt;/em&gt; Code Is Written the Way It Is
&lt;/h2&gt;

&lt;p&gt;In tutorials, you copy patterns without questioning them.&lt;/p&gt;

&lt;p&gt;In a real project, you are forced to ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why should this logic be in the backend?&lt;/li&gt;
&lt;li&gt;Why does this need its own component?&lt;/li&gt;
&lt;li&gt;Why should routes be structured this way?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I learned this the hard way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dumping everything into one file becomes unmaintainable fast&lt;/li&gt;
&lt;li&gt;Separating routes, controllers, and services is not “overengineering”&lt;/li&gt;
&lt;li&gt;Environment variables exist because hardcoding secrets will break production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don’t understand architecture by copying it.&lt;br&gt;&lt;br&gt;
You understand it when bad structure slows you down.&lt;/p&gt;




&lt;h2&gt;
  
  
  Debugging Became a Skill, Not a Panic Reaction
&lt;/h2&gt;

&lt;p&gt;Tutorial bugs are simple.&lt;/p&gt;

&lt;p&gt;Real project bugs are not.&lt;/p&gt;

&lt;p&gt;I dealt with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CORS issues&lt;/li&gt;
&lt;li&gt;Environment variables not loading in production&lt;/li&gt;
&lt;li&gt;MongoDB connections failing only after deployment&lt;/li&gt;
&lt;li&gt;Builds working locally but failing on Vercel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first, I panicked.&lt;/p&gt;

&lt;p&gt;Eventually, I learned to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read error messages carefully&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;console.log&lt;/code&gt; intentionally&lt;/li&gt;
&lt;li&gt;Inspect network requests&lt;/li&gt;
&lt;li&gt;Search issues instead of blindly pasting fixes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is when it clicked: &lt;strong&gt;debugging is the real job&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deployment Taught Me More Than Writing Code
&lt;/h2&gt;

&lt;p&gt;Nothing exposed my weak understanding faster than deployment.&lt;/p&gt;

&lt;p&gt;Locally, everything worked.&lt;br&gt;&lt;br&gt;
In production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API URLs were wrong&lt;/li&gt;
&lt;li&gt;Environment variables were missing&lt;/li&gt;
&lt;li&gt;Build commands failed&lt;/li&gt;
&lt;li&gt;Static assets didn’t load&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deployment forced me to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How frontend and backend actually communicate&lt;/li&gt;
&lt;li&gt;How hosting platforms work&lt;/li&gt;
&lt;li&gt;Why “it works on my machine” means nothing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After deploying one real app, tutorials felt incomplete without deployment sections.&lt;/p&gt;




&lt;h2&gt;
  
  
  SEO and Performance Suddenly Mattered
&lt;/h2&gt;

&lt;p&gt;Tutorial apps don’t care if anyone finds them.&lt;/p&gt;

&lt;p&gt;A real project does.&lt;/p&gt;

&lt;p&gt;While working on my project, I learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why meta tags matter&lt;/li&gt;
&lt;li&gt;Why Google doesn’t index empty or poorly structured pages&lt;/li&gt;
&lt;li&gt;Why performance affects real users, not just Lighthouse scores&lt;/li&gt;
&lt;li&gt;Why clean URLs matter for discoverability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Submitting my site to Google Search Console taught me more about SEO than reading SEO articles ever did.&lt;/p&gt;




&lt;h2&gt;
  
  
  I Stopped Watching Tutorials the Same Way
&lt;/h2&gt;

&lt;p&gt;After building one real project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I stopped binge-watching tutorials&lt;/li&gt;
&lt;li&gt;I watched smaller, targeted videos&lt;/li&gt;
&lt;li&gt;I read documentation more&lt;/li&gt;
&lt;li&gt;I implemented features immediately after learning them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tutorials became &lt;strong&gt;references&lt;/strong&gt;, not a comfort zone.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Biggest Lesson: Feeling Lost Means You’re Learning
&lt;/h2&gt;

&lt;p&gt;If you feel confused while building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You’re not bad at development&lt;/li&gt;
&lt;li&gt;You’re finally doing real development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tutorials hide complexity.&lt;br&gt;&lt;br&gt;
Projects force you to face it.&lt;/p&gt;

&lt;p&gt;That’s where real growth happens.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Advice for Beginners
&lt;/h2&gt;

&lt;p&gt;If you’re starting out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build one real project&lt;/li&gt;
&lt;li&gt;Make it messy&lt;/li&gt;
&lt;li&gt;Deploy it&lt;/li&gt;
&lt;li&gt;Break it&lt;/li&gt;
&lt;li&gt;Fix it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then write about it.&lt;/p&gt;

&lt;p&gt;One real project will teach you more than five perfectly edited tutorials ever will.&lt;/p&gt;




&lt;p&gt;If you’re curious, this is the kind of work I’m building and documenting:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Portfolio:&lt;/strong&gt; &lt;a href="https://adithyan-phi.vercel.app" rel="noopener noreferrer"&gt;https://adithyan-phi.vercel.app&lt;/a&gt;&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>ai</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How I Built a Dynamic Admin Panel for My MERN Stack Portfolio</title>
      <dc:creator>Adithyan G</dc:creator>
      <pubDate>Sat, 27 Dec 2025 08:56:53 +0000</pubDate>
      <link>https://forem.com/adithyan_g_6f3e606905eed7/how-i-built-a-dynamic-admin-panel-for-my-mern-stack-portfolio-2jac</link>
      <guid>https://forem.com/adithyan_g_6f3e606905eed7/how-i-built-a-dynamic-admin-panel-for-my-mern-stack-portfolio-2jac</guid>
      <description>&lt;p&gt;As a developer, building a portfolio isn’t just about showcasing projects — it’s about demonstrating how you can create flexible, maintainable web applications. For my portfolio website, I wanted more than a static showcase. I needed a dynamic &lt;strong&gt;Admin Panel&lt;/strong&gt; that would allow me to easily manage my projects, skills, profile details, and resume — all without touching the code every time.&lt;/p&gt;

&lt;p&gt;In this post, I’ll walk you through how I built a dynamic admin dashboard using the MERN stack (MongoDB, Express, React, Node.js) that powers my portfolio backend and frontend. This admin panel makes managing my portfolio content a breeze, and I’ll share the key architecture decisions, tools, and lessons learned.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Build an Admin Panel for Your Portfolio?
&lt;/h2&gt;

&lt;p&gt;At first, I just had a simple React portfolio displaying static content. But soon, every update required code changes and redeployments, which was time-consuming and error-prone.&lt;/p&gt;

&lt;p&gt;By building an admin dashboard, I achieved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-time content updates:&lt;/strong&gt; Add, update, or delete projects, skills, and other profile data via a UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure access:&lt;/strong&gt; Only I can log in to manage content with JWT authentication.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; Easily extend with new sections or data types without modifying the frontend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better organization:&lt;/strong&gt; Store portfolio content in a database instead of hardcoded files.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Tech Stack Overview
&lt;/h2&gt;

&lt;p&gt;Here’s the stack I used to build the admin panel and the portfolio backend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React with functional components and hooks for building the admin UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Node.js + Express REST APIs for handling CRUD operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; MongoDB with Mongoose for schema modeling and data storage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication:&lt;/strong&gt; JWT (JSON Web Tokens) to secure admin routes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File Storage:&lt;/strong&gt; Cloudinary for managing image uploads (profile pics, project images).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling:&lt;/strong&gt; CSS modules and some UI libraries for clean layouts.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Key Features of the Admin Panel
&lt;/h2&gt;

&lt;p&gt;The dashboard lets me manage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Profile Section:&lt;/strong&gt; Update bio, profile picture, contact info.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills:&lt;/strong&gt; Add, update, or remove programming skills dynamically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Projects:&lt;/strong&gt; CRUD operations for projects including title, description, images, links.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resume:&lt;/strong&gt; Upload and update resume files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication:&lt;/strong&gt; Secure login with email and password, protected routes using JWT.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How It Works — Architecture Breakdown
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Backend API Design
&lt;/h3&gt;

&lt;p&gt;I created RESTful APIs to handle CRUD actions for all portfolio data.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /api/projects&lt;/code&gt; — fetch all projects&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /api/projects&lt;/code&gt; — add a new project&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PUT /api/projects/:id&lt;/code&gt; — update project by ID&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DELETE /api/projects/:id&lt;/code&gt; — delete project by ID&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The APIs validate requests and interact with MongoDB collections using Mongoose models. I also implemented authentication middleware to protect sensitive endpoints.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Authentication with JWT
&lt;/h3&gt;

&lt;p&gt;To secure the admin panel, I built a login system with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Password hashing using bcrypt.&lt;/li&gt;
&lt;li&gt;JWT token generation on login.&lt;/li&gt;
&lt;li&gt;Protected routes in both frontend and backend that require a valid token.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. React Admin Dashboard UI
&lt;/h3&gt;

&lt;p&gt;Using React hooks and &lt;code&gt;axios&lt;/code&gt; for API calls, I built components for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Login Page:&lt;/strong&gt; Authenticate and store JWT in localStorage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard:&lt;/strong&gt; Overview of portfolio content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forms:&lt;/strong&gt; Controlled forms for adding/editing skills and projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File Uploads:&lt;/strong&gt; Integrated Cloudinary API for image and resume uploads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also used conditional rendering and loading states for smooth UX.&lt;/p&gt;




&lt;h2&gt;
  
  
  Code Snippet — Example: Fetching Projects in Admin Panel
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AdminProjects&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;projects&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setProjects&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchProjects&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;authToken&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/projects&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="nf"&gt;setProjects&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Error fetching projects:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="nf"&gt;fetchProjects&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Loading projects...&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Manage Projects&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;No projects found.&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nx"&gt;projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;project&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;project&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* Buttons for Edit/Delete can go here */&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;))&lt;/span&gt;
      &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;AdminProjects&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Challenges &amp;amp; Lessons Learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Handling File Uploads&lt;/strong&gt;: Uploading images and resumes required integrating Cloudinary's API with signed URLs and managing upload states.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State Management&lt;/strong&gt;: Keeping the admin UI in sync with backend data, especially with real-time CRUD updates, needed careful use of React state and effects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication Flow&lt;/strong&gt;: Securing routes and managing JWT tokens was critical to avoid unauthorized access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UX Considerations&lt;/strong&gt;: Designing simple but effective forms and feedback messages improved admin usability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Building a dynamic admin panel transformed my portfolio from a static webpage into a powerful content management system I can control without redeploying. It gave me hands-on experience with full-stack development, API design, secure authentication, and file management — all essential skills for a modern web developer.&lt;/p&gt;

&lt;p&gt;If you’re planning to build or improve your portfolio, I highly recommend adding an admin dashboard. It not only shows your technical skills but also saves you a ton of time and effort in the long run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you want to check out my portfolio in action, feel free to visit:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;&lt;a href="https://adithyan-phi.vercel.app" rel="noopener noreferrer"&gt;https://adithyan-phi.vercel.app&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Got questions or want to share your experience? Drop a comment below!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Happy coding!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Building an AI-Powered Expense Tracker with the MERN Stack</title>
      <dc:creator>Adithyan G</dc:creator>
      <pubDate>Fri, 26 Dec 2025 17:47:57 +0000</pubDate>
      <link>https://forem.com/adithyan_g_6f3e606905eed7/building-an-ai-powered-expense-tracker-with-the-mern-1g5n</link>
      <guid>https://forem.com/adithyan_g_6f3e606905eed7/building-an-ai-powered-expense-tracker-with-the-mern-1g5n</guid>
      <description>&lt;p&gt;Managing personal finances is a challenge a lot of us face. While many expense trackers focus on just logging transactions or basic charts, I wanted to build something smarter—an app that not only tracks expenses but also analyzes spending behavior and provides actionable insights powered by AI.&lt;/p&gt;

&lt;p&gt;So I built an &lt;strong&gt;AI-Powered Expense Tracker&lt;/strong&gt; using the &lt;strong&gt;MERN stack&lt;/strong&gt;, enhanced with an AI financial coach powered by &lt;strong&gt;LLaMA 3.3 and Groq&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this post, I’ll walk you through the project idea, architecture, core features, tech stack, and key learnings.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project Overview
&lt;/h2&gt;

&lt;p&gt;This app helps users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track daily expenses with clear categories (Food, Travel, Bills, etc.)&lt;/li&gt;
&lt;li&gt;Visualize spending patterns with interactive charts and dashboards&lt;/li&gt;
&lt;li&gt;Set budgets and receive smart alerts as spending approaches limits&lt;/li&gt;
&lt;li&gt;Interact with an AI financial coach that provides personalized advice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app is designed as a &lt;strong&gt;Progressive Web App (PWA)&lt;/strong&gt;—installable, offline-capable, and responsive across devices.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Check out the live project:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://adithyan-phi.vercel.app/project/expense-tracker" rel="noopener noreferrer"&gt;https://adithyan-phi.vercel.app/project/expense-tracker&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Core Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Expense Tracking
&lt;/h3&gt;

&lt;p&gt;Add, edit, and delete expenses easily. Each transaction updates the dashboard in real time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dashboard &amp;amp; Analytics
&lt;/h3&gt;

&lt;p&gt;View monthly spending breakdowns, recent transactions, and savings trends using charts powered by &lt;strong&gt;Recharts&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Budget Management
&lt;/h3&gt;

&lt;p&gt;Set monthly budgets with optional &lt;strong&gt;50/30/20 rule analysis&lt;/strong&gt; (Needs, Wants, Savings).&lt;br&gt;&lt;br&gt;
Receive email alerts at &lt;strong&gt;30%, 50%, 90%, and 100%&lt;/strong&gt; of your budget usage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authentication &amp;amp; Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Two-step &lt;strong&gt;email OTP verification&lt;/strong&gt; for secure sign-up&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JWT-based authentication&lt;/strong&gt; for protected routes and sessions&lt;/li&gt;
&lt;li&gt;Rich, dark-themed &lt;strong&gt;HTML email notifications&lt;/strong&gt; for budget thresholds&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  PWA Support
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Installable on &lt;strong&gt;mobile and desktop&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline caching&lt;/strong&gt; for dashboard access&lt;/li&gt;
&lt;li&gt;Light, dark, and custom themes for user preference&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  AI Financial Coach — The Unique Twist
&lt;/h2&gt;

&lt;p&gt;The standout feature of this project is the &lt;strong&gt;AI-powered financial assistant&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Built with &lt;strong&gt;LLaMA 3.3&lt;/strong&gt; and the &lt;strong&gt;Groq SDK&lt;/strong&gt;, the AI allows users to ask questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“How am I spending on food this month?”&lt;/li&gt;
&lt;li&gt;“What are some tips to save more?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI analyzes real user data to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detect unusual spending patterns&lt;/li&gt;
&lt;li&gt;Identify recurring subscriptions&lt;/li&gt;
&lt;li&gt;Provide actionable savings advice&lt;/li&gt;
&lt;li&gt;Localize insights strictly to &lt;strong&gt;Indian Rupees (₹)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Auto-categorize expenses to reduce manual input&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Frontend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;React.js&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;VitePWA&lt;/li&gt;
&lt;li&gt;Recharts&lt;/li&gt;
&lt;li&gt;Framer Motion&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Backend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express.js&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Mongoose&lt;/li&gt;
&lt;li&gt;JWT&lt;/li&gt;
&lt;li&gt;Nodemailer&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI / ML
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Groq SDK&lt;/li&gt;
&lt;li&gt;LLaMA 3.3&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Challenges &amp;amp; Learnings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Designing scalable data models for expenses and budgets&lt;/li&gt;
&lt;li&gt;Implementing secure OTP and JWT-based authentication&lt;/li&gt;
&lt;li&gt;Ensuring AI responses were accurate, contextual, and localized&lt;/li&gt;
&lt;li&gt;Optimizing performance for dashboards and charts&lt;/li&gt;
&lt;li&gt;Supporting offline functionality without breaking UX&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Building this AI-Powered Expense Tracker helped me level up my &lt;strong&gt;full-stack development skills&lt;/strong&gt;, explore &lt;strong&gt;PWA capabilities&lt;/strong&gt;, and integrate &lt;strong&gt;AI into a real-world application&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you’re learning the MERN stack, I strongly recommend building projects that go beyond basic CRUD—solve real problems, experiment with new technologies, and focus on user experience.&lt;/p&gt;

&lt;p&gt;Feel free to check out the live app and source code, and reach out if you have questions or feedback.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
