<?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: Agus Sudarmanto</title>
    <description>The latest articles on DEV Community by Agus Sudarmanto (@agussudarmanto).</description>
    <link>https://dev.to/agussudarmanto</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%2F233071%2F2ed57f8f-a24d-4af6-826b-568ba7eef3b2.png</url>
      <title>DEV Community: Agus Sudarmanto</title>
      <link>https://dev.to/agussudarmanto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/agussudarmanto"/>
    <language>en</language>
    <item>
      <title>Install Opencode in Termux</title>
      <dc:creator>Agus Sudarmanto</dc:creator>
      <pubDate>Mon, 19 Oct 2026 09:07:45 +0000</pubDate>
      <link>https://dev.to/agussudarmanto/install-opencode-in-termux-31l9</link>
      <guid>https://dev.to/agussudarmanto/install-opencode-in-termux-31l9</guid>
      <description>&lt;h2&gt;
  
  
  ## Using custom opencode
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkg update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pkg upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
pkg &lt;span class="nb"&gt;install &lt;/span&gt;curl &lt;span class="nb"&gt;tar &lt;/span&gt;python git &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="c"&gt;# Fetch and run the specific Termux environment installer&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://hope2333.github.io/repo/install.sh | sh &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;--install&lt;/span&gt; opencode

opencode &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;curl -fsSL &lt;a href="https://opencode.ai/v2/install" rel="noopener noreferrer"&gt;https://opencode.ai/v2/install&lt;/a&gt; | bash&lt;/p&gt;

&lt;h2&gt;
  
  
  ## Using pacman
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pacman-key &lt;span class="nt"&gt;--init&lt;/span&gt;
pacman-key &lt;span class="nt"&gt;--populate&lt;/span&gt;
pacman &lt;span class="nt"&gt;-Syu&lt;/span&gt; &lt;span class="nt"&gt;--overwrite&lt;/span&gt; &lt;span class="s2"&gt;"*"&lt;/span&gt;

pacman &lt;span class="nt"&gt;-Sy&lt;/span&gt; opencode

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  ## Using glibc
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkg update
pkg &lt;span class="nb"&gt;install &lt;/span&gt;glibc-repo &lt;span class="nt"&gt;-y&lt;/span&gt;
pkg &lt;span class="nb"&gt;install &lt;/span&gt;glibc-runner &lt;span class="nt"&gt;-y&lt;/span&gt;
grun /data/data/com.termux/files/home/.opencode/bin/opencode
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;termux-mcp serve http
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ## Using DEAD1nsane
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkg update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pkg upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
pkg &lt;span class="nb"&gt;install &lt;/span&gt;termux-api &lt;span class="nt"&gt;-y&lt;/span&gt;
termux-battery-status
pkg &lt;span class="nb"&gt;install &lt;/span&gt;curl &lt;span class="nb"&gt;tar &lt;/span&gt;python git
curl &lt;span class="nt"&gt;-sL&lt;/span&gt; https://gist.githubusercontent.com/DEAD1nsane/9b37cba090602f473200fad8b1002e6c/raw/all-in-one.sh | sh
opencode &lt;span class="nt"&gt;--version&lt;/span&gt;
opencode run &lt;span class="s2"&gt;"say hi"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Remote Coding with Herdr + Moshi</title>
      <dc:creator>Agus Sudarmanto</dc:creator>
      <pubDate>Sat, 10 Oct 2026 10:29:08 +0000</pubDate>
      <link>https://dev.to/agussudarmanto/remote-coding-55db</link>
      <guid>https://dev.to/agussudarmanto/remote-coding-55db</guid>
      <description>&lt;h2&gt;
  
  
  1. Set Up Your Mac Host
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Open the Terminal on your Mac and install the required packages using Homebrew via the &lt;a href="https://mariospina.com/blog/moshi-herdr-agents-from-my-phone/" rel="noopener noreferrer"&gt;Moshi Guide&lt;/a&gt;&lt;/em&gt;:&amp;nbsp;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tap the Moshi Homebrew repository and trust it:&lt;/strong&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;bash&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   brew tap rjyo/moshi
   brew trust &lt;span class="nt"&gt;--formula&lt;/span&gt; rjyo/moshi/moshi-hook
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use code with caution.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install &lt;code&gt;moshi-hook&lt;/code&gt;, &lt;code&gt;mosh&lt;/code&gt;, and &lt;code&gt;tmux&lt;/code&gt;:&lt;/strong&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;bash&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   brew &lt;span class="nb"&gt;install &lt;/span&gt;moshi-hook mosh tmux herdr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use code with caution.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start the Moshi hook background service:&lt;/strong&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   brew services start moshi-hook
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use code with caution.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Enable Remote Login (SSH) on macOS:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;System Settings &amp;gt; General &amp;gt; Sharing&lt;/strong&gt; and turn on &lt;strong&gt;Remote Login&lt;/strong&gt; so your Mac accepts SSH connections.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  2. Install Herdr and Start a Session on Mac
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install Herdr&lt;/strong&gt; (if not already installed via Homebrew):&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;bash&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   brew &lt;span class="nb"&gt;install &lt;/span&gt;herdr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use code with caution.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Navigate to your project directory and start Herdr:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;bash&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="nb"&gt;cd&lt;/span&gt; ~/your-project-path
   herdr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use code with caution.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Herdr will launch or attach to a background multiplexer session for your AI agents like Claude Code, Codex, or Cursor).&lt;/em&gt;&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Generate a QR Code for Pairing
