<?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: PRANAV BHARTI</title>
    <description>The latest articles on Forem by PRANAV BHARTI (@pranav_bharti).</description>
    <link>https://forem.com/pranav_bharti</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%2F3307471%2Fa84a4454-ae44-43a1-892a-35e29a6af504.jpg</url>
      <title>Forem: PRANAV BHARTI</title>
      <link>https://forem.com/pranav_bharti</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pranav_bharti"/>
    <language>en</language>
    <item>
      <title>CI/CD for Salesforce Using GitHub Actions</title>
      <dc:creator>PRANAV BHARTI</dc:creator>
      <pubDate>Fri, 22 May 2026 12:47:06 +0000</pubDate>
      <link>https://forem.com/pranav_bharti/cicd-for-salesforce-using-github-actions-g1b</link>
      <guid>https://forem.com/pranav_bharti/cicd-for-salesforce-using-github-actions-g1b</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"Continuous Integration doesn't get rid of bugs, but it does make them dramatically easier to find and remove." - &lt;em&gt;Martin Fowler&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you've ever deployed to Salesforce by manually clicking through change sets and praying nothing breaks in production, this post is for you. You'll learn how to build a real CI/CD pipeline using GitHub Actions that validates every pull request and deploys automatically on merge - no clicking required.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Manual Salesforce Deployments Are Slowly Killing Your Team
&lt;/h2&gt;

&lt;p&gt;You know the drill. Someone builds a feature in their sandbox, pulls together a change set, and deploys it on a Friday afternoon. Then the on-call phone rings.&lt;/p&gt;

&lt;p&gt;The problems with manual deployments aren't just about risk:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No repeatability&lt;/strong&gt; - what worked on your sandbox may not match what's in the change set.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No audit trail&lt;/strong&gt; - "who deployed what and when?" becomes a detective game.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fear culture&lt;/strong&gt; - teams avoid deploying often because each deployment is a high-stakes event.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slow feedback&lt;/strong&gt; - bugs found in prod cost 10x more to fix than bugs caught in a PR.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CI/CD flips this. Small changes, deployed frequently, validated automatically. The pipeline is your safety net.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Stack You'll Need
&lt;/h2&gt;

&lt;p&gt;Before writing a single line of YAML, here's what powers the whole thing:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Salesforce CLI (sf v2)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Authenticate, deploy, and run tests from the command line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub Actions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Orchestrate the workflow on push/PR events&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JWT Bearer Flow&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Passwordless authentication to your Salesforce org&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;sfdx-git-delta&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Generate a delta package - deploy only changed metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Salesforce Code Analyzer v5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Static analysis to catch bugs before they hit the org&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Use &lt;code&gt;sf&lt;/code&gt; (v2), NOT the deprecated &lt;code&gt;sfdx&lt;/code&gt; CLI. Salesforce released &lt;code&gt;sf v2&lt;/code&gt; in July 2023 and &lt;code&gt;sfdx&lt;/code&gt; is no longer maintained. Most examples online still use &lt;code&gt;sfdx&lt;/code&gt; - don't follow them blindly.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  One-Time Setup: Connected App and JWT Auth
&lt;/h2&gt;

&lt;p&gt;GitHub Actions runs on a server with no browser. That means no OAuth redirects, no username/password. JWT Bearer Flow is the right approach - it's headless, secure, and what Salesforce recommends for CI/CD.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 - Generate a key pair on your local machine:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openssl genrsa &lt;span class="nt"&gt;-out&lt;/span&gt; server.key 2048
openssl req &lt;span class="nt"&gt;-new&lt;/span&gt; &lt;span class="nt"&gt;-x509&lt;/span&gt; &lt;span class="nt"&gt;-nodes&lt;/span&gt; &lt;span class="nt"&gt;-sha256&lt;/span&gt; &lt;span class="nt"&gt;-days&lt;/span&gt; 365 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;-key&lt;/span&gt; server.key &lt;span class="nt"&gt;-out&lt;/span&gt; server.crt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives you &lt;code&gt;server.key&lt;/code&gt; (the private key - guard it fiercely) and &lt;code&gt;server.crt&lt;/code&gt; (the certificate you upload to Salesforce).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 - Create a Connected App in Salesforce:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to &lt;strong&gt;Setup &amp;gt; App Manager &amp;gt; New Connected App&lt;/strong&gt; and configure it like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;strong&gt;Enable OAuth Settings&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Callback URL: &lt;code&gt;https://login.salesforce.com/services/oauth2/callback&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Check &lt;strong&gt;Use Digital Signatures&lt;/strong&gt; and upload &lt;code&gt;server.crt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;OAuth Scopes: &lt;code&gt;Manage user data via APIs (api)&lt;/code&gt;, &lt;code&gt;Perform requests at any time (refresh_token, offline_access)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Check &lt;strong&gt;Require Secret for Web Server Flow&lt;/strong&gt; = OFF&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After saving, note the &lt;strong&gt;Consumer Key&lt;/strong&gt; - you'll need it shortly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 - Pre-authorize your deployment user:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the Connected App, click &lt;strong&gt;Manage &amp;gt; Edit Policies&lt;/strong&gt;. Set &lt;strong&gt;Permitted Users&lt;/strong&gt; to "Admin approved users are pre-authorized". Then go to the user profile and add the Connected App under &lt;strong&gt;Connected App Access&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;💡 Skipping this step is the 1 reason JWT auth silently fails. The error message won't tell you this is the problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4 - Add secrets to GitHub:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to your repo &lt;strong&gt;Settings &amp;gt; Secrets and variables &amp;gt; Actions&lt;/strong&gt; and add:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Secret Name&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SF_USERNAME&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Your Salesforce deployment user's email&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SF_CONSUMER_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Consumer Key from the Connected App&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SF_JWT_KEY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full contents of &lt;code&gt;server.key&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SF_INSTANCE_URL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;https://login.salesforce.com&lt;/code&gt; (or your My Domain URL)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Never commit &lt;code&gt;server.key&lt;/code&gt; to your repo. Add it to &lt;code&gt;.gitignore&lt;/code&gt; immediately.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Your Project Structure
&lt;/h2&gt;

&lt;p&gt;Your Salesforce project needs to be in source format (not metadata format) for this pipeline to work. If you're still using the old metadata API format, run &lt;code&gt;sf project convert source&lt;/code&gt; to migrate.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-salesforce-project/
├── .github/
│   └── workflows/
│       └── salesforce-cicd.yml    ← your pipeline lives here
├── force-app/
│   └── main/
│       └── default/
│           ├── classes/
│           ├── lwc/
│           ├── triggers/
│           └── permissionsets/
├── config/
│   └── project-scratch-def.json
└── sfdx-project.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;sfdx-project.json&lt;/code&gt; at the root tells the CLI where your source lives. Make sure it points to &lt;code&gt;force-app&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The GitHub Actions Workflow
&lt;/h2&gt;

