<?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: Baptiste Bouillot</title>
    <description>The latest articles on DEV Community by Baptiste Bouillot (@croustibat44).</description>
    <link>https://dev.to/croustibat44</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3543764%2F53bbc965-0a43-4e9b-a094-8d35eeb6da6e.png</url>
      <title>DEV Community: Baptiste Bouillot</title>
      <link>https://dev.to/croustibat44</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/croustibat44"/>
    <language>en</language>
    <item>
      <title>Stop describing pixels to your AI agent — annotate them instead</title>
      <dc:creator>Baptiste Bouillot</dc:creator>
      <pubDate>Wed, 15 Jul 2026 10:03:00 +0000</pubDate>
      <link>https://dev.to/croustibat44/stop-describing-pixels-to-your-ai-agent-annotate-them-instead-1ofp</link>
      <guid>https://dev.to/croustibat44/stop-describing-pixels-to-your-ai-agent-annotate-them-instead-1ofp</guid>
      <description>&lt;h1&gt;
  
  
  Stop describing pixels to your AI agent — annotate them instead
&lt;/h1&gt;

&lt;p&gt;If you pair-program with an AI agent — Claude Code, Codex, Cursor, whatever — you've lived this moment. You take a screenshot of your UI, paste it into the chat, and then you start typing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"See the button in the top-right? No, not that one, the &lt;em&gt;other&lt;/em&gt; one, next to the misaligned icon — make it full width on mobile and fix the icon while you're at it."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You're describing pixels in prose. And the agent, bless it, does its best to guess which of the six buttons in the screenshot you actually meant.&lt;/p&gt;

&lt;p&gt;It gets worse. A lot of chat UIs only keep the &lt;strong&gt;image&lt;/strong&gt; from your clipboard and silently throw away any text you copied alongside it. So even the careful caption you wrote never makes it through. Half your context evaporates between Cmd+C and Cmd+V.&lt;/p&gt;

&lt;p&gt;I hit this wall every single day. So I built a tool to fix it, and I open-sourced it. This post is about the underlying idea more than the tool — but I'll use the tool to make it concrete.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core idea: point, don't describe
&lt;/h2&gt;

&lt;p&gt;Humans don't describe pixels to each other. We point. "This one." "Right here." We use our finger, a cursor, a circle drawn in the air.&lt;/p&gt;

&lt;p&gt;So the fix is obvious once you say it out loud: &lt;strong&gt;annotate the image with markers, and give each marker a stable identity the agent can reference.&lt;/strong&gt; Instead of "the button in the top-right," you say "marker 1," and the image literally has a numbered pin on that button.&lt;/p&gt;

&lt;p&gt;But a visual marker alone isn't enough, because the agent reads the image as a flat raster. It doesn't &lt;em&gt;know&lt;/em&gt; that the ring labeled "1" sits at 62% across and 48% down. So the second half of the idea is: &lt;strong&gt;alongside the annotated image, emit a structured text block that maps every marker to a position and a description&lt;/strong&gt;, then appends your actual instructions.&lt;/p&gt;

&lt;p&gt;Put together, a single paste carries everything the agent needs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Annotated capture — 1280×800 px

An image is attached. Numbered (ringed) badges point to specific elements.
Markers (position in % of the image, top-left origin):

1. Primary CTA button · ~62 % × 48 %
2. Misaligned icon · ~12 % × 22 %

## Instructions
Make the CTA full-width on mobile and fix the icon alignment.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the agent doesn't guess. "Marker 1 is the primary CTA at roughly 62% × 48%. Marker 2 is the misaligned icon near the top-left." The ambiguity is gone, and your instructions are tied to concrete anchors instead of fuzzy spatial language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why percentages, not pixels
&lt;/h2&gt;

&lt;p&gt;A small but important detail: positions are expressed as &lt;strong&gt;percentages of the image&lt;/strong&gt;, with a top-left origin — not absolute pixel coordinates. Agents reason about layout relatively ("near the top-left," "centered horizontally") far more reliably than they handle raw pixel math, and percentages survive any downscaling the chat UI applies to your image before the model sees it. If the platform resizes your 1280px capture to 768px, "62%" still points at the same button. "794px" doesn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Defending against UIs that drop your text
&lt;/h2&gt;

&lt;p&gt;Remember the chat UIs that keep only the image? There's a defense for that too: &lt;strong&gt;bake the legend into the picture.&lt;/strong&gt; Render the marker descriptions and instructions directly onto the exported image as a caption block. It's redundant with the clipboard text on purpose — if the platform keeps both, great; if it keeps only the image, the legend is still there, pixels and all. Belt and suspenders.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making it frictionless enough to actually use
&lt;/h2&gt;

