<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jayesh Paunikar</title>
    <description>The latest articles on DEV Community by Jayesh Paunikar (@jayesh_paunikar).</description>
    <link>https://dev.to/jayesh_paunikar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3831754%2Fd0e51307-0f60-4068-be9e-f3242a890303.jpg</url>
      <title>DEV Community: Jayesh Paunikar</title>
      <link>https://dev.to/jayesh_paunikar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jayesh_paunikar"/>
    <language>en</language>
    <item>
      <title>openai-php/laravel — Add AI Features to Your Laravel App</title>
      <dc:creator>Jayesh Paunikar</dc:creator>
      <pubDate>Thu, 26 Mar 2026 15:25:16 +0000</pubDate>
      <link>https://dev.to/jayesh_paunikar/openai-phplaravel-add-ai-features-to-your-laravel-app-ngb</link>
      <guid>https://dev.to/jayesh_paunikar/openai-phplaravel-add-ai-features-to-your-laravel-app-ngb</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbuyjp34e3mu8x9n1bkd.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbuyjp34e3mu8x9n1bkd.jpeg" alt="openai-php/laravel — Add AI Features to Your Laravel App" width="800" height="446"&gt;&lt;/a&gt;&lt;br&gt;
We have all been there recently. A client calls you up, completely energized. They just saw a flashy new ChatGPT feature online. Suddenly, they demand “AI” sprinkled all over their existing project. Figuring out the best way to handle this used to be a massive headache. You would wrestle with raw HTTP requests and confusing API docs.&lt;/p&gt;

&lt;p&gt;Luckily, the openai-php/laravel package changes the game entirely. It is the absolute best way to handle Laravel AI integration right now. In this post, we will look at exactly how to drop it into your codebase. We will build real features you can actually use immediately. We won’t just build a useless, generic chatbot.&lt;/p&gt;

&lt;p&gt;Grab a coffee. Open up your code editor. Let’s get your Laravel app talking directly to the future.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why AI Is No Longer Optional in Laravel Apps (2026)
&lt;/h2&gt;

&lt;p&gt;Let’s be brutally honest about web development right now. Users expect significantly smarter applications today. They absolutely refuse to read a massive wall of text. They want a crisp, accurate summary instantly. They hate waiting two full days for a standard support reply.&lt;/p&gt;

&lt;p&gt;If your application feels dumb, your competitors win easily. Adding an AI-powered Laravel app feature is not a gimmick. It is a strict, non-negotiable requirement for modern platforms. Freelance clients feel intense pressure to modernize their businesses. They pass that exact pressure right down to us developers. We must adapt our programming skillsets quickly.&lt;/p&gt;

&lt;p&gt;The good news? You do not need a machine learning degree. You just need a solid API client and basic PHP knowledge. We can build incredibly smart features with very little code.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Is the openai-php/laravel Package?
&lt;/h2&gt;

&lt;p&gt;So, what exactly is this specific tool? It is a super clean, community-maintained wrapper. It sits cleanly around the official OpenAI PHP client. You can view the source code directly at &lt;a href="https://github.com/openai-php/laravel" rel="noopener noreferrer"&gt;github.com/openai-php/laravel&lt;/a&gt;. Brilliant developers in our community actively maintain it.&lt;/p&gt;

&lt;p&gt;You could theoretically use Laravel’s native HTTP facade. I tried that painful route initially myself. It gets incredibly messy and complex fast. You have to manage custom headers manually every time. You must format massive JSON payloads perfectly. Catching weird API exceptions gets exhausting quickly.&lt;/p&gt;

&lt;p&gt;This specific ChatGPT Laravel package handles all that tedious boilerplate. It gives you a beautiful, fluent facade. It feels completely native to the modern Laravel ecosystem. It remains the undisputed winner for API communication.&lt;/p&gt;
&lt;h2&gt;
  
  
  Installing and Setting Up openai-php/laravel in Your Laravel Project