&lt;p&gt;Here's a production-ready workflow that does two things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;On pull request&lt;/strong&gt; - validates the code and runs Apex tests (no deployment)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On merge to main&lt;/strong&gt; - deploys to your target org
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Salesforce CI/CD&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;main&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;main&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;salesforce-cicd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Validate &amp;amp; Deploy&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout code&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;fetch-depth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;  &lt;span class="c1"&gt;# Required for sfdx-git-delta to compare commits&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install Salesforce CLI&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install --global @salesforce/cli@latest&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Authenticate to Salesforce&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;SF_JWT_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.SF_JWT_KEY }}&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;echo "$SF_JWT_KEY" &amp;gt; server.key&lt;/span&gt;
          &lt;span class="s"&gt;sf org login jwt \&lt;/span&gt;
            &lt;span class="s"&gt;--client-id "${{ secrets.SF_CONSUMER_KEY }}" \&lt;/span&gt;
            &lt;span class="s"&gt;--jwt-key-file server.key \&lt;/span&gt;
            &lt;span class="s"&gt;--username "${{ secrets.SF_USERNAME }}" \&lt;/span&gt;
            &lt;span class="s"&gt;--instance-url "${{ secrets.SF_INSTANCE_URL }}" \&lt;/span&gt;
            &lt;span class="s"&gt;--set-default-org&lt;/span&gt;
          &lt;span class="s"&gt;rm -f server.key&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Validate on Pull Request&lt;/span&gt;
        &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;github.event_name == 'pull_request'&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;sf project deploy validate \&lt;/span&gt;
            &lt;span class="s"&gt;--source-dir force-app \&lt;/span&gt;
            &lt;span class="s"&gt;--test-level RunLocalTests \&lt;/span&gt;
            &lt;span class="s"&gt;--wait 30 \&lt;/span&gt;
            &lt;span class="s"&gt;--verbose&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deploy on Merge to Main&lt;/span&gt;
        &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;github.event_name == 'push' &amp;amp;&amp;amp; github.ref == 'refs/heads/main'&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;sf project deploy start \&lt;/span&gt;
            &lt;span class="s"&gt;--source-dir force-app \&lt;/span&gt;
            &lt;span class="s"&gt;--test-level RunLocalTests \&lt;/span&gt;
            &lt;span class="s"&gt;--wait 30 \&lt;/span&gt;
            &lt;span class="s"&gt;--verbose&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key difference: &lt;code&gt;deploy validate&lt;/code&gt; does a check-only deployment (no actual changes). &lt;code&gt;deploy start&lt;/code&gt; is the real thing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deploy Only What Changed: sfdx-git-delta
&lt;/h2&gt;

&lt;p&gt;Deploying your entire &lt;code&gt;force-app&lt;/code&gt; on every merge is slow and risky. If you have 500 Apex classes, why redeploy 499 that didn't change?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sfdx-git-delta&lt;/code&gt; (SGD) compares your current commit against the previous one and builds a &lt;code&gt;package.xml&lt;/code&gt; containing only the changed metadata. This can slash deployment times from 20+ minutes to under 2.&lt;/p&gt;

&lt;p&gt;Here's how to add it to your workflow, replacing the deploy step:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install sfdx-git-delta&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;echo y | sf plugins install sfdx-git-delta&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Generate Delta Package&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;mkdir -p delta&lt;/span&gt;
          &lt;span class="s"&gt;sf sgd source delta \&lt;/span&gt;
            &lt;span class="s"&gt;--to "HEAD" \&lt;/span&gt;
            &lt;span class="s"&gt;--from "HEAD~1" \&lt;/span&gt;
            &lt;span class="s"&gt;--output delta \&lt;/span&gt;
            &lt;span class="s"&gt;--generate-delta \&lt;/span&gt;
            &lt;span class="s"&gt;--source-dir force-app&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deploy Delta (on merge)&lt;/span&gt;
        &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;github.event_name == 'push' &amp;amp;&amp;amp; github.ref == 'refs/heads/main'&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;if [ -s delta/package/package.xml ]; then&lt;/span&gt;
            &lt;span class="s"&gt;sf project deploy start \&lt;/span&gt;
              &lt;span class="s"&gt;--manifest delta/package/package.xml \&lt;/span&gt;
              &lt;span class="s"&gt;--test-level RunLocalTests \&lt;/span&gt;
              &lt;span class="s"&gt;--wait 30&lt;/span&gt;
          &lt;span class="s"&gt;else&lt;/span&gt;
            &lt;span class="s"&gt;echo "No metadata changes detected - skipping deployment"&lt;/span&gt;
          &lt;span class="s"&gt;fi&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deploy Destructive Changes&lt;/span&gt;
        &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;github.event_name == 'push' &amp;amp;&amp;amp; github.ref == 'refs/heads/main'&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;if [ -s delta/destructiveChanges/destructiveChanges.xml ]; then&lt;/span&gt;
            &lt;span class="s"&gt;sf project deploy start \&lt;/span&gt;
              &lt;span class="s"&gt;--manifest delta/package/package.xml \&lt;/span&gt;
              &lt;span class="s"&gt;--pre-destructive-changes delta/destructiveChanges/destructiveChanges.xml \&lt;/span&gt;
              &lt;span class="s"&gt;--test-level NoTestRun \&lt;/span&gt;
              &lt;span class="s"&gt;--wait 30&lt;/span&gt;
          &lt;span class="s"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SGD also handles destructive changes automatically - if you deleted or renamed a class in git, it builds the &lt;code&gt;destructiveChanges.xml&lt;/code&gt; for you.&lt;/p&gt;




&lt;h2&gt;
  
  
  Add Static Analysis with Salesforce Code Analyzer
&lt;/h2&gt;

&lt;p&gt;Catching bugs before they reach the org is cheaper than fixing them after. Salesforce Code Analyzer v5 (released in 2025) runs PMD and other engines against your Apex, and has an official GitHub Action.&lt;/p&gt;

&lt;p&gt;Add this step before your deploy/validate step:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run Salesforce Code Analyzer&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;forcedotcom/run-code-analyzer@v2&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;run-command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;run&lt;/span&gt;
          &lt;span class="na"&gt;run-arguments&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="s"&gt;--target force-app&lt;/span&gt;
            &lt;span class="s"&gt;--engine pmd&lt;/span&gt;
            &lt;span class="s"&gt;--severity-threshold 2&lt;/span&gt;
          &lt;span class="na"&gt;results-artifact-name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;salesforce-code-analyzer-results&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--severity-threshold 2&lt;/code&gt; fails the build on any high or critical PMD violations. Set it to &lt;code&gt;3&lt;/code&gt; if you want a softer start and work your way down.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Pitfalls (Save Yourself the Headache)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Using &lt;code&gt;sfdx&lt;/code&gt; instead of &lt;code&gt;sf&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
The old &lt;code&gt;sfdx&lt;/code&gt; CLI is deprecated. Its commands look similar but behave differently. Always use &lt;code&gt;sf org login jwt&lt;/code&gt;, not &lt;code&gt;sfdx force:auth:jwt:grant&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forgetting &lt;code&gt;fetch-depth: 0&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
By default, &lt;code&gt;actions/checkout&lt;/code&gt; only pulls the latest commit (a shallow clone). &lt;code&gt;sfdx-git-delta&lt;/code&gt; needs the full git history to calculate the diff. Without &lt;code&gt;fetch-depth: 0&lt;/code&gt;, it'll fail silently or compare against nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connecting App not pre-authorized&lt;/strong&gt;&lt;br&gt;
JWT auth will return a cryptic &lt;code&gt;invalid_grant&lt;/code&gt; error. The fix is in the Connected App's Permitted Users policy - set it to admin-approved and explicitly grant access to the deployment user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using &lt;code&gt;RunAllTests&lt;/code&gt; instead of &lt;code&gt;RunLocalTests&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;RunAllTests&lt;/code&gt; runs managed package tests too, which can add 30+ minutes to your pipeline for no benefit. Use &lt;code&gt;RunLocalTests&lt;/code&gt; unless you have a specific reason not to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Leaving &lt;code&gt;server.key&lt;/code&gt; on disk&lt;/strong&gt;&lt;br&gt;
Always &lt;code&gt;rm -f server.key&lt;/code&gt; after authenticating. The example workflow above does this, but if you write your own steps, don't forget it.&lt;/p&gt;




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

&lt;p&gt;CI/CD for Salesforce is not harder than any other platform - it just has more one-time setup. Once your Connected App is configured and your secrets are in place, the YAML almost writes itself. Start with a simple validate-on-PR workflow, prove the value to your team, then layer in delta deployments and static analysis as your pipeline matures.&lt;/p&gt;

