<?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: Fady Mondy</title>
    <description>The latest articles on DEV Community by Fady Mondy (@fadymondy).</description>
    <link>https://dev.to/fadymondy</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%2F964500%2F0739ec66-b01d-4d54-aafe-ff697df06ce4.jpeg</url>
      <title>DEV Community: Fady Mondy</title>
      <link>https://dev.to/fadymondy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fadymondy"/>
    <language>en</language>
    <item>
      <title>Ship a Laravel Admin Panel in a Day with Filament 5 and TomatoPHP</title>
      <dc:creator>Fady Mondy</dc:creator>
      <pubDate>Mon, 12 Oct 2026 11:19:25 +0000</pubDate>
      <link>https://dev.to/fadymondy/ship-a-laravel-admin-panel-in-a-day-with-filament-5-and-tomatophp-36o6</link>
      <guid>https://dev.to/fadymondy/ship-a-laravel-admin-panel-in-a-day-with-filament-5-and-tomatophp-36o6</guid>
      <description>&lt;p&gt;Every Laravel admin panel I've built starts with the same list: users and roles, app settings, English and Arabic, a media library, menus, some content pages, and sooner or later invoices. None of it is your product, but all of it has to work before anyone sees your product. I maintain TomatoPHP, 68 MIT-licensed Filament plugins, and this is the exact order I install them in on Filament 5 when I want that part done in a day. &lt;em&gt;(This post first appeared on &lt;a href="https://tomatophp.com/en/blog/laravel-admin-panel-in-a-day-filament-tomatophp?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;tomatophp.com&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://filamentphp.com" rel="noopener noreferrer"&gt;Filament&lt;/a&gt; gives you the panel. TomatoPHP gives you those modules as plain composer packages. There are 68 TomatoPHP Filament plugins, all MIT-licensed and released for &lt;strong&gt;Filament 5, Laravel 12–13 and PHP 8.2+&lt;/strong&gt;. Each one registers itself with your panel in one line.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you end up with
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;You need&lt;/th&gt;
&lt;th&gt;Plugin&lt;/th&gt;
&lt;th&gt;Package&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Users and roles&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tomatophp.com/en/plugins/filament-users?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;User Manager&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tomatophp/filament-users&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;App settings (site name, logo, colours, social links)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tomatophp.com/en/plugins/filament-settings-hub?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;Settings Hub&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tomatophp/filament-settings-hub&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;English + Arabic UI, translated from the panel&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://tomatophp.com/en/plugins/filament-translations?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;Translation Manager&lt;/a&gt; + &lt;a href="https://tomatophp.com/en/plugins/filament-language-switcher?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;Language Switcher&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;tomatophp/filament-translations&lt;/code&gt;, &lt;code&gt;tomatophp/filament-language-switcher&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Files and images&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tomatophp.com/en/plugins/filament-media-manager?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;Media Manager&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tomatophp/filament-media-manager&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Navigation menus&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tomatophp.com/en/plugins/filament-menus?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;Menu Builder&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tomatophp/filament-menus&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Posts, categories and pages&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tomatophp.com/en/plugins/filament-cms?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;CMS Builder&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tomatophp/filament-cms&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invoices and payments&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tomatophp.com/en/plugins/filament-invoices?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;Invoice Manager&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tomatophp/filament-invoices&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Installable app on phones&lt;/td&gt;
&lt;td&gt;&lt;a href="https://tomatophp.com/en/plugins/filament-pwa?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;PWA&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tomatophp/filament-pwa&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Try before you install:&lt;/strong&gt; &lt;a href="https://demo.tomatophp.com?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;demo.tomatophp.com&lt;/a&gt; runs 31 TomatoPHP plugins together on Filament 5, with a prefilled demo account. The data resets every hour, so click anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before you start
&lt;/h2&gt;

&lt;p&gt;Start from a fresh Laravel app with a Filament 5 panel:&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 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;Every plugin below follows the same three steps: &lt;code&gt;composer require&lt;/code&gt;, run its &lt;code&gt;install&lt;/code&gt; command, then add &lt;code&gt;-&amp;gt;plugin(...)&lt;/code&gt; to &lt;code&gt;app/Providers/Filament/AdminPanelProvider.php&lt;/code&gt;. Some also publish a migration. Each plugin page links to its README with the exact steps, so keep it open while you go.&lt;/p&gt;

&lt;h2&gt;
  
  
  Morning: the foundation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Users.&lt;/strong&gt; One package gives you the user resource. If you need roles, the README shows how to pair it with 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 tomatophp/filament-users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Settings.&lt;/strong&gt; Settings Hub stores site settings in the database and gives you a settings page in the panel. Several other TomatoPHP plugins (PWA, invoices) add their own pages to it, so install it early.&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 tomatophp/filament-settings-hub
php artisan filament-settings-hub:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Two languages.&lt;/strong&gt; The Translation Manager scans your code for &lt;code&gt;trans()&lt;/code&gt; and &lt;code&gt;__()&lt;/code&gt;, stores the strings in the database with a cache, and lets you translate them from the panel. The Language Switcher adds the toggle. English and Arabic work out of the box, including RTL.&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 tomatophp/filament-translations tomatophp/filament-language-switcher
php artisan filament-translations:install
php artisan filament-language-switcher:install
php artisan filament-translations:import
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Midday: content
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Media.&lt;/strong&gt; Media Manager puts a GUI on top of Spatie Media Library: folders, uploads, and a picker you can use in your own forms.&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 tomatophp/filament-media-manager
php artisan vendor:publish &lt;span class="nt"&gt;--provider&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Spatie&lt;/span&gt;&lt;span class="se"&gt;\M&lt;/span&gt;&lt;span class="s2"&gt;ediaLibrary&lt;/span&gt;&lt;span class="se"&gt;\M&lt;/span&gt;&lt;span class="s2"&gt;ediaLibraryServiceProvider"&lt;/span&gt; &lt;span class="nt"&gt;--tag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"medialibrary-migrations"&lt;/span&gt;
php artisan filament-media-manager:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Menus and pages.&lt;/strong&gt; The Menu Builder stores navigation in the database, so you can render it in the panel or in a Livewire component. The CMS Builder adds posts and categories. Both are translatable, so register &lt;code&gt;lara-zeus/spatie-translatable&lt;/code&gt; next to them.&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 tomatophp/filament-menus tomatophp/filament-cms
php artisan filament-menus:install
php artisan filament-cms:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One warning from the README: the CMS creates &lt;code&gt;categories&lt;/code&gt; and &lt;code&gt;posts&lt;/code&gt; tables. If your app already has those, rename yours first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Afternoon: money
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Invoices.&lt;/strong&gt; The Invoice Manager handles invoices and payments with multiple currencies and invoice types. Call &lt;code&gt;-&amp;gt;useSettingsHub()&lt;/code&gt; and its settings appear next to everything else.&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 tomatophp/filament-invoices
php artisan filament-invoices:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before the first invoice, tell it which models invoices are &lt;em&gt;from&lt;/em&gt; and &lt;em&gt;for&lt;/em&gt; (for example your company and your customers). The README shows the facade call to put in a service provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  Register everything
&lt;/h2&gt;

&lt;p&gt;With those installed, the panel provider looks roughly like this (check each README for the options you want):&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\Panel&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;panel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Panel&lt;/span&gt; &lt;span class="nv"&gt;$panel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;Panel&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;$panel&lt;/span&gt;
        &lt;span class="c1"&gt;// ...&lt;/span&gt;
        &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;plugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;\TomatoPHP\FilamentUsers\FilamentUsersPlugin&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&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;plugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;\TomatoPHP\FilamentSettingsHub\FilamentSettingsHubPlugin&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&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;allowSiteSettings&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;allowSocialMenuSettings&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;plugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;\TomatoPHP\FilamentTranslations\FilamentTranslationsPlugin&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&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;plugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;\TomatoPHP\FilamentLanguageSwitcher\FilamentLanguageSwitcherPlugin&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&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;plugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;\TomatoPHP\FilamentMediaManager\FilamentMediaManagerPlugin&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&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;plugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;\LaraZeus\SpatieTranslatable\SpatieTranslatablePlugin&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&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;defaultLocales&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'en'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ar'&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;plugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;\TomatoPHP\FilamentMenus\FilamentMenusPlugin&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&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;plugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;\TomatoPHP\FilamentCms\FilamentCMSPlugin&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&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;useCategory&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;usePost&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;plugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;\TomatoPHP\FilamentInvoices\FilamentInvoicesPlugin&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;make&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;useSettingsHub&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 &lt;code&gt;php artisan migrate&lt;/code&gt;, sign in, and you have a bilingual admin panel with users, settings, media, menus, content and invoices. That is the part every client expects and nobody pays extra for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this won't do for you
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It won't design your domain.&lt;/strong&gt; The plugins cover the generic modules. Your orders, bookings or patients are still your code, and that's where the day you saved should go.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read the README of each plugin.&lt;/strong&gt; Some publish migrations or need a companion package. The compatibility table at the top tells you which major version matches your Filament.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not every repo is a finished plugin.&lt;/strong&gt; The TomatoPHP organisation has more repos than the 68 released Filament plugins. Use what's listed on the &lt;a href="https://tomatophp.com/en/plugins?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;plugins page&lt;/a&gt;, which is the maintained set.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How the plugins are maintained
&lt;/h2&gt;

