<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Priyash Patil | Full Stack, Platform &amp; ML Engineer</title><link>https://priyashpatil.com/</link><description>Recent content on Priyash Patil | Full Stack, Platform &amp; ML Engineer</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Thu, 15 Aug 2024 14:31:36 +0000</lastBuildDate><atom:link href="https://priyashpatil.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Add Fedora CoreOS Custom Image to DigitalOcean - Terraform</title><link>https://priyashpatil.com/posts/add-fedora-coreos-custom-image-to-digitalocean-terraform/</link><pubDate>Thu, 15 Aug 2024 14:31:36 +0000</pubDate><guid>https://priyashpatil.com/posts/add-fedora-coreos-custom-image-to-digitalocean-terraform/</guid><description>&lt;p&gt;CoreOS is a Linux distribution optimized for running containerized applications. It is built to provide an automated, secure, and efficient environment for applications leveraging containerized workflows. CoreOS includes features like automatic updates and distributed system optimization tools, making it an excellent choice for cloud infrastructure.&lt;/p&gt;
&lt;p&gt;For more information, visit the &lt;a href="https://docs.fedoraproject.org/en-US/fedora-coreos/"&gt;Fedora CoreOS Documentation&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;Before you begin, make sure you have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A DigitalOcean account. If you don&amp;rsquo;t have one, you can sign up using &lt;a href="https://m.do.co/c/2f1d8097d8f3"&gt;this link to get $200 in credit for 60 days&lt;/a&gt;
.&lt;/li&gt;
&lt;li&gt;Familiarity with CLI tools like &lt;code&gt;doctl&lt;/code&gt; and &lt;code&gt;terraform&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The CoreOS image URL we&amp;rsquo;ll use for this tutorial:&lt;/p&gt;</description></item><item><title>How to Access and Read Ollama Server Logs on Various Systems</title><link>https://priyashpatil.com/posts/how-to-access-and-read-ollama-server-logs-on-various-systems/</link><pubDate>Fri, 02 Aug 2024 16:00:02 +0000</pubDate><guid>https://priyashpatil.com/posts/how-to-access-and-read-ollama-server-logs-on-various-systems/</guid><description>&lt;p&gt;&lt;a href="https://ollama.com/"&gt;Ollama&lt;/a&gt;
 is a robust tool for managing AI models, but like any software, it may occasionally experience issues that require troubleshooting. Accessing server logs is crucial for diagnosing and resolving these problems. In this guide, we will discuss how to access Ollama server logs on different operating systems and environments, including Mac, Linux, Windows, and containers.&lt;/p&gt;
&lt;h2 id="accessing-ollama-logs-on-mac"&gt;Accessing Ollama Logs on Mac&lt;/h2&gt;
&lt;p&gt;To view logs on a Mac, open your terminal and run the following command:&lt;/p&gt;</description></item><item><title>MySQL 9.0 Community Edition: Key Features &amp; Enhancements</title><link>https://priyashpatil.com/posts/mysql-90-community-edition-key-features-enhancements/</link><pubDate>Sat, 27 Jul 2024 15:54:23 +0000</pubDate><guid>https://priyashpatil.com/posts/mysql-90-community-edition-key-features-enhancements/</guid><description>&lt;p&gt;Explore the new features and improvements in MySQL 9.0 Community Edition, released on July 1, 2024. This comprehensive overview covers updates in data types, performance, and new capabilities aimed at modern applications.&lt;/p&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;On July 1, 2024, MySQL released its 9.0 Community Edition, labelling it as an &amp;ldquo;&lt;a href="https://dev.mysql.com/doc/relnotes/mysql/9.0/en/news-9-0-0.html#news-9-0-0"&gt;Innovation Release&lt;/a&gt;
.&amp;rdquo; This new version promises enhanced performance, flexibility, and introduces new capabilities that aim to meet the dynamic needs of modern applications. But does it live up to the hype, especially after the tumultuous reception of MySQL 8.0? Let’s dive into what MySQL 9.0 has to offer.&lt;/p&gt;</description></item><item><title>Solving the Laravel Vite Manifest Not Found Issue</title><link>https://priyashpatil.com/posts/solving-the-laravel-vite-manifest-not-found-issue/</link><pubDate>Fri, 26 Jan 2024 13:34:27 +0000</pubDate><guid>https://priyashpatil.com/posts/solving-the-laravel-vite-manifest-not-found-issue/</guid><description>&lt;h2 id="introduction-understanding-the-problem"&gt;Introduction: Understanding the Problem&lt;/h2&gt;
&lt;p&gt;The &amp;ldquo;Vite manifest not found at manifest.json&amp;rdquo; error in Laravel projects is a common issue faced by developers. This problem arises when Laravel fails to locate the Vite manifest file, crucial for asset management.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://cdn.priyashpatil.com/public_uploads/ca8f118b-6e1c-48d8-9313-9477cc416759.webp" alt="Error screenshot from missing Laravel Vite Manifest"
 loading="lazy"
 decoding="async"&gt;