&lt;/h2&gt;

&lt;p&gt;Run the Easy Pair command in your Mac terminal to generate a configuration QR code:&amp;nbsp;&lt;/p&gt;

&lt;p&gt;bash&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="nb"&gt;sudo &lt;/span&gt;moshi-hook host enable-ssh
moshi-hook host setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Using Tailscale
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tailscale &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;--ssh&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;

&lt;span class="c"&gt;# check `it shows as RunSSH: true`&lt;/span&gt;
tailscale debug prefs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use code with caution.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Set Up the Moshi App on Android
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Download and open the &lt;strong&gt;Moshi&lt;/strong&gt; app from the Google Play Store on your Android device &lt;a href="https://medium.abdiel.dev/moshi-and-herdr-control-your-ai-coding-agents-from-your-phone-c21ec2000f08" rel="noopener noreferrer"&gt;Moshi and Herdr Guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Ensure your Android device is on the same local network or connected via a mesh VPN (such as Tailscale) to your Mac Moshi Docs.&lt;/li&gt;
&lt;li&gt;Use the &lt;strong&gt;Easy Pair&lt;/strong&gt; option inside the Moshi app to scan the QR code displayed in your Mac terminal Moshi and Herdr Guide.&lt;/li&gt;
&lt;li&gt;Once paired, Moshi will connect to your Mac, surface your active Herdr/tmux sessions, and forward agent states (blocked, working, done) directly to your phone &lt;a href="https://getmoshi.app/guides/herdr" rel="noopener noreferrer"&gt;Herdr on Mobile&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  UnInstall
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew services stop moshi-hook
moshi-hook uninstall
moshi-hook unpair
moshi-hook service uninstall
brew uninstall moshi-hook
brew untap rjyo/moshi
&lt;span class="nb"&gt;rm&lt;/span&gt; ~/.local/bin/moshi-hook ~/.local/bin/moshi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>remote</category>
    </item>
    <item>
      <title>SKILLS NOTES</title>
      <dc:creator>Agus Sudarmanto</dc:creator>
      <pubDate>Tue, 25 Aug 2026 12:56:42 +0000</pubDate>
      <link>https://dev.to/agussudarmanto/skills-notes-51bl</link>
      <guid>https://dev.to/agussudarmanto/skills-notes-51bl</guid>
      <description>&lt;h1&gt;
  
  
  # UI
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Taste Skill
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.tasteskill.dev/guide" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.tasteskill.dev%2Fog-image.jpg" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.tasteskill.dev/guide" rel="noopener noreferrer" class="c-link"&gt;
            Prompt Guide | Taste Skill
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Two ready-to-paste prompts for taste-skill v2. Greenfield and redesign, with the audits the skill expects.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.tasteskill.dev%2Ffavicon.webp" width="48" height="48"&gt;
          tasteskill.dev
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Agent Skills</title>
      <dc:creator>Agus Sudarmanto</dc:creator>
      <pubDate>Sat, 01 Aug 2026 07:30:21 +0000</pubDate>
      <link>https://dev.to/agussudarmanto/agent-skills-3a6l</link>
      <guid>https://dev.to/agussudarmanto/agent-skills-3a6l</guid>
      <description>&lt;p&gt;Skills teach coding agents how to code or to use tools effectively, providing structured reference documentation that agents can discover and use.&lt;/p&gt;

&lt;p&gt;Here are some of skills, i have install:&lt;/p&gt;

&lt;h2&gt;
  
  
  # Playwright Skills
&lt;/h2&gt;