&lt;p&gt;During the Filament 5 upgrade, every plugin went through the same release gate before it was tagged: open issues fixed and community PRs merged with credit, a green Pest suite with a regression test for each fix, and then a real install in a sandbox Laravel 13 + Filament 5 app where a smoke test renders every panel page with zero skipped. The same pass found and fixed real security bugs, for example unescaped user HTML in the docs, blog and notes plugins, and payment gateway secrets that were reaching the browser.&lt;/p&gt;

&lt;p&gt;The packages have more than 1.7 million installs on Packagist, and the source is on &lt;a href="https://github.com/tomatophp" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next steps:&lt;/strong&gt; &lt;a href="https://tomatophp.com/en/plugins?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;browse all plugins&lt;/a&gt; · &lt;a href="https://tomatophp.com/en/docs?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;read the docs&lt;/a&gt; · &lt;a href="https://demo.tomatophp.com?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;try the live demo&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://tomatophp.com/en/blog/laravel-admin-panel-in-a-day-filament-tomatophp?utm_source=devto&amp;amp;utm_medium=syndication&amp;amp;utm_campaign=tomatophp-launch-oct26" rel="noopener noreferrer"&gt;tomatophp.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>filament</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How to Ship an Official MCP Server for Your SaaS in 2 Weeks</title>
      <dc:creator>Fady Mondy</dc:creator>
      <pubDate>Sun, 11 Oct 2026 12:39:50 +0000</pubDate>
      <link>https://dev.to/fadymondy/how-to-ship-an-official-mcp-server-for-your-saas-in-2-weeks-47mi</link>
      <guid>https://dev.to/fadymondy/how-to-ship-an-official-mcp-server-for-your-saas-in-2-weeks-47mi</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://fadymondy.com/en/blog/ship-official-mcp-server-for-saas-in-2-weeks?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=launch-oct26" rel="noopener noreferrer"&gt;fadymondy.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Your customers are starting to ask a new question in sales calls and support tickets: &lt;em&gt;"Does it work with Claude?"&lt;/em&gt; Sometimes it is ChatGPT or Cursor instead, but the request is the same. They want to ask their AI assistant to do real work inside your product, without copying data between tabs.&lt;/p&gt;

&lt;p&gt;The standard way to make that happen is an &lt;strong&gt;MCP server&lt;/strong&gt;. The Model Context Protocol is the open protocol AI assistants use to discover and call tools in other products. If you already have a decent API, an official MCP server is a small, well-bounded project. Here is how I plan and ship one in about two weeks, and what to decide before anyone writes code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an MCP server actually is (for a SaaS team)
&lt;/h2&gt;

&lt;p&gt;An MCP server is a thin layer that sits &lt;strong&gt;beside&lt;/strong&gt; your product and talks to your existing API. It exposes a short list of &lt;em&gt;tools&lt;/em&gt;, each with a name, a plain-language description and a typed input schema. The assistant reads those descriptions, decides which tool fits the user's request, and calls it.&lt;/p&gt;

&lt;p&gt;Three things follow from that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Your backend doesn't change.&lt;/strong&gt; The server is a client of your API, like your web app is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your language doesn't matter.&lt;/strong&gt; I usually build in TypeScript or Go, or PHP for Laravel products, whatever your team can maintain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool design matters more than code volume.&lt;/strong&gt; Most of the work is deciding what the assistant should be able to do, and describing it so the model picks the right tool.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are two common ways to run one: &lt;strong&gt;remote&lt;/strong&gt; (a hosted HTTP endpoint your cloud customers connect to with OAuth) and &lt;strong&gt;local&lt;/strong&gt; (a package the user runs on their machine, which suits self-hosted installs). Many SaaS products start with remote.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "official" matters
&lt;/h2&gt;

&lt;p&gt;If you don't ship one, someone else might. Community MCP servers for popular products appear quickly, and they usually ask users to paste a full-access API key into a config file. Your customers then run unvetted code with their production credentials, and you get the support tickets.&lt;/p&gt;

&lt;p&gt;An official server lets you control three things: which actions are exposed, how authentication works, and how your product is described to the assistant.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 2-week plan
&lt;/h2&gt;

&lt;p&gt;Two weeks is realistic when the API exists and is documented, and the first version focuses on the 10–20 actions people actually ask for. Here is the sequence I use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 0: a one-page tool spec (before any commitment)
&lt;/h3&gt;

&lt;p&gt;Before building, I read your API docs and write a one-page spec. It lists the proposed tools, what each one does, its inputs, whether it reads or writes, and which auth scope it needs. It is the cheapest way for both sides to see whether the project makes sense.&lt;/p&gt;

&lt;p&gt;A good spec answers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are the five things a user will ask the assistant to do on day one?&lt;/li&gt;
&lt;li&gt;Which of those are read-only and which change data?&lt;/li&gt;
&lt;li&gt;Which actions are destructive or expensive and need a clear warning?&lt;/li&gt;
&lt;li&gt;What does the assistant need to &lt;em&gt;find&lt;/em&gt; things (search, filters, IDs)?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Days 1–3: tool design and scaffolding
&lt;/h3&gt;

&lt;p&gt;Turn the spec into tool definitions. Keep the list short and the names obvious. &lt;strong&gt;Don't mirror every endpoint.&lt;/strong&gt; An assistant does better with &lt;code&gt;find_customer&lt;/code&gt; and &lt;code&gt;create_invoice&lt;/code&gt; than with forty CRUD endpoints that differ by one field.&lt;/p&gt;

&lt;p&gt;Write the descriptions as instructions to the model: when to use the tool, what it returns, and what &lt;em&gt;not&lt;/em&gt; to use it for. In my experience this is the work that most changes how well the server performs.&lt;/p&gt;

&lt;p&gt;On my own servers, tools live in a &lt;strong&gt;registry&lt;/strong&gt;: one list the protocol layer reads. Adding a tool later means adding one entry, not touching the transport or auth plumbing. It keeps the server easy to grow after handover.&lt;/p&gt;

&lt;h3&gt;
  
  
  Days 4–7: authentication and permissions
&lt;/h3&gt;

&lt;p&gt;This is where an official server earns its name.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OAuth for remote servers.&lt;/strong&gt; The MCP authorization spec is built on OAuth 2.1. On &lt;a href="https://zekra.dev/en/docs/mcp" rel="noopener noreferrer"&gt;Zekra&lt;/a&gt;'s remote MCP endpoint I implemented the full flow: PKCE (S256), dynamic client registration and per-brain consent, with access re-checked against current membership on every call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scoped API keys as a fallback.&lt;/strong&gt; In &lt;a href="https://moharrik.com" rel="noopener noreferrer"&gt;Moharrik&lt;/a&gt;, keys are read-only by default and expire after 90 days.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read and write separated.&lt;/strong&gt; Mark read-only tools as read-only (MCP tool annotations support &lt;code&gt;readOnlyHint&lt;/code&gt; and &lt;code&gt;destructiveHint&lt;/code&gt;). On Zekra, adding read-only annotations let AI coding agents and other MCP clients run recall and list tools without an approval prompt, while writes still ask.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make agent actions traceable.&lt;/strong&gt; When an assistant writes data, record that it was an agent. On my issue tracker, comments created over MCP are stored with &lt;code&gt;author_kind = 'agent'&lt;/code&gt;, so a human can always tell them apart.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Days 8–10: test against real assistants
&lt;/h3&gt;

&lt;p&gt;Unit tests aren't enough. Connect the server to Claude, ChatGPT and Cursor and run the prompts from the spec. Watch for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the assistant picking the wrong tool (fix the description, not the model);&lt;/li&gt;
&lt;li&gt;tools returning too much data (paginate and trim; context is not free);&lt;/li&gt;
&lt;li&gt;vague errors (return messages the assistant can act on, like "customer not found, try search_customers").&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Days 11–14: docs, listing and handover
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Setup guides&lt;/strong&gt; for each assistant: one page each, with the exact config.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A permissions page&lt;/strong&gt; that explains in plain language what each scope allows. In Moharrik this explainer is generated from the tool registry, so it can't drift from the code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Listings&lt;/strong&gt; in the main MCP directories, so users can find the official server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handover.&lt;/strong&gt; The repository, deployment notes and a short walkthrough. The code ships under your name and licence.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What stretches past two weeks
&lt;/h2&gt;

&lt;p&gt;Be honest about scope up front. These usually add time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no public API yet, or an API that can't do what users ask;&lt;/li&gt;
&lt;li&gt;complex multi-tenant permissions that aren't modelled in the API;&lt;/li&gt;
&lt;li&gt;long-running jobs that need progress reporting or webhooks;&lt;/li&gt;
&lt;li&gt;a self-hosted package &lt;em&gt;and&lt;/em&gt; a remote endpoint in the first release.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of them blocks a project. They belong in the spec so the plan and the price stay fixed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist before you start
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Your API is documented and stable enough to build against.&lt;/li&gt;
&lt;li&gt;[ ] You have listed the top 5 user requests the assistant should handle.&lt;/li&gt;
&lt;li&gt;[ ] You know which actions must never run without a confirmation.&lt;/li&gt;
&lt;li&gt;[ ] You have decided on remote, local or both.&lt;/li&gt;
&lt;li&gt;[ ] Someone on your team will own the server after handover.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Proof, not promises
&lt;/h2&gt;

