<?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>Forem: Vishwa Pratap Singh</title>
    <description>The latest articles on Forem by Vishwa Pratap Singh (@vishwapratapsingh90).</description>
    <link>https://forem.com/vishwapratapsingh90</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3678700%2F4a56ea2b-a827-4d3e-9177-a9cf7462aa3a.jpg</url>
      <title>Forem: Vishwa Pratap Singh</title>
      <link>https://forem.com/vishwapratapsingh90</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/vishwapratapsingh90"/>
    <language>en</language>
    <item>
      <title>Project BookMyShow: Day 9</title>
      <dc:creator>Vishwa Pratap Singh</dc:creator>
      <pubDate>Sun, 08 Feb 2026 22:05:06 +0000</pubDate>
      <link>https://forem.com/vishwapratapsingh90/project-bookmyshow-day-9-4lo7</link>
      <guid>https://forem.com/vishwapratapsingh90/project-bookmyshow-day-9-4lo7</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Added API to fetch role permissions&lt;/li&gt;
&lt;li&gt;Added API to assign role permission&lt;/li&gt;
&lt;li&gt;Added API to revoke role permission&lt;/li&gt;
&lt;li&gt;Added Manage Role Permissions provision&lt;/li&gt;
&lt;li&gt;Added Assign Role Permission provision&lt;/li&gt;
&lt;li&gt;Added Revoke Role Permission provision&lt;/li&gt;
&lt;li&gt;Added screenshots&lt;/li&gt;
&lt;li&gt;Updated Swagger document&lt;/li&gt;
&lt;li&gt;Updated Readme.md&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://github.com/vishwapratapsingh90/practise/tree/main/php/BookMyShow" rel="noopener noreferrer"&gt;BookMyShow&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&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%2Fqq0erb11w8kvhsvq6lj7.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%2Fqq0erb11w8kvhsvq6lj7.png" alt=" " width="800" height="475"&gt;&lt;/a&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%2Fu5z2u8cumxfl8fxwwaxd.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%2Fu5z2u8cumxfl8fxwwaxd.png" alt=" " width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>laravel</category>
      <category>react</category>
    </item>
    <item>
      <title>Project BookMyShow: Day 8</title>
      <dc:creator>Vishwa Pratap Singh</dc:creator>
      <pubDate>Sun, 01 Feb 2026 19:28:42 +0000</pubDate>
      <link>https://forem.com/vishwapratapsingh90/project-bookmyshow-day-8-dfk</link>
      <guid>https://forem.com/vishwapratapsingh90/project-bookmyshow-day-8-dfk</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Permission - fetch, create, update, delete &amp;amp; swagger YAML document.&lt;/li&gt;
