<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Spencer Marx</title>
    <description>The latest articles on DEV Community by Spencer Marx (@spencermarx).</description>
    <link>https://dev.to/spencermarx</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%2F162526%2F849df7f0-a8aa-4f40-a33c-473094234c8e.jpg</url>
      <title>DEV Community: Spencer Marx</title>
      <link>https://dev.to/spencermarx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/spencermarx"/>
    <language>en</language>
    <item>
      <title>Latest post hopefully helps some of you guys looking for a more structured automated code review process. Free, Open Source, and community driven 100%. Check it out and get up and running in less than 5 min 💪</title>
      <dc:creator>Spencer Marx</dc:creator>
      <pubDate>Mon, 06 Apr 2026 14:00:07 +0000</pubDate>
      <link>https://dev.to/spencermarx/latest-post-hopefully-helps-some-of-you-guys-looking-for-a-more-structured-automated-code-review-2d01</link>
      <guid>https://dev.to/spencermarx/latest-post-hopefully-helps-some-of-you-guys-looking-for-a-more-structured-automated-code-review-2d01</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/spencermarx/the-tool-that-stops-10x-more-ai-slop-than-anything-else-my-team-has-tried-open-source-free-and-372g" class="crayons-story__hidden-navigation-link"&gt;The tool that stops 10x more AI slop than anything else my team has tried. Open source, FREE, and growing 🚀&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/spencermarx" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F162526%2F849df7f0-a8aa-4f40-a33c-473094234c8e.jpg" alt="spencermarx profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/spencermarx" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Spencer Marx
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Spencer Marx
                
              
              &lt;div id="story-author-preview-content-3461091" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/spencermarx" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F162526%2F849df7f0-a8aa-4f40-a33c-473094234c8e.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Spencer Marx&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/spencermarx/the-tool-that-stops-10x-more-ai-slop-than-anything-else-my-team-has-tried-open-source-free-and-372g" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Apr 6&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/spencermarx/the-tool-that-stops-10x-more-ai-slop-than-anything-else-my-team-has-tried-open-source-free-and-372g" id="article-link-3461091"&gt;
          The tool that stops 10x more AI slop than anything else my team has tried. Open source, FREE, and growing 🚀
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/claudecode"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;claudecode&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opencode"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opencode&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/spencermarx/the-tool-that-stops-10x-more-ai-slop-than-anything-else-my-team-has-tried-open-source-free-and-372g" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;8&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/spencermarx/the-tool-that-stops-10x-more-ai-slop-than-anything-else-my-team-has-tried-open-source-free-and-372g#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>The tool that stops 10x more AI slop than anything else my team has tried. Open source, FREE, and growing 🚀</title>
      <dc:creator>Spencer Marx</dc:creator>
      <pubDate>Mon, 06 Apr 2026 13:58:58 +0000</pubDate>
      <link>https://dev.to/spencermarx/the-tool-that-stops-10x-more-ai-slop-than-anything-else-my-team-has-tried-open-source-free-and-372g</link>
      <guid>https://dev.to/spencermarx/the-tool-that-stops-10x-more-ai-slop-than-anything-else-my-team-has-tried-open-source-free-and-372g</guid>
      <description>&lt;p&gt;AI slop doesn't crash your app. It passes your tests, your linters, your type checks. It looks like code a competent person wrote. Then three weeks later you're staring at a service full of abstractions that exist for no reason, functions that do the same thing behind slightly different signatures, and variable names that technically make sense but communicate nothing to the next person reading them.&lt;/p&gt;

&lt;p&gt;That's the version of slop nobody talks about. The kind that compounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  How this started
&lt;/h2&gt;

&lt;p&gt;I've been writing software for a long time. IC, staff, principal, EM, director, now CTO. When AI coding assistants became part of our daily workflow I started doing something that felt almost paranoid at first: after an agent finished implementing something, I'd spin up separate Claude Code agents to review the output, each with a different focus area. One looking at architecture, one at security, one at quality.&lt;/p&gt;

&lt;p&gt;It worked. Way better than single-pass review. But it was completely ad-hoc. I'd manually prompt each reviewer, mentally track who said what, try to reconcile conflicting findings in my head.&lt;/p&gt;

&lt;p&gt;So I started structuring it. I gave each reviewer a defined role and explicit focus areas, and I ran them in parallel instead of sequentially. Then I added a step that changed everything: after the individual reviews, I had the reviewers talk to each other. They'd challenge findings, connect issues one reviewer found with something another reviewer flagged in a different file, push back on false positives, and reach consensus.&lt;/p&gt;

&lt;p&gt;Over a few weeks this turned into custom slash commands. Over a few months it became a real system. And when it came time to standardize the workflow across our engineering team and stop being dependent on one specific CLI tool, &lt;a href="https://github.com/spencermarx/open-code-review" rel="noopener noreferrer"&gt;Open Code Review&lt;/a&gt; was born.&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%2Fz4cdmhar7ghoghxifvig.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%2Fz4cdmhar7ghoghxifvig.png" alt="Open Code Review Logo" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it actually does
&lt;/h2&gt;

&lt;p&gt;Under the hood, OCR is really just a set of bootstrapped slash commands, markdown reference files, and orchestration rules that allow your native agentic CLI to perform structured multi-agent review. You configure a team of specialized reviewer agents (architect, security, quality, QA, whatever custom reviewers make sense for your codebase) and they review the PR independently, in parallel, with intentional overlap.&lt;/p&gt;

&lt;p&gt;Then they deliberate.&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%2Fsvi0qw2mgf7sevuelbng.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%2Fsvi0qw2mgf7sevuelbng.png" alt="Customize your Default Reviewer Team" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's a structured discourse where they challenge each other's findings, connect related issues across files, and reach actual consensus. One synthesized review comes out the other end. Not five separate opinions, but a team opinion that's been pressure-tested before you ever see it.&lt;/p&gt;

&lt;p&gt;There's a local dashboard on top of all this that makes the whole process visible and easy to follow in real time. When it's done you post the review straight to your GitHub PR.&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%2Fxavgbi6anj3ue75xttot.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%2Fxavgbi6anj3ue75xttot.png" alt="A Focused Open Code Review Session" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That deliberation step is the thing. I've seen other multi-agent approaches where each reviewer just dumps findings independently. That's parallel linting. The structured debate between reviewers with genuinely different concerns is where the signal lives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Every feature in OCR exists because I hit a wall without it while doing this manually. It grew out of months of ad-hoc multi-agent reviews, and I automated away every piece of friction incrementally.&lt;/p&gt;