&lt;p&gt;I build MCP servers for my own products, and they run in production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://fadymondy.com/en/projects/orchestra-mcp" rel="noopener noreferrer"&gt;Orchestra MCP&lt;/a&gt;&lt;/strong&gt;: an AI-agentic IDE framework with a plugin-host architecture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://fadymondy.com/en/projects/cabrain" rel="noopener noreferrer"&gt;Zekra&lt;/a&gt;&lt;/strong&gt;: shared memory for AI agents, served over a remote MCP endpoint with OAuth 2.1.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://moharrik.com" rel="noopener noreferrer"&gt;Moharrik&lt;/a&gt;&lt;/strong&gt;: a CRM with inbox and WhatsApp that is fully operable over MCP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://mcp.nasaqui.com" rel="noopener noreferrer"&gt;Nasaq UI&lt;/a&gt;&lt;/strong&gt;: an open-source design system with its own MCP server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want the same for your product, see &lt;a href="https://fadymondy.com/en/services/mcp-server-development?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=launch-oct26" rel="noopener noreferrer"&gt;MCP server development&lt;/a&gt;. The process starts with a free one-page tool spec.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>saas</category>
      <category>api</category>
    </item>
    <item>
      <title>Why You Should Pay for Open Source</title>
      <dc:creator>Fady Mondy</dc:creator>
      <pubDate>Tue, 08 Oct 2024 13:59:23 +0000</pubDate>
      <link>https://dev.to/fadymondy/why-you-should-pay-for-open-source-51ml</link>
      <guid>https://dev.to/fadymondy/why-you-should-pay-for-open-source-51ml</guid>
      <description>&lt;p&gt;Almost every developer uses open-source projects daily, whether it's writing code in VS Code, speeding up development with TailwindCSS, or building robust web applications with Laravel, the most popular PHP framework. And let’s not forget FilamentPHP for admin panel creation.&lt;/p&gt;

&lt;p&gt;These projects aren’t built by ghosts; they’re created by people—some of the best in their fields. They aren’t just doing their jobs; they’re making the work of others easier, faster, and more efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case Study
&lt;/h2&gt;

&lt;p&gt;Let’s consider a scenario where the Laravel framework didn’t exist. Before Laravel, building a stable, secure, and SOLID-compliant MVC structure with PHP 5.7 was a daunting task. However, Taylor Otwell recognized this challenge and, without asking for payment, worked hard to create Laravel, revolutionizing PHP development.&lt;/p&gt;

&lt;p&gt;Imagine if Taylor hadn’t received community support—Laravel, and perhaps even PHP itself, might have faded away. Thankfully, he did get support, grew a team, and even launched open-source tools like "Herd" for free. Today, Laravel receives substantial funding ($57M), allowing it to thrive while remaining open and free to use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is Open Source Really Free?
&lt;/h2&gt;

&lt;p&gt;Most open-source projects operate under MIT licenses, meaning they’re free to use, modify, or clone. But “free to use” doesn’t mean “free of cost.” Open-source developers invest their time and expertise to create and maintain these projects. If you’re using open-source software and earning from it, you should sponsor or contribute to these projects, supporting the people behind them.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Can You Contribute?
&lt;/h2&gt;

&lt;p&gt;Visit GitHub, check out the repositories you use daily, and support their creators. Even $1 can make a difference to a developer, showing them that their work is valued.&lt;/p&gt;

&lt;p&gt;If you can’t contribute financially, help by sharing their work. Spread the word through blogs, social media, or even videos. Exposure can drive others to contribute, ensuring the continued growth of open-source projects.&lt;/p&gt;

&lt;p&gt;Let’s support the community so we can continue to benefit from more innovative open-source tools!&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>opensource</category>
      <category>contributorswanted</category>
    </item>
    <item>
      <title>Join TomatoPHP Community</title>
      <dc:creator>Fady Mondy</dc:creator>
      <pubDate>Sun, 06 Oct 2024 13:51:17 +0000</pubDate>
      <link>https://dev.to/fadymondy/join-tomatophp-community-32k3</link>
      <guid>https://dev.to/fadymondy/join-tomatophp-community-32k3</guid>
      <description>&lt;p&gt;Hello, Developers!&lt;/p&gt;

&lt;p&gt;We are thrilled to announce the launch of the TomatoPHP Public Profile! As we continue to grow, our goal is to make the TomatoPHP community more engaging and feature-rich, offering tools and opportunities that help developers thrive.&lt;/p&gt;

&lt;p&gt;But we aren’t doing this alone. Our progress is powered by the collective efforts of our incredible team, contributors, and sponsors. To foster even more collaboration and engagement, we’ve introduced a new feature: Public Profiles.&lt;/p&gt;

&lt;p&gt;With this feature, you can now join our community and create demos of our packages. But this is just the beginning. As we continue to develop, we plan to roll out even more exciting features, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create and share blog posts within the community.&lt;/li&gt;
&lt;li&gt;Submit your open-source projects to be featured under the TomatoPHP umbrella.&lt;/li&gt;
&lt;li&gt;Generate a personalized QR code for easy sharing of your public profile.&lt;/li&gt;
&lt;li&gt;Post sticky notes and share them with friends via a public URL.&lt;/li&gt;
&lt;li&gt;Engage with community activity, including posts, comments, and likes.&lt;/li&gt;
&lt;li&gt;Manage your invoices and other essential tools directly from your profile.&lt;/li&gt;
&lt;li&gt;Track and manage your GitHub open-source projects and issues seamlessly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We believe these features will help make our community more connected, collaborative, and productive. We can’t wait to see how you’ll use these new tools to contribute to the TomatoPHP ecosystem!&lt;/p&gt;

&lt;p&gt;All of these features is open-source and you can check our &lt;a href="https://www.github.com/tomatophp/tomatophp.com" rel="noopener noreferrer"&gt;repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you for being part of this journey. Together, we’re building something special. &lt;a href="https://tomatophp.com/user/register" rel="noopener noreferrer"&gt;Join Us&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>TomatoPHP Filament Plugins</title>
      <dc:creator>Fady Mondy</dc:creator>
      <pubDate>Wed, 19 Jun 2024 19:05:45 +0000</pubDate>
      <link>https://dev.to/fadymondy/tomatophp-filament-plugins-30ic</link>
      <guid>https://dev.to/fadymondy/tomatophp-filament-plugins-30ic</guid>
      <description>&lt;p&gt;Hello, Laravel and PHP enthusiasts!&lt;/p&gt;

&lt;p&gt;We are excited to announce that we are enhancing our contributions to the Laravel &amp;amp; PHP community. Our team is developing a series of powerful packages and plugins for FilamentPHP, bringing the robust features of the TomatoPHP framework directly to your Filament applications. Stay tuned for more updates and take your Filament apps to the next level with TomatoPHP!&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Plugin as a Module
&lt;/h2&gt;

&lt;p&gt;before use this feature please make sure that you are publish the config file of &lt;code&gt;modules.php&lt;/code&gt; using this command&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 vendor:publish &lt;span class="nt"&gt;--provider&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Nwidart&lt;/span&gt;&lt;span class="se"&gt;\M&lt;/span&gt;&lt;span class="s2"&gt;odules&lt;/span&gt;&lt;span class="se"&gt;\L&lt;/span&gt;&lt;span class="s2"&gt;aravelModulesServiceProvider"&lt;/span&gt; &lt;span class="nt"&gt;--tag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"config"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;on the config file edit this &lt;code&gt;'enabled' =&amp;gt; true,&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="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="cm"&gt;/*
    |--------------------------------------------------------------------------
    | Scan Path
    |--------------------------------------------------------------------------
    |
    | Here you define which folder will be scanned. By default will scan vendor
    | directory. This is useful if you host the package in packagist website.
    |
    */&lt;/span&gt;
    &lt;span class="s1"&gt;'scan'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'enabled'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'paths'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="nf"&gt;base_path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'vendor/*/*'&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="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;all of this plugin can work as a module inside your app using our &lt;code&gt;filament-plugins&lt;/code&gt; package and use this command&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 filament-plugins:publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and type the name of the plugin you went to publish, if you don't know the plugin name you can use the list of all plugins using this command&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 module:list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Plugins List
&lt;/h2&gt;

&lt;p&gt;here is the plugins list you can use.&lt;/p&gt;

