<?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: Mohammed E. MEZERREG</title>
    <description>The latest articles on DEV Community by Mohammed E. MEZERREG (@mohessaid).</description>
    <link>https://dev.to/mohessaid</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%2F35090%2F63237a06-6307-4763-9ffb-b29ee18f1b35.png</url>
      <title>DEV Community: Mohammed E. MEZERREG</title>
      <link>https://dev.to/mohessaid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mohessaid"/>
    <language>en</language>
    <item>
      <title>Eisen Flow: Yet Another To-Do App But Better</title>
      <dc:creator>Mohammed E. MEZERREG</dc:creator>
      <pubDate>Sun, 15 Feb 2026 11:41:23 +0000</pubDate>
      <link>https://dev.to/mohessaid/eisen-flow-yet-another-to-do-app-but-better-3343</link>
      <guid>https://dev.to/mohessaid/eisen-flow-yet-another-to-do-app-but-better-3343</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;This is an idea I got since I was working with my previous employer. We were using Jira for managing projects. In parallel of Jira I used Toggl, Trello, Clockify and even the Pomofocus timer.&lt;/p&gt;

&lt;p&gt;I used these tools both through web and mobile. None of them satisfied me. I am not saying they're bad, but they didn't have what I was looking for.&lt;/p&gt;

&lt;p&gt;I took this challenge to test a concept of my idea and see if people like it and why not win the challenge :) .&lt;/p&gt;

&lt;p&gt;The idea revolve around implementing the Eisenhower matrix in a task or to-do list app. I didn't have the time to implement everything. But the MVP of the app is here.&lt;/p&gt;

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

&lt;p&gt;You can check the app &lt;a href="https://eisenflow.mohessaid.workers.dev/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/5vVUn-bpnAM"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;I used Copilot CLI for everything. I only used NeoVim to change some lines every now and then. You can say I developed this project through prompting Copilot CLI (Haiku, Sonnet, and Opus) 98% of the time.&lt;br&gt;
I started with a free plan with Haiku. After three sessions I think I hit the limit and I was asked to wait until March. Since I have to finish the MVP and share it here. I was obliged to go buy a month of the pro plan.&lt;/p&gt;

&lt;p&gt;Since then, I selected Opus and went through the rest of the plan finished it in one set. Then I added more features to implement to the plan and gave Copilot all permissions in the project's folder.  &lt;/p&gt;

&lt;p&gt;I changed the direction for this app two times and the agent never failed me. It even remembered removed changes even though I wasn't in a git repository! I don't know how is that possible to be honest.&lt;/p&gt;

