<?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: Kyle Y. Parsotan</title>
    <description>The latest articles on DEV Community by Kyle Y. Parsotan (@kyl67899).</description>
    <link>https://dev.to/kyl67899</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%2F1030428%2F3c52281d-a355-4c87-b03e-1982eebc13a5.png</url>
      <title>DEV Community: Kyle Y. Parsotan</title>
      <link>https://dev.to/kyl67899</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kyl67899"/>
    <language>en</language>
    <item>
      <title>🎧 SpinTicket – DJ Ticket Management System</title>
      <dc:creator>Kyle Y. Parsotan</dc:creator>
      <pubDate>Wed, 18 Mar 2026 22:40:37 +0000</pubDate>
      <link>https://dev.to/kyl67899/spinticket-dj-ticket-management-system-2kij</link>
      <guid>https://dev.to/kyl67899/spinticket-dj-ticket-management-system-2kij</guid>
      <description>&lt;p&gt;🌟 Inspiration Managing event tickets as a DJ or event organizer is often chaotic—spreadsheets, screenshots, scattered guest lists, and last‑minute changes. I wanted a system that felt simple, fast, and built for real‑world nightlife workflows, not corporate event software. SpinTicket was born from the idea of giving DJs and promoters a clean, modern, and secure way to manage ticketing without friction.&lt;/p&gt;

&lt;p&gt;🎟️ What It Does SpinTicket is a full-featured ticket management platform designed specifically for DJs, promoters, and small event organizers. It provides:&lt;/p&gt;

&lt;p&gt;Ticket creation &amp;amp; management&lt;/p&gt;

&lt;p&gt;Real‑time notifications using WebSockets&lt;/p&gt;

&lt;p&gt;Secure ticket storage using encrypted data&lt;/p&gt;

&lt;p&gt;Instant email confirmations via Resend&lt;/p&gt;

&lt;p&gt;LocalStorage persistence for fast client-side access&lt;/p&gt;

&lt;p&gt;A clean, responsive UI built with TailwindCSS&lt;/p&gt;

&lt;p&gt;QR code ticket validation (optional future feature)&lt;/p&gt;

&lt;p&gt;It’s built to be fast, intuitive, and reliable during high‑pressure event situations.&lt;/p&gt;

&lt;p&gt;🛠️ How I Built It SpinTicket is built with a modern, scalable stack:&lt;/p&gt;

&lt;p&gt;Next.js – for routing, server actions, and API endpoints&lt;/p&gt;

&lt;p&gt;TailwindCSS – for rapid UI development&lt;/p&gt;

&lt;p&gt;Resend – for sending ticket confirmations and updates&lt;/p&gt;

&lt;p&gt;WebSockets – for real‑time ticket status updates&lt;/p&gt;

&lt;p&gt;LocalStorage – for client-side session persistence&lt;/p&gt;

&lt;p&gt;Custom encryption layer – to protect sensitive ticket data&lt;/p&gt;

&lt;p&gt;The architecture focuses on speed, security, and simplicity, making it ideal for DJs who need tools that work instantly.&lt;/p&gt;

&lt;p&gt;⚠️ Challenges I Ran Into Designing a real-time system that stays lightweight&lt;/p&gt;

&lt;p&gt;Ensuring secure encryption without slowing down performance&lt;/p&gt;

&lt;p&gt;Handling email deliverability and formatting across devices&lt;/p&gt;

&lt;p&gt;Creating a UI that works well in dark club environments&lt;/p&gt;

&lt;p&gt;Managing state between server actions and client-side storage&lt;/p&gt;

&lt;p&gt;Each challenge pushed the system to become more polished and reliable.&lt;/p&gt;

&lt;p&gt;🏆 Accomplishments That I’m Proud Of Building a fully functional real-time ticketing workflow&lt;/p&gt;

&lt;p&gt;Implementing industry-level encryption for ticket data&lt;/p&gt;

&lt;p&gt;Creating a smooth, mobile-first interface&lt;/p&gt;

&lt;p&gt;Integrating instant email notifications that feel professional&lt;/p&gt;

&lt;p&gt;Making a system that DJs can actually use during live events&lt;/p&gt;

&lt;p&gt;It’s a project that solves a real problem in a clean, modern way.&lt;/p&gt;

&lt;p&gt;📚 What I Learned How to architect real-time WebSocket systems&lt;/p&gt;

&lt;p&gt;Best practices for secure data handling and encryption&lt;/p&gt;

&lt;p&gt;How to design UX for fast-paced environments&lt;/p&gt;

&lt;p&gt;Advanced Next.js server actions and API routes&lt;/p&gt;

&lt;p&gt;Email templating and delivery optimization with Resend&lt;/p&gt;

&lt;p&gt;This project pushed my full-stack skills to a new level.&lt;/p&gt;

&lt;p&gt;🚀 What’s Next for SpinTicket QR code scanning for ticket validation&lt;/p&gt;

&lt;p&gt;Multi‑DJ / multi‑event dashboards&lt;/p&gt;

&lt;p&gt;Analytics for event attendance&lt;/p&gt;

&lt;p&gt;Stripe integration for paid ticketing&lt;/p&gt;

&lt;p&gt;Mobile app version&lt;/p&gt;

&lt;p&gt;Role-based access for promoters, staff, and DJs&lt;/p&gt;

&lt;p&gt;SpinTicket is just getting started—there’s a lot of room to grow into a full event‑management ecosystem.&lt;/p&gt;

&lt;p&gt;Demo it today&lt;br&gt;
&lt;a href="https://spinticket.vercel.app" rel="noopener noreferrer"&gt;Spin Ticket&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>python</category>
      <category>security</category>
    </item>
    <item>
      <title>Barbershop Web App</title>
      <dc:creator>Kyle Y. Parsotan</dc:creator>
      <pubDate>Wed, 18 Mar 2026 22:38:56 +0000</pubDate>
      <link>https://dev.to/kyl67899/barbershop-web-app-1nmm</link>
      <guid>https://dev.to/kyl67899/barbershop-web-app-1nmm</guid>
      <description>&lt;p&gt;✂️ Barbershop Web App — Simple, Rebuild‑Friendly Summary This project is a full-featured barbershop website built with Next.js, React, TypeScript, Tailwind CSS, Firebase, and a collection of reusable UI components. It includes booking, service pages, a chatbot, gallery, testimonials, and contact forms.&lt;/p&gt;

&lt;p&gt;Below is a streamlined breakdown of what the project is, how it works, and what you need to recreate it.&lt;/p&gt;

&lt;p&gt;🚀 1. What the Project Is A modern, responsive barbershop website with:&lt;/p&gt;

&lt;p&gt;A homepage featuring hero, services, gallery, testimonials, and booking sections.&lt;/p&gt;

&lt;p&gt;Individual service pages (haircut, beard trim, kids haircut, hair coloring, etc.).&lt;/p&gt;

&lt;p&gt;A dynamic booking system (via JotForm).&lt;/p&gt;

&lt;p&gt;A contact form with validation + email notifications.&lt;/p&gt;

&lt;p&gt;A chatbot powered by AI logic.&lt;/p&gt;

&lt;p&gt;A gallery with tabbed navigation.&lt;/p&gt;

&lt;p&gt;Firebase analytics integration.&lt;/p&gt;

&lt;p&gt;A fully modular component architecture.&lt;/p&gt;

&lt;p&gt;🧱 2. Core Technologies Used Area Tools Frontend Next.js, React, TypeScript Styling Tailwind CSS, PostCSS, Autoprefixer Backend / Services Firebase, Resend (email) Forms JotForm embeds Maps Leaflet / OpenStreetMap Validation Zod Linting ESLint Utilities date-fns, clsx, tailwind-merge 📁 3. Project Structure (Simplified) Code barbershop/ │ app/ → All pages (home, services, booking, contact, gallery) │ components/ → Reusable UI + feature components │ lib/ → Backend logic (emails, validation, chatbot, reviews) │ hooks/ → Custom hooks (toast system) │ public/ → Images │ styles/ → Global CSS + Tailwind configs │ config files → next.config, tailwind.config, tsconfig, etc. 🧩 4. Key Features Explained Simply Homepage Uses components like:&lt;/p&gt;

&lt;p&gt;Hero&lt;/p&gt;

&lt;p&gt;Services preview&lt;/p&gt;

&lt;p&gt;About section&lt;/p&gt;

&lt;p&gt;Gallery preview&lt;/p&gt;

&lt;p&gt;Testimonials&lt;/p&gt;

&lt;p&gt;Booking CTA&lt;/p&gt;

&lt;p&gt;Contact section&lt;/p&gt;

&lt;p&gt;Services System Each service has:&lt;/p&gt;

&lt;p&gt;A dedicated page&lt;/p&gt;

&lt;p&gt;Pricing, duration, description&lt;/p&gt;

&lt;p&gt;Inquiry form (JotForm embed)&lt;/p&gt;

&lt;p&gt;Layout wrapper for consistent design&lt;/p&gt;

&lt;p&gt;Booking System Booking form embedded via iframe&lt;/p&gt;

&lt;p&gt;URL parameters prefill user info&lt;/p&gt;

&lt;p&gt;Email confirmations sent via Resend&lt;/p&gt;

