<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Portal Integrators — Writing</title>
    <link>https://portalint.lovable.app/writing/</link>
    <description>Longer-form writing from Rosemarie Withee.</description>
    <language>en-us</language>
    <lastBuildDate>Thu, 30 Jul 2026 17:17:19 GMT</lastBuildDate>
    <atom:link href="https://portalint.lovable.app/writing/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Why Your LinkedIn Links Are Quietly Broken, and How to Catch It Before You Post</title>
      <link>https://portalint.lovable.app/writing/why-your-linkedin-links-are-quietly-broken/</link>
      <guid isPermaLink="true">https://portalint.lovable.app/writing/why-your-linkedin-links-are-quietly-broken/</guid>
      <pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate>
      <description>A perfect preview box is why broken LinkedIn links go unnoticed, by you and by the AI systems reading your content. Three ten-second checks that catch it first.</description>
      <content:encoded>&lt;p&gt;Click through an external link on a LinkedIn post recently and land on a blank page or an error screen? It happens far more often than people realize, and the person who posted it usually has no idea, because the post itself looks completely fine.&lt;/p&gt;
&lt;p&gt;That&amp;#39;s the actual problem. Not that links break. Links break everywhere, on every platform. The problem is that LinkedIn&amp;#39;s preview box gives you no signal when it happens, so a broken link can sit on your profile for months, quietly undermining every piece of content attached to it.&lt;/p&gt;
&lt;h2&gt;Why the preview lies to you&lt;/h2&gt;
&lt;p&gt;When you paste a URL into a post, LinkedIn builds a visual card: an image, a headline, a snippet of text. That card looks correct in your draft, so you assume the link behind it is correct too. Three things break that assumption, all invisibly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The redirect wrapper.&lt;/strong&gt; LinkedIn doesn&amp;#39;t publish your raw URL. It rewrites it through its own shortener, an lnkd.in link that redirects to your real destination. Most of the time this is invisible plumbing. When that redirect step hiccups, your link dies, and nothing in your draft ever showed you the wrapper existed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mobile rendering differences.&lt;/strong&gt; A link that opens cleanly in a desktop browser can fail inside LinkedIn&amp;#39;s own mobile app, often over a certificate mismatch the desktop version never encounters. You tested it once, on your laptop, and moved on. A meaningful share of your audience is opening it on a phone, inside the app, where you never tested it at all.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The cached preview.&lt;/strong&gt; LinkedIn can keep showing an old image and an old title long after the actual page has changed, moved, or gone down entirely. The card in your draft isn&amp;#39;t necessarily reading your site right now. It might be reading a cached memory of your site from whenever LinkedIn first crawled that URL.&lt;/p&gt;
&lt;p&gt;Put those three together and you get the actual failure mode: you rarely click your own links after publishing, the preview gives you no reason to, and the gap between what a link looks like and what it does can persist indefinitely.&lt;/p&gt;
&lt;h2&gt;The three checks, before you publish&lt;/h2&gt;
&lt;p&gt;None of this requires LinkedIn to fix anything, which is good, because there&amp;#39;s no indication they&amp;#39;re prioritizing it. Ten seconds of verification before you post is simply cheaper than a dead link reaching your network.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Run it through Post Inspector.&lt;/strong&gt; LinkedIn&amp;#39;s own free tool at linkedin.com/post-inspector forces a fresh crawl of your URL and clears whatever it had cached. Paste your link there before you paste it into a post.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Open it incognito, right after publishing.&lt;/strong&gt; Not in the browser tab where you&amp;#39;re already logged in and half-remembering what the page looked like last time. A fresh, logged-out window, ideally on a phone, is the closest thing to what a stranger in your network actually experiences when they click.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Write the full https:// explicitly.&lt;/strong&gt; Leaving off the protocol is the single most common cause of a link silently mangling into something that doesn&amp;#39;t resolve the way you intended.&lt;/p&gt;
&lt;h2&gt;It&amp;#39;s not just a human problem anymore&lt;/h2&gt;
&lt;p&gt;Everything earlier in this series has made one argument from different angles: the AI systems now answering questions about you and citing your content only know what they can actually reach. A dead link is that same failure in miniature, and it&amp;#39;s not limited to the human who clicks it.&lt;/p&gt;
&lt;p&gt;When an AI system crawls your posts, your articles, or your site, and follows a link that resolves to nothing, that source simply drops out of whatever picture it&amp;#39;s building of you. It doesn&amp;#39;t flag the miss or ask you about it, the same way a human reader doesn&amp;#39;t leave a comment saying your link is broken. It just quietly moves on to whichever source did resolve, and that source, not yours, shapes the answer.&lt;/p&gt;
&lt;p&gt;This is the same mechanism as an AI crawler hitting a JavaScript-rendered page and finding nothing to read, just at a smaller scale and a faster failure rate, because links rot constantly and nobody&amp;#39;s checking. A business with excellent, accurate content behind a broken link is functionally identical, to both a human and an AI, to a business with no content there at all.&lt;/p&gt;
&lt;h2&gt;The habit worth keeping&lt;/h2&gt;
&lt;p&gt;This is a small, boring discipline, and boring is exactly why it works, which is the theme running through this entire series. A ten-second check before you publish is the difference between a post that represents you accurately and one that quietly doesn&amp;#39;t, for as long as nobody, human or AI, happens to click it. Accuracy isn&amp;#39;t just what you say. It&amp;#39;s whether everything you point people toward still says it back.&lt;/p&gt;
</content:encoded>
    </item>
    <item>
      <title>Copilot Isn&#39;t Enough: Where Microsoft 365 AI Ends and Custom AI Begins</title>
      <link>https://portalint.lovable.app/writing/copilot-isnt-enough/</link>
      <guid isPermaLink="true">https://portalint.lovable.app/writing/copilot-isnt-enough/</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>Copilot solves real problems for operations teams. It also gets credit for problems it can&#39;t touch. A framework for when to stay, extend, or build.</description>
      <content:encoded>&lt;p&gt;I&amp;#39;ve written six books about Microsoft 365, so let me start by defending it: Copilot is not hype. If your team lives in Outlook, Teams, Word, and Excel, Copilot removes real friction from real work. Summarizing a thread you were cc&amp;#39;d into too late, drafting the first pass of a document, catching you up on a meeting you missed. That&amp;#39;s genuine value, and for a lot of knowledge work it&amp;#39;s plenty.&lt;/p&gt;