&lt;p&gt;The best deployment is one your team doesn't even have to think about.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Hope this helps you ship Salesforce changes with confidence!&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Written by &lt;a href="https://www.linkedin.com/in/pranavbharti9211" rel="noopener noreferrer"&gt;Pranav Bharti&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>salesforce</category>
      <category>cicd</category>
      <category>github</category>
      <category>devops</category>
    </item>
    <item>
      <title>Salesforce TDX 2026: The Rise of the Agentic Enterprise</title>
      <dc:creator>PRANAV BHARTI</dc:creator>
      <pubDate>Thu, 07 May 2026 12:42:26 +0000</pubDate>
      <link>https://forem.com/pranav_bharti/salesforce-tdx-2026-the-rise-of-the-agentic-enterprise-k0d</link>
      <guid>https://forem.com/pranav_bharti/salesforce-tdx-2026-the-rise-of-the-agentic-enterprise-k0d</guid>
      <description>&lt;p&gt;The future of enterprise technology is no longer just about applications, automation, or dashboards. At Salesforce TDX 2026, Salesforce introduced a bold vision for the next era of digital transformation - the &lt;strong&gt;Agentic Enterprise&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The conference showcased how AI agents are evolving from simple assistants into autonomous systems capable of collaborating with humans, orchestrating workflows, making decisions, and continuously improving operations across organizations.&lt;/p&gt;

&lt;p&gt;This year’s keynote was not just another AI announcement. It represented a major architectural and strategic shift in how software will be built, deployed, and operated in the coming decade.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Salesforce TDX?
&lt;/h2&gt;

&lt;p&gt;Salesforce TDX (Trailblazer Developer Experience) is Salesforce’s flagship developer and technology conference focused on innovation, AI, automation, application development, integrations, and the future of enterprise platforms.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9jteoll76fkoyb9d1q12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9jteoll76fkoyb9d1q12.png" alt="Salesforce TDX" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TDX brings together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers&lt;/li&gt;
&lt;li&gt;Architects&lt;/li&gt;
&lt;li&gt;IT leaders&lt;/li&gt;
&lt;li&gt;Admins&lt;/li&gt;
&lt;li&gt;AI engineers&lt;/li&gt;
&lt;li&gt;Technology partners&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The event typically showcases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product innovations&lt;/li&gt;
&lt;li&gt;Future platform roadmaps&lt;/li&gt;
&lt;li&gt;AI and automation strategies&lt;/li&gt;
&lt;li&gt;Hands-on developer tools&lt;/li&gt;
&lt;li&gt;Real-world customer success stories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At TDX 2026, Salesforce heavily emphasized AI-powered enterprise transformation through autonomous agents, modular architecture, and open ecosystem interoperability.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Shift Toward the “Agentic Enterprise”
&lt;/h2&gt;

&lt;p&gt;One of the biggest themes of the keynote was the transition from traditional software systems to what Salesforce calls the &lt;strong&gt;Agentic Enterprise&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the past:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Humans operated software&lt;/li&gt;
&lt;li&gt;Software executed predefined workflows&lt;/li&gt;
&lt;li&gt;Automation was rule-based&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, organizations are moving toward systems where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents collaborate with humans&lt;/li&gt;
&lt;li&gt;Agents coordinate with other agents&lt;/li&gt;
&lt;li&gt;Workflows become adaptive and intelligent&lt;/li&gt;
&lt;li&gt;Systems continuously optimize themselves&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Salesforce positioned this transformation as the next major technology evolution after:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cloud computing&lt;/li&gt;
&lt;li&gt;Mobile platforms&lt;/li&gt;
&lt;li&gt;First-wave AI&lt;/li&gt;
&lt;li&gt;Autonomous AI systems&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result is expected to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exponential productivity gains&lt;/li&gt;
&lt;li&gt;Faster decision-making&lt;/li&gt;
&lt;li&gt;Reduced operational costs&lt;/li&gt;
&lt;li&gt;Large-scale automation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Headless 360 Architecture: Salesforce’s Core Innovation
&lt;/h2&gt;

&lt;p&gt;A major architectural announcement at TDX 2026 was the introduction of the &lt;strong&gt;Headless 360 Architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of tightly coupled enterprise applications, Salesforce proposed a modular and composable architecture built around four key layers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. System of Context&lt;/strong&gt;&lt;br&gt;
The centralized data layer containing customer, operational, and business information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. System of Work&lt;/strong&gt;&lt;br&gt;
Business logic and workflow orchestration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. System of Agency&lt;/strong&gt;&lt;br&gt;
AI agents responsible for automation, reasoning, and decision-making.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. System of Engagement&lt;/strong&gt;&lt;br&gt;
The user experience layer across web, mobile, chat, and collaboration tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4uy1is5qanx3a65vr73u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4uy1is5qanx3a65vr73u.png" alt="Headless 360" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This API-first approach allows organizations to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reuse services dynamically&lt;/li&gt;
&lt;li&gt;Enable AI orchestration across systems&lt;/li&gt;
&lt;li&gt;Build composable enterprise workflows&lt;/li&gt;
&lt;li&gt;Reduce dependency on monolithic applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture is designed specifically for AI-native enterprises.&lt;/p&gt;




&lt;h2&gt;
  
  
  Open Agent Ecosystem and MCP
&lt;/h2&gt;

&lt;p&gt;Another important announcement was Salesforce’s support for an open agent ecosystem powered by &lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Salesforce described MCP as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Lego blocks for AI systems.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;MCP enables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Interoperability between AI agents&lt;/li&gt;
&lt;li&gt;Communication across platforms&lt;/li&gt;
&lt;li&gt;Standardized integrations with enterprise tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The keynote highlighted integrations with platforms such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAI&lt;/li&gt;
&lt;li&gt;Anthropic&lt;/li&gt;
&lt;li&gt;Slack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8m173ppl6uzghuba5n3x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8m173ppl6uzghuba5n3x.png" alt="Agent support" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This approach reduces vendor lock-in and encourages ecosystem-driven innovation, allowing enterprises to combine multiple AI systems rather than relying on a single platform provider.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI is Transforming the Software Development Lifecycle
&lt;/h2&gt;

&lt;p&gt;Salesforce also demonstrated how AI agents are changing the traditional Software Development Lifecycle (SDLC).&lt;/p&gt;

&lt;p&gt;Previously, software development followed a linear workflow:&lt;br&gt;
&lt;strong&gt;Build -&amp;gt; Test -&amp;gt; Deploy -&amp;gt; Observe&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At TDX 2026, Salesforce introduced an AI-assisted lifecycle that adds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent orchestration&lt;/li&gt;
&lt;li&gt;Automated experimentation&lt;/li&gt;
&lt;li&gt;Continuous optimization&lt;/li&gt;
&lt;li&gt;Intelligent testing systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This new model supports both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deterministic systems (traditional software)&lt;/li&gt;
&lt;li&gt;Probabilistic systems (AI-driven behavior)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5c13vkau1ooh87hc0b3x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5c13vkau1ooh87hc0b3x.png" alt="Software Lifecycle" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The company demonstrated scenarios where development cycles that once took hours could now be completed in minutes using coordinated AI agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  Developers Are Becoming AI Orchestrators
&lt;/h2&gt;

&lt;p&gt;One of the most thought-provoking concepts from the keynote was the changing role of developers.&lt;/p&gt;

&lt;p&gt;Instead of writing every line of code manually, developers will increasingly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manage multiple coding agents&lt;/li&gt;
&lt;li&gt;Guide AI-generated implementations&lt;/li&gt;
&lt;li&gt;Focus on architecture and product thinking&lt;/li&gt;
&lt;li&gt;Operate like engineering managers for AI systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Salesforce described this as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;1 developer = a team of AI agents&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This creates the possibility of 10x productivity gains for engineering teams.&lt;/p&gt;




&lt;h2&gt;
  
  
  AgentForce: Salesforce’s Enterprise AI Platform
&lt;/h2&gt;

&lt;p&gt;Salesforce introduced &lt;strong&gt;AgentForce&lt;/strong&gt;, its enterprise-grade AI orchestration platform.&lt;/p&gt;

