<?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: Devika Harshey</title>
    <description>The latest articles on DEV Community by Devika Harshey (@devikaharshey).</description>
    <link>https://dev.to/devikaharshey</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2798893%2Fee0fd979-9039-419b-ad7e-0d26d31a80fe.jpg</url>
      <title>DEV Community: Devika Harshey</title>
      <link>https://dev.to/devikaharshey</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devikaharshey"/>
    <language>en</language>
    <item>
      <title>Case Study - PyBot (AI Powered Python Learning Companion)</title>
      <dc:creator>Devika Harshey</dc:creator>
      <pubDate>Thu, 17 Sep 2026 19:07:06 +0000</pubDate>
      <link>https://dev.to/devikaharshey/case-study-pybot-ai-powered-python-learning-companion-2fje</link>
      <guid>https://dev.to/devikaharshey/case-study-pybot-ai-powered-python-learning-companion-2fje</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;PyBot is an AI-powered learning companion that I built to help users learn Python, prepare for DSA interviews and improve their resumes through interactive AI-powered conversations.&lt;/p&gt;

&lt;p&gt;PyBot started as a simple CLI-based chatbot for learning Python. As I continued working on it, it evolved into a web application with more features and different ways for users to interact with it.&lt;/p&gt;

&lt;p&gt;The idea was to bring learning, interview preparation, resume analysis and progress tracking together in one platform instead of making users switch between different tools for each task. PyBot supports both text and voice interactions, allowing users to learn, practice and get feedback in a more interactive way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My Role:&lt;/strong&gt; UI/UX Design &amp;amp; Development&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Tech Stack:&lt;/strong&gt; Next.js, Flask, Appwrite, Google Gemini, Vapi&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live App:&lt;/strong&gt; &lt;a href="https://pybot-ecru.vercel.app/" rel="noopener noreferrer"&gt;https://pybot-ecru.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo Video:&lt;/strong&gt; &lt;a href="https://www.youtube.com/watch?v=QFDiq8dHv9g" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=QFDiq8dHv9g&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmbkfwecyld7zxqynel00.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmbkfwecyld7zxqynel00.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;While learning Python and preparing for interviews, there are different things a learner needs to work on. Learning concepts, practising DSA questions, preparing for interviews, improving a resume and keeping track of progress can all require different tools and ways of learning.&lt;/p&gt;

&lt;p&gt;I wanted to bring these parts together in one place with the help of AI. Instead of limiting PyBot to a simple text-based chatbot, I wanted users to be able to interact with it through both text and voice, practice interviews, take quizzes, analyze their resumes and keep track of their progress.&lt;/p&gt;

&lt;p&gt;The main challenge was to design an experience that could bring all these features together without making the platform feel complicated to use.&lt;/p&gt;




&lt;h2&gt;
  
  
  Existing Solutions &amp;amp; Comparison
&lt;/h2&gt;

&lt;p&gt;Before designing PyBot, I looked at existing platforms that already solve different parts of the same problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Codecademy&lt;/strong&gt; focuses on structured programming learning. Its Python courses include lessons, projects, quizzes and AI-assisted learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HackerRank&lt;/strong&gt; focuses more on coding practice and technical interview preparation. It provides coding challenges and AI-powered mock interviews for areas such as algorithms and data structures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jobscan&lt;/strong&gt; focuses on resume analysis. It compares a resume with a job description and provides information about missing keywords, formatting and other areas that can be improved.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Main Focus&lt;/th&gt;
&lt;th&gt;What It Offers&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Codecademy&lt;/td&gt;
&lt;td&gt;Learning&lt;/td&gt;
&lt;td&gt;Python learning, projects, quizzes and AI assistance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HackerRank&lt;/td&gt;
&lt;td&gt;Coding &amp;amp; Interviews&lt;/td&gt;
&lt;td&gt;Coding practice and AI-powered technical mock interviews&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jobscan&lt;/td&gt;
&lt;td&gt;Resume Improvement&lt;/td&gt;
&lt;td&gt;Resume scanning, keyword matching and ATS-related feedback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PyBot&lt;/td&gt;
&lt;td&gt;Learning + Interview + Resume&lt;/td&gt;
&lt;td&gt;Python learning through chat/voice, DSA interview practice, quizzes, resume analysis and progress tracking&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Looking at these solutions helped me define what I wanted PyBot to do. Instead of designing it around only one of these areas, I wanted to combine Python learning, interview preparation, resume analysis and progress tracking in the same product.&lt;/p&gt;