&lt;p&gt;The trouble starts when Copilot becomes the entire AI strategy. &amp;quot;We have Copilot&amp;quot; turns into the answer to every AI question, and problems that Copilot cannot touch get quietly filed under &amp;quot;solved.&amp;quot; I see this constantly in operations, because operations is exactly where Copilot&amp;#39;s boundaries live.&lt;/p&gt;
&lt;h2&gt;What Copilot is actually for&lt;/h2&gt;
&lt;p&gt;Copilot, meaning the assistant itself, as distinct from Copilot Studio agents, which I&amp;#39;ll come to, is an assistant for a person working inside a Microsoft document or conversation. That sentence sounds obvious, but every word of it is a boundary.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;A person.&lt;/em&gt; The assistant activates when a human asks it something. It doesn&amp;#39;t run on its own at 6 a.m. because a shipment file arrived.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Working inside.&lt;/em&gt; It assists the work happening in the app in front of you. It&amp;#39;s not watching your queue, your inbox, and your vendor portal simultaneously.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;A Microsoft document or conversation.&lt;/em&gt; Its native ground is your M365 content. The moment the work involves your ERP, your industry-specific system, a customer portal, or the database only your longest-tenured admin understands, you&amp;#39;re at the edge of the map.&lt;/p&gt;
&lt;p&gt;Take one concrete workflow and hold onto it, because we&amp;#39;ll carry it through the whole framework: a purchase order arrives by email, gets validated against the ERP, updates a tracking sheet, and triggers a notification in Teams. Keep asking where that PO fits as we go.&lt;/p&gt;
&lt;h2&gt;Stay: further than most teams have gone&lt;/h2&gt;
&lt;p&gt;The first zone is the one that costs nothing extra, and it covers more ground than people expect. If the work is a person working in M365 content (writing, summarizing, searching your own documents, meeting recaps), stay put and get better at it. Most companies haven&amp;#39;t extracted half of what the license already offers, and the two highest-leverage moves aren&amp;#39;t features at all. Teach the team a handful of prompt patterns instead of a prompt library. And fix the content Copilot draws from, because a well-organized SharePoint is the difference between impressive answers and confident nonsense from the same product.&lt;/p&gt;
&lt;p&gt;Where does the PO workflow fit here? Partially. Copilot will happily summarize the email thread about a problem PO, or answer &amp;quot;what did we agree with this vendor last quarter&amp;quot; from your files. A person, present, working in Microsoft content. That&amp;#39;s real help at the edges of the workflow. It is not the workflow.&lt;/p&gt;
&lt;h2&gt;Extend: where most teams actually land&lt;/h2&gt;
&lt;p&gt;The second zone is the live decision for most operations teams, and it deserves more attention than it usually gets. When the workflow is mostly M365 work that needs a connection, a trigger, or a scoped agent, Microsoft&amp;#39;s extension layer is genuinely productive: Copilot Studio for building agents grounded in specific content, Power Automate for trigger-and-flow automation, connectors for reaching into other systems. This is where &amp;quot;it answers policy questions in the Teams channel&amp;quot; lives, and &amp;quot;when the form is submitted, route it with a summary attached,&amp;quot; and the scheduled report that drafts itself.&lt;/p&gt;
&lt;p&gt;The simple version of the PO workflow can genuinely live here: a flow watches the inbox, an AI step extracts the fields, the tracking sheet updates, Teams gets notified. If your version is that clean, extend and be done. The zone is right when the process is simple, the volume is moderate, and you want to stay inside the licensing and governance you already have.&lt;/p&gt;
&lt;p&gt;Its limit is complexity, and the limit announces itself. Exceptions accumulate, the flow chart stops fitting on one screen, and every &amp;quot;except when&amp;quot; adds a branch someone has to maintain. Past that point, extension projects start costing custom-app money while delivering flowchart-tool flexibility. When the PO validation logic has real rules in it (tolerance thresholds, vendor-specific handling, escalation conditions), you&amp;#39;ve hit the ceiling.&lt;/p&gt;
&lt;h2&gt;Build: when the workflow is the application&lt;/h2&gt;
&lt;p&gt;The third zone is for workflows that cross systems as their whole job, run on your own structured data, or embed decision logic you need to control and audit. The full PO workflow, with validation rules that must behave identically on Friday afternoon and Monday morning, is an application. That&amp;#39;s not a Copilot limitation to file a complaint about; consistency and auditability are application properties, and no assistant licensing changes that.&lt;/p&gt;
&lt;p&gt;What has changed is the price of admission. Building a focused operations app used to mean a six-figure project, which is why these workflows stayed manual for a decade. It doesn&amp;#39;t anymore: a small team ships this class of application in weeks now, using a pipeline I&amp;#39;ve written up separately, and the leaders still making the stay-or-build call with 2019 prices in their heads are leaving the most valuable workflows unfixed.&lt;/p&gt;
&lt;h2&gt;The test I give clients&lt;/h2&gt;
&lt;p&gt;If you&amp;#39;re unsure which zone a problem lives in, ask: &lt;strong&gt;could one person do this task entirely inside Microsoft apps, and is a human present every time it happens?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yes to both: stay, and get better at it. Yes to the first, no to the second: extend, and watch the complexity ceiling. No to the first: you&amp;#39;re in build territory, and no amount of Copilot licensing will change that. Naming that boundary honestly is how you stop paying assistant prices for application problems, and application prices for assistant problems.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Where does your version of the PO workflow sit: stay, extend, or build? If you can&amp;#39;t tell, that&amp;#39;s usually a one-conversation answer. &lt;a href=&quot;/&quot;&gt;Ask me&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content:encoded>
    </item>
    <item>
      <title>Five AI Use Cases Ops Teams Can Ship This Quarter</title>
      <link>https://portalint.lovable.app/writing/five-ai-use-cases-ops-teams-can-ship-this-quarter/</link>
      <guid isPermaLink="true">https://portalint.lovable.app/writing/five-ai-use-cases-ops-teams-can-ship-this-quarter/</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>Unglamorous, high-frequency, genuinely shippable. Five operations workflows where AI works today, with what each replaces, what it needs, and the effort in weeks.</description>
      <content:encoded>&lt;p&gt;The AI use cases that make keynotes are the wrong ones to start with. The right ones are boring: high-frequency, pattern-shaped work that eats hours every single week and that nobody will miss doing by hand. Here are five that recur most reliably across operations teams, with honest notes on what each replaces, what it needs from you, and the effort in weeks.&lt;/p&gt;
