<?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: Apurba Singh</title>
    <description>The latest articles on DEV Community by Apurba Singh (@apurbalabs).</description>
    <link>https://dev.to/apurbalabs</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%2F1640291%2F822bde7c-9eb5-4e90-b415-2927b35e1ede.jpg</url>
      <title>DEV Community: Apurba Singh</title>
      <link>https://dev.to/apurbalabs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/apurbalabs"/>
    <language>en</language>
    <item>
      <title>🚀 The End of the Memory Wall — And the Beginning of the Coordination Problem</title>
      <dc:creator>Apurba Singh</dc:creator>
      <pubDate>Mon, 27 Apr 2026 19:10:52 +0000</pubDate>
      <link>https://dev.to/apurbalabs/the-end-of-the-memory-wall-and-the-beginning-of-the-coordination-problem-3dj3</link>
      <guid>https://dev.to/apurbalabs/the-end-of-the-memory-wall-and-the-beginning-of-the-coordination-problem-3dj3</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-cloud-next-2026-04-22"&gt;Google Cloud NEXT Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;At Google Cloud NEXT ’26, we didn’t just get faster AI. We removed one of the oldest limits in computing: &lt;strong&gt;The Memory Wall.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now agents can think faster than ever.&lt;/p&gt;

&lt;p&gt;But as a Senior Solution Architect, I see a new bottleneck emerging:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Agents can now act faster than we can coordinate them.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  From Compute Bottlenecks to Coordination Bottlenecks
&lt;/h2&gt;

&lt;p&gt;For 15 years, building distributed systems meant fighting infrastructure limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High-latency networks
&lt;/li&gt;
&lt;li&gt;Expensive, scarce compute
&lt;/li&gt;
&lt;li&gt;Drastic memory constraints
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At Google Cloud NEXT ’26, the paradigm shifted. With infrastructure like the &lt;strong&gt;TPU 8i&lt;/strong&gt;, we are no longer blocked by raw compute.&lt;/p&gt;

&lt;p&gt;We are entering a new phase:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Systems can think fast enough. Now they need to work together reliably.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Breakthrough Isn’t Just Models; It’s Silicon
&lt;/h2&gt;

&lt;p&gt;While most attention went to models, the real shift for system builders is underneath:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Boardfly topology&lt;/strong&gt; reduces communication distance to ~7 hops
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-chip memory&lt;/strong&gt; keeps reasoning context close to compute
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collective acceleration&lt;/strong&gt; reduces coordination overhead
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These changes remove the &lt;strong&gt;memory wall&lt;/strong&gt;—the hidden cost where reasoning slows down because data has to move.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why the Memory Wall Matters for Agents
&lt;/h2&gt;

&lt;p&gt;AI agents don’t just compute—they &lt;strong&gt;reason in loops&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Each step depends on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;context
&lt;/li&gt;
&lt;li&gt;memory
&lt;/li&gt;
&lt;li&gt;previous decisions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Previously:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every step incurred a latency penalty
&lt;/li&gt;
&lt;li&gt;agents spent more time waiting than thinking
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reasoning becomes fast
&lt;/li&gt;
&lt;li&gt;concurrency becomes cheap
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;And once thinking becomes cheap, coordination becomes expensive.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  We’ve Seen This Before
&lt;/h2&gt;

&lt;p&gt;In the microservices era, we had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;service-to-service chatter
&lt;/li&gt;
&lt;li&gt;race conditions
&lt;/li&gt;
&lt;li&gt;distributed state conflicts
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We introduced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;queues
&lt;/li&gt;
&lt;li&gt;locks
&lt;/li&gt;
&lt;li&gt;orchestration
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now we face the same problem again—just with higher stakes.&lt;/p&gt;

&lt;p&gt;Because agents don’t just respond…&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;They reason over time.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The New Failure Mode: Reasoning Race Conditions
&lt;/h2&gt;

&lt;p&gt;If you run hundreds of agents without coordination:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;they read stale state
&lt;/li&gt;
&lt;li&gt;they overwrite each other
&lt;/li&gt;
&lt;li&gt;they make decisions based on outdated reality
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don’t get scale.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You get reasoning race conditions.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  A Practical Direction: Agent Governance Layer (AGL)
&lt;/h2&gt;

&lt;p&gt;From building production systems, one thing becomes clear quickly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Coordination cannot be optional.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This leads to what I think of as an &lt;strong&gt;Agent Governance Layer (AGL)&lt;/strong&gt;—a control plane for agent behavior.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. Identity → Semantic Scoping
&lt;/h3&gt;