&lt;p&gt;Key capabilities include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. AgentScript&lt;/strong&gt;&lt;br&gt;
Provides deterministic controls and guardrails for AI agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Agent Testing and A/B Experimentation&lt;/strong&gt;&lt;br&gt;
Allows continuous performance optimization and behavior validation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Multi-Agent Orchestration&lt;/strong&gt;&lt;br&gt;
Enables multiple AI agents to collaborate across workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Telemetry and Observability&lt;/strong&gt;&lt;br&gt;
Provides real-time monitoring and visibility into agent behavior.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34ry4c8m1db6rdaomzhd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34ry4c8m1db6rdaomzhd.png" alt="Agentforce Interface" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The overall focus of AgentForce is enterprise trust, governance, scalability, and operational control.&lt;/p&gt;




&lt;h2&gt;
  
  
  Build Once, Deploy Everywhere
&lt;/h2&gt;

&lt;p&gt;Another major innovation announced at TDX was Salesforce’s universal experience layer.&lt;/p&gt;

&lt;p&gt;Organizations can define a UI once and automatically deploy it across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web applications&lt;/li&gt;
&lt;li&gt;Mobile apps&lt;/li&gt;
&lt;li&gt;Collaboration platforms&lt;/li&gt;
&lt;li&gt;LLM interfaces&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This includes integrations with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slack&lt;/li&gt;
&lt;li&gt;Microsoft Teams&lt;/li&gt;
&lt;li&gt;Chat-based AI interfaces like ChatGPT&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The benefits are significant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eliminates duplicate frontend development&lt;/li&gt;
&lt;li&gt;Reduces maintenance overhead&lt;/li&gt;
&lt;li&gt;Accelerates deployment across channels&lt;/li&gt;
&lt;li&gt;Creates seamless omnichannel experiences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This supports Salesforce’s broader “meet users where they are” strategy.&lt;/p&gt;




&lt;h2&gt;
  
  
  Agent Exchange and the $50 Million Ecosystem Fund
&lt;/h2&gt;

&lt;p&gt;Salesforce also announced the &lt;strong&gt;Agent Exchange&lt;/strong&gt;, a marketplace for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents&lt;/li&gt;
&lt;li&gt;Skills&lt;/li&gt;
&lt;li&gt;Reusable components&lt;/li&gt;
&lt;li&gt;Automation modules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtbenqy6t9dgxrmhlqxp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtbenqy6t9dgxrmhlqxp.png" alt="Appexchange" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To accelerate ecosystem growth, Salesforce introduced a &lt;strong&gt;$50 million investment fund&lt;/strong&gt; aimed at encouraging partner-led AI innovation.&lt;/p&gt;

&lt;p&gt;This move could help create an entirely new AI application economy within the Salesforce ecosystem.&lt;/p&gt;




&lt;h2&gt;
  
  
  From Applications to Autonomous Systems
&lt;/h2&gt;

&lt;p&gt;Perhaps the most important conceptual shift introduced at TDX 2026 was this:&lt;/p&gt;

&lt;p&gt;Organizations are no longer simply building applications.&lt;/p&gt;

&lt;p&gt;They are building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Autonomous systems&lt;/li&gt;
&lt;li&gt;Self-improving AI ecosystems&lt;/li&gt;
&lt;li&gt;Multi-agent collaborative environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These systems include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continuous learning loops&lt;/li&gt;
&lt;li&gt;Feedback-driven optimization&lt;/li&gt;
&lt;li&gt;Cross-agent coordination&lt;/li&gt;
&lt;li&gt;Dynamic workflow adaptation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This marks a significant evolution in enterprise software design.&lt;/p&gt;




&lt;h2&gt;
  
  
  Democratizing AI Development
&lt;/h2&gt;

&lt;p&gt;Salesforce also emphasized accessibility.&lt;/p&gt;

&lt;p&gt;With:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Natural language interfaces&lt;/li&gt;
&lt;li&gt;Low-code tooling&lt;/li&gt;
&lt;li&gt;Agent-assisted development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even non-technical users can increasingly build AI-powered solutions.&lt;/p&gt;

&lt;p&gt;This democratization could dramatically expand the number of enterprise builders while reducing dependency on scarce AI specialists.&lt;/p&gt;




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

&lt;p&gt;Salesforce TDX 2026 made one thing very clear: the enterprise software industry is entering a new era.&lt;/p&gt;

&lt;p&gt;Salesforce’s vision extends beyond traditional CRM platforms and workflow automation. The company is positioning itself at the center of a future where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents collaborate with humans&lt;/li&gt;
&lt;li&gt;Applications become autonomous systems&lt;/li&gt;
&lt;li&gt;Development becomes AI-assisted&lt;/li&gt;
&lt;li&gt;Enterprises operate through intelligent orchestration layers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether organizations are ready or not, the shift toward the &lt;strong&gt;Agentic Enterprise&lt;/strong&gt; has already begun.&lt;/p&gt;

&lt;p&gt;The next generation of enterprise platforms may not be defined by apps alone - but by networks of intelligent agents working together in real time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnxiyhdy69ah6h400a9d9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnxiyhdy69ah6h400a9d9.png" alt="Thank you" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>salesforce</category>
      <category>agents</category>
      <category>ai</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>What You Actually Learn in the Salesforce Admin Beginner Trail</title>
      <dc:creator>PRANAV BHARTI</dc:creator>
      <pubDate>Mon, 13 Apr 2026 15:33:20 +0000</pubDate>
      <link>https://forem.com/pranav_bharti/what-you-actually-learn-in-the-salesforce-admin-beginner-trail-54f4</link>
      <guid>https://forem.com/pranav_bharti/what-you-actually-learn-in-the-salesforce-admin-beginner-trail-54f4</guid>
      <description>&lt;p&gt;If you want to start learning Salesforce, the &lt;strong&gt;&lt;a href="https://trailhead.salesforce.com/content/learn/trails/force_com_admin_beginner" rel="noopener noreferrer"&gt;Admin Beginner Trail&lt;/a&gt;&lt;/strong&gt; is one of the most practical ways to build a strong foundation. This post breaks down exactly what you’ll learn and how those concepts translate into a real application.&lt;/p&gt;




&lt;h2&gt;
  
  
  ❓ Why Salesforce?
&lt;/h2&gt;

&lt;p&gt;Salesforce is a &lt;strong&gt;CRM (Customer Relationship Management)&lt;/strong&gt; platform used by companies to manage customers, sales, and operations in one place.&lt;/p&gt;

&lt;p&gt;What makes it useful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Low-code / No-code&lt;/strong&gt; → You can build applications without heavy programming
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Widely used&lt;/strong&gt; → Many companies rely on Salesforce
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation-focused&lt;/strong&gt; → Reduces manual work
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable&lt;/strong&gt; → Works for small teams as well as large organizations
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strong ecosystem (AppExchange)&lt;/strong&gt; → Extend features easily
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwa51tkxal9orb8nz1z8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwa51tkxal9orb8nz1z8.png" alt="Salesforce crm" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;In simple terms:&lt;/strong&gt; You can build business applications faster with less coding.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧱 1. Data Modeling (How Data is Organized)
&lt;/h2&gt;

&lt;p&gt;In Salesforce, everything is stored in &lt;strong&gt;Objects&lt;/strong&gt; (like tables in a database).&lt;/p&gt;

&lt;p&gt;What you learn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Difference between &lt;strong&gt;Standard Objects&lt;/strong&gt; (already available) and &lt;strong&gt;Custom Objects&lt;/strong&gt; (created by you)
&lt;/li&gt;
&lt;li&gt;Adding &lt;strong&gt;Fields&lt;/strong&gt; (like columns)
&lt;/li&gt;
&lt;li&gt;Connecting data using:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lookup Relationship&lt;/strong&gt; (loose connection)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Master-Detail Relationship&lt;/strong&gt; (strong connection)
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;Simple idea:&lt;/strong&gt; You learn how to organize and connect data properly.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 2. Data Management (Handling Data)
&lt;/h2&gt;