&lt;p&gt;The rule that generates the list matters more than the list. Every use case here has the same anatomy: unstructured stuff arrives (emails, documents, transcripts), a human currently reads it and turns it into structured action, and the pattern repeats constantly. That reading-and-structuring step is what current AI does well. Anywhere you find that anatomy in your operation, you&amp;#39;ve found a candidate, including ones I haven&amp;#39;t listed.&lt;/p&gt;
&lt;h2&gt;1. Document intake&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What it replaces:&lt;/strong&gt; a person opening every incoming PO, invoice, work order, or application; reading it; and retyping its contents into a system or spreadsheet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; documents arrive (email inbox, upload, folder), AI extracts the fields you care about into structured records, and anything below a confidence threshold routes to a human for review instead of guessing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What it needs from you:&lt;/strong&gt; twenty or thirty representative sample documents, including the ugly ones, and a written list of the fields that matter. The human-review lane is not optional; it&amp;#39;s what makes the system trustworthy on day one instead of month six.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Effort:&lt;/strong&gt; 3 to 5 weeks. The extraction works out of the box with today&amp;#39;s models; the weeks go to the review workflow and wiring the output into wherever the data goes.&lt;/p&gt;
&lt;h2&gt;2. Status report assembly&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What it replaces:&lt;/strong&gt; the person, often a senior person, who spends a chunk of every Friday pulling numbers from three systems and narrating them into the weekly update.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; the report generates itself on schedule from live data, with AI writing the narrative summary: what changed, what&amp;#39;s off-plan, what needs a decision. A human reviews and sends. The review step stays, the assembly disappears.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What it needs from you:&lt;/strong&gt; access to the source data and, crucially, three or four examples of past reports you considered &lt;em&gt;good&lt;/em&gt;. The AI&amp;#39;s narrative is only as sharp as the examples that define it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Effort:&lt;/strong&gt; 1 to 2 weeks if your data is queryable. The hard part is usually data access, not AI. The fastest win on this list.&lt;/p&gt;
&lt;h2&gt;3. Meeting-to-task capture&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What it replaces:&lt;/strong&gt; decisions and action items evaporating between the meeting and everyone&amp;#39;s task lists, and the follow-up messages asking who owned what.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; transcripts (Teams already produces them) run through an extraction pass that pulls decisions, owners, and deadlines, then creates the tasks in your actual tracker. Not a summary document nobody opens. Actual assigned tasks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What it needs from you:&lt;/strong&gt; transcription turned on, a task system with an API, and a light human confirm step so mis-attributed items get caught.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Effort:&lt;/strong&gt; 2 to 3 weeks. The extraction is well within current model capability; the integration into your tracker is the bulk of the build.&lt;/p&gt;
&lt;h2&gt;4. Vendor email triage&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What it replaces:&lt;/strong&gt; a shared inbox where confirmations, delays, price changes, and disputes all look identical until a human opens each one, and where the urgent ones wait behind the routine ones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; each incoming message gets classified (routine / needs action / urgent), key facts get extracted (order number, new date, amount), routine confirmations auto-file against their orders, and the genuinely urgent items surface immediately with the relevant history attached.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What it needs from you:&lt;/strong&gt; a few hundred historical emails to define the categories, and clear rules about what the system may do alone (file a confirmation) versus flag (anything involving money or commitments).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Effort:&lt;/strong&gt; 4 to 6 weeks. Classification is easy; the trust rules and the order-matching are where the design thinking goes. This one also compounds: every extracted fact enriches your vendor history.&lt;/p&gt;
&lt;h2&gt;5. SOP and policy Q&amp;amp;A&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What it replaces:&lt;/strong&gt; the walk across the office to ask the one person who knows. Every operation has a handful of people who serve as the search engine for how things are done, and their interruption load is a real capacity cost, plus a genuine risk when they&amp;#39;re out or leave.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt; your SOPs, policies, and process docs become a searchable knowledge base the team can question in plain language, with every answer citing the source document so people can verify rather than trust blindly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What it needs from you:&lt;/strong&gt; documentation that&amp;#39;s reasonably current. This project has a way of exposing that it isn&amp;#39;t, which is itself useful. You&amp;#39;ll also want a feedback loop for flagging wrong or outdated answers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Effort:&lt;/strong&gt; 2 to 4 weeks, including content cleanup. The standard patterns for this are mature.&lt;/p&gt;
&lt;p&gt;One caveat on the fifth: if your documents already live in SharePoint, check whether this is Copilot territory before building anything custom. The &lt;a href=&quot;/writing/copilot-isnt-enough/&quot;&gt;stay, extend, or build question&lt;/a&gt; applies, and &amp;quot;stay&amp;quot; is sometimes the honest answer.&lt;/p&gt;
&lt;h2&gt;The point of the list&lt;/h2&gt;
&lt;p&gt;The list was never really the point; the picking discipline is. Don&amp;#39;t pick the most valuable use case. Pick the most &lt;em&gt;provable&lt;/em&gt;: a workflow with an owner who wants it, a baseline number you can capture this week (hours spent, cycle time, backlog size), and a blast radius small enough that a rough first version embarrasses nobody. Then put a decision date on the calendar the day you start, four to six weeks out to match the effort column, and compare against the baseline when it arrives.&lt;/p&gt;
&lt;p&gt;One from this list, done completely, beats all five started. Which one is hiding in your operation? And if you&amp;#39;d rather try one than build one, a few of these already run as working apps on the main site.&lt;/p&gt;
</content:encoded>
    </item>
    <item>
      <title>How I Ship AI Apps: My Lovable → Claude Code → Supabase Pipeline</title>
      <link>https://portalint.lovable.app/writing/how-i-ship-ai-apps/</link>
      <guid isPermaLink="true">https://portalint.lovable.app/writing/how-i-ship-ai-apps/</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>The actual stack and workflow I use to take an AI product from idea to production. What each stage is for, where the handoffs happen, and what breaks.</description>
      <content:encoded>&lt;p&gt;People ask how a one-person shop ships working AI products alongside consulting work. The honest answer is a pipeline with three stages and very clear rules about what each stage is allowed to do. Here it is, breaks first where they belong, because the breaks are why you can trust the rest.&lt;/p&gt;
