<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Ashwin | Cloud & DevOps Engineering]]></title><description><![CDATA[Real-world projects, infrastructure automation, CI/CD, Kubernetes and cloud engineering.]]></description><link>https://ashwink1808.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Thu, 05 Nov 2026 13:43:37 GMT</lastBuildDate><atom:link href="https://ashwink1808.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Building RideMatch AI: From a Vehicle Discovery App to a DevOps-Enabled Full-Stack Project]]></title><description><![CDATA[Building RideMatch AI: From a Vehicle Discovery App to a DevOps-Enabled Full-Stack Project]]></description><link>https://ashwink1808.hashnode.dev/building-ridematch-ai-from-a-vehicle-discovery-app-to-a-devops-enabled-full-stack-project</link><guid isPermaLink="true">https://ashwink1808.hashnode.dev/building-ridematch-ai-from-a-vehicle-discovery-app-to-a-devops-enabled-full-stack-project</guid><category><![CDATA[Devops]]></category><category><![CDATA[gitops]]></category><category><![CDATA[CI/CD]]></category><category><![CDATA[observability]]></category><category><![CDATA[project]]></category><dc:creator><![CDATA[ashwin krishnan]]></dc:creator><pubDate>Mon, 02 Nov 2026 09:47:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae82717a8f6271971a01a60/71551522-72ac-427f-892d-92e56729c531.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Vehicle discovery often means switching between multiple platforms, comparing specifications manually, and trying to determine which option actually fits a budget and a set of preferences.</p>
<p>I wanted to bring those activities into one application.</p>
<p>That idea became <strong>RideMatch AI</strong> — a full-stack vehicle discovery platform that combines a searchable vehicle catalogue, AI-assisted recommendations, comparison features, and a containerized application architecture.</p>
<p>This article explains the application, the engineering decisions behind it, and the DevOps practices I implemented around it.</p>
<h2>1. What is RideMatch AI?</h2>
<p>RideMatch AI allows users to explore vehicles, filter them by preferences, compare specifications, and receive AI-assisted recommendations.</p>
<p>The application includes:</p>
<ul>
<li>Vehicle discovery and filtering</li>
<li>AI-assisted recommendations</li>
<li>Vehicle comparison</li>
<li>JWT authentication</li>
<li>Favorites</li>
<li>Automotive news integration</li>
<li>Fuel cost calculation</li>
<li>Dashboard statistics</li>
</ul>
<p>The technology stack consists of Next.js, React, Node.js, Express, PostgreSQL, Google Gemini, Docker, Docker Compose, GitHub Actions, AWS, and Terraform.</p>
<h2>2. Application architecture</h2>
<p>I separated the application into three main layers:</p>
<p><strong>Frontend:</strong> Next.js and React provide the user interface.</p>
<p><strong>Backend:</strong> Node.js and Express handle API requests, business logic, authentication, and integrations.</p>
<p><strong>Database:</strong> PostgreSQL stores vehicle catalogue information and application data.</p>
<p>Gemini and the news API are external integrations used by the backend.</p>
<pre><code class="language-mermaid">flowchart TD
    User --&gt; Frontend[Next.js Frontend]
    Frontend --&gt; API[Express Backend]
    API --&gt; DB[(PostgreSQL)]
    API --&gt; Gemini[Gemini API]
    API --&gt; News[News API]