&lt;/h2&gt;

&lt;p&gt;Let’s get our hands dirty right now. Pulling this into your active project takes two minutes. First, fire up your local terminal window. Run the standard composer command below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require openai-php/laravel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once that download finishes, you must publish the configuration. This exposes the config file to your application directory. You can tweak the underlying client settings there later.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan vendor:publish --provider="OpenAI\Laravel\ServiceProvider"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a &lt;code&gt;config/openai.php&lt;/code&gt; file in your project. You don’t need to touch it much — all the important stuff goes in your &lt;code&gt;.env&lt;/code&gt; file, which is exactly how Laravel developers like it.&lt;/p&gt;

&lt;p&gt;Next, open up your project’s &lt;code&gt;.env&lt;/code&gt; file. You need to securely add your OPENAI_API_KEY. You grab a fresh key directly from platform.openai.com.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OPENAI_API_KEY=your-api-key-here
OPENAI_ORGANIZATION=your-org-id-here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is literally the entire setup process. Laravel’s incredible auto-discovery handles the rest automatically. You are ready to start making requests immediately.&lt;/p&gt;

&lt;p&gt;To get your API key, head to &lt;a href="https://platform.openai.com/login" rel="noopener noreferrer"&gt;platform.openai.com&lt;/a&gt;, sign in, go to API Keys in the left sidebar, and click Create new secret key. Give it a name like “Laravel App” so you remember what it’s for. Copy it immediately — OpenAI only shows it once.&lt;/p&gt;

&lt;p&gt;Paste it into your .env, run &lt;code&gt;php artisan config:clear&lt;/code&gt;, and you’re fully set up. No service provider registration, no manual binding — Laravel auto-discovers the package. That’s it. Genuinely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making Your First API Call to ChatGPT
&lt;/h2&gt;

&lt;p&gt;Now that we have everything installed, let’s test it. We will write a simple controller method today. We want to ensure everything connects properly to the server. We use the standard create method here.&lt;/p&gt;

&lt;p&gt;Let’s write some actual code. Generate a controller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan make:controller AiController
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open it up and add a simple test method:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

namespace App\Http\Controllers;

use OpenAI\Laravel\Facades\OpenAI;
use Illuminate\Http\Request;