&lt;li&gt;Permissions - listing, view, update, create and delete pages.&lt;/li&gt;
&lt;li&gt;Screenshots added and document updated.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://github.com/vishwapratapsingh90/practise/tree/main/php/BookMyShow" rel="noopener noreferrer"&gt;BookMyShow&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&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%2Fq4vuipgpn6x6znh872lk.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%2Fq4vuipgpn6x6znh872lk.png" alt="Manage Permissions" width="800" height="430"&gt;&lt;/a&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%2F15ckhsfaw0af1lmvqhyv.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%2F15ckhsfaw0af1lmvqhyv.png" alt="Create Permission" width="800" height="451"&gt;&lt;/a&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%2Ffxh48ra71x7b3wbdnaft.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%2Ffxh48ra71x7b3wbdnaft.png" alt="View Permission" width="800" height="450"&gt;&lt;/a&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%2Fgo15c1kkgb6kyz7nk0sy.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%2Fgo15c1kkgb6kyz7nk0sy.png" alt="Edit Permission" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>laravel</category>
      <category>react</category>
      <category>php</category>
    </item>
    <item>
      <title>Project BookMyShow: Day 7</title>
      <dc:creator>Vishwa Pratap Singh</dc:creator>
      <pubDate>Sun, 18 Jan 2026 13:12:04 +0000</pubDate>
      <link>https://forem.com/vishwapratapsingh90/project-bookmyshow-day-7-boe</link>
      <guid>https://forem.com/vishwapratapsingh90/project-bookmyshow-day-7-boe</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Introduced Kubernetes kubectl k8s folder with required build scripts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added Kubernetes deployment guide doc&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added Role Create, Read, Update &amp;amp; Delete APIs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added API doc&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added CSRF Laravel Sanctum verification&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added Roles Create, View, Edit &amp;amp; Delete React Components and provisions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://github.com/vishwapratapsingh90/practise/tree/main/php/BookMyShow" rel="noopener noreferrer"&gt;BookMyShow&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&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%2F97gvxb8pj926rhm2wzbw.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%2F97gvxb8pj926rhm2wzbw.png" alt="Manage Roles" width="800" height="431"&gt;&lt;/a&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%2Fbcgpobxv8o4ugnnre7te.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%2Fbcgpobxv8o4ugnnre7te.png" alt="Create Role" width="800" height="431"&gt;&lt;/a&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%2Fekxi5v26qcdjcx1jqvg8.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%2Fekxi5v26qcdjcx1jqvg8.png" alt="View Role" width="800" height="436"&gt;&lt;/a&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%2Fgvtc5xkg0636k4uw7oz2.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%2Fgvtc5xkg0636k4uw7oz2.png" alt="Edit Role" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>laravel</category>
      <category>react</category>
    </item>
    <item>
      <title>Complete Guide: Deploying a Laravel + React Application on Kubernetes with Minikube</title>
      <dc:creator>Vishwa Pratap Singh</dc:creator>
      <pubDate>Mon, 12 Jan 2026 19:04:23 +0000</pubDate>
      <link>https://forem.com/vishwapratapsingh90/complete-guide-deploying-a-laravel-react-application-on-kubernetes-with-minikube-976</link>
      <guid>https://forem.com/vishwapratapsingh90/complete-guide-deploying-a-laravel-react-application-on-kubernetes-with-minikube-976</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As a beginner stepping into the world of Kubernetes, deploying a full-stack application can seem overwhelming. In this comprehensive guide, I'll walk you through deploying a Laravel + React application (&lt;a href="https://github.com/vishwapratapsingh90/practise/tree/main/php/BookMyShow" rel="noopener noreferrer"&gt;BookMyShow&lt;/a&gt;) on Kubernetes using Minikube on Windows. By the end of this guide, you'll understand not just how to deploy, but why each step matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Kubernetes and Why Use It?
&lt;/h2&gt;

&lt;p&gt;Kubernetes (often abbreviated as K8s) is an open-source container orchestration platform. Think of it as an intelligent manager that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatically deploys and manages containers&lt;/li&gt;
&lt;li&gt;Scales applications up or down based on demand&lt;/li&gt;
&lt;li&gt;Handles service discovery and load balancing&lt;/li&gt;
&lt;li&gt;Self-heals by restarting failed containers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Minikube&lt;/strong&gt; is a lightweight Kubernetes implementation that creates a local Kubernetes cluster on your machine—perfect for learning and development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;br&gt;
Before we begin, ensure you have the following installed on your Windows machine:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Docker Desktop - Provides containerization capabilities&lt;/li&gt;
&lt;li&gt;Minikube - Local Kubernetes cluster&lt;/li&gt;
&lt;li&gt;kubectl - Command-line tool for interacting with Kubernetes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Verify Installation&lt;br&gt;
Open PowerShell and verify installations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Check Docker
docker --version

# Check Minikube
minikube version

# Check kubectl
kubectl version --client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Understanding the Architecture
&lt;/h2&gt;

&lt;p&gt;Our application consists of multiple components:&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%2Fm2g5dii6r1zyc79lq6ad.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%2Fm2g5dii6r1zyc79lq6ad.png" alt=" " width="795" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Kubernetes Concepts Explained
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pods
A Pod is the smallest deployable unit in Kubernetes. It's a wrapper around one or more containers. In our case, we have separate pods for:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;# 1. Laravel application&lt;br&gt;
  # 2. MySQL database&lt;br&gt;
  # 3. Redis cache&lt;br&gt;
  # 4. phpMyAdmin&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Deployments&lt;br&gt;