&lt;p&gt;An idea like this only pays off if invoking it costs less than just typing the description would. If annotating takes 30 seconds of fiddling, you'll skip it. So the workflow has to be near-instant:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A global shortcut to capture a region (no app-switching, no window juggling).&lt;/li&gt;
&lt;li&gt;Click to drop markers — they auto-number themselves.&lt;/li&gt;
&lt;li&gt;A one-line note per marker.&lt;/li&gt;
&lt;li&gt;Copy. Done. Paste into your agent.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's the bar: capture-to-clipboard in under ten seconds, from anywhere, without leaving what you were doing. On macOS that means a menu-bar app, &lt;code&gt;ScreenCaptureKit&lt;/code&gt; for native-resolution multi-display capture, and rebindable global shortcuts. It stays out of your way until you hit the hotkey.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tool: Pinpoint
&lt;/h2&gt;

&lt;p&gt;The implementation of all this is &lt;strong&gt;Pinpoint&lt;/strong&gt; — a native macOS menu-bar app, built in SwiftUI + ScreenCaptureKit. Capture a region with a shortcut, drop numbered markers, add notes and arrows, and copy an annotated image plus the structured prompt above. Everything stays local; captures never leave your Mac. It's free, MIT-licensed, notarized and signed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source &amp;amp; download: &lt;strong&gt;&lt;a href="https://github.com/croustibat/Pinpoint" rel="noopener noreferrer"&gt;https://github.com/croustibat/Pinpoint&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Landing: &lt;strong&gt;&lt;a href="https://pinpoint-ashy.vercel.app/" rel="noopener noreferrer"&gt;https://pinpoint-ashy.vercel.app/&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built it for myself and use it every day. The interesting part for me was less the Swift and more the format question: &lt;em&gt;what does a screenshot prompt actually need to contain for an agent to act on it without follow-up questions?&lt;/em&gt; The percentage-based marker map plus a baked-in legend is my current answer — but I'd genuinely like to hear how others are solving this.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway, even if you never touch the tool
&lt;/h2&gt;

&lt;p&gt;The pattern generalizes beyond macOS and beyond this app: when you hand an agent an image, &lt;strong&gt;don't make it infer what you're pointing at.&lt;/strong&gt; Give it stable, named anchors and a machine-readable map of where they are. Whether you build that into your own workflow, a browser extension, or a CLI, the principle holds — pointing beats describing, and a structured map beats a paragraph of spatial prose.&lt;/p&gt;

&lt;p&gt;If you're shipping UI work with an AI agent, try replacing your next "the thing in the corner, no the other one" with a numbered marker. You'll feel the difference on the first paste.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Pinpoint is open source (MIT). Issues and PRs welcome — there are a couple of good-first-issues open. If you have a better prompt format for annotated captures, I want to see it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>macos</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Zed for Laravel - Complete Editor Setup in One Command</title>
      <dc:creator>Baptiste Bouillot</dc:creator>
      <pubDate>Fri, 03 Oct 2025 13:34:40 +0000</pubDate>
      <link>https://dev.to/croustibat44/zed-for-laravel-complete-editor-setup-in-one-command-3nk9</link>
      <guid>https://dev.to/croustibat44/zed-for-laravel-complete-editor-setup-in-one-command-3nk9</guid>
      <description>&lt;p&gt;Setting up a code editor for Laravel development can be time-consuming. After switching to &lt;a href="https://zed.dev" rel="noopener noreferrer"&gt;Zed&lt;/a&gt; - the lightning-fast editor from Atom's creators - I spent weeks configuring it perfectly for Laravel. &lt;/p&gt;

&lt;p&gt;Today, I'm open-sourcing that configuration as &lt;strong&gt;Zed for Laravel&lt;/strong&gt; - a one-command installer that sets up everything you need.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 What's Zed?
&lt;/h2&gt;

&lt;p&gt;If you haven't heard of Zed yet, it's a high-performance code editor built in Rust with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⚡ &lt;strong&gt;Blazing fast performance&lt;/strong&gt; - noticeably faster than VS Code&lt;/li&gt;
&lt;li&gt;🤝 &lt;strong&gt;Built-in multiplayer&lt;/strong&gt; - collaborate like in Google Docs&lt;/li&gt;
&lt;li&gt;🎯 &lt;strong&gt;Minimal &amp;amp; focused&lt;/strong&gt; - less bloat, more productivity&lt;/li&gt;
&lt;li&gt;🆓 &lt;strong&gt;Free &amp;amp; open-source&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Perfect for Laravel development once properly configured.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 The Problem
&lt;/h2&gt;

