<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: uratmangun</title>
    <description>The latest articles on DEV Community by uratmangun (@uratmangun).</description>
    <link>https://dev.to/uratmangun</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%2F1121280%2F614c604d-2a7d-4db3-9509-cddfc043aa2d.jpeg</url>
      <title>DEV Community: uratmangun</title>
      <link>https://dev.to/uratmangun</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uratmangun"/>
    <language>en</language>
    <item>
      <title>Building a Next.js Template Clone Generator: A Complete Guide to Streamlining Your Development Workflow with Kiro</title>
      <dc:creator>uratmangun</dc:creator>
      <pubDate>Sat, 29 Nov 2025 22:42:31 +0000</pubDate>
      <link>https://dev.to/kirodotdev/building-a-nextjs-template-clone-generator-a-complete-guide-to-streamlining-your-development-489n</link>
      <guid>https://dev.to/kirodotdev/building-a-nextjs-template-clone-generator-a-complete-guide-to-streamlining-your-development-489n</guid>
      <description>&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/2LrxV0pTJSk"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;

&lt;iframe class="tweet-embed" id="tweet-1994902367335313863-486" src="https://platform.twitter.com/embed/Tweet.html?id=1994902367335313863"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1994902367335313863-486');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1994902367335313863&amp;amp;theme=dark"
  }





&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Have you ever found yourself repeatedly setting up the same Next.js project structure over and over again? Creating new repositories, configuring TypeScript, setting up Tailwind CSS, and establishing your preferred folder structure can be tedious and time-consuming. What if there was a better way?&lt;/p&gt;

&lt;p&gt;In this comprehensive guide, I'll walk you through a project I built that solves this exact problem: a &lt;strong&gt;Next.js Template Clone Generator&lt;/strong&gt;. This interactive web application allows developers to quickly create new repositories from a pre-configured template using the GitHub CLI, all with a beautiful, user-friendly interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem We're Solving
&lt;/h2&gt;

&lt;p&gt;As developers, we often face these challenges when starting new projects:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Repetitive Setup&lt;/strong&gt;: Manually creating the same folder structure, configuration files, and boilerplate code for every new project&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inconsistent Standards&lt;/strong&gt;: Different projects end up with slightly different configurations, making it harder to maintain consistency across your portfolio&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time Waste&lt;/strong&gt;: Precious development time spent on setup instead of actual feature development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human Error&lt;/strong&gt;: Forgetting to include important configurations or making typos in setup commands&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The solution? A template repository combined with an intuitive generator interface that makes cloning and customizing new projects a breeze.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Overview
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;kiro-nextjs&lt;/strong&gt; template is a carefully crafted Next.js starter that includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16&lt;/strong&gt; with App Router&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; for type safety&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; for styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Biome&lt;/strong&gt; for linting and formatting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kiro Configuration&lt;/strong&gt; for AI-assisted development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pnpm&lt;/strong&gt; as the preferred package manager&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the real magic happens in the landing page itself — it's not just a static "getting started" page. It's an interactive tool that generates the exact command you need to clone the template.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deep Dive into the Code
&lt;/h2&gt;

&lt;p&gt;Let's break down the main component that powers this generator:&lt;/p&gt;

&lt;h3&gt;
  
  
  The Component Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;use client&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Home&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;repoName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setRepoName&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-new-repo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;visibility&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setVisibility&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;public&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;private&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;public&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;copied&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCopied&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hasSpaces&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;repoName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`gh repo create &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;repoName&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-new-repo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; --template uratmangun/kiro-nextjs --&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;visibility&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; --clone`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The component uses React's &lt;code&gt;useState&lt;/code&gt; hook to manage three pieces of state:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;repoName&lt;/strong&gt;: The name of the new repository the user wants to create&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;visibility&lt;/strong&gt;: Whether the repository should be public or private&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;copied&lt;/strong&gt;: A boolean to track whether the command has been copied to clipboard&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Input Validation
&lt;/h3&gt;

&lt;p&gt;One of the key features is real-time input validation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hasSpaces&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;repoName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub repository names cannot contain spaces, so we check for this and provide immediate feedback to the user. This prevents frustration from failed commands and teaches users about GitHub's naming conventions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dynamic Command Generation
&lt;/h3&gt;

&lt;p&gt;The command is dynamically generated based on user input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`gh repo create &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;repoName&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-new-repo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; --template uratmangun/kiro-nextjs --&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;visibility&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; --clone`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This uses template literals to construct the GitHub CLI command with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The user's chosen repository name (with a fallback to "my-new-repo")&lt;/li&gt;
&lt;li&gt;The template repository reference&lt;/li&gt;
&lt;li&gt;The visibility flag (public or private)&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;--clone&lt;/code&gt; flag to automatically clone the new repository locally&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Copy to Clipboard Functionality
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;copyToClipboard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clipboard&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nf"&gt;setCopied&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setCopied&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This async function uses the modern Clipboard API to copy the command. It also provides visual feedback by:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Setting &lt;code&gt;copied&lt;/code&gt; to true immediately&lt;/li&gt;
&lt;li&gt;Resetting it to false after 2 seconds&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This creates a smooth user experience where the copy button icon changes to a checkmark temporarily.&lt;/p&gt;

&lt;h2&gt;
  
  
  The User Interface
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Responsive Design
&lt;/h3&gt;