&lt;h4&gt;
  
  
  Filament Users
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzeu05b9rlxzrypkom0u1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzeu05b9rlxzrypkom0u1.jpg" alt="Filament Users" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;User Table Resource with a lot of package integrations&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-users" rel="noopener noreferrer"&gt;Filament Users V2&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.github.com/3x1io/filament-user" rel="noopener noreferrer"&gt;Filament Users V1&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Translations
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiktpeq8824uyrehcbzyf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiktpeq8824uyrehcbzyf.jpg" alt="Filament Translations" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Manage your translation with DB and cache, you can scan your language tags like trans(), __(), and get the string inside and translate them using UI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-translations" rel="noopener noreferrer"&gt;Filament Translations V2&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.github.com/3x1io/filament-translations" rel="noopener noreferrer"&gt;Filament Translations V1&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Plugins
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswlyb0j6ntdikk2vcvwt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswlyb0j6ntdikk2vcvwt.jpg" alt="Filament Plugins" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Manage your modules as a plugin system with a plugin generator&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-plugins" rel="noopener noreferrer"&gt;Filament Plugins&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Media Manager
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffsc50j852dq72itrer5i.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffsc50j852dq72itrer5i.jpg" alt="Filament Media Manager" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Manage your media files using spatie media library with easy to use GUI for FilamentPHP&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-media-manager" rel="noopener noreferrer"&gt;Filament Media Manager&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Developer Gate
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxb3z0advtrg9b1e62n9r.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxb3z0advtrg9b1e62n9r.jpg" alt="Filament Developer Gate" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Secure your selected route by using a middleware with a static password for developers only&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-developer-gate" rel="noopener noreferrer"&gt;Filament Developer Gate&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Accounts
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcu5p3sawfb5k83t1989l.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcu5p3sawfb5k83t1989l.jpg" alt="Filament Accounts" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;full accounts manager with API/Notifications/Contacts to manage your contacts and accounts&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-accounts" rel="noopener noreferrer"&gt;Filament Accounts&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Wallet
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ulx708rtsbzqaelj1xs.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ulx708rtsbzqaelj1xs.jpg" alt="Filament Wallet" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Account Balance / Wallets Manager For FilamentPHP and Filament Account Builder&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-wallet" rel="noopener noreferrer"&gt;Filament Wallet&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Alerts
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ny00cbp2i8cta22kn28.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ny00cbp2i8cta22kn28.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Send notifications to users using notification templates and multi-notification channels&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-alerts" rel="noopener noreferrer"&gt;Filament Alerts&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament FCM
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs7rbjdbq70b6waabvtec.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs7rbjdbq70b6waabvtec.jpg" alt="Filament FCM" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Firebase Cloud Messaging integration to Native FilamentPHP Notification Package&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-fcm" rel="noopener noreferrer"&gt;Filament FCM&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Helpers
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4opwkb5dk3dwfczcrye.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4opwkb5dk3dwfczcrye.jpg" alt="Filament Helpers" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Helper Class Generator to manage your forms and table inside your filament app&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-helpers" rel="noopener noreferrer"&gt;Filament Helpers&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Icons
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07cahx9w5n8z8haa31u5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F07cahx9w5n8z8haa31u5.jpg" alt="Filament Icons" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Picker &amp;amp; Table Column &amp;amp; Icons Provider for FilamentPHP&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-icons" rel="noopener noreferrer"&gt;Filament Icons&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament CMS
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcyp9syfkyo4qzh39h1hr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcyp9syfkyo4qzh39h1hr.jpg" alt="Filament CMS" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Full CMS System with easy-to-use page builder &amp;amp; theme manager for FilamentPHP&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-cms" rel="noopener noreferrer"&gt;Filament CMS&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Types
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxfkiut2b5hnul2400au2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxfkiut2b5hnul2400au2.jpg" alt="Filament Types" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Manage any type on your app in the Database with easy Resources for FilamentPHP&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-types" rel="noopener noreferrer"&gt;Filament Types&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Menus
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsay6m60iskk29bq1wsst.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsay6m60iskk29bq1wsst.jpg" alt="Filament Menus" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Menu Database builder to use as a navigation on Filament Panel or as a Livewire Component&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-menus" rel="noopener noreferrer"&gt;Filament Menus&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Browser
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivw8rhnxpauzt3dkinsb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivw8rhnxpauzt3dkinsb.jpg" alt="Filament Browser" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;File &amp;amp; Folders &amp;amp; Media Browser With Code Editor&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-browser" rel="noopener noreferrer"&gt;Filament Browser&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Artisan
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9g5cqgcsocbvhcv34zlu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9g5cqgcsocbvhcv34zlu.jpg" alt="Filament Artisan" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simple yet powerful library for running some artisan commands. this package is a fork of artisan-gui with some custom for filament UI&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-artisan" rel="noopener noreferrer"&gt;Filament Artisan&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Settings Hub
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feb1lleeoi1qmyz7im69r.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feb1lleeoi1qmyz7im69r.jpg" alt="Filament Settings Hub" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Manage your app settings with GUI and helpers&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-settings-hub" rel="noopener noreferrer"&gt;Filament Settings Hub&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Locations
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft0896iw2iooi3twzm69e.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft0896iw2iooi3twzm69e.jpg" alt="Filament Locations" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Database Seeds for Locations for FilamentPHP&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-locations" rel="noopener noreferrer"&gt;Filament Locations&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Splade
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyujd56ucc67qglcy4809.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyujd56ucc67qglcy4809.jpg" alt="Filament Splade" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Integration of Splade Vue Components for Filament&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-splade" rel="noopener noreferrer"&gt;Filament Splade&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament API
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7mble5h9c0mitpqvlbn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7mble5h9c0mitpqvlbn.jpg" alt="Filament API" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Generate APIs from your filament resource using a single line of code&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-api" rel="noopener noreferrer"&gt;Filament API&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament E-commerce
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxvqranb45pdoewpx544q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxvqranb45pdoewpx544q.jpg" alt="Filament Ecommerce" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Build your own e-commerce store with FilamentPHP with the Power of Tomato CMS Builder&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-ecommerce" rel="noopener noreferrer"&gt;Filament E-commerce&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Twilio
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F441d027ezcqg7shxymnu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F441d027ezcqg7shxymnu.jpg" alt="Filament Twilio" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Send Whatsapp messages using Twilio and native filament Notification Facade class&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-twilio" rel="noopener noreferrer"&gt;Filament Twilio&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Discord
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiafflbuv7e945bgnkaox.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiafflbuv7e945bgnkaox.jpg" alt="Filament Discord" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Send Notification to discord channel Webhook using native FilamentPHP Notification Facade class&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-discord" rel="noopener noreferrer"&gt;Filament Discord&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Translation Component
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frahpfz80ij394ix72jg3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frahpfz80ij394ix72jg3.jpg" alt="Filament Translation Component" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Translation Component as a key/value to use it with Spatie Translatable FilamentPHP Plugin&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-translation-component" rel="noopener noreferrer"&gt;Filament Translation Component&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Filament Sticky Notes
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7vns9n15og3czd46v6f.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7vns9n15og3czd46v6f.jpg" alt="Filament Sticky Notes" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add Sticky Notes to your FilamentPHP dashboard with tons of options and style&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-notes" rel="noopener noreferrer"&gt;Filament Sticky Notes&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Filament Invoices Manager
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwh4gpwmzugm8rakux8a7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwh4gpwmzugm8rakux8a7.jpg" alt="Screenshot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Generate and manage your invoices / payments using multi currencies and multi types in FilamentPHP&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-invoices" rel="noopener noreferrer"&gt;Filament Invoices Manager&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Filament PWA
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjtrlzt79uv7l52vgf7il.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjtrlzt79uv7l52vgf7il.jpg" alt="Screenshot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;get a PWA feature on your FilamentPHP app with settings from panel&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-pwa" rel="noopener noreferrer"&gt;Filament PWA&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Filament Simple Theme
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpq4tfkt9bodvj4ww2wsc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpq4tfkt9bodvj4ww2wsc.jpg" alt="Screenshot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A simple theme for FilamentPHP with custom user menu in sidebar&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-simple-theme" rel="noopener noreferrer"&gt;Filament Simple Theme&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Filament Subscriptions
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdj2b7q8qm34a6amvinod.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdj2b7q8qm34a6amvinod.jpg" alt="Screenshot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Manage subscriptions and feature access with customizable plans in FilamentPHP&lt;/p&gt;

&lt;p&gt;thanks for &lt;a href="https://github.com/laravelcm/laravel-subscriptions" rel="noopener noreferrer"&gt;Laravel Subscriptions&lt;/a&gt; you can review it before use this package.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-subscriptions" rel="noopener noreferrer"&gt;Filament Subscriptions&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Filament POS
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5bzq7467zsz0mp4lau1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5bzq7467zsz0mp4lau1.jpg" alt="Screenshot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;POS System for FilamentPHP with a lot of features and integration with Ecommerce Builder&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-pos" rel="noopener noreferrer"&gt;Filament POS&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Filament Tenancy
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ov0dcha7x69hjac1m7w.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ov0dcha7x69hjac1m7w.jpg" alt="Screenshot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tenancy multi-database integration for FilamentPHP&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-tenancy" rel="noopener noreferrer"&gt;Filament Tenancy&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Filament Withdrawals
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1cyx1rvh7he0zvyh7xq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1cyx1rvh7he0zvyh7xq.jpg" alt="Screenshot" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Manage your withdrawals in Filament&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-withdrawals" rel="noopener noreferrer"&gt;Filament Withdrawals&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Filament Payment Manager
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv1rapd1rzqgsqgfo35mk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv1rapd1rzqgsqgfo35mk.jpg" alt="Screenshot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Manage your payments inside FilamentPHP app with multi payment gateway integration&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-payments" rel="noopener noreferrer"&gt;Filament Payment Manager&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Filament User Logger
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6a1l23h4olfwa310518.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6a1l23h4olfwa310518.jpg" alt="Screenshot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Log all user activity to file or log driver and preview it on your FilamentPHP panel&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-logger" rel="noopener noreferrer"&gt;Filament User Logger&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Filament SEO Manager
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fry3jynjunnogi3dg91er.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fry3jynjunnogi3dg91er.jpg" alt="Screenshot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Manage and generate SEO tags and integrate your website with Google SEO services&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-seo" rel="noopener noreferrer"&gt;Filament SEO Manager&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Filament Documents Editor
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9bvfzaqyv55ah2v41olk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9bvfzaqyv55ah2v41olk.jpg" alt="Screenshot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Manage your documents and contracts all in one place with template builder&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-docs" rel="noopener noreferrer"&gt;Filament Documents Editor&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Filament Social Media Manager
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fytod497h011bmaoue2fv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fytod497h011bmaoue2fv.jpg" alt="Screenshot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Integration of social media platform actions and auth to your FilamentPHP panel&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-social" rel="noopener noreferrer"&gt;Filament Social Media Manager&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Filament Blog Template
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmud8mrjq4z687cyp5afe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmud8mrjq4z687cyp5afe.jpg" alt="Screenshot" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Frontend for CMS Builder to build a blog and personal websites&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.github.com/tomatophp/filament-blog" rel="noopener noreferrer"&gt;Filament Blog Template&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Support
&lt;/h3&gt;