&lt;p&gt;You also learn how to work with actual data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Import/export data using:

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Data Import Wizard&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Loader&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Maintain data quality using:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Validation Rules&lt;/strong&gt; (prevent wrong data)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Duplicate Management&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Understand who owns and can access records
&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;Simple idea:&lt;/strong&gt; Keep data clean, correct, and well-managed.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 3. Security &amp;amp; Access Control (Who Can See What)
&lt;/h2&gt;

&lt;p&gt;Not everyone should see everything. Salesforce provides control over this.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Org-Wide Defaults (OWD)&lt;/strong&gt; → Base level access
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Role Hierarchy&lt;/strong&gt; → Access based on position
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Profiles &amp;amp; Permission Sets&lt;/strong&gt; → User-level permissions
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Field-Level Security&lt;/strong&gt; → Control specific fields
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚙️ 4. Automation (Reducing Manual Work)
&lt;/h2&gt;

&lt;p&gt;Salesforce can automate repetitive tasks.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Workflow Rules&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Process Builder&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flows&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sending automatic emails
&lt;/li&gt;
&lt;li&gt;Updating fields automatically
&lt;/li&gt;
&lt;li&gt;Creating tasks without manual effort
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;Simple idea:&lt;/strong&gt; Let the system do repetitive work for you.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎨 5. UI Customization (Making It Easy to Use)
&lt;/h2&gt;

&lt;p&gt;You can control how Salesforce looks for users.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Page Layouts&lt;/strong&gt; → What fields are visible
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lightning App Builder&lt;/strong&gt; → Design pages visually
&lt;/li&gt;
&lt;li&gt;Customizing:

&lt;ul&gt;
&lt;li&gt;Record pages
&lt;/li&gt;
&lt;li&gt;Home pages
&lt;/li&gt;
&lt;li&gt;App pages
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;Simple idea:&lt;/strong&gt; Make the system user-friendly.&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 6. Reports &amp;amp; Dashboards (Understanding Data)
&lt;/h2&gt;

&lt;p&gt;Salesforce helps you analyze data easily.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Creating &lt;strong&gt;Reports&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Applying filters and grouping
&lt;/li&gt;
&lt;li&gt;Building &lt;strong&gt;Dashboards&lt;/strong&gt; for visual insights
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 7. Ecosystem (AppExchange)
&lt;/h2&gt;

&lt;p&gt;Salesforce has a marketplace called &lt;strong&gt;AppExchange&lt;/strong&gt;.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Installing apps
&lt;/li&gt;
&lt;li&gt;Extending system functionality
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;Simple idea:&lt;/strong&gt; Add new features without building everything from scratch.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Hands-On Work (Most Important Part)
&lt;/h2&gt;

&lt;p&gt;This trail includes &lt;strong&gt;hands-on assignments&lt;/strong&gt; for every concept.&lt;/p&gt;

&lt;p&gt;You actually practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating objects and relationships
&lt;/li&gt;
&lt;li&gt;Building automations
&lt;/li&gt;
&lt;li&gt;Setting up security
&lt;/li&gt;
&lt;li&gt;Creating reports and dashboards
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;Simple idea:&lt;/strong&gt; You don’t just learn, you apply everything.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Project: MEMS (Membership &amp;amp; Event Management System)
&lt;/h2&gt;

&lt;p&gt;To apply all concepts, I built a &lt;strong&gt;MEMS system&lt;/strong&gt; using only Salesforce declarative tools (no external coding).&lt;/p&gt;

&lt;h3&gt;
  
  
  Application Structure (Tabs Created)
&lt;/h3&gt;

&lt;p&gt;The system includes the following modules (as seen in the navigation):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Memberships
&lt;/li&gt;
&lt;li&gt;Events
&lt;/li&gt;
&lt;li&gt;Sessions
&lt;/li&gt;
&lt;li&gt;Registrations
&lt;/li&gt;
&lt;li&gt;Invoices
&lt;/li&gt;
&lt;li&gt;Reports
&lt;/li&gt;
&lt;li&gt;Dashboards
&lt;/li&gt;
&lt;li&gt;Approval Requests
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 This reflects a complete real-world business application structure.&lt;/p&gt;




&lt;h3&gt;
  
  
  What I Built:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  📌 Data Model (Objects &amp;amp; Relationships)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Contact&lt;/strong&gt; → Stores user/member details
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Membership&lt;/strong&gt; → Linked to Contact
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event&lt;/strong&gt; → Stores event details
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session&lt;/strong&gt; → Linked to Event
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Registration&lt;/strong&gt; → Links Contact to Event
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invoice&lt;/strong&gt; → Linked to Registration and Membership
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Relationships:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contact ↔ Registration
&lt;/li&gt;
&lt;li&gt;Event ↔ Registration
&lt;/li&gt;
&lt;li&gt;Event ↔ Session
&lt;/li&gt;
&lt;li&gt;Contact ↔ Membership
&lt;/li&gt;
&lt;li&gt;Registration ↔ Invoice
&lt;/li&gt;
&lt;li&gt;Membership ↔ Invoice
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fayhdt71iwgfyf0dwwimp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fayhdt71iwgfyf0dwwimp.png" alt="MEMS Schema" width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  ⚙️ Automation
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Registration confirmation emails
&lt;/li&gt;
&lt;li&gt;Basic process automation using &lt;strong&gt;Workflow / Flows&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Approval flow for certain actions via &lt;strong&gt;Approval Requests&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  🔐 Security
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Role-based access control
&lt;/li&gt;
&lt;li&gt;Controlled visibility using profiles and permissions
&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  📊 Analytics
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reports&lt;/strong&gt; for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Event participation
&lt;/li&gt;
&lt;li&gt;Membership tracking
&lt;/li&gt;
&lt;li&gt;Revenue (Invoices)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dashboards&lt;/strong&gt; for visual insights  &lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;




&lt;p&gt;👉 &lt;strong&gt;Important:&lt;/strong&gt; This system was built entirely using Salesforce declarative features like Objects, Flows, Reports, and App Builder.&lt;/p&gt;




</description>
      <category>salesforce</category>
      <category>webdev</category>
      <category>crm</category>
      <category>nocode</category>
    </item>
    <item>
      <title>StyleGuard: Keep Your UI Consistent Without Slowing Down Development</title>
      <dc:creator>PRANAV BHARTI</dc:creator>
      <pubDate>Tue, 24 Mar 2026 07:04:24 +0000</pubDate>
      <link>https://forem.com/pranav_bharti/styleguard-keep-your-ui-consistent-without-slowing-down-development-jb3</link>
      <guid>https://forem.com/pranav_bharti/styleguard-keep-your-ui-consistent-without-slowing-down-development-jb3</guid>
      <description>&lt;p&gt;Your product might work perfectly.&lt;br&gt;
But does it look consistent everywhere?&lt;/p&gt;

&lt;p&gt;A mismatched button here.&lt;br&gt;
Wrong spacing there.&lt;br&gt;
Different colors across pages.&lt;/p&gt;

&lt;p&gt;These small inconsistencies quietly damage user trust and brand identity.&lt;/p&gt;

&lt;p&gt;That’s where &lt;strong&gt;&lt;a href="https://www.npmjs.com/package/@elastikteams/styleguard" rel="noopener noreferrer"&gt;StyleGuard&lt;/a&gt;&lt;/strong&gt; comes in.&lt;/p&gt;


&lt;h2&gt;
  
  
  🎯 What Is StyleGuard?
&lt;/h2&gt;

&lt;p&gt;StyleGuard is a CLI tool and Node.js library that validates your frontend code against your design system or style guide.&lt;/p&gt;

&lt;p&gt;It automatically checks your HTML/CSS for style violations - before they reach production.&lt;/p&gt;