&lt;p&gt;The installed skill includes detailed reference guides for common tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Running and Debugging Playwright tests — run, debug and manage Playwright test suites&lt;/li&gt;
&lt;li&gt;Request mocking — intercept and mock network requests&lt;/li&gt;
&lt;li&gt;Running Playwright code — execute arbitrary Playwright scripts&lt;/li&gt;
&lt;li&gt;Browser session management — manage multiple browser sessions&lt;/li&gt;
&lt;li&gt;Storage state (cookies, localStorage) — persist and restore browser state&lt;/li&gt;
&lt;li&gt;Test generation — generate Playwright tests from interactions&lt;/li&gt;
&lt;li&gt;Tracing — record and inspect execution traces&lt;/li&gt;
&lt;li&gt;Video recording — capture browser session videos&lt;/li&gt;
&lt;li&gt;Inspecting element attributes — get element attributes not visible in snapshots&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Playwright CLI skill from Microsoft &lt;code&gt;npx skills add https://github.com/microsoft/playwright-cli --skill playwright-cli&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Playwright best practices skill from Current Dev &lt;code&gt;npx skills add https://github.com/currents-dev/playwright-best-practices-skill&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Playwright skill from TestDino &lt;code&gt;npx skills add testdino-hq/playwright-skill&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Prerequisites ChecklistIf your terminal returns an error after fixing the npx command, ensure you have set up the core binaries:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install the CLI globally&lt;/strong&gt;: &lt;code&gt;npm install -g @playwright/cli@latest&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install the browsers&lt;/strong&gt;: &lt;code&gt;playwright-cli install-browser&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Link native agent skills&lt;/strong&gt;: &lt;code&gt;playwright-cli install --skills&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>agentskills</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Laravel Dev using Claude</title>
      <dc:creator>Agus Sudarmanto</dc:creator>
      <pubDate>Mon, 16 Feb 2026 05:49:02 +0000</pubDate>
      <link>https://dev.to/agussudarmanto/laravel-dev-using-ai-3g16</link>
      <guid>https://dev.to/agussudarmanto/laravel-dev-using-ai-3g16</guid>
      <description>&lt;h2&gt;
  
  
  # Plugins
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;code-simplifier&lt;/li&gt;
&lt;li&gt;context7&lt;/li&gt;
&lt;li&gt;laravel-boost&lt;/li&gt;
&lt;li&gt;frontend-design&lt;/li&gt;
&lt;li&gt;laravel-feature&lt;/li&gt;
&lt;li&gt;laravel-simplifier&lt;/li&gt;
&lt;li&gt;filament-simplifier&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ## frontend-design
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;/plugin marketplace add anthropics/claude-code&lt;/code&gt;&lt;br&gt;
&lt;code&gt;/plugin install frontend-design@claude-code-plugins&lt;/code&gt;&lt;br&gt;
chat:&lt;br&gt;
"use the frontend design skill. Create a music player app."&lt;/p&gt;

&lt;h2&gt;
  
  
  # Packages
&lt;/h2&gt;

&lt;h3&gt;
  
  
  - Pint
&lt;/h3&gt;

&lt;p&gt;composer require laravel/pint --dev&lt;br&gt;
./vendor/bin/pint&lt;/p&gt;

&lt;p&gt;Put custom rules in &lt;code&gt;pint.json&lt;/code&gt; file.&lt;/p&gt;

&lt;h3&gt;
  
  
  - Larastan
&lt;/h3&gt;

&lt;p&gt;composer require larastan/larastan --dev&lt;br&gt;
./vendor/bin/phpstan analyse --level=5&lt;br&gt;
./vendor/bin/phpstan analyse --level=5 --memory-limit=512M --fix&lt;/p&gt;

&lt;p&gt;Put custom rules in &lt;code&gt;phpstan.neon&lt;/code&gt; file.&lt;/p&gt;

&lt;h3&gt;
  
  
  - Rector
&lt;/h3&gt;

&lt;p&gt;composer require rector/rector --dev&lt;br&gt;
./vendor/bin/rector init&lt;br&gt;
./vendor/bin/rector process src --dry-run&lt;br&gt;
./vendor/bin/rector process&lt;/p&gt;

&lt;p&gt;composer require driftingly/rector-laravel --dev&lt;/p&gt;

&lt;h3&gt;
  
  
  - Filacheck
&lt;/h3&gt;

&lt;p&gt;composer require laraveldaily/filacheck --dev&lt;br&gt;
./vendor/bin/filacheck&lt;/p&gt;

&lt;h3&gt;
  
  
  - Pest
&lt;/h3&gt;

&lt;p&gt;composer require --dev pestphp/pest pestphp/pest-plugin-laravel pestphp/pest-plugin-type-coverage --dev&lt;br&gt;
php artisan pest:install&lt;br&gt;
./vendor/bin/pest&lt;/p&gt;

&lt;h3&gt;
  
  
  - Peck
&lt;/h3&gt;

&lt;p&gt;composer require peckphp/peck --dev&lt;br&gt;
./vendor/bin/peck --init&lt;br&gt;
./vendor/bin/peck&lt;/p&gt;