&lt;p&gt;This also meant that the main design challenge was not just creating individual screens. I had to think about how all these features would fit together and how a user would move between them without getting confused.&lt;/p&gt;




&lt;h2&gt;
  
  
  Designing The Experience
&lt;/h2&gt;

&lt;p&gt;Once I had the main features planned, I started thinking about how users would actually navigate through PyBot.&lt;/p&gt;

&lt;p&gt;The main parts I wanted to bring together were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learning Python through AI conversations&lt;/li&gt;
&lt;li&gt;Practising DSA and technical interviews&lt;/li&gt;
&lt;li&gt;Interacting through text or voice&lt;/li&gt;
&lt;li&gt;Taking quizzes&lt;/li&gt;
&lt;li&gt;Analysing resumes&lt;/li&gt;
&lt;li&gt;Tracking progress through a personalized dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I planned the page structure around these different activities so that each feature had its own place while still feeling like part of the same product.&lt;/p&gt;

&lt;p&gt;The conversational experience was an important part of PyBot. Since users could interact through both text and voice, I designed the flow around starting a conversation, choosing the interaction mode and receiving AI-generated responses.&lt;/p&gt;

&lt;p&gt;I also wanted the dashboard to give users a quick view of their activity and progress instead of making them go through different sections to understand how they were doing.&lt;/p&gt;

&lt;p&gt;As more features were added, I kept updating the structure and UI. The project went through several iterations, including the addition of the personalized dashboard, quizzes, resume analyzer, verification flow and different UI fixes.&lt;/p&gt;

&lt;p&gt;The goal throughout these changes was to make the different parts of PyBot easy to understand and use without making the interface unnecessarily complicated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuwjd5mj8yq5ovpwh322q.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuwjd5mj8yq5ovpwh322q.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  UI &amp;amp; Iterations
&lt;/h2&gt;

&lt;p&gt;Once the main flow was decided, I started building and refining the interface. Since PyBot had multiple features, I wanted the UI to stay simple while still making each feature easy to find.&lt;/p&gt;

&lt;p&gt;I started with the &lt;strong&gt;main chat interface&lt;/strong&gt; and then added the &lt;strong&gt;voice interaction, personalized dashboard, quiz and progress section, and resume analyzer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As I worked on the project, I made several UI changes based on how the different features were coming together. I also added smaller interactions such as confirmation modals, download options and verification-related flows.&lt;/p&gt;

&lt;p&gt;One thing I focused on was keeping the text and voice experiences connected. Users could switch between the two modes without having to leave the main interaction area.&lt;/p&gt;

&lt;p&gt;The dashboard was also updated to bring the user's DSA questions, resources and analysis into one place, while the quiz section made progress visible through the quiz results.&lt;/p&gt;

&lt;p&gt;The interface went through multiple small fixes and iterations rather than being designed perfectly in one go. This helped me improve the screens as new features were added to PyBot.&lt;/p&gt;




&lt;h2&gt;
  
  
  From Design to Product
&lt;/h2&gt;

&lt;p&gt;Once the UI structure was in place, I moved from designing the screens to connecting them with the actual functionality.&lt;/p&gt;

&lt;p&gt;I built the frontend using &lt;strong&gt;Next.js&lt;/strong&gt; and connected it with a &lt;strong&gt;Flask&lt;/strong&gt; backend and &lt;strong&gt;Appwrite&lt;/strong&gt; for authentication and data storage. &lt;strong&gt;Google Gemini&lt;/strong&gt; handled the text-based AI interactions, while &lt;strong&gt;Vapi&lt;/strong&gt; was used for the voice-based interview experience.&lt;/p&gt;

&lt;p&gt;The main challenge here was making sure the different parts of the interface actually worked together. The chat needed to communicate with the AI, the voice interaction needed to handle the conversation, and features like quizzes, resume analysis and the dashboard needed to work with the user's data.&lt;/p&gt;

&lt;p&gt;I worked on these features incrementally, adding and refining them as the project developed. This included authentication and email verification, the personalized dashboard, quiz and progress tracking, resume analysis, and the different chat interactions.&lt;/p&gt;

&lt;p&gt;This was where the initial UI decisions had to work with the actual product functionality, rather than just looking good as individual screens.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5jon06v2ylmlxqtwc379.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5jon06v2ylmlxqtwc379.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Outcome &amp;amp; Learnings
&lt;/h2&gt;

&lt;p&gt;Building PyBot helped me understand that designing a product with multiple AI-powered features is not just about making individual screens look good. The different parts of the product need to work together and still be easy to understand.&lt;/p&gt;