&lt;p&gt;Agents need more than roles.&lt;/p&gt;

&lt;p&gt;They need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;scoped context
&lt;/li&gt;
&lt;li&gt;bounded permissions
&lt;/li&gt;
&lt;li&gt;intent-aware access
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;What is this agent allowed to do &lt;em&gt;right now&lt;/em&gt;?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  2. Synchronization → Reasoning Mutex
&lt;/h3&gt;

&lt;p&gt;Agents must not blindly write to shared state.&lt;/p&gt;

&lt;p&gt;They need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;controlled execution
&lt;/li&gt;
&lt;li&gt;conflict awareness
&lt;/li&gt;
&lt;li&gt;coordination across time
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;blockquote&gt;
&lt;p&gt;a “transaction” includes human latency&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  3. State Awareness → Versioned Systems
&lt;/h3&gt;

&lt;p&gt;Shared memory must be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;versioned
&lt;/li&gt;
&lt;li&gt;validated before commit
&lt;/li&gt;
&lt;li&gt;conflict-aware
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Otherwise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stale reasoning
&lt;/li&gt;
&lt;li&gt;silent corruption
&lt;/li&gt;
&lt;li&gt;unpredictable outcomes
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. Intent Logging → The “Why” Layer
&lt;/h3&gt;

&lt;p&gt;In agent systems, debugging changes:&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;what happened?&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;why did the agent decide this?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Intent becomes the new observability.&lt;/p&gt;




&lt;h2&gt;
  
  
  A New Metric: Reasoning Health
&lt;/h2&gt;

&lt;p&gt;We used to monitor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU
&lt;/li&gt;
&lt;li&gt;memory
&lt;/li&gt;
&lt;li&gt;latency
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now we must also monitor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;conflict frequency
&lt;/li&gt;
&lt;li&gt;stale reasoning
&lt;/li&gt;
&lt;li&gt;retry loops
&lt;/li&gt;
&lt;li&gt;failed commits
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Reasoning Health will define system reliability in the agentic era.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Closing Thought
&lt;/h2&gt;

&lt;p&gt;We are moving from systems that &lt;strong&gt;execute&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
to systems that &lt;strong&gt;reason&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Google solved the infrastructure problem.&lt;/p&gt;

&lt;p&gt;Now we have to solve the coordination problem.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Running 1,000 agents is easy.&lt;br&gt;&lt;br&gt;
Making them behave like a system is not.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Discussion
&lt;/h2&gt;

&lt;p&gt;If you’re building with agents today:&lt;/p&gt;

&lt;p&gt;How are you handling shared state?&lt;/p&gt;

&lt;p&gt;Are you trusting the system—or actively governing it?&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>cloudnextchallenge</category>
      <category>googlecloud</category>
      <category>architecture</category>
    </item>
    <item>
      <title>🚀 The Architect’s Blueprint: Securing Local Agentic Workflows with OpenClaw</title>
      <dc:creator>Apurba Singh</dc:creator>
      <pubDate>Fri, 24 Apr 2026 22:59:07 +0000</pubDate>
      <link>https://dev.to/apurbalabs/the-architects-blueprint-securing-local-agentic-workflows-with-openclaw-2lnl</link>
      <guid>https://dev.to/apurbalabs/the-architects-blueprint-securing-local-agentic-workflows-with-openclaw-2lnl</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/openclaw-2026-04-16"&gt;OpenClaw Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Question Behind Agentic AI
&lt;/h2&gt;

&lt;p&gt;Most discussions around agentic AI focus on capability—what agents can do, how autonomous they are, how “smart” they feel.&lt;/p&gt;

&lt;p&gt;But in production systems, that’s not the real question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The real question is governance.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Who is allowed to act?&lt;br&gt;&lt;br&gt;
When are they allowed to act?&lt;br&gt;&lt;br&gt;
And what happens when multiple agents act at the same time?&lt;/p&gt;

&lt;p&gt;As someone building high-compliance, scalable systems, these are the constraints that define whether a system survives in production—or fails silently.&lt;/p&gt;


&lt;h2&gt;
  
  
  Context: From Microservices to Agentic Systems
&lt;/h2&gt;

&lt;p&gt;Over the past several years, I’ve worked on regulated, high-volume architectures where automated responders interact with critical systems.&lt;/p&gt;

&lt;p&gt;A consistent pattern emerged:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Intelligence without control becomes a liability.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In my current work on platforms like GotiHub, I separate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Workflow orchestration&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI processing layers&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This separation is not optional—it’s what allows systems to scale safely.&lt;/p&gt;