&lt;p&gt;Validation handled in lib/ai-chat.ts and lib/appointment-actions.ts&lt;/p&gt;

&lt;p&gt;Contact System Contact form with validation&lt;/p&gt;

&lt;p&gt;Sends emails to both user + barbershop&lt;/p&gt;

&lt;p&gt;Uses toast notifications for feedback&lt;/p&gt;

&lt;p&gt;Chatbot AI-powered quick responses&lt;/p&gt;

&lt;p&gt;Saves state via cookies&lt;/p&gt;

&lt;p&gt;Can fill JotForm data automatically&lt;/p&gt;

&lt;p&gt;Gallery Tabbed interface&lt;/p&gt;

&lt;p&gt;Organized by categories (haircuts, beard trims, etc.)&lt;/p&gt;

&lt;p&gt;Testimonials Stored in lib/reviews.ts&lt;/p&gt;

&lt;p&gt;Displayed on homepage + dedicated page&lt;/p&gt;

&lt;p&gt;&lt;a href="https://barbershop-jb1k.vercel.app" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Cyber Sentinel Skills Challenge</title>
      <dc:creator>Kyle Y. Parsotan</dc:creator>
      <pubDate>Wed, 04 Mar 2026 21:57:43 +0000</pubDate>
      <link>https://dev.to/kyl67899/cyber-sentinel-skills-challenge-3gek</link>
      <guid>https://dev.to/kyl67899/cyber-sentinel-skills-challenge-3gek</guid>
      <description>&lt;p&gt;Test your skills in CyberSecurity with the Cyber Sentinel Skills. It is open to anyone in CyberSecurity - 18 yrs or older, must be a U.S. Citizen, and be interested in cybersecurity (beginner or advanced level).&lt;/p&gt;

&lt;p&gt;Gain hands-on experience with DoD Cyber Sentinel Challenges and tackle real-world cybersecurity threats.&lt;/p&gt;

&lt;p&gt;Read More about the CyberSecurity Challenges here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.correlation-one.com/blog/how-the-cyber-sentinel-skills-challenge-prepares-you-for-military-grade-security-threats" rel="noopener noreferrer"&gt;https://www.correlation-one.com/blog/how-the-cyber-sentinel-skills-challenge-prepares-you-for-military-grade-security-threats&lt;/a&gt;&lt;/p&gt;

</description>
      <category>websecurity</category>
      <category>ai</category>
      <category>nsa</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Payment Success UI</title>
      <dc:creator>Kyle Y. Parsotan</dc:creator>
      <pubDate>Wed, 04 Mar 2026 19:43:02 +0000</pubDate>
      <link>https://dev.to/kyl67899/payment-success-ui-3cl4</link>
      <guid>https://dev.to/kyl67899/payment-success-ui-3cl4</guid>
      <description>&lt;h1&gt;
  
  
  How to Build a Modern Payment Success UI with Animated SVG &amp;amp; Confetti 🎉
&lt;/h1&gt;

&lt;p&gt;A polished Payment Success UI is more than just a confirmation message — it reassures users, builds trust, and adds a delightful finishing touch to the checkout experience.&lt;/p&gt;

&lt;p&gt;In this tutorial, you’ll learn how to build a modern dark-themed payment confirmation card with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Animated SVG checkmark&lt;/li&gt;
&lt;li&gt;⭕ Drawing circle animation&lt;/li&gt;
&lt;li&gt;✨ Soft glow effect&lt;/li&gt;
&lt;li&gt;🎉 Confetti celebration&lt;/li&gt;
&lt;li&gt;💳 Clean transaction details layout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can follow along step-by-step and copy the provided code snippets.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎨 Final Result Preview
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
![Final Results of the project](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oq37h9prl0sk6aoum14u.png)

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

&lt;/div&gt;



&lt;h1&gt;
  
  
  1️⃣ Project Structure
&lt;/h1&gt;

&lt;p&gt;Create this simple folder structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;payment-success-ui/
├── index.html
├── style.css
├── js.js
└── assets/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  2️⃣ HTML Structure
&lt;/h1&gt;

&lt;p&gt;Here’s the core layout of the card.&lt;/p&gt;

&lt;h3&gt;
  
  
  📄 index.html
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!doctype html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"style.css"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Payment Successful UI&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Confetti Library --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/canvas-confetti@1.6.0/dist/confetti.browser.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;main&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Animated Success Icon --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card__icon"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;svg&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"success-icon"&lt;/span&gt; &lt;span class="na"&gt;viewBox=&lt;/span&gt;&lt;span class="s"&gt;"0 0 100 100"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;circle&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"glow"&lt;/span&gt; &lt;span class="na"&gt;cx=&lt;/span&gt;&lt;span class="s"&gt;"50"&lt;/span&gt; &lt;span class="na"&gt;cy=&lt;/span&gt;&lt;span class="s"&gt;"50"&lt;/span&gt; &lt;span class="na"&gt;r=&lt;/span&gt;&lt;span class="s"&gt;"40"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;circle&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"success-ring"&lt;/span&gt; &lt;span class="na"&gt;cx=&lt;/span&gt;&lt;span class="s"&gt;"50"&lt;/span&gt; &lt;span class="na"&gt;cy=&lt;/span&gt;&lt;span class="s"&gt;"50"&lt;/span&gt; &lt;span class="na"&gt;r=&lt;/span&gt;&lt;span class="s"&gt;"30"&lt;/span&gt; &lt;span class="na"&gt;fill=&lt;/span&gt;&lt;span class="s"&gt;"none"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;path&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"success-check"&lt;/span&gt; &lt;span class="na"&gt;fill=&lt;/span&gt;&lt;span class="s"&gt;"none"&lt;/span&gt; &lt;span class="na"&gt;d=&lt;/span&gt;&lt;span class="s"&gt;"M38 52l8 8 18-18"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/svg&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card__title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Payment Successful!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card__description"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Your payment has been processed successfully.
    &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"payment-box"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;Amount&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;$149.99&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;hr&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;Transaction ID&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"badge"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;TXN-789123456&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;Payment Method&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;**** 4242&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Download Receipt
    &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;/main&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"js.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  3️⃣ Styling the Card
&lt;/h1&gt;

&lt;h3&gt;
  
  
  🎨 style.css
&lt;/h3&gt;

&lt;p&gt;Start with base styling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--card-bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#1f2a3a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--inner-bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#2b3748&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#19e68c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--text-muted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#94a3b8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;linear-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;120deg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;#5f6b7a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;#c7cbd1&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;
  
  
  Card Layout
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;380px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--card-bg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;32px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&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;h1&gt;
  
  
  4️⃣ Animated SVG Success Icon
&lt;/h1&gt;

&lt;p&gt;This is the magic ✨&lt;/p&gt;

&lt;h3&gt;
  
  
  SVG Animation Styles
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.card__icon&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;120px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;120px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.success-icon&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;120px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;120px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.glow&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#19e68c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.15&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;blur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.success-ring&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;stroke&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#19e68c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;stroke-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;stroke-dasharray&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;188&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;stroke-dashoffset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;188&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;draw-ring&lt;/span&gt; &lt;span class="m"&gt;0.8s&lt;/span&gt; &lt;span class="n"&gt;ease-out&lt;/span&gt; &lt;span class="n"&gt;forwards&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.success-check&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;stroke&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#19e68c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;stroke-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;stroke-linecap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;round&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;stroke-linejoin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;round&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;stroke-dasharray&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;stroke-dashoffset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;draw-check&lt;/span&gt; &lt;span class="m"&gt;0.5s&lt;/span&gt; &lt;span class="m"&gt;0.8s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt; &lt;span class="n"&gt;forwards&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@keyframes&lt;/span&gt; &lt;span class="n"&gt;draw-ring&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;to&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;stroke-dashoffset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&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="k"&gt;@keyframes&lt;/span&gt; &lt;span class="n"&gt;draw-check&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;to&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;stroke-dashoffset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📌 Add an Animation Demo Image
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
![ ](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n7esci0ibjt5gl1ai1ae.png)


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

&lt;/div&gt;



&lt;h1&gt;
  
  
  5️⃣ Add Confetti Celebration
&lt;/h1&gt;

&lt;h3&gt;
  
  
  📄 js.js
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DOMContentLoaded&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="o"&gt;=&amp;gt;&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="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;confetti&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;particleCount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;spread&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.6&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="mi"&gt;1300&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 delay ensures confetti appears after the check animation completes.&lt;/p&gt;

&lt;h1&gt;
  
  
  6️⃣ Payment Details Box Styling
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.payment-box&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--inner-bg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;left&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.payment-box&lt;/span&gt; &lt;span class="nc"&gt;.row&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;space-between&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;0&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;h1&gt;
  
  
  7️⃣ Buttons
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.btn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;600&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.btn-primary&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#0b0f2b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&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;h1&gt;
  
  
  💡 Why SVG Instead of Font Icons?
&lt;/h1&gt;

&lt;p&gt;SVG allows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stroke drawing animations&lt;/li&gt;
&lt;li&gt;Precise timing control&lt;/li&gt;
&lt;li&gt;Better scalability&lt;/li&gt;
&lt;li&gt;Cleaner microinteractions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This technique is commonly used in fintech dashboards and checkout flows.&lt;/p&gt;