&lt;p&gt;It's also agentic-CLI agnostic. It started in Claude Code but works standalone with Codex, Gemini CLI, Cursor, Windsurf, Copilot, whatever you're using. That was a hard requirement when we open-sourced it because locking a review tool to one assistant's ecosystem felt wrong.&lt;br&gt;
&lt;/p&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; @open-code-review/cli
&lt;span class="nb"&gt;cd &lt;/span&gt;your-project
ocr init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two minutes to get started. Free. Open source. No SaaS. No per-seat pricing. Reviewer teams are fully customizable or just use the defaults.&lt;/p&gt;

&lt;p&gt;➡️ &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/spencermarx/open-code-review" rel="noopener noreferrer"&gt;github.com/spencermarx/open-code-review&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If OCR helps your workflow, a GitHub star helps other engineers dealing with the same slop problem find it. And if you run into rough edges or have ideas for how it should work differently, open an issue. The feedback loop from actual users has shaped this tool more than anything else 💪&lt;/p&gt;

&lt;p&gt;If you've found other code review approaches that actually work well with AI-generated code, I'd love to hear about those too.&lt;/p&gt;

&lt;p&gt;Cheers and Happy Reviewing 🚀&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>claudecode</category>
      <category>opencode</category>
    </item>
    <item>
      <title>RELEASE THE HORDE!! 🤖 Haha, but seriously, for fans (or anti-fans) of Gastown, this one is for you... a simple lightweight orchestration engine that drops in, can manage any number of your projects, and stays out of the way. 5 min to get up and running 💪</title>
      <dc:creator>Spencer Marx</dc:creator>
      <pubDate>Thu, 19 Mar 2026 16:15:27 +0000</pubDate>
      <link>https://dev.to/spencermarx/release-the-horde-haha-but-seriously-for-fans-or-anti-fans-of-gastown-this-one-is-for-57g5</link>
      <guid>https://dev.to/spencermarx/release-the-horde-haha-but-seriously-for-fans-or-anti-fans-of-gastown-this-one-is-for-57g5</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/spencermarx/release-the-horde-multi-agent-orchestration-in-pure-bash-3oaf" class="crayons-story__hidden-navigation-link"&gt;Release the Horde: Multi-Agent Orchestration in Pure Bash&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/spencermarx" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F162526%2F849df7f0-a8aa-4f40-a33c-473094234c8e.jpg" alt="spencermarx profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/spencermarx" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Spencer Marx
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Spencer Marx
                
              
              &lt;div id="story-author-preview-content-3372795" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/spencermarx" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F162526%2F849df7f0-a8aa-4f40-a33c-473094234c8e.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Spencer Marx&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/spencermarx/release-the-horde-multi-agent-orchestration-in-pure-bash-3oaf" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 19&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/spencermarx/release-the-horde-multi-agent-orchestration-in-pure-bash-3oaf" id="article-link-3372795"&gt;
          Release the Horde: Multi-Agent Orchestration in Pure Bash
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/bash"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;bash&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devtools"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devtools&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/spencermarx/release-the-horde-multi-agent-orchestration-in-pure-bash-3oaf" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;11&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/spencermarx/release-the-horde-multi-agent-orchestration-in-pure-bash-3oaf#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              3&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>ai</category>
      <category>opensource</category>
      <category>bash</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Release the Horde: Multi-Agent Orchestration in Pure Bash</title>
      <dc:creator>Spencer Marx</dc:creator>
      <pubDate>Thu, 19 Mar 2026 16:10:12 +0000</pubDate>
      <link>https://dev.to/spencermarx/release-the-horde-multi-agent-orchestration-in-pure-bash-3oaf</link>
      <guid>https://dev.to/spencermarx/release-the-horde-multi-agent-orchestration-in-pure-bash-3oaf</guid>
      <description>&lt;p&gt;Anyone running 3+ AI coding agents in parallel has hit the same wall: the agents are fine. The coordination is the problem.&lt;/p&gt;

&lt;p&gt;Merge conflicts. Duplicated work. No review gate. Token burn on orchestration overhead. You end up spending more time managing agents than the agents save you.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://github.com/spencermarx/orc" rel="noopener noreferrer"&gt;Orc&lt;/a&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%2Fp6jsz5quhrnj0ro5amz5.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%2Fp6jsz5quhrnj0ro5amz5.png" alt="Orc in Action"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;You describe the work. Orc decomposes it into goals and beads (focused work items), spawns engineers in isolated git worktrees, reviews everything before merge, and delivers clean goal branches.&lt;/p&gt;

&lt;p&gt;Across multiple projects, from a single session.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Fix auth, add rate limiting, update docs"
                  │
                  ▼
          ┌──── orc ────┐
          │      │      │
          ▼      ▼      ▼
    fix/auth  feat/rate  task/docs      ← goal branches
      │   │      │         │
     [E] [E]    [E]       [E]           ← engineers in isolated worktrees
      │   │      │         │
     ✓/✗ ✓/✗    ✓/✗       ✓/✗           ← built-in review loop
      │   │      │         │
    fix/auth  feat/rate  task/docs      ← approved beads merge back
          │      │         │
          You review &amp;amp; merge            ← you decide when to ship
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The whole stack
&lt;/h2&gt;

&lt;p&gt;Bash. Tmux. Git worktrees.&lt;/p&gt;

&lt;p&gt;No daemon. No server. No framework. No build step. State is three files. You're running in five minutes.&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="c"&gt;# Register a project&lt;/span&gt;
orc add myapp /path/to/myapp

&lt;span class="c"&gt;# Launch&lt;/span&gt;
orc myapp

&lt;span class="c"&gt;# Or go full send&lt;/span&gt;
orc myapp &lt;span class="nt"&gt;--yolo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Opinionated but stays out of your way
&lt;/h2&gt;

&lt;p&gt;This is where it gets interesting. Orc has strong opinions about structure (four-tier hierarchy, mandatory review before merge, hard role boundaries), but the things you actually care about customizing are wide open.&lt;/p&gt;

