<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Gray Wolf Blog</title>
    <link>https://blog.graywolf.co/</link>
    <description></description>
    <pubDate>Mon, 20 Apr 2026 01:20:21 +0000</pubDate>
    <item>
      <title>Quick Reference of Best Practices for Salesforce B2C Commerce</title>
      <link>https://blog.graywolf.co/quick-reference-of-best-practices-for-salesforce-b2c-commerce?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[&#xA;&#xA;Having worked with Salesforce B2C Commerce (previously Demandware) for almost a decade, I’ve compiled a list of articles to the official documentation on this topic.&#xA;&#xA;A map is not enough to navigate the complexity of the real world, but it can be used as a compass to find the best path forward.&#xA;&#xA;Development Best Practices&#xA;Development Guidelines and Limitations&#xA;Code Version Best Practices&#xA;Source Code Best Practices&#xA;General Security Best Practices&#xA;Security Best Practices for Administrators&#xA;Security Best Practices for Developers&#xA;Best Practices: Continuous Integration&#xA;Performance and Stability Coding Standards&#xA;  Storefront Development for Performance and Stability&#xA;  Job Development for Performance and Stability&#xA;  Administrative Considerations for Performance and Stability&#xA;Error Page Best Practices&#xA;Page Designer Development Best Practices&#xA;Template Best Practices&#xA;OCAPI Best Practices 20.4&#xA;Replication Best Practices&#xA;Inventory Best Practices&#xA;Managing Inventory Levels Best Practices&#xA;  Standard Inventory Synchronization&#xA;  Extended Inventory Synchronization&#xA;Best Practices for Active Merchandising&#xA;Promotion Best Practices&#xA;Coupon Best Practices&#xA;Best Practices for Import/Export&#xA;SEO Best Practices]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/PAsgYq72.png" alt=""/></p>

<p>Having worked with Salesforce B2C Commerce (previously Demandware) for almost a decade, I’ve compiled a list of articles to the official documentation on this topic.</p>