&lt;p&gt;One of the biggest things I learned was how important it is to keep refining the UI as the product grows. Features like the dashboard, quiz, resume analyzer and voice interaction were added over time, so the interface also had to evolve with them.&lt;/p&gt;

&lt;p&gt;I also learned more about designing around AI interactions. Text and voice interactions behave differently, so the interface needs to make it clear what the user can do and what kind of response they can expect.&lt;/p&gt;

&lt;p&gt;Working on both the design and development side also helped me understand how design decisions translate into actual product functionality.&lt;/p&gt;

&lt;p&gt;PyBot started as a simple CLI-based chatbot and gradually evolved into the product it is today. Seeing that progression helped me understand that a product can keep growing and improving through continuous iterations.&lt;/p&gt;

&lt;p&gt;Overall, PyBot gave me the opportunity to work on the complete process i.e. from planning the user experience and designing the interface to building and connecting the different features into a working product.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Thanks for reading!😊🤍&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>python</category>
    </item>
    <item>
      <title>Case Study - Appwrite AI Duplicates Detector (AADD)</title>
      <dc:creator>Devika Harshey</dc:creator>
      <pubDate>Wed, 16 Sep 2026 09:30:37 +0000</pubDate>
      <link>https://dev.to/devikaharshey/case-study-appwrite-ai-duplicates-detector-aadd-eof</link>
      <guid>https://dev.to/devikaharshey/case-study-appwrite-ai-duplicates-detector-aadd-eof</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Managing data across Appwrite projects can become difficult when duplicate files and documents take up storage and make data harder to manage.&lt;/p&gt;

&lt;p&gt;This is why I built &lt;strong&gt;Appwrite AI Duplicates Detector (AADD)&lt;/strong&gt;, a full-stack web application that detects, visualizes and manages duplicates across Appwrite databases and storage using AI-powered algorithms and perceptual hashing.&lt;/p&gt;

&lt;p&gt;The goal was to make the entire process simple, from connecting an Appwrite project and scanning data to understanding results and managing duplicates through filtering, sorting and bulk actions.&lt;/p&gt;

&lt;p&gt;I also introduced &lt;strong&gt;AI Garden&lt;/strong&gt;, a gamified data-health system that lets users track their cleaning progress through a dynamic garden and interact with an AI Gardener.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My Role:&lt;/strong&gt; UI/UX Design, Frontend Development, Backend Development&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Tech Stack:&lt;/strong&gt; Next.js, React, TypeScript, Tailwind CSS, shadcn/ui, Framer Motion, Flask, Appwrite, Google Gemini API&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live App:&lt;/strong&gt; &lt;a href="https://appwrite-ai-duplicates-detector-aadd.appwrite.network/" rel="noopener noreferrer"&gt;https://appwrite-ai-duplicates-detector-aadd.appwrite.network/&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;Managing duplicates manually across Appwrite projects can be time-consuming, especially when data is spread across multiple databases and storage buckets.&lt;/p&gt;

&lt;p&gt;Different types of files also require different ways of identifying duplicates. Simply checking file names or exact matches is not enough to detect files that may have been renamed, compressed or slightly modified.&lt;/p&gt;

&lt;p&gt;AADD was built to simplify this process by bringing duplicate detection, result visualization and duplicate management into one place.&lt;/p&gt;




&lt;h2&gt;
  
  
  Existing Solutions &amp;amp; Gap
&lt;/h2&gt;

&lt;p&gt;Before building AADD, I looked at the problem from two sides.&lt;/p&gt;

&lt;p&gt;Appwrite provides the tools to manage databases, collections, documents and storage, including querying, indexing and file management. However, duplicate detection itself is not presented as a dedicated workflow within these core features.&lt;/p&gt;

&lt;p&gt;There are also dedicated duplicate-file tools such as dupeGuru, Duplicate Cleaner, AllDup and Czkawka. These focus mainly on finding duplicate files across local storage using methods such as hashing, content comparison and similar-image detection.&lt;/p&gt;

&lt;p&gt;The gap I wanted to explore was bringing this idea specifically to &lt;strong&gt;Appwrite projects&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;AADD combines duplicate detection for both &lt;strong&gt;Appwrite Storage and Databases&lt;/strong&gt; with similarity-based analysis, visual results, filtering, bulk management and direct cleanup of detected duplicates.&lt;/p&gt;

&lt;p&gt;This became the foundation for the product I designed and built.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fib0r9h6x1sydv2z53k7w.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fib0r9h6x1sydv2z53k7w.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  My Approach
&lt;/h2&gt;

&lt;p&gt;Before starting the development, I planned the user flows and page architecture to understand how the different parts of AADD would fit together.&lt;/p&gt;