&lt;p&gt;The review loop is mandatory. How you review is yours. Swap in your own review command, point it at a multi-agent review tool, or just describe your review standards in plain English:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[review]&lt;/span&gt;
&lt;span class="py"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"/ocr:review"&lt;/span&gt;  &lt;span class="c"&gt;# your tool, or leave blank for built-in&lt;/span&gt;

&lt;span class="py"&gt;instructions&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"""
Focus on security: check for SQL injection, XSS, and auth bypass.
All new endpoints must have rate limiting.
Verify error responses follow our RFC 7807 format.
"""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Branch naming? Natural language:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[branching]&lt;/span&gt;
&lt;span class="py"&gt;strategy&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"use Jira ticket prefix like PROJ-123, then kebab-case summary"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Delivery strategy? Same pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[delivery]&lt;/span&gt;
&lt;span class="py"&gt;mode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"pr"&lt;/span&gt;
&lt;span class="py"&gt;target_strategy&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"target develop for features, main for hotfixes"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Most of the configuration is "tell it what you want in plain English." Orc interprets it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Token efficiency by design
&lt;/h2&gt;

&lt;p&gt;Coordination happens through the filesystem, not agent-to-agent conversation. An engineer writes &lt;code&gt;review&lt;/code&gt; to a &lt;code&gt;.worker-status&lt;/code&gt; file. The orchestrator reads the file. Zero tokens burned on supervisors polling workers or nudging stalled agents.&lt;/p&gt;

&lt;p&gt;The tools you already have (tmux for sessions, git worktrees for isolation, the filesystem for signals) solve most of the orchestration problem. The interesting part is the decomposition, dispatch, and review protocol on top.&lt;/p&gt;

&lt;h2&gt;
  
  
  YOLO mode
&lt;/h2&gt;

&lt;p&gt;Sometimes you don't want to babysit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;orc myapp &lt;span class="nt"&gt;--yolo&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All approval gates are skipped. Planning flows straight into dispatch. Agents launch with auto-accept flags.&lt;/p&gt;

&lt;p&gt;But it still escalates on merge conflicts, blocked engineers, and out-of-scope discoveries. We're not animals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Works with your agent
&lt;/h2&gt;

&lt;p&gt;Claude Code, OpenCode, Codex, or bring your own. Personas are markdown files you can override per-project. Adding a new agent is a single adapter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Credit where it's due
&lt;/h2&gt;

&lt;p&gt;Huge respect to &lt;a href="https://github.com/steveyegge/gastown" rel="noopener noreferrer"&gt;Gas Town&lt;/a&gt; for proving this category matters and pushing everyone's thinking forward. Orc asked "what's the minimum viable version of this?"&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/spencermarx/orc.git
&lt;span class="nb"&gt;cd &lt;/span&gt;orc &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pnpm &lt;span class="nb"&gt;install
&lt;/span&gt;pnpm orc:install
orc add myapp /path/to/your/project
orc myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now go. Release the horde.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/spencermarx/orc" rel="noopener noreferrer"&gt;GitHub: spencermarx/orc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Star it if it's useful. PRs are welcome. Issues too.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>bash</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Open Code Review changed AI-Assisted Dev for our team</title>
      <dc:creator>Spencer Marx</dc:creator>
      <pubDate>Wed, 11 Mar 2026 14:55:40 +0000</pubDate>
      <link>https://dev.to/spencermarx/-11l5</link>
      <guid>https://dev.to/spencermarx/-11l5</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/spencermarx/your-ai-code-reviewer-has-no-one-to-disagree-with-f1j" class="crayons-story__hidden-navigation-link"&gt;Your AI code reviewer has no one to disagree with&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/spencermarx" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F162526%2F849df7f0-a8aa-4f40-a33c-473094234c8e.jpg" alt="spencermarx profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/spencermarx" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Spencer Marx
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Spencer Marx
                
              
              &lt;div id="story-author-preview-content-3339971" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/spencermarx" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F162526%2F849df7f0-a8aa-4f40-a33c-473094234c8e.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Spencer Marx&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/spencermarx/your-ai-code-reviewer-has-no-one-to-disagree-with-f1j" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Mar 11&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/spencermarx/your-ai-code-reviewer-has-no-one-to-disagree-with-f1j" id="article-link-3339971"&gt;
          Your AI code reviewer has no one to disagree with
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/codereview"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;codereview&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/claudecode"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;claudecode&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/spencermarx/your-ai-code-reviewer-has-no-one-to-disagree-with-f1j" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;24&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/spencermarx/your-ai-code-reviewer-has-no-one-to-disagree-with-f1j#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              4&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>opensource</category>
      <category>ai</category>
      <category>codereview</category>
      <category>claudecode</category>
    </item>
    <item>
      <title>Your AI code reviewer has no one to disagree with</title>
      <dc:creator>Spencer Marx</dc:creator>
      <pubDate>Wed, 11 Mar 2026 14:48:03 +0000</pubDate>
      <link>https://dev.to/spencermarx/your-ai-code-reviewer-has-no-one-to-disagree-with-f1j</link>
      <guid>https://dev.to/spencermarx/your-ai-code-reviewer-has-no-one-to-disagree-with-f1j</guid>
      <description>&lt;p&gt;Ask an AI to review your code and you get one model's opinion. One pass through the diff. Whatever it happens to focus on first.&lt;/p&gt;

&lt;p&gt;Sometimes that's fine. Sometimes it catches real stuff.&lt;/p&gt;

&lt;p&gt;But if you've ever been on a team with strong review culture you know that's not how the best reviews work. The best reviews happen when people with different concerns look at the same code and then &lt;em&gt;argue about what they found&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The security person flags something. The architect says "actually that's fine because of how we structured X." The quality engineer notices they're both missing an error handling gap that connects the two findings. The conversation surfaces things no individual reviewer would have caught alone.&lt;/p&gt;

&lt;p&gt;That back-and-forth is where the real signal lives. And every AI code review tool I've tried just... skips it entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  One pass is a coin flip with better marketing
&lt;/h2&gt;

&lt;p&gt;Here's what bugs me about the current crop of AI review tools.&lt;/p&gt;

&lt;p&gt;They're all doing fundamentally the same thing: take a diff, throw it at a model, format the output nicely. Some add project context. Some run multiple checks in parallel. But at the end of the day you're getting a single perspective, uncontested, with nobody pushing back on whether the findings are actually real.&lt;/p&gt;

