<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/vendor/feed/atom.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
                        <id>https://phptoptens.com/authors/harris-raftopoulos/feed</id>
                                <link href="https://phptoptens.com/authors/harris-raftopoulos/feed" rel="self"></link>
                                <title><![CDATA[Artisan Weekly — Author Feed]]></title>
                    
                                <subtitle>Featured links for a given author across Artisan Weekly editions.</subtitle>
                                                    <updated>2026-10-08T14:23:47+01:00</updated>
                        <entry>
            <title><![CDATA[Decide with Jev: Three Questions in One Request with the Laravel AI SDK]]></title>
            <link rel="alternate" href="https://www.youtube.com/watch?v=3oJddn6sU9U" />
            <id>https://www.youtube.com/watch?v=3oJddn6sU9U</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[A single yes or no doesn't tell you much about a draft. In this episode of Decide with Jev, Harris from Laravel News asks Jev three questions about the same draft and still sends only one request.
]]>
            </summary>
                                    <updated>2026-10-08T14:23:47+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Stop Prompt Injection with a Local LLM Guard - Ship AI with Laravel EP11]]></title>
            <link rel="alternate" href="https://www.youtube.com/watch?v=tXsy6AJTiLU" />
            <id>https://www.youtube.com/watch?v=tXsy6AJTiLU</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Episode 11 of Ship AI with Laravel, a series over on Laravel News where Harris has built a full AI platform using Laravel 13 and the Laravel AI SDK. This is the series finale.

First he show you the problem. With the right messages, he socially engineers our own support agent into revealing its entire system prompt, its tools, and its internal instructions. Then he show how the order lookup tool will happily return another customer's data if it accepts any order ID. Both are real vulnerabilities that ship in AI apps every day.

Then he shows you how to fix them with four layers of defense.]]>
            </summary>
                                    <updated>2026-07-09T15:40:15+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Ship AI with Laravel: Test Your AI System with Zero API Calls]]></title>
            <link rel="alternate" href="https://laravel-news.com/ship-ai-with-laravel-test-your-ai-system-with-zero-api-calls" />
            <id>https://laravel-news.com/ship-ai-with-laravel-test-your-ai-system-with-zero-api-calls</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[In this episode we test the whole thing with Pest and zero API calls, using the SDK's faking system. It works exactly like faking mail, notifications, or queues in Laravel. You define the responses up front and assert that the right prompts went out.]]>
            </summary>
                                    <updated>2026-07-02T15:22:33+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[What Happens When OpenAI Goes Down at 2AM - Ship AI with Laravel EP9]]></title>
            <link rel="alternate" href="https://www.youtube.com/watch?v=39rkuXZEe6I" />
            <id>https://www.youtube.com/watch?v=39rkuXZEe6I</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[What happens if your AI Provider goes down at stupid o clock in the morning and your agent is currently locked to one provider. In this episode Harris looks to make your agent production ready with automatic provider failover, queued background jobs, and middleware for logging, rate limiting, and cost tracking. ]]>
            </summary>
                                    <updated>2026-06-25T11:46:01+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Aegis for Laravel: Scaffolding and Validation Helpers for Value Objects]]></title>
            <link rel="alternate" href="https://laravel-news.com/aegis-for-laravel-scaffolding-and-validation-helpers-for-value-objects" />
            <id>https://laravel-news.com/aegis-for-laravel-scaffolding-and-validation-helpers-for-value-objects</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Aegis for Laravel: Scaffolding and Validation Helpers for Value Objects]]>
            </summary>
                                    <updated>2026-05-28T16:11:43+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Build a Streaming AI Chat with Livewire and SSE - Ship AI with Laravel EP7]]></title>
            <link rel="alternate" href="https://www.youtube.com/watch?v=M-qvyFTx66s" />
            <id>https://www.youtube.com/watch?v=M-qvyFTx66s</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[This episode Harris builds a realtime Chat UI so the customers can chat and get real time word by word responses from the AI Agent, so they dont have to sit there and wait for it to string together its response before sending it back.]]>
            </summary>
                                    <updated>2026-05-21T15:32:43+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Ship AI with Laravel: Search Entire PDFs with Zero Search Logic]]></title>
            <link rel="alternate" href="https://laravel-news.com/ship-ai-with-laravel-search-entire-pdfs-with-zero-search-logic" />
            <id>https://laravel-news.com/ship-ai-with-laravel-search-entire-pdfs-with-zero-search-logic</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[It's time for the latest episode in the Ship AI with Laravel series that Harris has been putting together.