&lt;p&gt;Think of it as a &lt;strong&gt;quality gate for your UI consistency&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  🚨 Why UI Consistency Matters
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. It Builds Strong Brand Identity
&lt;/h3&gt;

&lt;p&gt;Your design system is your visual language.&lt;/p&gt;

&lt;p&gt;Inconsistent styles lead to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confusion&lt;/li&gt;
&lt;li&gt;Reduced trust&lt;/li&gt;
&lt;li&gt;Poor user experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Consistency makes your product feel professional and reliable.&lt;/p&gt;


&lt;h3&gt;
  
  
  2. It Reduces Design-Development Gaps
&lt;/h3&gt;

&lt;p&gt;Designers define rules.&lt;br&gt;
Developers implement features.&lt;/p&gt;

&lt;p&gt;But without enforcement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Styles drift over time&lt;/li&gt;
&lt;li&gt;Guidelines get ignored&lt;/li&gt;
&lt;li&gt;Reviews become subjective&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;StyleGuard bridges this gap with &lt;strong&gt;automated validation&lt;/strong&gt;.&lt;/p&gt;


&lt;h3&gt;
  
  
  3. It Saves Time in Code Reviews
&lt;/h3&gt;

&lt;p&gt;Manual style checks are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time-consuming&lt;/li&gt;
&lt;li&gt;Error-prone&lt;/li&gt;
&lt;li&gt;Hard to scale&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;StyleGuard catches issues instantly, so your team can focus on logic - not pixels.&lt;/p&gt;


&lt;h3&gt;
  
  
  4. It Scales With Your Product
&lt;/h3&gt;

&lt;p&gt;As your codebase grows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More contributors join&lt;/li&gt;
&lt;li&gt;More components get added&lt;/li&gt;
&lt;li&gt;More chances for inconsistency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;StyleGuard ensures your UI stays aligned at scale.&lt;/p&gt;


&lt;h2&gt;
  
  
  🔍 What Does StyleGuard Check?
&lt;/h2&gt;

&lt;p&gt;StyleGuard validates your code across key design system areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎨 Colors → Matches approved palette&lt;/li&gt;
&lt;li&gt;📏 Spacing → Enforces margin, padding, gaps&lt;/li&gt;
&lt;li&gt;🔤 Typography → Font size, weight, line height&lt;/li&gt;
&lt;li&gt;🧩 Components → Style rules for buttons, cards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It ensures your UI follows defined &lt;strong&gt;design tokens and guidelines&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  ⚙️ How Does It Work?
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Install
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @elastikteams/styleguard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Run validation
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;styleguard validate &lt;span class="nt"&gt;-s&lt;/span&gt; ./tokens.json &lt;span class="nt"&gt;-p&lt;/span&gt; ./src
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;ul&gt;
&lt;li&gt;Generate HTML reports&lt;/li&gt;
&lt;li&gt;Fail builds based on error thresholds&lt;/li&gt;
&lt;li&gt;Integrate into CI/CD pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;StyleGuard fits naturally into your existing dev workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzv0kno5fyj3a4v1bfgpb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzv0kno5fyj3a4v1bfgpb.png" alt="Styleguard HTML Report" width="799" height="877"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🤖 Using StyleGuard with Claude Code (Console Automation)
&lt;/h2&gt;

&lt;p&gt;AI tools can generate UI code fast -&lt;br&gt;
but they often ignore your design system.&lt;/p&gt;

&lt;p&gt;Instead of relying on chat-based fixes, you can use &lt;strong&gt;Claude Code in the terminal&lt;/strong&gt; to create a &lt;strong&gt;self-healing workflow&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  💡 The Idea
&lt;/h2&gt;

&lt;p&gt;Use &lt;strong&gt;StyleGuard + Claude Code CLI&lt;/strong&gt; together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;StyleGuard detects issues&lt;/li&gt;
&lt;li&gt;Claude Code reads console output&lt;/li&gt;
&lt;li&gt;Claude Code automatically fixes the code&lt;/li&gt;
&lt;li&gt;Loop continues until no violations remain
No manual copying. No back-and-forth.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🔁 Automated Workflow (Real Dev Setup)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Step 1: Generate or modify UI code
&lt;/h3&gt;

&lt;p&gt;(Manually or using Claude Code)&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2: Run StyleGuard
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;styleguard validate &lt;span class="nt"&gt;-s&lt;/span&gt; ./tokens.json &lt;span class="nt"&gt;-p&lt;/span&gt; ./src
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 3: Console Output (Example)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❌ Invalid color: #123456 not in approved palette
❌ Margin: 18px not part of spacing scale
❌ Font-size: 15px not allowed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Let Claude Code Fix It Automatically
&lt;/h3&gt;

&lt;p&gt;Using Claude Code CLI, you can pipe or feed errors directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;styleguard validate &lt;span class="nt"&gt;-s&lt;/span&gt; ./tokens.json &lt;span class="nt"&gt;-p&lt;/span&gt; ./src &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; errors.txt

claude-code fix ./src &lt;span class="nt"&gt;--rules&lt;/span&gt; ./tokens.json &lt;span class="nt"&gt;--input&lt;/span&gt; errors.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or fully automated loop:&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="k"&gt;until &lt;/span&gt;styleguard validate &lt;span class="nt"&gt;-s&lt;/span&gt; ./tokens.json &lt;span class="nt"&gt;-p&lt;/span&gt; ./src&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
    &lt;/span&gt;claude-code fix ./src &lt;span class="nt"&gt;--rules&lt;/span&gt; ./tokens.json
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔄 What’s Happening Here?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;StyleGuard acts as a &lt;strong&gt;strict validator&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Claude Code acts as an &lt;strong&gt;auto-correcting engine&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Your design system becomes &lt;strong&gt;enforced in code&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a &lt;strong&gt;closed feedback loop inside your terminal&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌱 Consistency Is Not Optional Anymore
&lt;/h2&gt;

&lt;p&gt;Modern products demand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Speed&lt;/li&gt;
&lt;li&gt;Scalability&lt;/li&gt;
&lt;li&gt;Consistency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without automation, maintaining design quality becomes difficult.&lt;br&gt;
StyleGuard ensures your UI stays clean, consistent, and production-ready.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Ask yourself:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are your styles consistent across pages?&lt;/li&gt;
&lt;li&gt;Do developers strictly follow design tokens?&lt;/li&gt;
&lt;li&gt;Is UI review taking too much time?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If yes - automation is the solution.&lt;/p&gt;

&lt;p&gt;Stop relying on manual checks.&lt;br&gt;
Start validating your UI automatically.&lt;/p&gt;

&lt;p&gt;Make consistency a default - not an afterthought.&lt;/p&gt;




</description>
      <category>styleguard</category>
      <category>designsystem</category>
      <category>ai</category>
      <category>npm</category>
    </item>
    <item>
      <title>Web Accessibility: Designing Digital Experiences Everyone Can Use</title>
      <dc:creator>PRANAV BHARTI</dc:creator>
      <pubDate>Fri, 02 Jan 2026 06:52:30 +0000</pubDate>
      <link>https://forem.com/pranav_bharti/web-accessibility-designing-digital-experiences-everyone-can-use-5148</link>
      <guid>https://forem.com/pranav_bharti/web-accessibility-designing-digital-experiences-everyone-can-use-5148</guid>
      <description>&lt;p&gt;Your website is often the &lt;strong&gt;first conversation&lt;/strong&gt; with your customer.&lt;br&gt;&lt;br&gt;
But what if some people can’t even join that conversation?&lt;/p&gt;

&lt;p&gt;Web accessibility ensures that &lt;strong&gt;everyone&lt;/strong&gt;, including people with disabilities, can perceive, understand, navigate, and interact with your digital products.&lt;/p&gt;

&lt;p&gt;And today - it is &lt;strong&gt;no longer optional&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is Web Accessibility? 🧑‍💻
&lt;/h2&gt;