&lt;p&gt;You know what you get from an uncontested review? False positives. Hallucinated findings. Surface-level nitpicks dressed up as critical issues. And occasionally, actually useful feedback buried somewhere in the noise.&lt;/p&gt;

&lt;p&gt;Sound familiar? It should. It's the same reason a single human reviewer isn't sufficient for important code either. We solved this decades ago with the concept of multiple reviewers. It just took us a while to apply the same logic to the AI versions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What if the reviewers actually talked to each other?
&lt;/h2&gt;

&lt;p&gt;This is the question that led to &lt;a href="https://github.com/spencermarx/open-code-review" rel="noopener noreferrer"&gt;Open Code Review&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I started building it as an internal tool for our team because we were frustrated with exactly the problem above. The idea was stupid simple: what if we structured AI code review the same way high performing engineering teams actually do it?&lt;/p&gt;

&lt;p&gt;So here's how it works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You configure a &lt;strong&gt;team of reviewers&lt;/strong&gt; with specific roles. Architecture, security, code quality, testing, whatever custom roles make sense for your codebase.&lt;/li&gt;
&lt;li&gt;Each reviewer &lt;strong&gt;does their pass independently&lt;/strong&gt;. Different concerns, different focus areas, different findings.&lt;/li&gt;
&lt;li&gt;Then comes the part that actually matters: a &lt;strong&gt;structured discourse step&lt;/strong&gt; where they debate each other's findings. Agree, challenge, connect related issues, surface new concerns.&lt;/li&gt;
&lt;li&gt;Only &lt;em&gt;then&lt;/em&gt; does a &lt;strong&gt;final synthesis&lt;/strong&gt; produce the review you actually see.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌─────────────┐
                    │  Tech Lead  │  ← Orchestrates
                    └──────┬──────┘
                           │
         ┌─────────────────┼─────────────────┐
         ▼                 ▼                 ▼
   ┌───────────┐    ┌───────────┐    ┌───────────┐
   │Principal×2│    │ Quality×2 │    │ Security  │
   └───────────┘    └───────────┘    └───────────┘
         │                 │                 │
         └─────────────────┼─────────────────┘
                           ▼
                    ┌─────────────┐
                    │  Discourse  │  ← They argue
                    └──────┬──────┘
                           ▼
                    ┌─────────────┐
                    │  Synthesis  │  ← You get this
                    └─────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That discourse step is the entire point. Every finding gets pressure tested by reviewers with different perspectives before it reaches you. Hallucinated issues get challenged. Connected problems get linked. Blind spots get exposed.&lt;/p&gt;

&lt;p&gt;The result is way fewer false positives and way more signal. Not because any individual reviewer is smarter, but because contested findings are just higher quality than uncontested ones. Same reason peer review works for humans.&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%2Fd5snhs8jg1reklzbezt9.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%2Fd5snhs8jg1reklzbezt9.png" alt="Open Code Review Dashboard - Review Discourse" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Customizable to the moon (or just use the defaults)
&lt;/h2&gt;

&lt;p&gt;Your codebase isn't generic and your review team shouldn't be either.&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="c1"&gt;# .ocr/config.yaml&lt;/span&gt;
&lt;span class="na"&gt;default_team&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;principal&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;    &lt;span class="c1"&gt;# Architecture, design&lt;/span&gt;
  &lt;span class="na"&gt;quality&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;      &lt;span class="c1"&gt;# Code style, best practices&lt;/span&gt;
  &lt;span class="na"&gt;security&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;     &lt;span class="c1"&gt;# Auth, data handling&lt;/span&gt;
  &lt;span class="na"&gt;testing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;      &lt;span class="c1"&gt;# Coverage, edge cases&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Need heavier security scrutiny for a payments service? Bump it to 3. Building something performance-sensitive? Create a custom reviewer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# .ocr/skills/references/reviewers/performance.md&lt;/span&gt;

&lt;span class="gh"&gt;# Performance Engineer&lt;/span&gt;

You are a performance-focused code reviewer. {ADD MORE HERE}

&lt;span class="gu"&gt;## Focus Areas&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Response times and latency
&lt;span class="p"&gt;-&lt;/span&gt; Memory usage and leaks
&lt;span class="p"&gt;-&lt;/span&gt; Database query efficiency
&lt;span class="p"&gt;-&lt;/span&gt; N+1 queries, unbounded loops, missing indexes
&lt;span class="p"&gt;-&lt;/span&gt; {ADD MORE HERE}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build these from the dashboard, or drop that file in and tell OCR to use it, and now it participates in discourse alongside everyone else. It challenges the other reviewers and gets challenged right back.&lt;/p&gt;

&lt;p&gt;Or don't think about any of this and just run it with the built-in templates. It works out of the box.&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%2F3p8rscmdf9js9dd88qmm.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%2F3p8rscmdf9js9dd88qmm.png" alt="Open Code Review Dashboard - Reviewers Team" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  It knows about your requirements, not just "best practices"
&lt;/h2&gt;

&lt;p&gt;This is the other thing that drives me nuts about most review tools. They evaluate your code against generic best practices and have no concept of what you were actually &lt;em&gt;trying to build&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;OCR lets you pass in a spec, a proposal, acceptance criteria from a ticket, whatever:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/ocr-review Review my staged changes against openspec/specs/cli/spec.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every reviewer evaluates the code against both their expertise &lt;em&gt;and&lt;/em&gt; your stated requirements. The final synthesis includes a requirements verification showing what's met, what's got gaps, and what's ambiguous.&lt;/p&gt;

&lt;p&gt;If you're doing any kind of spec-driven development this is where it really clicks. We were partly inspired by &lt;a href="https://github.com/Fission-AI/OpenSpec" rel="noopener noreferrer"&gt;OpenSpec&lt;/a&gt; on this front.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drops in, stays out of the way
&lt;/h2&gt;

&lt;p&gt;I cannot stress enough how little this should disrupt your existing workflow. It was a core design goal.&lt;br&gt;
&lt;/p&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; @open-code-review/cli
&lt;span class="nb"&gt;cd &lt;/span&gt;your-project
ocr init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It auto-detects whatever agentic environment you're using. Claude Code, Opencode, Cursor, Windsurf, GitHub Copilot, doesn't matter. Stage your changes, run &lt;code&gt;/ocr-review&lt;/code&gt;, done. There's a local-first dashboard if you want to watch progress in real-time. You can post reviews directly to your PR with &lt;code&gt;/ocr-post&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Two minutes to try. No SaaS. No per-seat pricing. Free and open source.&lt;/p&gt;