&lt;p&gt;When I first tried Zed for Laravel, I hit several roadblocks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Laravel Pint&lt;/strong&gt; wouldn't format on save&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Laravel snippets&lt;/strong&gt; out of the box&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blade syntax&lt;/strong&gt; needed configuration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Artisan commands&lt;/strong&gt; required manual terminal work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensions&lt;/strong&gt; had to be found and installed individually&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each issue took hours to solve. So I packaged all solutions into a single installer.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🎨 Dual Theme System
&lt;/h3&gt;

&lt;p&gt;Choose your visual experience during installation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Default (One Dark)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean, familiar colors&lt;/li&gt;
&lt;li&gt;Standard syntax highlighting&lt;/li&gt;
&lt;li&gt;Great for getting started&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Catppuccin blur (Custom)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;30+ syntax overrides optimized for PHP/Laravel&lt;/li&gt;
&lt;li&gt;Bold keywords for quick scanning&lt;/li&gt;
&lt;li&gt;Italic types for elegant distinction&lt;/li&gt;
&lt;li&gt;Bright green functions (Laravel helpers pop!)&lt;/li&gt;
&lt;li&gt;Reduced eye strain for long sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📝 130+ Smart Snippets
&lt;/h3&gt;

&lt;h4&gt;
  
  
  PHP Snippets (50+)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// route + Tab&lt;/span&gt;
&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'uri'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;Controller&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'method'&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;name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'name'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// model + Tab&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ModelName&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;HasFactory&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$fillable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'name'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// hasMany + Tab&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;posts&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="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;hasMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Post&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// request + Tab&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;StoreUserRequest&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;FormRequest&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;rules&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kt"&gt;array&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'field'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'required|string|max:255'&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;Full list: controllers, models, migrations, factories, tests, policies, jobs, events, listeners, middleware, seeders, and more.&lt;/p&gt;

&lt;h4&gt;
  
  
  Blade Snippets (40+)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- @foreach + Tab --&amp;gt;
@foreach ($items as $item)
    {{ $item-&amp;gt;name }}
@endforeach

&amp;lt;!-- component + Tab --&amp;gt;
&amp;lt;x-alert :type="success"&amp;gt;
    Message here
&amp;lt;/x-alert&amp;gt;

&amp;lt;!-- @auth + Tab --&amp;gt;
@auth
    &amp;lt;p&amp;gt;Welcome, {{ auth()-&amp;gt;user()-&amp;gt;name }}&amp;lt;/p&amp;gt;
@endauth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All Blade directives included: &lt;code&gt;@if&lt;/code&gt;, &lt;code&gt;@forelse&lt;/code&gt;, &lt;code&gt;@switch&lt;/code&gt;, &lt;code&gt;@extends&lt;/code&gt;, &lt;code&gt;@section&lt;/code&gt;, &lt;code&gt;@include&lt;/code&gt;, &lt;code&gt;@can&lt;/code&gt;, &lt;code&gt;@error&lt;/code&gt;, and more.&lt;/p&gt;

&lt;h4&gt;
  
  
  Livewire 3 Snippets (30+)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// livewire-component + Tab&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ComponentName&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Component&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nv"&gt;$property&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;render&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="nf"&gt;view&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'livewire.component-name'&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;span class="c1"&gt;// livewire-validate + Tab&lt;/span&gt;
&lt;span class="na"&gt;#[Validate('required|string|max:255')]&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// livewire-on + Tab&lt;/span&gt;
&lt;span class="na"&gt;#[On('user-updated')]&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;handleUserUpdate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$userId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Handle event&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Full Livewire 3 support with properties, lifecycle hooks, events, wire directives, computed properties, and forms.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ Laravel Pint Integration
&lt;/h3&gt;

&lt;p&gt;Automatic code formatting on every save. The kit uses a reliable bash wrapper:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"formatter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"external"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bash"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"arguments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-c"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"cat &amp;gt; {buffer_path} &amp;amp;&amp;amp; ./vendor/bin/pint --quiet {buffer_path} &amp;amp;&amp;amp; cat {buffer_path}"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Respects your project's &lt;code&gt;pint.json&lt;/code&gt; configuration and Laravel coding standards.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔧 25 Artisan Tasks
&lt;/h3&gt;