&lt;h1&gt;
  
  
  🎯 Conclusion
&lt;/h1&gt;

&lt;p&gt;In this project, you learned how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structure a clean payment confirmation card&lt;/li&gt;
&lt;li&gt;Animate an SVG checkmark&lt;/li&gt;
&lt;li&gt;Create a smooth circle drawing effect&lt;/li&gt;
&lt;li&gt;Add celebratory confetti&lt;/li&gt;
&lt;li&gt;Build a modern fintech-style UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small microinteractions like this dramatically improve user experience and perceived product quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  📌 Add Your Live Demo Link Here
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[View Live Demo](https://github.com/Kyl67899/paymentSuccessfulUI)
[Github Repo](https://kyl67899.github.io/paymentSuccessfulUI/)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you enjoyed this tutorial, consider turning it into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A CodePen demo&lt;/li&gt;
&lt;li&gt;A YouTube walkthrough&lt;/li&gt;
&lt;li&gt;A GitHub repo with README&lt;/li&gt;
&lt;li&gt;A UI case study post&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy building 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tutorial</category>
      <category>html</category>
      <category>css</category>
    </item>
    <item>
      <title>Frontend Mentor Challenges</title>
      <dc:creator>Kyle Y. Parsotan</dc:creator>
      <pubDate>Tue, 24 Feb 2026 17:32:20 +0000</pubDate>
      <link>https://dev.to/kyl67899/frontend-mentor-challenges-5953</link>
      <guid>https://dev.to/kyl67899/frontend-mentor-challenges-5953</guid>
      <description>&lt;p&gt;Welcome! 👋&lt;/p&gt;

&lt;p&gt;Thanks for checking out this front-end coding challenge.&lt;/p&gt;

&lt;p&gt;Frontend Mentor challenges help you improve your coding skills by building realistic projects.&lt;/p&gt;

&lt;p&gt;To do this challenge, you need a basic understanding of HTML and CSS.&lt;/p&gt;

&lt;p&gt;Github Repo: &lt;a href="https://github.com/Kyl67899/FrontEnd-Mentor" rel="noopener noreferrer"&gt;https://github.com/Kyl67899/FrontEnd-Mentor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The challenge&lt;/p&gt;

&lt;p&gt;Your challenge is to build out this QR code component and get it looking as close to the design as possible.&lt;/p&gt;

&lt;p&gt;You can use any tools you like to help you complete the challenge. So if you've got something you'd like to practice, feel free to give it a go.&lt;/p&gt;

&lt;p&gt;Want some support on the challenge? Join our community and ask questions in the #help channel.&lt;/p&gt;

&lt;p&gt;Where to find everything&lt;/p&gt;

&lt;p&gt;Your task is to build out the project to the designs inside the /design folder. You will find both a mobile and a desktop version of the design.&lt;/p&gt;

&lt;p&gt;The designs are in JPG static format. Using JPGs will mean that you'll need to use your best judgment for styles such as font-size, padding and margin.&lt;/p&gt;

&lt;p&gt;If you would like the design files (we provide Sketch &amp;amp; Figma versions) to inspect the design in more detail, you can subscribe as a PRO member.&lt;/p&gt;

&lt;p&gt;You will find all the required assets in the /images folder. The assets are already optimized.&lt;/p&gt;

&lt;p&gt;There is also a style-guide.md file containing the information you'll need, such as color palette and fonts.&lt;/p&gt;

&lt;p&gt;Building your project&lt;/p&gt;

&lt;p&gt;Feel free to use any workflow that you feel comfortable with. Below is a suggested process, but do not feel like you need to follow these steps:&lt;/p&gt;

&lt;p&gt;Initialize your project as a public repository on GitHub. Creating a repo will make it easier to share your code with the community if you need help. If you're not sure how to do this, have a read-through of this Try Git resource.&lt;/p&gt;

&lt;p&gt;Configure your repository to publish your code to a web address. This will also be useful if you need some help during a challenge as you can share the URL for your project with your repo URL. There are a number of ways to do this, and we provide some recommendations below.&lt;/p&gt;

&lt;p&gt;Look through the designs to start planning out how you'll tackle the project. This step is crucial to help you think ahead for CSS classes to create reusable styles.&lt;/p&gt;

&lt;p&gt;Before adding any styles, structure your content with HTML. Writing your HTML first can help focus your attention on creating well-structured content.&lt;/p&gt;

&lt;p&gt;Write out the base styles for your project, including general content styles, such as font-family and font-size.&lt;/p&gt;

&lt;p&gt;Start adding styles to the top of the page and work down. Only move on to the next section once you're happy you've completed the area you're working on.&lt;/p&gt;

&lt;p&gt;Each project is designed to practice a recommended tech stack, but you can choose to work with anything.&lt;/p&gt;

&lt;p&gt;Link/Status: If the project is ready in devchallenges.io, you should see a link to the project with designs, and resources to help you get started. Otherwise, In Progress means the project is being designed, empty means it has not been created.&lt;/p&gt;

&lt;p&gt;This path is designed for you to practice HTML, CSS, and basic JavaScript.&lt;/p&gt;

&lt;p&gt;Deploying your project&lt;/p&gt;

&lt;p&gt;As mentioned above, there are many ways to host your project for free. Our recommended hosts are:&lt;/p&gt;

&lt;p&gt;GitHub Pages&lt;/p&gt;

&lt;p&gt;Vercel&lt;br&gt;
Netlify&lt;/p&gt;

&lt;p&gt;You can host your site using one of these solutions or any of our other trusted providers. Read more about our recommended and trusted hosts.&lt;/p&gt;

&lt;p&gt;Create a custom README.md&lt;/p&gt;

&lt;p&gt;We strongly recommend overwriting this README.md with a custom one. We've provided a template inside the README-template.md file in this starter code.&lt;/p&gt;

&lt;p&gt;The template provides a guide for what to add. A custom README will help you explain your project and reflect on your learnings. Please feel free to edit our template as much as you like.&lt;/p&gt;

&lt;p&gt;Once you've added your information to the template, delete this file and rename the README-template.md file to README.md. That will make it show up as your repository's README file.&lt;/p&gt;

&lt;p&gt;Submitting your solution&lt;/p&gt;

&lt;p&gt;Submit your solution on the platform for the rest of the community to see. Follow our "Complete guide to submitting solutions" for tips on how to do this.&lt;/p&gt;

&lt;p&gt;Remember, if you're looking for feedback on your solution, be sure to ask questions when submitting it. The more specific and detailed you are with your questions, the higher the chance you'll get valuable feedback from the community.&lt;/p&gt;

&lt;p&gt;Sharing your solution&lt;/p&gt;

&lt;p&gt;There are multiple places you can share your solution:&lt;/p&gt;

&lt;p&gt;Share your solution page in the #finished-projects channel of the community.&lt;/p&gt;

&lt;p&gt;Share your solution on other social channels like LinkedIn.&lt;/p&gt;

&lt;p&gt;Blog about your experience building your project. Writing about your workflow, technical choices, and talking through your code is a brilliant way to reinforce what you've learned. Great platforms to write on are dev.to, Hashnode, and CodeNewbie.&lt;/p&gt;

&lt;p&gt;We provide templates to help you share your solution once you've submitted it on the platform. Please do edit them and include specific questions when you're looking for feedback.&lt;/p&gt;

&lt;p&gt;The more specific you are with your questions the more likely it is that another member of the community will give you feedback.&lt;/p&gt;

&lt;p&gt;Got feedback for us?&lt;/p&gt;

&lt;p&gt;We love receiving feedback! We're always looking to improve our challenges and our platform. So if you have anything you'd like to mention, please email hi[at]frontendmentor[dot]io.&lt;/p&gt;

&lt;p&gt;This challenge is completely free. Please share it with anyone who will find it useful for practice.&lt;/p&gt;

&lt;p&gt;Have fun building! 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>frontendchallenge</category>
    </item>
    <item>
      <title>🚀 WebDevDaily Challenges – Leveling Up with Real Frontend Projects</title>
      <dc:creator>Kyle Y. Parsotan</dc:creator>
      <pubDate>Tue, 24 Feb 2026 17:26:57 +0000</pubDate>
      <link>https://dev.to/kyl67899/webdevdaily-challenges-leveling-up-with-real-frontend-projects-487m</link>
      <guid>https://dev.to/kyl67899/webdevdaily-challenges-leveling-up-with-real-frontend-projects-487m</guid>
      <description>&lt;h1&gt;
  
  
  🚀 WebDevDaily Challenges – Leveling Up with Real Frontend Projects
&lt;/h1&gt;

&lt;p&gt;If you’re trying to get better at frontend development, the fastest way isn’t watching tutorials.&lt;/p&gt;

&lt;p&gt;It’s building.&lt;/p&gt;

&lt;p&gt;That’s why I started &lt;strong&gt;WebDevDaily Challenges&lt;/strong&gt; — a collection of hands-on UI projects designed to sharpen HTML, CSS, and JavaScript fundamentals through real-world components.&lt;/p&gt;

&lt;p&gt;Today I’m sharing one of the foundational challenges: &lt;strong&gt;The QR Code Component&lt;/strong&gt; — plus a breakdown of my learning path and project portfolio progression.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 The Challenge: QR Code Component
&lt;/h2&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build a responsive QR code component that matches the design as closely as possible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This challenge focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Semantic HTML structure&lt;/li&gt;
&lt;li&gt;CSS layout fundamentals&lt;/li&gt;
&lt;li&gt;Spacing &amp;amp; typography accuracy&lt;/li&gt;
&lt;li&gt;Responsive design (mobile + desktop)&lt;/li&gt;
&lt;li&gt;Visual polish&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're a beginner, this is the perfect starting point to build confidence in layout precision.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 What This Project Teaches
&lt;/h2&gt;

&lt;p&gt;Even a “simple” component teaches critical skills:&lt;/p&gt;

&lt;h3&gt;
  
  
  1️⃣ Planning Before Coding
&lt;/h3&gt;

&lt;p&gt;Before writing CSS, I reviewed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Layout structure&lt;/li&gt;
&lt;li&gt;Font sizing hierarchy&lt;/li&gt;
&lt;li&gt;Spacing rhythm&lt;/li&gt;
&lt;li&gt;Alignment logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thinking first = cleaner code.&lt;/p&gt;




&lt;h3&gt;
  
  
  2️⃣ Writing HTML First
&lt;/h3&gt;

&lt;p&gt;Structuring content before styling helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Focus on semantic elements&lt;/li&gt;
&lt;li&gt;Avoid div soup&lt;/li&gt;
&lt;li&gt;Build accessible markup&lt;/li&gt;
&lt;li&gt;Make CSS easier to manage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;main&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"qr-code.png"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"QR Code"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Improve your front-end skills&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Scan the QR code to visit Frontend Mentor and take your coding skills to the next level&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/main&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3️⃣ Base Styles Matter
&lt;/h3&gt;

&lt;p&gt;Instead of jumping into component styling, I defined:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Font family&lt;/li&gt;
&lt;li&gt;Base font size&lt;/li&gt;
&lt;li&gt;Background color&lt;/li&gt;
&lt;li&gt;Default spacing reset&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That small discipline improves every project.&lt;/p&gt;




&lt;h2&gt;
  
  
  📁 How I Approach Frontend Challenges
&lt;/h2&gt;

&lt;p&gt;Here’s the workflow I recommend:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a public GitHub repository&lt;/li&gt;
&lt;li&gt;Deploy early (GitHub Pages, Vercel, or Netlify)&lt;/li&gt;
&lt;li&gt;Analyze design before coding&lt;/li&gt;
&lt;li&gt;Write semantic HTML&lt;/li&gt;
&lt;li&gt;Add base styles&lt;/li&gt;
&lt;li&gt;Build top-down section by section&lt;/li&gt;
&lt;li&gt;Refactor and clean up CSS&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This builds real-world habits instead of tutorial dependency.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧩 WebDevDaily Project Path
&lt;/h1&gt;

&lt;p&gt;This challenge is part of a structured path to mastering frontend fundamentals.&lt;/p&gt;

&lt;h2&gt;
  
  
  🟢 Beginner Projects
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;Tech&lt;/th&gt;
&lt;th&gt;Live Demo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Eye Follow UI&lt;/td&gt;
&lt;td&gt;HTML, CSS, JS&lt;/td&gt;
&lt;td&gt;&lt;a href="https://kyl67899.github.io/EyeFollowUI" rel="noopener noreferrer"&gt;https://kyl67899.github.io/EyeFollowUI&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Book Profile Page&lt;/td&gt;
&lt;td&gt;HTML, CSS&lt;/td&gt;
&lt;td&gt;&lt;a href="https://kyl67899.github.io/bookProfilePage/" rel="noopener noreferrer"&gt;https://kyl67899.github.io/bookProfilePage/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blog Card&lt;/td&gt;
&lt;td&gt;HTML, CSS&lt;/td&gt;
&lt;td&gt;&lt;a href="https://blog-card-profile.vercel.app/" rel="noopener noreferrer"&gt;https://blog-card-profile.vercel.app/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Portfolio UI&lt;/td&gt;
&lt;td&gt;HTML, CSS&lt;/td&gt;
&lt;td&gt;&lt;a href="https://kyl67899.github.io/portfolioUI-webdev/" rel="noopener noreferrer"&gt;https://kyl67899.github.io/portfolioUI-webdev/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SaaS Landing Page&lt;/td&gt;
&lt;td&gt;HTML, CSS&lt;/td&gt;
&lt;td&gt;&lt;a href="https://saaas-landing-page.vercel.app" rel="noopener noreferrer"&gt;https://saaas-landing-page.vercel.app&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weather App UI&lt;/td&gt;
&lt;td&gt;HTML, CSS&lt;/td&gt;
&lt;td&gt;weather-appui.netlify.app&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These projects focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Layout systems&lt;/li&gt;
&lt;li&gt;Flexbox &amp;amp; Grid&lt;/li&gt;
&lt;li&gt;Responsive design&lt;/li&gt;
&lt;li&gt;Component structuring&lt;/li&gt;
&lt;li&gt;Clean UI replication&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🟡 Intermediate Projects
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;Stack&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stripe Clone Landing Page&lt;/td&gt;
&lt;td&gt;Next.js, React, Tailwind, Framer Motion&lt;/td&gt;
&lt;td&gt;In Progress&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power Pro Electrical&lt;/td&gt;
&lt;td&gt;Next.js, Tailwind, Firebase&lt;/td&gt;
&lt;td&gt;Completed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twitter Clone&lt;/td&gt;
&lt;td&gt;Next.js, Firebase, Tailwind&lt;/td&gt;
&lt;td&gt;Completed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recipe App&lt;/td&gt;
&lt;td&gt;React, API, Tailwind&lt;/td&gt;
&lt;td&gt;Completed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bike Store&lt;/td&gt;
&lt;td&gt;React, Firebase&lt;/td&gt;
&lt;td&gt;Completed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;At this stage, the focus shifts to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;State management&lt;/li&gt;
&lt;li&gt;API integration&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Deployment workflows&lt;/li&gt;
&lt;li&gt;UI libraries&lt;/li&gt;
&lt;li&gt;Animation systems&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🌐 Deployment Options
&lt;/h1&gt;

&lt;p&gt;Every project should be live.&lt;/p&gt;

&lt;p&gt;My go-to platforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Pages&lt;/li&gt;
&lt;li&gt;Vercel&lt;/li&gt;
&lt;li&gt;Netlify&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shipping projects publicly builds confidence and creates a real portfolio.&lt;/p&gt;




&lt;h1&gt;
  
  
  ✍️ Why You Should Blog Your Builds
&lt;/h1&gt;

&lt;p&gt;One of the most underrated growth hacks:&lt;/p&gt;

&lt;p&gt;Write about what you build.&lt;/p&gt;

&lt;p&gt;Blogging your projects helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reinforce what you learned&lt;/li&gt;
&lt;li&gt;Improve technical communication&lt;/li&gt;
&lt;li&gt;Build developer credibility&lt;/li&gt;
&lt;li&gt;Create discoverable content&lt;/li&gt;
&lt;li&gt;Grow your personal brand&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Great platforms to share your journey:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dev.to&lt;/li&gt;
&lt;li&gt;Hashnode&lt;/li&gt;
&lt;li&gt;CodeNewbie&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  💡 Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Frontend development isn’t about memorizing syntax.&lt;/p&gt;

&lt;p&gt;It’s about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thinking in structure&lt;/li&gt;
&lt;li&gt;Understanding layout logic&lt;/li&gt;
&lt;li&gt;Writing clean, maintainable code&lt;/li&gt;
&lt;li&gt;Practicing consistently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The QR Code Component might seem small — but stacking projects like this daily builds real momentum.&lt;/p&gt;

&lt;p&gt;Start simple.&lt;br&gt;
Ship often.&lt;br&gt;
Improve every iteration.&lt;/p&gt;

&lt;p&gt;That’s the WebDevDaily mindset. 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>frontendmentor</category>
      <category>devchallenge</category>
      <category>programming</category>
    </item>
    <item>
      <title>BikeAPI</title>
      <dc:creator>Kyle Y. Parsotan</dc:creator>
      <pubDate>Tue, 24 Feb 2026 16:52:32 +0000</pubDate>
      <link>https://dev.to/kyl67899/bikeapi-1i7o</link>
      <guid>https://dev.to/kyl67899/bikeapi-1i7o</guid>
      <description>&lt;h1&gt;
  
  
  Bike API
&lt;/h1&gt;

&lt;p&gt;A comprehensive, open-source bicycle database featuring real Trek bikes with detailed specifications, pricing, and product information. Perfect for developers building bike-related applications, e-commerce platforms, or cycling projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  📌 Important Notice
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;NOT SELLING BICYCLES&lt;/strong&gt; - This is a developer resource only. Data is based on official Trek bike specifications.&lt;/p&gt;

&lt;h1&gt;
  
  
  Last updated:
&lt;/h1&gt;

&lt;p&gt;Feb. 12, 2026&lt;/p&gt;




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

&lt;h3&gt;
  
  
  For Your Own Project
&lt;/h3&gt;

&lt;p&gt;You can easily integrate this bike data into your project by:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Forking the repository&lt;/strong&gt; and customizing the data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Using the raw JSON data&lt;/strong&gt; directly in your application&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contributing improvements&lt;/strong&gt; back to the project&lt;/li&gt;
&lt;/ol&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;# Clone the repository&lt;/span&gt;
git clone https://github.com/Kyl67899/bike-API.git
&lt;span class="nb"&gt;cd &lt;/span&gt;bike-API

&lt;span class="c"&gt;# The data is available in two formats:&lt;/span&gt;
&lt;span class="c"&gt;# - db.json (JSON database format)&lt;/span&gt;
&lt;span class="c"&gt;# - data/bike.json (JavaScript export format)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📊 Data Structure
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Bike Object Schema
&lt;/h3&gt;

&lt;p&gt;Each bike in the database contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bike Model Name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://image-url.com/bike-image.jpg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Detailed description of the bike specifications and features"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mountain|Road|Gravel|Hybrid|Kids|eBike"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"originalPrice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;9999.99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"salePrice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;7999.99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rating"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4.5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Available Bike Types
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mountain&lt;/strong&gt; - Trail and XC bikes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Road&lt;/strong&gt; - Road racing and endurance bikes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gravel&lt;/strong&gt; - Adventure and mixed-surface bikes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid&lt;/strong&gt; - Commuter and casual riding bikes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kids&lt;/strong&gt; - Bicycles designed for children&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;eBike&lt;/strong&gt; - Electric-assisted bicycles&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💻 Usage Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  JavaScript/Node.js
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;bikes&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="s1"&gt;./data/bike.json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Get all bikes&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bikes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Filter by type&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mountainBikes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bikes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bike&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;bike&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Mountain&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Find a specific bike&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bike&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bikes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bike&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;bike&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Get discounted bikes&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;onSale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bikes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bike&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;bike&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;salePrice&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Using with API Server (JSON Server)
&lt;/h3&gt;

&lt;p&gt;If you have &lt;code&gt;json-server&lt;/code&gt; installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx json-server &lt;span class="nt"&gt;--watch&lt;/span&gt; db.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then access the API at &lt;code&gt;http://localhost:3000/bikes&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  React Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&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="nx"&gt;useEffect&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="s1"&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;import&lt;/span&gt; &lt;span class="nx"&gt;bikes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./db.json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;BikeList&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;bikeList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setBikeList&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="nf"&gt;useEffect&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="nf"&gt;setBikeList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bikes&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="k"&gt;return &lt;/span&gt;&lt;span class="p"&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;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;bikeList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bike&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&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="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;bike&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&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;h3&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;bike&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&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;h3&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;p&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;bike&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;details&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;p&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;span&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;bike&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;salePrice&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;bike&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;originalPrice&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;span&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;span class="p"&gt;))&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&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="nx"&gt;BikeList&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📦 Data Files
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;db.json&lt;/code&gt;&lt;/strong&gt; - Complete bike database in JSON format (88 bikes)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;data/bike.json&lt;/code&gt;&lt;/strong&gt; - JavaScript/ES6 export format&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;bike.json&lt;/code&gt;&lt;/strong&gt; - Raw bike data file&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔧 Customizing the Data
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Adding New Bikes
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;code&gt;db.json&lt;/code&gt; or &lt;code&gt;data/bike.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add a new bike object with the next available ID&lt;/li&gt;
&lt;li&gt;Maintain the same structure and data types&lt;/li&gt;
&lt;li&gt;Test your changes&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Example: Adding a New Bike
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;89&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your Bike Model"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://your-image-url.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bike description and specifications"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mountain"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"originalPrice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1299.99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"salePrice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;999.99&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rating"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4.5&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔗 API Resources
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Postman Collection
&lt;/h3&gt;

&lt;p&gt;Test the API with our Postman collection:&lt;br&gt;
&lt;a href="https://lunar-astronaut-205658.postman.co/workspace/My-Workspace~52dda099-49cc-4845-8494-bd6bad862ffc/api/f6c0087d-c003-44ae-819c-24b0a58bb3db/definition/e5e55f16-3340-4f04-af03-60f6751dc908/file/74b75aa9-73d9-413c-a6c9-daaeefca4b39" rel="noopener noreferrer"&gt;View on Postman&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📋 Current Dataset
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Total Bikes:&lt;/strong&gt; 88&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Categories:&lt;/strong&gt; Mountain, Road, Gravel, Hybrid, Kids, eBike&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latest Update:&lt;/strong&gt; February 2026&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Source:&lt;/strong&gt; Official Trek Bike Store&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🤝 Contributing
&lt;/h2&gt;

&lt;p&gt;We welcome contributions! Here's how you can help:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fork the repository&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a feature branch&lt;/strong&gt; (&lt;code&gt;git checkout -b feature/add-bikes&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add or update bike data&lt;/strong&gt; in &lt;code&gt;db.json&lt;/code&gt; and &lt;code&gt;data/bike.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commit your changes&lt;/strong&gt; (&lt;code&gt;git commit -m 'Add new Trek bikes'&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Push to the branch&lt;/strong&gt; (&lt;code&gt;git push origin feature/add-bikes&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open a Pull Request&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Contribution Guidelines
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ensure all bike data comes from official sources (Trek Bike Store)&lt;/li&gt;
&lt;li&gt;Maintain consistent data structure and formatting&lt;/li&gt;
&lt;li&gt;Include accurate pricing and specifications&lt;/li&gt;
&lt;li&gt;Update both &lt;code&gt;db.json&lt;/code&gt; and &lt;code&gt;data/bike.json&lt;/code&gt; simultaneously&lt;/li&gt;
&lt;li&gt;Add meaningful commit messages&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📄 License
&lt;/h2&gt;

&lt;p&gt;This project is open source and available under the MIT License. See the LICENSE file for details.&lt;/p&gt;




&lt;h2&gt;
  
  
  🐛 Issues &amp;amp; Support
&lt;/h2&gt;

&lt;p&gt;Found a bug or have a suggestion? Please &lt;a href="https://github.com/Kyl67899/bike-API/issues" rel="noopener noreferrer"&gt;open an issue&lt;/a&gt; on GitHub.&lt;/p&gt;




&lt;h2&gt;
  
  
  👨‍💻 Author
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a class="mentioned-user" href="https://dev.to/kyl67899"&gt;@kyl67899&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ Recent Updates
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Added 18 new authentic Trek bike models (IDs 71-88)&lt;/li&gt;
&lt;li&gt;Enhanced documentation for developer integration&lt;/li&gt;
&lt;li&gt;Expanded bike categories to include Kids and expanded eBike selection&lt;/li&gt;
&lt;li&gt;Updated pricing and specifications from official Trek store&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Happy coding! 🚴‍♂️&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>json</category>
      <category>nextjs</category>
      <category>postman</category>
    </item>
    <item>
      <title>🔐 Web Security in 2026: What Every Developer MUST Understand</title>
      <dc:creator>Kyle Y. Parsotan</dc:creator>
      <pubDate>Tue, 24 Feb 2026 16:42:30 +0000</pubDate>
      <link>https://dev.to/kyl67899/web-security-in-2026-what-every-developer-must-understand-3lc</link>
      <guid>https://dev.to/kyl67899/web-security-in-2026-what-every-developer-must-understand-3lc</guid>
      <description>&lt;p&gt;Web security is no longer optional.&lt;/p&gt;

&lt;p&gt;If you build websites, APIs, SaaS products, or even side projects — you are responsible for protecting user data. Attackers aren’t just targeting banks anymore. They target small apps, indie projects, startups, and portfolios too.&lt;/p&gt;

&lt;p&gt;This guide breaks down the most important web security topics every developer should understand — with trusted resources to go deeper.&lt;/p&gt;

&lt;p&gt;🚨 1. The OWASP Top 10 (Start Here First)&lt;/p&gt;

&lt;p&gt;If you only study one thing, study this.&lt;/p&gt;

&lt;p&gt;The OWASP Top 10 lists the most critical web application security risks.&lt;/p&gt;

&lt;p&gt;These include:&lt;/p&gt;

&lt;p&gt;Broken access control&lt;/p&gt;

&lt;p&gt;Cryptographic failures&lt;/p&gt;

&lt;p&gt;Injection attacks&lt;/p&gt;

&lt;p&gt;Insecure design&lt;/p&gt;

&lt;p&gt;Security misconfiguration&lt;/p&gt;

&lt;p&gt;👉 Official OWASP Top 10:&lt;br&gt;
&lt;a href="https://owasp.org/www-project-top-ten/" rel="noopener noreferrer"&gt;https://owasp.org/www-project-top-ten/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the foundation of modern web security knowledge.&lt;/p&gt;

&lt;p&gt;💉 2. SQL Injection (Still a Massive Threat)&lt;/p&gt;

&lt;p&gt;SQL Injection happens when attackers manipulate your database queries through user input.&lt;/p&gt;

&lt;p&gt;Example of vulnerable code:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const query = `SELECT * FROM users WHERE email = '${email}'`;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Attackers can inject malicious SQL and dump your database.&lt;/p&gt;

&lt;p&gt;Prevent it by:&lt;/p&gt;

&lt;p&gt;Using parameterized queries&lt;/p&gt;

&lt;p&gt;Using ORM libraries safely&lt;/p&gt;

&lt;p&gt;Validating input&lt;/p&gt;

&lt;p&gt;👉 OWASP SQL Injection Guide:&lt;br&gt;
&lt;a href="https://owasp.org/www-community/attacks/SQL_Injection" rel="noopener noreferrer"&gt;https://owasp.org/www-community/attacks/SQL_Injection&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🧠 3. Cross-Site Scripting (XSS)&lt;/p&gt;

&lt;p&gt;XSS allows attackers to inject malicious JavaScript into your site.&lt;/p&gt;

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

&lt;p&gt;Stored XSS&lt;/p&gt;

&lt;p&gt;Reflected XSS&lt;/p&gt;

&lt;p&gt;DOM-based XSS&lt;/p&gt;

&lt;p&gt;This can steal cookies, sessions, and user data.&lt;/p&gt;

&lt;p&gt;Prevention:&lt;/p&gt;

&lt;p&gt;Escape user input&lt;/p&gt;

&lt;p&gt;Use Content Security Policy (CSP)&lt;/p&gt;

&lt;p&gt;Avoid dangerouslySetInnerHTML (React)&lt;/p&gt;

&lt;p&gt;Use secure templating engines&lt;/p&gt;

&lt;p&gt;👉 OWASP XSS Guide:&lt;br&gt;
&lt;a href="https://owasp.org/www-community/attacks/xss/" rel="noopener noreferrer"&gt;https://owasp.org/www-community/attacks/xss/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🍪 4. Secure Authentication &amp;amp; Session Management&lt;/p&gt;

&lt;p&gt;Weak authentication is one of the most common breaches.&lt;/p&gt;

&lt;p&gt;Best practices:&lt;/p&gt;

&lt;p&gt;Use HttpOnly cookies&lt;/p&gt;

&lt;p&gt;Use Secure + SameSite flags&lt;/p&gt;

&lt;p&gt;Implement rate limiting&lt;/p&gt;

&lt;p&gt;Enforce strong password policies&lt;/p&gt;

&lt;p&gt;Use MFA where possible&lt;/p&gt;

&lt;p&gt;👉 OWASP Authentication Cheat Sheet:&lt;br&gt;
&lt;a href="https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html" rel="noopener noreferrer"&gt;https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔒 5. HTTPS &amp;amp; TLS (Non-Negotiable)&lt;/p&gt;

&lt;p&gt;If your site isn’t using HTTPS, stop everything and fix that first.&lt;/p&gt;

&lt;p&gt;HTTPS protects:&lt;/p&gt;

&lt;p&gt;Login credentials&lt;/p&gt;

&lt;p&gt;Session tokens&lt;/p&gt;

&lt;p&gt;API traffic&lt;/p&gt;

&lt;p&gt;User data&lt;/p&gt;

&lt;p&gt;Free certificates are available via:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://letsencrypt.org/" rel="noopener noreferrer"&gt;https://letsencrypt.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🛡 6. Content Security Policy (CSP)&lt;/p&gt;

&lt;p&gt;CSP reduces XSS risk by controlling which scripts can run on your site.&lt;/p&gt;

&lt;p&gt;Example header:&lt;/p&gt;

&lt;p&gt;Content-Security-Policy: default-src 'self';&lt;/p&gt;

&lt;p&gt;CSP prevents injected scripts from executing.&lt;/p&gt;

&lt;p&gt;👉 MDN CSP Guide:&lt;br&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP&lt;br&gt;
&lt;/a&gt;&lt;br&gt;
🧪 7. Input Validation &amp;amp; Sanitization&lt;/p&gt;

&lt;p&gt;Never trust user input.&lt;/p&gt;

&lt;p&gt;Validate:&lt;/p&gt;

&lt;p&gt;Form inputs&lt;/p&gt;

&lt;p&gt;Query parameters&lt;/p&gt;

&lt;p&gt;File uploads&lt;/p&gt;

&lt;p&gt;Headers&lt;/p&gt;

&lt;p&gt;Sanitize:&lt;/p&gt;

&lt;p&gt;HTML content&lt;/p&gt;

&lt;p&gt;Markdown&lt;/p&gt;

&lt;p&gt;Rich text&lt;/p&gt;

&lt;p&gt;👉 OWASP Input Validation Cheat Sheet:&lt;br&gt;
&lt;a href="https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html" rel="noopener noreferrer"&gt;https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🏗 8. Security Headers You Should Be Using&lt;/p&gt;

&lt;p&gt;Important headers:&lt;/p&gt;

&lt;p&gt;Content-Security-Policy&lt;/p&gt;

&lt;p&gt;Strict-Transport-Security&lt;/p&gt;

&lt;p&gt;X-Frame-Options&lt;/p&gt;

&lt;p&gt;X-Content-Type-Options&lt;/p&gt;

&lt;p&gt;Referrer-Policy&lt;/p&gt;

&lt;p&gt;Test your site here:&lt;br&gt;
👉 &lt;a href="https://securityheaders.com/" rel="noopener noreferrer"&gt;https://securityheaders.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📦 9. Dependency Security (Supply Chain Attacks)&lt;/p&gt;

&lt;p&gt;Most apps today rely heavily on npm, pip, or other package managers.&lt;/p&gt;

&lt;p&gt;Risk:&lt;/p&gt;

&lt;p&gt;Malicious packages&lt;/p&gt;

&lt;p&gt;Abandoned libraries&lt;/p&gt;

&lt;p&gt;Typosquatting attacks&lt;/p&gt;

&lt;p&gt;Protect yourself:&lt;/p&gt;

&lt;p&gt;Use npm audit&lt;/p&gt;

&lt;p&gt;Use pnpm audit&lt;/p&gt;

&lt;p&gt;Enable Dependabot&lt;/p&gt;

&lt;p&gt;Lock dependency versions&lt;/p&gt;

&lt;p&gt;👉 OWASP Software Supply Chain:&lt;br&gt;
&lt;a href="https://owasp.org/www-project-software-supply-chain-security/" rel="noopener noreferrer"&gt;https://owasp.org/www-project-software-supply-chain-security/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔎 10. Logging &amp;amp; Monitoring&lt;/p&gt;

&lt;p&gt;You can’t protect what you don’t monitor.&lt;/p&gt;

&lt;p&gt;Log:&lt;/p&gt;

&lt;p&gt;Failed login attempts&lt;/p&gt;

&lt;p&gt;Suspicious API activity&lt;/p&gt;

&lt;p&gt;Admin actions&lt;/p&gt;

&lt;p&gt;Rate limit violations&lt;/p&gt;

&lt;p&gt;Use tools like:&lt;/p&gt;

&lt;p&gt;Sentry&lt;/p&gt;

&lt;p&gt;Datadog&lt;/p&gt;

&lt;p&gt;Cloud provider logging&lt;/p&gt;

&lt;p&gt;Early detection = smaller breach impact.&lt;/p&gt;

&lt;p&gt;🔐 Developer Mindset Shift&lt;/p&gt;

&lt;p&gt;Security isn’t a feature.&lt;br&gt;
It’s a layer built into everything.&lt;/p&gt;

&lt;p&gt;When writing code, always ask:&lt;/p&gt;

&lt;p&gt;What happens if someone abuses this?&lt;/p&gt;

&lt;p&gt;What happens if this input is malicious?&lt;/p&gt;

&lt;p&gt;What if someone intercepts this request?&lt;/p&gt;

&lt;p&gt;🧭 Recommended Learning Path&lt;/p&gt;

&lt;p&gt;Read the OWASP Top 10 fully.&lt;/p&gt;

&lt;p&gt;Study XSS &amp;amp; SQL Injection deeply.&lt;/p&gt;

&lt;p&gt;Learn authentication &amp;amp; session security.&lt;/p&gt;

&lt;p&gt;Implement CSP on a test project.&lt;/p&gt;

&lt;p&gt;Add automated dependency scanning.&lt;/p&gt;

&lt;p&gt;Practice using intentionally vulnerable apps (like DVWA).&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;Web security is not just for cybersecurity engineers.&lt;/p&gt;

&lt;p&gt;It’s for:&lt;/p&gt;

&lt;p&gt;Frontend developers&lt;/p&gt;

&lt;p&gt;Backend developers&lt;/p&gt;

&lt;p&gt;DevOps engineers&lt;/p&gt;

&lt;p&gt;Indie hackers&lt;/p&gt;

&lt;p&gt;Startup founders&lt;/p&gt;

&lt;p&gt;If you ship code, you are responsible for protecting users.&lt;/p&gt;

&lt;p&gt;Build fast.&lt;br&gt;
But build secure. 🔐&lt;/p&gt;

</description>
      <category>websecurity</category>
      <category>cybersecurity</category>
      <category>webdev</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Eye-Tracking UI: Designing Gaze-Driven Interfaces That Work</title>
      <dc:creator>Kyle Y. Parsotan</dc:creator>
      <pubDate>Fri, 20 Feb 2026 06:11:54 +0000</pubDate>
      <link>https://dev.to/kyl67899/eye-tracking-ui-designing-gaze-driven-interfaces-that-work-1d35</link>
      <guid>https://dev.to/kyl67899/eye-tracking-ui-designing-gaze-driven-interfaces-that-work-1d35</guid>
      <description>&lt;p&gt;Create an accessible, testable eye-tracking UI page with HTML, CSS, and JavaScript. Start with a simple HTML structure, then progressively layer on CSS for layout and styling and JavaScript for gaze-driven interactions. Below is a concise, step-by-step guide that makes the process easy to follow.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://kyl67899.github.io/EyeFollowUI/" rel="noopener noreferrer"&gt;https://kyl67899.github.io/EyeFollowUI/&lt;/a&gt; | &lt;/p&gt;

&lt;p&gt;Github: &lt;a href="https://github.com/Kyl67899/webDevdailyChallenge" rel="noopener noreferrer"&gt;https://github.com/Kyl67899/webDevdailyChallenge&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What you'll build (short overview)&lt;/p&gt;

&lt;p&gt;A single page with a card-like container and one or more “eyes” (visual elements that move their pupils toward gaze/cursor).&lt;/p&gt;

&lt;p&gt;Gaze-driven interactions: pupils follow the user’s gaze or mouse pointer; dwell detection can trigger actions; graceful fallback when no eye-tracker is available.&lt;/p&gt;

&lt;p&gt;HTML: basic, semantic structure&lt;/p&gt;

&lt;p&gt;Create a minimal skeleton so styling and behavior can be added incrementally.&lt;/p&gt;

&lt;p&gt;Include a container, one or more card elements, and within each card an eye with a pupil:&lt;/p&gt;

&lt;p&gt;container (e.g., .stage)&lt;/p&gt;

&lt;p&gt;card (e.g., .card)&lt;/p&gt;

&lt;p&gt;eye (e.g., .eye)&lt;/p&gt;

&lt;p&gt;pupil (e.g., .pupil)&lt;/p&gt;


&lt;h1&gt;#0062AD&lt;/h1&gt;
&lt;br&gt;
        &lt;p&gt;Cookie Monster&lt;/p&gt;
&lt;br&gt;
      &lt;br&gt;
    &lt;br&gt;
    

&lt;p&gt;Keep markup simple and accessible (aria labels where appropriate).&lt;/p&gt;

&lt;p&gt;CSS: layout and visual design (progressive enhancements)&lt;/p&gt;

&lt;p&gt;Start with layout:&lt;/p&gt;

&lt;p&gt;Center the stage and card, use flexbox or grid for alignment.&lt;/p&gt;

&lt;p&gt;Give the card padding, border-radius, shadow, and a readable background.&lt;/p&gt;

&lt;p&gt;Style the eye:&lt;/p&gt;

&lt;p&gt;Shape the eye as a circle/oval with a white or light background and subtle border.&lt;/p&gt;

&lt;p&gt;Use overflow: hidden to contain the pupil.&lt;/p&gt;

&lt;p&gt;Style the pupil:&lt;/p&gt;

&lt;p&gt;Make it a smaller circle, darker color, centered by default.&lt;/p&gt;

&lt;p&gt;Use transform and transition for smooth movement when the pupil follows gaze/cursor.&lt;/p&gt;

&lt;p&gt;Add responsive rules so the UI works on different screen sizes.&lt;/p&gt;

&lt;p&gt;Use CSS variables for sizes and colors to make adjustments simple.&lt;/p&gt;

&lt;p&gt;:root {&lt;br&gt;
    --eye-color: #000000;&lt;br&gt;
    --card-eye-color: #ffffff;&lt;br&gt;
    --background-color: #2f86f1;&lt;br&gt;
    --font-family: 'Arial, sans-serif';&lt;br&gt;
}&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;{
box-sizing: border-box;
padding: 0;
margin: 0;
}&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;html {&lt;br&gt;
    height: 100%;&lt;br&gt;
    width: 100%;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;body {&lt;br&gt;
    font-family: var(--font-family);&lt;br&gt;
    margin: 0;&lt;br&gt;
    padding: 0;&lt;br&gt;
    /* background-color: var(--background-color); */&lt;br&gt;
    background-color: var(--background-color);&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.cards {&lt;br&gt;
    display: flex;&lt;br&gt;
    justify-content: center;&lt;br&gt;
    align-items: center;&lt;br&gt;
    height: 100vh;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.card {&lt;br&gt;
    background-color: #fff;&lt;br&gt;
    border-radius: 10px;&lt;br&gt;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);&lt;br&gt;
    width: 300px;&lt;br&gt;
    height: 400px;&lt;br&gt;
    padding: 20px;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.blue-area {&lt;br&gt;
    background-color: var(--background-color);&lt;br&gt;
    height: 250px;&lt;br&gt;
    width: 100%;&lt;br&gt;
    margin-bottom: 20px;&lt;br&gt;
    display: flex;&lt;br&gt;
    justify-content: center;&lt;br&gt;
    align-items: center;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.leye,&lt;br&gt;
.reye {&lt;br&gt;
    width: 100px;&lt;br&gt;
    height: 100px;&lt;br&gt;
    background-color: var(--card-eye-color);&lt;br&gt;
    border-radius: 50%;&lt;br&gt;
    margin: 0 10px;&lt;br&gt;
    position: relative;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.pupil {&lt;br&gt;
    width: 50px;&lt;br&gt;
    height: 50px;&lt;br&gt;
    background-color: var(--eye-color);&lt;br&gt;
    border-radius: 50%;&lt;br&gt;
    position: absolute;&lt;br&gt;
    top: 20px;&lt;br&gt;
    left: 20px;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.card h1{&lt;br&gt;
    font-size: 40px;&lt;br&gt;
    margin-bottom: 10px;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;.card p{&lt;br&gt;
    font-size: 18px;&lt;br&gt;
    font-weight: 500;&lt;br&gt;
    color: #000000;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;JavaScript: make it gaze-driven (progressive approach)&lt;/p&gt;

&lt;p&gt;Start with a simple mouse-driven prototype:&lt;/p&gt;

&lt;p&gt;Listen for mousemove on the stage, compute vector from eye center to pointer, clamp pupil movement to the eye’s bounds, update the pupil via CSS transform.&lt;/p&gt;

&lt;p&gt;Use requestAnimationFrame for smooth updates and to avoid layout thrashing.&lt;/p&gt;

&lt;p&gt;Testing and iteration&lt;/p&gt;

&lt;p&gt;Test on different screen sizes and lighting conditions.&lt;/p&gt;

&lt;p&gt;Validate behavior with keyboard and mouse-only navigation.&lt;/p&gt;

&lt;p&gt;Measure robustness: latency tolerance, jitter handling, and false-dwell reduction.&lt;/p&gt;

&lt;p&gt;Log anonymized metrics (if user-consented) to improve thresholds and UX.&lt;/p&gt;

&lt;p&gt;Enhancements and polish&lt;/p&gt;

&lt;p&gt;Add subtle animations for state changes (hover, dwell start/complete).&lt;/p&gt;

&lt;p&gt;Provide configurable sensitivity and dwell time in UI settings.&lt;/p&gt;

&lt;p&gt;Use visual affordances (ripples, outlines) to communicate gaze focus and upcoming actions.&lt;/p&gt;

&lt;p&gt;Consider performance: minimize reflows, use transforms only, and avoid heavy per-frame computation.&lt;/p&gt;

&lt;p&gt;Example structure summary (for quick reference)&lt;/p&gt;

&lt;p&gt;HTML: .cards &amp;gt; .card &amp;gt; .eye &amp;gt; .pupil&lt;/p&gt;

&lt;p&gt;CSS: variables for sizes, transitions for smooth pupil movement, responsive rules&lt;/p&gt;

&lt;p&gt;JS: modular input handler (mouse fallback + gaze adapter)&lt;/p&gt;

&lt;p&gt;Final notes&lt;/p&gt;

&lt;p&gt;Keep interactions simple and predictable—too many autonomous movements can confuse users.&lt;/p&gt;

&lt;p&gt;Prioritize privacy and clear consent when using camera or sensor data.&lt;/p&gt;

&lt;p&gt;Build incrementally: validate UX with mouse first, then swap in gaze data to refine timing and thresholds.&lt;/p&gt;

</description>
      <category>html</category>
      <category>webdev</category>
      <category>webdevdailychallenges</category>
      <category>programming</category>
    </item>
    <item>
      <title>RecipeHub</title>
      <dc:creator>Kyle Y. Parsotan</dc:creator>
      <pubDate>Wed, 03 Dec 2025 00:57:05 +0000</pubDate>
      <link>https://dev.to/kyl67899/recipehub-2hp4</link>
      <guid>https://dev.to/kyl67899/recipehub-2hp4</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/Recipe_Hub.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/Recipe_Hub.png" alt="Project Logo" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  RECIPEHUB
&lt;/h1&gt;

&lt;p&gt;Link: &lt;a href="https://receipehub.dev" rel="noopener noreferrer"&gt;https://receipehub.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Transforming Recipes Into Culinary Masterpieces Effortlessly&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Built with the tools and technologies:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;HTML, CSS, Tailwindcss, Shadnui, JavaScript, localstorage, next, react, resend, RestfulAPI (dummyjson)&lt;/p&gt;






&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
RECIPEHUB

&lt;ul&gt;
&lt;li&gt;Table of Contents&lt;/li&gt;
&lt;li&gt;Overview&lt;/li&gt;
&lt;li&gt;Features&lt;/li&gt;
&lt;li&gt;
Project Structure

&lt;ul&gt;
&lt;li&gt;Project Index&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

Getting Started

&lt;ul&gt;
&lt;li&gt;Prerequisites&lt;/li&gt;
&lt;li&gt;Installation&lt;/li&gt;
&lt;li&gt;Usage&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;




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

&lt;p&gt;&lt;strong&gt;Why RecipeHub?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project simplifies creating engaing culinary communities by providing seamless localstorage integration, consistent UI design, and comprehensive content managment features. &lt;/p&gt;

&lt;p&gt;The core feature includes: &lt;/p&gt;

&lt;p&gt;v3&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧑‍💻 &lt;strong&gt;Firebase SDK integration:&lt;/strong&gt; Real time analytics, authentication, database, storage, enhanced web security.&lt;/li&gt;
&lt;li&gt;🍽️ &lt;strong&gt;Recipe Management:&lt;/strong&gt; Real time detailed recipe pages, sharing, favorites, and search filters to enhance user engagement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email service:&lt;/strong&gt; Approves, decline, pending status for submitted recipes. Recive email when user signs up and login for enhanced security purposes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🛡️ Web Security:&lt;/strong&gt; Multifactor authenticaion: User can recive real time SMS, email confirmation or email code to authenticate their account. JWT and Hashed password and robust auth login and signup. Environment variables via &lt;code&gt;.env&lt;/code&gt; for sensitive data. Firebase security rules (implied). Linting and type safety reduce runtime errors. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Powered:&lt;/strong&gt; Builing a custom AI chatbox (thinking of a name) to enhance, optimze, and letting the user know the status of the submitted recipe. Chatbox helps with looking for recipes based on the user preference using custom Machine learning algorithm or OPENAI SDK.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket:&lt;/strong&gt; Get real time notification using Firebase SDK and Websocket.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Social Media Integration:&lt;/strong&gt; Gain access a integrated social media platform to share, fork, and remix your recipes on recipeHub.&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Admin &amp;amp; User Dashboards:&lt;/strong&gt; Real time Analytics, user management, and content moderation tools for platform oversight.&lt;/li&gt;
&lt;li&gt;⚙️ &lt;strong&gt;Robust Error Handling &amp;amp; Notifications:&lt;/strong&gt; Ensures stability and clear user communication.&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;CI/CD Pipeline:&lt;/strong&gt; Automated build, test, and deployment workflows for continuous delivery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;v2&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧑‍💻 &lt;strong&gt;LocalStorage integration:&lt;/strong&gt; Setup for analytics, authentication, database, storage and ensuring enhanced security.&lt;/li&gt;
&lt;li&gt;🍽️ &lt;strong&gt;Recipe Management:&lt;/strong&gt; Detailed recipe pages, sharing, favorites, and search filters to enhance user engagement.&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Admin &amp;amp; User Dashboards:&lt;/strong&gt; Analytics, user management, and content moderation tools for platform oversight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Social Media Integration (beta):&lt;/strong&gt; Gain access a integrated social media platform to share, fork, and remix your recipes on recipeHub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Powered (beta):&lt;/strong&gt; Builing a custom AI chatbox (thinking of a name) to enhance, optimze, and letting the user know the status of the submitted recipe. Chatbox helps with looking for recipes based on the user preference using custom Machine learning algorithm or OPENAI SDK.&lt;/li&gt;
&lt;li&gt;🛡️ &lt;strong&gt;Security:&lt;/strong&gt; Environment variables via &lt;code&gt;.env&lt;/code&gt; for sensitive data. Firebase security rules (implied). Linting and type safety reduce runtime errors. JWT and Hashed password and robust auth login and signup&lt;/li&gt;
&lt;li&gt;⚙️ &lt;strong&gt;Robust Error Handling &amp;amp; Notifications:&lt;/strong&gt; Ensures stability and clear user communication.&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;CI/CD Pipeline:&lt;/strong&gt; Automated build, test, and deployment workflows for continuous delivery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;v1&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend Mentor Challenges using basic HTML, CSS.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;v1 ReceipHub: IOS and Android App using React Native (Coming Soon)&lt;/p&gt;

&lt;h2&gt;
  
  
  - Dont want to expose secrets
&lt;/h2&gt;

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




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



&lt;pre class="highlight shell"&gt;&lt;code&gt;└── Recipe_App/
    ├── README.md
    ├── app
    │   ├── admin
    │   ├── api
    │   ├── cicd
    │   ├── contact
    │   ├── dashboard
    │   ├── explore
    │   ├── favorites
    │   ├── globals.css
    │   ├── layout.tsx
    │   ├── login
    │   ├── not-found.tsx
    │   ├── page.tsx
    │   ├── recipe
    │   └── signup
    ├── changelog.md
    ├── components
    │   ├── Footer.tsx
    │   ├── admin
    │   ├── ai-assistant
    │   ├── auth
    │   ├── comingsoon.tsx
    │   ├── contact.tsx
    │   ├── dashboard
    │   ├── explore-recipes.tsx
    │   ├── favorite-button.tsx
    │   ├── favorites-list.tsx
    │   ├── header.tsx
    │   ├── hero-section.tsx
    │   ├── recipe-card.tsx
    │   ├── recipe-detail.tsx
    │   ├── recipe-filters.tsx
    │   ├── recipe-grid.tsx
    │   ├── recipe-search.tsx
    │   ├── share-recipe-button.tsx
    │   ├── theme-provider.tsx
    │   └── ui
    ├── components.json
    ├── contexts
    │   ├── admin-context.tsx
    │   ├── auth-context.tsx
    │   ├── favorites-context.tsx
    │   └── user-recipes-context.tsx
    ├── firebase.ts
    ├── lib
    │   ├── email.ts
    │   ├── error-handler.ts
    │   ├── recipe.ts
    │   └── utils.ts
    ├── next.config.mjs
    ├── package-lock.json
    ├── package.json
    ├── postcss.config.mjs
    ├── styles
    │   ├── recipehub.jpeg
    │   └── globals.css
    ├── tailwind.config.css
    ├── tailwind.config.ts
    └── tsconfig.json
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;⬆ Return&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>machinelearning</category>
      <category>ai</category>
      <category>firebase</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Kyle Y. Parsotan</dc:creator>
      <pubDate>Mon, 03 Nov 2025 16:50:35 +0000</pubDate>
      <link>https://dev.to/kyl67899/-1mfa</link>
      <guid>https://dev.to/kyl67899/-1mfa</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/devteam/join-our-latest-frontend-challenge-halloween-edition-55oi" class="crayons-story__hidden-navigation-link"&gt;Join our latest Frontend Challenge: Halloween Edition 🦇&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/devteam"&gt;
            &lt;img alt="The DEV Team logo" 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%2Forganization%2Fprofile_image%2F1%2Fd908a186-5651-4a5a-9f76-15200bc6801f.jpg" class="crayons-logo__image"&gt;
          &lt;/a&gt;

          &lt;a href="/jess" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" alt="jess profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/jess" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jess Lee
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jess Lee
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png"&gt;&lt;/a&gt;
              
              &lt;div id="story-author-preview-content-2927847" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/jess" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jess Lee&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/devteam" class="crayons-story__secondary fw-medium"&gt;The DEV Team&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/devteam/join-our-latest-frontend-challenge-halloween-edition-55oi" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 15 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/devteam/join-our-latest-frontend-challenge-halloween-edition-55oi" id="article-link-2927847"&gt;
          Join our latest Frontend Challenge: Halloween Edition 🦇
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/frontendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;frontendchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/css"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;css&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/devteam/join-our-latest-frontend-challenge-halloween-edition-55oi" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;96&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/devteam/join-our-latest-frontend-challenge-halloween-edition-55oi#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              15&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>NFT Card Frontend Mentor</title>
      <dc:creator>Kyle Y. Parsotan</dc:creator>
      <pubDate>Sun, 02 Nov 2025 20:18:02 +0000</pubDate>
      <link>https://dev.to/kyl67899/nft-card-frontend-mentor-36if</link>
      <guid>https://dev.to/kyl67899/nft-card-frontend-mentor-36if</guid>
      <description>&lt;p&gt;I've just completed a front-end coding challenge from Frontend Mentor! 🎉&lt;/p&gt;

&lt;p&gt;You can see my solution here:&lt;br&gt;
&lt;a href="https://www.frontendmentor.io/solutions/nft-preview-card-Fz5dwN_veB" rel="noopener noreferrer"&gt;https://www.frontendmentor.io/solutions/nft-preview-card-Fz5dwN_veB&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Full code check out the github repo:&lt;br&gt;
&lt;a href="https://github.com/Kyl67899/NFT-previewcard" rel="noopener noreferrer"&gt;https://github.com/Kyl67899/NFT-previewcard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Any suggestions on how I can improve are welcome!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