&lt;h2&gt;The stack in one paragraph&lt;/h2&gt;
&lt;p&gt;Lovable builds the first version of the product: UI, pages, flows, the thing you can click. Claude Code handles everything after that: refactoring, build tooling, real features, anything where I need to see every changed line. Supabase sits underneath the whole time, providing the database, auth, and Edge Functions, which is where the AI itself lives via the Claude API. Deployment stays simple: the repo is the source of truth, and pushes go live.&lt;/p&gt;
&lt;p&gt;Each tool is excellent at one phase and mediocre at the others. The pipeline works because I stop using each tool at the point where it stops being the best option, and that discipline matters more than the tool choices themselves.&lt;/p&gt;
&lt;h2&gt;Stage one: Lovable, for product shape&lt;/h2&gt;
&lt;h3&gt;Where it breaks&lt;/h3&gt;
&lt;p&gt;Ambitious prompts. Ask Lovable for a visual tweak, get a visual tweak. Ask it for a cross-cutting change like restructuring state or modifying how data flows, and you&amp;#39;re gambling. Version history makes the gamble survivable (note your version number before every risky prompt), but past a certain project size I stop gambling entirely and move to stage two.&lt;/p&gt;
&lt;h3&gt;What it&amp;#39;s for anyway&lt;/h3&gt;
&lt;p&gt;Lovable&amp;#39;s superpower is speed to &lt;em&gt;something real&lt;/em&gt;. In a day I can have an app with actual screens, actual navigation, and a Supabase backend wired in, which means in a day I can discover that my tile layout is wrong, the flow has a missing step, or the feature I was excited about is actually confusing. Finding that out in day one instead of week four is the entire value.&lt;/p&gt;
&lt;p&gt;The rule I hold myself to: Lovable is for shaping the product, not engineering it. I prompt in product language (what a screen shows, what happens when the user does X) and I resist the urge to prompt architectural changes. Lovable will happily attempt them, and that&amp;#39;s exactly when it rewrites things you didn&amp;#39;t ask it to touch.&lt;/p&gt;
&lt;h2&gt;Stage two: Claude Code, for engineering&lt;/h2&gt;
&lt;h3&gt;Where it breaks&lt;/h3&gt;
&lt;p&gt;Context. On a bigger codebase, Claude Code can make a locally sensible change that violates a project-wide convention it didn&amp;#39;t have in view. The other failure mode is mine, not the tool&amp;#39;s: accepting a diff I skimmed instead of read.&lt;/p&gt;
&lt;h3&gt;What holds it together&lt;/h3&gt;
&lt;p&gt;Once the product shape is right, I connect the Lovable project to GitHub and shift my center of gravity to Claude Code. Same repo, different relationship: now every change is a diff I review before it ships. This is where the unglamorous work happens. Cleaning up the generated code (Lovable output is fine but repetitive; components want consolidating), adding things Lovable is weak at (build scripts, static generation, testing, performance passes), and building the features with real logic in them.&lt;/p&gt;
&lt;p&gt;Two habits do most of the heavy lifting, and both exist because of the breaks above. First, a maintained CLAUDE.md in every repo listing conventions, architecture decisions, and things Claude Code should never touch. I keep it standardized across projects so every session starts oriented instead of exploring; it&amp;#39;s the direct answer to the context problem, and it earns its keep every single session. Second, plan-first prompting: I ask Claude Code to inspect the code and confirm its approach before writing anything. That one habit prevents most of the &amp;quot;technically what I asked for, not what I meant&amp;quot; category of rework.&lt;/p&gt;
&lt;h2&gt;The layer underneath: Supabase, and where the AI lives&lt;/h2&gt;
&lt;h3&gt;Where it breaks&lt;/h3&gt;
&lt;p&gt;Timeouts and streaming. Long AI generations bump against Edge Function limits, so anything heavy either streams to the client or gets broken into smaller calls. I learned both versions of that lesson in production.&lt;/p&gt;
&lt;h3&gt;The pattern that works&lt;/h3&gt;
&lt;p&gt;Supabase is the constant across both stages. Postgres, auth, row-level security, storage. But the piece worth dwelling on is Edge Functions, because that&amp;#39;s where the actual AI runs.&lt;/p&gt;
&lt;p&gt;Every AI feature in my products follows the same pattern: the client calls an Edge Function, the Edge Function calls the Claude API, shapes the response, and returns it. The API key lives server-side, never in the browser. The prompt lives server-side too, which matters more than people realize: it means I can improve the AI&amp;#39;s behavior, tighten the output format, or handle a new edge case by redeploying one function, without touching the app at all.&lt;/p&gt;
&lt;p&gt;Two hard-won details. Force JSON discipline: when a feature needs structured output, the system prompt demands raw JSON with no preamble, and the function still strips markdown fences and parses defensively, because the one time in fifty it wraps the response will otherwise be a production bug. And log the failures: every malformed response gets captured, because those logs are exactly the examples you need to fix the prompt.&lt;/p&gt;
&lt;h2&gt;What I wouldn&amp;#39;t run through this pipeline&lt;/h2&gt;
&lt;p&gt;Honesty requires a boundary, so here&amp;#39;s mine. This pipeline is built for focused business applications: an intake processor, a triage system, a tracker with AI features behind a clean seam. I wouldn&amp;#39;t run it for real-time collaborative editing, native mobile, or anything where the data model belongs to a system I don&amp;#39;t control and can&amp;#39;t cleanly mirror. Those aren&amp;#39;t &amp;quot;prompt harder&amp;quot; problems; they&amp;#39;re architecture problems, and pretending a fast pipeline solves architecture is how fast pipelines get bad reputations.&lt;/p&gt;
&lt;h2&gt;Why this works for a small shop&lt;/h2&gt;
&lt;p&gt;The pattern underneath the pipeline: use the fast tool until precision matters, then switch to the precise tool and don&amp;#39;t look back. Lovable gets me a real product in days. Claude Code makes it maintainable. Supabase means I never build auth or infrastructure from scratch. And the AI lives behind one clean seam, the Edge Functions, so it can improve independently of everything else.&lt;/p&gt;
&lt;p&gt;None of this requires a team. It requires knowing what each stage is for, and the discipline to move on when you&amp;#39;ve reached its edge.&lt;/p&gt;
&lt;p&gt;The kind of thing this pipeline actually ships is boring on purpose. Five real examples are here.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;If you&amp;#39;re building on a similar stack, I compare notes gladly; the contact form on the main site reaches me.&lt;/em&gt;&lt;/p&gt;
</content:encoded>
    </item>
    <item>
      <title>The Real Cost of an AI Pilot That Never Ships</title>
      <link>https://portalint.lovable.app/writing/real-cost-of-an-ai-pilot-that-never-ships/</link>
      <guid isPermaLink="true">https://portalint.lovable.app/writing/real-cost-of-an-ai-pilot-that-never-ships/</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>The license fee is the smallest number in a failed AI pilot. The real math: staff hours, opportunity cost, and the credibility you don&#39;t get back.</description>
      <content:encoded>&lt;p&gt;When an AI pilot fizzles, the accounting is usually one line: we spent $X on licenses, it didn&amp;#39;t pan out, lesson learned. Cheap tuition, everyone moves on.&lt;/p&gt;