A Deployment describes the desired state for your pods. It ensures the specified number of pod replicas are running and handles updates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Services&lt;br&gt;
A Service provides a stable network endpoint to access pods. Even when pods restart and get new IP addresses, the service remains constant.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Persistent Volumes&lt;br&gt;
Persistent Volumes (PV) provide storage that persists beyond pod lifecycles. Essential for databases where data must survive pod restarts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Secrets&lt;br&gt;
Secrets store sensitive information like passwords and API keys securely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Init Containers&lt;br&gt;
Init Containers run before the main application container starts. They're perfect for setup tasks like installing dependencies.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Step-by-Step Deployment Guide
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Start Minikube&lt;br&gt;
First, ensure Docker Desktop is running, then start Minikube:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;minikube start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What happens here?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minikube creates a virtual machine&lt;/li&gt;
&lt;li&gt;Installs Kubernetes components&lt;/li&gt;
&lt;li&gt;Sets up a single-node cluster
&lt;strong&gt;Step 2:&lt;/strong&gt; Configure Docker Environment
When building Docker images for Minikube, we need to use Minikube's Docker daemon instead of Docker Desktop's:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;minikube -p minikube docker-env --shell powershell | Invoke-Expression
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why is this important? When you build an image using your local Docker, Minikube can't see it because it runs in its own VM. This command configures your terminal to use Minikube's Docker daemon, so images you build are directly accessible to Minikube.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Build Your Application Image&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t sail-8.5/app:latest .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Understanding the Dockerfile: Your Dockerfile typically:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Starts from a base PHP image with necessary extensions&lt;/li&gt;
&lt;li&gt;Installs Composer dependencies&lt;/li&gt;
&lt;li&gt;Copies application code&lt;/li&gt;
&lt;li&gt;Sets up permissions&lt;/li&gt;
&lt;li&gt;Configures the web server&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Deploy in the Correct Order&lt;br&gt;
Kubernetes resources must be deployed in a specific order:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 1. Secrets first (needed by other services)
kubectl apply -f k8s\secrets.yaml

# 2. Storage volumes
kubectl apply -f k8s\persistent-volumes.yaml

# 3. Database and supporting services
kubectl apply -f k8s\mysql-deployment.yaml
kubectl apply -f k8s\redis-deployment.yaml
kubectl apply -f k8s\phpmyadmin-deployment.yaml

# 4. Wait for database to be ready
kubectl wait --for=condition=ready pod -l tier=database --timeout=120s

# 5. Finally, deploy the application
kubectl apply -f k8s\deployment.yaml
kubectl apply -f k8s\service.yaml

# 6. Wait for application to be ready
`kubectl wait --for=condition=ready pod -l tier=frontend --timeout=120s`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why this order?&lt;/p&gt;

&lt;p&gt;Secrets must exist before services reference them&lt;br&gt;
Databases must be ready before applications try to connect&lt;br&gt;
The kubectl wait command ensures each layer is fully operational before proceeding&lt;br&gt;
&lt;strong&gt;Step 5:&lt;/strong&gt; Initialize the Database&lt;br&gt;
Once pods are running, initialize your database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Get the pod name dynamically
$podName = kubectl get pods -l tier=frontend -o jsonpath='{.items[0].metadata.name}'

# Run migrations
kubectl exec -it $podName -- php artisan migrate

# Seed database with sample data
kubectl exec -it $podName -- php artisan db:seed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Understanding kubectl exec: This command runs a command inside a running container, similar to SSH-ing into a server. The -it flags mean:&lt;/p&gt;

&lt;p&gt;-i: Keep stdin open (interactive)&lt;br&gt;
-t: Allocate a pseudo-TTY (terminal)&lt;br&gt;
&lt;strong&gt;Step 6:&lt;/strong&gt; Start the Development Server&lt;br&gt;
For Laravel + React applications using Vite, we need to start the Vite development server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl exec -it $podName -- npm run dev -- --host 0.0.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why --host 0.0.0.0? By default, Vite binds to localhost, which is only accessible from within the container. Using 0.0.0.0 makes it accessible from outside the container.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7:&lt;/strong&gt; Handle CORS with Port Forwarding&lt;br&gt;
Modern web development often involves CORS (Cross-Origin Resource Sharing) challenges. Here's the solution:&lt;/p&gt;
&lt;h1&gt;
  
  
  Port-forward the Vite dev server