<p>A map is not enough to navigate the complexity of the real world, but it can be used as a compass to find the best path forward.</p>
<ul><li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/site_development/b2c_dev_best_practices.html">Development Best Practices</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/site_development/b2c_general_guidelines.html">Development Guidelines and Limitations</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/versioning/b2c_versioning_best_practices.html">Code Version Best Practices</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/source_codes/b2c_source_code_best_practices.html">Source Code Best Practices</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/b2c_security_best_practices/b2c_general_security_best_practices.html">General Security Best Practices</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/b2c_security_best_practices/b2c_security_best_practices_for_administrators.html">Security Best Practices for Administrators</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/b2c_security_best_practices/b2c_security_best_practices_for_developers.html">Security Best Practices for Developers</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/LegacyDevDoc/ContinuousIntegration.html">Best Practices: Continuous Integration</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/site_performance/b2c_performance_and_stability_coding_standards.html">Performance and Stability Coding Standards</a>
<ul><li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/site_performance/b2c_storefront_development_for_performace_and_stability.html">Storefront Development for Performance and Stability</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/site_performance/b2c_job_development_for_performance_and_stability.html">Job Development for Performance and Stability</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/site_performance/b2c_administrative_considerations_for_performance_and_stability.html">Administrative Considerations for Performance and Stability</a></li></ul></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/site_development/b2c_error_page_best_practices.html">Error Page Best Practices</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/page_designer/b2c_pd_best_practices.html">Page Designer Development Best Practices</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/content/b2c_commerce/topics/site_development/b2c_content_best_practices.html">Template Best Practices</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/OCAPI/current/usage/BestPractices.html">OCAPI Best Practices 20.4</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/DataReplication/ReplicationBestPractices.html">Replication Best Practices</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/Inventory/InventoryBestPractices.html">Inventory Best Practices</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/OrderManagement/Omnichannel/Integration/Commerce/ManageInventoryLevelsBestPractices.html">Managing Inventory Levels Best Practices</a>
<ul><li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/OrderManagement/Omnichannel/Integration/Commerce/StandardInventorySynch.html">Standard Inventory Synchronization</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/OrderManagement/Omnichannel/Integration/Commerce/AdditionalInventoryConsiderations.html">Extended Inventory Synchronization</a></li></ul></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/ActiveMerchandising/BestPracticesforActiveMerchandising.html">Best Practices for Active Merchandising</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/Promotions/PromotionBestPractices.html">Promotion Best Practices</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/Coupons/CouponBestPractices.html">Coupon Best Practices</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/ImportExport/BestPracticesforimportexport.html">Best Practices for Import/Export</a></li>
<li><a href="https://documentation.b2c.commercecloud.salesforce.com/DOC1/topic/com.demandware.dochelp/SearchEngineOptimization/SEOBestPractices.html">SEO Best Practices</a></li></ul>
]]></content:encoded>
      <guid>https://blog.graywolf.co/quick-reference-of-best-practices-for-salesforce-b2c-commerce</guid>
      <pubDate>Tue, 09 Apr 2024 13:19:20 +0000</pubDate>
    </item>
    <item>
      <title>How to keep multiple repositories in sync</title>
      <link>https://blog.graywolf.co/how-to-keep-multiple-repositories-in-sync?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[In a recent Adobe Experience Manager project, there were multiple security restrictions with access, so we enabled a repository for each team to work on the project and enable every organization to manage the permissions.&#xA;&#xA;Additionaly, in AEM as a Cloud Service, there is also a Cloud Manager repository that needs to be kept in sync to trigger the deployment to the managed instances.&#xA;&#xA;We used a continuous integration pipeline to ensure the code repositories were in sync. Below is a diagram with the workflow that was implemented:&#xA;&#xA;To make it work we enabled bitbucket pipelines, configured the repository variables and updated the content of the bitbucket-pipelines.yml file:&#xA;&#xA;image: atlassian/default-image:3&#xA;&#xA;definitions:&#xA;  steps:&#xA;    step: &amp;sync-remote-adobe&#xA;        name: Push to Adobe Experience cloud&#xA;        script:&#xA;          if [[ $ADOBECMGITSLUG ]]; then&#xA;          git remote add adobe https://$ADOBECMUSERNAME:$ADOBECMPASSWORD@git.cloudmanager.adobe.com/$ADOBECMGITSLUG&#xA;          git pull adobe $BITBUCKETBRANCH --tags&#xA;          git push adobe $BITBUCKETBRANCH --tags&#xA;          else&#xA;          echo &#34;Step skipped, ADOBECMGITSLUG variable not configured&#34;&#xA;          fi&#xA;&#xA;    step: &amp;push-bitbucket-mirror&#xA;        name: Push to Bitbucket Mirror&#xA;        script:&#xA;          if [[ $MIRRORGITSLUG ]]; then&#xA;          git remote add mirror https://x-token-auth:$MIRRORTOKEN@bitbucket.org/$MIRRORGITSLUG&#xA;          git push mirror $BITBUCKETBRANCH --tags&#xA;          else&#xA;          echo &#34;Step skipped, MIRRORGITSLUG variable not configured&#34;&#xA;          fi&#xA;&#xA;pipelines:&#xA;    branches:&#xA;      develop:&#xA;        step: push-bitbucket-mirror&#xA;        step: sync-remote-adobe&#xA;      master:&#xA;        step: push-bitbucket-mirror&#xA;        step: sync-remote-adobe&#xA;&#xA;Bonus: Sync repositories using github actions&#xA;&#xA;If you’re looking on how to keep  different repositories in sync but and the repositories are hosted on github, you can use the mirror-repository action.&#xA;&#xA;Below is a template to configure it with only 2 steps:&#xA;&#xA;1. Commit a file with the configuration:&#xA;&#xA;.github/workflows/mirror-repo-sync.yml&#xA;&#xA;on:&#xA;  push:&#xA;    branches:&#xA;      develop&#xA;&#xA;jobs:&#xA;  synctomirror:&#xA;    runs-on: ubuntu-20.04&#xA;    steps:&#xA;&#xA;    steps:&#xA;      uses: actions/checkout@v3&#xA;        with:&#xA;          fetch-depth: 0&#xA;      uses: yesolutions/mirror-action@master&#xA;        with:&#xA;          REMOTE: ${{ secrets.GITREPO }}&#xA;          GITUSERNAME: ${{ secrets.GITUSERNAME }}&#xA;          GITPASSWORD: ${{ secrets.GITPASSWORD }}&#xA;&#xA;2. Create the secrets in the settings screen:&#xA;&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>In a recent <a href="https://business.adobe.com/products/experience-manager/sites/aem-sites.html">Adobe Experience Manager</a> project, there were multiple security restrictions with access, so we enabled a repository for each team to work on the project and enable every organization to manage the permissions.</p>

<p>Additionaly, in <a href="https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/overview/introduction">AEM as a Cloud Service</a>, there is also a Cloud Manager repository that needs to be kept in sync to trigger the deployment to the managed instances.</p>