&lt;p&gt;That accounting is wrong by roughly an order of magnitude. The license fee is the smallest and least important number in a failed pilot, and because it&amp;#39;s the only number anyone writes down, organizations keep concluding that failed pilots are cheap. They aren&amp;#39;t.&lt;/p&gt;
&lt;p&gt;What follows is an illustrative tally, not survey data. The assumptions: fifteen participants plus a project lead, a ten-week pilot, a blended $60 an hour. Swap in your own numbers; the shape survives.&lt;/p&gt;
&lt;h2&gt;The visible number&lt;/h2&gt;
&lt;p&gt;Say a mid-sized operations team pilots an AI tool: fifteen seats for three months at $40 a seat. &lt;strong&gt;$1,800.&lt;/strong&gt; That&amp;#39;s the number in the postmortem, and if it were the real cost, running loose pilots would be a perfectly rational strategy. Spray, pray, and shrug.&lt;/p&gt;
&lt;p&gt;Now the numbers that don&amp;#39;t make the postmortem.&lt;/p&gt;
&lt;h2&gt;The invisible numbers&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Staff hours.&lt;/strong&gt; A pilot consumes people even when it&amp;#39;s failing. Especially when it&amp;#39;s failing, because ambiguity generates meetings. Vendor evaluation and demos, a kickoff, training sessions, the weekly check-in that runs for ten weeks, the IT and security review, the manager quietly nudging people to &amp;quot;give the tool a chance,&amp;quot; and the individual hours spent fumbling with a workflow that has both an old path and a new path. Tally it honestly for fifteen participants plus a project lead and you land somewhere between 250 and 400 person-hours. At the blended $60, that&amp;#39;s &lt;strong&gt;$15,000 to $24,000&lt;/strong&gt;, which with the licenses puts the true cost of the pilot in the neighborhood of &lt;strong&gt;twenty thousand dollars, not eighteen hundred&lt;/strong&gt;. Paid, worse, in the most constrained currency an operations team has: its people&amp;#39;s attention.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Opportunity cost.&lt;/strong&gt; These are the same hours as above, viewed from the other side: not what they cost, but what they could have produced instead. Count them once in your total; feel them twice. Pointed at a well-chosen workflow, three months of that attention is enough to fully automate one intake process or one reporting cycle. If the workflow you &lt;em&gt;didn&amp;#39;t&lt;/em&gt; fix wastes ten hours a week, the stall cost you &lt;strong&gt;roughly 130 recovered hours per quarter, every quarter, going forward&lt;/strong&gt;. That number compounds while the license fee doesn&amp;#39;t.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The credibility spend.&lt;/strong&gt; This is the expensive one, and it never appears in any ledger. A failed pilot teaches your team a lesson, and the lesson is: &lt;em&gt;AI initiatives here don&amp;#39;t go anywhere.&lt;/em&gt; That lesson has a half-life measured in years. The next time someone proposes an AI project, the fifteen people from the last pilot are the skeptics in the room, reasonably, based on evidence you handed them. Attempt two now needs a champion with more political capital, a better tool, and a cleaner rollout just to reach the level of goodwill attempt one got for free. I have watched organizations still paying interest on a botched rollout five years later. I saw it repeatedly in the Microsoft 365 era, and the AI version is the same debt at a higher rate, because &amp;quot;we tried AI&amp;quot; generalizes across every AI proposal that follows.&lt;/p&gt;
&lt;h2&gt;Why this changes the strategy, not just the accounting&lt;/h2&gt;
&lt;p&gt;If failed pilots cost $1,800, the right strategy is to run many and see what sticks. If they cost twenty-some thousand dollars and a multi-year credibility debt, the right strategy inverts: run &lt;em&gt;fewer&lt;/em&gt; pilots, choose them &lt;em&gt;carefully&lt;/em&gt;, and design each one so it cannot end ambiguously.&lt;/p&gt;
&lt;p&gt;Ambiguity is the actual killer. Most pilots don&amp;#39;t fail loudly; they trail off, undecided, which means the organization pays full cost and receives no verdict. Even a clean kill would have been a win by comparison: a real answer, delivered before the invisible costs compound.&lt;/p&gt;
&lt;h2&gt;The question that protects the budget&lt;/h2&gt;
&lt;p&gt;Before your next pilot starts, ask the sponsor one question: &lt;em&gt;what happens on day 31?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If the answer is specific (&amp;quot;we compare against the baseline and the ops manager decides&amp;quot;), you&amp;#39;re about to spend money on an experiment, which is fine. If the answer is &amp;quot;we&amp;#39;ll see how it&amp;#39;s going,&amp;quot; you&amp;#39;re about to spend twenty-odd thousand dollars and a year of credibility to learn nothing, and the license fee will take the blame.&lt;/p&gt;
&lt;p&gt;Structuring pilots so they can&amp;#39;t end that way is usually what my first engagement with a client is. If yours starts this quarter, the cheap time to talk is before it kicks off.&lt;/p&gt;
&lt;p&gt;The three questions that keep you out of this math in the first place are their own post.&lt;/p&gt;
</content:encoded>
    </item>
    <item>
      <title>You Bought a Tool When You Needed a Workflow Change</title>
      <link>https://portalint.lovable.app/writing/what-operations-teams-get-wrong-about-ai-adoption/</link>
      <guid isPermaLink="true">https://portalint.lovable.app/writing/what-operations-teams-get-wrong-about-ai-adoption/</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>Most AI pilots don&#39;t fail on technology. They fail because the team bought a tool when the job was changing a workflow. Three questions fix that.</description>
      <content:encoded>&lt;p&gt;The version I&amp;#39;ve watched most often runs roughly like this. Someone senior gets excited about AI. A tool gets purchased, usually a good one. A pilot kicks off with real enthusiasm. A couple of months later, a handful of people are using it occasionally, nobody can say whether it&amp;#39;s working, and by the next budget cycle it&amp;#39;s quietly gone. The postmortem, if there is one, concludes that &amp;quot;the team wasn&amp;#39;t ready&amp;quot; or &amp;quot;the tool wasn&amp;#39;t quite right.&amp;quot;&lt;/p&gt;