&lt;p&gt;The main focus was to keep the duplicate detection process simple for the user, while still providing enough information to understand and manage the results.&lt;/p&gt;

&lt;p&gt;I structured the experience around three main stages:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect:&lt;/strong&gt; Connect an Appwrite project and choose what needs to be scanned.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Detect:&lt;/strong&gt; Run the scan and present the detected duplicates with relevant information such as similarity scores and visualizations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manage:&lt;/strong&gt; Review, filter and sort the results, then select and manage duplicates through bulk actions.&lt;/p&gt;

&lt;p&gt;Alongside this core workflow, I also designed supporting experiences such as &lt;strong&gt;scheduled scans, activity tracking, profile management and the AI Garden&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqvkmj8asdn2nj4jwvdrc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqvkmj8asdn2nj4jwvdrc.png" alt=" " width="800" height="882"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Information Architecture
&lt;/h2&gt;

&lt;p&gt;AADD is structured around managing connected Appwrite projects, scanning their databases and storage buckets, viewing duplicate results and managing detected duplicates.&lt;/p&gt;

&lt;p&gt;The main sections of the application include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connected Projects&lt;/li&gt;
&lt;li&gt;Quick Stats&lt;/li&gt;
&lt;li&gt;Automated Scan Reminders&lt;/li&gt;
&lt;li&gt;Recent Activities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Project Overview&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;Database&lt;/li&gt;
&lt;li&gt;Collections&lt;/li&gt;
&lt;li&gt;Scan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Scan Results&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detected Duplicates&lt;/li&gt;
&lt;li&gt;Similarity Scores&lt;/li&gt;
&lt;li&gt;Search&lt;/li&gt;
&lt;li&gt;Filtering&lt;/li&gt;
&lt;li&gt;Sorting&lt;/li&gt;
&lt;li&gt;Visualizations&lt;/li&gt;
&lt;li&gt;View in Console / Open in Appwrite&lt;/li&gt;
&lt;li&gt;Bulk Operations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AI Garden&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data Health Visualization&lt;/li&gt;
&lt;li&gt;Cleaning Statistics&lt;/li&gt;
&lt;li&gt;AI Gardener&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Profile Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Update Name and Email&lt;/li&gt;
&lt;li&gt;Profile Picture&lt;/li&gt;
&lt;li&gt;Delete Account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Activity Log&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project Connections&lt;/li&gt;
&lt;li&gt;Scan Operations&lt;/li&gt;
&lt;li&gt;Deletion Activities&lt;/li&gt;
&lt;li&gt;Configuration Changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This structure brings project management, duplicate detection, visualization and cleanup into a single application.&lt;/p&gt;




&lt;h2&gt;
  
  
  Connecting an Appwrite Project
&lt;/h2&gt;

&lt;p&gt;To start using AADD, users first need to connect the Appwrite project they want to scan.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Connect Project&lt;/strong&gt; page requires three details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project ID&lt;/li&gt;
&lt;li&gt;API Endpoint&lt;/li&gt;
&lt;li&gt;API Key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once connected, the project becomes available on the dashboard, where users can view their connected projects and initiate scans.&lt;/p&gt;

&lt;p&gt;For security, the API keys provided by users are encrypted using &lt;em&gt;Fernet symmetric encryption&lt;/em&gt; before being stored in the AADD Appwrite Database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feq7it5d08ho8dt02o2kl.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feq7it5d08ho8dt02o2kl.png" alt=" " width="799" height="386"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Scanning &amp;amp; Selecting Data
&lt;/h2&gt;

&lt;p&gt;After connecting an Appwrite project, users can choose what they want AADD to scan.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;Storage&lt;/strong&gt;, users can scan all available buckets.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;Database&lt;/strong&gt;, users can enter a Database ID, load its collections, and choose whether to scan specific collections or the entire database.&lt;/p&gt;

&lt;p&gt;Once the scan target is selected, clicking the &lt;strong&gt;Scan&lt;/strong&gt; button automatically triggers the scan and takes the user to the results page.&lt;/p&gt;

&lt;p&gt;A loading state is displayed while the scan is in progress, giving users feedback while the system processes their data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdg9bjyobsk5bp6tnhuj5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdg9bjyobsk5bp6tnhuj5.jpg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Viewing &amp;amp; Understanding Results
&lt;/h2&gt;

&lt;p&gt;Once the scan is complete, AADD displays the detected duplicates along with their similarity scores.&lt;/p&gt;