&lt;p&gt;Web accessibility means building websites and applications that work for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;People with &lt;strong&gt;visual impairments&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;People who use &lt;strong&gt;screen readers&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;People who navigate using &lt;strong&gt;only a keyboard&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;People with &lt;strong&gt;hearing, cognitive, or motor disabilities&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;People on &lt;strong&gt;older devices, slow networks, or small screens&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Accessibility improves usability for &lt;em&gt;everyone&lt;/em&gt; - not just users with disabilities.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Good accessibility is simply good design.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why Web Accessibility Matters 🚨
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. It Expands Your Audience
&lt;/h3&gt;

&lt;p&gt;More than &lt;strong&gt;1 billion people worldwide&lt;/strong&gt; live with some form of disability.&lt;/p&gt;

&lt;p&gt;An inaccessible website silently excludes them.&lt;/p&gt;

&lt;p&gt;Accessibility means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More users&lt;/li&gt;
&lt;li&gt;More engagement&lt;/li&gt;
&lt;li&gt;More conversions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu2ua4kj9m37865loigvp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu2ua4kj9m37865loigvp.jpg" alt="Global digital inclusion illustration" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  2. It Is a Legal Requirement
&lt;/h3&gt;

&lt;p&gt;Accessibility laws are enforced globally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;United States&lt;/strong&gt;: ADA, Section 508
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;United Kingdom&lt;/strong&gt;: Equality Act, Public Sector Accessibility Regulations
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;India&lt;/strong&gt;: Rights of Persons with Disabilities Act (RPWD)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Non-compliance can lead to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legal notices
&lt;/li&gt;
&lt;li&gt;Financial penalties
&lt;/li&gt;
&lt;li&gt;Brand reputation damage
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ibml9cujylge7j1xmdb.jpg" alt="Legal compliance icons" width="527" height="350"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3. It Improves SEO and Performance
&lt;/h3&gt;

&lt;p&gt;Accessible websites usually have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean, semantic HTML&lt;/li&gt;
&lt;li&gt;Proper headings and structure&lt;/li&gt;
&lt;li&gt;Better mobile usability&lt;/li&gt;
&lt;li&gt;Faster load times&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Search engines and assistive technologies &lt;strong&gt;consume content in similar ways&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Accessibility directly supports &lt;strong&gt;SEO and discoverability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xi26pabd56lp0lauz8j.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3xi26pabd56lp0lauz8j.jpg" alt="Accessibility and SEO overlap" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does an Accessible Website Look Like?
&lt;/h2&gt;

&lt;p&gt;An accessible website:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Works without a mouse&lt;/li&gt;
&lt;li&gt;Has readable text and proper color contrast&lt;/li&gt;
&lt;li&gt;Supports screen readers correctly&lt;/li&gt;
&lt;li&gt;Uses meaningful headings and landmarks&lt;/li&gt;
&lt;li&gt;Provides text alternatives for images&lt;/li&gt;
&lt;li&gt;Maintains logical focus order&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You may not &lt;em&gt;see&lt;/em&gt; accessibility -&lt;br&gt;&lt;br&gt;
but users will &lt;strong&gt;experience&lt;/strong&gt; it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6g5ycg5ksvqvdxjnzut8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6g5ycg5ksvqvdxjnzut8.png" alt="Accessible vs inaccessible UI comparison" width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How Can You Quickly Check Your Website? 🔍
&lt;/h2&gt;

&lt;p&gt;A very quick self-check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate using only the &lt;strong&gt;Tab key&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Zoom the page to &lt;strong&gt;200%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Disable images - does content still make sense?&lt;/li&gt;
&lt;li&gt;Run a basic audit using &lt;strong&gt;Lighthouse&lt;/strong&gt; or &lt;strong&gt;WAVE&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These steps reveal surface issues.&lt;br&gt;&lt;br&gt;
True accessibility requires &lt;strong&gt;expert evaluation and remediation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8aedpxmkhjqtfm7f2ple.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8aedpxmkhjqtfm7f2ple.jpg" alt="Accessibility audit tools" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Accessibility Is an Investment, Not a Cost
&lt;/h2&gt;

&lt;p&gt;An accessible website is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easier to use
&lt;/li&gt;
&lt;li&gt;Easier to maintain
&lt;/li&gt;
&lt;li&gt;Easier to scale
&lt;/li&gt;
&lt;li&gt;Ready for future regulations
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most importantly - it is &lt;strong&gt;inclusive by design&lt;/strong&gt;.&lt;/p&gt;




</description>
      <category>webaccessibility</category>
      <category>inclusivedesign</category>
      <category>digitalaccessibility</category>
      <category>accessibilitymatters</category>
    </item>
    <item>
      <title>Quick Debugging Techniques for Playwright Tests</title>
      <dc:creator>PRANAV BHARTI</dc:creator>
      <pubDate>Tue, 07 Oct 2025 16:58:39 +0000</pubDate>
      <link>https://forem.com/pranav_bharti/quick-debugging-techniques-for-playwright-tests-17kg</link>
      <guid>https://forem.com/pranav_bharti/quick-debugging-techniques-for-playwright-tests-17kg</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;“Debugging is like being the detective in a crime movie where you are also the murderer.” – &lt;em&gt;Filipe Fortes&lt;/em&gt;  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Playwright is a powerful tool for end-to-end testing, but debugging test failures can be tricky.&lt;br&gt;&lt;br&gt;
Based on my experience, I’ve put together a practical guide that covers &lt;strong&gt;structure&lt;/strong&gt;, &lt;strong&gt;data parsing&lt;/strong&gt;, &lt;strong&gt;configuration&lt;/strong&gt;, &lt;strong&gt;timeouts&lt;/strong&gt;, and &lt;strong&gt;debugging techniques&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Structuring Your Tests
&lt;/h2&gt;

&lt;p&gt;A well-structured test suite makes it easier to locate and fix failing tests.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep your tests modular. Use &lt;code&gt;describe&lt;/code&gt; blocks to group related tests.
&lt;/li&gt;
&lt;li&gt;Write reusable helpers for login, navigation, or data entry.
&lt;/li&gt;
&lt;li&gt;Organize test files by feature (e.g., &lt;code&gt;login.spec.ts&lt;/code&gt;, &lt;code&gt;dashboard.spec.ts&lt;/code&gt;).
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Data Parsing Techniques
&lt;/h2&gt;

&lt;p&gt;Data handling often causes hidden issues. Some tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;JSON.parse()&lt;/code&gt; for structured test data and load it from external files.
&lt;/li&gt;
&lt;li&gt;For CSV data, use libraries like &lt;strong&gt;papaparse&lt;/strong&gt; or &lt;strong&gt;csv-parse&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Ensure consistent data types — always cast numbers explicitly when reading from strings.
&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;environment variables&lt;/strong&gt; for sensitive values like credentials.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By standardizing how you parse and use data, you reduce unexpected mismatches during tests.&lt;/p&gt;




&lt;h2&gt;
  
  
  Configuration Techniques
&lt;/h2&gt;

&lt;p&gt;Playwright offers a central &lt;code&gt;playwright.config.ts&lt;/code&gt; file that controls how tests run. Key settings include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browsers:&lt;/strong&gt; Run against multiple browsers by setting &lt;code&gt;projects&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retries:&lt;/strong&gt; Add retries for flaky tests with &lt;code&gt;retries: 2&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reporters:&lt;/strong&gt; Use &lt;code&gt;html&lt;/code&gt; or &lt;code&gt;json&lt;/code&gt; reporters for better visibility.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base URL:&lt;/strong&gt; Define &lt;code&gt;use: { baseURL: "http://localhost:3000" }&lt;/code&gt; to simplify navigation.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep configurations consistent across environments using &lt;strong&gt;.env files&lt;/strong&gt; and environment variables.&lt;/p&gt;




&lt;h2&gt;
  
  
  Handling Timeouts
&lt;/h2&gt;