&lt;h2&gt;
  
  
  So is it actually better?
&lt;/h2&gt;

&lt;p&gt;Our team hasn't gone back to anything else. The review quality just isn't close.&lt;/p&gt;

&lt;p&gt;And I think that comes down to something really simple: an uncontested opinion is worth less than a contested one. It doesn't matter how smart the model is. If nothing pushes back on its findings before they reach you, you're going to spend your time filtering noise instead of acting on real issues.&lt;/p&gt;

&lt;p&gt;Make the reviewers argue first. Get the noise out before it's your problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/spencermarx/open-code-review" rel="noopener noreferrer"&gt;github.com/spencermarx/open-code-review&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you try it out I'd love to hear how it goes. Still early days and the feedback has been shaping this thing significantly.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>codereview</category>
      <category>claudecode</category>
    </item>
    <item>
      <title>CRM Development: Unlocking Growth with Custom Solutions</title>
      <dc:creator>Spencer Marx</dc:creator>
      <pubDate>Tue, 14 Jan 2025 15:05:02 +0000</pubDate>
      <link>https://dev.to/spencermarx/crm-development-unlocking-growth-with-custom-solutions-fle</link>
      <guid>https://dev.to/spencermarx/crm-development-unlocking-growth-with-custom-solutions-fle</guid>
      <description>&lt;h2&gt;
  
  
  Transform Your Business with Custom CRM Development 🚀
&lt;/h2&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://www.aclarify.com/blog/crm-development-the-ultimate-growth-guide" rel="noopener noreferrer"&gt;Read the full blog post for detailed insights here&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Customer Relationship Management (CRM) systems are no longer just "nice-to-have" tools—they’re essential for businesses that want to grow, streamline operations, and keep customers coming back. But here’s the catch: &lt;strong&gt;generic CRMs can’t always meet your unique needs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;custom CRM development&lt;/strong&gt; comes in. Imagine a system built specifically for your workflows, seamlessly integrating with your existing tools, and adapting to your business as it scales. Sound good? Let’s break it down.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why Custom CRM Development? 🤔
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tailored to Your Needs&lt;/strong&gt;: From industry-specific workflows to advanced compliance (think HIPAA or GDPR), a custom CRM aligns perfectly with your business.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streamlined Integrations&lt;/strong&gt;: Whether it’s ERP, marketing tools, or accounting software, custom solutions connect your systems for seamless data sharing.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable and Future-Ready&lt;/strong&gt;: Grow your CRM alongside your business without the limitations of off-the-shelf tools.
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  What’s Inside a Great CRM? 🌟
&lt;/h3&gt;

&lt;p&gt;Custom CRMs are built with the essentials and then some:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Workflow Automation&lt;/strong&gt;: Say goodbye to manual tasks with automated reminders, lead scoring, and pipeline updates.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Reporting&lt;/strong&gt;: Get real-time insights into customer behavior, sales performance, and marketing ROI.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User-Friendly Design&lt;/strong&gt;: Intuitive dashboards and responsive layouts make adoption easy for your team.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Overcome CRM Challenges with Ease 💡
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unified Data&lt;/strong&gt;: Stop juggling multiple tools. A custom CRM gives you a 360° view of each customer.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Security&lt;/strong&gt;: Meet industry compliance standards with role-based access and robust encryption.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High Adoption Rates&lt;/strong&gt;: Custom CRMs are designed for your team’s exact needs, making them easier to use and love.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Ready to Take the Next Step? 👨‍💻👩‍💻
&lt;/h3&gt;

&lt;p&gt;Whether you’re building a CRM from scratch or upgrading a legacy system, Aclarify’s &lt;strong&gt;custom CRM development services&lt;/strong&gt; can guide you every step of the way.  &lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Explore the full blog post&lt;/strong&gt; for an in-depth guide: &lt;a href="https://www.aclarify.com/blog/crm-development-the-ultimate-growth-guide" rel="noopener noreferrer"&gt;Read it here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
📩 &lt;strong&gt;Want a custom CRM built for your business? &lt;a href="https://www.aclarify.com/contact" rel="noopener noreferrer"&gt;Contact us today!&lt;/a&gt;&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Let’s build something extraordinary together.&lt;/p&gt;

</description>
      <category>crm</category>
      <category>crmdevelopment</category>
      <category>customcrm</category>
      <category>customermanagement</category>
    </item>
    <item>
      <title>Unlocking the Power of the ServiceTitan API for Custom Integrations</title>
      <dc:creator>Spencer Marx</dc:creator>
      <pubDate>Thu, 09 Jan 2025 09:44:25 +0000</pubDate>
      <link>https://dev.to/spencermarx/unlocking-the-power-of-the-servicetitan-api-for-custom-integrations-1cji</link>
      <guid>https://dev.to/spencermarx/unlocking-the-power-of-the-servicetitan-api-for-custom-integrations-1cji</guid>
      <description>&lt;h2&gt;
  
  
  Supercharge Your Operations with the ServiceTitan API 🚀
&lt;/h2&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://www.aclarify.com/blog/using-the-servicetitan-api-for-powerful-custom-integrations" rel="noopener noreferrer"&gt;Read the full blog post for in-depth guidance here&lt;/a&gt;&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;Ever felt limited by your out-of-the-box software? With the &lt;strong&gt;ServiceTitan API&lt;/strong&gt;, service-based businesses like HVAC, plumbing, and electrical companies can go beyond standard workflows. Imagine automating tasks, syncing data across platforms, and crafting custom tools that directly fit your needs. Intrigued? Let’s dive in.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why Use the ServiceTitan API? 🤔
&lt;/h3&gt;

&lt;p&gt;Here’s how this API can transform your operations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Seamless Integrations&lt;/strong&gt;: Connect ServiceTitan with CRMs, ERPs, or reporting tools like Salesforce and Power BI.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Task Automation&lt;/strong&gt;: Eliminate manual data entry by triggering emails, Slack alerts, or CRM updates.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Solutions&lt;/strong&gt;: Build dashboards, tools, or client-facing apps tailored to your business.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Break Down Silos&lt;/strong&gt;: Enable real-time data exchange, reducing errors and streamlining workflows.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Expand your integrations as your business grows.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  A Built-In Shortcut: Postman Starter Collection 💡
&lt;/h3&gt;