<p>We used a continuous integration pipeline to ensure the code repositories were in sync. Below is a diagram with the workflow that was implemented:</p>

<p><img src="https://i.snap.as/5Iq984GP.png" alt=""/></p>

<p>To make it work we enabled <a href="https://bitbucket.org/product/features/pipelines">bitbucket pipelines</a>, configured the <a href="https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets/">repository variables</a> and updated the content of the bitbucket-pipelines.yml file:</p>

<pre><code>image: atlassian/default-image:3

definitions:
  steps:
    - step: &amp;sync-remote-adobe
        name: Push to Adobe Experience cloud
        script:
          - if [[ $ADOBE_CM_GIT_SLUG ]]; then
          - git remote add adobe https://$ADOBE_CM_USERNAME:$ADOBE_CM_PASSWORD@git.cloudmanager.adobe.com/$ADOBE_CM_GIT_SLUG
          - git pull adobe $BITBUCKET_BRANCH --tags
          - git push adobe $BITBUCKET_BRANCH --tags
          - else
          - echo &#34;Step skipped, ADOBE_CM_GIT_SLUG variable not configured&#34;
          - fi

    - step: &amp;push-bitbucket-mirror
        name: Push to Bitbucket Mirror
        script:
          - if [[ $MIRROR_GIT_SLUG ]]; then
          - git remote add mirror https://x-token-auth:$MIRROR_TOKEN@bitbucket.org/$MIRROR_GIT_SLUG
          - git push mirror $BITBUCKET_BRANCH --tags
          - else
          - echo &#34;Step skipped, MIRROR_GIT_SLUG variable not configured&#34;
          - fi

pipelines:
    branches:
      develop:
        - step: *push-bitbucket-mirror
        - step: *sync-remote-adobe
      master:
        - step: *push-bitbucket-mirror
        - step: *sync-remote-adobe
</code></pre>

<h3 id="bonus-sync-repositories-using-github-actions" id="bonus-sync-repositories-using-github-actions">Bonus: Sync repositories using github actions</h3>

<p>If you’re looking on how to keep  different repositories in sync but and the repositories are hosted on github, you can use the <a href="https://github.com/marketplace/actions/mirror-repository">mirror-repository</a> action.</p>

<p>Below is a template to configure it with only 2 steps:</p>

<h3 id="1-commit-a-file-with-the-configuration" id="1-commit-a-file-with-the-configuration">1. Commit a file with the configuration:</h3>

<p><em>.github/workflows/mirror-repo-sync.yml</em></p>

<pre><code>on:
  push:
    branches:
      - develop

jobs:
  sync_to_mirror:
    runs-on: ubuntu-20.04
    steps:

    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - uses: yesolutions/mirror-action@master
        with:
          REMOTE: ${{ secrets.GIT_REPO }}
          GIT_USERNAME: ${{ secrets.GIT_USERNAME }}
          GIT_PASSWORD: ${{ secrets.GIT_PASSWORD }}
</code></pre>

<h3 id="2-create-the-secrets-in-the-settings-screen" id="2-create-the-secrets-in-the-settings-screen">2. Create the secrets in the settings screen:</h3>

<p><img src="https://i.snap.as/FNy5x7XP.png" alt=""/></p>
]]></content:encoded>
      <guid>https://blog.graywolf.co/how-to-keep-multiple-repositories-in-sync</guid>
      <pubDate>Tue, 26 Mar 2024 13:41:11 +0000</pubDate>
    </item>
    <item>
      <title>How we reduced AWS spending by 80% in one month?</title>
      <link>https://blog.graywolf.co/how-we-reduced-aws-spending-by-80-in-one-month?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[&#xA;&#xA;Over the last few months our AWS cost had been going up, so we created a plan to optimize our spening as much as possible.&#xA;&#xA;After implementing the optimization plan, we were able to reduce our spending by 80%.&#xA;&#xA;Here is a summary of the steps we took to get there:&#xA;&#xA;Created a directory of all the resources and how they were being used.&#xA;&#xA;Added tags to those resources to identify environment (dev, qa, prod) and the project name.&#xA;&#xA;We used the Billing &amp; Cost Management Console to identify areas of opportunity.&#xA;&#xA;Created a projecy plan with specific tasks and owners and kept track of the progress.&#xA;&#xA;Repeated steps 3-4 until we reached an acceptable threshold.&#xA;&#xA;Some examples of the actions that we took:&#xA;&#xA;Simplifying architecture to remove unnecessary elements,&#xA;Down size EC2 instances with low utilization.&#xA;Consolidate compute resources to increase instance usage.&#xA;Created and scheduled lambda functions to auto-stop EC2 instances during off-hours.&#xA;Setup alerts &amp; budgets to be more efficient moving forward.]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://i.snap.as/fFk4dwMG.png" alt=""/></p>