&lt;p&gt;Press &lt;code&gt;Cmd/Ctrl + Shift + T&lt;/code&gt; to access:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Development:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Artisan Serve&lt;/li&gt;
&lt;li&gt;Artisan Tinker&lt;/li&gt;
&lt;li&gt;Artisan Route List&lt;/li&gt;
&lt;li&gt;Artisan Queue Work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Database:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Artisan Migrate&lt;/li&gt;
&lt;li&gt;Artisan Migrate Fresh (with seeding)&lt;/li&gt;
&lt;li&gt;Artisan Migrate Rollback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Testing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PHPUnit (all tests)&lt;/li&gt;
&lt;li&gt;PHPUnit (current file)&lt;/li&gt;
&lt;li&gt;PHPUnit (parallel)&lt;/li&gt;
&lt;li&gt;PHPUnit (with coverage)&lt;/li&gt;
&lt;li&gt;Pest (all tests)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Code Quality:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pint Format (all files)&lt;/li&gt;
&lt;li&gt;Pint Format (dirty files only)&lt;/li&gt;
&lt;li&gt;Pint Test (check without formatting)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Frontend:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NPM Dev (Vite)&lt;/li&gt;
&lt;li&gt;NPM Build (production)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Dependencies:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Composer Install&lt;/li&gt;
&lt;li&gt;Composer Update&lt;/li&gt;
&lt;li&gt;Composer Dump Autoload&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔌 Auto-Installing Extensions
&lt;/h3&gt;

&lt;p&gt;Four essential extensions install automatically on first launch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PHP&lt;/strong&gt; - Full language server support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Laravel Blade&lt;/strong&gt; - Template syntax highlighting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Env&lt;/strong&gt; - .env file syntax support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; - IntelliSense for Tailwind classes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No manual searching or clicking required.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⌨️ Optimized Keybindings
&lt;/h3&gt;

&lt;p&gt;Laravel-friendly keyboard shortcuts:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Shortcut&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Cmd/Ctrl + Shift + I&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Format with Pint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Cmd/Ctrl + Shift + T&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run Artisan task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Cmd/Ctrl + T&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Toggle terminal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Cmd/Ctrl + Shift + P&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Command palette&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Cmd/Ctrl + B&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Toggle sidebar&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All familiar shortcuts that feel natural.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Installation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Quick Install
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;macOS / Linux:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/croustibat/zed-for-laravel/main/scripts/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Windows (PowerShell):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;irm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://raw.githubusercontent.com/croustibat/zed-for-laravel/main/scripts/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What Happens
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;✅ Backs up your existing Zed configuration&lt;/li&gt;
&lt;li&gt;🎨 Prompts you to choose a theme (Default or Dracula Pro)&lt;/li&gt;
&lt;li&gt;📋 Installs all configuration files&lt;/li&gt;
&lt;li&gt;📝 Installs 130+ snippets&lt;/li&gt;
&lt;li&gt;⚡ Configures Laravel Pint&lt;/li&gt;
&lt;li&gt;🔧 Sets up Artisan tasks&lt;/li&gt;
&lt;li&gt;🔌 Queues extensions for auto-install&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; ~30 seconds&lt;/p&gt;

&lt;p&gt;Restart Zed and you're ready to code!&lt;/p&gt;

&lt;h3&gt;
  
  
  Manual Installation
&lt;/h3&gt;

&lt;p&gt;Prefer doing it manually? Full instructions in the &lt;a href="https://github.com/croustibat/zed-for-laravel/blob/main/docs/installation.md" rel="noopener noreferrer"&gt;installation guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  📖 Complete Documentation
&lt;/h2&gt;

&lt;p&gt;The kit includes comprehensive guides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/croustibat/zed-for-laravel/blob/main/docs/installation.md" rel="noopener noreferrer"&gt;Installation Guide&lt;/a&gt;&lt;/strong&gt; - Quick start and troubleshooting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/croustibat/zed-for-laravel/blob/main/docs/features.md" rel="noopener noreferrer"&gt;Features Overview&lt;/a&gt;&lt;/strong&gt; - Detailed feature breakdown&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/croustibat/zed-for-laravel/blob/main/docs/configuration.md" rel="noopener noreferrer"&gt;Configuration Guide&lt;/a&gt;&lt;/strong&gt; - Customization options&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/croustibat/zed-for-laravel/blob/main/docs/extensions.md" rel="noopener noreferrer"&gt;Extensions Guide&lt;/a&gt;&lt;/strong&gt; - Managing extensions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/croustibat/zed-for-laravel/blob/main/docs/themes.md" rel="noopener noreferrer"&gt;Theme Guide&lt;/a&gt;&lt;/strong&gt; - Theme comparison and customization&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💡 Why I Built This
&lt;/h2&gt;