&lt;p&gt;you can join our discord server to get support &lt;a href="https://discord.gg/Xqmt35Uh" rel="noopener noreferrer"&gt;TomatoPHP&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Docs
&lt;/h3&gt;

&lt;p&gt;you can check docs of all packages on &lt;a href="https://docs.tomatophp.com" rel="noopener noreferrer"&gt;Docs&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Credits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://wa.me/+201207860084" rel="noopener noreferrer"&gt;Fady Mondy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wa.me/201091523908" rel="noopener noreferrer"&gt;Abdelmjid&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Changelog
&lt;/h3&gt;

&lt;p&gt;Please see &lt;a href="https://github.com/tomatophp/awesome/edit/main/CHANGELOG.md" rel="noopener noreferrer"&gt;CHANGELOG&lt;/a&gt; for more information on what has changed recently.&lt;/p&gt;

&lt;h3&gt;
  
  
  License
&lt;/h3&gt;

&lt;p&gt;The MIT License (MIT). Please see &lt;a href="https://github.com/tomatophp/awesome/edit/main/LICENSE.md" rel="noopener noreferrer"&gt;License File&lt;/a&gt; for more information.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>filament</category>
      <category>tomato</category>
      <category>php</category>
    </item>
    <item>
      <title>CircleXO Open Source Social Network Build In TomatoPHP</title>
      <dc:creator>Fady Mondy</dc:creator>
      <pubDate>Thu, 28 Mar 2024 06:50:54 +0000</pubDate>
      <link>https://dev.to/fadymondy/circlexo-open-source-social-network-build-in-tomatophp-9g6</link>
      <guid>https://dev.to/fadymondy/circlexo-open-source-social-network-build-in-tomatophp-9g6</guid>
      <description>&lt;p&gt;It's Circles&lt;/p&gt;

&lt;p&gt;Open Source Social Network built for Businesses, with tons of apps&lt;/p&gt;

&lt;h2&gt;
  
  
  What is CircleXO?
&lt;/h2&gt;

&lt;p&gt;CircleXO is an open source social media platform build for Businesses&lt;/p&gt;

&lt;h2&gt;
  
  
  Why i must use CircleXO?
&lt;/h2&gt;

&lt;p&gt;if you like to share your works, games, media to the world with a full custom open source platform, so it's a must&lt;/p&gt;

&lt;h2&gt;
  
  
  How CircleXO Work?
&lt;/h2&gt;

&lt;p&gt;Our platform built in TomatoPHP a full-stack Laravel framework, built for make development more fast and easy&lt;/p&gt;

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

&lt;p&gt;Feature Highlights&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Listing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Generate listings of your interests, skills and links easily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;QR Generator&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Have a QR code that you can use to send someone your profile or connect with them instantly, enabling quick networking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Social Network&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Be part of a vibrant community where you can interact and discuss matters, share updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open Source&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's built on open-source platform, ensuring transparency and continuous improvement through community involvement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Messages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use private messaging to communicate people.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sponsoring&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Get your projects, events or initiatives sponsored.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install on your local
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git@github.com:tomatophp/circlexo.git
&lt;span class="nb"&gt;cd &lt;/span&gt;circlexo
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;create new database &lt;code&gt;circlexo&lt;/code&gt; and update &lt;code&gt;.env&lt;/code&gt; file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_DATABASE=circlexo
DB_USERNAME=root
DB_PASSWORD=12345678
&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;composer &lt;span class="nb"&gt;install
&lt;/span&gt;php artisan key:generate
php artisan config:cache
php artisan migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;build assets&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn
yarn build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create New Account
&lt;/h2&gt;

&lt;p&gt;you can create a new account by using this &lt;a href="https://circlexo.com/auth/register" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Join Open Source
&lt;/h2&gt;

&lt;p&gt;you can join us on GitHub on this &lt;a href="https://github.com/tomatophp/circlexo" rel="noopener noreferrer"&gt;link&lt;/a&gt; &lt;/p&gt;

</description>
      <category>laravel</category>
      <category>opensource</category>
      <category>splade</category>
      <category>tomatophp</category>
    </item>
    <item>
      <title>TomatoPHP SaaS Demo</title>
      <dc:creator>Fady Mondy</dc:creator>
      <pubDate>Wed, 14 Feb 2024 11:55:11 +0000</pubDate>
      <link>https://dev.to/fadymondy/tomatophp-saas-demo-n7e</link>
      <guid>https://dev.to/fadymondy/tomatophp-saas-demo-n7e</guid>
      <description>&lt;p&gt;It's finally here – welcome to the TomatoPHP SaaS Demo!&lt;/p&gt;

&lt;p&gt;Now, you have the opportunity to create your very own SaaS application for free. Explore all the incredible features and packages TomatoPHP has to offer. And if you encounter any errors while exploring our package repository, please don't hesitate to report them.&lt;/p&gt;

&lt;p&gt;Start building your demo now at &lt;a href="https://tomatophp.com/" rel="noopener noreferrer"&gt;https://tomatophp.com/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thank you for your continued support – let's embark on this exciting journey together!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Build E-Commerce System in Seconds With TomatoPHP</title>
      <dc:creator>Fady Mondy</dc:creator>
      <pubDate>Wed, 31 Jan 2024 12:26:42 +0000</pubDate>
      <link>https://dev.to/fadymondy/build-e-commerce-system-in-seconds-with-tomatophp-50j9</link>
      <guid>https://dev.to/fadymondy/build-e-commerce-system-in-seconds-with-tomatophp-50j9</guid>
      <description>&lt;p&gt;hi, community.&lt;/p&gt;

&lt;p&gt;Introducing #tomatophp, a cutting-edge open-source Laravel package designed to streamline development within the VILT stack environment. This innovative ecosystem leverages the power of Splade to effortlessly generate modern, high-performance single-page applications (SPAs) using only Blade files. #tomatophp redefines the development experience, making it both efficient and enjoyable.&lt;/p&gt;

&lt;p&gt;As we progress, we continuously enhance our ecosystem by incorporating additional features into our plugins. Presently, we have developed a comprehensive e-commerce system using these plugins. In this article, we will guide you through the implementation process, demonstrating how you can seamlessly integrate a robust e-commerce system into your application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Tomato Admin
&lt;/h2&gt;

&lt;p&gt;you need to install tomato-admin plugin on your fresh Laravel app so let's create a new Laravel app.&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 tomato
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;if you don't have an environment for Laravel you can use this &lt;a href="https://docs.tomatophp.com/get-started/environment-setup" rel="noopener noreferrer"&gt;doc&lt;/a&gt; to build one on your Ubuntu Linux.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;now cd inside your project folder change .env of your database and make sure that your Laravel app is running and the database is connected, you can check that by running migrations&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 migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now let's start installing tomato-admin&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 tomatophp/tomato-admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;after the composer is done run this command for auto-install&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 tomato-admin:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;if you are using macOS you can easily use auto yarn package install if not just build your assets like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn &amp;amp; yarn build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now you have tomato-admin installed on your Laravel project.&lt;/p&gt;

&lt;p&gt;we will use some media on our package to we need to publish Spatie Media Library migrations&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 vendor:publish &lt;span class="nt"&gt;--provider&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Spatie&lt;/span&gt;&lt;span class="se"&gt;\M&lt;/span&gt;&lt;span class="s2"&gt;ediaLibrary&lt;/span&gt;&lt;span class="se"&gt;\M&lt;/span&gt;&lt;span class="s2"&gt;ediaLibraryServiceProvider"&lt;/span&gt; &lt;span class="nt"&gt;--tag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"medialibrary-migrations"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;if this command does not work please use this command&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5h8jkfafatf1nqtuh8ib.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5h8jkfafatf1nqtuh8ib.png" alt=" " width="799" height="483"&gt;&lt;/a&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 vendor:publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then on the search type &lt;code&gt;media&lt;/code&gt; and select the migration one.&lt;/p&gt;

&lt;p&gt;now migrate your files&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 migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you can check your browser now and you will see a homepage like this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwrm0574dwbhwx43nvxgk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwrm0574dwbhwx43nvxgk.png" alt=" " width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;we need to change &lt;code&gt;HOME&lt;/code&gt; const on the &lt;code&gt;RouteServiceProvider.php&lt;/code&gt; to be &lt;code&gt;/admin&lt;/code&gt; to make the redirect after auth to admin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Tomato Roles
&lt;/h2&gt;

&lt;p&gt;No e-commerce system is complete without a robust role management structure. To fulfill this essential requirement, we'll be installing 'tomato-roles' to seamlessly handle roles within our mission to build a comprehensive e-commerce system.&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 tomatophp/tomato-roles
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;after the composer is done run this command&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 tomato-roles:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now go to your &lt;code&gt;app\Models\User.php&lt;/code&gt; and add this trait to it&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now your dashboard is ready to log in using &lt;code&gt;admin@admin.com&lt;/code&gt; and &lt;code&gt;password&lt;/code&gt; as a password from this URL &lt;code&gt;/admin/login&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3qg11z9vp04z3vc75pgg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3qg11z9vp04z3vc75pgg.png" alt=" " width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;if you try to access any page you will be redirected to &lt;code&gt;Two-factor Confirmation&lt;/code&gt; If you don't go it for now, you can easily stop it by removing &lt;code&gt;implements MustVerifyEmail&lt;/code&gt; from your &lt;code&gt;User.php&lt;/code&gt; model.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Install Tomato CRM
&lt;/h2&gt;