&lt;p&gt;The results page also provides different ways to explore the detected duplicates. Users can search for specific results, filter and sort them based on similarity, date or file size and view the duplicate distribution through different visualizations.&lt;/p&gt;

&lt;p&gt;Each result also provides options to view the corresponding file or document in the Appwrite Console.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkdv7lm5ly4gqxiolziay.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkdv7lm5ly4gqxiolziay.png" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Managing Duplicates
&lt;/h2&gt;

&lt;p&gt;After reviewing the scan results, users can select individual duplicates or use &lt;strong&gt;Select All&lt;/strong&gt; and &lt;strong&gt;Deselect All&lt;/strong&gt; for bulk operations.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Delete Selected&lt;/strong&gt; option provides two ways to manage the selected duplicates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Delete from source:&lt;/strong&gt; Removes the actual files or documents from the connected Appwrite project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remove from list:&lt;/strong&gt; Removes the duplicates only from AADD's tracking without deleting them from the source project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Users can then confirm the selected action before it is carried out.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F20au8aksr74hx88r0k64.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F20au8aksr74hx88r0k64.png" alt=" " width="800" height="841"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdt0gq409zsjn8nxngjjo.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdt0gq409zsjn8nxngjjo.png" alt=" " width="502" height="205"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Garden &amp;amp; Gamification
&lt;/h2&gt;

&lt;p&gt;To make the data-cleaning experience more engaging, AADD includes the &lt;strong&gt;AI Garden&lt;/strong&gt;, a gamified data-health system.&lt;/p&gt;

&lt;p&gt;The page provides a visual representation of data health through dynamic plant visualizations and tracks cleaning progress through statistics.&lt;/p&gt;

&lt;p&gt;It also includes an &lt;strong&gt;AI Gardener&lt;/strong&gt;, powered by Google Gemini, which provides tips and encouragement based on the user's progress.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fngu0glw30vbt27aw2lli.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fngu0glw30vbt27aw2lli.png" alt=" " width="800" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F26nw2u7i03vz1nzm23b0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F26nw2u7i03vz1nzm23b0.png" alt=" " width="799" height="330"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  From Design to Development
&lt;/h2&gt;

&lt;p&gt;After planning the user flows and page architecture, I moved into development and translated the planned experience into the actual product.&lt;/p&gt;

&lt;p&gt;The frontend was built using &lt;strong&gt;Next.js, React, TypeScript, Tailwind CSS and shadcn/ui&lt;/strong&gt;, with Framer Motion used for animations and interactions.&lt;/p&gt;

&lt;p&gt;The backend was developed using &lt;strong&gt;Flask&lt;/strong&gt;, handling API requests, Appwrite operations and the duplicate detection logic.&lt;/p&gt;

&lt;p&gt;The final system connects the frontend, backend, Appwrite services and AI/ML processing into one workflow, allowing users to connect their projects, scan data, view results and manage duplicates from a single application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9eqd1istzv8u23vlhnm7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9eqd1istzv8u23vlhnm7.png" alt=" " width="800" height="247"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Outcome &amp;amp; Learnings
&lt;/h2&gt;

&lt;p&gt;AADD brought duplicate detection, visualization and management into a single application for Appwrite projects.&lt;/p&gt;

&lt;p&gt;The system achieved &lt;strong&gt;85-95% similarity accuracy&lt;/strong&gt; and reduced the manual effort required to review duplicates by approximately &lt;strong&gt;70%&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The project was also selected as a &lt;strong&gt;Top 5 Winner in Appwrite X Hacktoberfest 2025&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Building AADD helped me understand how important it is to plan the user flows and page structure before development, especially when a product has multiple features and workflows.&lt;/p&gt;

&lt;p&gt;It also gave me hands-on experience in taking an idea from rough sketches to a working full-stack product while continuously refining the interface and functionality during development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr7mxow81qm3xc0xomgsl.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr7mxow81qm3xc0xomgsl.png" alt=" " width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Thanks for reading!😊🤍&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>python</category>
      <category>programming</category>
    </item>
    <item>
      <title>Building My Portfolio: Development Journey, Challenges &amp; Lessons Learned</title>
      <dc:creator>Devika Harshey</dc:creator>
      <pubDate>Sat, 25 Jul 2026 16:20:56 +0000</pubDate>
      <link>https://dev.to/devikaharshey/my-portfolio-i3</link>
      <guid>https://dev.to/devikaharshey/my-portfolio-i3</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frgo61fheq10iwpztg64q.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frgo61fheq10iwpztg64q.png" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This portfolio is a creative, interactive showcase of my work as a developer, designer and writer. It brings together my projects, technical skills, certificates, achievements, published books, designs and a glimpse into my learning journey within a single platform.&lt;/p&gt;