&lt;p&gt;i discover that I Copilot is more mature than ever. It has everything other tools have. It has skills, plan, MCPs, and so on. The funny thing is me starting a new session every time I start my  machine. To my surprise they have a continue/resume command as well. So for the last three days I used&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/session rename eisenflow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to rename the last session for this app. Then every time I want to work on this project I just use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;copilot &lt;span class="nt"&gt;--continue&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This when I am sure that I didn't use Copilot for something else. It resumes the last opened session.&lt;br&gt;
To select a session or provide the ID of a session I use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;copilot &lt;span class="nt"&gt;--resume&lt;/span&gt; &lt;span class="c"&gt;# A list will show and I select my session.&lt;/span&gt;
copilot &lt;span class="nt"&gt;--resume&lt;/span&gt; session-id &lt;span class="c"&gt;# I never used it&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This really helped and gave me a GUI vibe. It's similar to selecting an existing thread from Antigravity, Cursor, etc. Or select a chat from ChatGPT, Claude, etc.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Some Usage Stats
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Sessions by log size
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Feb 12 — 132 KB / 1,550 lines (Pomodoro + Task UX)&lt;/li&gt;
&lt;li&gt;Feb 3 — 104 KB / 1,228 lines (Core app build)&lt;/li&gt;
&lt;li&gt;Feb 10 — 84 KB / 969 lines (Feature sprint)&lt;/li&gt;
&lt;li&gt;Feb 2 — 80 KB / 898 lines (Scaffolding)&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  🤖 AI Model Requests
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Model Requests&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Feb 1&lt;/td&gt;
&lt;td&gt;0 (setup only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb 2&lt;/td&gt;
&lt;td&gt;244&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb 3&lt;/td&gt;
&lt;td&gt;346&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb 8 (AM)&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb 8 (PM)&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb 10&lt;/td&gt;
&lt;td&gt;288&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb 12&lt;/td&gt;
&lt;td&gt;464 ← heaviest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb 13&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1,414 model requests&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  📐 Context Window
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Context windows used&lt;/td&gt;
&lt;td&gt;128K tokens (primary), 90K tokens (sub-agents)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Peak utilization&lt;/td&gt;
&lt;td&gt;80% (~102K/128K tokens) on Feb 10 &amp;amp; 12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compactions triggered&lt;/td&gt;
&lt;td&gt;0 (never hit threshold)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  🕵️ Sub-Agent Usage
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Explore agents&lt;/td&gt;
&lt;td&gt;3 (all on Feb 12)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task agents&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;General-purpose agents&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  ⏱️ Session Durations
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Duration&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Feb 1&lt;/td&gt;
&lt;td&gt;22 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb 2&lt;/td&gt;
&lt;td&gt;4h 15m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb 3–5&lt;/td&gt;
&lt;td&gt;~50h (long-running session)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb 8 (AM)&lt;/td&gt;
&lt;td&gt;12h 9m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb 8 (PM)&lt;/td&gt;
&lt;td&gt;12 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb 10&lt;/td&gt;
&lt;td&gt;11h 9m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb 12&lt;/td&gt;
&lt;td&gt;19h 15m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feb 13 - 15&lt;/td&gt;
&lt;td&gt;38h 36m 38.398s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~136 hours of session time&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  💬 Prompt &amp;amp; Turn Counts
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;User prompts&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Assistant turns&lt;/td&gt;
&lt;td&gt;1,406 (~15.5 turns per prompt)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool executions&lt;/td&gt;
&lt;td&gt;1,563&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context compactions&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  🧠 Model Usage
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Calls Logged&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 4.6&lt;/td&gt;
&lt;td&gt;Primary model (premium ⭐)&lt;/td&gt;
&lt;td&gt;~1,414 requests (main agent)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Haiku 4.5&lt;/td&gt;
&lt;td&gt;Sub-agent (explore/task)&lt;/td&gt;
&lt;td&gt;55 calls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 4.5&lt;/td&gt;
&lt;td&gt;Sub-agent (general-purpose)&lt;/td&gt;
&lt;td&gt;2 calls&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  ⚠️ Quota Issues
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Feb 8&lt;/td&gt;
&lt;td&gt;10 quota exceeded errors ("You have no quota")&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  📊 Estimated Premium Requests
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Est. Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Main agent (Opus)&lt;/td&gt;
&lt;td&gt;~1,414&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sub-agents (Haiku/Sonnet)&lt;/td&gt;
&lt;td&gt;~57 (non-premium)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total premium requests&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~1,414&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;Well toward the end GitHub Copilot CLI advised me to use general purpose models as he refers to Haiku and Sonnet to save on premium   models requests like Opus. I took his advise and worked with Sonnet for quite a bit after that.&lt;/p&gt;

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

&lt;p&gt;The stack used in this project is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React/Vite with TypeScript of course.&lt;/li&gt;
&lt;li&gt;Convex for DB, Auth and so on.&lt;/li&gt;
&lt;li&gt;Cloudflare Workers for hosting.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>A Portfolio For Fun!</title>
      <dc:creator>Mohammed E. MEZERREG</dc:creator>
      <pubDate>Sun, 01 Feb 2026 18:12:01 +0000</pubDate>
      <link>https://dev.to/mohessaid/a-portfolio-for-fun-305e</link>
      <guid>https://dev.to/mohessaid/a-portfolio-for-fun-305e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/new-year-new-you-google-ai-2025-12-31"&gt;New Year, New You Portfolio Challenge Presented by Google AI&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;I am the founder of &lt;a href="https://ta9in.com" rel="noopener noreferrer"&gt;تقن - Ta9in&lt;/a&gt;. This is the title I go with these days. I worked as a developer for ten years before deciding to start my own company, Ta9in, where we focus on bring the next generation of bright problem solver through apprenticeship and real life work that help us and our clients.&lt;/p&gt;

&lt;h2&gt;
  
  
  Portfolio
&lt;/h2&gt;

&lt;p&gt;You can visit the app from &lt;a href="https://mohessaid-portfolio-456639039010.us-west1.run.app/" rel="noopener noreferrer"&gt;here&lt;/a&gt; to get a better experience.&lt;/p&gt;


&lt;div class="ltag__cloud-run"&gt;
  &lt;iframe height="600px" src="https://mohessaid-portfolio-456639039010.us-west1.run.app/"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I started with Antigravity which is the editor of choice these days for me. However, even though I have pro subscription I hit the limits so quickly. I tried to build an RPG game-ish experience. It didn't work so well because of the arts and stuff. So I abandoned this idea.&lt;/p&gt;

&lt;p&gt;To use an AI assistant without limits, I typically work in AI Studio. This project was made with it. I searched for game UI in Pinterest and chose one I liked. I passed it to AI Studio and gave him a prompt basically saying: "Create a game-like pixel art card interface for portfolio showcase. It's about a developer/artist going in a journey from studying in college to..."&lt;/p&gt;

&lt;p&gt;Gemini is bright when it comes to playing words based on my experience. So the prompt was altered but it did a great job from the get go. The game theme was already there. The only thing I needed is to polish some styling and provide data about myself.&lt;/p&gt;

&lt;p&gt;It took me 22 prompts varying from data updates, fixing bugs, fixing styling issues, to prompts suggested by AI Studio to get this result.&lt;/p&gt;

&lt;p&gt;The best part is how Gemini twisted the description I gave and blend it into the game theme.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Most Proud Of
&lt;/h2&gt;

&lt;p&gt;The main challenge in creating this website is the game-ish styling. It's absurd to make it myself without leaving my actual work and focus for at least a weak to craft the style. However, with AI I tested different styles in day and chose what hit closer to my goal. So the biggest decision is to bootstrap things and brainstorm with the help of AI. That's what I teach our new employees. Embrace the power of AI and integrate it in your thinking workflow.&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.amazonaws.com%2Fuploads%2Farticles%2F5j7948jmeuujnae547fv.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%2F5j7948jmeuujnae547fv.png" alt="A screenshot from within the game" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The website is plain simple when it comes to architecture. It doesn't really need something complex. Just a one page static page like the old WWW. Yes it uses React underneath to handle interactions. But in reality it's just a simple page with static content. I tried to add some Nano Banana Generation power. But it's not that obvious and you have to spot it. I did it on purpose to keep my balance protected :). In general that's what I think how a personal website should be. Hence &lt;a href="https://mohessaid.com" rel="noopener noreferrer"&gt;my plain personal website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Since I used AI Studio it goes directly to React/TypeScript (selected by default). &lt;/p&gt;

&lt;h2&gt;
  
  
  Ideas for Future Versions
&lt;/h2&gt;

&lt;p&gt;The idea is to have an old gaming console in a room with some games' cards on a table. The user would drag one and put it in the card slot. Then power on the gaming console.&lt;/p&gt;

&lt;p&gt;The view zoom in the screen (transition view) and load the game view (another page). Each card will use a different version of my own portfolio and go with the user through the history of my website. That's the main idea and I might work on it if I have time.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>portfolio</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Image Flow Editor</title>
      <dc:creator>Mohammed E. MEZERREG</dc:creator>
      <pubDate>Sun, 28 Sep 2025 22:51:32 +0000</pubDate>
      <link>https://dev.to/mohessaid/image-flow-editor-133</link>
      <guid>https://dev.to/mohessaid/image-flow-editor-133</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/kendoreact-2025-09-10"&gt;KendoReact Free Components Challenge&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I am not a designer nor an image editor. However, I find myself going to Google every now and then, searching on background remover, light enhancing, etc. I go to Figma as well to add some effects, or apply masks or whatever.&lt;/p&gt;

&lt;p&gt;As a casual image editor, I need what works right a way with the fewest clicks possible. I am not willing to invest my time on learning something I need few times a month.&lt;/p&gt;

&lt;p&gt;Figma is great. However, when any tool start to get traction. The team behind it start to seek growth and domination. Figma and Canvas started as simple tools that do one or two things. Now, they require a learning curve to achieve things.&lt;/p&gt;

&lt;p&gt;These days, I find myself going to Excalidraw to be honest to draw my creatives for posts or what not. Why? I believe on the saying: "With greater power comes greater responsibilities." Apply to this field and it becomes: "With more options, comes more distractions." For a simple remove background task and add stroke to make stump like. You start exploring the never ending plugins ecosystem searching for one who does both tasks. A task of three minutes max turns to a full day of trying different options, signing to countless services for an API key. Of course, days after that, you still didn't edit your image and forget about the project all over.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Concept
&lt;/h3&gt;

&lt;p&gt;I imagine myself as the main end user:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I can upload multiple images.&lt;/li&gt;
&lt;li&gt;Add some tasks or editing flow as drag and drop.&lt;/li&gt;
&lt;li&gt;Hit compile or run. &lt;/li&gt;
&lt;li&gt;Get the result files (preview, download, download all).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It should be as simple as it was described.&lt;/p&gt;

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

&lt;p&gt;Demo Video:&lt;/p&gt;

&lt;p&gt;

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


&lt;/p&gt;

&lt;p&gt;You can test the app from these two domains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://image-flow-editor.vercel.app/" rel="noopener noreferrer"&gt;Vercel subdomain&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dub.sh/Xw9e66S" rel="noopener noreferrer"&gt;Own subdomain&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also find the repository for this project &lt;a href="https://dub.sh/JUov7T8" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  KendoReact Components Used
&lt;/h2&gt;

&lt;p&gt;The components used in this project are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;kendo-react-common&lt;/li&gt;
&lt;li&gt;kendo-react-intl&lt;/li&gt;
&lt;li&gt;kendo-react-buttons&lt;/li&gt;
&lt;li&gt;kendo-react-inputs&lt;/li&gt;
&lt;li&gt;kendo-react-dropdowns&lt;/li&gt;
&lt;li&gt;kendo-react-dialogs&lt;/li&gt;
&lt;li&gt;kendo-react-notification&lt;/li&gt;
&lt;li&gt;kendo-react-indicators&lt;/li&gt;
&lt;li&gt;kendo-react-animation&lt;/li&gt;
&lt;li&gt;kendo-popup-common&lt;/li&gt;
&lt;li&gt;kendo-react-popup&lt;/li&gt;
&lt;li&gt;kendo-react-layout&lt;/li&gt;
&lt;li&gt;kendo-react-labels&lt;/li&gt;
&lt;li&gt;kendo-react-data-tools&lt;/li&gt;
&lt;li&gt;kendo-react-charts&lt;/li&gt;
&lt;li&gt;kendo-react-grid&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Assistant Usage
&lt;/h2&gt;

&lt;p&gt;I don't have much time for the challenge. Even though I have ten years of experience with the Kendo UI and Telerik. I mainly used jQuery version for dashboard related work. Still, five days is not enough time for me to come with an idea, code it and write about it while doing my work.&lt;/p&gt;

&lt;p&gt;Since the trend this year is all around Vibe Coding, Coding Assistants, Agents, AI Editors. Why not go this road and Vibe Code my idea for this challenge?&lt;/p&gt;

&lt;p&gt;I tried a couple of these Vibe Coding platforms before. However, the main problem I usually face is their limitations. Meaning, if you let the agent code the way it knows how. It will give you working prototypes fast and almost perfect. However, when you ask them to use a certain library or framework, they struggle with that and only bring you blood pressure up.&lt;/p&gt;

&lt;p&gt;So, I started with Google AI Studio Build. It proved itself as reliable when it comes to using libraries with React and Angular. However, this time it wasn't efficient. It kept showing errors that it couldn't fix. I even deleted the project and started from scratch. The Kendo MCP configuration doesn't seem to work at first in this environment neither.&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.amazonaws.com%2Fuploads%2Farticles%2Fsonff6opjh0u2k9lex2h.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%2Fsonff6opjh0u2k9lex2h.png" alt="Screenshot from the ai studio."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, I downloaded the code base and opened my ZED editor. I configured the Kendo MCP and started prompting.&lt;/p&gt;

&lt;p&gt;The first iteration was easy. I prompted Zed to fix the issues. It did very quickly. The problem was in importing react in multiple places from different CDNs. I updated the AI Studio code base and it worked.&lt;/p&gt;

&lt;p&gt;Later on, things started to get very nasty. Both Zed &amp;amp;  Ai Studio were needed for different tasks. I tried to stop using AI Studio, but the API key calls from my local version kept preventing me from doing anything claiming that I exceeded the limits or whatever.&lt;/p&gt;

&lt;p&gt;At the end, I continued on AI Studio. I added the Kendo MCP configuration in its settings. Luckily for me, it started using it to access the latest documentation and recognizes my prompts with ease. It even fixed an issue related to license while using a premium feature of the dropdown component. Same happened with the button at certain point. I wonder if the MCP can pinpoint the paid features in free components without making a mistake and I had to point to it. Of course, I didn't point to the component causing the issue. I only gave my feedback about the licensing strips showing in the dialog form.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding more features
&lt;/h2&gt;

&lt;p&gt;I have to say. I never felt cold adding a feature like in this project. The AI Studio ruined my app two times while adding a simple button. It's unfortunate that the GitHub integration isn't working correctly. So I had to download a version every now and then.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dashboard
&lt;/h2&gt;

&lt;p&gt;Let's be honest. Kendo UI shines in dashboards. In my previous job, we decided to buy it because of how straightforward building dashboards was with the Data Grid, Charts, Editors and so on.&lt;/p&gt;

&lt;p&gt;After the first prompt about the dashboard. I confirmed all my fears. It crashed and I had to track errors and fix them. The same error keeps happening whenever I add a new component. Ai Studio uses ESM CDN for its packages management. The problem in versioning. So I had to check the right version for each component or package.&lt;/p&gt;

&lt;h2&gt;
  
  
  Licensing
&lt;/h2&gt;

&lt;p&gt;I was hoping to use the tiling layout and the data grid components. Unfortunately,the little I am doing with them shows the licensing strips. So I removed them all together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deployment
&lt;/h2&gt;

&lt;p&gt;Even though I prefer Cloudflare these days. I chose Vercel to host this project. However, to deploy it outside of AI Studio I have to do some changes.&lt;/p&gt;

&lt;p&gt;The first thing I did was removing adding a new option for the user to add his own Gemini API KEY. This way, anyone can use the app without me worrying about credits and so on. Of course, this will change if the app gets to a certain point.&lt;/p&gt;

&lt;p&gt;Once again, I used only free components. However, the dialog for the API configuration shows the license strips!!! I was confused, so I prompted Claude in Zed to use the MCP and investigate the issue. Unfortunately, the investigation didn't lead to a good result. Since Claude went and deleted the Kendo theme and did other unnecessary stuff. Then he went out of service because I exceeded the limit of using it.&lt;/p&gt;

&lt;p&gt;I switched the model to ChatGPT 5 mini through GitHub Copilot and prompted: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;in the @ApiKeyConfig.tsx file there something that make Kendo add the license strips. Please use the kendo react mcp to investiage this. Don't do anything until you ask&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This model did a better job with the Kendo MCP. It asked for a list of all premium components. Then it asked for free components with premium features. Compiled a plan for me on how to fix the issue. After executing the plan the license strips gone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plans
&lt;/h2&gt;

&lt;p&gt;I started this project for fun. After spending almost five days working on it. I am planning to continue enhancing it to see how it turns out. I added a todo list to the README file of this project. But that's just the starting point. But first, let's see how it perform in this challenge.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>kendoreactchallenge</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Host Hugo in Vercel</title>
      <dc:creator>Mohammed E. MEZERREG</dc:creator>
      <pubDate>Thu, 28 Nov 2024 10:30:55 +0000</pubDate>
      <link>https://dev.to/mohessaid/how-to-host-hugo-in-vercel-3d57</link>
      <guid>https://dev.to/mohessaid/how-to-host-hugo-in-vercel-3d57</guid>
      <description>&lt;p&gt;I decided to go with &lt;a href="https://gohugo.io" rel="noopener noreferrer"&gt;Hugo&lt;/a&gt; to build my personal &lt;a href="https://mohessaid.com" rel="noopener noreferrer"&gt;website&lt;/a&gt;. The only thing I based my choice on was the build time. I thought Hugo was in the same league as &lt;a href="https://astro.new" rel="noopener noreferrer"&gt;Astro&lt;/a&gt; when it comes to content management perks, but it isn't quite there yet. Or, I can say it has its own path since it's older than most of the other static site generators I've encountered. Moreover, it's a Go application, which is another important factor to consider when evaluating technology choices.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Can Be Added!
&lt;/h2&gt;

&lt;p&gt;Yes, it's possible to extend Hugo's functionality. You can add missing features through modules that modify the build process. For example, I was missing MDX support in Hugo. I can address this through a module that renders MDX at build time. I haven't tried it myself, but it seems possible.&lt;br&gt;
I can also potentially add a parallel building pipeline—if we can call it that. This might involve using tools like Vite, Turbo, or Webpack. However, this approach would likely complicate the build process and potentially slow down Hugo's main building mechanism. These integrations have been used to incorporate Tailwind and other frontend libraries. Interestingly, if you look at Hugo's upcoming features, you'll see plans for integrating Tailwind and other technologies.&lt;/p&gt;
&lt;h2&gt;
  
  
  Building on Vercel
&lt;/h2&gt;

&lt;p&gt;I used some third-party Hugo tools, specifically &lt;a href="https://hugomods.com" rel="noopener noreferrer"&gt;HugoMods&lt;/a&gt;. The &lt;a href="https://icons.hugomods.com" rel="noopener noreferrer"&gt;icons module&lt;/a&gt; caught my attention because I wanted to add icons to my website without importing an entire font. While searching, the Icons module was the first thing that appeared. It offers a variety of icon vendors, including Bootstrap, Font Awesome, Feather icons, and more.&lt;br&gt;
Locally, everything worked perfectly. However, after pushing my changes, nothing seemed to change. Upon checking the build page in Vercel, I noticed...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;12:10:48.021] Running build &lt;span class="k"&gt;in &lt;/span&gt;Washington, D.C., USA &lt;span class="o"&gt;(&lt;/span&gt;East&lt;span class="o"&gt;)&lt;/span&gt; – iad1
&lt;span class="o"&gt;[&lt;/span&gt;12:10:48.210] Cloning github.com/mohessaid/mohessaid &lt;span class="o"&gt;(&lt;/span&gt;Branch: main, Commit: eaeecd1&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;12:10:48.449] Cloning completed: 238.727ms
&lt;span class="o"&gt;[&lt;/span&gt;12:10:49.038] Restored build cache from previous deployment &lt;span class="o"&gt;(&lt;/span&gt;5i5sCdjnY3KZXgGBqbqfgJUjrwYB&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;12:10:49.132] Running &lt;span class="s2"&gt;"vercel build"&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;12:10:49.714] Vercel CLI 39.0.2
&lt;span class="o"&gt;[&lt;/span&gt;12:10:50.440] Total &lt;span class="k"&gt;in &lt;/span&gt;3 ms
&lt;span class="o"&gt;[&lt;/span&gt;12:10:50.441] Error: failed to load modules: failed to download modules: binary with name &lt;span class="s2"&gt;"go"&lt;/span&gt; not found &lt;span class="k"&gt;in &lt;/span&gt;PATH
&lt;span class="o"&gt;[&lt;/span&gt;12:10:50.446] Error: Command &lt;span class="s2"&gt;"hugo --gc"&lt;/span&gt; exited with 1
&lt;span class="o"&gt;[&lt;/span&gt;12:10:50.625]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When Hugo attempted to install the modules needed for the build, it couldn't find the Go binaries. I sought help from Claude and GPT, hoping for a quick solution, but they were unable to provide direct assistance. I had to guide them through each step, and eventually, I lost hope in their ability to help me.&lt;br&gt;
I had even used Claude for a solution that was nearly successful, if not for the limitations in the Vercel input fields.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Worked?
&lt;/h2&gt;