&lt;p&gt;As an integral part of our e-commerce system, the management of customer interactions, authentications, and other crucial actions is paramount. To efficiently handle these aspects, we'll be installing 'tomato-crm.' Let's proceed with the installation to empower our system with advanced customer relationship management capabilities.&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 tomatophp/tomato-crm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now let's install it&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 tomato-crm:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;let's publish &lt;code&gt;Accounts.php&lt;/code&gt; model to our app to custom it&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 vendor:publish &lt;span class="nt"&gt;--tag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"tomato-crm-model"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and you need to publish tomato-crm config&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 vendor:publish &lt;span class="nt"&gt;--tag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"tomato-crm-config"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;on &lt;code&gt;tomato-crm.php&lt;/code&gt; config change the model path to like this&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="s2"&gt;"model"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;\App\Models\Account&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now we need to add a new guard to our app, so let's add it on the config &lt;code&gt;auth.php&lt;/code&gt; like this.&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="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;

    &lt;span class="cm"&gt;/*
    |--------------------------------------------------------------------------
    | Authentication Defaults
    |--------------------------------------------------------------------------
    |
    | This option controls the default authentication "guard" and password
    | reset options for your application. You may change these defaults
    | as required, but they're a perfect start for most applications.
    |
    */&lt;/span&gt;

    &lt;span class="s1"&gt;'defaults'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'guard'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'web'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'passwords'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'users'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="cm"&gt;/*
    |--------------------------------------------------------------------------
    | Authentication Guards
    |--------------------------------------------------------------------------
    |
    | Next, you may define every authentication guard for your application.
    | Of course, a great default configuration has been defined for you
    | here which uses session storage and the Eloquent user provider.
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | Supported: "session"
    |
    */&lt;/span&gt;

    &lt;span class="s1"&gt;'guards'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'web'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="s1"&gt;'driver'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'session'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'provider'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'users'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="s1"&gt;'accounts'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="s1"&gt;'driver'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'session'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'provider'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'accounts'&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="cm"&gt;/*
    |--------------------------------------------------------------------------
    | User Providers
    |--------------------------------------------------------------------------
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | If you have multiple user tables or models you may configure multiple
    | sources which represent each model / table. These sources may then
    | be assigned to any extra authentication guards you have defined.
    |
    | Supported: "database", "eloquent"
    |
    */&lt;/span&gt;

    &lt;span class="s1"&gt;'providers'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'users'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="s1"&gt;'driver'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'eloquent'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'model'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;App\Models\User&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="s1"&gt;'accounts'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="s1"&gt;'driver'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'eloquent'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'model'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;App\Models\Account&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="p"&gt;],&lt;/span&gt;

    &lt;span class="cm"&gt;/*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | You may specify multiple password reset configurations if you have more
    | than one user table or model in the application and you want to have
    | separate password reset settings based on the specific user types.
    |
    | The expiry time is the number of minutes that each reset token will be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    | The throttle setting is the number of seconds a user must wait before
    | generating more password reset tokens. This prevents the user from
    | quickly generating a very large amount of password reset tokens.
    |
    */&lt;/span&gt;

    &lt;span class="s1"&gt;'passwords'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'users'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="s1"&gt;'provider'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'users'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'table'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'password_reset_tokens'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'expire'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'throttle'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;60&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="cm"&gt;/*
    |--------------------------------------------------------------------------
    | Password Confirmation Timeout
    |--------------------------------------------------------------------------
    |
    | Here you may define the amount of seconds before a password confirmation
    | times out and the user is prompted to re-enter their password via the
    | confirmation screen. By default, the timeout lasts for three hours.
    |
    */&lt;/span&gt;

    &lt;span class="s1"&gt;'password_timeout'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10800&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;now clear your config cache&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 config:clear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now rebuild your assets&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn &amp;amp; yarn build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now your CRM is ready you can check it on your dashboard&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Tomato Wallet
&lt;/h2&gt;

&lt;p&gt;For seamless transaction management between customers and vendors within the e-commerce system, a robust payment handler is crucial. Introducing 'tomato-wallet,' a feature-rich package that not only manages customer wallets but also seamlessly handles payments. Packed with a multitude of integrated payment gateways, 'tomato-wallet' ensures a magical experience in managing transactions. Let's proceed with the installation to unlock the full potential of this powerful payment solution.&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 tomatophp/tomato-wallet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;let's install it&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 tomato-wallet:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now we need to implement &lt;code&gt;Wallet&lt;/code&gt; interface to our &lt;code&gt;Account.php&lt;/code&gt; and add &lt;code&gt;HasWallet&lt;/code&gt; trait to it to make the wallet of the customer work, your Account model must be like this&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;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Models&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;Bavix\Wallet\Interfaces\Wallet&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;Bavix\Wallet\Traits\HasWallet&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;Illuminate\Database\Eloquent\Factories\HasFactory&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;Illuminate\Database\Eloquent\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;Illuminate\Foundation\Auth\User&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nc"&gt;Authenticatable&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;Illuminate\Notifications\Notifiable&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;Laravel\Sanctum\HasApiTokens&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;Spatie\Macroable\Macroable&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;Spatie\MediaLibrary\HasMedia&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;Spatie\MediaLibrary\InteractsWithMedia&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;Spatie\Permission\Traits\HasRoles&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;TomatoPHP\TomatoCrm\Models\Group&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cd"&gt;/**
 * @property integer $id
 * @property string $name
 * @property string $username
 * @property string $loginBy
 * @property string $address
 * @property string $type
 * @property string $password
 * @property string $otp_code
 * @property string $otp_activated_at
 * @property string $last_login
 * @property string $agent
 * @property string $host
 * @property integer $attempts
 * @property boolean $login
 * @property boolean $activated
 * @property boolean $blocked
 * @property string $deleted_at
 * @property string $created_at
 * @property string $updated_at
 * @property AccountsMeta[] $accountsMetas
 * @property Activity[] $activities
 * @property Comment[] $comments
 * @property Model meta($key, $value)
 * @property Location[] $locations
 */&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Account&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Authenticatable&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="nc"&gt;HasMedia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Wallet&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;InteractsWithMedia&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;HasApiTokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;HasFactory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Notifiable&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;HasWallet&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="cd"&gt;/**
     * @var array
     */&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;'email'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'phone'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'parent_id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'type'&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="s1"&gt;'username'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'loginBy'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'address'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'password'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'otp_code'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'otp_activated_at'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'last_login'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'agent'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'host'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'is_login'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'is_active'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'deleted_at'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'created_at'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'updated_at'&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;$casts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'is_login'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'boolean'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'is_active'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'boolean'&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;$dates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'deleted_at'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'created_at'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'updated_at'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'otp_activated_at'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'last_login'&lt;/span&gt;&lt;span class="p"&gt;,&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;$appends&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'birthday'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'gender'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'more'&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;getMoreAttribute&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$metas&lt;/span&gt; &lt;span class="o"&gt;=&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;accountsMetas&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;get&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;pluck&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'value'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'key'&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;toArray&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;$metas&lt;/span&gt;&lt;span class="p"&gt;;&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;getBirthdayAttribute&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;meta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'birthday'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&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;getGenderAttribute&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;meta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'gender'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="cd"&gt;/**
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */&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;accountsMetas&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="s1"&gt;'TomatoPHP\TomatoCrm\Models\AccountsMeta'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="cd"&gt;/**
     * @param string $key
     * @param string|null $value
     * @return Model|string
     */&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;meta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="nv"&gt;$value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;Model&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$value&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;accountsMetas&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;updateOrCreate&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'key'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'value'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$value&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;else&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;accountsMetas&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;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'key'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$key&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;first&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;?-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;value&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="cd"&gt;/**
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */&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;activities&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="s1"&gt;'TomatoPHP\TomatoCrm\Models\Activity'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="cd"&gt;/**
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */&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;comments&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="s1"&gt;'TomatoPHP\TomatoCrm\Models\Comment'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="cd"&gt;/**
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */&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;locations&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="s1"&gt;'TomatoPHP\TomatoCrm\Models\Location'&lt;/span&gt;&lt;span class="p"&gt;);&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;groups&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;belongsToMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Group&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;'account_groups'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'account_id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'group_id'&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;now your wallet is working you can start any transaction and check the customer's balance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Tomato CMS
&lt;/h2&gt;

&lt;p&gt;In any functioning e-commerce setup, a well-optimized front end is indispensable. To enhance SEO performance and add essential content such as posts and pages, we'll be incorporating our 'tomato-cms' package. Let's proceed with the installation to seamlessly integrate this package and elevate our e-commerce platform.&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 tomatophp/tomato-cms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now let's install it&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 tomato-cms:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install Tomato Themes
&lt;/h2&gt;