&lt;p&gt;When I explored OpenClaw, I saw an opportunity to apply the same discipline to agentic workflows.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Local-First Advantage (Done Right)
&lt;/h2&gt;

&lt;p&gt;OpenClaw’s local-first model isn’t just about privacy—it’s about &lt;strong&gt;reducing the attack surface&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When implemented properly, it enables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero-Trust Data Sovereignty&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Vector data (e.g., Weaviate) stays within controlled environments (local or VPC).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Secure Secret Handling&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Skills rely on local environment variables, avoiding exposure through external LLM logging layers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deterministic Execution Boundaries&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Agent capabilities can be tightly scoped and enforced.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not just features—they are &lt;strong&gt;architectural primitives for secure systems&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Concurrency Problem No One Talks About
&lt;/h2&gt;

&lt;p&gt;Here’s the gap I don’t see discussed enough:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What happens when multiple agents share state?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Imagine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;50 OpenClaw instances&lt;/li&gt;
&lt;li&gt;All reading and writing to shared Markdown memory files&lt;/li&gt;
&lt;li&gt;No coordination mechanism&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not just a performance issue.&lt;/p&gt;

&lt;p&gt;It’s a &lt;strong&gt;data integrity problem&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;race conditions
&lt;/li&gt;
&lt;li&gt;inconsistent memory state
&lt;/li&gt;
&lt;li&gt;unpredictable behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In traditional microservices, we solve this with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redis locks
&lt;/li&gt;
&lt;li&gt;message queues
&lt;/li&gt;
&lt;li&gt;transactional boundaries
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But in many agentic setups, this layer is missing.&lt;/p&gt;


&lt;h2&gt;
  
  
  A Practical Approach: Governance Over Intelligence
&lt;/h2&gt;

&lt;p&gt;From my experience, scaling agentic systems requires two distinct control layers:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Identity Layer (Scope Control)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; &lt;em&gt;Should this agent be allowed to act?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Using something like &lt;code&gt;laravel-iam&lt;/code&gt;, each agent operates within a defined permission scope:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;access to specific memory regions&lt;/li&gt;
&lt;li&gt;allowed actions&lt;/li&gt;
&lt;li&gt;role-based constraints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures agents never operate with a “master key.”&lt;/p&gt;


&lt;h3&gt;
  
  
  2. Synchronization Layer (State Control)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; &lt;em&gt;When is this agent allowed to act?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is where a centralized control mechanism—like a &lt;code&gt;Laravel Approval Engine&lt;/code&gt;—becomes critical.&lt;/p&gt;

&lt;p&gt;Before an agent writes to shared memory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It must request a &lt;strong&gt;state lock&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;If another agent holds the lock → request is queued&lt;/li&gt;
&lt;li&gt;Once approved → action proceeds&lt;/li&gt;
&lt;/ul&gt;

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

&lt;blockquote&gt;
&lt;p&gt;uncontrolled concurrency → &lt;strong&gt;audited, deterministic workflows&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  Example: An Enterprise Approval Skill
&lt;/h2&gt;

&lt;p&gt;Here’s a simplified example of how a governed skill might look:&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;# Skill: Enterprise Approval Check&lt;/span&gt;

&lt;span class="gh"&gt;# Description:&lt;/span&gt;
Checks if an agent has permission to trigger a deploy.

&lt;span class="gu"&gt;## Constraints:&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Validate role via &lt;span class="sb"&gt;`laravel-iam`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Return 403 if unauthorized

&lt;span class="gu"&gt;## Execution:&lt;/span&gt;
POST {{APP_URL}}/api/v1/approvals/check

Headers:
  Authorization: Bearer {{AGENT_IAM_TOKEN}}