&lt;p&gt;I navigated to the settings page of my website in the Vercel dashboard. In the "Environment Variables" tab, I added a variable named "HUGO_VERSION" and set its value to the latest available version of Hugo.&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.amazonaws.com%2Fuploads%2Farticles%2F6jubi79id5sqr3ir6otf.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%2F6jubi79id5sqr3ir6otf.png" alt="Hugo Version Environment Variable in Vercel." width="800" height="74"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the "General" tab, select Hugo as the framework preset. Then override the build command with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; https://go.dev/dl/go1.22.2.linux-amd64.tar.gz &lt;span class="nt"&gt;-o&lt;/span&gt; go1.22.2.linux-amd64.tar.gz &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-C&lt;/span&gt; /usr/local &lt;span class="nt"&gt;-xzf&lt;/span&gt; go1.22.2.linux-amd64.tar.gz &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;:/usr/local/go/bin &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; go &lt;span class="nb"&gt;env &lt;/span&gt;GOTPATH  &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;  hugo &lt;span class="nt"&gt;--gc&lt;/span&gt; &lt;span class="nt"&gt;--minify&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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.amazonaws.com%2Fuploads%2Farticles%2F4mtqfvcajt95s03myr2e.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%2F4mtqfvcajt95s03myr2e.png" alt="General settings in Vercel dashboard" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: I'm using Go version 1.22.2, which is the latest at the time of writing. You can modify the version to match your specific requirements.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why Build Command?
&lt;/h2&gt;

