<?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: Samuel Ellis Kpeglah </title>
    <description>The latest articles on DEV Community by Samuel Ellis Kpeglah  (@elite_ellis).</description>
    <link>https://dev.to/elite_ellis</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%2F2807988%2F1d6b58a1-2153-4d08-9d8b-ccbea6bde4ab.png</url>
      <title>DEV Community: Samuel Ellis Kpeglah </title>
      <link>https://dev.to/elite_ellis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/elite_ellis"/>
    <language>en</language>
    <item>
      <title>Building an AI chatbot using Next.Js</title>
      <dc:creator>Samuel Ellis Kpeglah </dc:creator>
      <pubDate>Mon, 10 Feb 2025 13:24:01 +0000</pubDate>
      <link>https://dev.to/elite_ellis/building-an-ai-chatbot-using-nextjs-and-groq-api-key-5bib</link>
      <guid>https://dev.to/elite_ellis/building-an-ai-chatbot-using-nextjs-and-groq-api-key-5bib</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;CONTENTS&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Prerequisities&lt;/li&gt;
&lt;li&gt;Project Setup&lt;/li&gt;
&lt;li&gt;Installing Dependencies&lt;/li&gt;
&lt;li&gt;Enviroment Configuration&lt;/li&gt;
&lt;li&gt;Project Structure&lt;/li&gt;
&lt;li&gt;Application Code&lt;/li&gt;
&lt;li&gt;Running &amp;amp; Testing&lt;/li&gt;
&lt;li&gt;Deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a id="intro"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
This tutorial is to help you build a simple but modern ChatBot using Next.js. The chatbot provides an interface where the users can interact with an Ai powered model.&lt;/p&gt;

&lt;p&gt;&lt;a id="point 1"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Prerequisties&lt;/strong&gt;&lt;br&gt;
Before you go straight into building in your IDE, you've got to have;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js installed(v-16.x or higher)&lt;/li&gt;
&lt;li&gt;Code IDE (Vscode recommended or any IDE of your choice)&lt;/li&gt;
&lt;li&gt;API Key (Would be using one from Groq)&lt;/li&gt;
&lt;li&gt;Basics on React and or Javascript&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a id="point 2"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Project Setup&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open terminal(admin) and nagivate to where you want to create your project.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4bd9wqc375q4isvg5s84.png" alt="Image description" width="364" height="43"&gt;
&lt;/li&gt;
&lt;li&gt;Next create your next.js project using &lt;code&gt;npx create-next-app@latest chatbot&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;This prompt will follow up. Use the image below as reference for your prompt.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foozag0nl9dl7krasnx4b.png" alt="Image description" width="752" height="137"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a id="point 3"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Installing Dependency&lt;/strong&gt;&lt;br&gt;
In terminal, type&lt;code&gt;cd chatbot&lt;/code&gt;to navigate to your project directory.&lt;br&gt;
Now install groq sdk dependency using &lt;code&gt;npm install --save groq-sdk&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GROQ SETUP&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://console.groq.com/login" rel="noopener noreferrer"&gt;GroqCloud&lt;/a&gt; and sign in to create an account.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsdm4r1nqi8qk7lj7u0jq.png" alt="Image description" width="800" height="387"&gt;
&lt;/li&gt;
&lt;li&gt;To get an API key you'd need to create one and remember to copy your key. &lt;a href="https://drive.google.com/file/d/1-AWHeEf1n8z_4821oZ67oR-FoDcLeNin/view?usp=drive_link" rel="noopener noreferrer"&gt;Watch how&lt;/a&gt; to generate your key&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a id="point 4"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Environment Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Back in your terminal, create a new file called ".env.local" in your project file.
&lt;code&gt;touch .env.local&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add your API key into the .env.local file.
&lt;code&gt;echo "API_Key=your_copied_api_key" &amp;gt;&amp;gt; .env.local&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Also add your .env.local to .gitignore file in your project file if not added by default.
&lt;code&gt;echo ".env.local" &amp;gt;&amp;gt; .gitignore&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Finally, type &lt;code&gt;code .&lt;/code&gt; and hit enter to open your IDE(code editor).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a id="point 5"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Project Structure&lt;/strong&gt;&lt;br&gt;
Your project structure should look like this:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x3qmr28vq93o2rl8sqn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x3qmr28vq93o2rl8sqn.jpg" alt="Image description" width="800" height="725"&gt;&lt;/a&gt;&lt;br&gt;
NB: "next.config.mjs", "jsconfig.json" and ".eslintrc.json" files are created automatically when you run &lt;code&gt;npx create-next-app&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a id="point 6"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Application Code&lt;/strong&gt;&lt;br&gt;
Here's a preview of what you'll be building.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiaq2mf50inh5n41680h5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiaq2mf50inh5n41680h5.png" alt="Image description" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open "app/layout.js" and edit it like this:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";