&lt;p&gt;To craft a dynamic frontend tailored as a theme, we'll be utilizing the 'tomato-themes' package. This package simplifies the implementation of multi-themes for your project, employing a Hierarchical Model-View-Controller (HMVC) architecture. Let's initiate the installation process for 'tomato-themes' to facilitate the seamless integration of diverse themes into your project.&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 tomatophp/tomato-themes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now let's install it&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 tomato-themes:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now rebuild your assets&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn &amp;amp; yarn build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;make sure that you have &lt;code&gt;Themes&lt;/code&gt; folder in your project root and add this line to your &lt;code&gt;composer.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="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;"autoload"&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;"psr-4"&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;"App\\"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"app/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Database\\Factories\\"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"database/factories/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Database\\Seeders\\"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"database/seeders/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Themes\\"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Themes/"&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="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now you need to reload the composer&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer dump-autoload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now inside your tailwind.config.js add these lines&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;content&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Themes/**/*.blade.php&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Themes/**/**/*.blade.php&lt;/span&gt;&lt;span class="dl"&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;now your theme is ready to upload or create a new theme.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Tomato E-Commerce
&lt;/h2&gt;

&lt;p&gt;Now that we have our foundational elements in place, including a ready CRM, role management, and several essential packages, it's time to bring it all together by installing the E-Commerce System. The seamless integration of these components promises a robust and feature-rich platform. Let's proceed with the installation to witness the culmination of our efforts in building a comprehensive and efficient E-Commerce System.&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 tomatophp/tomato-ecommerce
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;let's install it&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 tomato-ecommerce:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now everything i ready to install our e-commerce theme.&lt;/p&gt;

&lt;p&gt;this package will install tomato-products, tomato-orders, tomato-offers, tomato-branches for you&lt;/p&gt;

&lt;p&gt;to make everything work fine you need some actions, we need to install tomato-branches&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 tomato-branches:install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;after that, you need to create just 1 &lt;code&gt;Shipping Vendor&lt;/code&gt; from this endpoint &lt;code&gt;/admin/shipping-vendors&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;now you need to change your site SEO data and your site Logo from this endpoint &lt;code&gt;/admin/settings/seo&lt;/code&gt; upload your logos and change the Site Name.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install E-commerce Theme
&lt;/h2&gt;

&lt;p&gt;Having established a solid foundation, including CRM, role management, and various essential packages, we're now ready to enhance the visual appeal of our E-Commerce and CMS platforms. Introducing our user-friendly theme with a simple yet stylish design – an ideal canvas for customization. Let's embark on the installation process to seamlessly integrate this theme and provide users the flexibility to tailor it to their preferences.&lt;/p&gt;

&lt;p&gt;inside your Themes Folder clone this repo&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;Themes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now clone our Theme.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git@github.com:tomatophp/Ecommerce.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now go to your dashboard &lt;code&gt;/themes&lt;/code&gt; and you will get the new theme you can just activate it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please note that you must not have &lt;code&gt;/&lt;/code&gt; route on your main &lt;code&gt;routes/web.php&lt;/code&gt; because these routes can override the Theme Routes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to fix style rebuild your assets&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn &amp;amp; yarn build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now if you check your home page you will get something like this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57tiy1f52bciut39u14q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57tiy1f52bciut39u14q.png" alt=" " width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;you can select from the top dropdown any section and add it to your page.&lt;/p&gt;

&lt;p&gt;and you can build a menu from &lt;code&gt;/admin/menus&lt;/code&gt; using this endpoint&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Home &lt;code&gt;/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;About &lt;code&gt;/about&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Shop &lt;code&gt;/shop&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Blog &lt;code&gt;/blog&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Contact &lt;code&gt;/contact&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Terms &amp;amp; Conditions &lt;code&gt;/terms&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Privacy &lt;code&gt;/privacy&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;you can create 2 menus &lt;code&gt;main&lt;/code&gt;, &lt;code&gt;footer&lt;/code&gt; the main will show up auto to your header and the footer to your footer.&lt;/p&gt;

&lt;p&gt;change the middleware of &lt;code&gt;Authenticate&lt;/code&gt; redirect to this route&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;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Http\Middleware&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;Illuminate\Auth\Middleware\Authenticate&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nc"&gt;Middleware&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;Illuminate\Http\Request&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;Authenticate&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Middleware&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cd"&gt;/**
     * Get the path the user should be redirected to when they are not authenticated.
     */&lt;/span&gt;
    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;redirectTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Request&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;?string&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;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;expectsJson&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'accounts.login'&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;now in your &lt;code&gt;Account.php&lt;/code&gt; model add this trait&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;\TomatoPHP\TomatoEcommerce\Services\Traits\InteractsWithEcommerce&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;\TomatoPHP\TomatoNotifications\Traits\InteractWithNotifications&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;\TomatoPHP\TomatoOrders\Services\Traits\InteractsWithOrders&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With the successful installation of our comprehensive E-commerce system, you are now equipped to seamlessly manage your product catalog. Begin by adding new products and defining categories to tailor your offerings. Feel empowered to kickstart the order creation process, as your E-commerce system stands ready to facilitate smooth transactions and streamline your online business operations.&lt;/p&gt;

&lt;p&gt;🍅 &lt;strong&gt;Thanks for using Tomato Plugins &amp;amp; TomatoPHP framework&lt;/strong&gt;&lt;br&gt;
💼 Join the support server on Discord &lt;a href="https://discord.gg/VZc8nBJ3ZU" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;br&gt;
📄 You can check docs &lt;a href="https://docs.tomatophp.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;br&gt;
⭐ Please give us a star on any repo if you like it &lt;a href="https://github.com/tomatophp" rel="noopener noreferrer"&gt;TomatoPHP GitHub&lt;/a&gt;&lt;br&gt;
🤝 Sponsor us &lt;a href="https://github.com/sponsors/3x1io" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Install Ubuntu Desktop on Any Ubuntu Server</title>
      <dc:creator>Fady Mondy</dc:creator>
      <pubDate>Mon, 16 Oct 2023 13:53:36 +0000</pubDate>
      <link>https://dev.to/fadymondy/install-ubuntu-desktop-on-any-ubuntu-server-4o3i</link>
      <guid>https://dev.to/fadymondy/install-ubuntu-desktop-on-any-ubuntu-server-4o3i</guid>
      <description>&lt;p&gt;some developers need to use a cloud server as a personal computer for fast development and remote use, and it's a very good idea but, how can install an Ubuntu desktop on it?&lt;/p&gt;

&lt;p&gt;it's easy to do this by following some commands:&lt;/p&gt;

&lt;p&gt;let's start by installing tasksel&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;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; tasksel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now you are ready to install ubuntu-desktop use this command&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;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; ubuntu-desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;cloud servers by default don't have a display so you need to set a graphical target to up the GUI&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;systemctl set-default graphical.target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and WOW, it's working now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install XRDP
&lt;/h2&gt;

&lt;p&gt;if you like to get a Remote control using RDP you can follow these steps, let's start by installing xrdp&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;apt &lt;span class="nb"&gt;install &lt;/span&gt;xrdp &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now we need to add SSL to xrdp using this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;usermod &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;-G&lt;/span&gt; ssl-cert xrdp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now we need to add some commands to make xrdp auto-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="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'Unset DBUS_SESSION_ADDRESS'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/xrdp/startwm.sh
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'Unset XDG_RUNTIME_DIR'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/xrdp/startwm.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now xrdp is ready to connect we have just 1 step, we need to allow port 3389 to access xrdp&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ufw allow from 192.168.1.0/24 to any port 3389
ufw reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now you can connect with any RDP client to your remote server.&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>gui</category>
      <category>linux</category>
    </item>
    <item>
      <title>Install Laravel Valet+ Ubuntu</title>
      <dc:creator>Fady Mondy</dc:creator>
      <pubDate>Mon, 16 Oct 2023 13:41:49 +0000</pubDate>
      <link>https://dev.to/fadymondy/install-laravel-valet-ubuntu-53d7</link>
      <guid>https://dev.to/fadymondy/install-laravel-valet-ubuntu-53d7</guid>
      <description>&lt;p&gt;we are recommending using our environment to make the project work we are using Ubuntu Linux and Laravel valet+&lt;/p&gt;

&lt;h3&gt;
  
  
  Install BackBox Linux "Recommendation"
&lt;/h3&gt;

&lt;p&gt;I like to use &lt;a href="https://www.backbox.org/download/" rel="noopener noreferrer"&gt;BackBox&lt;/a&gt; Linux because it has a lot of tools and supports our environment, so from the link, we keep downloading the ISO image and putting it in USB using &lt;a href="https://rufus.ie/en/" rel="noopener noreferrer"&gt;Rufus&lt;/a&gt; and then booting your computer into it&lt;/p&gt;

&lt;h3&gt;
  
  
  Install dependencies packages
&lt;/h3&gt;

&lt;p&gt;let's start by opening our terminal and updating the system to the last one, and after that install some packages&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;add-apt-repository &lt;span class="nt"&gt;-y&lt;/span&gt; ppa:nginx/stable
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;software-properties-common
&lt;span class="nb"&gt;sudo &lt;/span&gt;add-apt-repository ppa:ondrej/php
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&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;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;after it finished reboot your computer and after that run this command&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;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;network-manager libnss3-tools jq xsel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install PHP &amp;amp; its extensions
&lt;/h3&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;apt &lt;span class="nb"&gt;install &lt;/span&gt;php8.2-fpm
&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;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;php8.2-cli php8.2-common php8.2-curl php8.2-mbstring php8.2-opcache php8.2-readline php8.2-xml php8.2-zip php8.2-mysql php8.2-gd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install MySql Server
&lt;/h3&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;apt-get &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;mysql-server
&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;&lt;span class="nb"&gt;sudo &lt;/span&gt;mysql_secure_installation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;use &lt;code&gt;0&lt;/code&gt; for the password and use any password something like &lt;code&gt;12345678&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;after the installation is finished, start the MySQL server&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;mysql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and on the MySQL server console use this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;mysql&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;USER&lt;/span&gt; &lt;span class="s1"&gt;'root'&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;'localhost'&lt;/span&gt; &lt;span class="n"&gt;IDENTIFIED&lt;/span&gt; &lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="n"&gt;mysql_native_password&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;'12345678'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;mysql&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;FLUSH&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;mysql&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install Composer
&lt;/h3&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;apt &lt;span class="nb"&gt;install &lt;/span&gt;curl
&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;curl &lt;span class="nt"&gt;-sS&lt;/span&gt; https://getcomposer.org/installer | &lt;span class="nb"&gt;sudo &lt;/span&gt;php &lt;span class="nt"&gt;--&lt;/span&gt; &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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install PHPMyAdmin
&lt;/h2&gt;