So far we've been shown how to build a basic AI Agent that helps answer customers question about an order and it has been enhanced each episode in this episode we go one step further with the vector store and upload documents that will help the agent search for responses to give to the user. A great example being questions about a damaged item]]>
            </summary>
                                    <updated>2026-05-06T16:36:01+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[I Asked the Agent Our Return Policy. It Found It. - Ship AI with Laravel EP5]]></title>
            <link rel="alternate" href="https://www.youtube.com/watch?v=YsoljfwizTI" />
            <id>https://www.youtube.com/watch?v=YsoljfwizTI</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Episode 5 in the Ship AI with Laravel Series by Harris Raftopoulos and Laravel News is up. In this episode Harris walks us how to give your AI Agent a knowledge base. Have you ever wondered what are embeddings, vectors watch on to find out!]]>
            </summary>
                                    <updated>2026-04-30T19:49:05+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA["Who Are You?" — Adding Memory to Your AI Agent - Ship AI with Laravel EP4]]></title>
            <link rel="alternate" href="https://www.youtube.com/watch?v=mZbyCIOFWsE" />
            <id>https://www.youtube.com/watch?v=mZbyCIOFWsE</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[In Episode 4 of Ship AI With Laravel Harris walks us through how to add memory to your agents conversation. Now your agent can not only answer a customers initial question but they can help answer follow up questions as well.

All this is possible thanks to the power of the Laravel AI SDK]]>
            </summary>
                                    <updated>2026-04-16T21:31:45+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Stop Your AI Agent from Guessing - Ship AI with Laravel EP3]]></title>
            <link rel="alternate" href="https://www.youtube.com/watch?v=O_OSZrarQlg" />
            <id>https://www.youtube.com/watch?v=O_OSZrarQlg</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[In the third episode of the series Harris talks us through how to allow his support agent access to tools to allow it to look up orders in the system and give the customer a much better feedback loop with real answers.]]>
            </summary>
                                    <updated>2026-04-09T15:15:00+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Ship AI with Laravel: Smart Ticket Triage with Structured Output]]></title>
            <link rel="alternate" href="https://www.youtube.com/watch?v=NTQgDJITaCg" />
            <id>https://www.youtube.com/watch?v=NTQgDJITaCg</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Episode 3 in the Ship AI with Laravel series Harris walks us through a ticket classifier for the support agent to help classify and assign tickets when the customers raise issues.]]>
            </summary>
                                    <updated>2026-04-02T15:43:50+01:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Ship AI with Laravel: Building Your First Agent with Laravel 13's AI SDK]]></title>
            <link rel="alternate" href="https://laravel-news.com/ship-ai-with-laravel-building-your-first-agent-with-laravel-13s-ai-sdk" />
            <id>https://laravel-news.com/ship-ai-with-laravel-building-your-first-agent-with-laravel-13s-ai-sdk</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Harris starts his new series based on the Laravel AI SDK, so if you're looking for an excuse to give it a go follow along with this series to understand all about the SDK and how it can be used]]>
            </summary>
                                    <updated>2026-03-26T21:21:38+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Why Your Livewire Dashboard Jumps (And How to Fix It) - Laravel In Practice EP18]]></title>
            <link rel="alternate" href="https://www.youtube.com/watch?v=jsIhdY1Wyp0" />
            <id>https://www.youtube.com/watch?v=jsIhdY1Wyp0</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[In his latest episode of Laravel in Practice Harris shows us how to fix those pesky page jumps you might have seen in your real time Livewire dashboards. ]]>
            </summary>
                                    <updated>2026-02-20T10:12:41+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Fuse for Laravel: A Circuit Breaker Package for Queue Jobs]]></title>
            <link rel="alternate" href="https://laravel-news.com/laravel-fuse-a-circuit-breaker-package-for-queue-jobs" />
            <id>https://laravel-news.com/laravel-fuse-a-circuit-breaker-package-for-queue-jobs</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Harris recently released his latest package Fuse. It's a Circuit breaker package for your queued jobs. 