</code></pre>
<p>This separation keeps UI concerns, API logic, and persistent data responsibilities distinct.</p>
<h2>3. Designing the recommendation engine</h2>
<p>One of the important engineering decisions was not to rely entirely on an LLM to select vehicles.</p>
<p>Instead, I used a hybrid approach.</p>
<p>First, the backend applies SQL filters to identify eligible vehicles. Then a deterministic scoring model ranks the candidates:</p>
<table>
<thead>
<tr>
<th>Preference</th>
<th align="right">Weight</th>
</tr>
</thead>
<tbody><tr>
<td>Budget</td>
<td align="right">40</td>
</tr>
<tr>
<td>Fuel type</td>
<td align="right">20</td>
</tr>
<tr>
<td>Transmission</td>
<td align="right">15</td>
</tr>
<tr>
<td>Body type</td>
<td align="right">15</td>
</tr>
<tr>
<td>Seating capacity</td>
<td align="right">10</td>
</tr>
</tbody></table>
<p>Gemini is then used to provide recommendation explanations or re-rank candidate IDs. The backend validates the response and falls back to deterministic ranking if the AI output is invalid.</p>
<p>This design keeps recommendations connected to actual database records while still using AI to improve the user experience.</p>
<h2>4. Building the application with Docker</h2>
<p>I containerized the frontend and backend using Docker.</p>
<p>The project includes multi-stage Docker builds. The frontend uses the Next.js standalone output, while the backend uses a multi-stage Node.js build.</p>
<p>Docker Compose coordinates the frontend, backend, and PostgreSQL services.</p>
<p>This makes it easier to run the application consistently across development and deployment environments.</p>
<h2>5. Implementing CI/CD with GitHub Actions</h2>
<p>I added GitHub Actions workflows to automate several stages of the delivery process.</p>
<p>The configured pipeline includes:</p>
<ol>
<li>Source changes trigger the CI workflow.</li>
<li>Frontend and backend build steps run.</li>
<li>Terraform formatting and validation are performed.</li>
<li>Docker images are built.</li>
<li>Trivy scans container images.</li>
<li>Images are published.</li>
<li>SonarCloud analysis runs.</li>
<li>A separate deployment workflow connects to an EC2 host and uses Docker Compose to update the application.</li>
</ol>
<p>An important limitation: automated application test coverage is not yet implemented. The Trivy workflow also needs stronger failure gates for security findings.</p>
<p>The goal is to keep improving the pipeline rather than treating a successful build as proof that the application is production-ready.</p>
<h2>6. AWS and Infrastructure as Code</h2>
<p>I worked on Terraform configuration for an AWS environment involving:</p>
<ul>
<li>VPC and subnet design</li>
<li>Internet and NAT gateways</li>
<li>Security groups</li>
<li>Application Load Balancer</li>
<li>EC2 launch template</li>
<li>Auto Scaling Group</li>
<li>IAM configuration</li>
<li>CloudWatch configuration</li>
</ul>
<p>The Terraform code has validation evidence. I distinguish that from a current Terraform-managed production deployment, which is not verified.</p>
<p>This distinction matters: infrastructure code, successful validation, and deployed infrastructure are three different things.</p>
<h2>7. Kubernetes and monitoring</h2>
<p>The repository also contains Kubernetes manifests, Helm templates, and monitoring-related configuration.</p>
<p>These represent additional implementation work and areas under development. The Helm chart has outstanding issues, and the monitoring stack has not been verified as a complete deployed environment.</p>
<p>My next steps are to make the Kubernetes deployment installable, verify the resource dependencies, and deploy observability components end to end.</p>
<h2>8. Challenges and lessons</h2>
<p>A few lessons from this project:</p>
<p><strong>AI should not replace deterministic application logic.</strong> Filtering and scoring candidates before asking an LLM for explanations gives the system a more controlled foundation.</p>
<p><strong>Containerization is only one part of deployment.</strong> Images, environment configuration, networking, database connectivity, and deployment verification all matter.</p>
<p><strong>A CI pipeline is not automatically a quality gate.</strong> Builds and scans are useful, but tests and failure conditions are necessary.</p>
<p><strong>Infrastructure configuration is not proof of infrastructure deployment.</strong> Terraform validation does not mean the architecture is running in AWS.</p>
<p><strong>Operational troubleshooting matters.</strong> Understanding application health, service dependencies, ports, logs, and database connectivity is as important as writing deployment configuration.</p>
<h2>9. What's next?</h2>
<p>The next improvements I want to work on include:</p>
<ul>
<li>Automated backend and frontend tests</li>
<li>Stronger CI security gates</li>
<li>More robust deployment and rollback handling</li>
<li>A fully verified Kubernetes deployment</li>
<li>End-to-end Prometheus and Grafana monitoring</li>
<li>Improved per-user favorites and data isolation</li>
<li>Live fuel-price integration</li>
</ul>
<h2>Conclusion</h2>
<p>RideMatch AI started as a vehicle discovery application and grew into a project where I could work across frontend development, backend APIs, databases, AI integration, Docker, CI/CD, and cloud infrastructure.</p>
<p>The most valuable part was understanding how these components connect — and learning to distinguish between code that exists, workflows that have been tested, and systems that are actually deployed.</p>
<p><strong>GitHub:</strong> <a href="https://github.com/Ashwin1808/ridematch-ai">https://github.com/Ashwin1808/ridematch-ai</a></p>
<p>I'd welcome technical feedback, especially around the recommendation architecture, deployment workflow, and infrastructure design. &lt;/WritingBlock}</p>
<h2>4. LinkedIn project announcement</h2>
<p>🚀 <strong>Introducing RideMatch AI — An AI-Powered Vehicle Discovery Platform</strong></p>
<p>I recently worked on RideMatch AI, a full-stack application designed to simplify vehicle discovery, comparison, and personalized recommendations.</p>
<p>The project combines application development with practical DevOps implementation.</p>
<p><strong>What I built:</strong></p>
<ul>
<li>Vehicle discovery and advanced filtering</li>
<li>AI-assisted recommendations using Google Gemini</li>
<li>Vehicle comparison and favorites</li>
<li>JWT authentication</li>
<li>PostgreSQL-backed application</li>
<li>Automotive news integration</li>
<li>Fuel cost calculator</li>
</ul>
<p><strong>Technology stack:</strong></p>
<p>Next.js | React | Node.js | Express.js | PostgreSQL | Gemini AI | Docker | Docker Compose | GitHub Actions | AWS | Terraform | Trivy | SonarCloud</p>
<p><strong>DevOps implementation:</strong></p>
<ul>
<li>Multi-stage Docker builds</li>
<li>Docker Compose orchestration</li>
<li>CI/CD workflows using GitHub Actions</li>
<li>Container image scanning with Trivy</li>
<li>SonarCloud integration</li>
<li>AWS EC2 deployment using Docker Compose</li>
<li>Terraform-based AWS infrastructure configuration</li>
</ul>
<p>I also explored Kubernetes, Helm, and monitoring configurations as part of the project's ongoing improvements.</p>
<p>One of my biggest takeaways was understanding that building an application is only one part of the job. Packaging it, automating delivery, managing infrastructure, troubleshooting failures, and verifying deployments are equally important.</p>
<p>🔗 <strong>GitHub:</strong> <a href="https://github.com/Ashwin1808/ridematch-ai">https://github.com/Ashwin1808/ridematch-ai</a></p>
<p>#DevOps #AWS #Docker #GitHubActions #Terraform #NodeJS #NextJS #PostgreSQL #CICD #CloudComputing #FullStackDevelopment #AI</p>
]]></content:encoded></item><item><title><![CDATA[Building a Task Manager with Docker, Kubernetes, Helm and GitOps]]></title><description><![CDATA[DevOps project used React, Spring Boot, Docker, Jenkins, Kubernetes, Helm, Argo CD, & Terraform. Learnt abt containerization, CI/CD, & GitOps workflows]]></description><link>https://ashwink1808.hashnode.dev/building-a-task-manager-with-docker-kubernetes-helm-and-gitops</link><guid isPermaLink="true">https://ashwink1808.hashnode.dev/building-a-task-manager-with-docker-kubernetes-helm-and-gitops</guid><category><![CDATA[Devops]]></category><category><![CDATA[Docker]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[gitops]]></category><category><![CDATA[Terraform]]></category><dc:creator><![CDATA[ashwin krishnan]]></dc:creator><pubDate>Mon, 02 Nov 2026 06:36:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae82717a8f6271971a01a60/f79a9ef0-8f9f-4d7f-89e5-4762d60683d2.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Building applications is one part of software engineering. Understanding how to package, automate, deploy, and manage those applications is another.</p>
<p>I wanted to explore that complete workflow through a practical project rather than learning each DevOps tool in isolation.</p>
<p>So, I built a Task Manager application and worked on connecting its application architecture with containerization, CI/CD automation, Kubernetes, Helm, and GitOps.</p>
<p>In this article, I'll walk through the architecture, tools, implementation, and what I learned while building the project.</p>
<p>Project Architecture:</p>
<p>Before exploring the individual tools, let's understand how the different components of this project fit together.</p>
<p>The application uses a frontend, backend, and database architecture. Docker packages the application components, CI/CD automates the build and image publishing process, and Kubernetes provides the orchestration layer. Helm manages the Kubernetes configurations, while Argo CD is configured to manage deployments using GitOps.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae82717a8f6271971a01a60/c0d291a0-f772-4229-bde2-e911f6b22cca.jpg" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/6ae82717a8f6271971a01a60/2fee0152-a106-439a-9ebc-abb8af3d1947.png" alt="" style="display:block;margin:0 auto" />