&lt;p&gt;the valet has been installed now, let's go and install PHPMyAdmin and link it with the .test subdomain using valet first of all, create a folder for your sites on the home directory ~&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; ~
&lt;span class="nb"&gt;mkdir &lt;/span&gt;Sites
&lt;span class="nb"&gt;cd &lt;/span&gt;Sites
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now we are on the Sites path, let's park this directory to be the directory of our projects&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;valet park
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now any project on this directory will be auto-linked with subdomain .test, let's download PHPMyAdmin from this &lt;a href="https://www.phpmyadmin.net/" rel="noopener noreferrer"&gt;link&lt;/a&gt; and unzip the file inside the Sites directory and rename the folder to PHPMyAdmin, after that go inside the folder and use this command&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;cp &lt;/span&gt;config.sample.inc.php config.sample.php
nano config.sample.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;change the line to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$cfg&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'blowfish_secret'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'YK07LhNSe50vrj,HwBfb.l3gpbv;u8b7'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now use CTRL + x and say Y now we will use valet to link PHPMyAdmin and secure the link with SSL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;valet &lt;span class="nb"&gt;link
&lt;/span&gt;valet secure
valet open
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now you can see the PHPMyAdmin working and you can use root as the user and the password you created to MySQL to login&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Valet
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer global require genesisweb/valet-linux-plus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;no, you need to export Valet use&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="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.composer/vendor/bin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or use the following&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="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.config/composer/vendor/bin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and now it will be easy to start installing valet&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;it will ask you for a password input &lt;code&gt;12345678&lt;/code&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>valet</category>
      <category>ubuntu</category>
      <category>linux</category>
    </item>
    <item>
      <title>Pro Terminal for Pro Developer OhMyZsh</title>
      <dc:creator>Fady Mondy</dc:creator>
      <pubDate>Mon, 16 Oct 2023 13:34:08 +0000</pubDate>
      <link>https://dev.to/fadymondy/pro-terminal-for-pro-developer-ohmyzsh-ein</link>
      <guid>https://dev.to/fadymondy/pro-terminal-for-pro-developer-ohmyzsh-ein</guid>
      <description>&lt;p&gt;as we like to make everything more easy for our community, in this article we will explain how you can get your terminal to be like this one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install OhMyZsh
&lt;/h3&gt;

&lt;p&gt;we start by installing zsh and ohMyZsh packages to add their features to our terminal &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo apt-get -y install git curl wget
&lt;strong&gt;sudo apt-get -y install zsh
&lt;/strong&gt;sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;now zsh and OhMyZsh are installed successfully, we will add some plugins to make it easier to use the terminal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install OhMyZsh Plugins
&lt;/h3&gt;

&lt;p&gt;we will add 2 plugins &lt;code&gt;syntax-highlighting&lt;/code&gt; and &lt;code&gt;zsh-autosuggestions&lt;/code&gt; These 2 plugins make the code and command on the terminal highlighted and the code you right will be saved to your terminal it will auto-complete it for you&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-syntax-highlighting
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"source &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/plugins/zsh-syntax-highlightingzsh-syntax-highlighting.zsh"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZDOTDIR&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/.zshrc
git clone https://github.com/zsh-users/zsh-autosuggestions &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-autosuggestions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now you need to allow this plugin on the OhMyZsh config&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;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;search about plugins and add this&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="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt; 
    git
    zsh-syntax-highlighting
    zsh-autosuggestions
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install Power Fonts
&lt;/h3&gt;

&lt;p&gt;to make OhMyZsh work with icons you need to install this font &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;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;fonts-powerline
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and you can download it from &lt;a href="https://github.com/romkatv/powerlevel10k#manual-font-installation" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Install PowerLevel10k Theme
&lt;/h3&gt;

&lt;p&gt;now it's time to make your terminal look pro just install powerlevel10k theme&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--depth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 https://github.com/romkatv/powerlevel10k.git &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="p"&gt;/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/themes/powerlevel10k
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now change the main theme on the OhMyZsh config&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;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, searching for the theme can change it&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="nv"&gt;ZSH_THEME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"powerlevel10k/powerlevel10k"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now close your terminal and open it again to restart zsh and after that start your config&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;p10k configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;after config your theme you will see the new theme.&lt;/p&gt;

</description>
      <category>terminal</category>
      <category>zsh</category>
      <category>themes</category>
      <category>development</category>
    </item>
    <item>
      <title>Generate a flutter app from your Tomato App!</title>
      <dc:creator>Fady Mondy</dc:creator>
      <pubDate>Thu, 12 Oct 2023 18:16:47 +0000</pubDate>
      <link>https://dev.to/fadymondy/generate-a-flutter-app-from-your-tomato-app-2d5p</link>
      <guid>https://dev.to/fadymondy/generate-a-flutter-app-from-your-tomato-app-2d5p</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fys7vcysizytnwvt2w3a6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fys7vcysizytnwvt2w3a6.png" alt=" " width="469" height="935"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;as we go to make everything easy, we are today releasing a very very good package to build a flutter app by just using 1 command to generate full CRUD from your schema and generated TomatoPHP files&lt;/p&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;p&gt;please check that you have flutter installed and working on your system by check&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and you must have at least one emulator or device connected to your system&lt;/p&gt;

&lt;p&gt;and you must have 2 packages working on your Laravel app &lt;a href="https://dev.to/3x1io/tomatophp-admin-crud-generator-257k"&gt;Tomato Admin&lt;/a&gt; and &lt;a href="https://docs.tomatophp.com/plugins/tomato-crm" rel="noopener noreferrer"&gt;Tomato CRM&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;after installing the package please make sure that you add a guard of &lt;code&gt;accounts&lt;/code&gt; to your auth.php config like this&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;'guards'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'web'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="s1"&gt;'driver'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'session'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'provider'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'users'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="s1"&gt;'accounts'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="s1"&gt;'driver'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'session'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'provider'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'accounts'&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="mf"&gt;...&lt;/span&gt;


    &lt;span class="s1"&gt;'providers'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'users'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="s1"&gt;'driver'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'eloquent'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'model'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;App\Models\User&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="s1"&gt;'accounts'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="s1"&gt;'driver'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'eloquent'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s1"&gt;'model'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;\TomatoPHP\TomatoCrm\Models\Account&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="p"&gt;],&lt;/span&gt;

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

&lt;/div&gt;



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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require tomatophp/tomato-flutter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;now you are ready to generate a new app&lt;/p&gt;

&lt;p&gt;to generate a new app you just need to run this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan tomato-flutter:generate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Generate Module 
&lt;/h3&gt;

&lt;p&gt;to generate a new module you just need to run this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan tomato-flutter:module
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Generate Controller 
&lt;/h3&gt;

&lt;p&gt;to generate a new controller you just need to run this command&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Generate Service 
&lt;/h3&gt;

&lt;p&gt;to generate a new service you just need to run this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan tomato-flutter:service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Generate CRUD
&lt;/h3&gt;

&lt;p&gt;to generate a new CRUD from any table on  your tomato-php generated CRUDs just need to run this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan tomato-flutter:crud
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;please note that the generated files will match only APIs generated by TomatoPHP and you need to add API routes to the api.php &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="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;middleware&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'auth:sanctum'&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;'api.'&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;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&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;'customers'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;\Modules\Customers\Http\Controllers\CustomerController&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;'index'&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;'customers.index'&lt;/span&gt;&lt;span class="p"&gt;);&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;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'customers'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;\Modules\Customers\Http\Controllers\CustomerController&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;'store'&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;'customers.store'&lt;/span&gt;&lt;span class="p"&gt;);&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;'customers/{model}'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;\Modules\Customers\Http\Controllers\CustomerController&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;'show'&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;'customers.show'&lt;/span&gt;&lt;span class="p"&gt;);&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;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'customers/{model}'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;\Modules\Customers\Http\Controllers\CustomerController&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;'update'&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;'customers.update'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'customers/{model}'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;\Modules\Customers\Http\Controllers\CustomerController&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;'destroy'&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;'customers.destroy'&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;h3&gt;
  
  
  Change Endpoint
&lt;/h3&gt;

&lt;p&gt;if you like to change the endpoint to match your URL you can change it from the file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flutter/YOUR_APP/lib/config/Config.dart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and change it to your endpoint, if you are using Android you check the app please make the endpoint hit to &lt;a href="http://10.0.2.2:8000/api" rel="noopener noreferrer"&gt;&lt;code&gt;http://10.0.2.2:8000/api&lt;/code&gt;&lt;/a&gt; and run &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 serv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;on your app.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>tomato</category>
      <category>php</category>
      <category>flutter</category>
    </item>
  </channel>
</rss>