<p>Over the last few months our AWS cost had been going up, so we created a plan to optimize our spening as much as possible.</p>

<p>After implementing the optimization plan, we were able to reduce our spending by 80%.</p>

<p>Here is a summary of the steps we took to get there:</p>
<ol><li><p>Created a directory of all the resources and how they were being used.</p></li>

<li><p>Added tags to those resources to identify environment (dev, qa, prod) and the project name.</p></li>

<li><p>We used the Billing &amp; Cost Management Console to identify areas of opportunity.</p></li>

<li><p>Created a projecy plan with specific tasks and owners and kept track of the progress.</p></li>

<li><p>Repeated steps 3-4 until we reached an acceptable threshold.</p></li></ol>

<p>Some examples of the actions that we took:</p>
<ul><li>Simplifying architecture to remove unnecessary elements,</li>
<li>Down size EC2 instances with low utilization.</li>
<li>Consolidate compute resources to increase instance usage.</li>
<li>Created and scheduled lambda functions to auto-stop EC2 instances during off-hours.</li>
<li>Setup alerts &amp; budgets to be more efficient moving forward.</li></ul>
]]></content:encoded>
      <guid>https://blog.graywolf.co/how-we-reduced-aws-spending-by-80-in-one-month</guid>
      <pubDate>Thu, 21 Mar 2024 13:54:08 +0000</pubDate>
    </item>
    <item>
      <title>What is the first thing you can do to reduce your monthly AWS spend?</title>
      <link>https://blog.graywolf.co/what-is-the-first-thing-you-can-do-to-reduce-your-monthly-aws-spend?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[If you are using EC2 instances, the first thing you can try is AWS Cost Explorer rightzising recommendations to help you identify opportunities to downsize or terminate instances that are being underutilized to reduce costs.&#xA;&#xA;Below is a recommendation example I got to modify an instance:&#xA;&#xA;To enable rightsizing recommendations&#xA;&#xA;Open the AWS Cost Management at https://console.aws.amazon.com/cost-management/home&#xA;&#xA;In the navigation pane, choose Preferences.&#xA;&#xA;In the Recommendations section, choose Receive Amazon EC2 resource recommendations.&#xA;&#xA;Choose Save preferences.&#xA;&#xA;To access rightsizing recommendations&#xA;&#xA;Sign in to the AWS Management Console and open the AWS Cost Management console at https://console.aws.amazon.com/cost-management/home&#xA;&#xA;In the navigation pane, choose Rightsizing recommendations.]]&gt;</description>
      <content:encoded><![CDATA[<p>If you are using EC2 instances, the first thing you can try is AWS Cost Explorer <strong>rightzising recommendations</strong> to help you identify opportunities to downsize or terminate instances that are being underutilized to reduce costs.</p>

<p>Below is a recommendation example I got to modify an instance:</p>

<p><img src="https://i.snap.as/MuDZlV2O.png" alt=""/></p>

<h3 id="to-enable-rightsizing-recommendations" id="to-enable-rightsizing-recommendations">To enable rightsizing recommendations</h3>
<ol><li><p>Open the AWS Cost Management at <a href="https://console.aws.amazon.com/cost-management/home">https://console.aws.amazon.com/cost-management/home</a></p></li>

<li><p>In the navigation pane, choose <strong>Preferences</strong>.</p></li>

<li><p>In the <strong>Recommendations</strong> section, choose <strong>Receive Amazon EC2 resource recommendations</strong>.</p></li>

<li><p>Choose <strong>Save preferences</strong>.</p></li></ol>

<h3 id="to-access-rightsizing-recommendations" id="to-access-rightsizing-recommendations">To access rightsizing recommendations</h3>
<ol><li><p>Sign in to the AWS Management Console and open the AWS Cost Management console at <a href="https://console.aws.amazon.com/cost-management/home">https://console.aws.amazon.com/cost-management/home</a></p></li>

<li><p>In the navigation pane, choose <strong>Rightsizing recommendations</strong>.</p></li></ol>
]]></content:encoded>
      <guid>https://blog.graywolf.co/what-is-the-first-thing-you-can-do-to-reduce-your-monthly-aws-spend</guid>
      <pubDate>Sat, 17 Jun 2023 21:11:03 +0000</pubDate>
    </item>
  </channel>
</rss>