Have you ever had an issue in your job where you might be using an external service and it goes down during the job, your queue works dont know, they keep making requests, they keep re-trying and waiting again. This could drastically slowdown and freeze your system. Fuse stops this through allowing you to set a configurable number of failures which once reached opens the circuit and stops the remaining jobs making those API calls.]]>
            </summary>
                                    <updated>2026-02-20T10:13:17+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Mastering Query Debugging in Laravel]]></title>
            <link rel="alternate" href="https://t.ly/RAVci" />
            <id>https://t.ly/RAVci</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Mastering Query Debugging in Laravel]]>
            </summary>
                                    <updated>2026-01-13T22:57:43+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Supercharging string input handling in Laravel with Stringable]]></title>
            <link rel="alternate" href="https://t.ly/6OGuW" />
            <id>https://t.ly/6OGuW</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Supercharging string input handling in Laravel with Stringable]]>
            </summary>
                                    <updated>2026-01-13T22:57:42+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Handling default values in Laravel Request using mergeIfMissing]]></title>
            <link rel="alternate" href="https://t.ly/y3njy" />
            <id>https://t.ly/y3njy</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Handling default values in Laravel Request using mergeIfMissing]]>
            </summary>
                                    <updated>2026-01-22T10:35:09+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Optimising Factory Data Creation with Laravel's recycle Method]]></title>
            <link rel="alternate" href="https://t.ly/_pjyd" />
            <id>https://t.ly/_pjyd</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Optimising Factory Data Creation with Laravel's recycle Method]]>
            </summary>
                                    <updated>2026-01-22T10:34:27+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Accessing Raw Model Data with Laravel's attributes ToArray Method]]></title>
            <link rel="alternate" href="https://t.ly/pVxta" />
            <id>https://t.ly/pVxta</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Accessing Raw Model Data with Laravel's attributes ToArray Method]]>
            </summary>
                                    <updated>2026-01-22T10:34:20+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Enhancing Data Processing with Laravel's transform() Method]]></title>
            <link rel="alternate" href="https://t.ly/TMrwd" />
            <id>https://t.ly/TMrwd</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Enhancing Data Processing with Laravel's transform() Method]]>
            </summary>
                                    <updated>2026-01-22T10:34:43+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Create Instant Social Media Summaries with Laravel, Livewire & AI]]></title>
            <link rel="alternate" href="https://t.ly/5wScl" />
            <id>https://t.ly/5wScl</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Create Instant Social Media Summaries with Laravel, Livewire & AI]]>
            </summary>
                                    <updated>2026-01-13T22:57:40+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Secure Your Laravel App with These Session Tricks!]]></title>
            <link rel="alternate" href="https://t.ly/04XAy" />
            <id>https://t.ly/04XAy</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Secure Your Laravel App with These Session Tricks!]]>
            </summary>
                                    <updated>2026-01-22T10:34:03+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Elegant Pipeline Cleanup with Laravel's finally Method]]></title>
            <link rel="alternate" href="https://t.ly/NB1U1" />
            <id>https://t.ly/NB1U1</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Elegant Pipeline Cleanup with Laravel's finally Method]]>
            </summary>
                                    <updated>2026-01-15T07:46:33+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Navigate URI Paths Elegantly with Laravel's New pathSegments() Method]]></title>
            <link rel="alternate" href="https://t.ly/1BWlc" />
            <id>https://t.ly/1BWlc</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Navigate URI Paths Elegantly with Laravel's New pathSegments() Method]]>
            </summary>
                                    <updated>2026-01-13T22:57:39+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Monitor HTTP Interactions with Laravel's New Http::record() Method]]></title>
            <link rel="alternate" href="https://t.ly/4OhlD" />
            <id>https://t.ly/4OhlD</id>
            <author>
                <name><![CDATA[Harris Raftopoulos]]></name>
                <email><![CDATA[hello@example.com]]></email>

            </author>
            <summary type="html">
                <![CDATA[Monitor HTTP Interactions with Laravel's New Http::record() Method]]>
            </summary>
                                    <updated>2026-01-13T22:57:39+00:00</updated>
        </entry>
    </feed>