&lt;h3&gt;
  
  
  - Install all packages
&lt;/h3&gt;

&lt;p&gt;composer require laravel/pint larastan/larastan rector/rector driftingly/rector-laravel pestphp/pest pestphp/pest-plugin-laravel pestphp/pest-plugin-type-coverage laraveldaily/filacheck peckphp/peck --dev&lt;/p&gt;

&lt;h2&gt;
  
  
  # commands
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/export&lt;/code&gt; : export session&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;!&lt;/code&gt; : run bash&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>laravel</category>
      <category>ai</category>
    </item>
    <item>
      <title>Permanent uninstall android annoying bloatware</title>
      <dc:creator>Agus Sudarmanto</dc:creator>
      <pubDate>Sun, 25 Jan 2026 02:35:08 +0000</pubDate>
      <link>https://dev.to/agussudarmanto/permanent-uninstall-android-annoying-bloatware-4a5o</link>
      <guid>https://dev.to/agussudarmanto/permanent-uninstall-android-annoying-bloatware-4a5o</guid>
      <description>&lt;h1&gt;
  
  
  Step by step
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Active Android Developer Mode by clicking multiple times on Device Serial Number &lt;code&gt;Settings &amp;gt; My Phone Version Info &amp;gt; Serial Number&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable developer mode, in setting search &lt;code&gt;Developer Options&lt;/code&gt;, use USB Debugging or Wireless debugging&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Connect to Android in Terminal&lt;br&gt;
&lt;code&gt;adb devices -l&lt;/code&gt; - to check if devices are searchable&lt;br&gt;
&lt;code&gt;adb pair {android-ip}:{pairing port}&lt;/code&gt; - pairing android device&lt;br&gt;
&lt;code&gt;adb connect {android-ip}:{connect port}&lt;/code&gt; - connecting to device&lt;br&gt;
&lt;code&gt;adb shell pm uninstall -k --user 0 com.{bloatware-apps}.store&lt;/code&gt; - delete bloat ware&lt;br&gt;
if you don&lt;code&gt;t know bloatware apps name, use&lt;/code&gt;adb shell pm list packages | grep store&lt;code&gt;to search bloatware that have&lt;/code&gt;store` in its name&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  # Here are ADB Commands to List Packages&amp;nbsp;
&lt;/h3&gt;

&lt;p&gt;Use the following commands in your computer's command line interface (Command Prompt, Terminal, PowerShell):&amp;nbsp;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;List all packages:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
adb shell pm list packages&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;List only third-party (user-installed) apps:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
adb shell pm list packages -3&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;List only system apps:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
adb shell pm list packages -s&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;List packages with their associated file paths (APK locations):&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
adb shell pm list packages -f&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;List enabled or disabled apps:&lt;/strong&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  List only enabled packages
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
adb shell pm list packages -e&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  List only disabled packages
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
adb shell pm list packages -d&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Filter the list for a specific name (e.g., "store"):&lt;/strong&gt;
&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash
adb shell pm list packages | grep store
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a comprehensive list of package information, including version names and installation times, you can use a more detailed command and parse the output:&amp;nbsp;&lt;br&gt;
&lt;code&gt;&lt;/code&gt;&lt;code&gt;bash&lt;br&gt;
adb shell dumpsys package packages&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Jupyter NoteBook</title>
      <dc:creator>Agus Sudarmanto</dc:creator>
      <pubDate>Mon, 29 Dec 2025 07:57:16 +0000</pubDate>
      <link>https://dev.to/agussudarmanto/jupyter-notebook-1k6b</link>
      <guid>https://dev.to/agussudarmanto/jupyter-notebook-1k6b</guid>
      <description>&lt;h1&gt;
  
  
  Jupyter
&lt;/h1&gt;

&lt;p&gt;Here are sample code of my Jupyter Notebook exploration&lt;/p&gt;

&lt;h2&gt;
  
  
  - Query from CSV file
&lt;/h2&gt;

&lt;p&gt;Right, you can do a query to csv file, just use jupysql and duckdb engine&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Query using csv file
&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;jupysql&lt;/span&gt; &lt;span class="n"&gt;duckdb&lt;/span&gt; &lt;span class="n"&gt;duckdb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;engine&lt;/span&gt;
&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;load_ext&lt;/span&gt; &lt;span class="n"&gt;sql&lt;/span&gt;
&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;sql&lt;/span&gt; &lt;span class="n"&gt;duckdb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;

&lt;span class="o"&gt;%%&lt;/span&gt;&lt;span class="n"&gt;sql&lt;/span&gt;
&lt;span class="n"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;GolonganRuang&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Usia&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;rata_rata_usia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;jumlah&lt;/span&gt; 
&lt;span class="n"&gt;FROM&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;datapeg.csv&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;GROUP&lt;/span&gt; &lt;span class="n"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;GolonganRuang&lt;/span&gt;
&lt;span class="n"&gt;ORDER&lt;/span&gt; &lt;span class="n"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;rata_rata_usia&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>python</category>
      <category>jupyter</category>
      <category>programming</category>
    </item>
    <item>
      <title>Filament Shield</title>
      <dc:creator>Agus Sudarmanto</dc:creator>
      <pubDate>Sun, 28 Sep 2025 03:36:24 +0000</pubDate>
      <link>https://dev.to/agussudarmanto/filament-shield-3aki</link>
      <guid>https://dev.to/agussudarmanto/filament-shield-3aki</guid>
      <description>&lt;p&gt;Install Laravel&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer create-project laravel/laravel backend
composer require filament/filament:&lt;span class="s2"&gt;"^5.0"&lt;/span&gt;
php artisan filament:install &lt;span class="nt"&gt;--panels&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install Filament Shield&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require bezhansalleh/filament-shield
php artisan vendor:publish &lt;span class="nt"&gt;--tag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"filament-shield-config"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set Filament Shield config file &lt;code&gt;/config/filament-shield.php&lt;/code&gt;&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="s1"&gt;'auth_provider_model'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'App\\Models\\User'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set user model &lt;code&gt;app/Models/User.php&lt;/code&gt;&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="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Spatie\Permission\Traits\HasRoles&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Authenticable&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;HasRoles&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;Run setup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php artisan shield:setup

&lt;span class="c"&gt;# multi-tenancy&lt;/span&gt;
php artisan shield:setup &lt;span class="nt"&gt;--tenant&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;App&lt;span class="se"&gt;\\&lt;/span&gt;Models&lt;span class="se"&gt;\\&lt;/span&gt;Team
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install Shield to Filament panel&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php artisan shield:install admin &lt;span class="nt"&gt;--tenant&lt;/span&gt; &lt;span class="nt"&gt;--generate-relationships&lt;/span&gt;
&lt;span class="c"&gt;# Replace 'admin' with your panel ID&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Command&lt;/strong&gt; steps
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Team&lt;/em&gt; is my tenant table, you could name it Organization, Tenant, etc.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require bezhansalleh/filament-shield
php artisan vendor:publish &lt;span class="nt"&gt;--tag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"filament-shield-config"&lt;/span&gt;
php artisan shield:setup &lt;span class="nt"&gt;--tenant&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;App&lt;span class="se"&gt;\\&lt;/span&gt;Models&lt;span class="se"&gt;\\&lt;/span&gt;Team &lt;span class="nt"&gt;--force&lt;/span&gt;
php artisan shield:install &lt;span class="nt"&gt;--tenant&lt;/span&gt;
php artisan shield:super-admin &lt;span class="nt"&gt;--tenant&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
php artisan shield:generate &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;--option&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;policies &lt;span class="nt"&gt;--relationships&lt;/span&gt;
php artisan shield:seeder
php artisan db:seed &lt;span class="nt"&gt;--class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ShieldSeeder
php artisan migrate &lt;span class="nt"&gt;--seed&lt;/span&gt;
php artisan shield:super-admin &lt;span class="nt"&gt;--user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nt"&gt;--panel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;board &lt;span class="nt"&gt;--tenant&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;App&lt;span class="se"&gt;\\&lt;/span&gt;Models&lt;span class="se"&gt;\\&lt;/span&gt;Team
php artisan make:filament-resource User
php artisan shield:generate &lt;span class="nt"&gt;--resource&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;UserResource &lt;span class="nt"&gt;--option&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;policies &lt;span class="nt"&gt;--relationships&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Don't forget to add tenant ownership relationship name on every filament resources.&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="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="mf"&gt;...&lt;/span&gt;

&lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="mf"&gt;....&lt;/span&gt;&lt;span class="nc"&gt;Resource&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Resource&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="mf"&gt;...&lt;/span&gt;
    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;?string&lt;/span&gt; &lt;span class="nv"&gt;$tenantOwnershipRelationshipName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"teams"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="mf"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;To exclude Tenant in certain resource add &lt;code&gt;$isScopedToTenant = false&lt;/code&gt;.&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="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="mf"&gt;...&lt;/span&gt;
&lt;span class="mf"&gt;...&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HelpdeskResource&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Resource&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nv"&gt;$isScopedToTenant&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Generate
&lt;/h2&gt;

&lt;h4&gt;
  
  
  1. Generate Resource
&lt;/h4&gt;

&lt;p&gt;Use the --generate flag when creating a resource to automatically create form fields and table columns based on your database schema, including simple relationship fields if doctrine/dbal is installed.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;composer require doctrine/dbal --dev&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php artisan make:filament-resource &lt;span class="o"&gt;{&lt;/span&gt;resource-name&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;--model-namespace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"App&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Models&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;{vendor-name}&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;{model-name}"&lt;/span&gt; &lt;span class="nt"&gt;--generate&lt;/span&gt;

&lt;span class="c"&gt;# example&lt;/span&gt;
php artisan make:filament-resource Peraturan &lt;span class="nt"&gt;--model-namespace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"App&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Models&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Agussudarmanto&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Peraturan"&lt;/span&gt; &lt;span class="nt"&gt;--generate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. Generate Relation Manager
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php artisan make:filament-relation-manager CategoryResource posts title
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;CategoryResource&lt;/code&gt; is the name of the parent resource class.&lt;br&gt;
&lt;code&gt;posts&lt;/code&gt; is the name of the relationship method in your Category model.&lt;br&gt;
&lt;code&gt;title&lt;/code&gt; is the attribute used to identify related records in the manager's table. &lt;br&gt;
This command generates a new class in &lt;code&gt;App\Filament\Resources\CategoryResource\RelationManagers\PostsRelationManager.php&lt;/code&gt;.&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="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Filament\Forms\Components\Section&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;Filament\Forms\Components\Grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Filament\Schemas\Components\Section&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;Filament\Schemas\Components\Grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://filamentphp.com/plugins/bezhansalleh-shield" rel="noopener noreferrer"&gt;Filament Shield&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>php</category>
      <category>laravel</category>
      <category>filament</category>
    </item>
    <item>
      <title>AI MCP using Laravel Boost</title>
      <dc:creator>Agus Sudarmanto</dc:creator>
      <pubDate>Sat, 27 Sep 2025 17:25:48 +0000</pubDate>
      <link>https://dev.to/agussudarmanto/laravel-boost-5h3o</link>
      <guid>https://dev.to/agussudarmanto/laravel-boost-5h3o</guid>
      <description>&lt;p&gt;From &lt;a href="https://boost.laravel.com" rel="noopener noreferrer"&gt;Laravel Boost&lt;/a&gt; site say, Boost will assist your development by providing the essential context and structure that AI needs to generate high-quality, Laravel-specific code.&lt;/p&gt;

&lt;p&gt;It includes:&lt;br&gt;
— MCP server with 15+ tools&lt;br&gt;
— Composable AI guidelines for ecosystem packages&lt;br&gt;
— Documentation API with built-in MCP tool&lt;/p&gt;
&lt;h2&gt;
  
  
  How to install
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="n"&gt;composer&lt;/span&gt; &lt;span class="k"&gt;require&lt;/span&gt; &lt;span class="n"&gt;laravel&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;boost&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;
&lt;span class="n"&gt;php&lt;/span&gt; &lt;span class="n"&gt;artisan&lt;/span&gt; &lt;span class="n"&gt;boost&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  How to setup
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Using Claude Code
&lt;/h4&gt;

&lt;p&gt;Adding manually&lt;br&gt;
&lt;code&gt;claude mcp add -s local -t stdio laravel-boost php artisan boost:mcp&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Add to Copilot config file &lt;code&gt;~/.copilot/mcp-config.json&lt;/code&gt;&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;"mcpServers"&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;"laravel-boost"&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;"tools"&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="s2"&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"local"&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;"php"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"artisan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"boost:mcp"&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;"herd"&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"local"&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;"php"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"tools"&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="s2"&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;"args"&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="s2"&gt;"/Applications/Herd.app/Contents/Resources/herd-mcp.phar"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;"SITE_PATH"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"pwd"&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;h4&gt;
  
  
  # Qwen Coder
&lt;/h4&gt;

&lt;p&gt;Add to Qwen config file &lt;code&gt;~/.qwen/settings.json&lt;/code&gt;&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;"ideMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"selectedAuthType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"qwen-oauth"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hasSeenIdeIntegrationNudge"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&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;"laravel-boost"&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;"tools"&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="s2"&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"local"&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;"php"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"artisan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"boost:mcp"&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;"herd"&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"local"&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;"php"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"tools"&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="s2"&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;"args"&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="s2"&gt;"/Applications/Herd.app/Contents/Resources/herd-mcp.phar"&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;



</description>
      <category>webdev</category>
      <category>php</category>
      <category>laravel</category>
      <category>ai</category>
    </item>
    <item>
      <title>GIT Command</title>
      <dc:creator>Agus Sudarmanto</dc:creator>
      <pubDate>Thu, 04 Sep 2025 04:16:07 +0000</pubDate>
      <link>https://dev.to/agussudarmanto/git-command-5a0a</link>
      <guid>https://dev.to/agussudarmanto/git-command-5a0a</guid>
      <description>&lt;h2&gt;
  
  
  Fix issues
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;GIT_ISSUE_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"212 location not found"&lt;/span&gt;
&lt;span class="nv"&gt;GIT_BRANCH_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$GIT_ISSUE_NAME&lt;/span&gt; | &lt;span class="nb"&gt;tr&lt;/span&gt; &lt;span class="s1"&gt;'[:upper:]'&lt;/span&gt; &lt;span class="s1"&gt;'[:lower:]'&lt;/span&gt; | &lt;span class="nb"&gt;tr&lt;/span&gt; &lt;span class="s1"&gt;'/'&lt;/span&gt; &lt;span class="s1"&gt;'-'&lt;/span&gt; | &lt;span class="nb"&gt;tr&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt; &lt;span class="s1"&gt;'-'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; &lt;span class="nv"&gt;$GIT_BRANCH_NAME&lt;/span&gt;

git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nt"&gt;--&lt;/span&gt; or &lt;span class="nt"&gt;--&lt;/span&gt;
git add &lt;span class="nt"&gt;-u&lt;/span&gt;

git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Fixed a bug for #212"&lt;/span&gt;
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin &lt;span class="nv"&gt;$BRANCH_NAME&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Add Tag
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;GIT_TAG_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; &lt;span class="s2"&gt;"+%Y-%m-%d_%H-%M-%S"&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;
git tag &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nv"&gt;$GIT_TAG_NAME&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="nv"&gt;$GIT_TAG_NAME&lt;/span&gt;
git push origin &lt;span class="nt"&gt;--tags&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Subdirectory (Relative URL)</title>
      <dc:creator>Agus Sudarmanto</dc:creator>
      <pubDate>Wed, 03 Sep 2025 15:34:46 +0000</pubDate>
      <link>https://dev.to/agussudarmanto/subdirectory-relative-url-3fl5</link>
      <guid>https://dev.to/agussudarmanto/subdirectory-relative-url-3fl5</guid>
      <description>&lt;h2&gt;
  
  
  1. Caddy
&lt;/h2&gt;

&lt;h3&gt;
  
  
  # Docker Compose:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="na"&gt;caddy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;caddy:2&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;caddy&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;80:80"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./config/caddy/Caddyfile:/etc/caddy/Caddyfile&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./data/caddy:/data&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./log/caddy:/var/log/caddy&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./config/php:/usr/local/etc/php&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./config/hello:/srv/hello&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./src/laravel:/srv/laravel&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;laravel&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;phpmyadmin&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;pgadmin&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;gitlab&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DOMAIN=${DOMAIN}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  # Caddyfile
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;{&lt;/span&gt;
  email admin@&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$DOMAIN&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
    log &lt;span class="o"&gt;{&lt;/span&gt;
      output file /var/log/caddy/access.log
      level INFO
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$DOMAIN&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    root &lt;span class="k"&gt;*&lt;/span&gt; /srv
    encode &lt;span class="nb"&gt;gzip &lt;/span&gt;zstd

    handle &lt;span class="o"&gt;{&lt;/span&gt;
      respond &lt;span class="s2"&gt;"Service not found"&lt;/span&gt; 404
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. PGAdmin
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Relative URL &lt;a href="https://www.pgadmin.org/docs/pgadmin4/latest/container_deployment.html" rel="noopener noreferrer"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Setting Postgres in Docker &lt;a href="https://medium.com/@marvinjungre/get-postgresql-and-pgadmin-4-up-and-running-with-docker-4a8d81048aea" rel="noopener noreferrer"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  # Docker Compose:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="na"&gt;postgres&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres:15&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./data/postgres:/var/lib/postgresql/data&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;POSTGRES_USER=${POSTGRES_USER}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;POSTGRES_PASSWORD=${POSTGRES_PASSWORD}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;POSTGRES_DB=${POSTGRES_DB}&lt;/span&gt;

  &lt;span class="na"&gt;pgadmin&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dpage/pgadmin4&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pgadmin&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PGADMIN_DEFAULT_EMAIL=hyuken@gmail.com&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PGADMIN_DEFAULT_PASSWORD=admin&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;postgres&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  # Caddyfile
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  handle_path /pgadmin/&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    reverse_proxy pgadmin:80 &lt;span class="o"&gt;{&lt;/span&gt;
      header_up X-Script-Name /pgadmin
      header_up X-Scheme &lt;span class="o"&gt;{&lt;/span&gt;scheme&lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. PHPMyAdmin
&lt;/h2&gt;

&lt;h3&gt;
  
  
  # Docker Compose:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="na"&gt;mysql&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mysql:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mysql&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./data/mysql:/var/lib/mysql&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_DATABASE=${MYSQL_DATABASE}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_USER=${MYSQL_USER}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_PASSWORD=${MYSQL_PASSWORD}&lt;/span&gt;

  &lt;span class="na"&gt;phpmyadmin&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;phpmyadmin/phpmyadmin&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;phpmyadmin&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PMA_HOST=mysql&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PMA_USER=${MYSQL_USER}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PMA_PASSWORD=${MYSQL_PASSWORD}&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;mysql&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  # Caddyfile
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  handle_path /phpmyadmin/&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    reverse_proxy phpmyadmin:80
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Laravel
&lt;/h2&gt;

&lt;h3&gt;
  
  
  # Docker Compose:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="na"&gt;laravel&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;php:8.4-fpm&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;laravel&lt;/span&gt;
    &lt;span class="na"&gt;working_dir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/var/www/html&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./src/laravel:/var/www/html&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./log/laravel:/var/log/laravel&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./config/php/php.ini:/usr/local/etc/php/php.ini&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;APP_ENV=local&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;APP_DEBUG=true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_CONNECTION=mysql&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_HOST=mysql&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_PORT=3306&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_DATABASE=${MYSQL_DATABASE}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_USERNAME=${MYSQL_USER}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DB_PASSWORD=${MYSQL_PASSWORD}&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;mysql&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  # Caddyfile
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  handle_path /laravel/&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      root &lt;span class="k"&gt;*&lt;/span&gt; /var/www/html/public
      try_files &lt;span class="o"&gt;{&lt;/span&gt;path&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;path&lt;span class="o"&gt;}&lt;/span&gt;/ /index.php?&lt;span class="o"&gt;{&lt;/span&gt;query&lt;span class="o"&gt;}&lt;/span&gt;
      php_fastcgi laravel:9000
      file_server
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  # {laravel-apps-folder}/routes/web.php
&lt;/h3&gt;



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

use Illuminate\Support\Facades\Route;

// handle `laravel` sub directory
Route::prefix('laravel')-&amp;gt;group(function () {
    Route::get('/', function () {
        return view('welcome');
    });
});

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

&lt;/div&gt;



&lt;p&gt;[TODO]&lt;/p&gt;

&lt;h2&gt;
  
  
  GitLab
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker exec -it gitlab gitlab-ctl reconfigure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>php</category>
      <category>laravel</category>
      <category>docker</category>
    </item>
    <item>
      <title>Laravel subfolder with Caddy</title>
      <dc:creator>Agus Sudarmanto</dc:creator>
      <pubDate>Wed, 03 Sep 2025 15:24:06 +0000</pubDate>
      <link>https://dev.to/agussudarmanto/laravel-subfolder-with-caddy-1f2</link>
      <guid>https://dev.to/agussudarmanto/laravel-subfolder-with-caddy-1f2</guid>
      <description>&lt;p&gt;Steps:&lt;/p&gt;

&lt;h4&gt;
  
  
  # 1. Install &lt;strong&gt;&lt;code&gt;Composer&lt;/code&gt;&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Download composer script&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;curl &lt;span class="nt"&gt;-sS&lt;/span&gt; https://getcomposer.org/installer &lt;span class="nt"&gt;-o&lt;/span&gt; composer-setup.php
&lt;span class="c"&gt;# Setup composer and install itu to bin directory&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;php composer-setup.php &lt;span class="nt"&gt;--install-dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/bin &lt;span class="nt"&gt;--filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;composer
&lt;span class="c"&gt;# Check install is success&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;composer &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;span class="c"&gt;# Add composer bin to path&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'export PATH="$PATH:$HOME/.composer/vendor/bin"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  # 2. Install &lt;strong&gt;&lt;code&gt;Laravel Sail&lt;/code&gt;&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;composer require laravel/sail &lt;span class="nt"&gt;--dev&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;php artisan sail:install &lt;span class="nt"&gt;--devcontainer&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;sail up
&lt;span class="nv"&gt;$ &lt;/span&gt;sail down
&lt;span class="nv"&gt;$ &lt;/span&gt;sail up &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--force-recreate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;add the following to your .env file:&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;# APP_PORT={YOUR_APP_PORT}&lt;/span&gt;
&lt;span class="c"&gt;# example i use 8888 for Sail Port:&lt;/span&gt;
&lt;span class="nv"&gt;APP_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8888
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will take effect when you build (or rebuild using &lt;code&gt;sail build --no-cache&lt;/code&gt; or &lt;code&gt;sail up -d --force-recreate&lt;/code&gt;) your Sail container.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