class AiController extends Controller
{
    public function test()
    {
        // Send a chat message to the OpenAI API
        $result = OpenAI::chat()-&amp;gt;create([
            'model'    =&amp;gt; 'gpt-4o',         // Which AI model to use
            'messages' =&amp;gt; [
                [
                    'role'    =&amp;gt; 'user',     // 'user' = the person asking
                    'content' =&amp;gt; 'Explain Laravel in one sentence for a beginner.',
                ],
            ],
            'max_tokens' =&amp;gt; 100,            // Limit how long the response can be
        ]);

        // Extract the text from the response object
        $reply = $result-&amp;gt;choices[0]-&amp;gt;message-&amp;gt;content;

        return response()-&amp;gt;json(['reply' =&amp;gt; $reply]);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wire it up in routes/web.php:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use App\Http\Controllers\AiController;

Route::get('/ai-test', [AiController::class, 'test']);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visit &lt;code&gt;/ai-test&lt;/code&gt; in your browser. If everything is configured correctly, you’ll see a JSON response with ChatGPT’s answer. That little moment — seeing the AI response come back in your own Laravel app for the first time — is honestly pretty satisfying.&lt;/p&gt;

&lt;p&gt;A quick note on &lt;code&gt;choices[0]&lt;/code&gt;: OpenAI returns an array of possible responses. By default, you get one. You can request multiple with the n parameter, but for 99% of use cases, &lt;code&gt;choices[0]&lt;/code&gt; is all you need.&lt;/p&gt;

&lt;p&gt;Also notice the &lt;code&gt;max_tokens&lt;/code&gt; parameter. Always set it. We’ll talk more about this in the cost section, but it’s a good habit to start right now.&lt;/p&gt;

&lt;p&gt;See how we can use AI with ChatGPT in laravel project with practical examples on &lt;a href="https://codewithjayesh.com/openai-php-laravel-add-ai-features-to-your-laravel-app/" rel="noopener noreferrer"&gt;https://codewithjayesh.com/openai-php-laravel-add-ai-features-to-your-laravel-app/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>backend</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>Laravel Developers — You’re Probably Using Only 40% of the Framework</title>
      <dc:creator>Jayesh Paunikar</dc:creator>
      <pubDate>Thu, 26 Mar 2026 15:11:46 +0000</pubDate>
      <link>https://dev.to/jayesh_paunikar/laravel-developers-youre-probably-using-only-40-of-the-framework-1n5p</link>
      <guid>https://dev.to/jayesh_paunikar/laravel-developers-youre-probably-using-only-40-of-the-framework-1n5p</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;And the other 60% is where the real magic lives.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;2015, I was deep in a messy PHP project.&lt;/p&gt;

&lt;p&gt;Same database query in five different files. Bugs that kept coming back no matter how many times I fixed them. Every small change felt like I was touching something I shouldn’t. I was tired.&lt;/p&gt;

&lt;p&gt;A friend sent me a link with zero explanation. Just — “try this.”&lt;/p&gt;

&lt;p&gt;It was Laravel.&lt;/p&gt;

&lt;p&gt;I spent the whole weekend reading the docs. Clean routes. Eloquent that actually made sense. Migrations. I was completely hooked.&lt;/p&gt;

&lt;p&gt;For the next year I used the same things over and over — routes, controllers, models, Blade templates. I thought that was Laravel. I thought I had it figured out.&lt;/p&gt;

&lt;p&gt;I didn’t.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Laravel Developers — You’re Probably Using Only 40% of the Framework</title>
      <dc:creator>Jayesh Paunikar</dc:creator>
      <pubDate>Wed, 18 Mar 2026 16:37:04 +0000</pubDate>
      <link>https://dev.to/jayesh_paunikar/laravel-developers-youre-probably-using-only-40-of-the-framework-2cj8</link>
      <guid>https://dev.to/jayesh_paunikar/laravel-developers-youre-probably-using-only-40-of-the-framework-2cj8</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;And the other 60% is where the real magic lives.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;2015, I was deep in a messy PHP project.&lt;/p&gt;

&lt;p&gt;Same database query in five different files. Bugs that kept coming back no matter how many times I fixed them. Every small change felt like I was touching something I shouldn’t. I was tired.&lt;/p&gt;

&lt;p&gt;A friend sent me a link with zero explanation. Just — “try this.”&lt;/p&gt;

&lt;p&gt;It was Laravel.&lt;/p&gt;

&lt;p&gt;I spent the whole weekend reading the docs. Clean routes. Eloquent that actually made sense. Migrations. I was completely hooked.&lt;/p&gt;

&lt;p&gt;For the next year I used the same things over and over — routes, controllers, models, Blade templates. I thought that was Laravel. I thought I had it figured out.&lt;/p&gt;

&lt;p&gt;I didn’t.&lt;/p&gt;

&lt;h2&gt;
  
  
  Here’s the thing nobody tells you
&lt;/h2&gt;

&lt;p&gt;You can build working apps using just 40% of what Laravel offers. And because those things work fine, most developers never go looking for the rest.&lt;/p&gt;

&lt;p&gt;I get it. You have deadlines. The controller works. The query runs. Ship it and move on.&lt;/p&gt;

&lt;p&gt;But six months later you open that same file and wonder who wrote it. The controller is 300 lines. The same logic is copy-pasted in four places. A simple bug fix somehow broke two unrelated things.&lt;/p&gt;

&lt;p&gt;That’s not bad luck. That’s what happens when you only use the basics.&lt;/p&gt;

&lt;p&gt;Laravel already has the solutions baked in. You just have to know they exist. Let me show you two of them — and give you a peek at six more.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one that made a client think we upgraded the server
&lt;/h2&gt;

&lt;p&gt;I once inherited a project where the dashboard took almost 2 seconds to load. The client was complaining. I opened the code expecting something complicated.&lt;/p&gt;

&lt;p&gt;It was 11 database queries. On every single page load. Just for the sidebar menu and user permissions. Data that hadn’t changed in weeks — fetched fresh every time someone opened the dashboard.&lt;/p&gt;

&lt;p&gt;I added three lines using Laravel’s built-in cache:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$menuItems&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Cache&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;remember&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"nav.user.&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;addHours&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;NavigationService&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;buildFor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Page went from 1.8 seconds to under 200 milliseconds.&lt;/p&gt;

&lt;p&gt;The client actually called me to ask if we upgraded the server. We did not upgrade the server.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Cache::remember&lt;/code&gt; stores the result the first time, then returns the stored version until it expires. That's it. Navigation menus, permissions, settings, statistics — anything that loads slowly but rarely changes is a perfect fit for this.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one that stopped me writing 300-line controllers
&lt;/h2&gt;

&lt;p&gt;Every Laravel developer has done this at some point.&lt;/p&gt;

&lt;p&gt;User signs up → you need to send a welcome email, create their workspace, ping the admin on Slack, assign a default role. So you write it all inside the same controller method because that’s the fastest way to get it done.&lt;/p&gt;

&lt;p&gt;Three months later that method is 80 lines and touching six completely different things. Nobody wants to go near it.&lt;/p&gt;

&lt;p&gt;Laravel has something called Observers. An Observer watches a model and runs code automatically when something happens to it — when it’s created, updated, deleted. Your controller just does its job. Everything else fires on its own.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserObserver&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;created&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;User&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;Mail&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WelcomeEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="nc"&gt;Workspace&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;createDefault&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Slack&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"New user: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Controller creates the user. Observer handles the rest. Clean, automatic, easy to find later.&lt;/p&gt;

&lt;p&gt;Honestly once I started using Observers I stopped dreading the “can we just do one more thing when someone signs up” conversation. Adding a new action is one method in one file. Five minutes, done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Six more — with full code and real stories
&lt;/h2&gt;

&lt;p&gt;These two are just the start. On my blog I’ve written up eight of these hidden Laravel features in full — with actual code, and the real situations where I discovered them (usually by doing it the wrong way first).&lt;/p&gt;

&lt;p&gt;The other six cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collections — chain clean operations instead of writing nested foreach loops&lt;/li&gt;
&lt;li&gt;Pipelines — handle multi-step logic without nesting conditions inside conditions&lt;/li&gt;
&lt;li&gt;API Resources — stop a renamed database column from breaking your mobile apps&lt;/li&gt;
&lt;li&gt;Jobs &amp;amp; Queues — make slow forms respond instantly by moving work to the background&lt;/li&gt;
&lt;li&gt;Macros — add your own methods to Laravel’s core classes so you stop repeating yourself&lt;/li&gt;
&lt;li&gt;Lazy Collections — process hundreds of thousands of records without running out of memory
All of it is already inside Laravel. No packages. No setup. Just things most developers walk right past.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://codewithjayesh.com/laravel-hidden-gems-most-developers-dont-use/" rel="noopener noreferrer"&gt;👉 Read the full breakdown → codewithjayesh.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You don’t have to learn all eight this weekend. Pick one that matches a problem you’re dealing with right now and start there.&lt;/p&gt;

&lt;p&gt;The best Laravel developers I’ve met aren’t the fastest learners. They’re just the ones who never stopped being curious about the tool they use every day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Follow if you want more of this — real Laravel stuff, no fluff.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>web</category>
    </item>
  </channel>
</rss>