&lt;/h1&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Start-Job -Name "port-5173" -ScriptBlock { 
    kubectl port-forward $using:podName 5173:5173 
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;What is port-forwarding? Port-forwarding creates a tunnel from your local machine to a pod. When your browser on localhost:5173 makes a request, it's forwarded to the pod's port 5173.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8:&lt;/strong&gt; Access Your Application&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Get the application URL
minikube service bookmyshow-service --url

# Get phpMyAdmin URL
minikube service phpmyadmin-service --url
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Understanding Minikube Services: Minikube exposes services through NodePort, which maps a port on the Minikube VM to your service. The --url flag returns the accessible URL.&lt;/p&gt;

&lt;p&gt;Understanding the Kubernetes Configuration Files&lt;br&gt;
secrets.yaml - Securing Sensitive Data&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: Opaque
data:
  password: cGFzc3dvcmQ=  # base64 encoded
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key Points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secrets are base64 encoded (not encrypted!)&lt;/li&gt;
&lt;li&gt;In production, use tools like Sealed Secrets or external secret managers&lt;/li&gt;
&lt;li&gt;Never commit real secrets to version control
deployment.yaml - Application Blueprint
The deployment file contains:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Init Containers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;initContainers:
- name: init-permissions
  # Sets up file permissions
- name: npm-install
  # Installs Node dependencies
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why Init Containers? They run sequentially before the main container starts, perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setting up permissions&lt;/li&gt;
&lt;li&gt;Installing dependencies&lt;/li&gt;
&lt;li&gt;Running database migrations&lt;/li&gt;
&lt;li&gt;Downloading configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Main Container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;containers:
- name: app
  image: sail-8.5/app:latest
  imagePullPolicy: Never  # Use local image
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;imagePullPolicy: Never tells Kubernetes not to pull from a registry, using the local image we built instead.&lt;/p&gt;

&lt;p&gt;Volume Mounts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;volumeMounts:
- name: app-storage
  mountPath: /var/www/html/storage
- name: node-modules
  mountPath: /var/www/html/node_modules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Volumes persist data across pod restarts. We use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PersistentVolumeClaim for important data (storage)&lt;/li&gt;
&lt;li&gt;emptyDir for temporary data (cache, node_modules)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;service.yaml - Network Access&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: v1
kind: Service
metadata:
  name: bookmyshow-service
spec:
  type: NodePort
  selector:
    app: bookmyshow
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Service Types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ClusterIP (default): Only accessible within cluster&lt;/li&gt;
&lt;li&gt;NodePort: Accessible on each node's IP at a static port&lt;/li&gt;
&lt;li&gt;LoadBalancer: Cloud provider load balancer (not available in Minikube)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Essential kubectl Commands
&lt;/h2&gt;

&lt;p&gt;Viewing Resources&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
# View all resources
kubectl get all

# View specific resources
kubectl get pods
kubectl get deployments
kubectl get services

# Detailed information
kubectl describe pod &amp;lt;pod-name&amp;gt;
kubectl get pods -o wide  # Shows IP addresses and nodes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Logs and Debugging&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# View logs (last logs)
kubectl logs &amp;lt;pod-name&amp;gt;

# Stream logs (follow mode)
kubectl logs -f &amp;lt;pod-name&amp;gt;

# Logs from all pods with a label
kubectl logs -l tier=frontend -f

# View previous container's logs (if crashed)
kubectl logs &amp;lt;pod-name&amp;gt; --previous

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

&lt;/div&gt;



&lt;p&gt;Executing Commands&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Run a command
kubectl exec &amp;lt;pod-name&amp;gt; -- ls -la

# Interactive shell
kubectl exec -it &amp;lt;pod-name&amp;gt; -- bash

# Run command in specific container (multi-container pods)
kubectl exec -it &amp;lt;pod-name&amp;gt; -c &amp;lt;container-name&amp;gt; -- bash

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

&lt;/div&gt;



&lt;p&gt;Managing Resources&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Apply changes
kubectl apply -f &amp;lt;file.yaml&amp;gt;

# Delete resources
kubectl delete -f &amp;lt;file.yaml&amp;gt;
kubectl delete pod &amp;lt;pod-name&amp;gt;

# Force restart deployment
kubectl rollout restart deployment &amp;lt;deployment-name&amp;gt;

# Check rollout status
kubectl rollout status deployment &amp;lt;deployment-name&amp;gt;

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

&lt;/div&gt;



&lt;p&gt;Daily Workflow: Starting Your Development Environment&lt;br&gt;
After shutting down or restarting your computer, here's your quick-start routine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 1. Start Minikube
minikube start

# 2. Wait for pods to be ready (they persist between minikube stops)
kubectl wait --for=condition=ready pod -l tier=frontend --timeout=120s

# 3. Get pod name
$podName = kubectl get pods -l tier=frontend -o jsonpath='{.items[0].metadata.name}'

# 4. Start Vite dev server in background
Start-Job -Name "vite-dev" -ScriptBlock { 
    kubectl exec -it $using:podName -- npm run dev -- --host 0.0.0.0 
}

# 5. Port-forward for CORS
Start-Job -Name "port-5173" -ScriptBlock { 
    kubectl port-forward $using:podName 5173:5173 
}

# 6. Get application URLs
minikube service bookmyshow-service --url
minikube service phpmyadmin-service --url
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Common Issues and Solutions
&lt;/h2&gt;

&lt;p&gt;Issue 1: Image Pull Errors&lt;br&gt;
Error: ErrImagePull or ImagePullBackOff&lt;/p&gt;

&lt;p&gt;Solution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Rebuild using Minikube's Docker
minikube -p minikube docker-env --shell powershell | Invoke-Expression
docker build -t sail-8.5/app:latest .
kubectl delete pod -l tier=frontend

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

&lt;/div&gt;



&lt;p&gt;Why? Kubernetes tries to pull from a registry, but our image only exists locally in Minikube's Docker.&lt;/p&gt;

&lt;p&gt;Issue 2: CORS Errors&lt;br&gt;
Error: CORS request did not succeed&lt;/p&gt;

&lt;p&gt;Solution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
# Port-forward the Vite dev server
Start-Job -ScriptBlock { kubectl port-forward $using:podName 5173:5173 }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why? Your browser can't directly access the Vite dev server inside the pod without port-forwarding.&lt;/p&gt;

&lt;p&gt;Issue 3: Port Already in Use&lt;br&gt;
Error: Port 5173 is already in use&lt;/p&gt;

&lt;p&gt;Solution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Kill the existing process
kubectl exec -it $podName -- pkill -f "vite"

# Or restart the pod
kubectl delete pod -l tier=frontend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Issue 4: Database Connection Failed&lt;br&gt;
Solution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Check if MySQL pod is running
kubectl get pods -l tier=database

# Check MySQL logs
kubectl logs -l tier=database

# Verify service exists
kubectl get service mysql-service

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Debugging Tips:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Services use DNS names (e.g., mysql-service)&lt;/li&gt;
&lt;li&gt;Check environment variables are correct&lt;/li&gt;
&lt;li&gt;Ensure secrets are created before deployments&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Use Labels Consistently&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Labels help organize and select resources:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;labels:
  app: bookmyshow
  tier: frontend
  environment: development
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Set Resource Limits
Prevent resource exhaustion:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resources:
  requests:
    memory: "256Mi"
    cpu: "250m"
  limits:
    memory: "512Mi"
    cpu: "500m"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Use Health Checks
Add liveness and readiness probes:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;livenessProbe:
  httpGet:
    path: /health
    port: 80
  initialDelaySeconds: 30
  periodSeconds: 10

readinessProbe:
  httpGet:
    path: /ready
    port: 80
  initialDelaySeconds: 10
  periodSeconds: 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Namespace Your Resources
For larger projects, use namespaces:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Create namespace
kubectl create namespace bookmyshow

# Deploy to namespace
kubectl apply -f deployment.yaml -n bookmyshow

# Set default namespace
kubectl config set-context --current --namespace=bookmyshow

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

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Use ConfigMaps for Configuration
Separate configuration from code:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  APP_ENV: "local"
  LOG_LEVEL: "debug"
Monitoring and Observability
Viewing Resource Usage
# Pod resource usage
kubectl top pods

# Node resource usage
kubectl top nodes

# Describe for events
kubectl describe pod &amp;lt;pod-name&amp;gt;

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

&lt;/div&gt;



&lt;p&gt;Accessing Kubernetes Dashboard&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Start dashboard
minikube dashboard

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

&lt;/div&gt;



&lt;p&gt;This opens a web UI showing all cluster resources visually.&lt;/p&gt;

&lt;p&gt;Cleaning Up&lt;br&gt;
Partial Cleanup (Keep Cluster)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Delete all application resources
kubectl delete -f k8s\service.yaml
kubectl delete -f k8s\deployment.yaml
kubectl delete -f k8s\phpmyadmin-deployment.yaml
kubectl delete -f k8s\redis-deployment.yaml
kubectl delete -f k8s\mysql-deployment.yaml
kubectl delete -f k8s\persistent-volumes.yaml
kubectl delete -f k8s\secrets.yaml

# Stop Minikube (preserves cluster state)
minikube stop

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

&lt;/div&gt;



&lt;p&gt;Complete Cleanup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Delete entire cluster
minikube delete

# This removes everything: all pods, services, volumes

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

&lt;/div&gt;



&lt;p&gt;Understanding PowerShell Background Jobs&lt;br&gt;
PowerShell jobs let processes run in the background:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Start a background job
Start-Job -Name "my-job" -ScriptBlock { 
    # Long-running command
}

# List jobs
Get-Job

# View job output
Receive-Job -Name "my-job"

# Stop and remove
Stop-Job -Name "my-job"
Remove-Job -Name "my-job"

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

&lt;/div&gt;



&lt;p&gt;When to use jobs:&lt;/p&gt;

&lt;p&gt;Port-forwarding (needs to stay active)&lt;br&gt;
Running dev servers&lt;br&gt;
Any long-running process that blocks your terminal&lt;br&gt;
Advanced Topics to Explore Next&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Helm Charts&lt;br&gt;
Package manager for Kubernetes—like npm for K8s.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ingress Controllers&lt;br&gt;
Advanced routing and load balancing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;StatefulSets&lt;br&gt;
For stateful applications like databases with specific pod identity requirements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Horizontal Pod Autoscaling&lt;br&gt;
Automatically scale pods based on CPU/memory usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CI/CD Integration&lt;br&gt;
Automate deployment with GitHub Actions, Jenkins, or GitLab CI.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Congratulations! You've successfully deployed a full-stack Laravel + React application on Kubernetes using Minikube. You now understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Core Kubernetes concepts (Pods, Deployments, Services)&lt;/li&gt;
&lt;li&gt;How to use kubectl effectively&lt;/li&gt;
&lt;li&gt;Troubleshooting common issues&lt;/li&gt;
&lt;li&gt;Daily development workflow with Kubernetes&lt;/li&gt;
&lt;li&gt;Best practices for container orchestration
Kubernetes has a steep learning curve, but with hands-on practice like this, you'll quickly become proficient. The skills you've learned here apply not just to local development with Minikube, but also to production Kubernetes clusters in the cloud (AWS EKS, Google GKE, Azure AKS).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Additional Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Official Kubernetes Documentation: &lt;a href="https://kubernetes.io/docs/" rel="noopener noreferrer"&gt;https://kubernetes.io/docs/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Minikube Documentation: &lt;a href="https://minikube.sigs.k8s.io/docs/" rel="noopener noreferrer"&gt;https://minikube.sigs.k8s.io/docs/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;kubectl Cheat Sheet: &lt;a href="https://kubernetes.io/docs/reference/kubectl/cheatsheet/" rel="noopener noreferrer"&gt;https://kubernetes.io/docs/reference/kubectl/cheatsheet/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Interactive Tutorial: &lt;a href="https://kubernetes.io/docs/tutorials/kubernetes-basics/" rel="noopener noreferrer"&gt;https://kubernetes.io/docs/tutorials/kubernetes-basics/&lt;/a&gt;
Happy Kubernetes learning! 🚀&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This guide is based on deploying the &lt;a href="https://github.com/vishwapratapsingh90/practise/tree/main/php/BookMyShow" rel="noopener noreferrer"&gt;BookMyShow &lt;/a&gt; application on Windows with Docker Desktop and Minikube. For production deployments, consider additional security measures, monitoring solutions, and cloud-native services.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>docker</category>
      <category>laravel</category>
      <category>react</category>
    </item>
    <item>
      <title>Project BookMyShow: Day 6</title>
      <dc:creator>Vishwa Pratap Singh</dc:creator>
      <pubDate>Sun, 11 Jan 2026 14:37:42 +0000</pubDate>
      <link>https://forem.com/vishwapratapsingh90/project-bookmyshow-day-6-2dm4</link>
      <guid>https://forem.com/vishwapratapsingh90/project-bookmyshow-day-6-2dm4</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Updated fetch roles API with pagination.&lt;/li&gt;
&lt;li&gt;Integrated &lt;a href="https://datatables.net/manual/react#Ajax-data" rel="noopener noreferrer"&gt;React Datatable&lt;/a&gt;, for listing roles&lt;/li&gt;
&lt;li&gt;Added fetch permissions API with pagination.&lt;/li&gt;
&lt;li&gt;Integrated &lt;a href="https://datatables.net/manual/react#Ajax-data" rel="noopener noreferrer"&gt;React Datatable&lt;/a&gt;, for listing permissions&lt;/li&gt;
&lt;li&gt;Updated Swagger API document&lt;/li&gt;
&lt;li&gt;Updated Readme.md&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Screenshots:&lt;/strong&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%2Fdj8r1j9nsj8guo238a3i.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%2Fdj8r1j9nsj8guo238a3i.png" alt="Manage Roles" width="800" height="416"&gt;&lt;/a&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%2F0mp53a6cuinhjb094deq.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%2F0mp53a6cuinhjb094deq.png" alt="Manage Permissions" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>laravel</category>
      <category>react</category>
    </item>
    <item>
      <title>Project BookMyShow: Day 5</title>
      <dc:creator>Vishwa Pratap Singh</dc:creator>
      <pubDate>Sun, 04 Jan 2026 20:11:47 +0000</pubDate>
      <link>https://forem.com/vishwapratapsingh90/project-bookmyshow-day-5-4a1c</link>
      <guid>https://forem.com/vishwapratapsingh90/project-bookmyshow-day-5-4a1c</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Added menu Component&lt;/li&gt;
&lt;li&gt;Json API Response trait added to follow &lt;a href="https://jsonapi.org/format/" rel="noopener noreferrer"&gt;JSON API&lt;/a&gt; specifications&lt;/li&gt;
&lt;li&gt;New fetch roles api.&lt;/li&gt;
&lt;li&gt;Added flowbite: Tailwind library&lt;/li&gt;
&lt;li&gt;Integrated Simple Datatable, for listing records&lt;/li&gt;
&lt;li&gt;Adjusted themeContext &amp;amp; theme.js as per flowbite classes&lt;/li&gt;
&lt;li&gt;updated swagger API document&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://github.com/vishwapratapsingh90/practise/tree/main/php/BookMyShow" rel="noopener noreferrer"&gt;BookMyShow&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>laravel</category>
      <category>react</category>
      <category>flowbite</category>
    </item>
    <item>
      <title>Project BookMyShow: Day 4</title>
      <dc:creator>Vishwa Pratap Singh</dc:creator>
      <pubDate>Thu, 01 Jan 2026 19:21:19 +0000</pubDate>
      <link>https://forem.com/vishwapratapsingh90/project-bookmyshow-day-4-1koc</link>
      <guid>https://forem.com/vishwapratapsingh90/project-bookmyshow-day-4-1koc</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Role Permission authorization check added for admin and customer dashboard&lt;/li&gt;
&lt;li&gt;Authorization failure logic handled&lt;/li&gt;
&lt;li&gt;Bugfix: for relative API endpoint resolved.&lt;/li&gt;
&lt;li&gt;API Swagger document added.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://github.com/vishwapratapsingh90/practise/tree/main/php/BookMyShow" rel="noopener noreferrer"&gt;https://github.com/vishwapratapsingh90/practise/tree/main/php/BookMyShow&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Project BookMyShow: Day 3</title>
      <dc:creator>Vishwa Pratap Singh</dc:creator>
      <pubDate>Tue, 30 Dec 2025 13:51:11 +0000</pubDate>
      <link>https://forem.com/vishwapratapsingh90/project-bookmyshow-day-3-2a8e</link>
      <guid>https://forem.com/vishwapratapsingh90/project-bookmyshow-day-3-2a8e</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Migrations for Roles, Permissions, User_Role, Role_Permission&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Seeders for Roles, User_Role, Permissions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Created authorize API for logged-in user and permission slug passed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added Authentication token for logout calls&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;PS:&lt;/u&gt; Making setup ready for permission authorization post login for various navigation pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://github.com/vishwapratapsingh90/practise/tree/main/php/BookMyShow" rel="noopener noreferrer"&gt;BookMyShow&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>react</category>
      <category>laravel</category>
      <category>php</category>
    </item>
    <item>
      <title>Project BookMyShow: Day 2</title>
      <dc:creator>Vishwa Pratap Singh</dc:creator>
      <pubDate>Fri, 26 Dec 2025 15:17:26 +0000</pubDate>
      <link>https://forem.com/vishwapratapsingh90/day-2-bookmyshow-progress-5c30</link>
      <guid>https://forem.com/vishwapratapsingh90/day-2-bookmyshow-progress-5c30</guid>
      <description>&lt;ul&gt;
&lt;li&gt;New registration API via. Laravel&lt;/li&gt;
&lt;li&gt;New registration form via. ReactJs&lt;/li&gt;
&lt;li&gt;Custom client-side form validations added for registration and login&lt;/li&gt;
&lt;li&gt;Readme document updated with screenshots&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://github.com/vishwapratapsingh90/practise/tree/main/php/BookMyShow" rel="noopener noreferrer"&gt;BookMyShow&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>javascript</category>
      <category>laravel</category>
      <category>react</category>
    </item>
    <item>
      <title>Project BookMyShow: Day 1</title>
      <dc:creator>Vishwa Pratap Singh</dc:creator>
      <pubDate>Fri, 26 Dec 2025 07:57:21 +0000</pubDate>
      <link>https://forem.com/vishwapratapsingh90/checkout-my-new-project-48e4</link>
      <guid>https://forem.com/vishwapratapsingh90/checkout-my-new-project-48e4</guid>
      <description>&lt;p&gt;During a day off tried some hands off using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Laravel Sail (Docker)&lt;/li&gt;
&lt;li&gt;Laravel API using (Sanctum Authentication)&lt;/li&gt;
&lt;li&gt;Vite Server&lt;/li&gt;
&lt;li&gt;ReactJs + ReactIcon + Tailwind CSS&lt;/li&gt;
&lt;li&gt;MySql&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://github.com/vishwapratapsingh90/practise/tree/main/php/BookMyShow" rel="noopener noreferrer"&gt;https://github.com/vishwapratapsingh90/practise/tree/main/php/BookMyShow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Screenshots:&lt;/strong&gt;&lt;br&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%2Ffvgoepso0ff32xkeot5o.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%2Ffvgoepso0ff32xkeot5o.png" alt="Home Page" width="800" height="453"&gt;&lt;/a&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%2Fnpt5ec5miy9jrtx7b56c.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%2Fnpt5ec5miy9jrtx7b56c.png" alt="Login" width="800" height="416"&gt;&lt;/a&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%2Fakthoo2c0l3u2g78lnet.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%2Fakthoo2c0l3u2g78lnet.png" alt="Admin Dashboard" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>react</category>
      <category>docker</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