&lt;p&gt;Timeouts are one of the most common debugging headaches.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Global Timeout:&lt;/strong&gt; Set in &lt;code&gt;playwright.config.ts&lt;/code&gt; with &lt;code&gt;timeout: 30000&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action Timeout:&lt;/strong&gt; Control time for specific actions using &lt;code&gt;page.setDefaultTimeout(5000)&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Navigation Timeout:&lt;/strong&gt; Use &lt;code&gt;page.setDefaultNavigationTimeout(10000)&lt;/code&gt; to catch slow page loads.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Always prefer &lt;code&gt;await page.waitForSelector()&lt;/code&gt; over hard waits like &lt;code&gt;page.waitForTimeout(5000)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Proper timeout management prevents both flaky tests and long waits during failures.&lt;/p&gt;




&lt;h2&gt;
  
  
  Debugging Techniques
&lt;/h2&gt;

&lt;p&gt;When a test fails, use these approaches to identify the root cause quickly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run with &lt;code&gt;npx playwright test --debug&lt;/code&gt; to open the inspector.
&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;page.pause()&lt;/code&gt; inside a test to stop execution and explore manually.
&lt;/li&gt;
&lt;li&gt;Enable tracing with &lt;code&gt;npx playwright test --trace on&lt;/code&gt; to capture screenshots, console logs, and network calls.
&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;console.log()&lt;/code&gt; statements for critical variables to check runtime values.
&lt;/li&gt;
&lt;li&gt;Capture video or screenshots on failure by enabling it in the config file.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These methods help you narrow down issues without guesswork.&lt;/p&gt;




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

&lt;p&gt;Debugging doesn’t have to be painful.&lt;br&gt;&lt;br&gt;
By combining structured tests, clean configuration, and the right tools, you can &lt;strong&gt;save hours&lt;/strong&gt; during development and focus on building great tests instead of chasing errors.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Hope this helps you debug faster!&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Written by &lt;a href="https://www.linkedin.com/in/pranavbharti9211" rel="noopener noreferrer"&gt;Pranav Bharti&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>playwright</category>
      <category>testing</category>
      <category>debugging</category>
      <category>javascript</category>
    </item>
    <item>
      <title>The Cursor AI Shortcut: How I Built and Deployed a LangChain AI Agent with CI/CD</title>
      <dc:creator>PRANAV BHARTI</dc:creator>
      <pubDate>Mon, 30 Jun 2025 06:12:02 +0000</pubDate>
      <link>https://forem.com/pranav_bharti/the-cursor-ai-shortcut-how-i-built-and-deployed-a-langchain-ai-agent-with-cicd-4lhe</link>
      <guid>https://forem.com/pranav_bharti/the-cursor-ai-shortcut-how-i-built-and-deployed-a-langchain-ai-agent-with-cicd-4lhe</guid>
      <description>&lt;p&gt;Struggling with deployments? Discover how I used Cursor AI to debug code, automate CI/CD, and deploy a Python web app to Azure!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deploying a Flask app should be simple&lt;/strong&gt;, but hidden bugs, dependency issues, and CI/CD hiccups can turn it into a nightmare.&lt;/p&gt;

&lt;p&gt;That’s where &lt;strong&gt;Cursor AI&lt;/strong&gt; changed the game for me.&lt;br&gt;
By leveraging AI-assisted debugging, automated terminal commands, and smart error resolution, I cut my deployment time in half. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here’s how you can do it too.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  1. The AI-Powered Local Setup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Manual debugging is slow.&lt;br&gt;
&lt;strong&gt;Cursor AI Fix:&lt;/strong&gt; Instant code optimization.&lt;/p&gt;

&lt;p&gt;Instead of wasting hours fixing bugs myself, I:&lt;br&gt;
Prompt to Cursor AI:&lt;br&gt;
&lt;code&gt;Make this production-ready: remove dead code, fix errors, and generate a clean requirements.txt with exact versions.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Cursor AI automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Removed unused imports&lt;/li&gt;
&lt;li&gt;Fixed Gemini API key handling&lt;/li&gt;
&lt;li&gt;Generated a lean &lt;code&gt;requirements.txt&lt;/code&gt; (✅ no version conflicts!)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; Always specify &lt;code&gt;_Only include dependencies I actually used_&lt;/code&gt; to avoid bloat.&lt;/p&gt;


&lt;h2&gt;
  
  
  2. GitHub Push Without Typing a Single Command
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Git workflows are tedious.&lt;br&gt;
&lt;strong&gt;Cursor AI Fix:&lt;/strong&gt; One-click repo setup.&lt;/p&gt;

&lt;p&gt;I didn’t type a single Git command. Instead, I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created a GitHub repo and copied the SSH link&lt;/li&gt;
&lt;li&gt;Told Cursor AI:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prompt:&lt;br&gt;
&lt;code&gt;Push this project to my repo using SSH.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Cursor AI ran all the terminal commands:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git init&lt;br&gt;
git remote add origin git@github.com:myrepo/ethics-ai.git&lt;br&gt;
git add .&lt;br&gt;
git commit -m "AI-optimized initial commit"&lt;br&gt;
git push -u origin main&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Why This Matters:&lt;/strong&gt; No more memorizing Git syntax—just deploy.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Azure Deployment: Where AI Saved Me from Disaster
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Silent deployment failures.&lt;br&gt;
&lt;strong&gt;Cursor AI Fix:&lt;/strong&gt; Real-time error decoding.&lt;/p&gt;

&lt;p&gt;After connecting GitHub to Azure, my app failed silently. Here’s how AI helped:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❌ Error 1
ModuleNotFoundError: No module named 'langchain'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Diagnosis&lt;br&gt;
Azure doesn’t install dev dependencies. Move &lt;code&gt;langchain&lt;/code&gt; from &lt;code&gt;dev_requirements.txt&lt;/code&gt; to &lt;code&gt;requirements.txt&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❌ Error 2
Blank Page on Startup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Solution&lt;br&gt;
Flask needs a WSGI server like Gunicorn in production. Add a startup command in Azure Configuration:&lt;/p&gt;

&lt;p&gt;Command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gunicorn --bind=0.0.0.0:8000 app:app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❌ Error 3
Gemini API Key Not Loading
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reminder&lt;br&gt;
Azure doesn’t read &lt;code&gt;.env&lt;/code&gt; files. Add the key in &lt;strong&gt;App Service &amp;gt; Configuration &amp;gt; Application Settings&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. The Result: A Live AI App in Under 1 Hour
&lt;/h2&gt;

&lt;p&gt;Thanks to Cursor AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debugged code before deployment (no trial-and-error)&lt;/li&gt;
&lt;li&gt;Automated Git workflows (no manual commands)&lt;/li&gt;
&lt;li&gt;Solved Azure errors in minutes (not days)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Before AI:&lt;/strong&gt; 6+ hours of debugging&lt;br&gt;
&lt;strong&gt;After AI:&lt;/strong&gt; 45-minute deployment&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Your Turn: Try the AI Shortcut
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Next Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install &lt;strong&gt;Cursor AI&lt;/strong&gt; (VS Code extension)&lt;/li&gt;
&lt;li&gt;Use my prompts (copy them above)&lt;/li&gt;
&lt;li&gt;Deploy fearlessly—let AI handle the grunt work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Question for You&lt;br&gt;
&lt;strong&gt;What’s your biggest deployment pain point?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let me know in the comments—I’ll share how AI can fix it!&lt;/p&gt;




&lt;h2&gt;
  
  
  Call to Action
&lt;/h2&gt;

&lt;p&gt;Try &lt;strong&gt;Cursor AI&lt;/strong&gt; today and &lt;strong&gt;tag me&lt;/strong&gt; in your deployment success story!&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI won’t replace developers—but developers using AI will replace those who don’t.&lt;/strong&gt; &lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>azure</category>
      <category>cicd</category>
      <category>github</category>
      <category>cursor</category>
    </item>
  </channel>
</rss>