<p>Application Stack:</p>
<p>The application follows a three-tier architecture with a frontend, backend, and database.</p>
<p><strong>Frontend – React and Vite</strong></p>
<p>The frontend provides the user interface for managing tasks. It is built using React and Vite and packaged into a Docker image.</p>
<p><strong>Backend – Java 21 and Spring Boot</strong></p>
<p>The backend handles application logic and API requests. It is built with Spring Boot and communicates with the PostgreSQL database.</p>
<p><strong>Database – PostgreSQL 16</strong></p>
<p>PostgreSQL stores the application's task data. It runs as a separate service in the containerized application setup.</p>
<p><strong>Local Development – Docker Compose</strong></p>
<p>Docker Compose brings the application services together, making it easier to run and test the stack locally.</p>
<h2>1. Project Overview: Two Repositories, One Application</h2>
<p>I organized this project into two separate GitHub repositories to maintain a clear separation between application development and deployment configuration.</p>
<h3>Repository 1: Task Manager Application</h3>
<p><strong>GitHub:</strong> <a href="https://github.com/Ashwin1808/Demo-Tasts">https://github.com/Ashwin1808/Demo-Tasts</a></p>
<p>This repository contains the application code and the workflows used to build and package it.</p>
<p><strong>Technology stack:</strong></p>
<ul>
<li><strong>Frontend:</strong> React and Vite – provides the user interface.</li>
<li><strong>Backend:</strong> Java 21 and Spring Boot – handles application logic and API requests.</li>
<li><strong>Database:</strong> PostgreSQL 16 – stores application data.</li>
<li><strong>Containerization:</strong> Docker – packages the frontend and backend into container images.</li>
<li><strong>Local environment:</strong> Docker Compose – runs the application services together.</li>
<li><strong>CI/CD:</strong> GitHub Actions and Jenkins – provides automated build and image publishing workflows.</li>
<li><strong>Container registry:</strong> GitHub Container Registry (GHCR) – stores the application images.</li>
</ul>
<p>The main objective of this repository is to manage application development, containerization, and CI/CD automation.</p>
<h3>Repository 2: Task Manager GitOps</h3>
<p><strong>GitHub:</strong> <a href="https://github.com/Ashwin1808/task-manager-gitops">https://github.com/Ashwin1808/task-manager-gitops</a></p>
<p>The second repository manages the Kubernetes deployment configuration separately from the application source code.</p>
<p><strong>Technology stack:</strong></p>
<ul>
<li><strong>Kubernetes:</strong> Manages the application workloads.</li>
<li><strong>Helm:</strong> Packages and organizes Kubernetes resources into a reusable chart.</li>
<li><strong>Argo CD:</strong> Configured to monitor the GitOps repository and synchronize deployment configurations.</li>
<li><strong>Gateway API:</strong> Defines traffic routing to the frontend and backend services.</li>
<li><strong>ConfigMaps and Secrets:</strong> Manage application configuration and sensitive deployment values.</li>
<li><strong>PersistentVolumeClaim:</strong> Defines persistent storage for PostgreSQL.</li>
<li><strong>Horizontal Pod Autoscaler:</strong> Configures automatic backend replica scaling based on CPU utilization.</li>
<li><strong>Terraform:</strong> Defines an S3 bucket using a LocalStack-compatible endpoint for infrastructure-as-code practice.</li>
</ul>
<p>The GitOps repository keeps deployment configuration version-controlled and independent of application source code.</p>
<h3>How Both Repositories Work Together</h3>
<p>The overall workflow connects application development with deployment configuration:</p>
<ol>
<li>Application code is maintained in the Task Manager repository.</li>
<li>CI/CD workflows build and publish container images to GHCR.</li>
<li>The GitOps repository contains the Helm chart and Kubernetes deployment configurations.</li>
<li>Argo CD is configured to monitor the GitOps repository.</li>
<li>Kubernetes resources are rendered through Helm and can be synchronized by Argo CD when the required cluster components are available.</li>
</ol>
<p>This separation makes the application code and deployment configuration easier to maintain independently.</p>
<p><strong>Important:</strong> The Helm chart passed lint validation and successfully rendered 13 Kubernetes resources. This confirms the configuration validation, not a completed live Kubernetes deployment.</p>
<p>Containerization and CI/CD Automation:</p>
<h3>Containerizing the Application with Docker</h3>
<p>I used Docker to package the application components into container images, making them easier to run consistently across environments.</p>
<p>The application consists of three main components:</p>
<ul>
<li><strong>Frontend:</strong> React and Vite application.</li>
<li><strong>Backend:</strong> Java 21 and Spring Boot application.</li>
<li><strong>Database:</strong> PostgreSQL 16.</li>
</ul>
<p>Docker Compose is used to define and run the application services together during local development.</p>
<h3>Automating Builds with GitHub Actions</h3>
<p>I used GitHub Actions to automate the application build and container image publishing workflow.</p>
<p>The pipeline is designed to:</p>
<ol>
<li>Retrieve the application source code.</li>
<li>Build the application components.</li>
<li>Build Docker images.</li>
<li>Publish the images to GitHub Container Registry (GHCR).</li>
</ol>
<p>This reduces repetitive manual work and provides a consistent image-building workflow.</p>
<h3>Jenkins CI/CD</h3>
<p>I also worked with Jenkins to implement an alternative CI/CD pipeline.</p>
<p>Working with both GitHub Actions and Jenkins helped me understand different approaches to pipeline configuration and automation.</p>
<h3>Container Image Management</h3>
<p>The application images are published to GitHub Container Registry.</p>
<p>The GitOps repository references these images using versioned image tags, allowing the deployment configuration to specify which application image should be used.</p>
<p>This connects the application build process with the deployment configuration maintained separately in the GitOps repository.</p>
<p><strong>Kubernetes, Helm and GitOps with Argo CD:</strong></p>
<p>Deploying the Application with Kubernetes</p>
<p>I organized the Kubernetes resources in the Task Manager GitOps repository to manage the frontend, backend, and PostgreSQL components.</p>
<p>The configuration includes:</p>
<ul>
<li><strong>Deployments:</strong> Define the frontend, backend, and PostgreSQL workloads.</li>
<li><strong>Services:</strong> Provide internal communication between application components.</li>
<li><strong>ConfigMaps:</strong> Store backend application configuration.</li>
<li><strong>Secrets:</strong> Provide database credentials to the backend.</li>
<li><strong>PersistentVolumeClaim:</strong> Requests persistent storage for PostgreSQL.</li>
<li><strong>Horizontal Pod Autoscaler:</strong> Configures backend scaling based on CPU utilization.</li>
</ul>
<p>The backend HPA is configured with a minimum of 2 replicas, a maximum of 5 replicas, and a target CPU utilization of 70%.</p>
<h3>Packaging Kubernetes Resources with Helm</h3>
<p>Instead of maintaining the deployment resources as unrelated YAML files, I organized them into a Helm chart.</p>
<p>The chart includes templates for:</p>
<ul>
<li>Frontend Deployment and Service</li>
<li>Backend Deployment and Service</li>
<li>PostgreSQL Deployment, Service and PVC</li>
<li>ConfigMap and Secret</li>
<li>Backend Horizontal Pod Autoscaler</li>
<li>Gateway, GatewayClass and HTTPRoute</li>
</ul>
<p>I validated the chart using Helm:</p>
<pre><code class="language-bash">helm lint ./helm/task-manager
</code></pre>
<p>The lint command completed successfully with zero failures.</p>
<p>I also rendered the Kubernetes manifests:</p>
<pre><code class="language-bash">helm template task-manager ./helm/task-manager \
  --namespace task-manager
