<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[bem-log]]></title><description><![CDATA[bem’s community of people building earth’s most complex systems]]></description><link>https://blog.bem.ai</link><image><url>https://substackcdn.com/image/fetch/$s_!C8b-!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae044f10-0264-4009-a3b7-a55967c845d6_1280x1280.png</url><title>bem-log</title><link>https://blog.bem.ai</link></image><generator>Substack</generator><lastBuildDate>Wed, 08 Apr 2026 00:36:33 GMT</lastBuildDate><atom:link href="https://blog.bem.ai/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Brilliant Enterprise Magic Inc.]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[admin@bem.ai]]></webMaster><itunes:owner><itunes:email><![CDATA[admin@bem.ai]]></itunes:email><itunes:name><![CDATA[Antonio Bustamante]]></itunes:name></itunes:owner><itunes:author><![CDATA[Antonio Bustamante]]></itunes:author><googleplay:owner><![CDATA[admin@bem.ai]]></googleplay:owner><googleplay:email><![CDATA[admin@bem.ai]]></googleplay:email><googleplay:author><![CDATA[Antonio Bustamante]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[MCPs, CLIs, and APIs Are All Just the Same]]></title><description><![CDATA[Programmatic access to resources has always been non-negotiable. So why is the industry losing its mind?]]></description><link>https://blog.bem.ai/p/mcps-clis-and-apis-are-all-just-the</link><guid isPermaLink="false">https://blog.bem.ai/p/mcps-clis-and-apis-are-all-just-the</guid><dc:creator><![CDATA[Antonio Bustamante]]></dc:creator><pubDate>Mon, 30 Mar 2026 14:51:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7Hww!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c971903-bcc9-443a-ba53-23327febea9a_1280x853.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7Hww!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c971903-bcc9-443a-ba53-23327febea9a_1280x853.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7Hww!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c971903-bcc9-443a-ba53-23327febea9a_1280x853.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7Hww!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c971903-bcc9-443a-ba53-23327febea9a_1280x853.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7Hww!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c971903-bcc9-443a-ba53-23327febea9a_1280x853.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7Hww!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c971903-bcc9-443a-ba53-23327febea9a_1280x853.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7Hww!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c971903-bcc9-443a-ba53-23327febea9a_1280x853.jpeg" width="1280" height="853" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c971903-bcc9-443a-ba53-23327febea9a_1280x853.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:853,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:518213,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.bem.ai/i/192618935?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c971903-bcc9-443a-ba53-23327febea9a_1280x853.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7Hww!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c971903-bcc9-443a-ba53-23327febea9a_1280x853.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7Hww!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c971903-bcc9-443a-ba53-23327febea9a_1280x853.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7Hww!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c971903-bcc9-443a-ba53-23327febea9a_1280x853.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7Hww!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c971903-bcc9-443a-ba53-23327febea9a_1280x853.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Every few years, the software industry collectively discovers something it already knew and treats it like a revelation. Right now, that something is MCP.</p><p>The Model Context Protocol has been called &#8220;USB-C for AI.&#8221; It has been called a paradigm shift. Every vendor I talk to is racing to ship an MCP server. Every pitch deck has an MCP slide. The discourse is loud. And most of it misses the point entirely.</p><p>MCP is a way for a program to discover and invoke capabilities on a remote system using a structured, self-describing interface. That is also what an API is. That is also what a CLI is. That is what SOAP was. That is what CORBA was, if you were unlucky enough to use it. The mechanism changes. The principle does not.</p><p>Programmatic access to resources is not new. It is the foundation of every distributed system ever built. The only thing that changes, decade over decade, is the consumer.</p><h2>The industry keeps rediscovering the same idea</h2><p>In 2009, Sun Microsystems submitted WADL to the W3C. It was an XML-based format that described REST services in a machine-readable way: resources, relationships, parameters, methods. That is exactly what an MCP tool definition does. WADL described what a service could do so a machine could figure out how to call it. The W3C never standardized it. Not because the idea was wrong, but because the timing was. There was no consumer sophisticated enough to benefit from it at scale. Before WADL, there was WSDL for SOAP. Before that, IDL for CORBA. MCP is the latest entry. It will not be the last.</p><p>Roy Fielding&#8217;s original REST dissertation was fundamentally about this same idea. The architecture was designed so that a client could discover what to do next by examining the current representation. You land on a resource, and the resource tells you where its parents are, where its siblings are, what actions you can take, what state transitions are available. The resource graph was navigable. You did not need an out-of-band specification to understand the API because the API told you what it could do, in real time, through its own structure.</p><p>The industry took REST, stripped out the hypermedia, ignored the self-describing semantics, and built what Fielding himself called &#8220;RPC with pretty URLs.&#8221; We turned a semantic architecture into a syntactic one and then spent fifteen years complaining that APIs are hard to discover.</p><p>Now MCP shows up and says: what if the service described itself to the consumer? What if the consumer could discover available tools and their schemas dynamically?</p><p>That is just REST done right. We had this. We chose not to use it.</p><h2>The consumer changed, not the concept</h2><p>The reason MCP matters is not the protocol. It is JSON-RPC with tool definitions and a handshake. Nothing groundbreaking. What changed is the consumer.</p><p>For the first time, the primary consumer of a service description is not a human developer. It is a language model. And language models are now sophisticated enough to take a structured tool definition, understand what it does, and invoke it correctly without someone writing integration code.</p><p>That is interesting. But it is a shift in the consumer, not in the concept. CLIs have been doing this forever: run <code>--help</code> and you get a structured description of available commands, arguments, types, defaults. APIs have been doing this forever: OpenAPI specs describe endpoints, parameters, request bodies, response schemas. A developer reads the spec and writes the client. An LLM reads the spec and writes the client. Same interface. Different reader.</p><p>MCP formalizes this for a specific consumer: AI agents talking to external systems over a standardized transport. That is useful. It is not a revolution.</p><h2>Protocols do not solve the problems your business actually has</h2><p>I have spent the last several months talking to operations leaders at some of the largest companies in the world. Financial services firms processing trust documents. Airlines validating flight data. Logistics companies routing shipments. Construction firms digitizing handwritten safety plans. Not one of them has ever asked me what protocol we use.</p><p>Every single one of them asks the same question: is this accurate? Can I trust it? Am I going to get fired for deploying this?</p><p>That is the question the industry should be obsessing over. Not which protocol wraps the call, but whether the system on the other end actually works when the data is messy, the formats are inconsistent, and the stakes are high.</p><p>MCP has real problems that matter to these buyers. It has no enforced authentication. It has no audit trail. It has context bloat issues where dozens of tool definitions consume the model&#8217;s attention before a single useful action is taken. The 2026 roadmap is essentially a list of things that need to be fixed before enterprises can take it seriously. Security researchers at RSA this year are demonstrating how MCP vulnerabilities can enable remote code execution and full tenant takeover.</p><p>These are not novel problems. They are the same problems every service description protocol has faced. WSDL had security gaps. CORBA had complexity problems. WADL had adoption problems. The pattern is always the same: a new protocol arrives, the industry gets excited, people bolt it onto everything, the security researchers find holes, the enterprises ask about governance.</p><p>Meanwhile, the companies that actually need to move data between systems just use APIs. They use webhooks. They use SDKs. They use whatever works. Because the job was never about the protocol. The job is getting data from point A to point B, accurately, reliably, every time. The models by themselves are not going to save anyone. You need the bricks. What those bricks look like matters far more than the protocol that calls them.</p><h2>What actually matters</h2><p>When we talk to enterprise buyers at bem, the conversation is never about MCP or REST or any protocol. The conversation is about accuracy: what is the confidence score on each field, how do corrections feed back into the system, can they see the reasoning behind every extraction. It is about deployment: does this run in their VPC, is data encrypted at rest and in transit, does it comply with their egress policies, can they explain this to their InfoSec team on day one. It is about trust: not &#8220;trust me, it works,&#8221; but &#8220;here are the metrics, here is the audit trail, here is what the system got wrong and here is how it learned from it.&#8221;</p><p>We have been API-first since day one. Adding an MCP server is, frankly, trivial for us. Our API already describes what it does. Our primitives are already composable. Our schemas are already structured. Wrapping that in MCP is texture. It is not transformation.</p><p>MCP is a way for Anthropic to compete with the orchestration frameworks of the world. Credit to them, it is working. OpenAI adopted it. Google adopted it. It is becoming a standard. Standards are good. But let us not confuse the standardization of an interface with the invention of a new paradigm.</p><p>The paradigm is and always has been: give programs structured access to resources. The interface evolves. The transport evolves. The consumer evolves. The principle is the same.</p><p>If your system is well-designed, if your API surface is clean, if your primitives are composable, and if your service can describe itself, then you are already ready for whatever protocol comes next. You were ready for WADL. You were ready for REST. You are ready for MCP. You will be ready for whatever replaces it.</p><p>Your buyers are not going to ask you which protocol you support. They are going to ask you if the data is right, if the system is secure, and if it gets better the more they use it. Answer those questions first. The protocols will catch up.</p>]]></content:encoded></item><item><title><![CDATA[Production AI needs a glass box: How bem gets better as you correct it]]></title><description><![CDATA[The promise of a magic black box is not enterprise-friendly. A vendor's guarantee of accuracy means nothing without proof.]]></description><link>https://blog.bem.ai/p/production-ai-needs-a-glass-box-how</link><guid isPermaLink="false">https://blog.bem.ai/p/production-ai-needs-a-glass-box-how</guid><dc:creator><![CDATA[Antonio Bustamante]]></dc:creator><pubDate>Wed, 27 Aug 2025 17:23:47 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7581987b-c7e8-4268-bd22-b338ebeb5bac_1634x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;8c8d0ce8-a9f8-4b81-883f-20c5e8d257f2&quot;,&quot;duration&quot;:null}"></div><p>There's a myth circulating in the world of enterprise AI. It's the promise of a magic black box, a single API call that delivers perfect, off-the-shelf accuracy for any document, every time. I&#8217;ve tried those systems. They don&#8217;t deliver what they promise. </p><p>If you're a technical leader, you know this is a fantasy. In the real world of high-stakes, mission-critical operations, "trust me" is not a viable strategy. Enterprise buyers don't want more magic; they want fundamental control. They want a glass box, not a black box.</p><h3>The Problem with the Black Box</h3><p>Most AI platforms are designed as a one-way street. You send in your unstructured data, a model does something mysterious, and you get a structured result. But what happens when it's wrong? How do you correct it? How do you ensure the system learns from its mistakes and doesn't repeat them?</p><p>For most platforms, the answer is you can't. You're stuck with a static system, forcing your team to build brittle, post-processing logic or, even worse, fall back on manual review. This isn't automation; it's just a more sophisticated way to create more work.</p><h3>Closing the Loop: The <code>bem</code> Lifecycle</h3><p>This is the core philosophy behind how we've built bem. We believe that true, production-grade accuracy isn't a static feature you buy; it's a dynamic, continuous process you control. Our platform is designed to provide the full, end-to-end lifecycle for AI.</p><p><strong>1. Create a Function:</strong> It starts by defining your blueprint. You create a <code>Function</code> that specifies your desired output schema; your definition of "good."</p><pre><code><code># Create a reusable function for processing invoices
curl -X POST "https://api.bem.ai/v2/functions" \
  -H "x-api-key: &lt;YOUR_BEM_API_KEY&gt;" \
  -H "Content-Type: application/json" \
  -d '{
    "functionName": "enterprise-invoice-processor",
    "type": "transform",
    "outputSchema": {
      "type": "object",
      "properties": {
        "vendor_name": { "type": "string" },
        "total_amount": { "type": "number" }
      }
    }
  }'

</code></code></pre><p><strong>2. Call the Function:</strong> You call your Function with your unstructured data and get an initial structured result.</p><pre><code><code># Call the function with a new invoice PDF
curl -X POST "https://api.bem.ai/v2/functions/enterprise-invoice-processor/call" \
  -H "x-api-key: &lt;YOUR_BEM_API_KEY&gt;" \
  -F "referenceID=inv_abc_123" \
  -F "file=@/path/to/invoice.pdf"

</code></code></pre><p><strong>3. Subscribe &amp; Observe:</strong> We provide the "glass box." You create a <strong>Subscription</strong> to receive results via webhook, and use tools like <strong>Function Review</strong> for complete transparency into the performance of your functions. You can see accuracy, precision, and recall for every field, giving you a clear, statistical picture of how the system is performing.</p><pre><code><code># Create a subscription to receive results at your endpoint
curl -X POST "https://api.bem.ai/v1-alpha/subscriptions" \
  -H "x-api-key: &lt;YOUR_BEM_API_KEY&gt;" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Invoice Results Subscription",
    "type": "transform",
    "functionName": "enterprise-invoice-processor",
    "webhookURL": "https://api.your-company.com/webhooks/bem/results"
  }'