&lt;p&gt;Getting started with the &lt;strong&gt;ServiceTitan API&lt;/strong&gt; is easier than ever, thanks to our pre-configured &lt;strong&gt;Postman starter collection&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;Here’s what’s included:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Environment Variables&lt;/strong&gt;: Pre-set fields for tenant IDs, client secrets, and base URLs to simplify setup.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-Request Script for Authentication&lt;/strong&gt;: Automatically fetches OAuth tokens using your credentials. No manual copy-pasting required!
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sample Endpoints&lt;/strong&gt;: Prebuilt requests for essential operations like fetching technicians, invoices, and customer details.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;a href="https://drive.google.com/file/d/1TCfnOBxYQDBEcs50F-Mpkj60bK8weGAx/view?usp=sharing" rel="noopener noreferrer"&gt;Download the Postman Starter Collection here&lt;/a&gt; and jumpstart your integration testing today.&lt;/p&gt;




&lt;h3&gt;
  
  
  Get Started with the ServiceTitan API in 5 Steps
&lt;/h3&gt;

&lt;p&gt;To begin your API journey, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Request API Access&lt;/strong&gt;: Sign up via the &lt;a href="https://developer.servicetitan.io/" rel="noopener noreferrer"&gt;ServiceTitan Developer Portal&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set Up Your App&lt;/strong&gt;: Define your app’s name, scope, and permissions in the portal.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authorize in ServiceTitan&lt;/strong&gt;: Connect your app in the ServiceTitan UI and generate credentials like &lt;code&gt;Client ID&lt;/code&gt; and &lt;code&gt;Client Secret&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test with Postman&lt;/strong&gt;: Import our starter collection and make your first authenticated request in minutes.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build Your Integration&lt;/strong&gt;: Start small—sync invoices or automate customer updates—then scale.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Real-World Use Cases 🌟
&lt;/h3&gt;

&lt;p&gt;Here are just a few examples of what’s possible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Two-Way Accounting Sync&lt;/strong&gt;: Connect ServiceTitan with QuickBooks or Xero to automate invoices and payments.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Reporting&lt;/strong&gt;: Export job data to Power BI or Tableau for deeper insights.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inventory Management&lt;/strong&gt;: Track stock levels and equipment life cycles across systems.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Marketing&lt;/strong&gt;: Trigger campaigns based on job completions or renewals.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IoT Integration&lt;/strong&gt;: Sync real-time device data to your workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The possibilities are endless with the &lt;strong&gt;ServiceTitan API&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Developers, Ready to Dive In? 👨‍💻👩‍💻
&lt;/h3&gt;

&lt;p&gt;If you’re a developer eager to create meaningful integrations or a service business looking for custom solutions, &lt;strong&gt;Aclarify&lt;/strong&gt; can help.  &lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Explore the full blog post&lt;/strong&gt; for step-by-step guidance: &lt;a href="https://www.aclarify.com/blog/using-the-servicetitan-api-for-powerful-custom-integrations" rel="noopener noreferrer"&gt;Read it here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
📩 &lt;strong&gt;Curious about how we can help? &lt;a href="https://www.aclarify.com/contact" rel="noopener noreferrer"&gt;Contact us today!&lt;/a&gt;&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Let’s build something extraordinary together.&lt;/p&gt;

</description>
      <category>servicetitan</category>
      <category>api</category>
      <category>integrations</category>
      <category>automation</category>
    </item>
    <item>
      <title>What is Nearshore Software Development and Why Does It Matter?</title>
      <dc:creator>Spencer Marx</dc:creator>
      <pubDate>Thu, 09 Jan 2025 09:17:05 +0000</pubDate>
      <link>https://dev.to/spencermarx/what-is-nearshore-software-development-and-why-does-it-matter-39mo</link>
      <guid>https://dev.to/spencermarx/what-is-nearshore-software-development-and-why-does-it-matter-39mo</guid>
      <description>&lt;h2&gt;
  
  
  Nearshore Software Development: Where Talent Meets Collaboration 🚀
&lt;/h2&gt;

&lt;p&gt;Imagine collaborating with skilled developers who work in nearly the same time zone, share your work culture, and deliver exceptional results—all without skyrocketing costs. Welcome to &lt;strong&gt;nearshore software development&lt;/strong&gt;, a model that’s transforming how modern businesses scale their tech teams.&lt;/p&gt;

&lt;p&gt;At &lt;strong&gt;Aclarify&lt;/strong&gt;, we’ve perfected this approach. With offices in &lt;strong&gt;the US and Spain&lt;/strong&gt; and teams across &lt;strong&gt;Italy, Argentina, Ukraine, West Africa&lt;/strong&gt;, we bridge global talent with seamless workflows to help companies thrive. Curious about how we make it work? Keep reading—or dive deeper in our &lt;a href="https://www.aclarify.com/blog/nearshore-software-development" rel="noopener noreferrer"&gt;blog post&lt;/a&gt; for a complete guide. 🌍&lt;/p&gt;




&lt;h3&gt;
  
  
  Why Nearshore Development? 🌟
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Time Zone Alignment&lt;/strong&gt;: Forget the long delays of offshore teams. Nearshore developers work just hours apart, making real-time collaboration a breeze.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cultural Fit&lt;/strong&gt;: Similar work ethics and shared values ensure smooth communication and strong team dynamics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Savings&lt;/strong&gt;: Nearshore rates strike a perfect balance—more affordable than onshore and without the challenges of offshore.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable Talent&lt;/strong&gt;: Expand your team quickly with vetted engineers who integrate seamlessly into your workflows.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  What Sets Nearshore Apart? 🤔
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Factor&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Onshore&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Nearshore&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Offshore&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Location&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Same country&lt;/td&gt;
&lt;td&gt;Nearby country&lt;/td&gt;
&lt;td&gt;Different continent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$$$$&lt;/td&gt;
&lt;td&gt;$$-$$$&lt;/td&gt;
&lt;td&gt;$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Time Zone Overlap&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full&lt;/td&gt;
&lt;td&gt;High/Partial&lt;/td&gt;
&lt;td&gt;Minimal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cultural Alignment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;td&gt;Moderate to High&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Nearshoring&lt;/strong&gt; combines the best of both worlds—agility and cultural alignment without the high costs of onshore or the barriers of offshore.&lt;/p&gt;