</code></pre>
<p>The command successfully rendered 13 Kubernetes resources.</p>
<h3>GitOps Workflow with Argo CD</h3>
<p>I created an Argo CD Application manifest in the GitOps repository.</p>
<p>It references the GitHub repository and uses the Helm chart located at:</p>
<pre><code class="language-text">helm/task-manager
</code></pre>
<p>The Argo CD Application is configured with:</p>
<ul>
<li>Automated synchronization</li>
<li>Automatic pruning</li>
<li>Self-healing</li>
<li>Namespace creation</li>
</ul>
<p>This configuration allows Argo CD to use Git as the source of truth for the desired deployment configuration.</p>
<p>The configuration is committed to GitHub, making deployment changes version-controlled and reviewable.</p>
<h3>Traffic Routing with Kubernetes Gateway API</h3>
<p>I also added Kubernetes Gateway API resources to define how incoming traffic should reach the application services.</p>
<p>The configuration includes:</p>
<ul>
<li><strong>GatewayClass:</strong> References the Envoy Gateway controller.</li>
<li><strong>Gateway:</strong> Defines the HTTP listener on port 80.</li>
<li><strong>HTTPRoute:</strong> Defines routing rules for application traffic.</li>
</ul>
<p>The HTTPRoute sends:</p>
<ul>
<li><code>/api</code> traffic to the backend service on port 8080.</li>
<li><code>/</code> traffic to the frontend service on port 8080.</li>
</ul>
<p>The Gateway API CRDs and compatible controller must be installed in the Kubernetes cluster before these resources can operate.</p>
<p>This setup demonstrates how application deployment and traffic routing configuration can be maintained together in the GitOps repository.</p>
<p><strong>Infrastructure as Code with Terraform:</strong></p>
<p>I included Terraform in the GitOps repository to practice defining infrastructure through code.</p>
<p>The Terraform configuration defines an S3 bucket using an AWS provider configured with a LocalStack-compatible endpoint.</p>
<p>The configuration includes:</p>
<ul>
<li>AWS provider configuration</li>
<li>Region variables</li>
<li>S3 bucket resource</li>
<li>Resource tags</li>
<li>Terraform dependency lock file</li>
</ul>
<p>The configuration is intended for LocalStack-compatible testing rather than claiming a live AWS deployment.</p>
<p>This helped me understand how infrastructure resources can be declared, managed, and version-controlled using Terraform.</p>
<p><strong>Configuration Validation:</strong></p>
<p>During the project, I used command-line validation to check the deployment configuration.</p>
<p><strong>Helm lint</strong></p>
<pre><code class="language-bash">helm lint ./helm/task-manager
</code></pre>
<p>Result: 1 chart linted, 0 charts failed.</p>
<p><strong>Helm template rendering</strong></p>
<pre><code class="language-bash">helm template task-manager ./helm/task-manager \
  --namespace task-manager