</code></code></pre><p><strong>4. Correct &amp; Fine-Tune:</strong> This is the most critical step. We make it easy to give feedback on mistakes. Our API allows you to embed a correction mechanism directly into your own product. When your operators or end-users correct a field, that correction isn't lost; it's a valuable signal that is sent back to our platform via a simple <code>PUT</code> request.</p><pre><code><code># Send a correction back to bem via the API
curl -X PUT "https://api.bem.ai/v1-beta/transformations" \
  -H "x-api-key: &lt;YOUR_BEM_API_KEY&gt;" \
  -H "Content-Type: application/json" \
  -d '{
    "transformations": [
      {
        "transformationID": "tr_2bxoJPNdSD4LgRT4YVC4gt72hlI",
        "correctedJSON": {
          "vendor_name": "Corrected Vendor Name Inc.",
          "total_amount": 150.75
        }
      }
    ]
  }'

</code></code></pre><p>This signal automatically triggers fine-tuning jobs. Your users' corrections in production aren't a sign of failure; they are the fuel that drives your unique model to 99%+ accuracy. It's a continuous, self-healing loop.</p><p>This is what it means to be an enterprise-ready AI platform. It's not about promising magic. It's about providing the tools, the transparency, and the control to build an AI system you can actually trust with your most critical operations.</p>]]></content:encoded></item><item><title><![CDATA[Hard Software Episode 12: Infrastructure Evolutions with Maxim Fateev, Co-Founder + CTO @ Temporal]]></title><description><![CDATA[In this episode, Antonio sits down with Maxim to cover all things AI innovation, infrastructure hot takes, and Maxim's journey prior to Temporal.]]></description><link>https://blog.bem.ai/p/hard-software-episode-12-infrastructure</link><guid isPermaLink="false">https://blog.bem.ai/p/hard-software-episode-12-infrastructure</guid><dc:creator><![CDATA[Zoey]]></dc:creator><pubDate>Thu, 03 Jul 2025 15:52:06 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/167446355/1326d1be8a9dbefaead93b1eeecbc35b.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p></p>]]></content:encoded></item><item><title><![CDATA[What Enterprise *actually* needs from AI]]></title><description><![CDATA[Why bem is betting on reliability, accuracy, and control. Not just intelligence]]></description><link>https://blog.bem.ai/p/what-enterprise-actually-needs-from</link><guid isPermaLink="false">https://blog.bem.ai/p/what-enterprise-actually-needs-from</guid><dc:creator><![CDATA[Antonio Bustamante]]></dc:creator><pubDate>Thu, 12 Jun 2025 21:19:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!viZ9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa663090b-b2de-419f-be4a-a176613cb5c2_3840x2160.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!viZ9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa663090b-b2de-419f-be4a-a176613cb5c2_3840x2160.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!viZ9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa663090b-b2de-419f-be4a-a176613cb5c2_3840x2160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!viZ9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa663090b-b2de-419f-be4a-a176613cb5c2_3840x2160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!viZ9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa663090b-b2de-419f-be4a-a176613cb5c2_3840x2160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!viZ9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa663090b-b2de-419f-be4a-a176613cb5c2_3840x2160.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!viZ9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa663090b-b2de-419f-be4a-a176613cb5c2_3840x2160.jpeg" width="728" height="409.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a663090b-b2de-419f-be4a-a176613cb5c2_3840x2160.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:8515894,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.bem.ai/i/165820723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa663090b-b2de-419f-be4a-a176613cb5c2_3840x2160.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!viZ9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa663090b-b2de-419f-be4a-a176613cb5c2_3840x2160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!viZ9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa663090b-b2de-419f-be4a-a176613cb5c2_3840x2160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!viZ9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa663090b-b2de-419f-be4a-a176613cb5c2_3840x2160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!viZ9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa663090b-b2de-419f-be4a-a176613cb5c2_3840x2160.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Over the last year, we&#8217;ve spoken with logistics managers, claims processors, support leads, compliance teams, and others running the actual systems behind enterprise operations. And the message we keep hearing isn&#8217;t about LLMs or copilots.</p><p>It&#8217;s about control.</p><p>Operators don&#8217;t care if the AI is &#8220;smart.&#8221; They care if it&#8217;s right.<br>They want systems that are consistent, traceable, and boring in the best way possible.<br>They don&#8217;t want a chatbot. They want a workflow that doesn&#8217;t break.</p><h3>What They&#8217;ve Told Us, Again and Again</h3><p>They&#8217;ve told us that automation isn&#8217;t useful if it introduces new kinds of chaos.</p><p>They&#8217;ve told us that they don&#8217;t want to replace their teams. They want those teams to stop acting like APIs.</p><p>They&#8217;ve told us they don&#8217;t need another &#8220;agent.&#8221; They need infrastructure that makes decisions predictable, errors visible, and handoffs clean.</p><p>They&#8217;ve told us that reliability matters more than novelty, and that &#8220;management by exception&#8221; is the real unlock: automate everything that&#8217;s obvious, and raise a hand only when it&#8217;s not.</p><p>This isn&#8217;t about replacing people. It&#8217;s about trusting the system to carry the load so operators can focus on what actually requires judgment.</p><h3>What We're Trying to Build at bem</h3><p>We&#8217;re not trying to be the smartest AI tool in the room. We&#8217;re trying to be the most dependable one.</p><p>We built bem to handle the inputs that bog enterprise teams down: emails, PDFs, spreadsheets, multi-step approvals, follow-ups. Then we route that structured data into the systems that already run the business: TMS, ERPs, CRMs, homegrown tools.</p><p>It&#8217;s not flashy. It just works.</p><p>We surface issues when they happen, keep a trail of every decision made, and let users correct the system in-line so the system actually gets better over time, without retraining.</p><p>We think of this as an ambient business system. Something that works in the background, doesn&#8217;t demand attention, and becomes part of the way the company runs without having to change how people work.</p><h3>Why We're Writing This</h3><p>We&#8217;re not here to pitch another AI wrapper. We&#8217;re writing this because the gap between enterprise need and enterprise tooling is growing, and we&#8217;re trying to close it, one workflow at a time.</p><p>We&#8217;ve learned from the operators who do the hard, manual work to keep their companies running. They&#8217;ve shown us what real production pressure looks like, and we&#8217;re building bem to relieve it&#8212;not by replacing their judgment, but by making space for it.</p><p>If this sounds like what you&#8217;ve been asking for, we&#8217;d love to learn from you too.</p><p>Let&#8217;s build the infrastructure these teams actually deserve.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Hard Software Episode 11: Dashboard Crashes, Streaming Needs, and Gen AI Pipeline Hype with Ricky Thomas, Co-founder + CTO @ Streamkap ]]></title><description><![CDATA[Antonio sits down with Ricky Thomas, Co-founder + CTO of Streamkap to discuss everything from GenAI and agentic hype to cold starts and what's coming for Streamkap.]]></description><link>https://blog.bem.ai/p/hard-software-episode-11-dashboard</link><guid isPermaLink="false">https://blog.bem.ai/p/hard-software-episode-11-dashboard</guid><dc:creator><![CDATA[Zoey]]></dc:creator><pubDate>Thu, 29 May 2025 01:19:21 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/164692396/258faa2d6b439827fdfb7b425662f9c7.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Antonio sits down with Ricky Thomas, Co-founder + CTO of Streamkap to discuss everything from GenAI and agentic hype to cold starts and what's coming for Streamkap. To learn more about Streamkap, find them here- https://app.streamkap.com/.</p>]]></content:encoded></item><item><title><![CDATA[Hard Software Episode 10: LLMs in High-Growth Supply Chain with Jorge Valdivia, CTO of Fleetio]]></title><description><![CDATA[Upal and Antonio sit down with Jorge, CTO of high-growth fleet management platform Fleetio, to discuss everything from shipping high-value automation-focused features quickly for customers to growing]]></description><link>https://blog.bem.ai/p/hard-software-episode-10-llms-in</link><guid isPermaLink="false">https://blog.bem.ai/p/hard-software-episode-10-llms-in</guid><dc:creator><![CDATA[Zoey]]></dc:creator><pubDate>Wed, 14 May 2025 22:39:19 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/163591422/50daf76c316476d79b35a4c679512ded.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p></p>]]></content:encoded></item><item><title><![CDATA[Accuracy is in the eye of the beholder]]></title><description><![CDATA[Accuracy needs context]]></description><link>https://blog.bem.ai/p/accuracy-is-in-the-eye-of-the-beholder</link><guid isPermaLink="false">https://blog.bem.ai/p/accuracy-is-in-the-eye-of-the-beholder</guid><dc:creator><![CDATA[Antonio Bustamante]]></dc:creator><pubDate>Thu, 01 May 2025 23:55:34 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b56f8f8f-ceb5-473e-abaf-66fbdaa47b3a_2532x1414.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;96d82d79-2778-4348-bae8-7fc3f10df0d4&quot;,&quot;duration&quot;:null}"></div><p>It&#8217;s 2025, and every structured data vendor is still shouting the same thing: &#8220;we&#8217;re the most accurate,&#8221; &#8220;best zero-shot performance,&#8221; &#8220;production-ready out of the box.&#8221; You&#8217;ll see it on every landing page and pitch deck, like it&#8217;s just a matter of which vendor wins the leaderboard.</p><p>At bem, we think that&#8217;s a fundamentally broken framing. It treats accuracy like it&#8217;s a single, objective number &#8212; when in reality, accuracy is always contextual. It depends on your inputs, your schema, your edge cases, your users, and the specific decisions you're making downstream. Accuracy isn't just a model score. It's a reflection of how well a system fits your world.</p><p>This obsession with zero-shot performance &#8212; how well a model performs on the first try &#8212; is seductive. It makes it easy to believe that the hard part of automation has been solved, that models will just know what to do without being taught. But in practice, zero-shot performance is a starting point. It is not the finish line. And treating it like the finish line leads to brittle systems and broken promises.</p><p>We&#8217;ve seen this same thinking play out in conversations about AGI. The assumption is that, eventually, a superhuman agent will run your business logic for you &#8212; navigating edge cases, making judgment calls, handling complexity without ever needing to be taught. But even the most capable agent would need access to your context: your documents, your rules, your systems, your constraints. Otherwise, it's just another hallucination.</p><p>This is why we&#8217;ve made a different bet at bem. We&#8217;re not building a product that claims to be &#8220;the most accurate.&#8221; We&#8217;re building infrastructure that helps you <em>get</em> accurate &#8212; quickly, iteratively, and on your terms.</p><h3>Accuracy at bem doesn&#8217;t come from one-shot perfection. It comes from closing the loop.</h3><p>With bem, every correction you make becomes a training signal. You can turn corrected outputs into golden examples with one click. No external labeling tools, no export-import workflow. Just use the product as intended, and your system gets better in the background.</p><p>We let you build golden datasets as part of the normal review process &#8212; not as a separate, burdensome task. That means you can track performance, run automated evaluations, and pinpoint where accuracy is degrading or improving over time. We give you versioned workflows, auditable changes, and a full history of how each decision was made.</p><p>Even more importantly, bem lets you define what &#8220;correct&#8221; means. You can use LLMs not just to extract information, but to judge whether an output is valid. Want to check if a document matches a golden reference? Or whether a remittance file includes all the required fields before it hits your ERP? That&#8217;s what LLM-as-a-judge enables &#8212; and it&#8217;s built in.</p><p>We call this self-correcting infrastructure. Because every time someone fixes a workflow, the system learns. Every time someone flags a failure, the feedback gets recorded. And every time you run the same flow again, it runs better.</p><p>This isn&#8217;t a flashy promise. It&#8217;s infrastructure that quietly compounds.</p><h3>So no, we won&#8217;t tell you bem is the most accurate platform. That would be meaningless.</h3><p>What we <em>will</em> tell you is that with a small amount of effort &#8212; and the right feedback loops in place &#8212; you can get to production-grade, auditable, operator-approved accuracy faster than you thought possible. And your workflows will keep improving over time, without adding headcount or rewriting brittle logic.</p><p>Accuracy isn&#8217;t a static metric. It&#8217;s a system that evolves.</p><div><hr></div><h3>One last thought</h3><p>There&#8217;s something deeper we believe, too: <strong>positioning your product around &#8220;accuracy&#8221; is not just misleading &#8212; it&#8217;s defeatist.</strong></p><p>It&#8217;s the kind of posture you take when you&#8217;ve given up on system design. You wave around a few benchmark scores and call it &#8220;state of the art,&#8221; but behind the scenes, it&#8217;s all one-off prompt tuning, hand-picked demos, and error-prone edge cases waiting to happen.</p><p>The obsession with being &#8220;most accurate&#8221; traps teams in a Sisyphean loop. Every time the model falls short, you tweak a prompt, update a rule, add a few more examples. Push the boulder a little further up the hill. But the hill never goes away, because the core assumption is wrong: that there is a single, universal definition of accuracy you can optimize for once and be done.</p><p>That&#8217;s not how real operations work.</p><p>In high-stakes industries &#8212; freight, fintech, claims, compliance &#8212; <strong>accuracy is not an aesthetic ideal. It&#8217;s a constraint.</strong> And it varies based on context, tolerance, and risk. What looks like a rounding error to a model is a regulatory violation to your legal team. What passes in an eval set might break a payment, or misroute a load.</p><p>So instead of chasing some mythical peak accuracy, we&#8217;ve built bem to focus on something better: <strong>adaptation</strong>. Accuracy isn&#8217;t a fixed point. It&#8217;s a process. It&#8217;s what happens when the system learns from your users, your data, and your constraints &#8212; and gets better every time.</p>]]></content:encoded></item><item><title><![CDATA[Stop tweaking your prompts]]></title><description><![CDATA[Every time you change your prompt to fix an edge case, you break something else. Here&#8217;s a better way to build reliable AI systems using bem.]]></description><link>https://blog.bem.ai/p/stop-tweaking-your-prompts</link><guid isPermaLink="false">https://blog.bem.ai/p/stop-tweaking-your-prompts</guid><dc:creator><![CDATA[Antonio Bustamante]]></dc:creator><pubDate>Thu, 24 Apr 2025 17:15:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Lcs1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f33e4e8-2b2b-428b-b839-3e0afc94d2f5_4800x2520.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lcs1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f33e4e8-2b2b-428b-b839-3e0afc94d2f5_4800x2520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lcs1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f33e4e8-2b2b-428b-b839-3e0afc94d2f5_4800x2520.png 424w, https://substackcdn.com/image/fetch/$s_!Lcs1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f33e4e8-2b2b-428b-b839-3e0afc94d2f5_4800x2520.png 848w, https://substackcdn.com/image/fetch/$s_!Lcs1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f33e4e8-2b2b-428b-b839-3e0afc94d2f5_4800x2520.png 1272w, https://substackcdn.com/image/fetch/$s_!Lcs1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f33e4e8-2b2b-428b-b839-3e0afc94d2f5_4800x2520.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lcs1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f33e4e8-2b2b-428b-b839-3e0afc94d2f5_4800x2520.png" width="1456" height="764" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f33e4e8-2b2b-428b-b839-3e0afc94d2f5_4800x2520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:764,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:498984,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.bem.ai/i/161927404?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f33e4e8-2b2b-428b-b839-3e0afc94d2f5_4800x2520.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Lcs1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f33e4e8-2b2b-428b-b839-3e0afc94d2f5_4800x2520.png 424w, https://substackcdn.com/image/fetch/$s_!Lcs1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f33e4e8-2b2b-428b-b839-3e0afc94d2f5_4800x2520.png 848w, https://substackcdn.com/image/fetch/$s_!Lcs1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f33e4e8-2b2b-428b-b839-3e0afc94d2f5_4800x2520.png 1272w, https://substackcdn.com/image/fetch/$s_!Lcs1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f33e4e8-2b2b-428b-b839-3e0afc94d2f5_4800x2520.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Teams building with LLMs are stuck in a loop:<br>You write a prompt. It mostly works.<br>Then a user triggers an edge case. You add a clause to the prompt.<br>Then someone else hits a slightly different edge case. Another clause.<br>Another exception. Another fallback.</p><p>Eventually, the prompt looks like a legal document.<br>It&#8217;s brittle, unpredictable, and impossible to test end-to-end.</p><p>If you're building productized AI &#8212; not just prototypes &#8212; this is a problem.</p><p>Prompts aren&#8217;t infrastructure. They&#8217;re speculation. And when your business depends on precision &#8212; financial operations, logistics, compliance, workflow automation &#8212; speculation isn&#8217;t good enough.</p><h3>Why Prompt Patching Breaks Down</h3><p>Let&#8217;s say you&#8217;ve deployed an LLM pipeline to extract structured data from freight tenders or webhook payloads.</p><p>At first, you&#8217;ve got a clean, high-performing prompt. It handles most cases.</p><p>Then someone forwards a new variation &#8212; a different format, a weird header, a slightly ambiguous field label.<br>The model guesses wrong. You tweak the prompt. Now the original cases are degraded.<br>You rewrite it again. Now you&#8217;re testing behavior across a dozen scenarios and wondering whether it&#8217;s time to fine-tune a model just to parse a PDF.</p><p>You&#8217;re doing prompt surgery, not product development.</p><p>Worse: you&#8217;re teaching your team to <em>fight the model</em>, not work with it.</p><h3>What You Actually Want: A Feedback Loop</h3><p>Let&#8217;s look at a realistic case.</p><p>You&#8217;re building a freight operations dashboard. Your customers forward you PDF tenders from shippers &#8212; sometimes structured, often not. Your product uses bem to extract structured fields so you can feed downstream pricing engines, load boards, or ops workflows.</p><p>Here&#8217;s the schema you&#8217;ve configured in bem for your pipeline:</p><pre><code>{
  "type": "object",
  "required": [
    "loadReference",
    "origin",
    "destination",
    "weightTons",
    "pickupDate",
    "deliveryDate",
    "equipmentType"
  ],
  "properties": {
    "loadReference": {
      "type": "string",
      "description": "Customer-assigned ID for this freight load"
    },
    "origin": {
      "type": "string",
      "description": "City/state where the load originates"
    },
    "destination": {
      "type": "string",
      "description": "City/state where the load is delivered"
    },
    "weightTons": {
      "type": "number",
      "description": "Weight of the load in tons"
    },
    "pickupDate": {
      "type": "string",
      "format": "date",
      "description": "Earliest pickup date"
    },
    "deliveryDate": {
      "type": "string",
      "format": "date",
      "description": "Required delivery date"
    },
    "equipmentType": {
      "type": "string",
      "description": "Requested equipment (e.g., '53' dry van')"
    }
  }
}</code></pre><p>Let&#8217;s say a customer emails in a tender like this:</p><blockquote><p><em>Please quote the following load: 4/26 pickup in Hutchins, TX to delivery in Denver, CO by 4/29. 42,000 lbs of dry food-grade pallets. Use reference #RDP-3391. Need a 53&#8217; van. No team driver required.</em></p></blockquote><p>bem extracts this as:</p><pre><code>{
  "loadReference": "RDP-3391",
  "origin": "Hutchins, TX",
  "destination": "Denver, CO",
  "weightTons": 42,
  "pickupDate": "2024-04-26",
  "deliveryDate": "2024-04-29",
  "equipmentType": "van"
}</code></pre><p>Looks fine &#8212; but a human ops analyst catches an issue:<br>"Van" is too vague. The customer specifically requested <em>53&#8217; dry van</em>. That's relevant for carrier selection logic.</p><p>In traditional prompt engineering, you'd go back into the prompt, add new rules like:</p><blockquote><p>"If 'van' is mentioned and a length is also specified, use the full equipment description."</p></blockquote><p>But then you risk introducing side effects &#8212; and you&#8217;re still not guaranteed the model will generalize that rule to other variations ("53 ft", "53-ft", "53 foot", etc.).</p><p>Instead, with bem, you just send the correction:</p><pre><code>PATCH /v1-beta/transformations
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "transformations": [
    {
      "transformationID": "tr_xyz456abc",
      "correctedJSON": {
        "equipmentType": "53&#8217; dry van"
      }
    }
  ]
}</code></pre><p>What happens next:</p><ol><li><p><strong>The correction is recorded</strong>, associated with this exact transformation ID, pipeline, schema, and input content.</p></li><li><p><strong>The underlying model is updated</strong></p></li><li><p><strong>Future transformations of similar data</strong> &#8212; especially references to vans + specific lengths &#8212; will yield the more precise field value without needing another correction or prompt change.</p></li></ol><p>This is learning at the API level &#8212; grounded in real product usage.</p><h3>How Teams Use This in Real Workflows</h3><p>Here&#8217;s what this looks like in practice.</p><h4>Payments Infrastructure</h4><p>A product team is classifying inbound webhook payloads from multiple providers. A new bank integration sends test transactions with an undocumented field variation. The model misclassifies them as production events.</p><p>A support engineer uses the bem dashboard to patch one case. Future transactions from that bank are classified correctly.</p><p>The model evolves with usage &#8212; not via new prompts or retraining.</p><div><hr></div><h4>Supply Chain Platforms</h4><p>A logistics platform uses bem to parse multi-vendor tenders. One customer&#8217;s template has a shifted date field &#8212; the model reads the deadline instead of the delivery window.</p><p>Rather than trying to prompt around every possible vendor variation, the ops team patches the output once via the API. The next file from that customer parses correctly.</p><p>The patch creates a form of memory that lives inside the pipeline &#8212; not buried in engineering tickets.</p><div><hr></div><h4>B2B SaaS Ticketing</h4><p>A helpdesk product is using bem for routing intents from inbound support messages. A new client sends product feedback to "support@" with vague language.</p><p>The initial output tags it as a bug. A CSM corrects it to &#8220;feature request&#8221; through the API.</p><p>Over time, bem learns what this customer&#8217;s team means by &#8220;broken&#8221; or &#8220;not working&#8221; &#8212; without needing to hard-code their phrasing into the routing logic.</p><div><hr></div><h4>What This Enables</h4><p>Using PATCH in your feedback loop gives you a few advantages:</p><ul><li><p>You move from <strong>prompt engineering</strong> to <strong>model feedback</strong>.</p></li><li><p>You empower non-engineers (support, ops, QA) to improve accuracy.</p></li><li><p>You reduce the number of breaking changes introduced by each prompt tweak.</p></li><li><p>You let the system <strong>learn</strong> &#8212; which is the whole point of using LLMs in the first place.</p></li></ul><p>This is what scaling looks like. You don&#8217;t just ship a static prompt and hope.<br>You ship a dynamic system that improves every day.</p><div><hr></div><h3>How to Start Using It</h3><p>If you&#8217;re using bem today, the PATCH API is already live:</p><pre><code>PATCH /v1-beta/transformations</code></pre><p>You pass in:</p><ul><li><p><code>transformationID</code></p></li><li><p>the corrected output (<code>correctedJSON</code>)</p></li></ul><p>You can patch directly from internal tools, feedback UIs, or even triggered via human-in-the-loop review steps.</p><p>If you&#8217;re using our dashboard, corrections are automatically sent through the same flow.</p><h3>The Bottom Line</h3><p>If you&#8217;re building a product that <em>needs to be right</em> &#8212; stop stuffing your prompts with edge-case logic.</p><p>That&#8217;s not a product strategy. It&#8217;s an anxiety loop.</p><p>Let your product learn.<br>Patch bad outputs.<br>Move forward.</p><p>And ship systems that actually get smarter over time.</p>]]></content:encoded></item><item><title><![CDATA[Hard Software Episode 9: Is Big Data Dead? with Jordan Tigani, CEO @ MotherDuck]]></title><description><![CDATA[We sit down with Jordan to discuss everything from building big query at Google to thoughts on big data, the compute needed for proper inference, access patterns, launches, and modern data stacks.]]></description><link>https://blog.bem.ai/p/hard-software-episode-9-is-big-data</link><guid isPermaLink="false">https://blog.bem.ai/p/hard-software-episode-9-is-big-data</guid><dc:creator><![CDATA[Zoey]]></dc:creator><pubDate>Tue, 22 Apr 2025 17:48:11 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/161900852/38ba55ca149f8b68c66a0a94ab1f28ab.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p></p>]]></content:encoded></item><item><title><![CDATA[How to build a freight email automator with bem]]></title><description><![CDATA[Integrate into your freight product the most advanced quote and document freight email automator -- fully customizable, adaptive, and learning continuously]]></description><link>https://blog.bem.ai/p/how-to-build-a-freight-email-automator</link><guid isPermaLink="false">https://blog.bem.ai/p/how-to-build-a-freight-email-automator</guid><dc:creator><![CDATA[Antonio Bustamante]]></dc:creator><pubDate>Mon, 21 Apr 2025 21:39:07 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/78e3d6b4-176b-4cde-8e9c-9c3eaa44ec3b_4800x2520.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Fully customizable quoting and invoice extraction, routed and structured in real-time</em></p><p>Freight brokers and 3PLs live in their inboxes. Every quote request, invoice, or rate confirmation arrives via email &#8212; often attached as a PDF, Excel, or embedded in the body. Most teams handle this manually. A rep reads the email, copies the data, logs it in a TMS, and maybe replies.</p><p>It&#8217;s slow, error-prone, and doesn&#8217;t scale.</p><p>You don&#8217;t need a pre-packaged product that tries to guess your workflow.<br>You need <strong>infrastructure</strong> that lets you build your own system &#8212; exactly how your team works.</p><p>With <strong>bem</strong>, you can build a freight inbox automator that:</p><ul><li><p>Accepts any email, PDF, XLSX, or attachment</p></li><li><p>Classifies it as a quote request or invoice (without regex or manual rules)</p></li><li><p>Extracts structured data into your schema</p></li><li><p>Notifies the right person or system</p></li><li><p>Learns from corrections automatically</p></li></ul><p>Let&#8217;s walk through how to build this system &#8212; with <strong>zero custom model training</strong>, just APIs and real infrastructure.</p><h3>What You&#8217;re Building</h3><p>We'll set up:</p><ol><li><p>A <strong>quote transformer</strong> for requests</p></li><li><p>An <strong>invoice transformer</strong> for billing docs</p></li><li><p>A <strong>router</strong> that detects the right doc type</p></li><li><p>Optional notifications or downstream syncs</p></li><li><p>A feedback loop to auto-learn from fixes</p></li></ol><p>Every piece is configurable, modular, and upgradeable &#8212; no vendor lock-in, no &#8220;feature request&#8221; delays. You own it.</p><h3>Step 1: Define Your Schemas</h3><p>Before you automate anything, define the output you want. Here are two examples.</p><h4>Quote Request Schema</h4><pre><code>{
  "type": "object",
  "required": ["origin", "destination", "pickupDate", "equipmentType", "commodity", "weight", "contact"],
  "properties": {
    "origin": { "type": "string", "description": "Pickup location &#8212; city, state, or ZIP" },
    "destination": { "type": "string", "description": "Dropoff location &#8212; city, state, or ZIP" },
    "pickupDate": { "type": "string", "format": "date", "description": "Requested pickup date" },
    "equipmentType": { "type": "string", "description": "Requested trailer type (e.g. dry van, reefer)" },
    "commodity": { "type": "string", "description": "Description of freight" },
    "weight": { "type": "number", "description": "Shipment weight in lbs" },
    "contact": {
      "type": "object",
      "required": ["name", "email"],
      "properties": {
        "name": { "type": "string", "description": "Name of the requester" },
        "email": { "type": "string", "format": "email", "description": "Email of the requester" },
        "phone": { "type": "string", "description": "Optional phone number" }
      }
    }
  }
}
</code></pre><h4>Freight Invoice Schema</h4><pre><code>{
  "type": "object",
  "required": ["invoiceNumber", "loadReference", "carrier", "lineItems", "totalAmount", "dueDate"],
  "properties": {
    "invoiceNumber": { "type": "string", "description": "Invoice identifier" },
    "loadReference": { "type": "string", "description": "Internal reference or load ID" },
    "carrier": {
      "type": "object",
      "required": ["name", "email"],
      "properties": {
        "name": { "type": "string", "description": "Carrier company name" },
        "email": { "type": "string", "format": "email", "description": "Billing contact" }
      }
    },
    "lineItems": {
      "type": "array",
      "description": "List of charges",
      "items": {
        "type": "object",
        "required": ["description", "amount"],
        "properties": {
          "description": { "type": "string", "description": "Charge type (e.g. linehaul, fuel)" },
          "amount": { "type": "number", "description": "Charge amount in USD" }
        }
      }
    },
    "totalAmount": { "type": "number", "description": "Total billed amount" },
    "dueDate": { "type": "string", "format": "date", "description": "Payment due date" }
  }
}
</code></pre><h3>&#9881;&#65039; Step 2: Create Your Transform Configs</h3><h4>Each schema becomes a <strong>transform config</strong> in bem. This gives you:</h4><ul><li><p>A dedicated transformer for each doc type</p></li><li><p>A unique email to forward files to</p></li><li><p>An ID you can use in routing or downstream flows</p></li></ul><h4>Create the Quote Transformer</h4><p><strong>Endpoint:</strong> <code>POST /v1-alpha/action-type-configs</code></p><pre><code>{
  "actionType": "transform",
  "name": "Freight Quote Transformer",
  "outputSchemaName": "QuoteRequest",
  "outputSchema": { /* schema from above */ },
  "independentDocumentProcessingEnabled": true,
  "complexTabularTransformEnabled": true
}</code></pre><h4>Create the Invoice Transformer</h4><p><strong>Endpoint:</strong> <code>POST /v1-alpha/action-type-configs</code></p><pre><code>{
  "actionType": "transform",
  "name": "Freight Invoice Transformer",
  "outputSchemaName": "FreightInvoice",
  "outputSchema": { /* schema from above */ },
  "independentDocumentProcessingEnabled": true,
  "complexTabularTransformEnabled": true
}
</code></pre><p>You&#8217;ll get back two <code>actionTypeConfigID</code>s and two email addresses &#8212; one for each transformer.</p><h3>&#129517; Step 3: Route Automatically (No Regex Needed)</h3><p>To avoid manually deciding where each doc should go, create a <strong>router</strong> that uses LLM logic to determine the right destination.</p><h4>Create the Router</h4><p><strong>Endpoint:</strong> <code>POST /v1-alpha/action-type-configs</code></p><pre><code>{
  "actionType": "route",
  "name": "Freight Intake Router",
  "description": "Detects whether inbound is a quote or invoice",
  "routes": [
    {
      "name": "Quotes",
      "actionTypeConfigID": "&lt;quote_transform_config_id&gt;"
    },
    {
      "name": "Invoices",
      "actionTypeConfigID": "&lt;invoice_transform_config_id&gt;"
    }
  ]
}</code></pre><p>No regex. No hand-tuned rules. bem figures out where the doc should go.</p><p>You get a single inbox like:</p><pre><code>eml_xyz@actions.bem.ai</code></pre><h3>&#128736;&#65039; Step 4: (Optional) Trigger Programmatically</h3><p>Instead of email, you can also use the API directly:</p><h4>Transform an uploaded file</h4><p><strong>Endpoint:</strong> <code>POST /v1-beta/transformations</code></p><pre><code>{
  "pipelineID": "&lt;quote_or_invoice_config_id&gt;",
  "transformations": [
    {
      "referenceID": "req_001",
      "inputType": "pdf",
      "inputContent": "&lt;base64 file&gt;"
    }
  ]
}</code></pre><h4>Or send to the router</h4><p><strong>Endpoint:</strong> <code>POST /v1-alpha/actions</code></p><pre><code>{
  "actionType": "route",
  "actionTypeConfigID": "&lt;router_config_id&gt;",
  "actions": [
    {
      "referenceID": "email_123",
      "inputType": "email",
      "inputContent": "&lt;base64 raw email&gt;"
    }
  ]
}
</code></pre><h3>&#128227; Step 5: Notify or Integrate</h3><p>Once a document is transformed, you can:</p><ul><li><p>Send it to a Slack channel</p></li><li><p>Notify a rep by email</p></li><li><p>Push to your TMS</p></li><li><p>Insert into a database</p></li></ul><p>bem gives you all the structured output, and you route it however you want.</p><p>This is the power of building it yourself: you own the logic, flow, and UX.</p><h3>&#129504; Step 6: Learn From Corrections (PATCH)</h3><p>No extractor gets it perfect out of the gate. But with bem, you <strong>don&#8217;t retrain a model</strong> &#8212; you just correct and patch.</p><p>Let&#8217;s say a rep fixes a pickup date:</p><h4>Submit a correction</h4><p><strong>Endpoint:</strong> <code>PATCH /v1-beta/transformations</code></p><pre><code>{
  "transformations": [
    {
      "transformationID": "tr_abc123",
      "correctedJSON": {
        "pickupDate": "2025-04-23"
      }
    }
  ]
}</code></pre><p>That correction gets remembered and used next time.</p><p>You&#8217;re not building static automation. You&#8217;re building <strong>infrastructure that learns</strong>.</p><div><hr></div><h3>&#128260; Why This Matters</h3><p>Most &#8220;AI quoting tools&#8221; or invoice parsers give you what they think logistics should look like. But freight is messy. Your formats, fields, contacts, exceptions &#8212; they&#8217;re unique.</p><p>With <strong>bem</strong>, you don&#8217;t need to change how you work. You make the tool work the way you do.</p><ul><li><p>Want to add PO numbers? Update the schema.</p></li><li><p>Want to route invoices differently after 5pm? Add a rule.</p></li><li><p>Want to auto-notify reps when BOL is missing? Patch it in.</p></li></ul><p><strong>Invisible automation, fully owned by you.</strong> That&#8217;s what scales.</p><h3>&#127891; Extra Credit: Add Voice-Native Workflows with Whisper + Cartesia</h3><p>Want to make your quoting automation feel even more magical? Layer in <strong>voice input and output</strong> &#8212; while reusing the exact same <code>bem</code> pipelines.</p><p>Here&#8217;s how to do it:</p><h4>1. Transcribe Audio with Whisper</h4><p>Use <a href="https://platform.openai.com/docs/guides/speech-to-text">OpenAI&#8217;s Whisper API</a> to turn voice memos, phone recordings, or customer voicemails into structured text.</p><pre><code><code>from openai import OpenAI