&lt;h3&gt;
  
  
  Developers, This One's For You 👩‍💻👨‍💻
&lt;/h3&gt;

&lt;p&gt;Looking to join a dynamic, distributed team that collaborates across continents? At &lt;strong&gt;Aclarify&lt;/strong&gt;, we’re always on the lookout for talented developers passionate about solving complex challenges and creating cutting-edge solutions. Our global presence means you’ll work with diverse teams, gain unique perspectives, and have the chance to make a real impact.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Discover what it’s like to work at Aclarify and meet our team&lt;/strong&gt;: &lt;a href="https://www.aclarify.com/about" rel="noopener noreferrer"&gt;Learn more here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
📩 &lt;strong&gt;Interested in joining us?&lt;/strong&gt; Contact us directly to explore &lt;a href="https://www.aclarify.com/contact" rel="noopener noreferrer"&gt;career opportunities&lt;/a&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Ready to Dive Deeper? 🔗
&lt;/h3&gt;

&lt;p&gt;For an in-depth exploration of nearshore software development, its benefits, and how to choose the right partner, check out our &lt;strong&gt;full blog post&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;➡️ &lt;strong&gt;&lt;a href="https://www.aclarify.com/blog/nearshore-software-development" rel="noopener noreferrer"&gt;Read the Full Blog Here&lt;/a&gt;&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;🌟 &lt;strong&gt;Curious about career opportunities? &lt;a href="https://www.aclarify.com/contact" rel="noopener noreferrer"&gt;Get in touch today!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We’d love to connect and create something extraordinary together.&lt;/p&gt;

</description>
      <category>nearshore</category>
      <category>softwaredevelopment</category>
      <category>career</category>
      <category>techcareers</category>
    </item>
    <item>
      <title>Wrestling with Google Tag Manager (GTM) and Consent Mode in a Next.js project? We've got you covered 💪</title>
      <dc:creator>Spencer Marx</dc:creator>
      <pubDate>Thu, 05 Dec 2024 15:33:50 +0000</pubDate>
      <link>https://dev.to/spencermarx/-1ofn</link>
      <guid>https://dev.to/spencermarx/-1ofn</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/spencermarx" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F162526%2F849df7f0-a8aa-4f40-a33c-473094234c8e.jpg" alt="spencermarx"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/spencermarx/integrating-google-tag-manager-with-consent-mode-in-nextjs-15-4581" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Integrating Google Tag Manager with Consent Mode in NextJS 15&lt;/h2&gt;
      &lt;h3&gt;Spencer Marx ・ Dec 5 '24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#nextjs&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#react&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#googletagmanager&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#consentmode&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>javascript</category>
      <category>react</category>
      <category>typescript</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Integrating Google Tag Manager with Consent Mode in NextJS 15</title>
      <dc:creator>Spencer Marx</dc:creator>
      <pubDate>Thu, 05 Dec 2024 13:53:01 +0000</pubDate>
      <link>https://dev.to/spencermarx/integrating-google-tag-manager-with-consent-mode-in-nextjs-15-4581</link>
      <guid>https://dev.to/spencermarx/integrating-google-tag-manager-with-consent-mode-in-nextjs-15-4581</guid>
      <description>&lt;h2&gt;
  
  
  Simplifying Analytics and Privacy Compliance in NextJS 15
&lt;/h2&gt;

&lt;p&gt;For modern developers, integrating &lt;strong&gt;Google Tag Manager (GTM)&lt;/strong&gt; and &lt;strong&gt;Consent Mode&lt;/strong&gt; into &lt;strong&gt;NextJS 15&lt;/strong&gt; apps isn’t just a best practice—it’s a necessity. But the reality? It’s far from straightforward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy regulations&lt;/strong&gt; like &lt;strong&gt;GDPR&lt;/strong&gt; and &lt;strong&gt;CCPA&lt;/strong&gt; require careful handling of consent states, while &lt;strong&gt;NextJS 15’s limitations&lt;/strong&gt; add layers of complexity to embedding GTM scripts dynamically. The result? Many developers struggle to implement compliant analytics systems without compromising user experience or functionality.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why This Guide?
&lt;/h3&gt;

&lt;p&gt;This tutorial was built with one goal: to address the most common and frustrating challenges developers face when integrating &lt;strong&gt;GTM and Consent Mode&lt;/strong&gt; into &lt;strong&gt;NextJS 15&lt;/strong&gt; projects.&lt;/p&gt;

&lt;h4&gt;
  
  
  Here’s what makes this guide different:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NextJS’s Limitations&lt;/strong&gt;: Tools like &lt;a href="https://nextjs.org/docs/app/building-your-application/optimizing/third-party-libraries#getting-started" rel="noopener noreferrer"&gt;&lt;code&gt;@next/third-parties&lt;/code&gt;&lt;/a&gt; don’t offer robust support for Consent Mode. Specifically, they lack solutions for managing default consent states before loading cached consent values—a critical gap we solve in this guide.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Documentation Gaps&lt;/strong&gt;: The official guides and third-party libraries provide fragmented examples, often failing to address how to fully integrate &lt;strong&gt;GTM&lt;/strong&gt;, &lt;strong&gt;Consent Mode&lt;/strong&gt;, and &lt;strong&gt;cookie banners&lt;/strong&gt; into a seamless, scalable NextJS app.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A Proven, Hands-On Approach&lt;/strong&gt;: This isn’t theoretical. The solutions we present are &lt;strong&gt;battle-tested&lt;/strong&gt;, combining best practices with extended functionality to ensure both analytics precision and privacy compliance.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  What You’ll Gain
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step-by-Step Implementation&lt;/strong&gt;: Learn how to integrate GTM scripts, manage dynamic consent states, and set up analytics in a privacy-first web environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript-First Utilities&lt;/strong&gt;: Build reusable, strongly-typed functions to track user events and manage cookie preferences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Working Example Repository&lt;/strong&gt;: Clone our project to see the complete implementation in action. Compare your work at each step, ensuring your setup aligns with best practices.&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%2F86t3m8375j7lmqkh48a8.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%2F86t3m8375j7lmqkh48a8.png" alt="Image description" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Access the Codebase
&lt;/h3&gt;