&lt;p&gt;Neither is usually true. The tool was fine. The team was fine. What failed was the thing nobody owned: the workflow.&lt;/p&gt;
&lt;p&gt;The fastest way I know to keep your organization out of that story is three questions, asked in writing, before you evaluate a single vendor. They take an afternoon and they&amp;#39;ll save you a quarter. Here they are; the rest of this piece is why each one exists.&lt;/p&gt;
&lt;h2&gt;The three questions&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. What will we stop doing when it works?&lt;/strong&gt; This is the question that kills a bad purchase in ten seconds, and it&amp;#39;s the only one you can answer without any preparation. If the answer is &amp;quot;nothing, people will just have the tool available,&amp;quot; stop here. You&amp;#39;re about to buy shelfware. The honest answers sound like: we stop hand-building the Monday report, we stop routing every request through the one person who knows, we stop the Thursday sync because status is now visible. If nothing stops, nothing changed, and nothing changed is exactly what your last stalled initiative delivered.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Which specific workflow, and what does it cost us today?&lt;/strong&gt; Not &amp;quot;customer service.&amp;quot; The &lt;em&gt;daily triage of vendor emails&lt;/em&gt;, the &lt;em&gt;weekly status report assembly&lt;/em&gt;, the &lt;em&gt;intake of new work orders&lt;/em&gt;. Pick something that happens frequently, follows a rough pattern, and annoys the people who do it. Then put a number on it: hours per week, or days of cycle time. That number is your baseline, and it&amp;#39;s the only thing that will tell you later whether this worked.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Who owns the change, and can they retire the old way?&lt;/strong&gt; One name. If that person can introduce the new step but can&amp;#39;t remove the old one, they&amp;#39;re set up to fail, because the pilot will run as a parallel option and parallel options lose. Give the owner both halves of the job.&lt;/p&gt;
&lt;p&gt;Notice that none of these questions is about AI. That&amp;#39;s the point, and it&amp;#39;s why they work.&lt;/p&gt;
&lt;h2&gt;Why the first question exists: the tool-first mistake&lt;/h2&gt;
&lt;p&gt;The default way organizations approach AI is tool-first. We should be using AI, so which tool should we buy? It feels like progress because there&amp;#39;s a decision to make, a vendor to evaluate, a line item to approve. Procurement is a familiar motion, so that&amp;#39;s the motion teams run.&lt;/p&gt;
&lt;p&gt;But AI doesn&amp;#39;t create value at the moment of purchase. It creates value at the moment a specific piece of work happens differently: an intake that used to take twenty minutes takes two, a report that someone assembled by hand assembles itself, a question that used to require finding the one person who knows now gets answered from the documents you already have. That&amp;#39;s a workflow change, and workflow changes are a different project than tool purchases. They have an owner, a before-and-after, a specific group of people whose Tuesday looks different. When you start tool-first, you skip all of that and hope it self-organizes. It almost never does.&lt;/p&gt;
&lt;p&gt;I know this pattern from the inside because I watched the previous version of it for a decade. Companies bought SharePoint and Teams licenses for everyone, announced them, and then wondered why people were still emailing attachments two years later. I built a career, and wrote six books, inside that gap between license and adoption. The licenses were never the adoption. The adoption was somebody redesigning how a document actually moved through the company, and that part rarely had a name attached to it. The AI version of this story is the same story with a larger invoice, which is why the first question is about stopping something: it forces the workflow change into view before the purchase, instead of hoping it appears after.&lt;/p&gt;
&lt;h2&gt;Why the other two exist: how pilots actually stall&lt;/h2&gt;
&lt;p&gt;When an AI pilot dies, it usually dies of one of three deficiencies, and often all three at once. The questions are their antidotes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No owner.&lt;/strong&gt; Not a sponsor; sponsors approve budgets. An owner is the person whose job it is to make one workflow work differently, who has the authority to change the process and the obligation to report whether it&amp;#39;s better. If you can&amp;#39;t name this person, you don&amp;#39;t have a pilot. You have a subscription. Question three exists to force the name.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No changed process.&lt;/strong&gt; The tool gets introduced &lt;em&gt;alongside&lt;/em&gt; the existing way of working instead of &lt;em&gt;replacing&lt;/em&gt; a step in it. Using the AI is optional, the old path still exists, and under deadline pressure everyone takes the path they know. Optional new tools lose to mandatory old habits every single time. A real pilot retires something (a form, a manual step, a status meeting) so the new way is the way. Question one exists to write the retirement list before the money moves.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wrong measurement.&lt;/strong&gt; Teams measure novelty: logins, messages sent to the chatbot, &amp;quot;engagement.&amp;quot; Those numbers always look decent in week two and mean nothing. The only measurements that matter are operational. Hours recovered, cycle time shortened, error rate reduced, backlog cleared. If the pilot wasn&amp;#39;t set up to capture a before-number, no after-number can save it, and the renewal conversation becomes a vibes debate. Question two exists so the before-number is on paper while the old way still exists to count.&lt;/p&gt;
&lt;h2&gt;Start smaller than feels impressive&lt;/h2&gt;
&lt;p&gt;The instinct, especially with executive attention on AI, is to launch something visible: a big platform, a company-wide rollout, a transformation initiative with a deck. Resist it. The big ones are the ones I&amp;#39;ve watched fail, and they fail precisely because they multiply the three deficiencies across many workflows at once.&lt;/p&gt;
&lt;p&gt;The alternative is almost embarrassingly modest: one workflow, one owner, one baseline number, thirty days, and a decision at the end. Expand it, fix it, or kill it. Shipped small things compound. A team that has genuinely automated its report assembly believes the next project is possible, and now you&amp;#39;re building on trust instead of spending it.&lt;/p&gt;
&lt;p&gt;That&amp;#39;s not a less ambitious path to AI adoption. It&amp;#39;s the only one I&amp;#39;ve seen actually arrive.&lt;/p&gt;
&lt;p&gt;If you want the full accounting of what skipping this costs, in actual dollars and actual hours, I&amp;#39;ve run that math separately in The Real Cost of an AI Pilot That Never Ships.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;I help operations teams answer the three questions and make the change stick. First conversation is a working session, not a pitch. &lt;a href=&quot;/&quot;&gt;Get in touch&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content:encoded>
    </item>
    <item>
      <title>Why I&#39;m writing here</title>
      <link>https://portalint.lovable.app/writing/why-im-writing-here/</link>
      <guid isPermaLink="true">https://portalint.lovable.app/writing/why-im-writing-here/</guid>
      <pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate>
      <description>What this section is for and what to expect from it.</description>
      <content:encoded>&lt;p&gt;I&amp;#39;ve spent thirteen years helping operations teams get real work out of their software. First Microsoft 365, now AI. Along the way I&amp;#39;ve written six books for Wiley, sat through more failed pilots than I can count, and started building AI products of my own.&lt;/p&gt;
&lt;p&gt;This section is where the longer-form thinking goes. Three things, mostly:&lt;/p&gt;
&lt;p&gt;What actually works in AI adoption. Not the demo, but the Tuesday-afternoon reality: who owns the change, what the team does differently, why most pilots quietly die.&lt;/p&gt;
&lt;p&gt;Where Microsoft 365 ends and custom AI begins. Copilot solves real problems. It also gets credit for problems it can&amp;#39;t touch. I&amp;#39;ll draw that line honestly, because I&amp;#39;ve worked both sides of it.&lt;/p&gt;
&lt;p&gt;Build notes. I ship products with a small, fast stack, and I&amp;#39;ll write about what breaks, what surprises me, and what I&amp;#39;d do differently. No polish, just the notebook.&lt;/p&gt;
&lt;p&gt;No schedule promises here beyond this one: nothing gets published unless I&amp;#39;d want to read it twice.&lt;/p&gt;
&lt;p&gt;If something lands or you&amp;#39;re wrestling with a version of these problems in your own operation, reach out through the main site. I read everything.&lt;/p&gt;
</content:encoded>
    </item>
  </channel>
</rss>