&lt;p&gt;After years with VS Code, I wanted something faster. Zed's performance is incredible, but the Laravel setup was fragmented across GitHub issues, forums, and documentation.&lt;/p&gt;

&lt;p&gt;I wanted a single source of truth - one command that sets up everything perfectly.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Perfect For
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Laravel developers&lt;/strong&gt; wanting to try Zed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zed users&lt;/strong&gt; starting Laravel development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development teams&lt;/strong&gt; needing consistent setup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anyone tired&lt;/strong&gt; of slow editors or complex configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🗺️ Roadmap
&lt;/h2&gt;

&lt;p&gt;Planning future releases:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v1.1&lt;/strong&gt; - Extended snippets&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pest-specific snippets&lt;/li&gt;
&lt;li&gt;Inertia.js (Vue/React)&lt;/li&gt;
&lt;li&gt;API Resource snippets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;v1.2&lt;/strong&gt; - More themes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nord (arctic calm)&lt;/li&gt;
&lt;li&gt;Gruvbox (retro groove)&lt;/li&gt;
&lt;li&gt;Tokyo Night (cyberpunk)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;v2.0&lt;/strong&gt; - Advanced features&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Laravel Pint config generator&lt;/li&gt;
&lt;li&gt;Project scaffolding templates&lt;/li&gt;
&lt;li&gt;Team sync features&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🤝 Contributing
&lt;/h2&gt;

&lt;p&gt;This is an open-source project and contributions are welcome!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/croustibat/zed-for-laravel" rel="noopener noreferrer"&gt;https://github.com/croustibat/zed-for-laravel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ways to contribute:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐ Star the repository&lt;/li&gt;
&lt;li&gt;🐛 Report bugs or issues&lt;/li&gt;
&lt;li&gt;💡 Suggest features&lt;/li&gt;
&lt;li&gt;🤝 Submit pull requests&lt;/li&gt;
&lt;li&gt;📖 Improve documentation&lt;/li&gt;
&lt;li&gt;💬 Help others in discussions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏁 Getting Started
&lt;/h2&gt;

&lt;p&gt;Ready to try it? Here's a quick start:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Install Zed for Laravel&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/croustibat/zed-for-laravel/main/scripts/install.sh | bash

&lt;span class="c"&gt;# 2. Choose your theme (I recommend Dracula Pro for Laravel)&lt;/span&gt;

&lt;span class="c"&gt;# 3. Restart Zed&lt;/span&gt;

&lt;span class="c"&gt;# 4. Open your Laravel project&lt;/span&gt;

&lt;span class="c"&gt;# 5. Try a snippet: type 'route' and press Tab&lt;/span&gt;

&lt;span class="c"&gt;# 6. Save a PHP file to see Pint auto-format&lt;/span&gt;

&lt;span class="c"&gt;# 7. Press Cmd+Shift+T to run Artisan commands&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! You're configured for Laravel development.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/croustibat/zed-for-laravel" rel="noopener noreferrer"&gt;https://github.com/croustibat/zed-for-laravel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zed Editor:&lt;/strong&gt; &lt;a href="https://zed.dev" rel="noopener noreferrer"&gt;https://zed.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Laravel:&lt;/strong&gt; &lt;a href="https://laravel.com" rel="noopener noreferrer"&gt;https://laravel.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Laravel Pint:&lt;/strong&gt; &lt;a href="https://laravel.com/docs/pint" rel="noopener noreferrer"&gt;https://laravel.com/docs/pint&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🙏 Acknowledgments
&lt;/h2&gt;

&lt;p&gt;Thanks to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Zed team&lt;/strong&gt; for creating an amazing editor&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Laravel community&lt;/strong&gt; for feedback and inspiration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Catppuccin theme&lt;/strong&gt; creators for the beautiful color scheme&lt;/li&gt;
&lt;li&gt;All &lt;strong&gt;contributors&lt;/strong&gt; who help improve the project&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💭 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Switching editors is always a bit scary. Will I lose productivity? Will I miss features? &lt;/p&gt;

&lt;p&gt;With Zed for Laravel, the transition is smooth. Everything works on day one. The speed improvement alone makes it worth trying.&lt;/p&gt;

&lt;p&gt;Give it a shot! If it's not for you, uninstalling is just deleting &lt;code&gt;~/.config/zed/&lt;/code&gt;. No commitment, no vendor lock-in.&lt;/p&gt;

&lt;p&gt;Happy coding! 🚀&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What editor do you use for Laravel development? Have you tried Zed? Let me know in the comments!&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #laravel #php #zed #productivity #webdev #opensource #developer #coding&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>zed</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