&lt;p&gt;Start with the initial boilerplate and follow the phased approach detailed in the guide. Each branch demonstrates a critical step in the integration process.&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="c"&gt;# Clone the Repository&lt;/span&gt;
git clone https://github.com/spencermarx/aclarify-blog-example--gtm-with-consent-in-nextjs.git

&lt;span class="c"&gt;# Navigate to the Project Directory&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;aclarify-blog-example--gtm-with-consent-in-nextjs

&lt;span class="c"&gt;# Checkout the First Phase&lt;/span&gt;
git checkout phase/0-initial-boilerplate

&lt;span class="c"&gt;# Install Dependencies and Run&lt;/span&gt;
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this repo, you’ll have a reliable reference point for every phase of the implementation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Read This Guide?
&lt;/h3&gt;

&lt;p&gt;By the end of this tutorial, you’ll:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Master the complexities of embedding GTM scripts dynamically in NextJS 15 without performance trade-offs.&lt;/li&gt;
&lt;li&gt;Implement a cookie consent banner to handle privacy-first tracking and comply with regulations like GDPR and CCPA.&lt;/li&gt;
&lt;li&gt;Gain confidence in testing and debugging with tools like Google Tag Assistant.&lt;/li&gt;
&lt;li&gt;Build a robust, scalable solution for managing analytics in modern NextJS projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ready to tackle analytics integration while keeping privacy compliance in check?&lt;/p&gt;

&lt;p&gt;➡️ &lt;strong&gt;&lt;a href="https://www.aclarify.com/blog/how-to-set-up-google-tag-manager-with-consent-mode-in-nextjs" rel="noopener noreferrer"&gt;Read the Full Guide and Explore the Repository on Aclarify’s Blog here&lt;/a&gt;&lt;/strong&gt; ⬅️&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;About &lt;a href="https://www.aclarify.com/" rel="noopener noreferrer"&gt;Aclarify&lt;/a&gt;&lt;/strong&gt;: We empower developers to build modern, privacy-compliant solutions with cutting-edge tools like NextJS, Google Tag Manager, and Consent Mode. Join us to streamline your development process and achieve your goals.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>googletagmanager</category>
      <category>consentmode</category>
    </item>
    <item>
      <title>Build a Seamless ServiceTitan Integration with Next.js: A Modern, Full-Stack Guide</title>
      <dc:creator>Spencer Marx</dc:creator>
      <pubDate>Mon, 28 Oct 2024 20:40:00 +0000</pubDate>
      <link>https://dev.to/spencermarx/build-a-seamless-servicetitan-integration-with-nextjs-a-modern-full-stack-guide-1dbc</link>
      <guid>https://dev.to/spencermarx/build-a-seamless-servicetitan-integration-with-nextjs-a-modern-full-stack-guide-1dbc</guid>
      <description>&lt;h2&gt;
  
  
  Supercharge Your Service Business with a Custom ServiceTitan Integration
&lt;/h2&gt;

&lt;p&gt;In the service industry—covering essential businesses like HVAC, plumbing, electrical services, and beyond—streamlined operations are key to profitability. But for companies using &lt;strong&gt;ServiceTitan&lt;/strong&gt;, one of the most popular platforms for managing scheduling, dispatch, and customer communication, there's a common roadblock: the API documentation and examples are, well, &lt;em&gt;limited&lt;/em&gt;. (Queue sad face 😢)&lt;/p&gt;

&lt;p&gt;If you're trying to build custom solutions, you may find yourself hunting for real-world examples or best practices to get started.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That’s where Aclarify comes in.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Our latest blog post dives into a &lt;strong&gt;comprehensive, step-by-step guide&lt;/strong&gt; to building a custom integration between &lt;strong&gt;ServiceTitan and a modern Next.js application&lt;/strong&gt;. And this isn’t just another tutorial—it’s packed with practical insights, code examples, and solutions to common challenges that aren’t covered anywhere else.&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s Inside?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Demo Repository&lt;/strong&gt;: Access a fully built-out repository with a modern Next.js setup and pre-built ServiceTitan integration components. Perfect for exploring, modifying, and understanding best practices in a hands-on way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Full-Stack Type Safety&lt;/strong&gt;: Learn how to manage full-stack typing with TypeScript for a ServiceTitan API endpoint, ensuring your data flow is both &lt;strong&gt;reliable&lt;/strong&gt; and &lt;strong&gt;maintainable&lt;/strong&gt; across the backend and frontend.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Real-World Examples&lt;/strong&gt;: From handling ServiceTitan API authentication to implementing booking forms with custom workflows, this guide is packed with code snippets and solutions you can actually use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enterprise-Grade Practices&lt;/strong&gt;: The architecture and stack choices in this guide reflect standards seen at enterprise companies—TypeScript, Tailwind CSS, React hooks, server actions in Next.js, and secure API handling.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why This Guide is a Must-Read
&lt;/h3&gt;

&lt;p&gt;This is one of the &lt;strong&gt;only comprehensive resources&lt;/strong&gt; out there for developers and technical teams who need to work with ServiceTitan. Unlike typical guides, it’s designed to help you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Save time by avoiding common pitfalls in ServiceTitan’s API.&lt;/li&gt;
&lt;li&gt;Go beyond the basics, with a highly modular and scalable architecture.&lt;/li&gt;
&lt;li&gt;Gain insights on integrating with &lt;strong&gt;ServiceTitan’s complex API&lt;/strong&gt;, which doesn’t have extensive documentation for developers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By the end of the tutorial, you’ll not only have a working integration—you’ll have a blueprint for building future-proof, customized solutions that streamline operations and delight your customers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.aclarify.com/blog/integrating-service-titan-with-nextjs-a-step-by-step-guide-to-building-custom-integrations?utm_source=devto&amp;amp;utm_medium=referral&amp;amp;utm_campaign=servicetitan-nextjs" rel="noopener noreferrer"&gt;&lt;strong&gt;Read the full guide on Aclarify's website&lt;/strong&gt;&lt;/a&gt; and access the demo repo, code samples, and more.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;About Aclarify:&lt;/strong&gt; We specialize in developing custom software solutions that transform service-based businesses. From field service operations to customer engagement, our technology-driven approach helps companies achieve seamless, modern workflows.&lt;/p&gt;

</description>
      <category>servicetitan</category>
      <category>nextjs</category>
      <category>integration</category>
      <category>aclarify</category>
    </item>
  </channel>
</rss>