client = OpenAI()
audio_file = open("/path/to/audio.mp3", "rb")

transcription = client.audio.transcriptions.create(
    model="gpt-4o-transcribe",
    file=audio_file
)

structured_text = transcription.text</code></code></pre><p>Once you&#8217;ve got text, just forward it to your existing <strong>quote</strong> or <strong>invoice</strong> pipeline in bem &#8212; no changes needed. Your schema does the rest.</p><h4>2. Generate Speech with Cartesia</h4><p>Want your system to respond conversationally? Use <a href="https://cartesia.ai">Cartesia&#8217;s WebSocket TTS API</a> to turn structured bem outputs into dynamic, natural speech.</p><p>Example message over WebSocket:</p><pre><code>{
  "model_id": "sonic-2",
  "transcript": "Your quote from Houston to Austin has been generated at $650.",
  "voice": {
    "mode": "id",
    "id": "a0e99841-438c-4a64-b679-ae501e7d6091"
  },
  "language": "en",
  "context_id": "quote-session-123",
  "output_format": {
    "container": "raw",
    "encoding": "pcm_s16le",
    "sample_rate": 8000
  },
  "add_timestamps": true,
  "continue": false
}</code></pre><p></p><p>Cartesia supports streaming responses, prosody-aware continuation, and high concurrency over a persistent WebSocket &#8212; perfect for realtime agents.</p><h4>3. Close the Loop with bem PATCH</h4><p>And when users correct something in the voice flow (e.g. &#8220;No, I meant <em>Dry Van</em>, not Reefer&#8221;), PATCH the corrected output to bem:</p><p><code>PATCH /v1-beta/transformations </code></p><pre><code>PATCH /v1-beta/transformations
{
  "transformations": [
    {
      "transformationID": "tr_xxxx",
      "correctedJSON": {
        "equipmentType": "Dry Van"
      }
    }
  ]
}</code></pre><p>You&#8217;ve now built a self-healing voice quoting loop &#8212; one that learns with every correction.</p><div><hr></div><p><strong>Why this matters</strong><br>Email workflows are table stakes.<br>Voice is next.<br>And with <code>bem</code> at the center, you don&#8217;t need to rebuild anything &#8212; just extend what you&#8217;ve already built.</p><p>This is what infrastructure should feel like:<br>Composable. Omnichannel. Quietly brilliant.</p><p></p><h3>Let&#8217;s Build It</h3><p>In a few API calls, you just created:</p><p>&#9989; Structured extraction for quotes and invoices<br>&#9989; LLM-powered classification without regex<br>&#9989; Email-to-JSON pipelines with patchable learning<br>&#9989; Full extensibility for notifications and integrations</p><p>Want to see this running live?<br>Drop in a sample doc. We&#8217;ll help you build the full flow &#8212; your way.</p><p><strong>This is what freight ops looks like when you own the system.</strong><br>Not a product. Not a dashboard. Real infrastructure.</p><p><a href="https://www.bem.ai/">Schedule a demo here</a>.</p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[How to build Customer Support automation with bem in 2 Hours]]></title><description><![CDATA[Embed multichannel support (Slack, email, web) into your product &#8212; no off-the-shelf systems needed]]></description><link>https://blog.bem.ai/p/build-customer-support-automation</link><guid isPermaLink="false">https://blog.bem.ai/p/build-customer-support-automation</guid><dc:creator><![CDATA[Antonio Bustamante]]></dc:creator><pubDate>Fri, 18 Apr 2025 17:15:35 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8b59ad7e-2556-4e41-aec9-e09bfe7e7ca8_4800x2520.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Off-the-shelf support platforms were built for 2010. They're bloated, hard to customize, and sit <em>next to</em> your product instead of <em>inside</em> it.</p><p>But what if you could build the <strong>exact support system your users need</strong>, fully integrated into your UI, Slack workspace, or even an internal dashboard, in two hours?</p><p>With <strong>bem</strong> and a few modern tools (like Supabase and Slack APIs), you can.</p><p>This post walks you through a real implementation of an <strong>AI-powered, schema-driven support system</strong>, from message parsing to triage to ticket assignment, powered by bem&#8217;s API.</p><p>Let&#8217;s build.</p><h2>The Plan: Invisible Support Infrastructure</h2><p>We&#8217;ll set up a custom support system that handles inbound questions from:</p><ul><li><p>&#128236; Email (e.g. support@yourcompany.com)</p></li><li><p>&#128172; Slack (e.g. internal #customer-help channel)</p></li><li><p>&#129489;&#8205;&#128187; Web app (feedback or help forms)</p></li></ul><p>The system will:</p><ol><li><p><strong>Parse inbound support messages</strong> (no template needed)</p></li><li><p><strong>Classify</strong> by type (bug, feature request, billing issue, etc.)</p></li><li><p><strong>Extract key metadata</strong> (e.g. user ID, timestamp, urgency)</p></li><li><p><strong>Hydrate data from your DB</strong> (e.g. pull user plan from Supabase)</p></li><li><p><strong>Route</strong> to the right person/team</p></li><li><p><strong>Post or email</strong> an internal summary with all the context included</p></li><li><p>And optionally: automatically <strong>log it</strong> in your CRM or issue tracker</p></li></ol><h2>Step 1: Define Your Support Schema</h2><p>Start by defining the structure of a support intake. Here's a sample schema we&#8217;ll use in bem:</p><pre><code>{
  "type": "object",
  "required": ["type", "description", "userID", "timestamp"],
  "properties": {
    "type": {
      "type": "string",
      "description": "Category of the support request",
      "enum": ["bug", "feature_request", "billing", "other"]
    },
    "description": {
      "type": "string",
      "description": "User's original message or summary of the request"
    },
    "userID": {
      "type": "string",
      "description": "Unique user ID from your internal system"
    },
    "timestamp": {
      "type": "string",
      "format": "date-time",
      "description": "Time the support request was received"
    },
    "urgency": {
      "type": "string",
      "enum": ["low", "medium", "high"],
      "description": "Estimated urgency based on language analysis"
    }
  }
}
</code></pre><h2>Step 2: Create a Pipeline in bem</h2><p>Use the POST <code>/v1-beta/pipelines</code> endpoint to create a transformation pipeline with this schema.</p><pre><code>POST /v1-beta/pipelines</code></pre><pre><code>{
  "name": "Support Intake Pipeline",
  "outputSchemaName": "Support Intake",
  "outputSchema": { ... }  // insert the schema from above
}</code></pre><p>You&#8217;ll receive a pipeline ID and a unique email address like:</p><pre><code>eml_xxxxxx@pipeline.bem.ai</code></pre><p>Anything you forward to this email gets parsed and transformed in real-time.</p><h2>Step 3: Set Up Routing Logic</h2><p>Now let&#8217;s build a <strong>router</strong> to handle classification and dispatch.</p><p>Create a router config using POST <code>/v1-alpha/action-type-configs</code> with a few simple rules:</p><pre><code>{
  "actionType": "route",
  "name": "Support Router",
  "description": "Routes support tickets by type",
  "routes": [
    {
      "name": "Bug Reports",
      "regex": {
        "patterns": ["crash", "error", "broken", "not working"]
      },
      "actionTypeConfigID": "&lt;pipeline_id_for_bug_support&gt;"
    },
    {
      "name": "Billing",
      "regex": {
        "patterns": ["invoice", "payment", "charge", "receipt"]
      },
      "actionTypeConfigID": "&lt;pipeline_id_for_billing&gt;"
    },
    {
      "name": "General",
      "regex": {
        "patterns": []
      },
      "actionTypeConfigID": "&lt;pipeline_id_for_general_support&gt;"
    }
  ]
}</code></pre><p>Connect this router to a shared email inbox or webhook endpoint.</p><h2>Step 4: Hydrate Data from Supabase (or other data providers)</h2><p>Now that we&#8217;ve extracted <code>userID</code>, we want to <strong>enrich the ticket</strong> with more info &#8212; like plan tier, team size, usage, etc.</p><p>Spin up a basic Supabase function:</p><pre><code>create function get_user_info(uuid text)
returns table (
  user_id text,
  email text,
  plan text,
  usage jsonb
)
language sql
as $$
  select id, email, plan, usage
  from users
  where id = uuid;