Body:
{
  "action": "deploy",
  "actor": "{{user_id}}"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This isn’t about limiting agents—it’s about making their behavior &lt;strong&gt;predictable, auditable, and safe&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lessons from Production Systems
&lt;/h2&gt;

&lt;p&gt;A few principles that consistently hold:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scoped Skills Over Global Access&lt;/strong&gt;
Narrow permissions reduce risk dramatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit Logs Are Non-Negotiable&lt;/strong&gt;
Observability is essential to detect reasoning drift and unintended behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance Beats “Over-Intelligence”&lt;/strong&gt;
Smaller local models (e.g., LLaMA, Mistral) are often faster, cheaper, and more reliable for most workloads.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Closing Thought
&lt;/h2&gt;

&lt;p&gt;If agentic systems are going to operate in real production environments, they must evolve:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;From autonomous scripts → to governed systems.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;OpenClaw provides a powerful foundation for local-first experimentation.&lt;br&gt;
The next step is layering &lt;strong&gt;identity, synchronization, and control&lt;/strong&gt; on top of that foundation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Discussion
&lt;/h2&gt;

&lt;p&gt;I’m curious how others are approaching this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How are you managing shared state and concurrency in local agent workflows?&lt;/strong&gt;&lt;br&gt;
Are you relying on implicit behavior—or introducing explicit control layers?&lt;/p&gt;

&lt;p&gt;Let’s discuss.&lt;/p&gt;

</description>
      <category>openclawchallenge</category>
      <category>devchallenge</category>
      <category>architecture</category>
      <category>ai</category>
    </item>
    <item>
      <title>Laravel Is Growing Up — So I Built a Workflow Engine That Matches It (Clean Architecture + IAM + Token Approval)</title>
      <dc:creator>Apurba Singh</dc:creator>
      <pubDate>Mon, 20 Apr 2026 00:43:04 +0000</pubDate>
      <link>https://dev.to/apurbalabs/laravel-is-growing-up-so-i-built-a-workflow-engine-that-matches-it-clean-architecture-iam--1060</link>
      <guid>https://dev.to/apurbalabs/laravel-is-growing-up-so-i-built-a-workflow-engine-that-matches-it-clean-architecture-iam--1060</guid>
      <description>&lt;h1&gt;
  
  
  This week’s DEV Community digest highlighted something interesting:
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Laravel developers are moving beyond “fat controllers” toward clean architecture and enterprise-grade systems.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s exactly what I’ve been working on.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ The Problem (We All Faced)
&lt;/h2&gt;

&lt;p&gt;If you've built any of these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Leave approval&lt;/li&gt;
&lt;li&gt;Expense approval&lt;/li&gt;
&lt;li&gt;Purchase workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You already know the reality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Business logic inside controllers&lt;/li&gt;
&lt;li&gt;Role checks everywhere&lt;/li&gt;
&lt;li&gt;Email spam for approvals&lt;/li&gt;
&lt;li&gt;Hard to scale, harder to maintain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And every project?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You rebuild the same workflow logic again.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  💸 Why Most Teams Get It Wrong
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;SaaS tools&lt;/li&gt;
&lt;li&gt;Zapier automation&lt;/li&gt;
&lt;li&gt;Email-based approvals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which leads to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recurring cost&lt;/li&gt;
&lt;li&gt;Limited customization&lt;/li&gt;
&lt;li&gt;Poor visibility&lt;/li&gt;
&lt;li&gt;No real control&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 What I Built Instead
&lt;/h2&gt;

&lt;p&gt;I didn’t build another feature.&lt;/p&gt;

&lt;p&gt;I built a &lt;strong&gt;reusable approval workflow engine&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-level approval pipelines&lt;/li&gt;
&lt;li&gt;Role-based access (IAM-ready)&lt;/li&gt;
&lt;li&gt;Event-driven lifecycle&lt;/li&gt;
&lt;li&gt;Token-based approvals (no login required)&lt;/li&gt;
&lt;li&gt;Smart notification batching&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧩 The Architecture (This Is the Key)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Adapters (API / CLI / Queue)
        ↓
Workflow Manager
        ↓
Workflow Engine (Pure Logic)
        ↓
Domain Models (State)
        ↓
Events → Listeners → Notifications
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key Idea:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;The engine knows nothing about HTTP, UI, or SaaS.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔥 What Makes It Different
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Headless Workflow Engine
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$manager&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'requisition'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$payload&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$manager&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;approve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$workflowId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$userId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No controller dependency. Works anywhere.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. IAM-Ready (But Decoupled)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Engine does NOT handle auth&lt;/li&gt;
&lt;li&gt;It only receives &lt;code&gt;user_id&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;IAM handles permissions externally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Clean separation = scalable system&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Token-Based Approval (Game Changer)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /api/v1/approvals/token/approve
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Secure&lt;/li&gt;
&lt;li&gt;Expiring&lt;/li&gt;
&lt;li&gt;Single-use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Approve directly from email / Slack&lt;br&gt;
👉 No login required&lt;/p&gt;


&lt;h3&gt;
  
  
  4. Smart Notification Batching
&lt;/h3&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;10 approvals → 10 emails ❌&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;10 approvals → 1 email ✅&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h3&gt;
  
  
  5. Idempotent Workflow Execution
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nb"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'sha256'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Prevents duplicate workflows on retries.&lt;/p&gt;


&lt;h3&gt;
  
  
  6. Extensible Plugin System (One of My Favorite Parts)
&lt;/h3&gt;

&lt;p&gt;One thing I really wanted was flexibility.&lt;/p&gt;

&lt;p&gt;So I added a plugin system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hook into workflow events
&lt;/li&gt;
&lt;li&gt;Add integrations (Slack, email, APIs)
&lt;/li&gt;
&lt;li&gt;Extend behavior without touching core
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SlackPlugin&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;BasePlugin&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;boot&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;WorkflowCompleted&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// send slack notification&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Built Like a Real System
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Full lifecycle testing&lt;/li&gt;
&lt;li&gt;Authorization validation&lt;/li&gt;
&lt;li&gt;Event-driven consistency&lt;/li&gt;
&lt;li&gt;Duplicate protection&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💼 Real-World Direction
&lt;/h2&gt;

&lt;p&gt;This system is designed for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SaaS platforms&lt;/li&gt;
&lt;li&gt;Banking workflows&lt;/li&gt;
&lt;li&gt;Enterprise approval pipelines&lt;/li&gt;
&lt;li&gt;Internal automation systems&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔗 Open Source
&lt;/h2&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/apurba-labs/laravel-approval-engine" rel="noopener noreferrer"&gt;https://github.com/apurba-labs/laravel-approval-engine&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🤝 Let’s Talk
&lt;/h2&gt;

&lt;p&gt;If you're building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workflow systems&lt;/li&gt;
&lt;li&gt;Approval pipelines&lt;/li&gt;
&lt;li&gt;RBAC / IAM architectures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📩 LinkedIn: &lt;a href="https://www.linkedin.com/in/apurba-narayan-singh/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/apurba-narayan-singh/&lt;/a&gt;&lt;br&gt;
📧 &lt;a href="mailto:apurbansinghdev@gmail.com"&gt;apurbansinghdev@gmail.com&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 I’d Love Your Feedback
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How are you handling approvals today?&lt;/li&gt;
&lt;li&gt;Are you using SaaS tools or building in-house?&lt;/li&gt;
&lt;li&gt;What’s the biggest pain in your workflow systems?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s discuss 👇&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>architecture</category>
      <category>saas</category>
      <category>opensource</category>
    </item>
    <item>
      <title>From Python to Laravel: Why I Built My Own IAM System Instead of Using Existing Packages</title>
      <dc:creator>Apurba Singh</dc:creator>
      <pubDate>Sat, 04 Apr 2026 05:30:57 +0000</pubDate>
      <link>https://dev.to/apurbalabs/from-python-to-laravel-why-i-built-my-own-iam-system-instead-of-using-existing-packages-3a81</link>
      <guid>https://dev.to/apurbalabs/from-python-to-laravel-why-i-built-my-own-iam-system-instead-of-using-existing-packages-3a81</guid>
      <description>&lt;p&gt;As a backend developer, I’ve spent most of my career working with Python — FastAPI, Django, Flask.&lt;br&gt;
I’ve always cared about one thing deeply:&lt;br&gt;
👉 building systems that scale without becoming messy&lt;br&gt;
But there was one problem I kept running into… no matter the stack.&lt;/p&gt;

&lt;p&gt;🧠 &lt;strong&gt;The Problem: The “Global Role” Trap&lt;/strong&gt;&lt;br&gt;
At first, everything looks simple:&lt;br&gt;
• Users&lt;br&gt;
• Roles&lt;br&gt;
• Permissions&lt;br&gt;
But as systems grow, things start breaking.&lt;br&gt;
Most RBAC (Role-Based Access Control) packages assume:&lt;br&gt;
👉 a user is either an Admin… or they aren’t.&lt;br&gt;
But real-world systems are never that simple.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A real scenario:&lt;/strong&gt;&lt;br&gt;
• A user is a &lt;strong&gt;Manager in Branch A&lt;/strong&gt;&lt;br&gt;
• The same user is a &lt;strong&gt;Viewer in Branch B&lt;/strong&gt;&lt;br&gt;
Now ask yourself:&lt;br&gt;
👉 How do you model this cleanly?&lt;/p&gt;

&lt;p&gt;Most of the time, we don’t.&lt;br&gt;
We write conditions like:&lt;br&gt;
if ($user-&amp;gt;role === 'manager' &amp;amp;&amp;amp; $branch_id === 1) { ... }&lt;br&gt;
And slowly…&lt;br&gt;
• logic spreads everywhere&lt;br&gt;
• dependencies grow&lt;br&gt;
• and one small change breaks multiple parts of the system&lt;/p&gt;

&lt;p&gt;😵 &lt;strong&gt;When It Became a Problem&lt;/strong&gt;&lt;br&gt;
Across multiple projects, I saw the same pattern:&lt;br&gt;
• Roles started multiplying&lt;br&gt;
• Permissions became unclear&lt;br&gt;
• Debugging access issues became painful&lt;br&gt;
It didn’t matter if I was using Python or Laravel.&lt;br&gt;
👉 The problem wasn’t the framework.&lt;br&gt;
👉 The problem was the model.&lt;/p&gt;

&lt;p&gt;🔄 &lt;strong&gt;The Turning Point&lt;/strong&gt;&lt;br&gt;
While working on Laravel-based systems, I explored existing solutions like Spatie.&lt;br&gt;
They are great — clean, simple, and widely used 👏&lt;br&gt;
But for complex systems, I kept hitting limitations:&lt;br&gt;
• No real support for contextual authority&lt;br&gt;
• Difficult to manage multi-tenant permissions&lt;br&gt;
• Hard to model relationships between roles and scopes&lt;br&gt;
At some point, I stopped trying to “work around” the problem.&lt;br&gt;
👉 I decided to rethink it.&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;Building Laravel IAM&lt;/strong&gt;&lt;br&gt;
Instead of focusing only on roles, I started thinking in terms of:&lt;br&gt;
👉 &lt;strong&gt;relationships + context + resolution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This led me to build:&lt;br&gt;
&lt;strong&gt;Laravel IAM (v0.2.0)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;⚙️ &lt;strong&gt;The Core Idea: The Four Levels of Truth&lt;/strong&gt;&lt;br&gt;
Instead of hardcoding logic, the system resolves permissions through layered specificity:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;*&lt;em&gt;Global *&lt;/em&gt;→ &lt;em&gt;.&lt;/em&gt; (Super Admin)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource Wildcard&lt;/strong&gt; → invoice.*&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action Wildcard&lt;/strong&gt; → *.approve&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic Permission&lt;/strong&gt; → invoice.approve
This makes permission checks:
• predictable
• scalable
• easy to reason about&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🧩 &lt;strong&gt;Context Matters&lt;/strong&gt;&lt;br&gt;
The same role doesn’t mean the same thing everywhere.&lt;br&gt;
So the system supports:&lt;br&gt;
• Tenant-based roles&lt;br&gt;
• Team-based roles&lt;br&gt;
• Branch-level permissions&lt;br&gt;
👉 Without turning your code into a mess&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;What I Learned&lt;/strong&gt;&lt;br&gt;
This journey taught me something important:&lt;br&gt;
👉 &lt;strong&gt;Authorization is not about roles — it’s about context&lt;/strong&gt;&lt;br&gt;
And even more importantly:&lt;br&gt;
👉 &lt;strong&gt;Architecture matters more than framework&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;⚙️ &lt;strong&gt;Under the Hood&lt;/strong&gt;&lt;br&gt;
Some design decisions behind the system:&lt;br&gt;
• &lt;strong&gt;Registry Pattern&lt;/strong&gt; → decoupled resources &amp;amp; actions&lt;br&gt;
• &lt;strong&gt;Flexible Role Assignment&lt;/strong&gt; → supports IDs, slugs, or models&lt;br&gt;
• &lt;strong&gt;Scoped Middleware&lt;/strong&gt; → supports contextual authorization&lt;br&gt;
• &lt;strong&gt;Blade Directives&lt;/strong&gt; → clean UI permission checks&lt;br&gt;
And yes — everything is backed by a test suite simulating real workflows ✅&lt;/p&gt;

&lt;p&gt;🛠️ &lt;strong&gt;Open Source&lt;/strong&gt;&lt;br&gt;
I’ve open-sourced the project and would genuinely love feedback:&lt;br&gt;
📦 &lt;a href="https://packagist.org/packages/apurba-labs/laravel-iam" rel="noopener noreferrer"&gt;https://packagist.org/packages/apurba-labs/laravel-iam&lt;/a&gt;&lt;br&gt;
💻 &lt;a href="https://github.com/apurba-labs/laravel-iam" rel="noopener noreferrer"&gt;https://github.com/apurba-labs/laravel-iam&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💬 &lt;strong&gt;Let’s Talk&lt;/strong&gt;&lt;br&gt;
How do you handle complex permissions in your systems?&lt;br&gt;
Have you faced similar challenges with RBAC?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the 2026 WeCoded Challenge (&lt;a href="https://dev.to/challenges/wecoded-2026):"&gt;https://dev.to/challenges/wecoded-2026):&lt;/a&gt; Echoes of Experience&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Built with ☕ and logic by Apurba Labs.&lt;/p&gt;

&lt;h1&gt;
  
  
  Laravel #PHP #Python #IAM #RBAC #SaaS #Backend #OpenSource #WeCoded #wecoded2026
&lt;/h1&gt;

</description>
      <category>laravel</category>
      <category>saas</category>
      <category>opensource</category>
      <category>wecoded</category>
    </item>
    <item>
      <title>I’m a Python Developer — So I Built a Better IAM System for Laravel</title>
      <dc:creator>Apurba Singh</dc:creator>
      <pubDate>Fri, 03 Apr 2026 19:16:58 +0000</pubDate>
      <link>https://dev.to/apurbalabs/im-a-python-developer-so-i-built-a-better-iam-system-for-laravel-gah</link>
      <guid>https://dev.to/apurbalabs/im-a-python-developer-so-i-built-a-better-iam-system-for-laravel-gah</guid>
      <description>&lt;p&gt;I’m a Python/FastAPI Developer — So I Built an IAM System in Laravel&lt;br&gt;
As a backend developer working with FastAPI, Django, and Flask, I’ve always cared deeply about clean architecture and scalable authorization systems.&lt;br&gt;
But every time I built a SaaS product, I ran into the same problem:&lt;br&gt;
👉 Permissions become messy… very quickly.&lt;/p&gt;




&lt;p&gt;🧠 The Real Problem: Contextual Authority&lt;br&gt;
Let’s say:&lt;br&gt;
• A user is a Manager in Branch A&lt;br&gt;
• The same user is a Viewer in Branch B&lt;br&gt;
Most RBAC systems struggle here.&lt;br&gt;
You either:&lt;br&gt;
• add tons of conditional logic ❌&lt;br&gt;
• or end up with tightly coupled, hard-to-maintain permission rules ❌&lt;/p&gt;




&lt;p&gt;😵 The Breaking Point&lt;br&gt;
When systems grow, you start seeing:&lt;br&gt;
• Role explosions (too many roles)&lt;br&gt;
• Nested dependencies&lt;br&gt;
• Hardcoded permission checks&lt;br&gt;
• “Who can do what?” becomes unclear&lt;br&gt;
I faced this repeatedly in Python projects…&lt;br&gt;
and surprisingly, the same issue exists in Laravel.&lt;/p&gt;

&lt;p&gt;🚀 So I Built: Laravel IAM (v0.2.0)&lt;br&gt;
Instead of patching the problem, I designed a system that handles:&lt;br&gt;
✔ Contextual permissions (per scope: tenant, team, branch)&lt;br&gt;
✔ Wildcard permissions (expense.&lt;em&gt;, *.&lt;/em&gt;)&lt;br&gt;
✔ Hierarchical access (manage → all actions)&lt;br&gt;
✔ Dynamic resolution (no hardcoded roles)&lt;/p&gt;

&lt;p&gt;⚙️ The Core Idea: “Four Levels of Truth”&lt;br&gt;
The engine resolves permissions using a layered approach:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Direct Permission → exact match&lt;/li&gt;
&lt;li&gt;Wildcard Match → resource.*&lt;/li&gt;
&lt;li&gt;Hierarchy Rule → resource.manage&lt;/li&gt;
&lt;li&gt;Global Access → &lt;em&gt;.&lt;/em&gt;
This allows instant and predictable permission resolution — even in complex SaaS environments.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🔥 Why Not Just Use Existing Packages?&lt;br&gt;
Packages like Spatie are great for basic RBAC 👏&lt;br&gt;
But they don’t fully solve:&lt;br&gt;
• Context-based access control&lt;br&gt;
• Dynamic multi-tenant systems&lt;br&gt;
• Workflow-aware permission resolution&lt;/p&gt;

&lt;p&gt;💡 Example&lt;br&gt;
IAM::can($user, 'expense.approve');&lt;br&gt;
No complex conditionals.&lt;br&gt;
No hardcoded roles.&lt;br&gt;
Just clean, predictable logic.&lt;/p&gt;

&lt;p&gt;🛠️ Open Source — Try It&lt;br&gt;
I’ve open-sourced the project and would love feedback from the community:&lt;br&gt;
📦 Packagist: &lt;a href="https://packagist.org/packages/apurba-labs/laravel-iam" rel="noopener noreferrer"&gt;https://packagist.org/packages/apurba-labs/laravel-iam&lt;/a&gt;&lt;br&gt;
💻 GitHub: &lt;a href="https://github.com/apurba-labs/laravel-iam" rel="noopener noreferrer"&gt;https://github.com/apurba-labs/laravel-iam&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💬 Let’s Discuss&lt;br&gt;
How do you handle contextual permissions in your projects?&lt;br&gt;
Have you faced similar issues with RBAC systems?&lt;/p&gt;

&lt;h1&gt;
  
  
  Laravel #PHP #FastAPI #RBAC #IAM #SaaS #Backend #OpenSource
&lt;/h1&gt;

</description>
      <category>backend</category>
      <category>laravel</category>
      <category>showdev</category>
      <category>wecoded</category>
    </item>
    <item>
      <title>I Built a Laravel Approval Engine to Stop Email Spam 🚀</title>
      <dc:creator>Apurba Singh</dc:creator>
      <pubDate>Wed, 25 Mar 2026 23:33:15 +0000</pubDate>
      <link>https://dev.to/apurbalabs/i-built-a-laravel-approval-engine-to-stop-email-spam-3okd</link>
      <guid>https://dev.to/apurbalabs/i-built-a-laravel-approval-engine-to-stop-email-spam-3okd</guid>
      <description>&lt;p&gt;Over the last few months, while working on enterprise Laravel projects, I noticed a recurring "Notification Nightmare." &lt;/p&gt;

&lt;p&gt;Every company needs an approval workflow (requisitions, invoices, PTO), but most systems flood managers with separate notifications for every single item. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I decided to build a solution: &lt;a href="https://github.com/apurba-labs/laravel-approval-engine" rel="noopener noreferrer"&gt;Laravel Approval Engine&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 The "Smart Batching" Concept
&lt;/h2&gt;

&lt;p&gt;The core problem with enterprise workflows isn't the approval logic; it's &lt;strong&gt;notification fatigue.&lt;/strong&gt; Instead of sending 50 separate emails for 50 pending approvals, my engine buffers them into &lt;strong&gt;1 smart batch&lt;/strong&gt;. The manager receives a single, clean digest with secure, token-based links to approve everything at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗️ How it Works
&lt;/h2&gt;

&lt;p&gt;The architecture is designed to be modular and plug-and-play.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Define a Module:&lt;/strong&gt; Use &lt;code&gt;php artisan make:workflow-module&lt;/code&gt; to create a logic class.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Queue Records:&lt;/strong&gt; Your business models enter a "pending" state.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;The Processor:&lt;/strong&gt; A scheduled artisan command bundles pending records into a &lt;code&gt;Batch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Action:&lt;/strong&gt; The approver receives a single email. They can &lt;strong&gt;Approve All&lt;/strong&gt;, &lt;strong&gt;Reject&lt;/strong&gt;, or &lt;strong&gt;View Details&lt;/strong&gt; via a secure Next.js dashboard.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🧠 Technical Highlights
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-stage Workflows:&lt;/strong&gt; Easily route from &lt;code&gt;Manager -&amp;gt; Finance -&amp;gt; CEO&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token-based Security:&lt;/strong&gt; Approvers don't even need to log in to take action.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event-Driven:&lt;/strong&gt; Hooks for every stage (Created, Approved, Escalated).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next.js Dashboard:&lt;/strong&gt; A sleek frontend for managing the workflow status.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Laravel 12 Ready:&lt;/strong&gt; Built to work with the latest PHP 8.2+ features.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📊 The Workflow Flow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;graph TD
    A[Pending Records] --&amp;gt; B[Smart Batch Created]
    B --&amp;gt; C[Email Digest Sent]
    C --&amp;gt; D[Approver Clicks Link]
    D --&amp;gt; E[Stage Resolver]
    E --&amp;gt; F{Next Stage?}
    F -- Yes --&amp;gt; G[Create Next Batch]
    F -- No --&amp;gt; H[Workflow Completed]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🚀 Try the Demo
&lt;/h2&gt;

&lt;p&gt;I've included a demo inside the repo so you can see it in action in under 2 minutes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/apurba-labs/laravel-approval-engine
&lt;span class="nb"&gt;cd &lt;/span&gt;laravel-approval-engine/example/laravel-demo
composer &lt;span class="nb"&gt;install
&lt;/span&gt;php artisan approval:demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔗 GitHub
&lt;/h2&gt;

&lt;p&gt;I’d love for the community to check it out, give it a star, or suggest new features!&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/apurba-labs/laravel-approval-engine" rel="noopener noreferrer"&gt;Get the Code on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Would love to hear your feedback! How do you handle complex approval routing in your own Laravel apps?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