&lt;p&gt;I wanted to build something that felt more personal than a traditional portfolio, so I experimented with 3D elements, smooth animations, interactive components and a black, white and purple visual style to create an engaging browsing experience.&lt;/p&gt;

&lt;p&gt;I've been working on this portfolio for over a year, and since the beginning, I've continued refining it through UI improvements, performance optimizations, new features and regular content updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Project Details
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Role&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Designer &amp;amp; Developer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Personal Portfolio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Timeline&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1+ year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Next.js, React, TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Styling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tailwind CSS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Animation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GSAP, Framer Motion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;3D&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Three.js, React Three Fiber, Drei&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Demo Video:&lt;/strong&gt; &lt;a href="https://youtu.be/0SHrim7H4hI" rel="noopener noreferrer"&gt;https://youtu.be/0SHrim7H4hI&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Goal
&lt;/h2&gt;

&lt;p&gt;The goal of this project was to create a portfolio that showcases my work while also reflecting my personality through an engaging and intuitive user experience.&lt;/p&gt;

&lt;p&gt;I wanted the portfolio to feel more personal and interactive than a traditional portfolio while still making it easy for visitors to explore my work, skills, achievements and other content.&lt;/p&gt;

&lt;p&gt;Since the portfolio brings together different types of content, I also wanted the experience to feel visually consistent, responsive and easy to navigate across different devices.&lt;/p&gt;

&lt;p&gt;Rather than treating the portfolio as a one-time project, I wanted to keep improving it over time by experimenting with new ideas, adding new features and refining the existing experience.&lt;/p&gt;




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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Technologies&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Next.js, React, TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Styling&lt;/td&gt;
&lt;td&gt;Tailwind CSS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Animation&lt;/td&gt;
&lt;td&gt;GSAP, Framer Motion&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3D&lt;/td&gt;
&lt;td&gt;Three.js, React Three Fiber, Drei&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Version Control&lt;/td&gt;
&lt;td&gt;Git, GitHub&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Design Direction
&lt;/h2&gt;

&lt;p&gt;I wanted the visual style of the portfolio to feel bold, interactive and personal rather than following a traditional portfolio layout.&lt;/p&gt;

&lt;p&gt;I built the visual identity around a &lt;strong&gt;black, white and purple color palette&lt;/strong&gt;, using contrast to create a strong visual hierarchy across different sections.&lt;/p&gt;

&lt;p&gt;The interface combines &lt;strong&gt;3D elements, animations, glowing details, grid backgrounds and interactive components&lt;/strong&gt; to make the experience more engaging while keeping the content easy to explore.&lt;/p&gt;

&lt;p&gt;I also focused on keeping the visual style consistent across the different sections, while making sure the layouts remain responsive across screen sizes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Visual Direction
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Black&lt;/strong&gt; — Main background and overall base of the interface&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;White&lt;/strong&gt; — Headings, text and important content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Purple&lt;/strong&gt; — Accents, text, highlights and interactive elements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3D Elements&lt;/strong&gt; — Used to add depth and personality&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Animations&lt;/strong&gt; — Used throughout the interface to make interactions feel more dynamic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsive Layouts&lt;/strong&gt; — Designed to work across different screen sizes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was not to make every section look the same, but to make the different parts of the portfolio feel like they belong to the same experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fodkxdrfqscq6hu9xulqa.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fodkxdrfqscq6hu9xulqa.png" alt=" " width="800" height="843"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm9cbrhsy51bccr5blkyk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm9cbrhsy51bccr5blkyk.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo1ccrtcc51483ww8odt0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo1ccrtcc51483ww8odt0.png" alt=" " width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxs8i1a21xuwt18glfjsk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxs8i1a21xuwt18glfjsk.png" alt=" " width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Structuring The Experience
&lt;/h2&gt;

&lt;p&gt;Since the portfolio brings together different types of content, I wanted to structure it in a way that made everything easy to find without making the experience feel complicated.&lt;/p&gt;

&lt;p&gt;I divided the portfolio into different sections based on the type of content being showcased, including &lt;strong&gt;About, Experience, Tech Stack, Projects, Achievements, Certificates, Books, Blogs and Designs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The homepage acts as the main entry point, while dedicated pages and sections allow visitors to explore specific areas in more detail.&lt;/p&gt;

&lt;p&gt;I also kept the navigation and content structure simple so visitors can navigate between sections naturally without having to search through too much information.&lt;/p&gt;

&lt;h3&gt;
  
  
  Portfolio Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Portfolio