&lt;p&gt;The interface is built with a mobile-first approach using Tailwind CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"flex min-h-screen items-center justify-center bg-zinc-50 font-sans dark:bg-zinc-950"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;main&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"flex w-full max-w-2xl flex-col gap-6 px-6"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key design decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Centered layout&lt;/strong&gt;: The content is vertically and horizontally centered for a clean, focused experience&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maximum width constraint&lt;/strong&gt;: &lt;code&gt;max-w-2xl&lt;/code&gt; ensures readability on large screens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dark mode support&lt;/strong&gt;: Every color class includes a &lt;code&gt;dark:&lt;/code&gt; variant for seamless dark mode&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Input Field with Validation Feedback
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;
  &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;repoName&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setRepoName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Repository name"&lt;/span&gt;
  &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;`w-full rounded-lg border bg-white px-3 py-2 text-sm text-zinc-900 placeholder:text-zinc-400 focus:outline-none focus:ring-1 dark:bg-zinc-900 dark:text-zinc-100 dark:placeholder:text-zinc-500 &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;hasSpaces&lt;/span&gt;
    &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;border-amber-500 focus:border-amber-500 focus:ring-amber-500&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;border-zinc-300 focus:border-emerald-500 focus:ring-emerald-500 dark:border-zinc-700 dark:focus:border-emerald-500&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The input field dynamically changes its border color:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amber/Yellow&lt;/strong&gt;: When the input contains spaces (warning state)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emerald/Green&lt;/strong&gt;: When the input is valid (success state)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This provides immediate visual feedback without being intrusive.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Command Display
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"relative rounded-lg bg-zinc-900 p-4 dark:bg-zinc-800"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;code&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"block pr-10 text-sm text-emerald-400"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;code&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt;
    &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copyToClipboard&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"absolute right-2 top-2 rounded p-1.5 text-zinc-400 hover:bg-zinc-700 hover:text-zinc-200"&lt;/span&gt;
    &lt;span class="na"&gt;aria-label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Copy command"&lt;/span&gt;
  &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* Icon changes based on copied state */&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command is displayed in a code block with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A dark background that contrasts with the page&lt;/li&gt;
&lt;li&gt;Emerald-colored text for that classic terminal feel&lt;/li&gt;
&lt;li&gt;An absolutely positioned copy button in the top-right corner&lt;/li&gt;
&lt;li&gt;Proper padding to prevent text from overlapping with the button&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Kiro Integration
&lt;/h2&gt;

&lt;p&gt;One of the most exciting aspects of this project is its integration with &lt;strong&gt;Kiro&lt;/strong&gt;, an AI-powered development assistant. The template includes a &lt;code&gt;.kiro&lt;/code&gt; directory with several configuration files:&lt;/p&gt;

&lt;h3&gt;
  
  
  Steering Rules
&lt;/h3&gt;

&lt;p&gt;Steering rules are markdown files that guide Kiro's behavior:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Package Manager Preference&lt;/strong&gt;: Enforces pnpm as the primary package manager with yarn as fallback&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI Color Guidelines&lt;/strong&gt;: Prefers non-purple primary colors for consistency&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shell Preferences&lt;/strong&gt;: Configures fish shell syntax for terminal commands&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development Server Policy&lt;/strong&gt;: Prevents automatic server startup for better resource control&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Agent Hooks
&lt;/h3&gt;

&lt;p&gt;The template includes an auto-commit-push hook that automates the git workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stages all changes&lt;/li&gt;
&lt;li&gt;Generates conventional commit messages with emojis&lt;/li&gt;
&lt;li&gt;Pushes to the remote repository&lt;/li&gt;
&lt;li&gt;Creates pull requests when on feature branches&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This automation significantly speeds up the development workflow while maintaining consistent commit standards.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use the Template
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;Before using the template generator, ensure you have:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;GitHub CLI (gh)&lt;/strong&gt; installed and authenticated&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js&lt;/strong&gt; (version 18 or higher recommended)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pnpm&lt;/strong&gt; installed globally&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step-by-Step Guide
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Visit the Template Page&lt;/strong&gt;: Navigate to the deployed application&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enter Repository Name&lt;/strong&gt;: Type your desired repository name (no spaces allowed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Select Visibility&lt;/strong&gt;: Choose between public or private&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copy the Command&lt;/strong&gt;: Click the copy button&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run in Terminal&lt;/strong&gt;: Paste and execute the command in your terminal
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh repo create my-awesome-project &lt;span class="nt"&gt;--template&lt;/span&gt; uratmangun/kiro-nextjs &lt;span class="nt"&gt;--public&lt;/span&gt; &lt;span class="nt"&gt;--clone&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start Developing&lt;/strong&gt;: Navigate to your new project and start coding!
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;my-awesome-project
pnpm &lt;span class="nb"&gt;install
&lt;/span&gt;pnpm dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Technical Decisions and Trade-offs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why GitHub CLI Instead of a Web API?
&lt;/h3&gt;

&lt;p&gt;Using the GitHub CLI (&lt;code&gt;gh&lt;/code&gt;) instead of the GitHub API offers several advantages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Authentication&lt;/strong&gt;: Users are already authenticated through &lt;code&gt;gh auth login&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity&lt;/strong&gt;: No need to handle OAuth flows or API tokens in the frontend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local Cloning&lt;/strong&gt;: The &lt;code&gt;--clone&lt;/code&gt; flag automatically clones the repository&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Familiarity&lt;/strong&gt;: Developers are comfortable with CLI tools&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Why Client-Side Rendering?
&lt;/h3&gt;

&lt;p&gt;The component uses &lt;code&gt;"use client"&lt;/code&gt; directive because:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Interactivity&lt;/strong&gt;: The form requires real-time state updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clipboard API&lt;/strong&gt;: Requires client-side JavaScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No SEO Requirements&lt;/strong&gt;: This is a tool, not content that needs indexing&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Color Palette Choices
&lt;/h3&gt;

&lt;p&gt;The design uses a carefully selected color palette:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zinc&lt;/strong&gt;: Neutral grays for backgrounds and text&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emerald&lt;/strong&gt;: Success states and the command text&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amber&lt;/strong&gt;: Warning states (like spaces in repo names)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This follows the steering rule of avoiding purple as a primary color while maintaining excellent contrast and accessibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extending the Template
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Adding More Options
&lt;/h3&gt;

&lt;p&gt;You could extend the generator to include additional GitHub CLI options:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setDescription&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;homepage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setHomepage&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`gh repo create &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;repoName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; --template uratmangun/kiro-nextjs --&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;visibility&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`--description "&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"`&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;homepage&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`--homepage "&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;homepage&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"`&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; --clone`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Supporting Multiple Templates
&lt;/h3&gt;

&lt;p&gt;For organizations with multiple templates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setTemplate&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;kiro-nextjs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;templates&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;kiro-nextjs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Next.js Starter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;kiro-react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;React Starter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;kiro-node&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Node.js API Starter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adding Analytics
&lt;/h3&gt;

&lt;p&gt;Track which options are most popular:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;copyToClipboard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clipboard&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Track the event&lt;/span&gt;
  &lt;span class="nx"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;track&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;command_copied&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;repoName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;visibility&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toISOString&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nf"&gt;setCopied&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setCopied&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;h3&gt;
  
  
  1. Accessibility
&lt;/h3&gt;

&lt;p&gt;The component includes proper accessibility features:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt;
  &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copyToClipboard&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="na"&gt;aria-label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Copy command"&lt;/span&gt;
&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;aria-label&lt;/code&gt; ensures screen readers can announce the button's purpose.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Type Safety
&lt;/h3&gt;

&lt;p&gt;TypeScript is used throughout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;visibility&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setVisibility&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;public&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;private&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;public&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures only valid visibility values can be set.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. User Feedback
&lt;/h3&gt;

&lt;p&gt;Multiple feedback mechanisms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visual border color changes for validation&lt;/li&gt;
&lt;li&gt;Warning messages for invalid input&lt;/li&gt;
&lt;li&gt;Icon changes for copy confirmation&lt;/li&gt;
&lt;li&gt;Hover states for interactive elements&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Dark Mode Support
&lt;/h3&gt;

&lt;p&gt;Every visual element has dark mode variants:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bg-zinc-50 dark:bg-zinc-950&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-zinc-900 dark:text-zinc-100&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Building a template clone generator might seem like a small project, but it demonstrates several important concepts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Developer Experience Matters&lt;/strong&gt;: Tools that save time and reduce friction are invaluable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Documentation&lt;/strong&gt;: Instead of static instructions, provide interactive tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation and Feedback&lt;/strong&gt;: Help users succeed by preventing errors before they happen&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern React Patterns&lt;/strong&gt;: Hooks, controlled components, and async operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thoughtful Design&lt;/strong&gt;: Accessibility, dark mode, and responsive layouts&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;strong&gt;kiro-nextjs&lt;/strong&gt; template and its generator represent a modern approach to project scaffolding. By combining a well-configured template with an intuitive interface, we've created a tool that makes starting new projects a joy rather than a chore.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cli.github.com/manual/" rel="noopener noreferrer"&gt;GitHub CLI Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nextjs.org/docs" rel="noopener noreferrer"&gt;Next.js Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tailwindcss.com/docs" rel="noopener noreferrer"&gt;Tailwind CSS Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kiro.dev" rel="noopener noreferrer"&gt;Kiro Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;Ready to streamline your Next.js development workflow? Visit the template repository and give it a try:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gh repo create my-next-project &lt;span class="nt"&gt;--template&lt;/span&gt; uratmangun/kiro-nextjs &lt;span class="nt"&gt;--public&lt;/span&gt; &lt;span class="nt"&gt;--clone&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Happy coding! 🚀&lt;/p&gt;




</description>
      <category>kiro</category>
    </item>
    <item>
      <title>Build Linera dApps Fast with This Next.js Template</title>
      <dc:creator>uratmangun</dc:creator>
      <pubDate>Sat, 29 Nov 2025 07:14:57 +0000</pubDate>
      <link>https://dev.to/kirodotdev/build-linera-dapps-fast-with-this-nextjs-template-4ih7</link>
      <guid>https://dev.to/kirodotdev/build-linera-dapps-fast-with-this-nextjs-template-4ih7</guid>
      <description>&lt;p&gt;If you're looking to build decentralized applications on Linera blockchain, setting up the development environment from scratch can be tedious. That's why I created &lt;strong&gt;Linera Dynamic Template&lt;/strong&gt; — a production-ready Next.js starter that handles all the boilerplate for you.&lt;/p&gt;

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

&lt;p&gt;Linera is a next-generation blockchain platform designed for scalability through its unique microchain architecture. Unlike traditional blockchains, Linera enables parallel execution across multiple chains, making it ideal for high-throughput applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Getting started with Linera development involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configuring SharedArrayBuffer support (COOP/COEP headers)&lt;/li&gt;
&lt;li&gt;Setting up WASM smart contract compilation&lt;/li&gt;
&lt;li&gt;Integrating wallet authentication&lt;/li&gt;
&lt;li&gt;Managing cross-origin policies for browser execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This template eliminates all that friction.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;🔐 &lt;strong&gt;Dynamic wallet authentication&lt;/strong&gt; — Easy login integration&lt;/li&gt;
&lt;li&gt;⛓️ &lt;strong&gt;Linera blockchain interaction&lt;/strong&gt; — Pre-configured client adapter&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Next.js 16 + React 19&lt;/strong&gt; — Latest framework features&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Tailwind CSS&lt;/strong&gt; — Modern styling out of the box&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;Example counter contract&lt;/strong&gt; — Rust/WASM smart contract included&lt;/li&gt;
&lt;li&gt;🛠️ &lt;strong&gt;CLI scripts&lt;/strong&gt; — Wallet and contract management tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone with GitHub CLI&lt;/span&gt;
gh repo create my-linera-app &lt;span class="nt"&gt;--template&lt;/span&gt; uratmangun/linera-dynamic-template &lt;span class="nt"&gt;--clone&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;my-linera-app
pnpm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Configure environment&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env.local
&lt;span class="c"&gt;# Add your Dynamic environment ID&lt;/span&gt;

&lt;span class="c"&gt;# Start developing&lt;/span&gt;
pnpm dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Project Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── src/
│   ├── app/           # Next.js app router pages
│   └── lib/           # Linera adapter and utilities
├── contracts/         # Rust smart contracts (WASM)
├── scripts/           # CLI scripts for wallet/contract management
└── public/            # Static assets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Available Scripts
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pnpm dev&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Start development server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pnpm wallet:init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Initialize Linera wallet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pnpm wallet:show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Show wallet info&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pnpm contract:build&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Build smart contract&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pnpm contract:deploy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deploy smart contract&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16&lt;/strong&gt; — React framework with app router&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic&lt;/strong&gt; — Wallet authentication provider&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linera&lt;/strong&gt; — Blockchain platform&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rust&lt;/strong&gt; — Smart contract language&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; — Utility-first styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; — Type safety throughout&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Technical Details
&lt;/h2&gt;

&lt;p&gt;The template handles the tricky COOP/COEP headers required for SharedArrayBuffer support in browsers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// next.config.ts&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
    &lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/(.*)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cross-Origin-Opener-Policy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;same-origin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cross-Origin-Embedder-Policy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;credentialless&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cross-Origin-Resource-Policy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cross-origin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;}];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is essential for Linera's WASM client to function properly in the browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;Check out the template on GitHub: &lt;a href="https://github.com/uratmangun/linera-dynamic-template" rel="noopener noreferrer"&gt;uratmangun/linera-dynamic-template&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click "Use this template" to create your own Linera dApp in seconds!&lt;/p&gt;




&lt;p&gt;Have questions or feedback? Drop a comment below or open an issue on GitHub. Happy building! 🚀&lt;/p&gt;

&lt;h1&gt;
  
  
  Demo
&lt;/h1&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/bEGQexf5Weg"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

</description>
      <category>kiro</category>
    </item>
    <item>
      <title>Building a Gasless Marketplace on Polygon with x402 Protocol</title>
      <dc:creator>uratmangun</dc:creator>
      <pubDate>Wed, 26 Nov 2025 05:43:19 +0000</pubDate>
      <link>https://dev.to/kirodotdev/building-a-gasless-marketplace-on-polygon-with-x402-protocol-25h9</link>
      <guid>https://dev.to/kirodotdev/building-a-gasless-marketplace-on-polygon-with-x402-protocol-25h9</guid>
      <description>&lt;p&gt;Have you ever wanted to build a marketplace where users can buy and sell products using stablecoins without worrying about gas fees? In this article, I'll walk you through how I built Polygon x402 Marketplace, a gasless peer-to-peer marketplace using the x402 protocol on Polygon Amoy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Traditional blockchain marketplaces have a major UX problem: users need to hold native tokens (like MATIC) just to pay for gas fees. This creates friction because:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;New users need to acquire native tokens from exchanges first&lt;/li&gt;
&lt;li&gt;Users must manage multiple token balances&lt;/li&gt;
&lt;li&gt;Gas prices fluctuate, making transaction costs unpredictable&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Solution: x402 Protocol
&lt;/h2&gt;

&lt;p&gt;The x402 protocol enables gasless USDC transfers by using EIP-712 signatures and a facilitator network. Users only need USDC in their wallet to participate in the marketplace - no native tokens required!&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Next.js 16, React 19, TailwindCSS 4&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web3&lt;/strong&gt;: RainbowKit, wagmi, viem, x402-axios&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt;: PostgreSQL with Drizzle ORM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blockchain&lt;/strong&gt;: Polygon Amoy (Testnet), USDC Token&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol&lt;/strong&gt;: x402 Protocol with PayAI Facilitator&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Gasless USDC Payments
&lt;/h3&gt;

&lt;p&gt;The marketplace uses the x402 protocol to handle payments. When a user makes a purchase, the payment flow works like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User clicks "Buy Now"&lt;/li&gt;
&lt;li&gt;The API returns a 402 Payment Required response with payment requirements&lt;/li&gt;
&lt;li&gt;x402-axios intercepts this and prompts the user to sign an EIP-712 message&lt;/li&gt;
&lt;li&gt;The signed payment is sent to the PayAI facilitator for verification and settlement&lt;/li&gt;
&lt;li&gt;The transaction is executed on-chain without the user paying gas&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Product Listings
&lt;/h3&gt;

&lt;p&gt;Sellers can list items with title, description, price, stock quantity, and images. The marketplace supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating new listings&lt;/li&gt;
&lt;li&gt;Editing existing products&lt;/li&gt;
&lt;li&gt;Automatic stock management after purchases&lt;/li&gt;
&lt;li&gt;Comments on product listings&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Wallet Integration
&lt;/h3&gt;

&lt;p&gt;RainbowKit provides seamless wallet connection supporting MetaMask, WalletConnect, and more. The app automatically handles chain switching to Polygon Amoy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation Highlights
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Facilitator Proxy
&lt;/h3&gt;

&lt;p&gt;One of the challenges was building a local facilitator proxy that correctly forwards requests to PayAI while maintaining proper CORS headers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;paymentRequirements&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;exact&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;network&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;polygon-amoy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;maxAmountRequired&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;atomicAmount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;payTo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;recipientAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;asset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;USDC_ADDRESS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;extra&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;USDC&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Using x402-axios
&lt;/h3&gt;

&lt;p&gt;The x402-axios library makes it easy to handle the payment flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;axiosInstance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;withPaymentInterceptor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="nx"&gt;walletClient&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axiosInstance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/usdc-pay&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;recipient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Live Demo
&lt;/h2&gt;

&lt;p&gt;Check out the live marketplace at: &lt;a href="https://polygon-x402.vercel.app/" rel="noopener noreferrer"&gt;https://polygon-x402.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub Repository: &lt;a href="https://github.com/uratmangun/polygon-x402" rel="noopener noreferrer"&gt;https://github.com/uratmangun/polygon-x402&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Deploy to Polygon Mainnet&lt;/li&gt;
&lt;li&gt;Add order history and transaction tracking&lt;/li&gt;
&lt;li&gt;Implement seller profiles with ratings&lt;/li&gt;
&lt;li&gt;Support multiple stablecoins (USDT, DAI)&lt;/li&gt;
&lt;li&gt;Mobile optimization with PWA features&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How We Used Kiro in This Project
&lt;/h2&gt;

&lt;p&gt;This project leverages Kiro's steering rules and MCP (Model Context Protocol) configuration to maintain consistent development practices. The &lt;code&gt;.kiro&lt;/code&gt; folder contains:&lt;/p&gt;

&lt;h3&gt;
  
  
  Steering Rules
&lt;/h3&gt;

&lt;p&gt;Kiro steering rules are markdown files that guide AI assistants during development:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Shell Preferences&lt;/strong&gt; (&lt;code&gt;shell-preferences.md&lt;/code&gt;): Enforces fish shell syntax for all terminal commands, ensuring consistent command execution across the project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No Auto Start Dev Server&lt;/strong&gt; (&lt;code&gt;no auto start dev server.md&lt;/code&gt;): Prevents AI assistants from automatically starting development servers, giving developers control over resource usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UI Color Preferences&lt;/strong&gt; (&lt;code&gt;ui color prefer non purple primary.md&lt;/code&gt;): Establishes cyan/blue as primary colors instead of purple, maintaining consistent visual identity.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Package Manager Standards&lt;/strong&gt; (&lt;code&gt;use pnpm with yarn fallback for nodejs dependency manager.md&lt;/code&gt;): Mandates pnpm as the primary package manager with yarn as fallback, ensuring efficient disk usage and consistent dependency resolution.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  MCP Configuration
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;.kiro/settings/mcp.json&lt;/code&gt; configures Model Context Protocol servers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;chrome-devtools&lt;/strong&gt;: Enables browser automation for testing and debugging&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;context7&lt;/strong&gt;: Provides enhanced context awareness&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;next-devtools&lt;/strong&gt;: Integrates Next.js-specific development tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These Kiro configurations ensure that any AI assistant working on this project follows the same conventions, making collaboration smoother and code more consistent.&lt;/p&gt;




&lt;p&gt;If you're interested in building gasless dApps, I highly recommend exploring the x402 protocol. It's a game-changer for blockchain UX!&lt;/p&gt;

&lt;p&gt;Happy coding! 🚀&lt;/p&gt;

&lt;h1&gt;
  
  
  Demo
&lt;/h1&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/clWvP0VNFg0"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

</description>
      <category>ethereum</category>
      <category>tutorial</category>
      <category>web3</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Freelancing Reimagined: Total Autonomy with Massa Smart Contracts</title>
      <dc:creator>uratmangun</dc:creator>
      <pubDate>Mon, 24 Nov 2025 22:09:47 +0000</pubDate>
      <link>https://dev.to/kirodotdev/freelancing-reimagined-total-autonomy-with-massa-smart-contracts-2c3l</link>
      <guid>https://dev.to/kirodotdev/freelancing-reimagined-total-autonomy-with-massa-smart-contracts-2c3l</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The freelance economy is booming, but it’s still plagued by age-old problems: delayed payments, lack of trust, and the constant need to chase invoices. What if you could work with the certainty that your funds are already secured and will be released automatically as you work?&lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;Massa Freelance&lt;/strong&gt;, a new decentralized application (dApp) built on the &lt;strong&gt;Massa Blockchain&lt;/strong&gt;. We are redefining the relationship between clients and freelancers by leveraging &lt;strong&gt;Autonomous Smart Contracts&lt;/strong&gt; to guarantee transparency, security, and real-time payments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Massa Freelance?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Verified Proof of Funds
&lt;/h3&gt;

&lt;p&gt;Never work for free again. With our platform, clients lock funds into a smart contract before the work begins. As a freelancer, you can verify the contract's balance in real-time, ensuring the money is there and ready for you.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Autonomous Payments
&lt;/h3&gt;

&lt;p&gt;Forget about net-30 payment terms. Massa's unique &lt;strong&gt;Autonomous Smart Contracts&lt;/strong&gt; can wake themselves up and execute transactions automatically. This means you can get paid by the hour, the minute, or any interval you choose—without the client needing to manually click "send" every time.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Total Flexibility
&lt;/h3&gt;

&lt;p&gt;Whether you are hiring talent or looking for work, our platform offers ultimate flexibility. The interface is built with &lt;strong&gt;Next.js&lt;/strong&gt; and styled with a clean, modern aesthetic (using a fresh green palette instead of the standard crypto-purple!), making it accessible to everyone, not just web3 natives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Under the Hood
&lt;/h2&gt;

&lt;p&gt;We've built Massa Freelance using a robust modern stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Frontend:&lt;/strong&gt; Next.js 15 with React 19&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Blockchain:&lt;/strong&gt; &lt;code&gt;@massalabs/massa-web3&lt;/code&gt; and AssemblyScript contracts&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Database:&lt;/strong&gt; PostgreSQL with Drizzle ORM&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Styling:&lt;/strong&gt; Tailwind CSS with a custom design system&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How We Use @[.kiro]
&lt;/h2&gt;

&lt;p&gt;One of the secret weapons in our development workflow is &lt;strong&gt;&lt;code&gt;.kiro&lt;/code&gt;&lt;/strong&gt;. You might have noticed this directory in our project root. It serves as the "steering wheel" and "brain" for our AI coding assistant.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;.kiro&lt;/code&gt; directory allows us to define project-specific context and rules that the AI must follow. It contains two key subdirectories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;settings/&lt;/code&gt;&lt;/strong&gt;: This holds configuration files like &lt;code&gt;mcp.json&lt;/code&gt;, which defines the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; servers our AI uses. This connects our AI to external tools, such as Chrome DevTools or database connectors, giving it superpowers beyond just reading code.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;&lt;code&gt;steering/&lt;/code&gt;&lt;/strong&gt;: This is where we keep our "constitution." It contains Markdown files with specific instructions, such as &lt;code&gt;ui color prefer non purple primary.md&lt;/code&gt;. These files tell the AI exactly how we want our code written—from UI color preferences (we strictly prefer greens and teals over purple) to coding conventions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By using &lt;code&gt;.kiro&lt;/code&gt;, we ensure that every line of code generated by the AI aligns perfectly with our project's unique style and architectural decisions, effectively "customizing" the AI to be a perfect teammate for &lt;strong&gt;Massa Freelance&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ Developer Guide: Deploying &amp;amp; Interacting with Smart Contracts
&lt;/h2&gt;

&lt;p&gt;Want to run this yourself? Here is how we handle the smart contract lifecycle in &lt;strong&gt;Massa Freelance&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Autonomous Smart Contract (&lt;code&gt;assembly/contracts/autonomous.ts&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;The heart of our system is the &lt;code&gt;autonomous.ts&lt;/code&gt; contract. Unlike traditional smart contracts that are passive (waiting for an external transaction to trigger them), this contract is &lt;strong&gt;active&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Self-Scheduling:&lt;/strong&gt; The &lt;code&gt;sendCoinsAutonomously&lt;/code&gt; function performs a payment and then &lt;em&gt;immediately schedules its next execution&lt;/em&gt; using &lt;code&gt;deferredCallRegister&lt;/code&gt;. This creates an infinite loop of payments that runs entirely on-chain without any off-chain "keeper" or cron job.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;State Management:&lt;/strong&gt; We use a simple state machine (&lt;code&gt;RUNNING&lt;/code&gt; / &lt;code&gt;STOPPED&lt;/code&gt;) to control the flow. The &lt;code&gt;start&lt;/code&gt; function kicks off the loop, and &lt;code&gt;stop&lt;/code&gt; breaks it.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Safety:&lt;/strong&gt; The contract checks its own balance before every execution to ensure it can cover both the payment and the storage fees for the next scheduled call.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Compiling &amp;amp; Deploying
&lt;/h3&gt;

&lt;p&gt;We use a set of custom scripts defined in our &lt;code&gt;package.json&lt;/code&gt; to streamline the process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Compile to WASM&lt;/strong&gt;&lt;br&gt;
First, we compile our AssemblyScript code into WebAssembly (WASM) bytecode that the Massa blockchain can understand.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build:autonomous
&lt;span class="c"&gt;# Runs: asc assembly/contracts/autonomous.ts --outFile build/autonomous.wasm --optimize --runtime stub&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Deploy to Buildnet&lt;/strong&gt;&lt;br&gt;
Next, we deploy the compiled WASM to the Massa Buildnet. We use a dedicated deployment script (&lt;code&gt;assembly/deploy_autonomous.ts&lt;/code&gt;) that handles the wallet connection and constructor arguments.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run deploy:autonomous
&lt;span class="c"&gt;# Runs: bun assembly/deploy_autonomous.ts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Note: Make sure you have your &lt;code&gt;WALLET_PRIVATE_KEY&lt;/code&gt; set in your &lt;code&gt;.env&lt;/code&gt; file!&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Interacting with the Contract
&lt;/h3&gt;

&lt;p&gt;Once deployed, the contract is in a &lt;code&gt;STOPPED&lt;/code&gt; state. To start the autonomous payment stream, we need to call the &lt;code&gt;start&lt;/code&gt; function.&lt;/p&gt;

&lt;p&gt;We've created a helper script for this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run call:autonomous-start
&lt;span class="c"&gt;# Runs: bun scripts/call_autonomous_start.ts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This script:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Connects to the blockchain using your private key.&lt;/li&gt;
&lt;li&gt; Targets your specific contract address.&lt;/li&gt;
&lt;li&gt; Sends a transaction to execute the &lt;code&gt;start&lt;/code&gt; method.&lt;/li&gt;
&lt;li&gt; Monitors the execution to ensure it started successfully.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And that's it! Your contract is now alive, waking itself up at every interval to pay your freelancer. 🚀&lt;/p&gt;

&lt;h1&gt;
  
  
  Demo
&lt;/h1&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/kx1Yc0mQH4w"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

</description>
      <category>kiro</category>
    </item>
    <item>
      <title>Building a Para MCP Server + Next.js Wallet Demo (with Kiro + MCP)</title>
      <dc:creator>uratmangun</dc:creator>
      <pubDate>Mon, 17 Nov 2025 22:49:13 +0000</pubDate>
      <link>https://dev.to/kirodotdev/building-a-para-mcp-server-nextjs-wallet-demo-with-kiro-mcp-56j1</link>
      <guid>https://dev.to/kirodotdev/building-a-para-mcp-server-nextjs-wallet-demo-with-kiro-mcp-56j1</guid>
      <description>&lt;h2&gt;
  
  
  para-mcp-server in one sentence
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;para-mcp-server&lt;/code&gt; is a Para MCP server plus a Next.js demo UI that lets AI tools and humans share the same Para-powered auth and wallet flows.&lt;/p&gt;

&lt;p&gt;It’s a small lab for experimenting with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MCP tools&lt;/strong&gt; that talk to Para&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next.js UI&lt;/strong&gt; that shows what the same flows look like in the browser&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-first workflows&lt;/strong&gt; (Kiro, ChatGPT, etc.) that can trigger those flows from inside your editor or chat.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What this project gives you
&lt;/h2&gt;

&lt;p&gt;From the &lt;code&gt;typescript/community/mcp-tools/para-mcp-server&lt;/code&gt; folder you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A Para MCP server&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Managed by &lt;code&gt;xmcp&lt;/code&gt; via &lt;code&gt;xmcp.config.ts&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Exposes Para operations to any MCP-capable client (ChatGPT, Kiro, etc.)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;A Next.js demo app&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Runs on &lt;code&gt;http://localhost:3012&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Shows end-to-end auth and wallet flows backed by Para&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Configurable Web3 infra&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Para API key and environment&lt;/li&gt;
&lt;li&gt;WalletConnect project ID&lt;/li&gt;
&lt;li&gt;Optional Coinbase Developer Platform (CDP) integration for paymaster / gas sponsorship&lt;/li&gt;
&lt;li&gt;Optional Base Sepolia RPC URL&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;You can treat it as both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;reference implementation&lt;/strong&gt; of Para + MCP + Next.js&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;playground&lt;/strong&gt; for your own tools and flows.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Local setup
&lt;/h2&gt;

&lt;p&gt;From the &lt;strong&gt;workspace root&lt;/strong&gt; (where &lt;code&gt;pnpm-workspace.yaml&lt;/code&gt; lives):&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Then from &lt;code&gt;typescript/community/mcp-tools/para-mcp-server&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;.env&lt;/code&gt; and fill in the values documented in &lt;code&gt;.env.example&lt;/code&gt;, especially:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Para SDK&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PARA_API_KEY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NEXT_PUBLIC_PARA_API_KEY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;NEXT_PUBLIC_PARA_ENVIRONMENT&lt;/code&gt; (e.g. &lt;code&gt;BETA&lt;/code&gt; or &lt;code&gt;PROD&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;WalletConnect&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Coinbase Developer Platform (optional)&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CDP_API_KEY_ID&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CDP_API_KEY_SECRET&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;NEXT_PUBLIC_PAYMASTER_URL&lt;/code&gt; (for sponsored gas, if you use it)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Optional RPC URLs&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;NEXT_PUBLIC_BASE_SEPOLIA_RPC_URL&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Optional Postgres&lt;/strong&gt; (for pregenerated wallets)

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;DATABASE_URL=postgresql://username:password@host:port/database&lt;/code&gt;Then run development mode:
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;xmcp dev&lt;/code&gt; – the Para MCP HTTP server&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;next dev -p 3012&lt;/code&gt; – the Next.js UI at &lt;code&gt;http://localhost:3012&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point you can connect your MCP-enabled client (Kiro, ChatGPT, etc.) to the running MCP server and also browse the UI directly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Auth and wallet flows (Next.js side)
&lt;/h2&gt;

&lt;p&gt;On the UI side, the heart of the demo is a reusable &lt;code&gt;ParaAuthComponent&lt;/code&gt; that encapsulates all Para auth logic. It’s designed to be dropped into different pages and flows instead of wiring each page manually.&lt;/p&gt;

&lt;p&gt;Some highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Email + OTP + passkeys&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Existing users can log in via hosted login links opened in a new tab or popup.&lt;/li&gt;
&lt;li&gt;New users can verify via a 6-digit code sent to email.&lt;/li&gt;
&lt;li&gt;Passkeys / password / PIN flows are supported through Para.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Wallet-aware UI&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;After auth completes, the component pulls all wallets associated with the user.&lt;/li&gt;
&lt;li&gt;A dropdown lets you pick whichever wallet you want to use.&lt;/li&gt;
&lt;li&gt;The component can optionally render wallet details (address, id, userId, type, &lt;code&gt;isPregen&lt;/code&gt;, etc.).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Pregenerated wallet flows&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;The repo also includes pages for claiming pregenerated wallets.&lt;/li&gt;
&lt;li&gt;These can be backed by Postgres via the &lt;code&gt;DATABASE_URL&lt;/code&gt; configuration if you enable that feature.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Browser- and AI-friendly auth redirects&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;For ChatGPT / MCP environments, the code tries to use &lt;code&gt;window.openai.openExternal&lt;/code&gt; when available so auth links open correctly inside native clients.&lt;/li&gt;
&lt;li&gt;It can also fall back to posting messages to a parent window (&lt;code&gt;postMessage&lt;/code&gt;) or simply using &lt;code&gt;window.location.assign&lt;/code&gt; with clear status messages like:&lt;/li&gt;
&lt;li&gt;"Authentication opened in a new tab. Don't close this page; finish auth there and return here."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;The end result is that the same auth + wallet flow can be driven by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A user clicking buttons in the Next.js UI&lt;/li&gt;
&lt;li&gt;An AI tool calling MCP tools that eventually surface these URLs and flows&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why MCP matters here
&lt;/h2&gt;

&lt;p&gt;The MCP layer is what lets this project plug Para directly into AI tooling.&lt;/p&gt;

&lt;p&gt;Instead of hard-coding a single frontend or CLI, you expose Para capabilities (auth, wallets, etc.) as &lt;strong&gt;MCP tools&lt;/strong&gt;. Any MCP-aware client can then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask for a Para wallet&lt;/li&gt;
&lt;li&gt;Trigger a login or verification&lt;/li&gt;
&lt;li&gt;Interact with the Next.js UI and underlying Para SDK indirectly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a neat loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You run &lt;code&gt;pnpm dev&lt;/code&gt; to bring up the MCP server + Next.js app.&lt;/li&gt;
&lt;li&gt;You connect an MCP client (like Kiro or ChatGPT) to the Para MCP server.&lt;/li&gt;
&lt;li&gt;The AI tool calls MCP tools to orchestrate Para auth/wallet actions.&lt;/li&gt;
&lt;li&gt;Humans can still see and debug everything via the Next.js UI in the browser.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  How we use Kiro in this repo
&lt;/h2&gt;

&lt;p&gt;Kiro is the AI development environment for this project, and it’s wired directly into multiple MCP servers via &lt;code&gt;.kiro/settings/mcp.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That single JSON file tells Kiro which MCP servers are available when you’re working in this repo. In this project it looks roughly like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;blockscout&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Configured with &lt;code&gt;"url": "https://mcp.blockscout.com/mcp"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Used for blockchain querying (token addresses, balances, transfers, etc.).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;chrome-devtools&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configured to run via:&lt;/li&gt;
&lt;li&gt;&lt;code&gt;"command": "npx"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;"args": [ "chrome-devtools-mcp@latest", "--browser-url=http://127.0.0.1:9222" ]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Lets the AI talk to a running Chrome instance through the DevTools protocol.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;coinbase-cdp&lt;/code&gt;&lt;/strong&gt; (currently disabled)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Points at &lt;code&gt;https://docs.cdp.coinbase.com/mcp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Intended for interacting with Coinbase Developer Platform from AI tooling.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;context7&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configured with &lt;code&gt;"command": "npx"&lt;/code&gt; and &lt;code&gt;"args": [ "-y", "@upstash/context7-mcp@latest" ]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Used to fetch up-to-date documentation for libraries (e.g., shadcn, Next.js packages, etc.).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;next-devtools&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configured with &lt;code&gt;"command": "npx"&lt;/code&gt; and &lt;code&gt;"args": [ "-y", "next-devtools-mcp@latest" ]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Helps the AI search and read official Next.js docs and, when applicable, talk to a running Next.js dev server.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;para-docs&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configured with &lt;code&gt;"url": "http://docs.getpara.com/mcp"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Allows the AI to search Para’s documentation directly from within Kiro.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;sequential-thinking&lt;/code&gt;&lt;/strong&gt; (disabled)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses the &lt;code&gt;@modelcontextprotocol/server-sequential-thinking&lt;/code&gt; package.&lt;/li&gt;
&lt;li&gt;Intended for more structured, multi-step reasoning on complex tasks.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;tiger&lt;/code&gt;&lt;/strong&gt; (disabled)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configured with &lt;code&gt;"command": "tiger"&lt;/code&gt; and &lt;code&gt;"args": [ "mcp", "start" ]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Aimed at querying Postgres databases via MCP.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Because &lt;code&gt;.kiro/settings/mcp.json&lt;/code&gt; lives alongside the code, anyone opening this repo in Kiro gets the same MCP setup automatically. The assistant knows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to talk to Para docs (&lt;code&gt;para-docs&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;How to introspect and control the browser (&lt;code&gt;chrome-devtools&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;How to pull in Blockscout, Context7, and Next.js-specific knowledge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…all without you manually wiring each tool in your editor.&lt;/p&gt;

&lt;p&gt;In other words, &lt;strong&gt;Kiro + MCP turns this repo into an AI-first development environment&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The code defines your server and UI.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.kiro/settings/mcp.json&lt;/code&gt; defines your tool graph.&lt;/li&gt;
&lt;li&gt;Kiro uses both to help you build, debug.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Demo
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/uratmangun/arbitrum-vibekit/tree/para-integration/typescript/community/mcp-tools/para-mcp-server" rel="noopener noreferrer"&gt;https://github.com/uratmangun/arbitrum-vibekit/tree/para-integration/typescript/community/mcp-tools/para-mcp-server&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://para-mcp-server.vercel.app/" rel="noopener noreferrer"&gt;https://para-mcp-server.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/FZJJEF5nUZw"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

</description>
      <category>kiro</category>
    </item>
    <item>
      <title>Resume AI Creator: Building an Intelligent Resume Platform with MCP and Auth0</title>
      <dc:creator>uratmangun</dc:creator>
      <pubDate>Sun, 19 Oct 2025 14:52:16 +0000</pubDate>
      <link>https://dev.to/uratmangun/resume-ai-creator-building-an-intelligent-resume-platform-with-mcp-and-auth0-4039</link>
      <guid>https://dev.to/uratmangun/resume-ai-creator-building-an-intelligent-resume-platform-with-mcp-and-auth0-4039</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/auth0-2025-10-08"&gt;Auth0 for AI Agents Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Resume AI Creator&lt;/strong&gt;, an intelligent resume management platform that leverages the Model Context Protocol (MCP) to enable AI agents to create, manage, and optimize professional resumes through natural language conversations. The application solves the problem of tedious resume creation by allowing users to interact with AI agents that understand context and can intelligently structure work history, projects, and achievements.&lt;/p&gt;

&lt;p&gt;The platform features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI-Powered Resume Creation&lt;/strong&gt;: Natural language interface for building resumes via MCP tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured Data Management&lt;/strong&gt;: PostgreSQL database with relational tables for resumes, work history, projects, and achievements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Provider AI Support&lt;/strong&gt;: Integration with OpenRouter, Google Gemini, and OpenAI for flexible AI capabilities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure Authentication&lt;/strong&gt;: Auth0-based user authentication with session management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Key Management&lt;/strong&gt;: Secure storage and validation of API keys for external integrations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Updates&lt;/strong&gt;: Modern React 19 UI with Next.js 15 App Router&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/uratmangun/resume-ai-creator-mcp/tree/auth0" rel="noopener noreferrer"&gt;GitHub - resume-ai-creator-mcp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web demo&lt;/strong&gt;: &lt;a href="https://resume-chatgpt-apps.vercel.app/" rel="noopener noreferrer"&gt;https://resume-chatgpt-apps.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/F7xLcvudZbI"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;The application exposes 6 MCP tools that AI agents can use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;create-resume&lt;/code&gt; - Create new resumes with structured data&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;update-resume&lt;/code&gt; - Modify existing resumes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get-resume&lt;/code&gt; - Retrieve resume details&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;list-resumes&lt;/code&gt; - List all user resumes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;delete-resume&lt;/code&gt; - Remove resumes with cascading deletes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;draft-create-resume&lt;/code&gt; - Preview resumes before creation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tech Stack&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js 15.3.5 with React 19&lt;/li&gt;
&lt;li&gt;xmcp 0.3.4 for MCP server implementation&lt;/li&gt;
&lt;li&gt;Drizzle ORM with PostgreSQL (Neon)&lt;/li&gt;
&lt;li&gt;TailwindCSS 4.1 for styling&lt;/li&gt;
&lt;li&gt;TypeScript 5.9 for type safety&lt;/li&gt;
&lt;li&gt;Vercel AI SDK for multi-provider support&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Used Auth0 for AI Agents
&lt;/h2&gt;

&lt;p&gt;Auth0 plays a critical role in securing both the web application and the MCP server endpoints. Here's how I implemented it:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;User Authentication Flow&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I integrated Auth0's Next.js SDK (&lt;code&gt;@auth0/nextjs-auth0&lt;/code&gt;) to handle user authentication:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users authenticate via Auth0's Universal Login&lt;/li&gt;
&lt;li&gt;Sessions are stored in encrypted HTTP-only cookies&lt;/li&gt;
&lt;li&gt;The middleware validates sessions on every protected route&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Protected MCP Endpoints&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The MCP server runs as a Next.js API route, and I secured it using Auth0 middleware:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// middleware.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;middleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NextRequest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;protectedPaths&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/resumes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/api-keys&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/resumes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isProtected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;protectedPaths&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nextUrl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isProtected&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;auth0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getSession&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;NextResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/auth/login&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. &lt;strong&gt;User Context in MCP Tools&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Each MCP tool extracts the authenticated user ID from the Auth0 session to ensure data isolation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/tools/create-resume.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;InferSchema&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;schema&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;extra&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getUserIdFromExtra&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;extra&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resume&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;createResume&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// ... other fields&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;resumeId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;resume&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. &lt;strong&gt;Session Management&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Auth0's session handling ensures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic token refresh for long-running AI agent sessions&lt;/li&gt;
&lt;li&gt;Secure cookie storage with encryption&lt;/li&gt;
&lt;li&gt;CORS support for cross-origin MCP requests&lt;/li&gt;
&lt;li&gt;Graceful error handling with automatic re-authentication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The combination of Auth0's robust authentication and MCP's tool-based architecture creates a secure environment where AI agents can operate on behalf of authenticated users without compromising security.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons Learned and Takeaways
&lt;/h2&gt;

&lt;p&gt;Building this project taught me several valuable lessons about AI agents, authentication, and modern web development:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. MCP is a Game-Changer for AI Integration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The Model Context Protocol provides a standardized way for AI agents to interact with applications. Instead of building custom APIs for each AI provider, MCP tools are universally accessible. The &lt;code&gt;xmcp&lt;/code&gt; library made it incredibly easy to expose Next.js API routes as MCP endpoints with just a config file.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Authentication for AI Agents is Different&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Traditional user authentication doesn't translate directly to AI agents. I learned to implement a dual authentication system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User-facing&lt;/strong&gt;: Auth0 for web UI and session management&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Database Schema Design Matters&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Using Drizzle ORM with a relational schema (resumes → work_history, projects, achievements) made it easy to structure complex resume data. The cascading deletes ensure data integrity, and TypeScript types generated from the schema eliminate runtime errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Challenges Faced&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Session Cookie Issues&lt;/strong&gt;: Auth0's encrypted cookies initially caused JWE errors. I fixed this by only validating sessions on protected routes, not on every request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Tool Parameter Validation&lt;/strong&gt;: Ensuring AI agents pass correctly structured data required careful Zod schema design with descriptive field annotations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Provider AI Support&lt;/strong&gt;: Different AI providers have varying capabilities. Using the Vercel AI SDK abstracted these differences.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. Key Insights&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fish Shell Syntax&lt;/strong&gt;: Standardizing on Fish shell for all terminal commands improved consistency across development workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bun for Performance&lt;/strong&gt;: Using Bun as the primary package manager significantly reduced install times and improved dev server startup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conventional Commits with Emojis&lt;/strong&gt;: Implementing a structured commit message format (✨ feat, 🔧 fix, etc.) made the Git history much more readable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;6. Advice for Other Developers&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Start with a clear database schema before building MCP tools&lt;/li&gt;
&lt;li&gt;Use TypeScript everywhere—it catches errors before they reach production&lt;/li&gt;
&lt;li&gt;Test MCP tools with multiple AI providers to ensure compatibility&lt;/li&gt;
&lt;li&gt;Implement proper error handling in middleware to avoid cryptic authentication failures&lt;/li&gt;
&lt;li&gt;Use Drizzle Studio (&lt;code&gt;bun run db:studio&lt;/code&gt;) for visual database management during development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project demonstrated that combining Auth0's enterprise-grade authentication with MCP's AI-native architecture creates powerful, secure applications that feel magical to use. The future of software is conversational, and tools like these are paving the way.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>auth0challenge</category>
      <category>ai</category>
      <category>authentication</category>
    </item>
    <item>
      <title>Securing AI Agents with Auth0: Complete MCP Server Implementation</title>
      <dc:creator>uratmangun</dc:creator>
      <pubDate>Wed, 15 Oct 2025 13:54:36 +0000</pubDate>
      <link>https://dev.to/uratmangun/securing-ai-agents-with-auth0-complete-mcp-server-implementation-kom</link>
      <guid>https://dev.to/uratmangun/securing-ai-agents-with-auth0-complete-mcp-server-implementation-kom</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/auth0-2025-10-08"&gt;Auth0 for AI Agents Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Auth XMCP - Next.js&lt;/strong&gt;, a secure Next.js application that provides OAuth-protected Model Context Protocol (MCP) endpoints using Auth0 authentication. This project demonstrates how to build a modern MCP server with enterprise-grade security and Next.js integration.&lt;/p&gt;

&lt;p&gt;The application solves a critical problem in the AI ecosystem: &lt;strong&gt;secure communication between AI agents and external systems&lt;/strong&gt;. As AI agents become more prevalent, they need secure ways to access resources, tools, and data. My solution provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔐 &lt;strong&gt;OAuth Authentication&lt;/strong&gt;: Secure MCP endpoints with Auth0 integration&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Full MCP Server&lt;/strong&gt;: Complete Model Context Protocol server with tools, resources, and prompts
&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Next.js 15&lt;/strong&gt;: Built with the latest Next.js features including Turbopack&lt;/li&gt;
&lt;li&gt;🛡️ &lt;strong&gt;JWT Verification&lt;/strong&gt;: Robust token validation with JWKS support&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Modern UI&lt;/strong&gt;: Clean interface with TailwindCSS and dark mode support&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/uratmangun/auth-xmcp-nextjs/tree/auth0" rel="noopener noreferrer"&gt;https://github.com/uratmangun/auth-xmcp-nextjs/tree/auth0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://auth-xmcp-nextjs.vercel.app" rel="noopener noreferrer"&gt;https://auth-xmcp-nextjs.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/Ly4wGhtzRnM"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technology Stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js 15.5.2 with React 19.2.0&lt;/li&gt;
&lt;li&gt;TypeScript 5.9.3 with full type safety&lt;/li&gt;
&lt;li&gt;Auth0 NextJS SDK 4.10.0&lt;/li&gt;
&lt;li&gt;XMCP 0.3.2 with Next.js adapter&lt;/li&gt;
&lt;li&gt;TailwindCSS 4.1.14, Zod 3.24.4, jose 5.10.0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Secure MCP endpoint at &lt;code&gt;/mcp&lt;/code&gt; requiring Auth0 JWT tokens&lt;/li&gt;
&lt;li&gt;AI agent authentication flow via Auth0&lt;/li&gt;
&lt;li&gt;MCP tools with parameter validation&lt;/li&gt;
&lt;li&gt;Configuration and user resources&lt;/li&gt;
&lt;li&gt;Code review prompts&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How I Used Auth0 for AI Agents
&lt;/h2&gt;

&lt;p&gt;Auth0 secures my MCP server through:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔐 JWT Token Validation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tokens verified against Auth0's JWKS&lt;/li&gt;
&lt;li&gt;Claims validation for issuer and audience&lt;/li&gt;
&lt;li&gt;Automatic middleware protection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🚀 OAuth Flow Integration&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Client credentials flow for AI agents&lt;/li&gt;
&lt;li&gt;Scoped tokens for MCP operations&lt;/li&gt;
&lt;li&gt;Automatic token refresh&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🛡️ Enterprise Security&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RBAC for different agent permissions&lt;/li&gt;
&lt;li&gt;Audit logging and rate limiting&lt;/li&gt;
&lt;li&gt;Multi-factor authentication support&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lessons Learned and Takeaways
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Key Challenges:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;JWT integration with XMCP framework required careful middleware design&lt;/li&gt;
&lt;li&gt;Ensuring end-to-end TypeScript safety&lt;/li&gt;
&lt;li&gt;Working with bleeding-edge Next.js 15 features&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Technical Insights:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents need robust authentication from day one&lt;/li&gt;
&lt;li&gt;Zod schemas prevent runtime errors in production&lt;/li&gt;
&lt;li&gt;Next.js 15 + Turbopack provides excellent developer experience&lt;/li&gt;
&lt;li&gt;Auth0's JWKS simplifies key rotation and certificate management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Advice for Developers:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start with security - don't treat authentication as an afterthought&lt;/li&gt;
&lt;li&gt;Use type safety with Zod + TypeScript&lt;/li&gt;
&lt;li&gt;Leverage modern tools: Next.js 15, XMCP, and Auth0 work beautifully together&lt;/li&gt;
&lt;li&gt;Test thoroughly - AI agent authentication requires comprehensive testing&lt;/li&gt;
&lt;li&gt;Document everything for better integration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This project demonstrates that building secure, production-ready AI agent infrastructure is achievable with the right tools. The combination of Auth0 and MCP opens exciting possibilities for secure AI ecosystems.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Built with ❤️ using Next.js, XMCP, and Auth0&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>auth0challenge</category>
      <category>ai</category>
      <category>authentication</category>
    </item>
    <item>
      <title>Deploy and Host remix-template on Railway</title>
      <dc:creator>uratmangun</dc:creator>
      <pubDate>Sun, 10 Aug 2025 12:23:28 +0000</pubDate>
      <link>https://dev.to/kirodotdev/deploy-and-host-remix-template-on-railway-47m1</link>
      <guid>https://dev.to/kirodotdev/deploy-and-host-remix-template-on-railway-47m1</guid>
      <description>&lt;p&gt;A modern Remix application template with TypeScript, Tailwind CSS, and Vite for fast development and production builds. This template provides a solid foundation for building full-stack React applications with server-side rendering capabilities.&lt;/p&gt;

&lt;h2&gt;
  
  
  One click deploy url
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://railway.com/deploy/remix-template?referralCode=zZok6X" rel="noopener noreferrer"&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%2Fzpvuhchloww3mcehxfpx.png" alt="deploy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Hosting remix-template
&lt;/h2&gt;

&lt;p&gt;This Remix template is designed for seamless deployment on Railway's platform. It includes a production-ready server setup with &lt;code&gt;remix-serve&lt;/code&gt; and builds optimized client and server bundles. The application uses Node.js 20+ and includes modern tooling like Vite for fast builds and hot module replacement during development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Full-stack web applications with server-side rendering&lt;/li&gt;
&lt;li&gt;Progressive web apps with enhanced user experience&lt;/li&gt;
&lt;li&gt;API-driven applications with integrated frontend and backend&lt;/li&gt;
&lt;li&gt;E-commerce platforms requiring SEO optimization&lt;/li&gt;
&lt;li&gt;Content management systems with dynamic routing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dependencies for remix-template Hosting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Runtime Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js 20.0.0 or higher&lt;/li&gt;
&lt;li&gt;Package manager: pnpm (preferred) or yarn fallback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Core Dependencies:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;@remix-run/node, @remix-run/react, @remix-run/serve&lt;/li&gt;
&lt;li&gt;React 18.2.0+ and React DOM&lt;/li&gt;
&lt;li&gt;TypeScript for type safety&lt;/li&gt;
&lt;li&gt;Tailwind CSS for styling&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Deployment Dependencies
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Build Process:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pnpm run build&lt;/code&gt; - Compiles the application for production&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pnpm start&lt;/code&gt; - Starts the production server with remix-serve&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Environment Variables:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;PORT&lt;/code&gt; - Railway automatically provides this for server binding&lt;/li&gt;
&lt;li&gt;Additional environment variables can be configured in Railway dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Build Output:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;build/server&lt;/code&gt; - Server-side code&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;build/client&lt;/code&gt; - Client-side assets&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Using .kiro Automation (optional)
&lt;/h2&gt;

&lt;p&gt;This template includes .kiro automation workflows for enhanced development experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-commit and push workflows&lt;/strong&gt; for streamlined version control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;README generation&lt;/strong&gt; to keep documentation up-to-date&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project scaffolding tools&lt;/strong&gt; for rapid development setup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steering rules&lt;/strong&gt; for consistent code standards and package management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The .kiro configuration ensures pnpm usage with yarn fallback, maintains shell preferences, and provides automated workflows for common development tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Deploy remix-template on Railway?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Seamless Deployment:&lt;/strong&gt; Railway's git-based deployment automatically builds and deploys your Remix app with zero configuration. Simply connect your repository and Railway handles the rest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Optimized:&lt;/strong&gt; Railway's global edge network ensures fast loading times for your server-rendered Remix applications, with automatic scaling based on traffic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer Experience:&lt;/strong&gt; Built-in environment variable management, automatic HTTPS, custom domains, and integrated monitoring make Railway ideal for Remix applications requiring both development speed and production reliability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost Effective:&lt;/strong&gt; Pay only for what you use with Railway's usage-based pricing, perfect for Remix apps that benefit from server-side rendering without the overhead of complex infrastructure management.&lt;/p&gt;

&lt;h2&gt;
  
  
  Github repo
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/uratmangun" rel="noopener noreferrer"&gt;
        uratmangun
      &lt;/a&gt; / &lt;a href="https://github.com/uratmangun/remix-template" rel="noopener noreferrer"&gt;
        remix-template
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Remix SPA – Cloudflare Pages static deployment
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Deploy and Host remix-template on Railway&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A modern Remix application template with TypeScript, Tailwind CSS, and Vite for fast development and production builds. This template provides a solid foundation for building full-stack React applications with server-side rendering capabilities.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;One click deploy url&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://railway.com/deploy/remix-template?referralCode=zZok6X" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/88cb27bf937b98276737ba7888269a1bc9495d8670f63e1acc908b3442841114/68747470733a2f2f7261696c7761792e636f6d2f627574746f6e2e737667" alt="Deploy on Railway"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;About Hosting remix-template&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;This Remix template is designed for seamless deployment on Railway's platform. It includes a production-ready server setup with &lt;code&gt;remix-serve&lt;/code&gt; and builds optimized client and server bundles. The application uses Node.js 20+ and includes modern tooling like Vite for fast builds and hot module replacement during development.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Common Use Cases&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Full-stack web applications with server-side rendering&lt;/li&gt;
&lt;li&gt;Progressive web apps with enhanced user experience&lt;/li&gt;
&lt;li&gt;API-driven applications with integrated frontend and backend&lt;/li&gt;
&lt;li&gt;E-commerce platforms requiring SEO optimization&lt;/li&gt;
&lt;li&gt;Content management systems with dynamic routing&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Dependencies for remix-template Hosting&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Runtime Requirements:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node.js 20.0.0 or higher&lt;/li&gt;
&lt;li&gt;Package manager: pnpm (preferred) or yarn fallback&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Core Dependencies:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;@remix-run/node, @remix-run/react, @remix-run/serve&lt;/li&gt;
&lt;li&gt;React 18.2.0+ and…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/uratmangun/remix-template" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>kiro</category>
      <category>railway</category>
    </item>
    <item>
      <title>Building an AI-Powered Repository Search with Redis 8 Vector Similarity</title>
      <dc:creator>uratmangun</dc:creator>
      <pubDate>Mon, 04 Aug 2025 01:58:54 +0000</pubDate>
      <link>https://dev.to/kirodotdev/building-an-ai-powered-repository-search-with-redis-8-vector-similarity-50pp</link>
      <guid>https://dev.to/kirodotdev/building-an-ai-powered-repository-search-with-redis-8-vector-similarity-50pp</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I created a modern full-stack web application that combines React, Deno, and Redis 8 to deliver AI-powered semantic search capabilities for GitHub repositories. This isn't just another search tool - it's a smart repository discovery platform that understands the meaning behind your queries using vector embeddings and cosine similarity.&lt;/p&gt;

&lt;p&gt;The application features a sleek React frontend with dark mode support, powered by a robust Deno backend that leverages Redis 8's advanced vector search capabilities. Users can add GitHub repositories to their collection and then search through them using natural language queries that go far beyond simple keyword matching.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/kGz-LBTtyfg"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/uratmangun/my-awesome-boilerplate" rel="noopener noreferrer"&gt;My Awesome Boilerplate&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project showcases a complete implementation of vector similarity search using Redis 8, with features including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-powered semantic search using nomic embeddings&lt;/li&gt;
&lt;li&gt;Real-time repository management with GitHub API integration&lt;/li&gt;
&lt;li&gt;Multiple search types (description, repository name, or combined embeddings)&lt;/li&gt;
&lt;li&gt;Responsive design with Tailwind CSS and custom UI components&lt;/li&gt;
&lt;li&gt;Secure authentication with Clerk&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Used Redis 8
&lt;/h2&gt;

&lt;p&gt;Redis 8 serves as the backbone of this application, going far beyond traditional caching to function as a primary vector database and search engine. Here's how I leveraged its advanced capabilities:&lt;/p&gt;

&lt;h3&gt;
  
  
  Vector Storage and Indexing
&lt;/h3&gt;

&lt;p&gt;I used Redis 8's native vector field support to store three types of embeddings for each repository:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description embeddings&lt;/strong&gt;: 768-dimensional vectors from repository descriptions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repository name embeddings&lt;/strong&gt;: Semantic vectors from repository names
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Combined embeddings&lt;/strong&gt;: Unified vectors combining both description and name data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Redis index schema supports both FLAT and HNSW algorithms:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// FLAT algorithm for precise similarity on smaller datasets&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$.descriptionEmbeddings&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;descriptionEmbeddings&lt;/span&gt; &lt;span class="nx"&gt;VECTOR&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;FLAT&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TYPE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;FLOAT32&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DIM&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="mi"&gt;768&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DISTANCE_METRIC&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;COSINE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;// HNSW for faster approximate search on larger datasets&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$.combinedEmbeddings&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;combinedEmbeddings&lt;/span&gt; &lt;span class="nx"&gt;VECTOR&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;HNSW&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TYPE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;FLOAT32&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DIM&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="mi"&gt;768&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DISTANCE_METRIC&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;COSINE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Semantic Search Implementation
&lt;/h3&gt;

&lt;p&gt;Instead of relying on Redis Search modules that might not be available in all environments, I implemented a custom vector similarity search using Redis 8's core operations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Vector Generation&lt;/strong&gt;: Using Google's Gemini embedding model to convert text queries into 768-dimensional vectors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Similarity Calculation&lt;/strong&gt;: Computing cosine similarity between query vectors and stored repository embeddings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ranking&lt;/strong&gt;: Sorting results by similarity scores to surface the most relevant repositories&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Multi-Modal Search Capabilities
&lt;/h3&gt;

&lt;p&gt;The application supports three distinct search modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description Search&lt;/strong&gt;: Matches against repository description embeddings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repository Search&lt;/strong&gt;: Focuses on repository name semantics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Combined Search&lt;/strong&gt;: Uses unified embeddings for comprehensive matching&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Real-Time Data Management
&lt;/h3&gt;

&lt;p&gt;Redis 8 handles all CRUD operations for repository data, storing complete JSON documents with embedded vectors. The hash-based storage pattern (&lt;code&gt;item:*&lt;/code&gt;) enables efficient scanning and retrieval while maintaining data integrity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance Optimization
&lt;/h3&gt;

&lt;p&gt;By leveraging Redis 8's in-memory architecture, the application delivers sub-second search results even when processing complex vector calculations. The cosine similarity computations happen entirely in-memory, making the search experience incredibly responsive.&lt;/p&gt;

&lt;p&gt;This implementation demonstrates Redis 8's evolution from a simple cache to a sophisticated vector database capable of powering modern AI applications. The combination of traditional Redis operations with advanced vector capabilities creates a powerful foundation for semantic search that scales beautifully.&lt;/p&gt;

</description>
      <category>redischallenge</category>
      <category>devchallenge</category>
      <category>database</category>
      <category>ai</category>
    </item>
    <item>
      <title>Building a Redis AI Vector Search Boilerplate with Spec-Driven Development</title>
      <dc:creator>uratmangun</dc:creator>
      <pubDate>Fri, 01 Aug 2025 03:29:00 +0000</pubDate>
      <link>https://dev.to/kirodotdev/building-a-redis-ai-vector-search-boilerplate-with-spec-driven-development-1gm2</link>
      <guid>https://dev.to/kirodotdev/building-a-redis-ai-vector-search-boilerplate-with-spec-driven-development-1gm2</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the era of AI-powered applications, traditional keyword search feels increasingly outdated. Users expect search experiences that understand context and meaning, not just exact word matches. That's why I built this Redis AI Vector Search Boilerplate - a modern full-stack application that demonstrates how to implement intelligent semantic search using Redis vector similarity and Google GenAI embeddings.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Redis AI Vector Search Boilerplate?
&lt;/h2&gt;

&lt;p&gt;This project is a comprehensive boilerplate that enables developers to quickly implement AI-powered semantic search in their applications. Instead of searching for exact keywords, users can ask natural language questions like "How to implement real-time chat?" and get relevance-ranked results that understand the intent behind their query.&lt;/p&gt;

&lt;p&gt;The application combines the power of Redis for high-performance vector storage, Google GenAI for generating text embeddings, and modern web technologies to create a seamless search experience. It's designed as both a functional application and an educational resource for developers wanting to understand vector similarity search.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack &amp;amp; Architecture
&lt;/h2&gt;

&lt;p&gt;The project leverages a modern serverless architecture with carefully chosen technologies:&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontend Technologies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React 19&lt;/strong&gt; - Latest React features for modern UI development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; - Type safety throughout the application&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; - Utility-first styling with dark/light theme support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vite&lt;/strong&gt; - Fast build tool and development server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Radix UI&lt;/strong&gt; - Accessible component primitives&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Backend Technologies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deno&lt;/strong&gt; - Modern JavaScript/TypeScript runtime for serverless functions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redis&lt;/strong&gt; - Vector database for high-performance similarity search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google GenAI&lt;/strong&gt; - Text embedding generation for semantic understanding&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Development Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kiro AI&lt;/strong&gt; - Spec-driven development and automation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ESLint&lt;/strong&gt; - Code quality and consistency&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pnpm&lt;/strong&gt; - Fast package management&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Development Methodology: Kiro Specifications
&lt;/h2&gt;

&lt;p&gt;This project follows spec-driven development using Kiro AI specifications, which proved instrumental in maintaining code quality and project coherence. The methodology involves three core components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Requirements&lt;/strong&gt;: User stories and acceptance criteria for each feature&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design&lt;/strong&gt;: Technical architecture and implementation approach
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tasks&lt;/strong&gt;: Discrete, trackable implementation steps&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Specifications Created:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Redis AI Boilerplate&lt;/strong&gt; - Core application functionality with semantic search interface&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare-Deno Integration&lt;/strong&gt; - Seamless deployment pipeline for full-stack serverless architecture&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Item Deletion&lt;/strong&gt; - CRUD operations with proper error handling and user feedback&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deno Server Polish&lt;/strong&gt; - Performance optimization and production readiness&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each specification follows the EARS (Easy Approach to Requirements Syntax) format, ensuring clear, testable requirements that guide implementation decisions.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Semantic Search&lt;/strong&gt;: Natural language queries powered by 768-dimensional vector embeddings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time CRUD Operations&lt;/strong&gt;: Add, search, retrieve, and delete items with instant feedback&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector Similarity Scoring&lt;/strong&gt;: Cosine similarity calculations for relevance ranking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-platform Deployment&lt;/strong&gt;: Compatible with Deno Deploy and Cloudflare Pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsive Design&lt;/strong&gt;: Modern UI with dark/light theme support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development Automation&lt;/strong&gt;: 23 Kiro hooks for workflow automation&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/uratmangun" rel="noopener noreferrer"&gt;
        uratmangun
      &lt;/a&gt; / &lt;a href="https://github.com/uratmangun/redis-boilerplate" rel="noopener noreferrer"&gt;
        redis-boilerplate
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Redis AI Vector Search Boilerplate&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A modern full-stack application demonstrating AI-powered semantic search using Redis vector similarity, built with React, TypeScript, and Deno. This project showcases how to implement intelligent search functionality with text embeddings and vector databases.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI Semantic Search&lt;/strong&gt;: Natural language queries powered by Google GenAI embeddings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector Similarity&lt;/strong&gt;: Redis-based vector search with cosine similarity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time UI&lt;/strong&gt;: Modern React interface with dark/light theme support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serverless Ready&lt;/strong&gt;: Deno Deploy and Cloudflare Pages compatible&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full CRUD Operations&lt;/strong&gt;: Add, search, retrieve, and delete items&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsive Design&lt;/strong&gt;: Mobile-friendly interface with Tailwind CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type Safety&lt;/strong&gt;: Full TypeScript implementation across frontend and backend&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠 Tech Stack&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Frontend&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React 19&lt;/strong&gt; - Modern UI library with latest features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; - Type-safe development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; - Utility-first styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vite&lt;/strong&gt; - Fast build tool and dev server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React Router&lt;/strong&gt; - Client-side routing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Radix UI&lt;/strong&gt; - Accessible component primitives&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Backend&lt;/h3&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/uratmangun/redis-boilerplate" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Setting up the project is straightforward with the provided configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone the repository&lt;/span&gt;
git clone https://github.com/uratmangun/redis-boilerplate.git
&lt;span class="nb"&gt;cd &lt;/span&gt;redis-boilerplate

&lt;span class="c"&gt;# Install dependencies&lt;/span&gt;
pnpm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Configure environment&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;span class="c"&gt;# Edit .env with your Redis URL and Google AI API key&lt;/span&gt;

&lt;span class="c"&gt;# Start development servers&lt;/span&gt;
pnpm dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application supports various Redis providers including local development, Upstash for serverless deployments, Redis Cloud, and Railway.&lt;/p&gt;

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

&lt;p&gt;Building this Redis AI Vector Search Boilerplate was an enlightening journey into the intersection of AI and modern web development. The combination of vector similarity search, serverless architecture, and spec-driven development created a robust foundation for intelligent applications.&lt;/p&gt;

&lt;p&gt;The project demonstrates that implementing AI-powered features doesn't have to be complex - with the right architecture and tools, developers can create sophisticated search experiences that truly understand user intent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Deep Dive
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Project Structure
&lt;/h3&gt;

&lt;p&gt;The codebase is organized for clarity and maintainability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;src/components/&lt;/code&gt; - React UI components with TypeScript&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;functions/&lt;/code&gt; - Deno serverless functions for API endpoints&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;utils/&lt;/code&gt; - Shared utilities for Redis operations and text embeddings&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.kiro/specs/&lt;/code&gt; - Comprehensive development specifications&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.kiro/hooks/&lt;/code&gt; - Automated development workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Dependencies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;@google/generative-ai&lt;/strong&gt; - Google GenAI for text embeddings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;redis&lt;/strong&gt; - Redis client for Deno&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;react&lt;/strong&gt; - UI framework with latest features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;tailwindcss&lt;/strong&gt; - Utility-first CSS framework&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;@radix-ui/react-slot&lt;/strong&gt; - Accessible component primitives&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Development Workflow
&lt;/h3&gt;

&lt;p&gt;The spec-driven approach with Kiro AI enabled systematic feature development:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Requirements gathering with user stories and acceptance criteria&lt;/li&gt;
&lt;li&gt;Technical design with architecture decisions and trade-offs&lt;/li&gt;
&lt;li&gt;Implementation through discrete, trackable tasks&lt;/li&gt;
&lt;li&gt;Automated documentation and workflow management through hooks&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This methodology proved invaluable for maintaining project coherence and ensuring all features met their intended requirements while providing clear progress tracking throughout development.&lt;/p&gt;

</description>
      <category>kiro</category>
    </item>
    <item>
      <title>Building AI-Powered Semantic Search with Redis Vector Similarity and Deno</title>
      <dc:creator>uratmangun</dc:creator>
      <pubDate>Fri, 01 Aug 2025 03:27:54 +0000</pubDate>
      <link>https://dev.to/uratmangun/building-ai-powered-semantic-search-with-redis-vector-similarity-and-deno-33mp</link>
      <guid>https://dev.to/uratmangun/building-ai-powered-semantic-search-with-redis-vector-similarity-and-deno-33mp</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I created a modern full-stack application that demonstrates the power of AI-driven semantic search using Redis vector similarity. This isn't your typical keyword-based search - it understands the meaning behind queries and finds relevant content even when exact words don't match.&lt;/p&gt;

&lt;p&gt;The application combines a sleek React frontend with a Deno-powered backend, creating a seamless experience for adding, searching, and managing content. Users can perform natural language queries like "machine learning algorithms" and get relevant results even if the stored content uses terms like "AI models" or "neural networks."&lt;/p&gt;

&lt;p&gt;Key features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Semantic Search&lt;/strong&gt;: Natural language queries powered by Google GenAI embeddings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Interface&lt;/strong&gt;: Modern React UI with dark/light theme support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serverless Architecture&lt;/strong&gt;: Built for Deno Deploy and Cloudflare Pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full CRUD Operations&lt;/strong&gt;: Complete item management with vector-powered search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple Search Types&lt;/strong&gt;: Search by title, content, or combined embeddings&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/fA03vvJJegs"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/your-username/redis-ai-vector-search" rel="noopener noreferrer"&gt;Redis AI Vector Search Boilerplate&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project showcases a complete implementation with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React 19 frontend with TypeScript and Tailwind CSS&lt;/li&gt;
&lt;li&gt;Deno serverless functions for the API layer&lt;/li&gt;
&lt;li&gt;Redis vector database with cosine similarity search&lt;/li&gt;
&lt;li&gt;Google GenAI for text embedding generation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Used Redis 8
&lt;/h2&gt;

&lt;p&gt;Redis serves as the primary database and search engine in this application, going far beyond traditional caching. Here's how I leveraged Redis 8's advanced capabilities:&lt;/p&gt;

&lt;h3&gt;
  
  
  Vector Database Implementation
&lt;/h3&gt;

&lt;p&gt;The core innovation lies in using Redis as a vector database. Each piece of content gets converted into 768-dimensional embeddings using Google GenAI, then stored in Redis alongside the original text:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Store embeddings in Redis hash&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;redis&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;itemKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;titleEmbeddings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;titleEmbeddings&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;contentEmbeddings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;contentEmbeddings&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;combinedEmbeddings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;combinedEmbeddings&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Cosine Similarity Search
&lt;/h3&gt;

&lt;p&gt;Instead of relying on Redis Search modules, I implemented cosine similarity calculations directly in the application layer. This approach ensures compatibility across different Redis deployments while maintaining high performance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Calculate cosine similarity between query and stored embeddings&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;dotProduct&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;queryMagnitude&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;storedMagnitude&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;queryEmbedding&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;dotProduct&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;queryEmbedding&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;storedEmbeddings&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="nx"&gt;queryMagnitude&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;queryEmbedding&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;queryEmbedding&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="nx"&gt;storedMagnitude&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;storedEmbeddings&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;storedEmbeddings&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;similarity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;dotProduct&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queryMagnitude&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;storedMagnitude&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Multi-Modal Search Strategy
&lt;/h3&gt;

&lt;p&gt;The application supports three distinct search modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Title Search&lt;/strong&gt;: Searches only in document titles using title-specific embeddings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Search&lt;/strong&gt;: Searches only in document content using content-specific embeddings
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Combined Search&lt;/strong&gt;: Searches across both title and content using merged embeddings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This flexibility allows users to fine-tune their search strategy based on their needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scalable Data Architecture
&lt;/h3&gt;

&lt;p&gt;Redis handles the complete data lifecycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt;: Items stored as Redis hashes with structured fields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indexing&lt;/strong&gt;: Vector embeddings stored as JSON strings for efficient retrieval&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt;: Scan operations combined with in-memory similarity calculations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Management&lt;/strong&gt;: Full CRUD operations with automatic timestamp tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Performance Optimizations
&lt;/h3&gt;

&lt;p&gt;The implementation includes several Redis-specific optimizations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Batch Operations&lt;/strong&gt;: Using Redis pipelines for bulk operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory Efficiency&lt;/strong&gt;: Storing embeddings as compressed JSON strings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connection Pooling&lt;/strong&gt;: Efficient Redis connection management in serverless functions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scan Patterns&lt;/strong&gt;: Using Redis SCAN for memory-efficient key iteration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Beyond Traditional Use Cases
&lt;/h3&gt;

&lt;p&gt;This project demonstrates Redis 8's evolution from a simple cache to a sophisticated data platform:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Primary Database&lt;/strong&gt;: Redis serves as the main data store, not just a cache layer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector Search Engine&lt;/strong&gt;: Handles complex similarity calculations at scale&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Operations&lt;/strong&gt;: Supports instant search results with sub-second response times&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serverless Compatibility&lt;/strong&gt;: Works seamlessly with modern deployment platforms&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result is a powerful, scalable search system that understands context and meaning, making it perfect for applications like documentation search, content discovery, recommendation engines, and knowledge bases.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with Redis 8, Deno, React, and Google GenAI - showcasing the future of intelligent search applications.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>redischallenge</category>
      <category>devchallenge</category>
      <category>database</category>
      <category>ai</category>
    </item>
    <item>
      <title>Cloudflare Pages + Deno Deploy Full-Stack Boilerplate</title>
      <dc:creator>uratmangun</dc:creator>
      <pubDate>Tue, 29 Jul 2025 13:43:59 +0000</pubDate>
      <link>https://dev.to/kirodotdev/cloudflare-pages-deno-deploy-full-stack-boilerplate-kj9</link>
      <guid>https://dev.to/kirodotdev/cloudflare-pages-deno-deploy-full-stack-boilerplate-kj9</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Building modern full-stack applications requires seamless integration between frontend and backend services, especially when targeting edge computing platforms. This project demonstrates a production-ready boilerplate that combines React with Deno serverless functions, optimized for Cloudflare Pages and Deno Deploy.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Cloudflare Pages + Deno Deploy Boilerplate?
&lt;/h2&gt;

&lt;p&gt;This is a comprehensive full-stack application template that bridges the gap between modern frontend development and serverless backend architecture. The project provides a complete development environment with React 19 frontend, Deno-powered serverless functions, and automated deployment pipelines to edge computing platforms.&lt;/p&gt;

&lt;p&gt;The boilerplate eliminates the complexity of setting up cross-platform integrations by providing pre-configured tooling, automated CI/CD workflows, and a seamless development experience that works both locally and in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack &amp;amp; Architecture
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Frontend Technologies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React 19&lt;/strong&gt; - Latest version with modern hooks and concurrent features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; - Full type safety across the entire application&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vite&lt;/strong&gt; - Lightning-fast build tool and development server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; - Utility-first CSS framework for rapid styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;shadcn/ui&lt;/strong&gt; - Beautiful, accessible, and customizable UI components&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Radix UI&lt;/strong&gt; - Headless UI primitives for accessibility&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lucide React&lt;/strong&gt; - Beautiful icon library&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Backend Technologies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deno Runtime&lt;/strong&gt; - Modern JavaScript/TypeScript runtime for serverless functions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Function Router&lt;/strong&gt; - Automatic routing system for multiple serverless functions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CORS Support&lt;/strong&gt; - Pre-configured for cross-origin requests&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Development &amp;amp; Deployment Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;pnpm&lt;/strong&gt; - Efficient package manager with strict dependency resolution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Pages&lt;/strong&gt; - Global CDN with edge computing capabilities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deno Deploy&lt;/strong&gt; - Serverless functions at the edge&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions&lt;/strong&gt; - Automated CI/CD pipeline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Concurrently&lt;/strong&gt; - Run multiple development servers simultaneously&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Development Methodology: Kiro Specifications
&lt;/h2&gt;

&lt;p&gt;This project follows spec-driven development using Kiro specifications, which provide a structured approach to building complex features through three core documents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Requirements&lt;/strong&gt;: User stories and acceptance criteria for each feature&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design&lt;/strong&gt;: Technical architecture and implementation approach
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tasks&lt;/strong&gt;: Discrete, trackable implementation steps&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Specifications Created:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Cloudflare &amp;amp; Deno Integration Specification
&lt;/h4&gt;

&lt;p&gt;This comprehensive specification guided the entire development process:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements Phase&lt;/strong&gt;: Defined four core user stories covering Cloudflare Pages integration, Deno serverless functions, local development environment, and automated deployment pipeline. Each requirement included specific acceptance criteria using WHEN/THEN format to ensure clear, testable outcomes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design Phase&lt;/strong&gt;: Established the technical architecture with a clear component diagram showing the relationship between React frontend, Deno function router, and deployment platforms. The design emphasized performance optimization, security considerations, and scalability patterns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation Phase&lt;/strong&gt;: Broke down development into 11 discrete tasks covering setup, development, deployment, testing, and documentation. All tasks were completed successfully, demonstrating the effectiveness of the spec-driven approach.&lt;/p&gt;

&lt;p&gt;The specification methodology ensured systematic development with clear milestones, comprehensive testing, and thorough documentation throughout the project lifecycle.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Seamless Full-Stack Integration&lt;/strong&gt;: React frontend communicates effortlessly with Deno serverless functions through an intelligent endpoint detection system that works in both development and production environments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Edge-Optimized Deployment&lt;/strong&gt;: Leverages Cloudflare's global CDN for frontend delivery and Deno Deploy's edge computing for serverless functions, ensuring minimal latency worldwide.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Developer Experience Excellence&lt;/strong&gt;: Hot-reload development environment with concurrent React and Deno servers, TypeScript throughout the stack, and modern tooling integration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Production-Ready CI/CD&lt;/strong&gt;: Automated GitHub Actions workflow that deploys frontend to Cloudflare Pages and backend to Deno Deploy with environment variable synchronization.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modern UI Components&lt;/strong&gt;: Built with shadcn/ui and Radix UI primitives, providing accessible, customizable components with dark/light theme support.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/uratmangun" rel="noopener noreferrer"&gt;
        uratmangun
      &lt;/a&gt; / &lt;a href="https://github.com/uratmangun/cloudflare-deno-kiro" rel="noopener noreferrer"&gt;
        cloudflare-deno-kiro
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Cloudflare Pages + Deno Deploy Full-Stack Boilerplate&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A modern, production-ready full-stack application combining React frontend with Deno serverless functions, optimized for Cloudflare Pages and Deno Deploy. Features automated CI/CD, Kiro AI assistant integration, and comprehensive development tooling.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Frontend&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React 19&lt;/strong&gt; - Latest version with modern hooks and concurrent features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; - Full type safety and better development experience&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vite&lt;/strong&gt; - Lightning-fast build tool and development server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; - Utility-first CSS framework for rapid styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;shadcn/ui&lt;/strong&gt; - Beautiful, accessible, and customizable UI components&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dark/Light Theme&lt;/strong&gt; - Built-in theme switching with system preference detection&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Backend&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deno Runtime&lt;/strong&gt; - Modern JavaScript/TypeScript runtime for serverless functions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Function Router&lt;/strong&gt; - Automatic routing system for multiple serverless functions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CORS Support&lt;/strong&gt; - Pre-configured for cross-origin requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hot Reload&lt;/strong&gt; - Local development with automatic server restart&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge Functions&lt;/strong&gt; - Serverless functions deployed at the edge for low latency&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Deployment &amp;amp; Automation&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Pages&lt;/strong&gt; - Global…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/uratmangun/cloudflare-deno-kiro" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Node.js 18+ for React development&lt;/li&gt;
&lt;li&gt;Deno 2.x for serverless functions
&lt;/li&gt;
&lt;li&gt;pnpm package manager (yarn as fallback)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quick Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create from template&lt;/span&gt;
gh repo create my-project &lt;span class="nt"&gt;--template&lt;/span&gt; uratmangun/cloudflare-deno-kiro &lt;span class="nt"&gt;--public&lt;/span&gt; &lt;span class="nt"&gt;--clone&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;my-project

&lt;span class="c"&gt;# Install dependencies&lt;/span&gt;
pnpm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Start development servers&lt;/span&gt;
pnpm dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This starts both the React app at &lt;code&gt;http://localhost:5173&lt;/code&gt; and Deno server at &lt;code&gt;http://localhost:8000&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Available Scripts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pnpm dev&lt;/code&gt; - Start both React and Deno servers concurrently&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pnpm build&lt;/code&gt; - Build React app for production&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;pnpm lint&lt;/code&gt; - Lint code with ESLint&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;deno task dev&lt;/code&gt; - Run Deno server with hot-reload&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This project demonstrates how spec-driven development with Kiro can streamline complex full-stack integrations. The systematic approach of defining requirements, designing architecture, and implementing discrete tasks resulted in a robust, production-ready boilerplate.&lt;/p&gt;

&lt;p&gt;The combination of modern web technologies with edge computing platforms creates a powerful foundation for building scalable applications. The automated deployment pipeline and comprehensive development environment make it easy for teams to adopt and customize for their specific needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Deep Dive
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Project Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── src/                     # React frontend
│   ├── components/ui/       # shadcn/ui components
│   ├── contexts/           # React context providers
│   └── App.tsx             # Main application
├── functions/              # Deno serverless functions
│   └── hello.ts           # Example function
├── main.ts                # Deno function router
├── server.ts              # Local development server
└── .github/workflows/     # CI/CD pipeline
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key Dependencies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: React 19, TypeScript, Vite, Tailwind CSS, shadcn/ui&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Deno runtime with standard library modules&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Development&lt;/strong&gt;: Concurrently, ESLint, TypeScript compiler&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;: GitHub Actions, Cloudflare Pages, Deno Deploy&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Development Workflow
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Local Development&lt;/strong&gt;: Concurrent React and Deno servers with hot-reload&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Function Creation&lt;/strong&gt;: Add new functions in &lt;code&gt;/functions&lt;/code&gt; directory and register in &lt;code&gt;main.ts&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Integration&lt;/strong&gt;: React app automatically detects and calls appropriate endpoints&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;: Push to main branch triggers automated deployment to both platforms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment Sync&lt;/strong&gt;: GitHub Actions automatically configures environment variables&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The spec-driven approach ensured each component was thoroughly planned, implemented, and tested, resulting in a cohesive and maintainable codebase ready for production use.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;🚀 Ready for production&lt;/strong&gt; • &lt;strong&gt;⚡ Lightning fast&lt;/strong&gt; • &lt;strong&gt;🌍 Global deployment&lt;/strong&gt; • &lt;strong&gt;🔧 Fully customizable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Built with modern web technologies for the edge computing era.&lt;/p&gt;

</description>
      <category>kiro</category>
    </item>
  </channel>
</rss>