&lt;p&gt;I understand your skepticism. Like you, I thought I had a clever solution. Initially, I attempted to install Go in the Install Command field, but it failed miserably. Vercel's build process couldn't locate the binaries, despite my exhaustive troubleshooting.&lt;br&gt;
After exploring countless potential solutions without success, I stumbled upon a GitHub issue where someone had placed their entire installation process directly in the build field. Replicating their approach, I finally achieved success. At this point, the solution speaks for itself.&lt;br&gt;
Attempting to place these steps in the install command field will likely result in errors.&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.amazonaws.com%2Fuploads%2Farticles%2Fkp9wsrs6jrt107utc8lq.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%2Fkp9wsrs6jrt107utc8lq.png" alt="Build logs for using install command" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or this one&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.amazonaws.com%2Fuploads%2Farticles%2Fhbf5sbog2gdr14azixa2.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%2Fhbf5sbog2gdr14azixa2.png" alt="Build logs for using install command" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Installing Amazon Linux Extras won't solve the Go installation challenge. The version of Go available through this method is significantly outdated. I tested this approach thoroughly and encountered consistent failures. I attempted to use both &lt;code&gt;yum&lt;/code&gt; and &lt;code&gt;dnf&lt;/code&gt; package managers in the install command, but neither method successfully resolved the Go binary issue.&lt;/p&gt;




&lt;p&gt;Finally, I shared this post across different platforms to test which one of them get first in search results. I was willing to do this months ago. However, I couldn't the right post for it. You can follow the experiment from &lt;a href="https://dub.sh/ZIRzyDy" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>hugo</category>
      <category>vercel</category>
      <category>go</category>
      <category>website</category>
    </item>
  </channel>
</rss>