│
├── Home
│   ├── Hero
│   ├── About
│   ├── Experience
│   ├── Projects
│   ├── Tech Stack
│   ├── Achievements
│   └── Books
│
├── Projects
├── Certificates
├── Books
├── Blogs
└── Designs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The structure evolved as I continued adding new content and features to the portfolio, so the portfolio architecture was refined alongside the development of the website.&lt;/p&gt;




&lt;h2&gt;
  
  
  Designing The Interactions
&lt;/h2&gt;

&lt;p&gt;I wanted the portfolio to feel interactive rather than being just a collection of static sections.&lt;/p&gt;

&lt;p&gt;I experimented with different interactions and custom components throughout the website, including a &lt;strong&gt;music player, draggable sticky notes, developer terminal, interactive tech stack, 3D book models and a book carousel&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I also added interactions to different sections to enhance the user experience while keeping the main content easy to access.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interactive Elements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Music Player&lt;/strong&gt; — Playable piano covers while browsing the portfolio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer Terminal&lt;/strong&gt; — An interactive terminal-style component.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sticky Notes&lt;/strong&gt; — Draggable notes that add a more playful element to the interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tech Stack&lt;/strong&gt; — An interactive visual representation of the technologies I use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3D Books&lt;/strong&gt; — 3D book models with an interactive carousel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Projects, Blogs, Designs &amp;amp; Certificates&lt;/strong&gt; — Dedicated pages with ways to explore the content more easily.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These interactions became an important part of the portfolio because they allowed me to experiment with different ways of presenting information while making the experience feel more personal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpf6xhkf53lnnrzzu387x.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpf6xhkf53lnnrzzu387x.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  From Idea To Experience
&lt;/h2&gt;

&lt;p&gt;This portfolio started as a basic Next.js project and gradually evolved into a much larger interactive experience.&lt;/p&gt;

&lt;p&gt;Instead of building everything at once, I continued adding new sections, features and improvements over time based on what I wanted the portfolio to showcase.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Evolved
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Foundation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Started with the initial portfolio setup and gradually built the core sections and components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expansion&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Added projects, certificates, books, achievements, blogs, designs and other content as the portfolio grew.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Refinement&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Improved the UI, animations, layouts and content across different sections.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimization&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Worked on image optimization, 3D model performance, mobile responsiveness and other performance-related improvements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuous Improvements&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Continued updating the portfolio with new content, UI changes, features and improvements as my work and skills evolved.&lt;/p&gt;

&lt;p&gt;The portfolio is still an ongoing project, and I continue to refine it as I learn and build new things.&lt;/p&gt;




&lt;h2&gt;
  
  
  Challenges &amp;amp; Solutions
&lt;/h2&gt;

&lt;p&gt;Building the portfolio over time came with several challenges, especially when combining 3D elements, animations and interactive components in the same experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Balancing 3D Models &amp;amp; Animations
&lt;/h3&gt;

&lt;p&gt;One of the biggest challenges was using &lt;strong&gt;Three.js and GSAP together&lt;/strong&gt; while making sure the 3D models and animations worked smoothly without affecting the browsing experience.&lt;/p&gt;

&lt;p&gt;I had to experiment with the animations and interactions to make sure they worked well together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optimizing for Mobile
&lt;/h3&gt;

&lt;p&gt;Making the portfolio work smoothly across different screen sizes required a lot of testing and improvements.&lt;/p&gt;

&lt;p&gt;I optimized the &lt;strong&gt;3D models, animations and layouts&lt;/strong&gt; to make the experience more responsive and suitable for smaller screens.&lt;/p&gt;

&lt;h3&gt;
  
  
  Building Custom Components
&lt;/h3&gt;

&lt;p&gt;Another challenge was creating several interactive components from scratch, including the &lt;strong&gt;music player, draggable sticky notes, developer terminal, interactive tech stack, 3D book models and book carousel&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Building these components gave me the opportunity to experiment with different interactions while also improving my frontend, UI and 3D development skills.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;p&gt;These challenges taught me that adding visual and interactive elements is only one part of the process. They also need to work smoothly together, remain responsive and still provide a good browsing experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Experience &amp;amp; Reflection
&lt;/h2&gt;

&lt;p&gt;After continuously working on the portfolio, it has become more than just a place to showcase my work. It has become a space where I can experiment with frontend development, UI design, 3D graphics, animations and interactive experiences.&lt;/p&gt;

&lt;p&gt;Working on this project for over a year has taught me that creating a good user experience is an ongoing process. As I continue learning and building new things, I also continue finding new ways to improve and expand the portfolio.&lt;/p&gt;