</code></pre>
<p>Result: Successfully rendered 13 Kubernetes resources.</p>
<p>These checks helped identify configuration issues before attempting deployment to a Kubernetes cluster.<br /><br /><strong>Key Learnings and Challenges:</strong></p>
<p>Building this project helped me understand how different DevOps tools fit into a complete application delivery workflow.</p>
<p>Some of my key learnings were:</p>
<ul>
<li>Separating application source code from deployment configuration using two Git repositories.</li>
<li>Building and publishing container images through CI/CD workflows.</li>
<li>Organizing Kubernetes manifests into reusable Helm charts.</li>
<li>Understanding GitOps principles and Argo CD synchronization.</li>
<li>Configuring Gateway API resources for frontend and backend routing.</li>
<li>Defining infrastructure resources through Terraform.</li>
<li>Validating Helm configurations before deployment.</li>
</ul>
<p>One important lesson was that successful configuration validation does not automatically mean a workload has been deployed successfully. Live cluster validation is a separate step.</p>
<p><strong>What's Next?:</strong></p>
<p>This project is an ongoing learning journey. My next focus is to move beyond configuration validation and work toward a complete deployment in a Kubernetes environment.</p>
<p>Some of the areas I plan to explore further include:</p>
<ul>
<li>Deploying the application to a Kubernetes cluster.</li>
<li>Validating the complete Argo CD synchronization workflow.</li>
<li>Configuring and testing Gateway API traffic routing.</li>
<li>Improving monitoring and observability with Prometheus and Grafana.</li>
<li>Exploring AWS infrastructure and cloud deployment.</li>
</ul>
<p>My goal is to keep improving the project while documenting the practical challenges and lessons along the way.</p>
<h2>Project Repositories</h2>
<p>I've maintained two separate repositories to keep the application code and deployment configurations organized.</p>
<p><strong>1. Application Repository</strong></p>
<p>Contains the application source code, Docker configuration, and CI/CD pipeline setup.</p>
<p><a href="https://github.com/Ashwin1808/Demo-Tasts">https://github.com/Ashwin1808/Demo-Tasts</a></p>
<p><strong>2. GitOps Repository</strong></p>
<p>Contains Kubernetes manifests, Helm charts, Argo CD configuration, Gateway API resources, and Terraform configuration.</p>
<p><a href="https://github.com/Ashwin1808/task-manager-gitops">https://github.com/Ashwin1808/task-manager-gitops</a></p>
<p>Both repositories are available publicly for anyone interested in exploring the implementation.</p>
]]></content:encoded></item></channel></rss>