&lt;/p&gt;
&lt;h2 id="common-causes-and-solutions"&gt;Common Causes and Solutions&lt;/h2&gt;
&lt;p&gt;The issue may have multiple causes, but the following should resolve it:&lt;/p&gt;
&lt;h3 id="ensuring-proper-installation-and-build-commands"&gt;Ensuring Proper Installation and Build Commands&lt;/h3&gt;
&lt;p&gt;The most straightforward solution is often running the right npm commands. For local or development environment run:&lt;/p&gt;</description></item><item><title>Laravel file upload with validation example</title><link>https://priyashpatil.com/posts/laravel-file-upload-with-validation-example/</link><pubDate>Thu, 25 Jan 2024 17:41:25 +0000</pubDate><guid>https://priyashpatil.com/posts/laravel-file-upload-with-validation-example/</guid><description>&lt;h2 id="prerequisites-and-initial-setup"&gt;Prerequisites and Initial Setup&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A Laravel 6 or later version (up to Laravel 10) application.&lt;/li&gt;
&lt;li&gt;Basic knowledge of Laravel routing and Blade directives.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="creating-the-file-upload-form"&gt;Creating the File Upload Form&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Create the form view at &lt;code&gt;resources/views/form-view.blade.php&lt;/code&gt; and paste the following content:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;!&lt;/span&gt;doctype html&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;html lang&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;en&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;head&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;meta charset&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;meta name&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;viewport&amp;#34;&lt;/span&gt; content&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;width=device-width, initial-scale=1&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;title&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;Laravel &lt;span style="color:#a6e22e"&gt;File&lt;/span&gt; Upload Example&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;title&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;link href&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css&amp;#34;&lt;/span&gt; rel&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; integrity&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN&amp;#34;&lt;/span&gt; crossorigin&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;anonymous&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;head&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;body&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;div &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;container py-4&amp;#34;&lt;/span&gt; style&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;max-width: 768px;&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;h1&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;Laravel file upload example&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;h1&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;form method&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;POST&amp;#34;&lt;/span&gt; enctype&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;multipart/form-data&amp;#34;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;mb-3&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;@&lt;/span&gt;csrf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;div &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;mb-3&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;label &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;fileInput&amp;#34;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;form-label&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;Upload a Photo&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;label&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;input type&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;file&amp;#34;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;form-control @error(&amp;#39;photo&amp;#39;) is-invalid @enderror&amp;#34;&lt;/span&gt; id&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;fileInput&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; name&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;photo&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;@&lt;/span&gt;error(&lt;span style="color:#e6db74"&gt;&amp;#39;photo&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;div &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;invalid-feedback&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {{ &lt;span style="color:#f92672"&gt;$&lt;/span&gt;message }}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;div&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;@&lt;/span&gt;enderror
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;div&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;button type&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;submit&amp;#34;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;btn btn-primary&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;Upload&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;button&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;form&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {{&lt;span style="color:#f92672"&gt;--&lt;/span&gt; Display the uploaded files &lt;span style="color:#f92672"&gt;--&lt;/span&gt;}}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;@&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (session(&lt;span style="color:#e6db74"&gt;&amp;#39;files&amp;#39;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;div&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;h3&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;Uploaded Files&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;h3&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;a href&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;{{ session(&amp;#39;files&amp;#39;) }}&amp;#34;&lt;/span&gt; target&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;_blank&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;{{ session(&lt;span style="color:#e6db74"&gt;&amp;#39;files&amp;#39;&lt;/span&gt;) }}&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;a&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;div&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;@&lt;/span&gt;endif
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;div&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;body&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/&lt;/span&gt;html&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;In the above added the HTML I&amp;rsquo;m using Bootstrap to keep things simple and show some validation states. The form contains &lt;code&gt;enctype=&amp;quot;multipart/form-data&amp;quot;&lt;/code&gt; and &lt;code&gt;method=&amp;quot;POST&amp;quot;&lt;/code&gt;  attributes which allow sending file uploads to the server.&lt;/li&gt;
&lt;li&gt;The Form also includes &lt;code&gt;@csrf&lt;/code&gt; injecting the CSRF token that is required by Laravel&amp;rsquo;s &lt;code&gt;VerifyCsrfToken&lt;/code&gt; for &lt;a href="https://owasp.org/www-community/attacks/csrf"&gt;CSRF Protection.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The input field contains &lt;code&gt;@error&lt;/code&gt; a directive to show any validation errors and the attribute &lt;code&gt;name=&amp;quot;photo&amp;quot;&lt;/code&gt; allows you to refer to the file on the server for processing.&lt;/li&gt;
&lt;li&gt;Lastly, the &lt;code&gt;@if&lt;/code&gt; directive to show the path of the uploaded file. Which will be added from the controller.&lt;/li&gt;
&lt;li&gt;Note: We&amp;rsquo;re not adding &lt;code&gt;required&lt;/code&gt; attribute on input filed. Because we want to test the backend validation too. So, for the production environment, you can the required attribute to enable native frontend validation.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; in the above input field you can add an attribute &lt;code&gt;accept=&amp;quot;image/*&amp;quot;&lt;/code&gt; or anything else that is required. For example, if you want to restrict the file uploads to only &lt;code&gt;PDF and Doc&lt;/code&gt; files then you could use &lt;code&gt;accept=&amp;quot;application/pdf,application/docx&amp;quot;&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Laravel Vite Deploy Assets to Global CDN</title><link>https://priyashpatil.com/posts/laravel-vite-deploy-assets-to-global-cdn/</link><pubDate>Fri, 19 Jan 2024 16:18:10 +0000</pubDate><guid>https://priyashpatil.com/posts/laravel-vite-deploy-assets-to-global-cdn/</guid><description>&lt;p&gt;Depending on your server location or even SEO purpose you&amp;rsquo;ll see benefits of CDN. If you run the Lighthouse report you&amp;rsquo;ll most likely get a warning about assets not having a good caching policy. You can work this around with your Nginx or Apache. But still, someone visiting your website from the other side of the globe would feel the load time. This is where global caching would become handy. You can do a lot of stuff with global caching.&lt;/p&gt;</description></item><item><title>Bootstrap 5 Remove Unused CSS with Parcel and PurgeCSS</title><link>https://priyashpatil.com/posts/bootstrap-5-remove-unused-css-with-parcel-and-purgecss/</link><pubDate>Wed, 17 Jan 2024 18:13:31 +0000</pubDate><guid>https://priyashpatil.com/posts/bootstrap-5-remove-unused-css-with-parcel-and-purgecss/</guid><description>&lt;p&gt;When you use Bootstrap for your project, you usually end up with a lot of unused CSS. The full Bootstrap CSS bundle is around &lt;strong&gt;225 KB&lt;/strong&gt; which is quite heavy for most projects that only use a fraction of the available components. In this post, we&amp;rsquo;ll walk through how to set up a Bootstrap 5 project with Parcel and then use PurgeCSS to strip out the unused CSS, bringing the bundle size down to around &lt;strong&gt;5.7 KB&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Bootstrap 5 Remove Unused CSS with Vite and PurgeCSS</title><link>https://priyashpatil.com/posts/bootstrap-5-remove-unused-css-with-vite-and-purgecss/</link><pubDate>Wed, 17 Jan 2024 17:21:16 +0000</pubDate><guid>https://priyashpatil.com/posts/bootstrap-5-remove-unused-css-with-vite-and-purgecss/</guid><description>&lt;p&gt;When you use Bootstrap for your project, you usually end up with a lot of unused CSS. The full Bootstrap CSS bundle is around &lt;strong&gt;225 KB&lt;/strong&gt; which is quite heavy for most projects that only use a fraction of the available components. In this post, we&amp;rsquo;ll walk through how to set up a Bootstrap 5 project with Vite and then use PurgeCSS to strip out the unused CSS, bringing the bundle size down to around &lt;strong&gt;5.7 KB&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Optimized image uploads with CKEditor and Laravel</title><link>https://priyashpatil.com/posts/optimized-image-uploads-with-ckeditor-and-laravel/</link><pubDate>Fri, 03 Nov 2023 00:57:56 +0000</pubDate><guid>https://priyashpatil.com/posts/optimized-image-uploads-with-ckeditor-and-laravel/</guid><description>&lt;p&gt;In today&amp;rsquo;s digital age, images are an integral part of web content. They not only enhance the visual appeal of a website but also play a vital role in conveying information effectively. However, the larger the image files, the slower your website may load, leading to a poor user experience. This is where image resizing and optimization come into play. In this article, we&amp;rsquo;ll explore how to implement image resizing and optimization in Laravel with CKEditor 5, while harnessing the power of the Intervention/Image package.&lt;/p&gt;</description></item><item><title>Bootstrap 5 Remove Unused CSS with Webpack and PurgeCSS</title><link>https://priyashpatil.com/posts/bootstrap-5-webpack-remove-unused-css-with-purgecss/</link><pubDate>Sun, 22 Oct 2023 21:41:07 +0000</pubDate><guid>https://priyashpatil.com/posts/bootstrap-5-webpack-remove-unused-css-with-purgecss/</guid><description>&lt;p&gt;When you use Bootstrap for your project, you usually end up with a lot of unused CSS. The full Bootstrap CSS bundle is around &lt;strong&gt;227 KB&lt;/strong&gt; which is quite heavy for most projects that only use a fraction of the available components. In this post, we&amp;rsquo;ll walk through how to set up a Bootstrap 5 project with Webpack and then use PurgeCSS to strip out the unused CSS, bringing the bundle size down to around &lt;strong&gt;5.8 KB&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Laravel Auto Generate Thumbnails for Your Blog Posts</title><link>https://priyashpatil.com/posts/auto-generate-thumbnails-for-your-blog-posts-with-laravel/</link><pubDate>Sat, 27 May 2023 23:32:02 +0000</pubDate><guid>https://priyashpatil.com/posts/auto-generate-thumbnails-for-your-blog-posts-with-laravel/</guid><description>&lt;p&gt;Creating and uploading thumbnails for each blog post can be time-consuming, but fear not! With Laravel, a powerful PHP framework, you can automate the process of generating thumbnails for your blog posts. In this blog post, we’ll explore how to leverage Laravel to generate thumbnails effortlessly using &lt;code&gt;wkhtmltoimage&lt;/code&gt; and &lt;code&gt;laravel-snappy&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="preview"&gt;Preview&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s the example preview of the generated thumbnail image shared on social media:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://cdn.priyashpatil.com/public_uploads/93b10a7f-a812-436c-b2dd-09d60fe21fa1.webp" alt="A screenshot of shared image"
 loading="lazy"
 decoding="async"&gt;
&lt;/p&gt;
&lt;h2 id="how-will-it-work"&gt;How will it work?&lt;/h2&gt;
&lt;p&gt;The flow of the image generation process would be:&lt;/p&gt;</description></item><item><title>Automate sitemap generation in Laravel using Spatie Sitemap</title><link>https://priyashpatil.com/posts/automate-sitemap-generation-in-laravel-using-spatie-sitemap/</link><pubDate>Sun, 30 Apr 2023 19:35:05 +0000</pubDate><guid>https://priyashpatil.com/posts/automate-sitemap-generation-in-laravel-using-spatie-sitemap/</guid><description>&lt;h2 id="install-spatie-sitemap"&gt;Install Spatie Sitemap&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/spatie/laravel-sitemap"&gt;Spatie Sitemap&lt;/a&gt;
 is a Laravel package that makes it easy to generate sitemaps for your website. It provides a simple API for adding URLs to the sitemap and generates the sitemap file in XML format. The package also supports various options for customizing the sitemap generation process, such as including images, setting the priority and frequency of URLs, and more.&lt;/p&gt;
&lt;p&gt;Run the following command in your terminal:&lt;/p&gt;</description></item><item><title>A Guide to Improving Your Google Search Results with Byline Dating</title><link>https://priyashpatil.com/posts/a-guide-to-improving-your-google-search-results-with-byline-dating/</link><pubDate>Mon, 24 Apr 2023 21:26:22 +0000</pubDate><guid>https://priyashpatil.com/posts/a-guide-to-improving-your-google-search-results-with-byline-dating/</guid><description>&lt;p&gt;In the world of digital media, having a strong online presence is crucial for personal and professional success. One important aspect of your online presence is your byline dates, which can have a significant impact on your search engine rankings and overall visibility. In this blog post, we’ll explore how your byline dates can influence Google search results and provide tips on how to maximize your online presence.&lt;/p&gt;
&lt;h2 id="understanding-the-significance-of-byline-dates"&gt;Understanding the Significance of Byline Dates&lt;/h2&gt;
&lt;p&gt;Byline dates are a line of text that identifies the author of an article or blog post and includes the date it was written or published. The date in a byline can be an important factor in Google’s search algorithm. Google values fresh content, and byline dates can impact the freshness of content, which is a significant factor in search rankings.&lt;/p&gt;</description></item><item><title>Laravel Slugs - Generating and Using Slugs for Clean URLs</title><link>https://priyashpatil.com/posts/laravel-slugs-generating-and-using-slugs-for-clean-urls/</link><pubDate>Sun, 23 Apr 2023 18:14:30 +0000</pubDate><guid>https://priyashpatil.com/posts/laravel-slugs-generating-and-using-slugs-for-clean-urls/</guid><description>&lt;h2 id="what-is-a-slug"&gt;What is a Slug?&lt;/h2&gt;
&lt;p&gt;A slug is a user-friendly URL segment that represents a page on a website. It is usually generated from the title of the page and contains only alphanumeric characters, hyphens, and underscores. Slugs are used to create cleaner and more readable URLs, which can improve a website’s search engine ranking and make it easier for users to navigate the site.&lt;/p&gt;
&lt;h2 id="generating-a-slug-in-laravel"&gt;Generating a Slug in Laravel&lt;/h2&gt;
&lt;p&gt;In Laravel, generating a slug is a relatively simple process. Laravel provides a &lt;code&gt;IlluminateSupportStr::slug&lt;/code&gt; helper function that can be used to generate a slug from a string. Here’s an example:&lt;/p&gt;</description></item><item><title>Send On-Demand Slack Notifications from Laravel</title><link>https://priyashpatil.com/posts/send-on-demand-slack-notifications-from-laravel/</link><pubDate>Sat, 22 Apr 2023 22:57:51 +0000</pubDate><guid>https://priyashpatil.com/posts/send-on-demand-slack-notifications-from-laravel/</guid><description>&lt;p&gt;Discover how to integrate Slack and Laravel to send important notifications to your team for improved communication and productivity. Learn how this powerful tool can benefit your sales team and beyond.&lt;/p&gt;
&lt;h2 id="problem-statement"&gt;Problem statement&lt;/h2&gt;
&lt;p&gt;You have a requirement of sending notification to a specific slack channel using Laravel. You need to configure the incoming Slack WebHook on your Slack channel and then send notification from Laravel application.&lt;/p&gt;
&lt;h2 id="solution"&gt;Solution&lt;/h2&gt;
&lt;p&gt;Slack offers many ways for integration with external services. I’ll be using WebHooks to satisfy the requirement. &lt;strong&gt;This requires admin access to slack workspace.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Enhancing SEO: Next.js Markdown, Dynamic Sitemaps, and Meta</title><link>https://priyashpatil.com/posts/enhancing-seo-nextjs-markdown-dynamic-sitemaps-and-meta/</link><pubDate>Sat, 19 Feb 2022 10:14:26 +0000</pubDate><guid>https://priyashpatil.com/posts/enhancing-seo-nextjs-markdown-dynamic-sitemaps-and-meta/</guid><description>&lt;p&gt;This is a follow-up post to my previous post on &lt;a href="https://priyashpatil.com/posts/adding-code-syntax-highlighting-to-nextjs-markdown-blog"&gt;Adding code syntax highlighting&lt;/a&gt;
 . If you want to follow up with this post you can find source code at this &lt;a href="https://github.com/priyashpatil/blog-examples/tree/main/004_add_syntax_highlighting"&gt;GitHub Revision&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="problem-statement"&gt;Problem statement&lt;/h2&gt;
&lt;p&gt;As you may know that this blog was started based on the Learn Next.js Tutorial. That guide has already provided an excellent explanation of SEO. But the blog is missing SEO because it&amp;rsquo;s a Markdown-only blog. So based on that, I&amp;rsquo;ve prepared the following list of features I want at least for now:&lt;/p&gt;</description></item><item><title>Adding code syntax highlighting to Next.js Markdown blog</title><link>https://priyashpatil.com/posts/adding-code-syntax-highlighting-to-nextjs-markdown-blog/</link><pubDate>Tue, 15 Feb 2022 10:14:26 +0000</pubDate><guid>https://priyashpatil.com/posts/adding-code-syntax-highlighting-to-nextjs-markdown-blog/</guid><description>&lt;p&gt;This is the follow-up to my previous post about &lt;a href="https://priyashpatil.com/posts/adding-table-of-contents-toc-to-nextjs-markdown-blog"&gt;adding ToC support to NextJs blog&lt;/a&gt;
. To follow along with this post you can check out the source code from this &lt;a href="https://github.com/priyashpatil/blog-examples/tree/main/003_add_toc"&gt;GitHub Revision&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="problem-statement"&gt;Problem statement&lt;/h2&gt;
&lt;p&gt;One of the very important feature of any tech blog is code syntax highlighting. Browsers by default doesn&amp;rsquo;t support code highlighting other than just very basic different font-family.&lt;/p&gt;
&lt;h2 id="solution"&gt;Solution&lt;/h2&gt;
&lt;p&gt;Since, I&amp;rsquo;m using Markdown as my way to write the blogs and have already using &lt;code&gt;unified.js&lt;/code&gt; ecosystem to work along with &lt;code&gt;Next.js&lt;/code&gt;. Luckily, unified ecosystem already has code highlighting plug-in which uses &lt;code&gt;highlight.js&lt;/code&gt; through &lt;code&gt;lowlight.js&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Adding Table of Contents (TOC) to Next.js Markdown blog</title><link>https://priyashpatil.com/posts/adding-table-of-contents-toc-to-nextjs-markdown-blog/</link><pubDate>Mon, 14 Feb 2022 10:14:26 +0000</pubDate><guid>https://priyashpatil.com/posts/adding-table-of-contents-toc-to-nextjs-markdown-blog/</guid><description>&lt;p&gt;This is the follow-up to my previous post about &lt;a href="https://priyashpatil.com/posts/adding-categories-to-nextjs-markdown-blog"&gt;adding categories support&lt;/a&gt;
. To follow with this post you can check out the source code from this &lt;a href="https://github.com/priyashpatil/blog-examples/tree/main/002_adding-categories"&gt;GitHub Revision&lt;/a&gt;
.&lt;/p&gt;
&lt;h2 id="problem-statement"&gt;Problem Statement&lt;/h2&gt;
&lt;p&gt;Just converting Markdown to HTML is not enough. We could add the table of content manually but for every change, it would require manual updates each time and possibly can break old links if not maintained correctly.&lt;/p&gt;
&lt;h2 id="solution"&gt;Solution&lt;/h2&gt;
&lt;p&gt;As you can see in to that I&amp;rsquo;m already using &lt;code&gt;rmark-html&lt;/code&gt; to convert Markdown to HTML. &lt;code&gt;remark-html&lt;/code&gt; is package from &lt;code&gt;unified.js&lt;/code&gt;. Similar to &lt;code&gt;remark-html&lt;/code&gt;, unified.js also have other packages the ecosystem. So for our case we will be using &lt;code&gt;remark-toc&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Adding categories to Next.js Markdown blog</title><link>https://priyashpatil.com/posts/adding-categories-to-nextjs-markdown-blog/</link><pubDate>Sat, 12 Feb 2022 10:14:26 +0000</pubDate><guid>https://priyashpatil.com/posts/adding-categories-to-nextjs-markdown-blog/</guid><description>&lt;p&gt;After following the learn &lt;a href="https://nextjs.org/learn/basics/create-nextjs-app"&gt;Next.js tutorial&lt;/a&gt;
, I have code similar to this &lt;a href="https://github.com/priyashpatil/blog-examples/tree/main/001_typescript-final"&gt;GitHub Revision&lt;/a&gt;
. This post is about adding a categories feature for my blog.&lt;/p&gt;
&lt;h2 id="problem-statement"&gt;Problem statement&lt;/h2&gt;
&lt;p&gt;If you run the application shared on this &lt;a href="https://github.com/priyashpatil/blog-examples/tree/main/001_typescript-final"&gt;GitHub Revision&lt;/a&gt;
 you&amp;rsquo;ll see no blog categories. One of the well-known ways to organize blog content is by categorizing each blog. So, the following is the list of requirements I came up with for adding the categories feature to my blog.&lt;/p&gt;</description></item><item><title>About</title><link>https://priyashpatil.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://priyashpatil.com/about/</guid><description/></item><item><title>Privacy Policy</title><link>https://priyashpatil.com/privacy-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://priyashpatil.com/privacy-policy/</guid><description>&lt;p&gt;&lt;em&gt;Last updated: 11 July 2026&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is a personal website operated by Priyash Patil. It publishes articles, project information, and links to work elsewhere on the web. It does not offer accounts, purchases, comments, advertising, or user-submitted forms.&lt;/p&gt;
&lt;h2 id="what-this-site-does-not-collect"&gt;What this site does not collect&lt;/h2&gt;
&lt;p&gt;I do not use this site to collect your name, email address, phone number, payment details, account credentials, or other information that directly identifies you.&lt;/p&gt;
&lt;p&gt;The site does not use advertising cookies, marketing pixels, cross-site tracking, behavioural profiling, or fingerprinting. I do not sell or share visitor information for advertising or commercial profiling.&lt;/p&gt;</description></item><item><title>Terms of Use</title><link>https://priyashpatil.com/terms-of-service/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://priyashpatil.com/terms-of-service/</guid><description>&lt;p&gt;&lt;em&gt;Last updated: 11 July 2026&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;These terms apply when you access or use priyashpatil.com. This is a personal, informational website operated by Priyash Patil. It is not an online store, subscription service, social platform, or professional consultancy.&lt;/p&gt;
&lt;h2 id="using-the-site"&gt;Using the site&lt;/h2&gt;
&lt;p&gt;You may browse, link to, and share pages from this site for lawful purposes. You must not deliberately interfere with the site&amp;rsquo;s operation, attempt to bypass its security, introduce malicious code, or use it in a way that violates applicable law or the rights of others.&lt;/p&gt;</description></item></channel></rss>