&lt;p&gt;It has given me the opportunity to experiment with new ideas, build custom components and improve my skills across different areas of development and design.&lt;/p&gt;

&lt;p&gt;The portfolio is still evolving, and I plan to keep refining it as my work, skills and ideas continue to grow.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Thanks for reading!😊🤍&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>uidesign</category>
      <category>uxdesign</category>
      <category>webdev</category>
      <category>portfolio</category>
    </item>
    <item>
      <title>Next.js: Beginning Of A New Adventure</title>
      <dc:creator>Devika Harshey</dc:creator>
      <pubDate>Fri, 31 Jan 2025 20:02:15 +0000</pubDate>
      <link>https://dev.to/devikaharshey/nextjs-beginning-of-a-new-adventure-251a</link>
      <guid>https://dev.to/devikaharshey/nextjs-beginning-of-a-new-adventure-251a</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qnu489f0wtgj4ynpzit.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%2F6qnu489f0wtgj4ynpzit.jpg" alt="The Web Dev Heroes" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After trying my hands in the basic yet the foundational and most important tech heroes i.e. &lt;strong&gt;HTML&lt;/strong&gt;, &lt;strong&gt;CSS&lt;/strong&gt; and &lt;strong&gt;JavaScript&lt;/strong&gt;, for more than an year, here's to the beginning of my journey of learning the well-known full-stack framework - &lt;strong&gt;Next.js&lt;/strong&gt;🎉.&lt;/p&gt;

&lt;p&gt;Let's have a look in what Next.js actually is.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Next.js?
&lt;/h2&gt;

&lt;p&gt;Next.js is a framework built on top of popular JavaScript library, &lt;strong&gt;React&lt;/strong&gt;. It helped in addressing the major issues such as inefficient SEO, complexity in managing the component and it's state and processing overhead.&lt;/p&gt;

&lt;p&gt;Besides, it also introduced the efficient rendering strategies like &lt;strong&gt;Server-Side Rendering (SSR)&lt;/strong&gt; &amp;amp; &lt;strong&gt;Static Site Generation (SSG)&lt;/strong&gt; which added to the ease in development of SEO friendly and high-performance web applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advantages of Next.js
&lt;/h2&gt;

&lt;p&gt;Being a trending and widely used framework, Next.js has many advantages such as:&lt;/p&gt;

&lt;p&gt;1) Seamless file-based routing&lt;br&gt;
2) Efficient code splitting&lt;br&gt;
3) Image &amp;amp; font optimization&lt;br&gt;
4) HMR (Hot Module Replacement)&lt;br&gt;
5) API Routes (backend)&lt;br&gt;
6) Built-in support for Sass (Syntactically Awesome Style Sheets)&lt;br&gt;
7) Data fetching choice&lt;br&gt;
8) Error handling&lt;br&gt;
9) Metadata API (For SEO)&lt;/p&gt;

&lt;p&gt;and the list goes on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is Next.js so popular and why most of the developers prefer it over React?
&lt;/h2&gt;

&lt;p&gt;As I already mentioned, Next.js is a React-based framework which not only extended it's capabilities but also reduced the dependencies on number of isolated tools like the ones for server-side handling, databases, routing, etc. And now we've a &lt;strong&gt;one-stop solution&lt;/strong&gt; for the development of full-stack (i.e. both frontend and backend) applications, our very own Next.js.&lt;/p&gt;

&lt;p&gt;One of the most interesting feature of Next.js, that I recently learned, is &lt;strong&gt;file-based routing&lt;/strong&gt; i.e. we can define the paths of different pages in our application based on the file &amp;amp; folder structure within our code. It includes concepts like &lt;strong&gt;dynamic routing&lt;/strong&gt;, &lt;strong&gt;nested routing&lt;/strong&gt;, &lt;strong&gt;routing groups&lt;/strong&gt; and many more.&lt;/p&gt;

&lt;p&gt;Though React also had it's own routing library called &lt;strong&gt;React Router&lt;/strong&gt; and the &lt;strong&gt;React Server Components&lt;/strong&gt; for server-side handling, Next.js provided everything within a single framework without having the need to rely on external tools and provided us with the choice of deciding which components to render on client-side and which one on the server-side. &lt;/p&gt;

&lt;p&gt;Although Next.js facilitates us with comparatively easier way of developing web applications and is mostly seen at the first place, it's not like it has completely replaced React. And it totally depends on one's need and the requirements of the applications or website they're building, which one to choose Next.js or React, as they both have their own benefits.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>nextjs</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