const geistSans = Geist({
  variable: "--font-geist-sans",
  subsets: ["latin"],
});

const geistMono = Geist_Mono({
  variable: "--font-geist-mono",
  subsets: ["latin"],
});

export const metadata: Metadata = {
  title: "", //title of the site
  description: "", //description of the site
};

export default function RootLayout({
  children,
}: Readonly&amp;lt;{
  children: React.ReactNode;
}&amp;gt;) {
  return (
    &amp;lt;html lang="en"&amp;gt;
      &amp;lt;body
        className={`${geistSans.variable} ${geistMono.variable} antialiased`}
      &amp;gt;
        {children}
      &amp;lt;/body&amp;gt;
    &amp;lt;/html&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;In "app/global.css", you can modify it and add some styling like this:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@tailwind base;
@tailwind components;
@tailwind utilities;

body {
  @apply bg-gray-100 text-gray-900;
}

::-webkit-scrollbar {
  width: 8px;
}

::-webkit-scrollbar-track {
  background-color: rgba(60, 103, 109, 0.1);
  border-radius: 10px;
}
::-webkit-scrollbar-thumb {
  background-color: rgba(63, 198, 216, 0.2);
  border-radius: 10px;
}

::-webkit-scrollbar-thumb:hover {
  background-color: rgba(60, 108, 114, 0.4);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Lastly open "app/page.js" and write your code like this:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;'use client';

import { useState, useEffect, FormEvent, useRef } from "react";

type Message = {
  id: number;
  sender: "user" | "bot";
  text: string;
};

const ChatPage = () =&amp;gt; {
  const [messages, setMessages] = useState&amp;lt;Message[]&amp;gt;([]);
  const [inputValue, setInputValue] = useState("");

  const messagesEndRef = useRef&amp;lt;HTMLDivElement&amp;gt;(null);
  const [loading, setLoading] = useState(false);

  const scrollToBottom = () =&amp;gt; {
    messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
  };

  useEffect(() =&amp;gt; {
    scrollToBottom();
  }, [messages]);

  const handleSubmit = async (e: FormEvent) =&amp;gt; {
    e.preventDefault();
    if (!inputValue.trim()) return;

    const userMessage: Message = {
      id: Date.now(),
      sender: "user",
      text: inputValue.trim(),
    };

    setMessages((prevMessages) =&amp;gt; [...prevMessages, userMessage]);
    setInputValue("");
    setLoading(true);

    try {
      const response = await fetch("/api/chat", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify({ message: userMessage.text }),
      });

      const data = await response.json();

      if (response.ok) {
        const botMessage: Message = {
          id: Date.now() + 1,
          sender: "bot",
          text: data.message,
        };

        setMessages((prevMessages) =&amp;gt; [...prevMessages, botMessage]);
      } else {
        const errorMessage: Message = {
          id: Date.now() + 1,
          sender: "bot",
          text: data.error || "Processing failed",
        };
        setMessages((prevMessages) =&amp;gt; [...prevMessages, errorMessage]);
      }
    } catch (error) {
      console.error("Error fetching chat", error);
      const errorMessage: Message = {
        id: Date.now() + 1,
        sender: "bot",
        text: "Unexpected error occurred",
      };
      setMessages((prevMessages) =&amp;gt; [...prevMessages, errorMessage]);
    } finally {
      setLoading(false);
    }
  };

  return (
    &amp;lt;div className="flex flex-col h-screen bg-blue-100"&amp;gt;
      {/* Header */}
      &amp;lt;header className="bg-white shadow px-4 py-4"&amp;gt;
        &amp;lt;h1 className="font-semibold text-blue-800 text-2xl"&amp;gt;
          Chat with ElAioT
        &amp;lt;/h1&amp;gt;
      &amp;lt;/header&amp;gt;

      {/* Chat Box */}
      &amp;lt;div className="flex-1 p-4 overflow-y-auto"&amp;gt;
        {messages.map((message) =&amp;gt; (
          &amp;lt;div
            key={message.id}
            className={`flex flex-col ${message.sender === "user" ? "justify-end" : "justify-start"} mb-4`}
          &amp;gt;
            &amp;lt;div
              className={`px-4 py-2 rounded-lg max-w-xl ${message.sender === "user" ? "bg-blue-500 text-white" : "bg-gray-200 text-gray-800"}`}
            &amp;gt;
              {message.text}
            &amp;lt;/div&amp;gt;
          &amp;lt;/div&amp;gt;
        ))}

        {loading &amp;amp;&amp;amp; (
          &amp;lt;div className="flex justify-start mb-4"&amp;gt;
            &amp;lt;div className="flex space-x-1"&amp;gt;
              &amp;lt;span className="block w-2 h-2 bg-gray-400 rounded-full animate-pulse"&amp;gt;&amp;lt;/span&amp;gt;
              &amp;lt;span className="block w-2 h-2 bg-gray-400 rounded-full animate-pulse delay-200"&amp;gt;&amp;lt;/span&amp;gt;
              &amp;lt;span className="block w-2 h-2 bg-gray-400 rounded-full animate-pulse delay-400"&amp;gt;&amp;lt;/span&amp;gt;
            &amp;lt;/div&amp;gt;
          &amp;lt;/div&amp;gt;
        )}

        &amp;lt;div ref={messagesEndRef} /&amp;gt;
      &amp;lt;/div&amp;gt;

      {/* Input Form */}
      &amp;lt;form onSubmit={handleSubmit} className="flex p-4 bg-white shadow"&amp;gt;
        &amp;lt;input
          type="text"
          value={inputValue}
          onChange={(e) =&amp;gt; setInputValue(e.target.value)}
          placeholder="Type your message..."
          className="flex-1 border border-gray-300 rounded-full px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
          disabled={loading}
        /&amp;gt;
        &amp;lt;button
          type="submit"
          className="ml-4 bg-blue-500 text-white p-2 rounded-full hover:bg-blue-600 focus:outline-none disabled:bg-blue-300"
          disabled={loading}
        &amp;gt;
          {/* Send Icon (Paper Plane) */}
          &amp;lt;svg
            xmlns="http://www.w3.org/2000/svg"
            className="h-6 w-6"
            fill="none"
            viewBox="0 0 24 24"
            stroke="currentColor"
          &amp;gt;
            &amp;lt;path
              strokeLinecap="round"
              strokeLinejoin="round"
              strokeWidth={2}
              d="M3 8L7.89 2.632a3 3 0 001.11 0L21 8M5 19h14a2 0 002-2v-7a2 2 0 00-2-2H5a2 2 0 00-2 2v7a2 2 002 2z"
            /&amp;gt;
          &amp;lt;/svg&amp;gt;
        &amp;lt;/button&amp;gt;
      &amp;lt;/form&amp;gt;
    &amp;lt;/div&amp;gt;
  );
};

export default ChatPage;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Now, create "api/chat/route.ts" in "app" and write this:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { NextResponse } from "next/server";
import Groq from "groq-sdk";

const groq = new Groq({ apiKey: process.env.GROQ_API_KEY });

export async function POST(request: Request) {
  try {
    const { message } = await request.json();

    if (!message) {
      return NextResponse.json(
        { error: "Message content is required" },
        { status: 400 }
      );
    }

    const chatCompletion = await groq.chat.completions.create({
      messages: [
        {
          role: "user",
          content: message,
        },
      ],
      model: "llama-3.3-70b-versatile",
    });

    const responseMessage =
      chatCompletion.choices[0]?.message?.content || "I'm sorry, I don't understand that.";

    return NextResponse.json({ message: responseMessage });
  } catch (error) {
    console.error("Error in chat API", error);
    return NextResponse.json(
      { error: "An error occurred while processing your request" },
      { status: 500 }
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a id="point 7"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Running &amp;amp; Testing&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start the development server in your terminal using &lt;code&gt;npm run dev&lt;/code&gt; 
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff1xlksjgk63hskthog0l.jpg" alt="Image description" width="800" height="442"&gt;
&lt;/li&gt;
&lt;li&gt;From the terminal, locate "&lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;", hold CTRL key and click on the link to open your build. (Ref from img in 1). An interface will show as seen in the preview.&lt;/li&gt;
&lt;li&gt;Play around in your build and when satisfied enough, press ` to stop the development server.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a id="conclusion"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Deployment&lt;/strong&gt;&lt;br&gt;
For deployment, I'd be using vercel.&lt;br&gt;
Vercel, a cloud platform which allows developer's host their projects.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To begin, sign in with your GitHub to create an account on vercel.
Follow the prompts, to get you started.&lt;/li&gt;
&lt;li&gt;Import your repository from GitHub through vercel&lt;/li&gt;
&lt;li&gt;Select your chatbot repository&lt;/li&gt;
&lt;li&gt;Scroll down to Environment variables and add your API_Key.
(NB: This step is crucial. It allows vercel to know and use your API as done in your local dev server.)&lt;/li&gt;
&lt;li&gt;Click deploy and wait for vercel to do it thing.&lt;/li&gt;
&lt;li&gt;An interface like this would show:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9hlexamchha6q5y94gt9.png" alt="Image description" width="800" height="389"&gt;
&lt;/li&gt;
&lt;li&gt;To access your deployed work, click on a link like this: "&lt;a href="https://chatbot-pink-five.vercel.app/" rel="noopener noreferrer"&gt;https://chatbot-pink-five.vercel.app/&lt;/a&gt;"&lt;/li&gt;
&lt;li&gt;In case you don't get step 2 to step 5, please &lt;a href="https://drive.google.com/file/d/1-AWHeEf1n8z_4821oZ67oR-FoDcLeNin/view?usp=drive_link" rel="noopener noreferrer"&gt;use this link&lt;/a&gt; to watch a short video on it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Congratulations your first chatbot has been deployed if you're able to get to this point.&lt;/p&gt;

&lt;p&gt;I hope you find this documentation helpful in achieving your goals. Your success in following these guidelines is a testament to your dedication and skills.&lt;br&gt;
If you found this documentation valuable, I encourage you to follow my future work for more insights, tips, and guidance. By doing so, you’ll not only stay updated but also help grow our community of like-minded individuals. Together, we can achieve even greater heights.&lt;br&gt;
Thank you for your trust and collaboration.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Portfolio Site Documentation and Publication using a Hosting site</title>
      <dc:creator>Samuel Ellis Kpeglah </dc:creator>
      <pubDate>Mon, 03 Feb 2025 08:35:13 +0000</pubDate>
      <link>https://dev.to/elite_ellis/portfolio-site-documentation-and-publication-using-a-hosting-site-2c3b</link>
      <guid>https://dev.to/elite_ellis/portfolio-site-documentation-and-publication-using-a-hosting-site-2c3b</guid>
      <description>&lt;p&gt;Basic Portfolio Site Documentation&lt;br&gt;
This is a beginner-friendly walkthrough guide to building and hosting a portfolio website using a template from Template Wagon, editing it in VS Code, and hosting it on Vercel.&lt;br&gt;
No prior programming experience required!&lt;/p&gt;

&lt;p&gt;Step 1: Set Up Your Tools&lt;br&gt;
Download and Install VS Code&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to VS Code and download the editor for your operating system.&lt;/li&gt;
&lt;li&gt;Follow the installation instructions and open the app after installation.&lt;/li&gt;
&lt;li&gt;Install WinRAR (or any zip extractor)&lt;/li&gt;
&lt;li&gt;Download WinRAR from the website.&lt;/li&gt;
&lt;li&gt;Install it to unzip the template later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 2: Download a Template&lt;br&gt;
Visit Template Wagon&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="https://themewagon.com/theme-tag/portfolio-template/" rel="noopener noreferrer"&gt;https://themewagon.com/theme-tag/portfolio-template/&lt;/a&gt;. Or &lt;a href="https://html5up.net/" rel="noopener noreferrer"&gt;https://html5up.net/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Browse and find a free portfolio template you like.
Download the Template&lt;/li&gt;
&lt;li&gt;Click on the “Download” button for the template. It will save as a .zip file on your computer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unzip the Template&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Locate the .zip file in your “Downloads” folder.&lt;/li&gt;
&lt;li&gt;Right-click on it and select “Extract Here” using WinRAR.&lt;/li&gt;
&lt;li&gt;This will create a folder with all the template files.&lt;/li&gt;
&lt;li&gt;Save it either in your documents or your desktop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 3: Edit the Template in VS Code&lt;br&gt;
Open the Folder in VS Code&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open VS Code.&lt;/li&gt;
&lt;li&gt;Click on File &amp;gt; Open Folder, navigate to the unzipped template folder, and select it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understand the Files&lt;br&gt;
Most templates will have these key files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Index.html (the main page of the website).&lt;/li&gt;
&lt;li&gt;About.html(other pages you must edit).&lt;/li&gt;
&lt;li&gt;Img/ (contains images used on the website).
Edit the index.html file first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Edit the Content&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open index.html in VS Code.
Look for sections like, 
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fut25v2v9hw7k2g6pwjgv.jpg" alt="Image description" width="800" height="213"&gt;
&lt;/li&gt;
&lt;li&gt;Change the text, add your name, bio, and any details about you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Edit Styles (Optional)&lt;br&gt;
Open style.css if you want to tweak colors or fonts.&lt;br&gt;
For example, to change the background color, look for something like background-color and edit the value (e.g., background-color: #f5f5f5;).&lt;/p&gt;

&lt;p&gt;Save Changes&lt;br&gt;
Press Ctrl + S (Windows) or Cmd + S (Mac) to save your edits.&lt;/p&gt;

&lt;p&gt;Step 4: Set Up GitHub&lt;br&gt;
Create a GitHub Account&lt;br&gt;
Go to GitHub and sign up for a free account.&lt;br&gt;
Create a New Repository&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once logged in, click on the + in the top right and select “New Repository”.&lt;/li&gt;
&lt;li&gt;Give your repository a name like “my-portfolio” and click Create Repository.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 5: Push Your Code to GitHub&lt;br&gt;
Initialize Git in VS Code&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the terminal in VS Code (Ctrl + `) or go to View &amp;gt; Terminal.&lt;/li&gt;
&lt;li&gt;Run these commands to initialize git:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftfrnf10vikrhntu5waog.jpg" alt="Image description" width="800" height="209"&gt;
Link to Your GitHub Repository&lt;/li&gt;
&lt;li&gt;Copy the repository URL from GitHub (it looks like &lt;a href="https://github.com/your-username/my-portfolio.git" rel="noopener noreferrer"&gt;https://github.com/your-username/my-portfolio.git&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Run the following commands in the terminal:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqdp1epvw4qk9kmvo8qo.jpg" alt="Image description" width="800" height="294"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 6: Host Your Website on Vercel&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a Vercel Account&lt;/li&gt;
&lt;li&gt;Go to Vercel and sign up with your GitHub account.&lt;/li&gt;
&lt;li&gt;Import Your Repository&lt;/li&gt;
&lt;li&gt;Click “New Project” on Vercel.&lt;/li&gt;
&lt;li&gt;Select your portfolio-site repository from GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deploy Your Site&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow the prompts and click Deploy.&lt;/li&gt;
&lt;li&gt;Once deployed, Vercel will give you a live link to your portfolio (e.g., &lt;a href="https://your-portfolio.vercel.app" rel="noopener noreferrer"&gt;https://your-portfolio.vercel.app&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ALL THE BEST!&lt;br&gt;
Tag me in your Linkedin posts. I’d love see your site!&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