$$;</code></pre><p>Call this function from your backend or workflow orchestrator when a new support event is transformed.</p><p>There&#8217;s a million ways of doing this; optionally, use Chroma or Weaviate to do semantic search over the extracted data to match and hydrate with your own. </p><p>We&#8217;re releasing Data Hydration as a first-class feature in bem this quarter, so very soon you won&#8217;t even need to do this!</p><h2>Step 5: Notify the Right Team</h2><p>After hydration, use bem&#8217;s <strong>email action</strong> type to notify your team with enriched support data.</p><p>Create an email config:</p><pre><code>{
  "actionType": "email",
  "name": "Send to Ops",
  "fromEmail": "support@yourcompany.com",
  "fromName": "Support Bot",
  "toEmail": "ops@yourcompany.com",
  "toName": "Support Team",
  "subject": "New Support Request - {{type}} from {{userID}}",
  "body": "&lt;p&gt;Urgency: {{urgency}}&lt;/p&gt;&lt;p&gt;{{description}}&lt;/p&gt;"
}</code></pre><p>Use POST <code>/v1-alpha/actions</code> to trigger the message.</p><h2>Optional: Log It to Your Internal Tools</h2><p>Want to push this to:</p><ul><li><p>Notion?</p></li><li><p>Linear?</p></li><li><p>Salesforce?</p></li><li><p>Zendesk (ironically)?</p></li></ul><p>Just use the transformed output from bem to call their API in your workflow system (like n8n, Make, or plain Node.js).</p><h2>Business ROI</h2><p>Why not just use Intercom or Zendesk?</p><p>Because:</p><ul><li><p>Your ops and support teams want <strong>precision and context</strong>, not another tab</p></li><li><p>You want to <strong>own your workflows</strong> and UI</p></li><li><p>Most SaaS support systems cost <strong>$10&#8211;100 per agent/month</strong>, and offer zero extensibility</p></li></ul><h2>In 2 Hours You Just Built:</h2><ul><li><p>A real-time, multi-channel intake system</p></li><li><p>AI-based triage and routing</p></li><li><p>DB-powered ticket enrichment</p></li><li><p>Internal team alerts</p></li><li><p>Optional CRM logging</p></li></ul><p>All custom, all yours, and all extendable with a single API.</p><h2>Bonus: Auto-Learn from Corrections</h2><p>Your team edits a support tag? Just use the <code>PATCH /v1-beta/transformations</code> endpoint to fine-tune future extractions.</p><p>You're not building a static system &#8212; you're building infrastructure that <strong>learns</strong>.</p><h2>Build It Yourself</h2><p>Want to see this live? <a href="https://www.bem.ai">Schedule a demo</a> or ping our team. We can help you launch a production-grade support system &#8212; customized to your org &#8212; in less than a day.</p><p>This is what support looks like when it&#8217;s <strong>invisible</strong>, <strong>embedded</strong>, and <strong>built for your product</strong>.</p>]]></content:encoded></item><item><title><![CDATA[How fintech teams use bem to automate financial operations ]]></title><description><![CDATA[Invisible infrastructure matters in financial operations]]></description><link>https://blog.bem.ai/p/technical-recipe-how-fintech-teams</link><guid isPermaLink="false">https://blog.bem.ai/p/technical-recipe-how-fintech-teams</guid><dc:creator><![CDATA[Antonio Bustamante]]></dc:creator><pubDate>Wed, 16 Apr 2025 17:08:42 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/35376445-be90-4ae4-9af7-e8ec19e8f173_4800x2520.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We&#8217;re about to release our 1st feature of Q2, our Precision Router, so I thought it&#8217;d be fun to run through a real use case of how to automate financial operations with bem. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3ZKA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bc8ca8-f5c8-49a3-84cc-7684235aa8a9_1024x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3ZKA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bc8ca8-f5c8-49a3-84cc-7684235aa8a9_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3ZKA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bc8ca8-f5c8-49a3-84cc-7684235aa8a9_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3ZKA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bc8ca8-f5c8-49a3-84cc-7684235aa8a9_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3ZKA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bc8ca8-f5c8-49a3-84cc-7684235aa8a9_1024x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3ZKA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bc8ca8-f5c8-49a3-84cc-7684235aa8a9_1024x1024.jpeg" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4bc8ca8-f5c8-49a3-84cc-7684235aa8a9_1024x1024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:379938,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.bem.ai/i/161475391?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bc8ca8-f5c8-49a3-84cc-7684235aa8a9_1024x1024.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3ZKA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bc8ca8-f5c8-49a3-84cc-7684235aa8a9_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3ZKA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bc8ca8-f5c8-49a3-84cc-7684235aa8a9_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3ZKA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bc8ca8-f5c8-49a3-84cc-7684235aa8a9_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3ZKA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4bc8ca8-f5c8-49a3-84cc-7684235aa8a9_1024x1024.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">It doesn&#8217;t need to look like this</figcaption></figure></div><p>When you're moving money, every second counts &#8212; and every manual touch is a risk.</p><p>In fintech, ops leaders face a paradox: the more they scale, the more brittle internal processes become. Spreadsheets break. SOPs get copied and pasted. And &#8220;just forward it to the ops alias&#8221; turns into hours of human translation.</p><p>This is especially dangerous in workflows like:</p><ul><li><p>Loan origination</p></li><li><p>Underwriting</p></li><li><p>Tax and compliance intake</p></li><li><p>Treasury and accounting handoffs</p></li></ul><p>Most teams end up building workflows that behave like <strong>agents</strong> &#8212; nudging humans, creating queues, generating ops tickets. That gets expensive fast.</p><p>What you need instead is <strong>infrastructure</strong> that <strong>runs invisibly</strong>, behind the scenes &#8212; taking unstructured documents, classifying them, extracting data, and triggering downstream actions.</p><p>That&#8217;s what bem was built for.</p><blockquote><p>&#9889;&#65039;<strong>ROI in 30 Days</strong>: Customers using bem for intake workflows in lending and insurance are eliminating 80&#8211;90% of manual data prep work &#8212; and in some cases, saving <strong>hundreds of hours a week</strong> in underwriting and portfolio ops.</p></blockquote><p>Let&#8217;s walk through how to do this.</p><div><hr></div><h3>Use Case: Automate Document Intake for Credit Ops</h3><p>Let&#8217;s say you&#8217;re running credit ops at a fintech or nonbank lender. You regularly receive:</p><ol><li><p><strong>Loan Applications</strong> (PDF or email)</p></li><li><p><strong>Revenue Forecasts</strong> (Excel or CSV)</p></li><li><p><strong>Balance Sheets</strong> (Excel, CSV, or PDF)</p></li></ol><p>Each comes from a different stakeholder &#8212; borrowers, brokers, internal teams &#8212; and none of it is structured the same way twice.</p><p>You want to:</p><ul><li><p>Automatically classify and route documents</p></li><li><p>Extract structured data into a clean JSON schema</p></li><li><p>Notify your ops or risk team once complete</p></li></ul><p>This lets you operate at scale without increasing headcount &#8212; or asking engineers to build custom pipelines for every document variation.</p><div><hr></div><h3>1. Create Pipelines for Each Document Type</h3><p>Each document type gets a <strong>pipeline</strong> that defines:</p><ul><li><p>The schema for structured output</p></li><li><p>Whether you want per-page or per-row processing</p></li><li><p>Where to send the results</p></li></ul><h4>Endpoint:</h4><pre><code><code>POST /v1-beta/pipelines</code></code></pre><p>Here's an example schema for a <strong>Loan Application Pipeline</strong></p><pre><code>{
  "name": "Loan Application Pipeline",
  "outputSchemaName": "LoanApplication",
  "outputSchema": {
    "type": "object",
    "required": ["applicantInfo", "loanDetails", "submittedAt"],
    "properties": {
      "applicantInfo": {
        "type": "object",
        "properties": {
          "fullName": { "type": "string", "description": "Applicant's full legal name" },
          "email": { "type": "string", "format": "email", "description": "Primary contact email" },
          "phone": { "type": "string", "description": "Phone number" },
          "businessName": { "type": "string", "description": "Name of the applicant's company" }
        }
      },
      "loanDetails": {
        "type": "object",
        "properties": {
          "requestedAmountUSD": { "type": "number", "description": "Loan amount requested in USD" },
          "loanPurpose": { "type": "string", "description": "Purpose of the loan" },
          "termMonths": { "type": "integer", "description": "Loan term in months" }
        }
      },
      "submittedAt": { "type": "string", "format": "date", "description": "Date of submission" }
    }
  }
}
</code></pre><p>Create similar pipelines for revenue forecasts and balance sheets with fields like <code>forecastStartDate</code>, <code>monthlyRevenue</code>, <code>currentAssets</code>, <code>currentLiabilities</code>, etc.</p><h3>2. Set Up a Router to Classify Incoming Docs</h3><p>Instead of relying on humans to manually label or route documents, bem can auto-classify incoming files based on email sender, content patterns, or metadata.</p><h4>Endpoint:</h4><pre><code><code>POST /v1-alpha/action-type-configs</code></code></pre><p>Use <code>actionType: route</code></p><pre><code>{
  "actionType": "route",
  "name": "Credit Intake Router",
  "routes": [
    {
      "name": "loan_applications",
      "origin": {
        "email": {
          "patterns": ["@loanportal.com", "@brokerxyz.com"] /*NEW in Precisioun Router! Optional if you want deterministic matching by pattern*/
        }
      },
      "actionTypeConfigID": "actcfg_loanapp123"
    },
    {
      "name": "revenue_forecasts",
      "origin": {
        "email": {
          "patterns": ["@financials.com"]
        }
      },
      "actionTypeConfigID": "actcfg_revenue456"
    },
    {
      "name": "balance_sheets",
      "origin": {
        "email": {
          "patterns": ["@accountingpartners.com"]
        }
      },
      "actionTypeConfigID": "actcfg_balance789"
    }
  ]
}
</code></pre><p>This gives you a dedicated bem email address that you can forward files to. </p><p>Forward anything there &#8212; we'll route it to the right pipeline automatically.</p><blockquote><p>&#128257; <strong>Strategic Value</strong>: Your intake process becomes repeatable and auditable, which reduces compliance risk and improves investor confidence in your data model.</p></blockquote><div><hr></div><h3>3. Notify Your Team When New Docs Arrive</h3><p>Once a document is transformed, trigger an <strong>email notification</strong> to your internal team with the metadata and reference ID.</p><h4>Endpoint:</h4><pre><code><code>POST /v1-alpha/action-type-configs</code></code></pre><p>Use <code>actionType: email</code></p><pre><code>{
  "actionType": "email",
  "name": "Notify Credit Ops",
  "fromEmail": "no-reply@bem.ai",
  "fromName": "Bem Bot",
  "toEmail": "credit-ops@yourcompany.com",
  "toName": "Credit Ops",
  "subject": "New Intake: {{referenceID}}",
  "body": "&lt;p&gt;A new document has been processed for reference ID {{referenceID}}. You can now review the structured data in your dashboard or downstream system.&lt;/p&gt;"
}</code></pre><p>Chain this email notification by including <code>nextActionTypeConfigID</code> in your pipeline config.</p><h3>4. Send Documents via API or Email</h3><h4>Option A &#8212; API Upload</h4><p>Endpoint: <code>POST /v1-beta/transformations</code></p><pre><code>{
  "pipelineID": "pl_abc123",
  "transformations": [
    {
      "referenceID": "loan_9821",
      "inputType": "pdf",
      "inputContent": "&lt;base64 file content&gt;"
    }
  ]
}</code></pre><h4>Option B &#8212; Just Email It</h4><p>Send any file to your router or pipeline address. We'll handle ingestion, routing, transformation, and notifications.</p><blockquote><p>&#128188; <strong>Business Impact</strong>: You shorten time-to-decision on every loan file, avoid duplicate intake work, and reduce the burden on your operations team.</p></blockquote><h3>5. Monitor and Audit Everything</h3><ul><li><p>View transformation status:<br><code>GET /v1-alpha/tasks</code></p></li><li><p>Inspect processed output:<br><code>GET /v1-alpha/events</code></p></li><li><p>Track and resolve errors:<br><code>GET /v1-beta/transformations/errors</code></p></li></ul><h3>Extra Credit: Embed Fine-Tuning Into Your Existing UI</h3><p>Once you&#8217;ve automated intake and transformation with bem, you&#8217;ll likely still encounter edge cases &#8212; minor corrections your ops team makes manually in your internal tools or CRM.</p><p>Most teams stop there. But with <strong>just one more step</strong>, you can:</p><p>&#9989; Continuously improve data quality<br>&#9989; Reduce manual work over time<br>&#9989; Build a feedback loop into your ops product &#8212; without the user ever leaving</p><p>Here&#8217;s how:</p><p>Let&#8217;s say your credit ops team is reviewing an intake form in your dashboard. They spot that the <strong>"requested amount"</strong> field was misinterpreted. They correct it directly in your UI.</p><p>Instead of treating that as the end of the workflow &#8212; use that corrected value to <strong>fine-tune</strong> bem automatically via our <code>PATCH</code> endpoint.</p><pre><code>PATCH /v1-beta/transformations</code></pre><p>This endpoint lets you submit a corrected version of the structured output for any specific <code>transformationID</code>.</p><p>You don&#8217;t have to retrain anything. You don&#8217;t need to manage a model. bem handles that behind the scenes &#8212; using your correction as signal to improve future results for similar docs.</p><pre><code>{
  "transformations": [
    {
      "transformationID": "tr_2bxoJPNdSD4LgRT4YVC4gt72hlI",
      "correctedJSON": {
        "loanDetails": {
          "requestedAmountUSD": 125000
        }
      }
    }
  ]
}</code></pre><p>You can even capture a batch of corrections periodically and send them all at once.</p><blockquote><p>Most of our customers get to 99% accuracy with only 10-20 corrections. </p></blockquote><p>The best ops automations are the ones that feel like nothing changed &#8212; until they do.</p><p>By closing the loop invisibly:</p><ul><li><p>Your workflows get better the more people use them</p></li><li><p>Ops teams don&#8217;t need to refile corrections</p></li><li><p>Your AI system feels like it&#8217;s learning &#8212; because it is.</p></li></ul><div><hr></div><h3>Summary: Fintech Ops that Scale with You</h3><p>You don&#8217;t need a queue of analysts reformatting spreadsheets or parsing PDFs by hand.<br>You need invisible, composable infrastructure that runs in the background.</p><p>bem turns your email inbox or intake folder into structured, actionable data &#8212; in minutes, not hours.</p><h2>Ready to Build?</h2><p>You don&#8217;t need a massive engineering team to automate credit intake.<br>You just need the right primitives.</p><p>&#128236; Forward a sample doc: <code>hi@bem.ai</code><br>&#128187; Or <a href="https://www.bem.ai">schedule a demo</a></p><p>Run faster, cleaner, and invisibly, with bem.</p>]]></content:encoded></item><item><title><![CDATA[The Art of Building Enterprise Software]]></title><description><![CDATA[Most enterprise software is built on a lie. We're here to fix that.]]></description><link>https://blog.bem.ai/p/the-art-of-building-enterprise-software</link><guid isPermaLink="false">https://blog.bem.ai/p/the-art-of-building-enterprise-software</guid><dc:creator><![CDATA[Antonio Bustamante]]></dc:creator><pubDate>Mon, 14 Apr 2025 17:15:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!n3Af!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85474b70-3705-4180-ab3c-e65aff402db9_1536x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most enterprise software is built on a lie.</p><p><strong>The lie is that data is clean, structured, and predictable. That processes follow rules. That every customer behaves the same way. That systems talk to each other neatly, one field at a time.</strong></p><p>And because we&#8217;ve accepted that lie, we&#8217;ve designed our software around it.</p><p>Every workflow is hardcoded. Every integration is handcrafted. Every edge case is a ticket. Every exception is someone&#8217;s job.</p><p>Entire teams are built to catch what the software misses &#8212; armies of people stitching together spreadsheets, translating formats, rerunning broken syncs, answering questions the system was supposed to answer. The more you grow, the more it grows with you &#8212; not your product, but the shadow org it takes to keep the product working.</p><p>This is not a software problem. It&#8217;s a systems problem. And it&#8217;s time to rethink it entirely.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n3Af!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85474b70-3705-4180-ab3c-e65aff402db9_1536x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n3Af!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85474b70-3705-4180-ab3c-e65aff402db9_1536x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!n3Af!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85474b70-3705-4180-ab3c-e65aff402db9_1536x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!n3Af!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85474b70-3705-4180-ab3c-e65aff402db9_1536x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!n3Af!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85474b70-3705-4180-ab3c-e65aff402db9_1536x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n3Af!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85474b70-3705-4180-ab3c-e65aff402db9_1536x1024.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85474b70-3705-4180-ab3c-e65aff402db9_1536x1024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:479294,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.bem.ai/i/161278950?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85474b70-3705-4180-ab3c-e65aff402db9_1536x1024.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!n3Af!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85474b70-3705-4180-ab3c-e65aff402db9_1536x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!n3Af!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85474b70-3705-4180-ab3c-e65aff402db9_1536x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!n3Af!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85474b70-3705-4180-ab3c-e65aff402db9_1536x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!n3Af!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85474b70-3705-4180-ab3c-e65aff402db9_1536x1024.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>The mess is not going away</h3><p>The hard truth is: reality is messy. Inputs are inconsistent. Customers are unpredictable. No two documents look the same. No two systems speak the same language. And no two teams run things exactly alike.</p><p>Software has tried to impose structure on this chaos for decades. But it&#8217;s always been a brittle kind of structure &#8212; based on assumptions that quickly fall out of date.</p><p>Most of today&#8217;s solutions are attempts to paper over this problem. Agents that click buttons for you. Workflows that guess what you meant. RPA that mimics what a human would do.</p><p>But the problem was never that people were too slow. It&#8217;s that we&#8217;ve asked them to be the bridge between systems that never should have relied on people in the first place.</p><h3>Software should think like a system, not like a person</h3><p>At bem, we think about this differently.</p><p>We believe the next generation of enterprise software won&#8217;t look like better assistants. It will look like better infrastructure.</p><p>Not another agent on your screen, but an intelligent layer inside your system &#8212; one that sees what&#8217;s happening, understands the context, and acts on your behalf.</p><p>It won't just process a PDF. It will extract the key data and route it into the right internal system, transformed into your schema, tagged with metadata, matched to existing records, and fully auditable.<br>It won't just send alerts. It will evaluate real-world events &#8212; a new file, a support message, a policy update &#8212; and decide what to do with them in real time.<br>It won't just automate tasks. It will become a substrate for your company&#8217;s logic, operating quietly behind the scenes and learning as it goes.</p><p>Invisible by default. Observable by design.</p><h3>This is already happening</h3><p>We&#8217;re seeing this shift today.</p><p>Companies are rethinking what internal software should do &#8212; not just in back-office workflows, but in the core systems that run their business.<br>They&#8217;re replacing brittle integrations with live transformation. They&#8217;re automating document-heavy processes in seconds. They&#8217;re routing and interpreting data streams without writing a line of mapping code.</p><p>We&#8217;ve helped logistics firms ingest EDI and vendor emails and turn them into real-time actions.<br>We&#8217;ve helped fintech companies process invoices, remittances, and statements across formats, routing them automatically into their accounting systems.<br>We&#8217;ve helped healthcare and insurance clients extract structure from claims, forms, and PDFs &#8212; reducing hours of human processing down to milliseconds.</p><p>All without building a single parser.</p><p>This isn&#8217;t a future we&#8217;re imagining. It&#8217;s already here. And it&#8217;s just the beginning.</p><h3>What comes next</h3><p>Enterprise software is entering a new era.</p><p>Not one of screens and dashboards &#8212; but one of <strong>systems that understand</strong>, adapt, and act.<br>Not one of simulated humans &#8212; but one of <strong>real machine reasoning</strong>, purpose-built for the work behind the scenes.<br>Not one of reactive tooling &#8212; but one of <strong>ambient intelligence</strong>, wired into your architecture from day one.</p><p>That&#8217;s what we&#8217;re building with bem. A modular platform for structuring, transforming, routing, and automating complex data &#8212; across any input, any format, and any scale.<br>One system. Fully programmable. Fully inspectable. Invisible, until it needs to be seen.</p><p>We think this is the future of enterprise software.<br><a href="https://www.bem.ai/">If you&#8217;re building that future too, we&#8217;d love to talk</a>.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Hard Software Episode 8: Building principles + elimination of prod errors with Perla Gamez, Founder + CEO @ Foam]]></title><description><![CDATA[Antonio sits down with Perla to discuss everything from foam's three core building principles to moving quickly for customers in production and critical reasoning pathways.]]></description><link>https://blog.bem.ai/p/hard-software-episode-8-building</link><guid isPermaLink="false">https://blog.bem.ai/p/hard-software-episode-8-building</guid><dc:creator><![CDATA[Zoey]]></dc:creator><pubDate>Tue, 08 Apr 2025 17:15:11 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/160867957/c2d3eb3ce7fdba70d4a31751ed52030f.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p></p>]]></content:encoded></item><item><title><![CDATA[Hard Software Episode 7: All things webhooks with Tom Hacohen, Founder + CEO @ Svix]]></title><description><![CDATA[Upal sits down with Tom to discuss everything from autonomous systems, to product market fit and what it means to be a blocker for your team as a senior engineer.]]></description><link>https://blog.bem.ai/p/hard-software-episode-8-all-things</link><guid isPermaLink="false">https://blog.bem.ai/p/hard-software-episode-8-all-things</guid><dc:creator><![CDATA[Zoey]]></dc:creator><pubDate>Thu, 20 Mar 2025 16:31:28 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/159458569/b50d36fc1829e9084e6f8a2410f6adf8.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p></p>]]></content:encoded></item><item><title><![CDATA[beminists: women in early stage startups- with Erica Clark, Co-founder + CTO at Riveter]]></title><description><![CDATA[In our first episode of new bem podcast series, beminists: women in early stage startups, Jenny Kwan, Founding Engineer at bem, chats with Erica Clark, Co-founder and CTO of Riveter (YC 24).]]></description><link>https://blog.bem.ai/p/beminists-women-in-early-stage-startups</link><guid isPermaLink="false">https://blog.bem.ai/p/beminists-women-in-early-stage-startups</guid><dc:creator><![CDATA[Zoey]]></dc:creator><pubDate>Mon, 03 Mar 2025 17:45:53 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158305931/ab2ded062a4ff0c1b6a6c7e62d589c97.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In our first episode of new bem podcast series, beminists: women in early stage startups, Jenny Kwan, Founding Engineer at bem, chats with Erica Clark, Co-founder and CTO of Riveter (YC 24).</p><p>Jenny and Erica chat about everything from building products that are accessible for non-technical users, navigating early adopter and user experiences in the new LLM age, and Erica&#8217;s experience going through YC and finding a Co-founder.</p>]]></content:encoded></item><item><title><![CDATA[bem(inist): creating space along the early stage journey]]></title><description><![CDATA[Thoughts, reflections, and feelings after our first women's panel- and what's to come from our bem team.]]></description><link>https://blog.bem.ai/p/beminist-creating-space-along-the</link><guid isPermaLink="false">https://blog.bem.ai/p/beminist-creating-space-along-the</guid><dc:creator><![CDATA[Zoey]]></dc:creator><pubDate>Mon, 24 Feb 2025 18:01:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OQ-H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790b2b10-2845-45b8-8e0c-cff8b2a7f907_4032x3024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At bem, we're just two women on a small team of six total (for now)&#8211; Jenny Kwan, our brilliant Founding Engineer, and myself, carrying the deceptively simple title "Head of Growth" that masks the beautiful chaos of navigating everything non-engineering. Jenny and I immediately connected on our past experiences as women within the startup community- or really, just women in the workplace. What it means to do glue work on top of your role when you&#8217;d consider yourself a high performer. How to connect with and relate to other women navigating more senior positions or those who are just getting started. And how, despite working for amazing companies in the past, we were both still yearning for so much in this area.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OQ-H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790b2b10-2845-45b8-8e0c-cff8b2a7f907_4032x3024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OQ-H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790b2b10-2845-45b8-8e0c-cff8b2a7f907_4032x3024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OQ-H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790b2b10-2845-45b8-8e0c-cff8b2a7f907_4032x3024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OQ-H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790b2b10-2845-45b8-8e0c-cff8b2a7f907_4032x3024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OQ-H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790b2b10-2845-45b8-8e0c-cff8b2a7f907_4032x3024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OQ-H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790b2b10-2845-45b8-8e0c-cff8b2a7f907_4032x3024.jpeg" width="1456" height="1941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/790b2b10-2845-45b8-8e0c-cff8b2a7f907_4032x3024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1941,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2904993,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.bem.ai/i/157823883?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790b2b10-2845-45b8-8e0c-cff8b2a7f907_4032x3024.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OQ-H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790b2b10-2845-45b8-8e0c-cff8b2a7f907_4032x3024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OQ-H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790b2b10-2845-45b8-8e0c-cff8b2a7f907_4032x3024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OQ-H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790b2b10-2845-45b8-8e0c-cff8b2a7f907_4032x3024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OQ-H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F790b2b10-2845-45b8-8e0c-cff8b2a7f907_4032x3024.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Jenny, right before the panel prep began (day of).</figcaption></figure></div><p>So, we started with our women&#8217;s panel. We brought together incredible panelists who have recently scaled high-growth companies who have not yet reached Series B funding. Folks who have scaled from the ground up and know what it means to say &#8220;Oh, I have no idea how to describe my role&#8221; because they&#8217;re doing.. everything. I was personally shocked at how quickly we filled the 95 person waitlist without much promotion, but was still a bit nervous. Would people relate to this? As someone who has oftentimes felt isolated as a senior generalist in early stage startups, I wasn&#8217;t sure. But then a memory of a past manager saying &#8220;You seem too calm,&#8221; while I was flying around the world to scale the business, kept popping up. </p><p>Then, the event was deeply connecting. What an absolute joy to learn from fellow panelists Myoung Kang from MotherDuck (who has scaled <em>so many</em> impressive orgs prior to), Lily Roosevent from HockeyStack, Olivia Baker from Paraform, and our amazing facilitator, a deeply empathetic and curious human being, Kim Chia from Next Legacy Partners.</p><p>Folks were honest and raw about so many things- from what they&#8217;re currently struggling with (from biking to work to managing balance and what it means to navigate hormone awareness when working 12 hour days). About the notion of "balance" when you're building something from nothing. What it means to stand up to leaders and founders, to take up space and push for things- from cultural to project and business-related. </p><p>One of the best parts for me was also watching the event form prior to that day- what it meant to have a group of female leaders come together to plan an event. It felt like a truly democratic process- including down to how we approached topics and who wanted to speak on which. Instead of inflating our nervous systems prior to the talk, we sat in a breath exercise together led by Jenny. </p><p>Safety for women and the female experience came up a lot that evening, and is something that I haven&#8217;t been able to stop thinking about for a few years now. What does it mean to have enough space to support and grow fellow women in the workplace in an early stage startup while having unlimited amounts of projects and work to do? What does it mean to advocate for them and provide a safety barrier? I know for me personally, I reflect constantly on what it means to be &#8220;senior&#8221; enough to do more of this- something I&#8217;ve failed on as recently as last week.</p><p>To be clear, it does feel scary, even for us, which I hate to admit. Will we be taken less seriously? Will we be boxed in as "women who talk about women stuff" rather than technical or business leaders? Will we alienate partners or investors? But the alternative, silence, is what makes me lose the most sleep (which does share space with late night tactical work thoughts).</p><p>However, given the event turnout, amazing questions our panelists received from those who attended, and the clear need in our startup industry to fuel more female-forward conversations (as well as my and Jenny&#8217;s deep passion for this), we&#8217;re excited to announce a few things from our bem team:</p><ul><li><p>We&#8217;re launching our new podcast series, beminist. Our first episode is launching <em>very</em> soon, and we&#8217;ll continue our journey of interviewing and highlighting female early stage leaders and builders</p></li><li><p>We&#8217;re hosting a women in engineering leadership dinner in a month- please contact us directly if you&#8217;d like to join. We&#8217;d love to have you</p></li><li><p>We are hosting another women&#8217;s panel in the late spring! This will be announced in early April</p></li></ul><p>Our beminist team is thrilled to offer more space for these conversations. And we&#8217;re hiring- if you&#8217;re a female engineer or CS lead, please reach out. </p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.bem.ai/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading bem-log! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Series B, Upskilling Engineering, and Reinventing Insurance with Michael Mattheakis, Co-Founder + CTO at Comulate]]></title><description><![CDATA[In this episode of Hard Software, Upal chats about everything from funding to growth and product innovation with Michael Mattheakis, Co-Founder + CTO of Comulate, directly after their Series B announcement.]]></description><link>https://blog.bem.ai/p/series-b-upskilling-engineering-and</link><guid isPermaLink="false">https://blog.bem.ai/p/series-b-upskilling-engineering-and</guid><dc:creator><![CDATA[Zoey]]></dc:creator><pubDate>Tue, 18 Feb 2025 18:01:43 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/157398971/52daf4cbe962480b83b9a2cb3756cf7f.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this episode of <em>Hard Software</em>, Upal chats about everything from funding to growth and product innovation with Michael Mattheakis, Co-Founder + CTO of Comulate, directly after their Series B announcement.</p>]]></content:encoded></item><item><title><![CDATA[Ambient business systems with bem]]></title><description><![CDATA[also titled "Software that works for you, and not the other way around". How the bem team is building a platform of AI components to replace 99% of the enterprise software out there.]]></description><link>https://blog.bem.ai/p/ambient-business-systems-with-bem</link><guid isPermaLink="false">https://blog.bem.ai/p/ambient-business-systems-with-bem</guid><dc:creator><![CDATA[Antonio Bustamante]]></dc:creator><pubDate>Wed, 15 Jan 2025 01:56:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pbfZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56d5036-b633-4aa8-bf91-5aca2b0a3cbd_3840x2160.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The team and I have been thinking about ambient systems for a very, very long time. VLMs and LLMs are new paradigms that allow us to build very <em>adaptive</em> tooling for businesses, but we think of AI as a set of abstractions to leverage, not as the end. </p><p>In order to produce the next generation of business software, we have to go beyond the inner components and into the packaging of the product and its access pattern. How easy is it to connect to your existing systems? Does a human have to be in the loop? </p><p>For decades, businesses have been patching together workflows, hacking inefficiencies with stopgap solutions like spreadsheets, RPA, or agents. These tools were built to survive yesterday&#8217;s problems, not scale into tomorrow&#8217;s opportunities.</p><p>At bem, we&#8217;re rethinking how software and businesses coexist. We&#8217;re not just building automation tools or band-aid solutions; we&#8217;re creating <strong>ambient business systems</strong>&#8212;a generational platform where software doesn&#8217;t just run alongside your business but deeply integrates into it.</p><p>Here&#8217;s how we&#8217;re doing it&#8212;and why ambient systems are the future.</p><div><hr></div><h3>From Chaos to Clarity: Why Ambient Systems Matter</h3><p>The back office has long been seen as the &#8220;messy middle&#8221; of business. Think endless PDFs, emails, ERPs, CRMs, and siloed legacy systems that don&#8217;t speak the same language. Traditional tools like RPA or agents tried to tame the chaos but failed to address the root issue: these systems were built to mimic broken processes, not rebuild them.</p><p>That&#8217;s where bem comes in.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pbfZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56d5036-b633-4aa8-bf91-5aca2b0a3cbd_3840x2160.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pbfZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56d5036-b633-4aa8-bf91-5aca2b0a3cbd_3840x2160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pbfZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56d5036-b633-4aa8-bf91-5aca2b0a3cbd_3840x2160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pbfZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56d5036-b633-4aa8-bf91-5aca2b0a3cbd_3840x2160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pbfZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56d5036-b633-4aa8-bf91-5aca2b0a3cbd_3840x2160.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pbfZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56d5036-b633-4aa8-bf91-5aca2b0a3cbd_3840x2160.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b56d5036-b633-4aa8-bf91-5aca2b0a3cbd_3840x2160.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:697639,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pbfZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56d5036-b633-4aa8-bf91-5aca2b0a3cbd_3840x2160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pbfZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56d5036-b633-4aa8-bf91-5aca2b0a3cbd_3840x2160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pbfZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56d5036-b633-4aa8-bf91-5aca2b0a3cbd_3840x2160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pbfZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56d5036-b633-4aa8-bf91-5aca2b0a3cbd_3840x2160.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><strong>What are ambient business systems?</strong><br>Ambient systems don&#8217;t just <em>react</em> to workflows&#8212;they anticipate them, integrate seamlessly, and adapt as your business evolves. They&#8217;re invisible yet indispensable. They don&#8217;t require dropdowns, custom field mapping, or human workarounds. Instead, they transform every interaction into a seamless, structured process that actually works.</p><p>At bem, we believe that businesses shouldn&#8217;t be forced to manage complex technical pipelines just to use cutting-edge tools. Unlike other platforms that shift the burden of deploying and maintaining Retrieval-Augmented Generation (RAG) pipelines onto their customers, bem keeps this complexity under the hood.</p><p>We integrate <strong>RAG, vector storage, and retrieval</strong> natively into our platform to power data transformation and enrichment&#8212;but this complexity is invisible to our users. Why? Because businesses don&#8217;t need to manage infrastructure; they need solutions. Our focus is on delivering outcomes, not technical hurdles.</p><div><hr></div><h3>Generalized, But Earned: Why Specific Use Cases Lead to Universal Platforms</h3><p>Building a generalized platform is every startup&#8217;s dream. But here&#8217;s the reality: horizontal platforms aren&#8217;t born, they&#8217;re earned&#8212;customer by customer, use case by use case.</p><p>We&#8217;ve worked with companies ranging from early-stage startups to Fortune 500 enterprises and governments. Across this spectrum, one truth is clear: customers don&#8217;t buy horizontal platforms; they buy solutions to their specific problems.</p><p>By deeply engaging with our users&#8217; pain points&#8212;whether it&#8217;s transforming data dumps into actionable insights, integrating with legacy systems, or automating tedious back-office tasks&#8212;we&#8217;ve created tailored solutions that will eventually scale across industries.</p><p>Our approach:</p><ul><li><p><strong>Start narrow</strong>: Solve specific, high-value problems deeply.</p></li><li><p><strong>Think big</strong>: Use these solutions to create reusable, scalable components that expand into a generalized platform over time.</p></li></ul><p>Horizontal success is earned through precision, iteration, and listening.</p><div><hr></div><h3>What We&#8217;ve Learned: From Experimentation to Transformation</h3><p>In our first year, we learned that progress isn&#8217;t about trying to solve every problem at once&#8212;it&#8217;s about being pragmatic, focused, and experimental. Here&#8217;s what drives us:</p><ol><li><p><strong>Deliver Simplicity Through Complexity</strong><br>Businesses don&#8217;t want to deal with the complexity of deploying infrastructure like RAG pipelines or vector databases. They just want systems that work. At bem, we handle the hard parts&#8212;retrieval, enrichment, transformation&#8212;so you don&#8217;t have to. Our users interact with a clean, simple interface, while we do the heavy lifting under the hood.</p></li><li><p><strong>Build for Specific Use Cases, Generalize Later</strong><br>Every enterprise is unique. By solving deeply specific problems first, we&#8217;re able to learn, refine, and eventually build reusable solutions. This iterative approach ensures we&#8217;re delivering meaningful value, not superficial features.</p></li><li><p><strong>Automation Isn&#8217;t Enough&#8212;Transformation Is Key</strong><br>Automation tools like RPA and &#8220;AI agents&#8221; often fail because they only patch over inefficiencies. Instead of mimicking human workflows, bem rebuilds them from the ground up&#8212;eliminating redundancies and creating systems that are inherently smarter, faster, and more scalable.</p></li><li><p><strong>Customer-Centric Experimentation</strong><br>Our platform evolves by learning directly from our users. Whether it&#8217;s a startup with a scrappy tech stack or a Fortune 500 company wrangling complex integrations, we partner with our customers to test, refine, and deliver. This collaboration is our superpower.</p></li></ol><div><hr></div><h3>Beyond Automation: Elevating the Back Office</h3><p>At its core, bem transforms the back office from a tangle of inefficiencies into a source of value. With bem:</p><ul><li><p><strong>Data dumps become dashboards.</strong></p></li><li><p><strong>Manual workflows become automated pipelines.</strong></p></li><li><p><strong>Disconnected systems become seamless integrations.</strong></p></li></ul><p>We don&#8217;t just eliminate tedious data entry&#8212;we turn it into a competitive advantage. Whether it&#8217;s logistics, healthcare, fintech, insurance, or government workflows, bem empowers businesses to operate at their best by enabling entirely new ways of working.</p><p>This means moving the back office to customer-facing products. We fundamentally think the back office is dead, and if that&#8217;s true, that also means RPA and other puppeteer-based paradigms and agents will become outdated.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-cyF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbed9f62-a6f4-469b-a849-a128d2b39835_3840x2160.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-cyF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbed9f62-a6f4-469b-a849-a128d2b39835_3840x2160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-cyF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbed9f62-a6f4-469b-a849-a128d2b39835_3840x2160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-cyF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbed9f62-a6f4-469b-a849-a128d2b39835_3840x2160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-cyF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbed9f62-a6f4-469b-a849-a128d2b39835_3840x2160.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-cyF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbed9f62-a6f4-469b-a849-a128d2b39835_3840x2160.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cbed9f62-a6f4-469b-a849-a128d2b39835_3840x2160.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1120228,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-cyF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbed9f62-a6f4-469b-a849-a128d2b39835_3840x2160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-cyF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbed9f62-a6f4-469b-a849-a128d2b39835_3840x2160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-cyF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbed9f62-a6f4-469b-a849-a128d2b39835_3840x2160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-cyF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcbed9f62-a6f4-469b-a849-a128d2b39835_3840x2160.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><h3>The Core Philosophy: Why Ambient Systems Are the Future</h3><p>Most enterprise software still treats humans like clerks&#8212;forcing them to interact with dropdown menus, repetitive forms, and outdated systems. At bem, we&#8217;re flipping that script.</p><p>We believe that systems should adapt to humans, not the other way around. Ambient systems work <strong>for you</strong>, invisibly and intuitively. Instead of building bots that mimic human behavior, we&#8217;re creating true software abstractions that reimagine workflows entirely.</p><p>Our mission is simple:</p><ul><li><p><strong>Eliminate the need for manual data entry, validation, and communication.</strong></p></li><li><p><strong>Create infrastructure that businesses can depend on for decades.</strong></p></li><li><p><strong>Build systems that integrate seamlessly into workflows without exposing users to technical complexity.</strong></p></li></ul><p>We don&#8217;t think about AI as hype or as &#8220;agents&#8221; trying to act human. For us, AI is a means to an end&#8212;one part of a broader system that redefines how businesses operate.</p><div><hr></div><h3>Why Now, Why Us</h3><p>The world is at an inflection point. Businesses are drowning in complexity, and the old tools&#8212;RPA, agents, and piecemeal automation&#8212;are no longer enough.</p><p>Advances in AI and machine learning have created a unique opportunity to build something better. At bem, we&#8217;re combining decades of experience in automation and data transformation to create a platform that will power the next century of software.</p><p><strong>Our unique position:</strong></p><ul><li><p><strong>From startups to governments</strong>: We&#8217;ve already proven our ability to solve hard problems across industries, from seed-stage startups to Fortune 500 enterprises and public institutions.</p></li><li><p><strong>Data transformation as the wedge</strong>: By solving one of the hardest, most universal business problems&#8212;data transformation&#8212;we&#8217;re creating the foundation for broader operational transformation.</p></li><li><p><strong>A generational platform</strong>: We&#8217;re not iterating on old ideas; we&#8217;re replacing them. bem is the infrastructure for the software-first economy of the future.</p></li></ul><div><hr></div><h3>Let&#8217;s Build the Future of Business Computing</h3><p>bem isn&#8217;t just a company&#8212;it&#8217;s a movement. We&#8217;re building systems that work in harmony with humans, eliminating inefficiencies, and redefining how software serves businesses.</p><p>The back office of today is a patchwork. The back office of the future is ambient, intelligent, and transformational.</p><p>If you&#8217;re ready to help build that future&#8212;with us, as a partner, or as an investor&#8212;get in touch.</p><p>The next era of software starts here. Let&#8217;s make it happen.</p>]]></content:encoded></item><item><title><![CDATA[Expanding Vision Capabilities with bem]]></title><description><![CDATA[We&#8217;re thrilled to be expanding our vision capabilities to support the transformation of complex documents]]></description><link>https://blog.bem.ai/p/expanding-vision-capabilities-with</link><guid isPermaLink="false">https://blog.bem.ai/p/expanding-vision-capabilities-with</guid><dc:creator><![CDATA[Barak]]></dc:creator><pubDate>Wed, 08 Jan 2025 18:01:54 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/72612668-14fc-4bfe-b66c-1ca229452cb5_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As of today, our team is proud to be supporting the growing <strong>bem</strong> customer base in transforming business processes through making sense of their unstructured data, from automatically handling procurement data within<a href="https://www.bem.ai/customer-stories/order-co"> vendor emails</a>, to ingesting<a href="https://www.bem.ai/customer-stories/cust-story-goliath-data-"> large scale real estate public records</a>.</p><p>Although we&#8217;ve been supporting visual documents since we launched our platform, we were most capable in processing english-language documents with clean and well aligned layouts, such as PDF data exports or rendered web pages. However, we found that documents that didn&#8217;t have those qualities have been harder to extract data from. Most of this has been related to our internal systems ability to process visual documents.</p><h2>Why we&#8217;ve been working on vision</h2><p>Ultimately we&#8217;ve realized we needed to upgrade our platform with state of the art vision models in order to best serve our customers (and their customers) that require data extraction on a wider range of document types such as:</p><ul><li><p>Hand written documents</p><ul><li><p>Hand writing within forms</p></li><li><p>Physical notes</p></li></ul></li><li><p>Photos of documents</p><ul><li><p>Receipt processing</p></li><li><p>Warehouse labels</p></li></ul></li><li><p>Complex layouts</p><ul><li><p>Trifold documents</p></li><li><p>Multi-column articles</p></li></ul></li><li><p>Non-english languages</p><ul><li><p>Customs forms with multiple languages</p></li><li><p>International receipts</p></li></ul></li></ul><p>As part of this investigation into our abilities to handle more challenging document types, we created an internal dataset that covered a high variance suite of documents which were representative of the complex needs of our customers across several industries. We used this dataset for accuracy evaluation while testing new internal solutions for visual data extraction, maximizing the performance of our vision system against a diverse array of document types.</p><h2>How it works</h2><p>You might be wondering how you can get access to these capabilities, and the answer is our new vision capabilities are available to all new users of <strong>bem</strong>! Here&#8217;s an example of what our new platform capabilities look like in this new update, using a Japanese language receipt as an example.</p><p>Given the following document:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zN3N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab967ae-cef5-4d39-a654-8d49b02b9ac2_558x652.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zN3N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab967ae-cef5-4d39-a654-8d49b02b9ac2_558x652.heic 424w, https://substackcdn.com/image/fetch/$s_!zN3N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab967ae-cef5-4d39-a654-8d49b02b9ac2_558x652.heic 848w, https://substackcdn.com/image/fetch/$s_!zN3N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab967ae-cef5-4d39-a654-8d49b02b9ac2_558x652.heic 1272w, https://substackcdn.com/image/fetch/$s_!zN3N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab967ae-cef5-4d39-a654-8d49b02b9ac2_558x652.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zN3N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab967ae-cef5-4d39-a654-8d49b02b9ac2_558x652.heic" width="558" height="652" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ab967ae-cef5-4d39-a654-8d49b02b9ac2_558x652.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:652,&quot;width&quot;:558,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:90338,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zN3N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab967ae-cef5-4d39-a654-8d49b02b9ac2_558x652.heic 424w, https://substackcdn.com/image/fetch/$s_!zN3N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab967ae-cef5-4d39-a654-8d49b02b9ac2_558x652.heic 848w, https://substackcdn.com/image/fetch/$s_!zN3N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab967ae-cef5-4d39-a654-8d49b02b9ac2_558x652.heic 1272w, https://substackcdn.com/image/fetch/$s_!zN3N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ab967ae-cef5-4d39-a654-8d49b02b9ac2_558x652.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We&#8217;ll generate the following transformation before and after our vision upgrade.</p><h3>Before our vision upgrade</h3><pre><code>{
  "items": [
    {
      "name": "PM 7-11 OHSA4-XR 1P",
      "amount": 460
    },
    {
      "name": "at",
      "amount": 644
    },
    {
      "name": "#5 #",
      "amount": 356
    }
  ],
  "total": 1000,
  "currencyCode": "JPY"
}</code></pre><h3>After our vision upgrade</h3><pre><code>{
  "items": [
    {
      "name": "Nissin Cup Noodle Smoky Chili",
      "amount": 184
    },
    {
      "name": "PM Marlboro HS Smooth R 1P",
      "amount": 460
    }
  ],
  "total": 644,
  "currencyCode": "JPY"
}</code></pre><p></p><h3>If you&#8217;d like to try out bem, schedule a demo with us below</h3><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://calendly.com/antonio-bem/intro-to-bem?month=2025-01&quot;,&quot;text&quot;:&quot;Schedule a Demo&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://calendly.com/antonio-bem/intro-to-bem?month=2025-01"><span>Schedule a Demo</span></a></p>]]></content:encoded></item></channel></rss>