<?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: Taqui</title>
    <description>The latest articles on DEV Community by Taqui (@taqui).</description>
    <link>https://dev.to/taqui</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%2F1193992%2F356d8c9d-b375-4cd1-9cf9-32dafadd9695.png</url>
      <title>DEV Community: Taqui</title>
      <link>https://dev.to/taqui</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/taqui"/>
    <language>en</language>
    <item>
      <title>Why Your LLM Prompts Break in Production (And How to Fix Them)</title>
      <dc:creator>Taqui</dc:creator>
      <pubDate>Sat, 17 Oct 2026 07:56:12 +0000</pubDate>
      <link>https://dev.to/taqui/why-your-llm-prompts-break-in-production-and-how-to-fix-them-298o</link>
      <guid>https://dev.to/taqui/why-your-llm-prompts-break-in-production-and-how-to-fix-them-298o</guid>
      <description>&lt;p&gt;I recently started learning &lt;strong&gt;Applied AI Engineering&lt;/strong&gt; from scratch. Before this, I thought prompting was just typing a question into ChatGPT, testing it once, and moving on.&lt;/p&gt;

&lt;p&gt;In real apps, that breaks fast. Here are my handyy notes and visual diagrams from Chapter 1 on how to make LLMs reliable, ending with the fact-checking system I designed to test these concepts.&lt;/p&gt;


&lt;div class="crayons-card c-embed"&gt;

  &lt;br&gt;
&lt;strong&gt;TLDR: The 5 Rules of Reliable Prompting&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Temperature = 0&lt;/strong&gt; makes answers consistent, but it will still repeat a fake fact if the model does not know the answer.&lt;br&gt;
&lt;strong&gt;Thinking comes first:&lt;/strong&gt; Always put &lt;code&gt;"thinking"&lt;/code&gt; &lt;em&gt;before&lt;/em&gt; &lt;code&gt;"answer"&lt;/code&gt; in JSON so the AI calculates steps before speaking.&lt;br&gt;
&lt;strong&gt;Guard the edges:&lt;/strong&gt; Wrap user input in &lt;code&gt;&amp;lt;userMessage&amp;gt;&lt;/code&gt; tags and put your core rules at the very top and bottom.&lt;br&gt;
&lt;strong&gt;Give an escape hatch:&lt;/strong&gt; Use &lt;code&gt;string | null&lt;/code&gt; in schemas so the model is never forced to hallucinate missing data.&lt;br&gt;
&lt;strong&gt;Chain and retry:&lt;/strong&gt; Split big prompts into small steps and use &lt;code&gt;if/else&lt;/code&gt; retry loops with a &lt;code&gt;max_retries&lt;/code&gt; cap.&lt;br&gt;

&lt;/div&gt;





&lt;h2&gt;
  
  
  1. Stochastic LLMs &amp;amp; Temperature
&lt;/h2&gt;

&lt;p&gt;A calculator is deterministic (&lt;code&gt;2 + 2&lt;/code&gt; is always &lt;code&gt;4&lt;/code&gt;). An LLM is &lt;strong&gt;stochastic&lt;/strong&gt;, meaning it predicts the next word by rolling a dice on probabilities. We control that dice roll using &lt;strong&gt;Temperature&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;The dog chased the...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
 &lt;span class="err"&gt;├─&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ball&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;◄──&lt;/span&gt; &lt;span class="nx"&gt;Temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Always&lt;/span&gt; &lt;span class="nx"&gt;picks&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nx"&gt;top&lt;/span&gt; &lt;span class="nx"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;Good&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;facts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="err"&gt;├─&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="err"&gt;└─&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;car&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;◄──&lt;/span&gt; &lt;span class="nx"&gt;Temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Rolls&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;dice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;Good&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;creative&lt;/span&gt; &lt;span class="nx"&gt;poems&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why this matters:&lt;/strong&gt; Setting &lt;code&gt;Temperature = 0&lt;/code&gt; does not stop hallucinations. The model does not stop predicting at &lt;code&gt;0&lt;/code&gt;. If it does not know the answer, its #1 top guess is still a fake fact, and it will just return that wrong answer every single time.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Chain of Thought (CoT) Prompting
&lt;/h2&gt;

&lt;p&gt;For an LLM, generating tokens on the screen is literally how it thinks. If you ask a tricky riddle and force a 1-word answer right away, it has zero time to calculate and guesses wrong.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Shot CoT:&lt;/strong&gt; Adding &lt;em&gt;"Let's think step by step"&lt;/em&gt;. Good for general math or logic, but skip it for simple facts like &lt;em&gt;"Capital of France"&lt;/em&gt; because extra tokens cost money and slow down your app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Few-Shot CoT:&lt;/strong&gt; Giving 2 to 3 solved step-by-step examples. Best when you need the AI to follow your exact checklist every time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The "No Backspace" Rule for UI Schemas
&lt;/h3&gt;

&lt;p&gt;Users do not want to see a wall of robot thoughts on their screen. To hide the thinking, define a JSON schema with a &lt;code&gt;"thinking"&lt;/code&gt; variable (hidden in backend) and an &lt;code&gt;"answer"&lt;/code&gt; variable (rendered in UI).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="err"&gt;❌&lt;/span&gt; &lt;span class="nx"&gt;WRONG&lt;/span&gt; &lt;span class="nx"&gt;ORDER&lt;/span&gt;                      &lt;span class="err"&gt;✅&lt;/span&gt; &lt;span class="nx"&gt;RIGHT&lt;/span&gt; &lt;span class="nx"&gt;ORDER&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;                                   &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;answer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Weak!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;thinking&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Step 1: 14 chars...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;thinking&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Wait, 14 chars...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;     &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;answer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Strong!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;                                   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;AI&lt;/span&gt; &lt;span class="nx"&gt;guesses&lt;/span&gt; &lt;span class="nx"&gt;before&lt;/span&gt; &lt;span class="nx"&gt;thinking&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;AI&lt;/span&gt; &lt;span class="nx"&gt;thinks&lt;/span&gt; &lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;then&lt;/span&gt; &lt;span class="nx"&gt;locks&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
 &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;cannot&lt;/span&gt; &lt;span class="nx"&gt;backspace&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;fix&lt;/span&gt; &lt;span class="nx"&gt;it&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;     &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="nx"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Five Prompt Failure Modes
&lt;/h2&gt;

&lt;p&gt;When real users use your app, prompts fail in predictable ways. Here is how the LLM's attention works and how to defend it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Attention&lt;/span&gt;
  &lt;span class="nx"&gt;High&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;★&lt;/span&gt; &lt;span class="nx"&gt;System&lt;/span&gt; &lt;span class="nc"&gt;Rules &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Put&lt;/span&gt; &lt;span class="nx"&gt;core&lt;/span&gt; &lt;span class="nx"&gt;rules&lt;/span&gt; &lt;span class="nx"&gt;at&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
       &lt;span class="err"&gt;│&lt;/span&gt;
   &lt;span class="nx"&gt;Low&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;░░░&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="nx"&gt;Pages&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;Policy&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nc"&gt;Data &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Lost&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;Middle&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;░░░&lt;/span&gt;
       &lt;span class="err"&gt;│&lt;/span&gt;     &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;userMessage&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Untrusted&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/userMessage&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="nx"&gt;High&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="err"&gt;★&lt;/span&gt; &lt;span class="nx"&gt;Sandwich&lt;/span&gt; &lt;span class="nc"&gt;Reminder &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Put&lt;/span&gt; &lt;span class="nx"&gt;final&lt;/span&gt; &lt;span class="nx"&gt;rule&lt;/span&gt; &lt;span class="nx"&gt;here&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;beat&lt;/span&gt; &lt;span class="nx"&gt;Recency&lt;/span&gt; &lt;span class="nx"&gt;Bias&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
       &lt;span class="err"&gt;└────────────────────────────────────────────────────────►&lt;/span&gt; &lt;span class="nx"&gt;Prompt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Injection:&lt;/strong&gt; Users type &lt;em&gt;"Ignore previous rules"&lt;/em&gt; at the end. Because of &lt;strong&gt;recency bias&lt;/strong&gt;, the AI listens to the latest message. &lt;strong&gt;Fix:&lt;/strong&gt; Wrap input in &lt;code&gt;&amp;lt;userMessage&amp;gt;&lt;/code&gt; fences and add a rule reminder at the very bottom.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lost in the Middle:&lt;/strong&gt; LLMs forget stuff buried in the middle of long text. &lt;strong&gt;Fix:&lt;/strong&gt; Put long data in the middle and strict rules at the top and bottom.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conflicting &amp;amp; Vague Rules:&lt;/strong&gt; Saying &lt;em&gt;"Be warm and casual, but sound like a strict lawyer. Make it pretty short."&lt;/em&gt; &lt;strong&gt;Fix:&lt;/strong&gt; Separate the role from the tone, and replace &lt;em&gt;"pretty short"&lt;/em&gt; with exact numbers (&lt;em&gt;"max 3 sentences"&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The "Pink Elephant" Problem:&lt;/strong&gt; Saying &lt;em&gt;"Do not think of a pink elephant"&lt;/em&gt; makes you picture one. Telling an AI what &lt;em&gt;not&lt;/em&gt; to do activates those words. &lt;strong&gt;Fix:&lt;/strong&gt; Tell it what &lt;strong&gt;to do&lt;/strong&gt; instead (&lt;em&gt;"Write 1 paragraph using 5th-grade words"&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sycophancy (Yes-Man Trap):&lt;/strong&gt; LLMs flatter confident users. &lt;strong&gt;Fix:&lt;/strong&gt; Detach your ego and ask it to find flaws: &lt;em&gt;"Here is an idea I found online. Act as a strict critic and list 3 ways it fails."&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  4. Structured Outputs
&lt;/h2&gt;

&lt;p&gt;Asking &lt;em&gt;"Please return only JSON"&lt;/em&gt; in a prompt is just a polite wish. The AI will eventually add &lt;code&gt;"Sure! Here is your JSON:"&lt;/code&gt; and crash your app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured Outputs&lt;/strong&gt; (Constrained Decoding) physically block invalid tokens by setting their probability to &lt;strong&gt;0%&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;AI&lt;/span&gt; &lt;span class="nx"&gt;wants&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sure!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;70&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;──►&lt;/span&gt; &lt;span class="nc"&gt;Blocked &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;❌&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Here&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;──►&lt;/span&gt; &lt;span class="nc"&gt;Blocked &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;❌&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;     &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;──►&lt;/span&gt; &lt;span class="nc"&gt;Allowed &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;✅&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Two rules I use for schemas:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use clear names + Enums:&lt;/strong&gt; Instead of &lt;code&gt;"s": string&lt;/code&gt;, use &lt;code&gt;"sentiment": "positive" | "negative" | "neutral"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always add a &lt;code&gt;| null&lt;/code&gt; escape hatch:&lt;/strong&gt; Valid JSON syntax does not mean true facts. If &lt;code&gt;"github_url": string&lt;/code&gt; is required and a resume has no link, the AI is forced to invent a fake URL just to obey the schema. Using &lt;code&gt;string | null&lt;/code&gt; lets it safely output &lt;code&gt;null&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  5. Prompting Reliably in Production
&lt;/h2&gt;

&lt;p&gt;Instead of testing a prompt once ("vibe checking") or writing one giant Mega-Prompt, reliable systems use &lt;strong&gt;Eval Sets&lt;/strong&gt; (20 to 50 saved test cases to catch regressions) and &lt;strong&gt;Prompt Chains&lt;/strong&gt; with retry guardrails:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Step&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Translate&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;──►&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Step&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Check&lt;/span&gt; &lt;span class="nx"&gt;Rule&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="err"&gt;──►&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;Guardrail &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="sr"&gt;/else&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="err"&gt;]
&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Fast&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;Cheap&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;       &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Smart&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                 &lt;span class="err"&gt;│&lt;/span&gt;
                            &lt;span class="err"&gt;▲&lt;/span&gt;                           &lt;span class="err"&gt;├─&lt;/span&gt; &lt;span class="nx"&gt;Pass&lt;/span&gt; &lt;span class="err"&gt;──►&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;UI&lt;/span&gt; &lt;span class="nx"&gt;Output&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                            &lt;span class="err"&gt;└───&lt;/span&gt; &lt;span class="nx"&gt;Retry&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt; &lt;span class="nx"&gt;Msg&lt;/span&gt; &lt;span class="err"&gt;─────┘&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Fail&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Splitting steps makes it easy to see where the output went wrong and adjust only that step.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. System Design: Fact-Checking Agent
&lt;/h2&gt;

&lt;p&gt;To put everything together, I designed an agentic workflow in Excalidraw for a fact-checking app called &lt;strong&gt;TruthPulse&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  Click to see the 3 bugs I fixed between V1 and V2
  &lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Search Queries vs. URLs:&lt;/strong&gt; In V1, I told the agent to pass a &lt;code&gt;url&lt;/code&gt; string to &lt;code&gt;Web_search_tool&lt;/code&gt;[cite: 1]. Since LLMs do not know today's URLs, they would hallucinate dead links. In V2, I changed this to pass &lt;code&gt;query: string&lt;/code&gt; (search keywords)[cite: 2].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nullable Error Field:&lt;/strong&gt; My V1 schema had &lt;code&gt;"error": string&lt;/code&gt;[cite: 1], which forced the AI to invent an error even when the check succeeded. In V2, I changed it to &lt;code&gt;"error": string | null&lt;/code&gt;[cite: 2].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retry Guardrail + Loop Limit:&lt;/strong&gt; I added a &lt;code&gt;{"retry": "true" | "false"}&lt;/code&gt; check after the search step[cite: 2], plus a &lt;code&gt;max_retries = 3&lt;/code&gt; cap so an unsearchable rumor does not loop forever.
&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Final System Diagram
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;                        &lt;span class="err"&gt;┌───────────┐&lt;/span&gt;
                        &lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="nx"&gt;Input&lt;/span&gt;   &lt;span class="err"&gt;│&lt;/span&gt;
                        &lt;span class="err"&gt;└─────┬─────┘&lt;/span&gt;
                              &lt;span class="err"&gt;▼&lt;/span&gt;
             &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;userMessage&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/userMessage&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;             &lt;span class="nx"&gt;Remember&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Only&lt;/span&gt; &lt;span class="nx"&gt;claim&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;given&lt;/span&gt; &lt;span class="nx"&gt;fact&lt;/span&gt;
                              &lt;span class="err"&gt;│&lt;/span&gt;
                              &lt;span class="err"&gt;▼&lt;/span&gt;
        &lt;span class="err"&gt;┌───────────────────────────────────────────┐&lt;/span&gt;
        &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Main&lt;/span&gt; &lt;span class="nx"&gt;Agent&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;Thinking &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="err"&gt;│◄────────────┐&lt;/span&gt;
        &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Strict fact checker... if invalid return │             │
        │  error, else pass query: string to tool&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;  &lt;span class="err"&gt;│&lt;/span&gt;             &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;└──────────┬───────────────────────┬────────┘&lt;/span&gt;             &lt;span class="err"&gt;│&lt;/span&gt;
                   &lt;span class="err"&gt;│&lt;/span&gt;                       &lt;span class="err"&gt;│&lt;/span&gt;                      &lt;span class="err"&gt;│&lt;/span&gt;
     &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt;                       &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Invalid&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="err"&gt;│&lt;/span&gt;
                   &lt;span class="err"&gt;▼&lt;/span&gt;                       &lt;span class="err"&gt;│&lt;/span&gt;                      &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;┌─────────────────────┐&lt;/span&gt;            &lt;span class="err"&gt;│&lt;/span&gt;                      &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="nx"&gt;Web_search_tool&lt;/span&gt;   &lt;span class="err"&gt;│&lt;/span&gt;            &lt;span class="err"&gt;│&lt;/span&gt;                      &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;└──────────┬──────────┘&lt;/span&gt;            &lt;span class="err"&gt;│&lt;/span&gt;         &lt;span class="nx"&gt;Retry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt;
                   &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;                &lt;span class="err"&gt;│&lt;/span&gt;      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;max_retries&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt;
                   &lt;span class="err"&gt;▼&lt;/span&gt;                       &lt;span class="err"&gt;│&lt;/span&gt;                      &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;┌─────────────────────┐&lt;/span&gt;            &lt;span class="err"&gt;│&lt;/span&gt;                      &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Judge&lt;/span&gt; &lt;span class="nx"&gt;Prompt&lt;/span&gt;        &lt;span class="err"&gt;│&lt;/span&gt;            &lt;span class="err"&gt;│&lt;/span&gt;                      &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;Compare&lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="err"&gt;│&lt;/span&gt;            &lt;span class="err"&gt;│&lt;/span&gt;                      &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="nx"&gt;userMessage&lt;/span&gt;         &lt;span class="err"&gt;│&lt;/span&gt;            &lt;span class="err"&gt;│&lt;/span&gt;                      &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;└──────────┬──────────┘&lt;/span&gt;            &lt;span class="err"&gt;│&lt;/span&gt;                      &lt;span class="err"&gt;│&lt;/span&gt;
                   &lt;span class="err"&gt;▼&lt;/span&gt;                       &lt;span class="err"&gt;│&lt;/span&gt;                      &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;┌─────────────────────┐&lt;/span&gt;            &lt;span class="err"&gt;│&lt;/span&gt;                      &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;retry&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;  &lt;span class="err"&gt;├────────────┼──────────────────────┘&lt;/span&gt;
        &lt;span class="err"&gt;│&lt;/span&gt;           &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="err"&gt;│&lt;/span&gt;            &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;└──────────┬──────────┘&lt;/span&gt;            &lt;span class="err"&gt;│&lt;/span&gt;
                   &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;                 &lt;span class="err"&gt;│&lt;/span&gt;
                   &lt;span class="err"&gt;▼&lt;/span&gt;                       &lt;span class="err"&gt;▼&lt;/span&gt;
        &lt;span class="err"&gt;┌───────────────────────────────────────────┐&lt;/span&gt;
        &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;                                         &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;thinking&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                     &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;claim&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;unverified&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;│&lt;/span&gt;   &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;                  &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;                                         &lt;span class="err"&gt;│&lt;/span&gt;
        &lt;span class="err"&gt;└───────────────────────────────────────────┘&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Takeaway
&lt;/h3&gt;

&lt;p&gt;The main thing I learned in Chapter 1 is that AI Engineering is not about finding one magic prompt. Because LLMs are probabilistic, the real work is building the tags, schemas, chains, and retry guardrails around the model so your app stays reliable even when the AI slips up.&lt;/p&gt;

&lt;p&gt;i hope reading really worth it for you,&lt;/p&gt;

&lt;p&gt;Make sure to drop (🔥,♥️,👍)&lt;/p&gt;

&lt;p&gt;And your comment really motivates me&lt;/p&gt;

&lt;p&gt;i am learning and sharing on the internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Have a nice Day:)&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>beginners</category>
      <category>llm</category>
    </item>
    <item>
      <title>Buy This, Not That, Drop This There” - I Made It Make Sense</title>
      <dc:creator>Taqui</dc:creator>
      <pubDate>Sat, 10 Oct 2026 20:47:01 +0000</pubDate>
      <link>https://dev.to/taqui/buy-this-not-that-drop-this-there-i-made-it-make-sense-336p</link>
      <guid>https://dev.to/taqui/buy-this-not-that-drop-this-there-i-made-it-make-sense-336p</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;Someone at home gives you a rapid-fire list while you are already halfway out the door:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Bring 1 litre milk. Don’t buy bread—we already have it. Drop the parcel at the post office. And get three notebooks.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most task apps make the person receiving that message do all the work: stop, type, split, remember, and interpret the cancellation correctly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nikalll turns that messy family request into a reviewed pocket card.&lt;/strong&gt; You can speak or paste the request, let an open-weight Gemma model propose the errands, review every item, confirm destinations, and carry the final card outside.&lt;/p&gt;

&lt;p&gt;The important part is not that AI produced a list. The important part is that &lt;strong&gt;cancelled items remain visible, quantities remain attached, uncertainty stays visible, and the person—not the model—approves what leaves the house.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Nikal is a voice-first family-errand handoff for the small, real-world jobs that usually arrive as noisy voice notes or mixed Hindi/Hinglish/English messages.&lt;/p&gt;

&lt;p&gt;It is for someone who is leaving home and needs to remember what another person asked them to buy, collect, or drop off.&lt;/p&gt;

&lt;p&gt;The flow is deliberately short:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Capture&lt;/strong&gt; — record a short voice note or paste the original message.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transcribe&lt;/strong&gt; — ElevenLabs Scribe v2 turns voice into editable text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extract&lt;/strong&gt; — Gemma, called through Backboard, proposes structured errands, quantities, cancellations, destination hints, and clarification questions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review &amp;amp; assign&lt;/strong&gt; — the original request stays visible while the person edits, cancels, defers, or assigns each item.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pocket card&lt;/strong&gt; — Nikal groups approved tasks by destination.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outside&lt;/strong&gt; — the person marks each item done, unavailable, deferred, or unresolved.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nikal is not an autonomous shopping agent. It does not buy anything, message anyone, discover shops, track GPS, or pretend that a model's valid JSON means the request was understood.&lt;/p&gt;

&lt;h3&gt;
  
  
  The failure this is designed to prevent
&lt;/h3&gt;

&lt;p&gt;The most dangerous failure is not a crash. It is a plausible-looking list that silently drops the important part:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Do not buy bread” becomes “buy bread.”&lt;/li&gt;
&lt;li&gt;“Two litres” loses its quantity.&lt;/li&gt;
&lt;li&gt;“Drop this at the post office” loses its destination.&lt;/li&gt;
&lt;li&gt;An unclear shop becomes a confident guess.&lt;/li&gt;
&lt;li&gt;An unavailable item is quietly counted as completed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nikal treats these as product states, not edge cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the card preserves
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Included errands.&lt;/li&gt;
&lt;li&gt;Explicitly cancelled errands.&lt;/li&gt;
&lt;li&gt;Deferred or unresolved errands.&lt;/li&gt;
&lt;li&gt;Quantities and units.&lt;/li&gt;
&lt;li&gt;The user's original source text.&lt;/li&gt;
&lt;li&gt;Destination assignments and manual corrections.&lt;/li&gt;
&lt;li&gt;Honest completion outcomes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The prepared workspace is saved in versioned browser storage. The AI request is online and hosted; the prepared local card does not require another model call to mark outcomes. I do &lt;strong&gt;not&lt;/strong&gt; claim that this prototype is a fully offline AI application or a verified installable PWA.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://nikalll.onrender.com/" rel="noopener noreferrer"&gt;nikalll.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Video demo:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/3vN4cAlVAzs" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The video walkthrough shows the complete story rather than a feature tour:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start with a messy family request.&lt;/li&gt;
&lt;li&gt;Keep the cancellation and quantity visible.&lt;/li&gt;
&lt;li&gt;Let Gemma produce a draft.&lt;/li&gt;
&lt;li&gt;Correct or confirm the destination in the review step.&lt;/li&gt;
&lt;li&gt;Prepare the pocket card.&lt;/li&gt;
&lt;li&gt;Mark one task complete and leave an unavailable/deferred state visible.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the hosted providers are unavailable, the app keeps the source and offers the manual path instead of manufacturing a successful AI result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/taqui-786" rel="noopener noreferrer"&gt;
        taqui-786
      &lt;/a&gt; / &lt;a href="https://github.com/taqui-786/nikalll" rel="noopener noreferrer"&gt;
        nikalll
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🚶 Nikalll (WalkRecall)&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;&lt;em&gt;Turn chaotic doorstep voice notes into a structured, offline-ready errand card.&lt;/em&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://nikalll.onrender.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3c7a07f089e868d18ec175600f07a273569089f8312e517d7a7865e485c86cc2/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c69766525323044656d6f2d6e696b616c6c6c2e6f6e72656e6465722e636f6d2d737563636573733f7374796c653d666f722d7468652d6261646765266c6f676f3d72656e646572" alt="Live Demo"&gt;&lt;/a&gt;
&lt;a href="https://nextjs.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/94ff1ea486067066748cadbd8039c35dad5016823166cb666ca0f2e09e025312/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6578742e6a732d31362e342d626c61636b3f7374796c653d666f722d7468652d6261646765266c6f676f3d6e6578742e6a73" alt="Next.js 16"&gt;&lt;/a&gt;
&lt;a href="https://ai.google.dev/gemma" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/652b91ad6c31cec161aa0fe66ce9a0532c820c33f168cbf2de240b6f62e8cded/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f476f6f676c652d47656d6d612d2d342d2d3331422d3432383546343f7374796c653d666f722d7468652d6261646765266c6f676f3d676f6f676c65" alt="Google Gemma"&gt;&lt;/a&gt;
&lt;a href="https://elevenlabs.io/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/939a530c28350a215a29ba3e9575bdc993afc81d1f2ec7cf8eda322326f3a945/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f456c6576656e4c6162732d53637269626525323076322d6f72616e67653f7374796c653d666f722d7468652d6261646765266c6f676f3d656c6576656e6c616273" alt="ElevenLabs"&gt;&lt;/a&gt;
&lt;a href="https://www.typescriptlang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/36cf5d83769e679b215b08b8375de2dbc427290de2f1cb2585a3120d614d9833/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d5374726963742532304d6f64652d626c75653f7374796c653d666f722d7468652d6261646765266c6f676f3d74797065736372697074" alt="TypeScript Strict"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Speak once before leaving home, review in seconds, and walk out with a glanceable neighborhood checklist that works completely offline.&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nikalll.onrender.com/" rel="nofollow noopener noreferrer"&gt;Explore Live Demo&lt;/a&gt; · &lt;a href="https://github.com/taqui-786/nikalll#-architecture" rel="noopener noreferrer"&gt;Architecture&lt;/a&gt; · &lt;a href="https://github.com/taqui-786/nikalll#-key-features" rel="noopener noreferrer"&gt;Features&lt;/a&gt; · &lt;a href="https://github.com/taqui-786/nikalll#-quick-start" rel="noopener noreferrer"&gt;Quick Start&lt;/a&gt;&lt;/p&gt;



&lt;br&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;💡 The Problem: The "Doorstep Voice Note" Chaos&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Every time you step out of the house, your mother, roommate, or partner shouts a rapid-fire, chaotic list of errands:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Arre suno! Bahar ja rahe ho toh sabzi mandi se 1 kg aloo aur dhaniya le lena... par tamatar mat lana ghar pe already hain... phir kirana store se 2 litre doodh aur dahi le lena, par bread bilkul mat lana... aur chemist se BP syrup le lena, band-aid mat lana wo drawer me hai!"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Why traditional tools fail:&lt;/h3&gt;

&lt;/div&gt;


&lt;ol&gt;

&lt;li&gt;

&lt;strong&gt;To-Do Apps are too slow:&lt;/strong&gt; No one has the time or patience to manually type 8 separate items with…&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/taqui-786/nikalll" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;The project is a Next.js + TypeScript application with the domain contracts, provider boundaries, tests, and setup instructions committed alongside the UI.&lt;/p&gt;

&lt;p&gt;The most relevant areas are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;app/page.tsx&lt;/code&gt; — the capture, review, and pocket-card flow.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app/api/extract/route.ts&lt;/code&gt; — bounded, consented text-extraction boundary.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app/api/transcribe/route.ts&lt;/code&gt; — bounded audio-upload boundary.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lib/server/backboard.ts&lt;/code&gt; — explicit Backboard provider/model request.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lib/server/elevenlabs.ts&lt;/code&gt; — ElevenLabs Speech-to-Text adapter.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lib/domain/&lt;/code&gt; — schemas and deterministic card/evidence logic.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tests/&lt;/code&gt; — domain and provider-normalization regression tests.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Open-weight AI is the core, not decoration
&lt;/h3&gt;

&lt;p&gt;Gemma performs the central interpretation task: turning conversational, mixed-language household instructions into a bounded extraction draft.&lt;/p&gt;

&lt;p&gt;The browser never chooses the provider or model. The server selects them from environment configuration and sends a fixed prompt with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;explicit provider and model names;&lt;/li&gt;
&lt;li&gt;non-streaming output;&lt;/li&gt;
&lt;li&gt;JSON output requested as a formatting aid;&lt;/li&gt;
&lt;li&gt;memory disabled;&lt;/li&gt;
&lt;li&gt;web search disabled;&lt;/li&gt;
&lt;li&gt;no tools or autonomous actions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The default repository configuration uses Gemma through the &lt;code&gt;openrouter&lt;/code&gt; provider in Backboard. The exact model is server-configurable; the repository default is &lt;code&gt;google/gemma-3-27b-it&lt;/code&gt;. No API key is sent to the client.&lt;/p&gt;

&lt;p&gt;Gemma's output is not trusted just because it is JSON. Zod validates the response, and the server checks that every evidence quote occurs verbatim in the original source. The model cannot return trusted destination IDs, application IDs, timestamps, completion states, or approval decisions.&lt;/p&gt;

&lt;h3&gt;
  
  
  ElevenLabs is a focused input boundary
&lt;/h3&gt;

&lt;p&gt;Voice is useful because the original problem often starts as speech. ElevenLabs Scribe v2 handles transcription; Nikal then shows the transcript as editable text before extraction.&lt;/p&gt;

&lt;p&gt;Audio uploads are size-bounded, accepted only through the server route, and not stored as application data. The UI can always fall back to text entry.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deterministic code owns trust-sensitive decisions
&lt;/h3&gt;

&lt;p&gt;Ordinary TypeScript—not the model—owns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;schema validation;&lt;/li&gt;
&lt;li&gt;evidence matching;&lt;/li&gt;
&lt;li&gt;destination alias matching;&lt;/li&gt;
&lt;li&gt;inclusion/cancellation/deferment state;&lt;/li&gt;
&lt;li&gt;card preparation rules;&lt;/li&gt;
&lt;li&gt;local persistence;&lt;/li&gt;
&lt;li&gt;outcome tracking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An included item without a confirmed destination cannot enter the prepared card. An unresolved item must be resolved or explicitly deferred. An unavailable item is never silently marked done.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Next.js 16 App Router&lt;/li&gt;
&lt;li&gt;React 19 and strict TypeScript&lt;/li&gt;
&lt;li&gt;Tailwind CSS 4 with the existing shadcn/Base UI setup&lt;/li&gt;
&lt;li&gt;Hugeicons&lt;/li&gt;
&lt;li&gt;Zod for runtime contracts&lt;/li&gt;
&lt;li&gt;Gemma via Backboard for extraction&lt;/li&gt;
&lt;li&gt;ElevenLabs Scribe v2 for transcription&lt;/li&gt;
&lt;li&gt;Render for the public deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Learned From the First Attempt
&lt;/h2&gt;

&lt;p&gt;My previous hackathon project taught me that a polished interface and a long feature list are not evidence that the core problem was solved.&lt;/p&gt;

&lt;p&gt;So this project is intentionally narrower. The demo has one complete story: a messy request, a source-linked AI draft, a human review, a pocket card, and an honest outcome. I kept the original text visible because an extraction that looks correct can still be wrong. I kept cancellation and uncertainty as first-class states because hiding them is worse than showing an incomplete result.&lt;/p&gt;

&lt;p&gt;I also removed claims that I could not prove:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hosted Gemma is not described as offline AI;&lt;/li&gt;
&lt;li&gt;browser persistence is not described as a fully offline PWA;&lt;/li&gt;
&lt;li&gt;a model's JSON is not described as approval;&lt;/li&gt;
&lt;li&gt;destination labels are not described as live shop discovery;&lt;/li&gt;
&lt;li&gt;no accuracy percentage is claimed without a labelled, held-out evaluation;&lt;/li&gt;
&lt;li&gt;an unavailable errand is not converted into a success state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most useful engineering decision was to make provider output cross a small, boring boundary: validate it, verify its evidence against the original message, then let deterministic application code decide what the user can approve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;The open model is useful here because Nikal is not trying to replace a person with an opaque assistant. It is trying to make a messy human handoff inspectable and correctable.&lt;/p&gt;

&lt;p&gt;With an open-weight model at the center of the extraction step:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the model and provider can be changed without rewriting the product workflow;&lt;/li&gt;
&lt;li&gt;the extraction prompt and JSON contract can be inspected;&lt;/li&gt;
&lt;li&gt;failures can be compared against a manual baseline instead of hidden behind a chat interface;&lt;/li&gt;
&lt;li&gt;the application can keep approval, evidence, and completion outside the model;&lt;/li&gt;
&lt;li&gt;a future self-hosted Gemma deployment could reduce the hosted-data boundary for sensitive household messages;&lt;/li&gt;
&lt;li&gt;the same safety contract can validate different open models.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Backboard gives the application an explicit model boundary rather than a browser-side vendor dependency. I can select the Gemma provider/model on the server, turn memory and web search off, and keep the rest of the app independent of that choice.&lt;/p&gt;

&lt;p&gt;ElevenLabs is deliberately smaller in scope: it solves the voice-capture problem, then hands editable text to the same review pipeline. It does not become a second decision-maker.&lt;/p&gt;

&lt;p&gt;There is an important caveat: the current public deployment uses hosted services. Open innovation makes the model layer replaceable and inspectable; it does not magically make hosted inference private. Nikal tells the user when a request is sent for transcription or extraction.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I built Nikal with &lt;strong&gt;OmniRush.ai&lt;/strong&gt; as a coding and review partner. The agent helped with the architecture, domain contracts, provider boundaries, failure handling, and test cases; I made the product decisions and kept the final scope focused on one physical-world handoff.&lt;/p&gt;

&lt;p&gt;I am not embedding a DevRelay session link in this draft because I do not have a public saved-session URL to link to. This section can be removed before publishing, or replaced with the DevRelay URL if one is created.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; — Gemma is responsible for the core interpretation problem: quantities, negations, cancellations, destination hints, and clarification candidates in noisy household language. It is not decorative chat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Backboard&lt;/strong&gt; — Backboard is the explicit server-side model boundary. The request fixes the provider/model, disables memory and web search, requests structured output, and validates the result before it reaches the review UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs&lt;/strong&gt; — ElevenLabs Scribe v2 handles the short voice-note transcription path and returns editable text before extraction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render&lt;/strong&gt; — the working Next.js application and its provider-backed routes are publicly deployed at &lt;a href="https://nikalll.onrender.com/" rel="noopener noreferrer"&gt;nikalll.onrender.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built by &lt;a href="https://dev.to/taqui"&gt;@taqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If this is a team submission, teammates should be credited here with their DEV usernames before publishing.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Drop your feedback guyzz</title>
      <dc:creator>Taqui</dc:creator>
      <pubDate>Mon, 05 Oct 2026 14:43:36 +0000</pubDate>
      <link>https://dev.to/taqui/drop-your-feedback-guyzz-i3p</link>
      <guid>https://dev.to/taqui/drop-your-feedback-guyzz-i3p</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/taqui/tiffintally-my-contribution-to-my-friends-family-business-4ih5" class="crayons-story__hidden-navigation-link"&gt;TiffinTally - my contribution to my friend's family business&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/taqui/tiffintally-my-contribution-to-my-friends-family-business-4ih5" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Hacktoberfest Weekend Challenge: Build for a Friend Submission 🤝&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/taqui" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F1193992%2F356d8c9d-b375-4cd1-9cf9-32dafadd9695.png" alt="taqui profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/taqui" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Taqui
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Taqui
                
                
              
              &lt;div id="story-author-preview-content-4797546" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/taqui" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1193992%2F356d8c9d-b375-4cd1-9cf9-32dafadd9695.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Taqui&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/taqui/tiffintally-my-contribution-to-my-friends-family-business-4ih5" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 4&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/taqui/tiffintally-my-contribution-to-my-friends-family-business-4ih5" id="article-link-4797546"&gt;
          TiffinTally - my contribution to my friend's family business
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hf26challenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hf26challenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/taqui/tiffintally-my-contribution-to-my-friends-family-business-4ih5" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;35&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/taqui/tiffintally-my-contribution-to-my-friends-family-business-4ih5#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              2&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>showdev</category>
      <category>software</category>
      <category>startup</category>
    </item>
    <item>
      <title>TiffinTally - my contribution to my friend's family business</title>
      <dc:creator>Taqui</dc:creator>
      <pubDate>Sun, 04 Oct 2026 20:41:53 +0000</pubDate>
      <link>https://dev.to/taqui/tiffintally-my-contribution-to-my-friends-family-business-4ih5</link>
      <guid>https://dev.to/taqui/tiffintally-my-contribution-to-my-friends-family-business-4ih5</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Hey there, my name is &lt;strong&gt;&lt;a href="https://taqui.in/" rel="noopener noreferrer"&gt;Taqui&lt;/a&gt;&lt;/strong&gt;. I am a fullstack web developer, and this time I wanted to build something useful outside my usual developer projects.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;&lt;a href="https://tiffintally.onrender.com/" rel="noopener noreferrer"&gt;TiffinTally&lt;/a&gt;&lt;/strong&gt;, a small contribution to my friend’s family kitchen :)&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%2Fgc4egp1sb4r7uv0pag29.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%2Fgc4egp1sb4r7uv0pag29.png" alt="dashboardpage" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The family story below is fictionalized. Customer counts and messages are illustrative, and real seller feedback is still pending.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The setup is a friend's family business in Noida, in the Gautam Buddh Nagar district of Uttar Pradesh, India. His mother and older sister prepare daily lunches for people who moved there for work.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Some customers live away from their families. They don't want restaurant food every afternoon. They want a simple home-cooked lunch that reaches them at the office&lt;br&gt;
.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The business has around 18 to 24 monthly regulars. Small enough to know everyone, but enough for daily changes to become difficult.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You wonder,&lt;br&gt;
What's the Problem i solving with this app ?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;My Answer -&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;The cooking isn't the confusing part. The &lt;strong&gt;WhatsApp messages&lt;/strong&gt; are.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Aunty, no lunch tomorrow.”&lt;/p&gt;

&lt;p&gt;“Please send two extra on Friday.”&lt;/p&gt;

&lt;p&gt;“I am going home for three days.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One person is cooking. Another is packing. A message arrives between both jobs.&lt;/p&gt;

&lt;p&gt;Now someone has to remember the change, update the lunch count, tell the delivery helper, and account for it at the end of the month.&lt;/p&gt;

&lt;p&gt;A missed cancellation means an extra lunch gets packed. A missed request means someone doesn't get theirs. And later, “I skipped those three days” becomes another chat to search.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TiffinTally keeps the request, the approved change, the packing list, and the monthly statement connected.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Customers can keep using WhatsApp. The kitchen gets a clearer way to manage what happens after the message arrives.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://tiffintally.onrender.com/" rel="noopener noreferrer"&gt;TiffinTally&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the workflow, one screen at a time.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Start with today's kitchen desk
&lt;/h3&gt;

&lt;p&gt;The dashboard shows the selected service date, approved meal total, and requests waiting for review.&lt;/p&gt;

&lt;p&gt;It has a personal greeting and a kitchen-notebook layout. I wanted it to feel like a working lunch register, not a dashboard full of unrelated charts.&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%2Fq02av45iqn7d4qzdblko.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%2Fq02av45iqn7d4qzdblko.png" alt="landingpage" width="799" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Connect the kitchen's WhatsApp
&lt;/h3&gt;

&lt;p&gt;The seller connects the kitchen phone through a QR code and links contacts to customer records.&lt;/p&gt;

&lt;p&gt;Incoming messages from linked customers can be captured for review. Automatic analysis needs the AI providers configured.&lt;/p&gt;

&lt;p&gt;There is also a manual “Add message” option.&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%2F906my2odhdg68yn6mhrv.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%2F906my2odhdg68yn6mhrv.png" alt="whatsappconnection" width="799" height="403"&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%2Fk64ywhon5bpf1wi6hk95.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%2Fk64ywhon5bpf1wi6hk95.png" alt="kitchen" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Read voice notes too
&lt;/h3&gt;

&lt;p&gt;Not every customer types their changes.&lt;/p&gt;

&lt;p&gt;The WhatsApp audio path uses &lt;strong&gt;ElevenLabs Scribe v2&lt;/strong&gt; to turn a voice note into text. That text then enters the same review workflow.&lt;/p&gt;

&lt;p&gt;This integration is implemented with mocked API tests. A live customer voice-note walkthrough is still pending.&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%2Fy8l8o03tddep9bez4j5h.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%2Fy8l8o03tddep9bez4j5h.png" alt="voicenote" width="800" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Review before changing anything
&lt;/h3&gt;

&lt;p&gt;The seller can read the original message beside the proposed change, check the dates and quantities, and edit or approve it.&lt;/p&gt;

&lt;p&gt;Unclear requests stay marked for attention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI creates a draft. It does not approve the order.&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%2Fc5orka5km0tomm4vr1af.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%2Fc5orka5km0tomm4vr1af.png" alt="reviewandapprove" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Keep regular customers organized
&lt;/h3&gt;

&lt;p&gt;Customer records hold names, packing notes, and schedules. Manual proposals handle changes that arrive through a call or conversation instead of WhatsApp.&lt;/p&gt;

&lt;p&gt;Settings hold the kitchen timezone, planning time, cutoff, and customer limits.&lt;/p&gt;

&lt;p&gt;Prices and delivery setup add each customer's agreed meal rate, billing number, building, and delivery note.&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%2Ftpw3g9susm9w8im2fkqz.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%2Ftpw3g9susm9w8im2fkqz.png" alt="customers" width="799" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Finalize the packing sheet
&lt;/h3&gt;

&lt;p&gt;Approved changes feed the daily packing quantities.&lt;/p&gt;

&lt;p&gt;The seller finalizes a version of the sheet before handing it over. If current packing facts change, a fresh sheet is needed.&lt;/p&gt;

&lt;p&gt;A pending draft cannot quietly change what gets packed.&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%2Fuhml6uwl00h7cxumlfho.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%2Fuhml6uwl00h7cxumlfho.png" alt="approvesheet" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Explain the monthly bill
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Bill book&lt;/strong&gt; shows dated quantities and charges from finalized sheets.&lt;/p&gt;

&lt;p&gt;Skips and extras reconcile into the total without deducting the same skipped meal twice. An agreed half-portion charge can be entered as a dated adjustment with a reason.&lt;/p&gt;

&lt;p&gt;Issued statements are saved as immutable versions. Revisions reference the previous statement and warn customers not to pay both.&lt;/p&gt;

&lt;p&gt;Sharing opens a WhatsApp composer for the seller to review and send. It does not mark a bill paid or prove a delivery happened.&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%2Ftt52w8d5flmhtivb71a8.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%2Ftt52w8d5flmhtivb71a8.png" alt="billbook" width="415" height="790"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Give the helper Ramesh Mode
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Ramesh Mode&lt;/strong&gt; groups positive meal quantities by the buildings or routes the seller entered.&lt;/p&gt;

&lt;p&gt;Cancelled stops appear separately under “Do not stop today.” Unassigned deliveries remain visible instead of disappearing.&lt;/p&gt;

&lt;p&gt;The helper gets a practical handover summary, not the whole billing workspace.&lt;/p&gt;

&lt;p&gt;This is building-based grouping, not GPS route optimization.&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%2Fjgq9khbfyo3l8m1kssji.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%2Fjgq9khbfyo3l8m1kssji.png" alt="ramesh mode" width="800" height="985"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Keep forecasts separate from orders
&lt;/h3&gt;

&lt;p&gt;The forecasting section is advisory. It cannot change confirmed meals.&lt;/p&gt;

&lt;p&gt;The planned &lt;strong&gt;TabPFN&lt;/strong&gt; path uses historical meal changes and structured message signals. Hosted prediction integration and real-history validation are still unfinished, so I am not claiming a working demand forecast.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/taqui-786/tiffintally" rel="noopener noreferrer"&gt;Source repository: TiffinTally&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I used &lt;strong&gt;Next.js, React, TypeScript, Tailwind CSS, and shadcn/ui&lt;/strong&gt; for the app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TanStack Query&lt;/strong&gt; handles reads and refreshing data after actions. &lt;strong&gt;Better Auth&lt;/strong&gt; provides Google sign-in. &lt;strong&gt;Zod&lt;/strong&gt; validates inputs and model outputs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemma reads the request
&lt;/h3&gt;

&lt;p&gt;The configured model is &lt;strong&gt;Gemma 4 31B IT&lt;/strong&gt;, accessed through &lt;strong&gt;Backboard&lt;/strong&gt; using its OpenRouter provider.&lt;/p&gt;

&lt;p&gt;It extracts proposed meal changes with supporting quotes from the original message.&lt;/p&gt;

&lt;p&gt;The app checks those quotes against the source. A confident-looking answer with invalid evidence does not become an approved order.&lt;/p&gt;

&lt;h3&gt;
  
  
  JEV asks a different set of questions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;TypeSafe's JEV&lt;/strong&gt;, pinned to &lt;code&gt;jev-1.13.0&lt;/code&gt;, independently classifies the request.&lt;/p&gt;

&lt;p&gt;Is it a pause, a quantity change, or something unclear? Does it explicitly replace the regular schedule? Are necessary details missing?&lt;/p&gt;

&lt;p&gt;Disagreement or uncertainty becomes a review warning. JEV is another signal, not a guarantee that Gemma is correct.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backboard connects both stages
&lt;/h3&gt;

&lt;p&gt;Both models use the Backboard SDK, with separate threads and memory disabled.&lt;/p&gt;

&lt;p&gt;An approved fictional live test produced a validated review candidate through the Gemma/JEV pair. That checks the integration, not accuracy across real customer conversations.&lt;/p&gt;

&lt;h3&gt;
  
  
  MongoDB keeps the approved facts
&lt;/h3&gt;

&lt;p&gt;The persistence layer targets &lt;strong&gt;MongoDB Atlas&lt;/strong&gt;, using seller-scoped records, revision checks, transactions, and request receipts.&lt;/p&gt;

&lt;p&gt;Approval and money calculations are ordinary application code, not model-generated arithmetic.&lt;/p&gt;

&lt;p&gt;Amounts use integer paise. Repeated requests use idempotency keys. If a save result is uncertain, the UI checks the original receipt rather than blindly submitting it again.&lt;/p&gt;

&lt;h3&gt;
  
  
  The checks have limits too
&lt;/h3&gt;

&lt;p&gt;I checked the layouts with &lt;strong&gt;279 isolated browser-rendering cases&lt;/strong&gt;, covering mobile, tablet, desktop, and short landscape sizes using fictional data.&lt;/p&gt;

&lt;p&gt;Those checks do not replace watching someone use the app on their own phone. The authenticated seller walkthrough and real family handover remain next steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Gemma is an open-weight model, so the extraction stage is not tied permanently to one closed model API.&lt;/p&gt;

&lt;p&gt;I can inspect the prompts, change the validation, and evaluate another serving option without rebuilding the packing and billing rules.&lt;/p&gt;

&lt;p&gt;A closed API could also extract messages. The benefit here is having more control over the model choice and the surrounding workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open-weight does not mean offline.&lt;/strong&gt; This build uses hosted inference, and ElevenLabs transcription is hosted too.&lt;/p&gt;

&lt;p&gt;The important boundary is visible in the code: models suggest changes, while the seller approves them and deterministic code calculates the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I built TiffinTally with AI assistance in &lt;strong&gt;omnirush.ai&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The work included the review pipeline, billing reconciliation, delivery handover, and responsive layouts.&lt;/p&gt;

&lt;p&gt;One useful failure was a Gemma quote with an incorrect evidence offset. The validator rejected it. I corrected the prompt and kept the strict check instead of weakening it to accept the answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; Open-weight message extraction with source-linked review drafts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Backboard:&lt;/strong&gt; The shared SDK integration for the Gemma and JEV stages, tested with fictional live requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of MongoDB Atlas:&lt;/strong&gt; The application's persistence design for seller-scoped approvals, packing sheets, and statements. Live authenticated commerce verification remains pending.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of ElevenLabs:&lt;/strong&gt; Scribe v2 integration for WhatsApp voice-note transcription. Live end-to-end transcription remains pending. &lt;a href="https://elevenlabs.io" rel="noopener noreferrer"&gt;ElevenLabs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am not claiming TabPFN or Sentry categories from configuration or unfinished integration alone.&lt;/p&gt;

&lt;p&gt;The goal is pretty simple: let the family spend more time cooking, and less time figuring out which lunch changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thankyou for reading, i hope you liked it :)
&lt;/h2&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Guys need your shitty feedback here</title>
      <dc:creator>Taqui</dc:creator>
      <pubDate>Tue, 29 Sep 2026 17:00:53 +0000</pubDate>
      <link>https://dev.to/taqui/guys-need-your-shitty-feedback-here-3b8g</link>
      <guid>https://dev.to/taqui/guys-need-your-shitty-feedback-here-3b8g</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/taqui/my-craziest-side-project-yet-drawva-2iom" class="crayons-story__hidden-navigation-link"&gt;My Craziest Side Project Yet: Drawva&lt;/a&gt;
    &lt;div class="crayons-article__cover crayons-article__cover__image__feed"&gt;
      &lt;iframe src="https://www.youtube.com/embed/MM1mFiCGg6w" title="My Craziest Side Project Yet: Drawva"&gt;&lt;/iframe&gt;
    &lt;/div&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/taqui" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F1193992%2F356d8c9d-b375-4cd1-9cf9-32dafadd9695.png" alt="taqui profile" class="crayons-avatar__image" width="730" height="717"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/taqui" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Taqui
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Taqui
                
                
              
              &lt;div id="story-author-preview-content-4765726" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/taqui" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1193992%2F356d8c9d-b375-4cd1-9cf9-32dafadd9695.png" class="crayons-avatar__image" alt="" width="730" height="717"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Taqui&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/taqui/my-craziest-side-project-yet-drawva-2iom" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 28&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/taqui/my-craziest-side-project-yet-drawva-2iom" id="article-link-4765726"&gt;
          My Craziest Side Project Yet: Drawva
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mlhacks"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mlhacks&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hackathon"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hackathon&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/taqui/my-craziest-side-project-yet-drawva-2iom" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;32&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/taqui/my-craziest-side-project-yet-drawva-2iom#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

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

&lt;/div&gt;


</description>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>My Craziest Side Project Yet: Drawva</title>
      <dc:creator>Taqui</dc:creator>
      <pubDate>Mon, 28 Sep 2026 16:52:46 +0000</pubDate>
      <link>https://dev.to/taqui/my-craziest-side-project-yet-drawva-2iom</link>
      <guid>https://dev.to/taqui/my-craziest-side-project-yet-drawva-2iom</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/mlh-hackathon"&gt;MLH x DEV Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Hey there, my name is &lt;a href="https://taqui.in/" rel="noopener noreferrer"&gt;Taqui&lt;/a&gt;. I am a fullstack web developer. When I started coding back in 2020, things were simple and skills had the highest priority. Lately, with the rapid rise of AI and the tough job market, I have felt pretty cookeddd. But instead of sitting back and questioning my career choice, I decided to dive headfirst into Agentic AI and GenAI to build a serious, real-world system from scratch.&lt;/p&gt;

&lt;p&gt;That project is &lt;strong&gt;Drawva&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Drawva is an infinite canvas whiteboard engine powered by a multimodal AI perception agent. Unlike typical whiteboards where your strokes are just static pixels, Drawva actually looks at your canvas, understands your hand-drawn gestures, and turns them into live diagrams, interactive code widgets, and math equations.&lt;/p&gt;

&lt;h3&gt;
  
  
  DeepSeek Harness (DSH) Agent Runtime
&lt;/h3&gt;

&lt;p&gt;Under the hood, Drawva runs a modular DeepSeek Harness system built on a Cordis microkernel runtime:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent Loop &amp;amp; Tool Runtime:&lt;/strong&gt; Handles multi-turn tool calling through typed contracts (&lt;code&gt;canvas_apply&lt;/code&gt;, &lt;code&gt;canvas_snapshot&lt;/code&gt;, &lt;code&gt;canvas_read&lt;/code&gt;, &lt;code&gt;canvas_patch_widget&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token Meter &amp;amp; Compaction:&lt;/strong&gt; Uses a tool-result pruner and basic compaction to keep agent context tight and cost-effective during long sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session Projection:&lt;/strong&gt; Preserves agent state and conversation history across streaming SSE steps.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Specialized Prompt Techniques
&lt;/h3&gt;

&lt;p&gt;Getting an LLM to accurately interact with a freehand 2D canvas required custom prompt engineering contracts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coordinate Contract:&lt;/strong&gt; Mathematical pixel-to-global transforms so the AI calculates exact millimeter coordinates from visual snapshots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Heading Redundancy:&lt;/strong&gt; The AI treats the user's handwritten words as the title. It never outputs duplicate title banners, keeping the canvas looking naturally co-authored.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid Wireframe Utilization:&lt;/strong&gt; If you sketch a 3-box wireframe, the AI does not erase it. It leaves your pen lines intact and renders live data directly inside your drawn boxes with 100% transparent backdrops.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two-Command In-Place Replacement:&lt;/strong&gt; When turning a rough sketch into an interactive applet, the agent emits an atomic erase command first to clear the ink, followed immediately by the mounted widget.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native Sketchnoting:&lt;/strong&gt; A dedicated mode that uses pure vector strokes to sketch 3D loss surfaces, neural net graphs, and complex planes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Extensible On-Demand Plugins
&lt;/h3&gt;

&lt;p&gt;Drawva features 11 extensible runtime plugins loaded dynamically via &lt;code&gt;load_plugin&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Data:&lt;/strong&gt; Weather, Stocks, Tech News (Hacker News), Earthquakes (USGS), Space Weather, and Currency Exchange Rates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer &amp;amp; Media:&lt;/strong&gt; GitHub Pulse (live repo stars, forks, velocity), Image Search (server-side photo resolution for sandboxed widgets), and Flowcharts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7 Diagram Engines &amp;amp; P2P Sync
&lt;/h3&gt;

&lt;p&gt;Drawva supports 7 sandboxed diagram runtimes (Mermaid, Graphviz DOT, Vega-Lite charts, SMILES molecular structures, BPMN, Cytoscape, GeoJSON) alongside MathJax LaTeX typesetting. Everything autosaves to IndexedDB, and users can collaborate peer-to-peer over WebRTC with zero central server databases.&lt;/p&gt;

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

&lt;p&gt;Here is a full walkthrough video showing Drawva in action, from freehand sketching to live diagram rendering:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/MM1mFiCGg6w" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Direct video link: &lt;a href="https://youtu.be/MM1mFiCGg6w" rel="noopener noreferrer"&gt;Drawva Demo on YouTube&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/taqui-786/drawva" rel="noopener noreferrer"&gt;https://github.com/taqui-786/drawva&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live App:&lt;/strong&gt; &lt;a href="https://drawva.vercel.app/" rel="noopener noreferrer"&gt;https://drawva.vercel.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community cooks:&lt;/strong&gt; &lt;a href="https://drawva.vercel.app//community" rel="noopener noreferrer"&gt;https://drawva.vercel.app/community&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Partner Technologies
&lt;/h2&gt;

&lt;p&gt;Building Drawva pushed me to integrate modern fullstack and AI technologies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DeepSeek Harness (DSH):&lt;/strong&gt; Powered the core agent runtime, tool execution lifecycle, token metering, and compaction pruning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16 (App Router) &amp;amp; React 19:&lt;/strong&gt; Provided the streaming foundation, handling Server-Sent Events (SSE) and fast client hydration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vercel AI SDK &amp;amp; Multimodal LLMs:&lt;/strong&gt; Connected the canvas to vision models like Google Gemini 2.5, OpenAI GPT-4o, and local Ollama models for high-resolution visual inspection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS v4 &amp;amp; Base UI:&lt;/strong&gt; Used to build our dark-mode UI with custom neon lime tokens, floating tool docks, and accessible dialogs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; The entire codebase is open-source on GitHub, where I tracked features, plugin contracts, and releases.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Hackathon Experience
&lt;/h2&gt;

&lt;p&gt;Tbh this was my first hackathon 😅. And Over the past few months, I had been losing my confidence as a developer, wondering if AI was making my hard-earned skills obsolete. &lt;/p&gt;

&lt;p&gt;Building Drawva was not the only goad for this hackathon. The main purpose is that new &lt;strong&gt;Deepseek Harness&lt;/strong&gt; in the market and it is opensources, So i decided to learn how the harness is build and end up integrating the mini-kernal in this project.&lt;/p&gt;

&lt;p&gt;This experience proved to me that as developers, our value is not gone. We just have to evolve, pick up Agentic AI, and build ambitious tools that solve real problems.&lt;/p&gt;




&lt;h3&gt;
  
  
  That's it man
&lt;/h3&gt;

&lt;p&gt;Look, the tech market is wild right now and we all feel cooked some days. But if AI is taking over the world, I am not going down without building the craziest open-source tools I possibly can. &lt;/p&gt;

&lt;p&gt;Go open Drawva, draw the ugliest, most crooked scribble you can think of, and watch the AI turn it into art. Aslo also also don't forget to share you crazyy dravs to the comminuty page (we have one our community page) &lt;/p&gt;

&lt;p&gt;And if it crashes, roast me in the GitHub issues or open a PR. And if this gave you even 1% of your developer spark back, smash a star on the repo. Let us reclaim our builder aura :)&lt;/p&gt;

</description>
      <category>mlhacks</category>
      <category>devchallenge</category>
      <category>hackathon</category>
      <category>ai</category>
    </item>
    <item>
      <title>Microsoft Up 15%. Me? 100% Down.</title>
      <dc:creator>Taqui</dc:creator>
      <pubDate>Sun, 02 Aug 2026 15:33:51 +0000</pubDate>
      <link>https://dev.to/taqui/the-ai-trade-split-bruh-even-wall-street-is-confused-about-ai-aek</link>
      <guid>https://dev.to/taqui/the-ai-trade-split-bruh-even-wall-street-is-confused-about-ai-aek</guid>
      <description>&lt;p&gt;hey there, so i wanted to share something with you. this is a bit personal but i have been watching the news this week and bruh... things are not going good. i am jobless right now, no other source of income, and day by day things are getting worse. and the worst part? AI is literally fuking every job in the software field. so when i saw this week's stock market drama, it hit me different.&lt;/p&gt;

&lt;p&gt;Microsoft popped. Meta tanked. Same AI boom. Two completely opposite reactions. and all i could think was... yeah, this is exactly my life right now.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Numbers, Bruh
&lt;/h2&gt;

&lt;p&gt;let me break it down real quick because this is wild:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Microsoft&lt;/strong&gt; jumped like 15% after beating expectations. Azure grew 43%. full year Azure revenue crossed $100 billion. insane.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Meta&lt;/strong&gt; dropped 8–9% after missing on guidance. their free cash flow collapsed 91% year-over-year to just $784 million. like... 91%?? gone.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;same AI boom. same crazy spending. and the market said "you're amazing" to one and "you're done" to the other.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Microsoft Won
&lt;/h2&gt;

&lt;p&gt;Microsoft actually showed receipts. they didn't just talk about AI, they showed the money coming in. Azure is growing, Copilot is making real revenue, investors can literally see the line between billions spent and billions earned.&lt;/p&gt;

&lt;p&gt;lesson? Wall Street doesn't hate AI spending. it hates AI spending without proof.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Meta Lost
&lt;/h2&gt;

&lt;p&gt;Meta's problem is that nobody can see where the money comes back. Zuckerberg talked about the "AI capacity dilemma" — how much compute to keep for yourself vs sell to others. but guidance missed, free cash flow went to hell, and the market was like... nah bro, i need answers.&lt;/p&gt;

&lt;p&gt;and honestly? i relate to that feeling more than i want to admit. putting everything into something and people still saying "not enough."&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;this week is a preview of everything coming. companies are dumping hundreds of billions into data centers, chips, and models, all betting AI demand keeps exploding. the ones who can prove it pays off? they get rewarded. the ones who can't? they get crushed.&lt;/p&gt;

&lt;p&gt;and us devs? we're the ones caught in the middle. chips are booming — Lam Research jumped 20%, Micron went crazy. but the jobs? they're disappearing.&lt;/p&gt;

&lt;p&gt;bruh, i remember the days before Claude and Cursor. things were so good. i had my aura, man. i was a fuking awesome engineer. i built cool projects, wrote articles that people genuinely loved, got stars and forks on my repos, my articles had views, likes, comments... and i loved replying to every single one of them. i had so much self confidence back then.&lt;/p&gt;

&lt;p&gt;i miss those days so badly. i wish i could get back to them.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Means for Us
&lt;/h2&gt;

&lt;p&gt;AI isn't a single trade anymore. it's a scoreboard. companies that turn AI into a revenue engine win. companies that treat it like a science project lose. Microsoft showed the winning formula. Meta showed what happens when you can't explain the money.&lt;/p&gt;

&lt;p&gt;and for people like me? i guess it means we have to adapt. find the new aura. rebuild. i don't know how yet, but i have to.&lt;/p&gt;

&lt;p&gt;ahh... i wish those days would come back again. i wish i get my aura back again.&lt;/p&gt;

&lt;p&gt;anyway, thanks for reading. this one was personal. i hope things get better for all of us out here.&lt;/p&gt;

&lt;p&gt;thankyou.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>machinelearning</category>
      <category>news</category>
    </item>
    <item>
      <title>Great Read</title>
      <dc:creator>Taqui</dc:creator>
      <pubDate>Mon, 25 May 2026 15:34:46 +0000</pubDate>
      <link>https://dev.to/taqui/great-read-gcf</link>
      <guid>https://dev.to/taqui/great-read-gcf</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/sylwia-lask/nobody-writes-clean-code-we-all-just-pretend-11d1" class="crayons-story__hidden-navigation-link"&gt;Nobody Writes Clean Code. We All Just Pretend&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/sylwia-lask" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3535771%2Fe22860d5-274b-43c9-819b-56b162e5bd5a.jpeg" alt="sylwia-lask profile" class="crayons-avatar__image" width="800" height="806"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/sylwia-lask" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Sylwia Laskowska
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Sylwia Laskowska
                
                
              
              &lt;div id="story-author-preview-content-3074477" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/sylwia-lask" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3535771%2Fe22860d5-274b-43c9-819b-56b162e5bd5a.jpeg" class="crayons-avatar__image" alt="" width="800" height="806"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Sylwia Laskowska&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/sylwia-lask/nobody-writes-clean-code-we-all-just-pretend-11d1" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Dec 1 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/sylwia-lask/nobody-writes-clean-code-we-all-just-pretend-11d1" id="article-link-3074477"&gt;
          Nobody Writes Clean Code. We All Just Pretend
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/sylwia-lask/nobody-writes-clean-code-we-all-just-pretend-11d1" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;211&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/sylwia-lask/nobody-writes-clean-code-we-all-just-pretend-11d1#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

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

&lt;/div&gt;


</description>
      <category>coding</category>
      <category>discuss</category>
      <category>programming</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>The Company Is Strong. So Why Are 4,000 People Gone?</title>
      <dc:creator>Taqui</dc:creator>
      <pubDate>Sat, 28 Feb 2026 06:10:58 +0000</pubDate>
      <link>https://dev.to/taqui/the-company-is-strong-so-why-are-4000-people-gone-3hfj</link>
      <guid>https://dev.to/taqui/the-company-is-strong-so-why-are-4000-people-gone-3hfj</guid>
      <description>&lt;p&gt;Going to be a rant.&lt;/p&gt;

&lt;p&gt;We just watched a CEO &lt;a href="https://x.com/md_taqui_imam/status/2027274834665992342?s=20" rel="noopener noreferrer"&gt;tweet &lt;/a&gt; that they’re making their company “smaller” and not because revenue collapsed, not because the product failed, not because customers left, but because they can. Nearly half the company, over 4,000 people, gone in one move while the business is still growing, improving profitability, and serving more customers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read that again.&lt;/strong&gt; This wasn’t survival mode, this was optimization mode.&lt;/p&gt;

&lt;p&gt;The tone of the tweet was calm, transparent, even generous with severance and benefits, which somehow makes it more unsettling. &lt;/p&gt;

&lt;p&gt;The logic was simple: intelligence tools plus flatter teams equal a new way of running a company. Faster decisions, fewer layers, more output per person. So leadership chose to act now instead of cutting slowly over years. And this is what people are missing in the AI debate. It’s not about whether AI writes better code. It’s about compression.&lt;/p&gt;

&lt;p&gt;If a strong, profitable company can say “we need fewer people because AI changes how work gets done,” then the baseline just shifted. Layoffs used to be reactive. Now they’re proactive. “Profitable” used to mean safe. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now it doesn’t.&lt;/strong&gt; This isn’t framed as survival, it’s framed as restructuring for an intelligence-driven future. And once companies realize 10 people can do the work of 15, they don’t keep 15 out of kindness. They optimize for margins. That’s the uncomfortable truth.&lt;/p&gt;

&lt;p&gt;AI isn’t just a tool inside products anymore, it’s becoming the operating system of companies. And operating systems are designed for efficiency. If this is happening while models are still early, what happens in three years? Maybe the real question isn’t whether AI replaces developers. Maybe it’s how many developers a modern company actually needs. Because once leaders decide that number is lower, they don’t drift toward it. They jump. And that jump is what we just saw.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rant over.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>news</category>
    </item>
    <item>
      <title>Built Something Crazy This Week – Inkash</title>
      <dc:creator>Taqui</dc:creator>
      <pubDate>Sat, 14 Feb 2026 13:45:51 +0000</pubDate>
      <link>https://dev.to/taqui/built-something-crazy-this-week-inkash-17g1</link>
      <guid>https://dev.to/taqui/built-something-crazy-this-week-inkash-17g1</guid>
      <description>&lt;p&gt;Hey dev's 👋 it's me &lt;strong&gt;&lt;a href="https://taqui.vercel.app" rel="noopener noreferrer"&gt;Taqui&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This week I built something that actually pushed me hard.&lt;/p&gt;

&lt;p&gt;It’s called &lt;strong&gt;Inkash&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live:&lt;/strong&gt; &lt;a href="https://inkash.vercel.app" rel="noopener noreferrer"&gt;https://inkash.vercel.app&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/taqui-786/inkash" rel="noopener noreferrer"&gt;https://github.com/taqui-786/inkash&lt;/a&gt; (Drop a Star ⭐) &lt;/p&gt;

&lt;p&gt;Inkash is a smart link generator that compresses real data into a short shareable URL.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No database.&lt;/li&gt;
&lt;li&gt;No backend storage.&lt;/li&gt;
&lt;li&gt;The data lives inside the URL itself.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That was the fun part.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Inkash Actually Does
&lt;/h2&gt;

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

&lt;ol&gt;
&lt;li&gt;Take user input
&lt;/li&gt;
&lt;li&gt;Compress it using the deflate algorithm
&lt;/li&gt;
&lt;li&gt;Convert it into a URL-safe string
&lt;/li&gt;
&lt;li&gt;Generate a shareable link
&lt;/li&gt;
&lt;li&gt;On load, decompress and restore the original content
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So large content becomes a compact link.&lt;br&gt;&lt;br&gt;
When someone opens it, everything rebuilds instantly on the client.&lt;/p&gt;

&lt;p&gt;It feels kind of crazy seeing big data turn into a short URL and still restore perfectly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;it also has markdown editor you can us&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.amazonaws.com%2Fuploads%2Farticles%2Fuxfrv2ic908f8cl16ot7.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%2Fuxfrv2ic908f8cl16ot7.png" alt="editor" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Sharing Feature:
&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.amazonaws.com%2Fuploads%2Farticles%2Ftrd3uos39qda6tu9lddw.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%2Ftrd3uos39qda6tu9lddw.png" alt="Sharing" width="799" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The cool thing is,&lt;/p&gt;

&lt;p&gt;You can generate the QR-code of the link and share it&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%2Fw1y5kjwlfr5d5ewqckkd.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%2Fw1y5kjwlfr5d5ewqckkd.png" alt="QR-code" width="799" height="410"&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.amazonaws.com%2Fuploads%2Farticles%2F5ybgvawnn5xodyciaq9b.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%2F5ybgvawnn5xodyciaq9b.png" alt="save it" width="800" height="120"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Core Compression Logic (Simplified)
&lt;/h2&gt;

&lt;p&gt;Here’s a simplified version of how compression and decompression works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;deflate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;inflate&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pako&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;compressData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;compressed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;deflate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;btoa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromCharCode&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;compressed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;decompressData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;encoded&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;binary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;atob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;encoded&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Uint8Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;binary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;charCodeAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;inflate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Under the hood, it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses the deflate algorithm to reduce payload size
&lt;/li&gt;
&lt;li&gt;Converts binary compressed data into Base64
&lt;/li&gt;
&lt;li&gt;Makes the output URL safe
&lt;/li&gt;
&lt;li&gt;Restores everything safely on load
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Technical Challenges
&lt;/h2&gt;

&lt;p&gt;The real challenge was not just compression.&lt;/p&gt;

&lt;p&gt;It was making sure everything works safely inside a browser URL.&lt;/p&gt;

&lt;p&gt;Here are some things I had to handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Making compressed output URL safe
&lt;/li&gt;
&lt;li&gt;Handling corrupted or invalid hashes
&lt;/li&gt;
&lt;li&gt;Respecting browser URL length limits
&lt;/li&gt;
&lt;li&gt;Preventing UI crashes during decompression
&lt;/li&gt;
&lt;li&gt;Managing edge cases with large payloads
&lt;/li&gt;
&lt;li&gt;Keeping everything fully client-side
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If even one character in the URL changes, decompression can fail. So proper validation and error handling was very important.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;Next.js
&lt;/li&gt;
&lt;li&gt;TypeScript
&lt;/li&gt;
&lt;li&gt;Client-side compression using pako
&lt;/li&gt;
&lt;li&gt;Modern UI components
&lt;/li&gt;
&lt;li&gt;Clean and scalable architecture
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no database involved.&lt;/p&gt;

&lt;p&gt;The link itself is the storage.&lt;/p&gt;

&lt;p&gt;That was the main experiment and honestly the most fun part.&lt;/p&gt;




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

&lt;p&gt;Building Inkash taught me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How the deflate algorithm works in real usage
&lt;/li&gt;
&lt;li&gt;Binary to Base64 transformations
&lt;/li&gt;
&lt;li&gt;URL encoding and safety concerns
&lt;/li&gt;
&lt;li&gt;Browser URL length constraints
&lt;/li&gt;
&lt;li&gt;How easy it is to break decoding
&lt;/li&gt;
&lt;li&gt;How to build something useful without a backend
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project broke many times before it became stable. But once it worked, it felt clean and kind of magical.&lt;/p&gt;

&lt;p&gt;If you check it out, I would really love honest feedback.&lt;/p&gt;

&lt;p&gt;What would you improve or add to something like this?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
    <item>
      <title>This portfolio isn’t perfect, but it’s 100% mine</title>
      <dc:creator>Taqui</dc:creator>
      <pubDate>Sat, 24 Jan 2026 06:26:18 +0000</pubDate>
      <link>https://dev.to/taqui/this-portfolio-isnt-perfect-but-its-100-mine-3hi5</link>
      <guid>https://dev.to/taqui/this-portfolio-isnt-perfect-but-its-100-mine-3hi5</guid>
      <description>&lt;p&gt;Hey devs 👋 its me Taqui&lt;/p&gt;

&lt;p&gt;Just wanted to share the story behind my &lt;strong&gt;last&lt;/strong&gt; portfolio.&lt;/p&gt;

&lt;p&gt;I already had a portfolio before this. It looked cool, it worked fine, but for some &lt;strong&gt;reason&lt;/strong&gt; it never felt like it was really mine. I couldn’t fully connect with it.&lt;/p&gt;

&lt;p&gt;The truth is, my older portfolio was mostly a rebuild of &lt;strong&gt;chandai’s&lt;/strong&gt; portfolio. I learned a lot from building it, especially about layout, animations, and structure. But at the end of the day, it still felt like I was wearing someone else’s design.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So I decided to start again. From zero.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;This time,&lt;/strong&gt; I made one clear rule for myself:&lt;br&gt;
Build something from my own ideas, my own layout decisions, and my own taste.&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%2F68wszlu252fm1amezsde.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%2F68wszlu252fm1amezsde.png" alt="Full page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I did take inspiration from other great portfolios (because that’s how we all learn), but every section, spacing choice, and interaction was designed and built by me. No copying. No rebuilding someone else’s work.&lt;/p&gt;
&lt;h3&gt;
  
  
  Tech stack I used:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Next.js
&lt;/li&gt;
&lt;li&gt;Tailwind CSS (mostly custom styles)
&lt;/li&gt;
&lt;li&gt;Very little shadcn/ui, only where it made sense, like the contact form
&lt;/li&gt;
&lt;li&gt;Small UI details and interactions done manually instead of relying on libraries
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you open the site, you’ll notice a subtle &lt;strong&gt;fade-in blur animation.&lt;/strong&gt; That was intentional. I wanted the site to feel calm and smooth, not flashy or loud. Something that feels pleasant to scroll through.&lt;/p&gt;

&lt;p&gt;This isn’t my first portfolio.&lt;br&gt;&lt;br&gt;
But it’s the first one that &lt;strong&gt;truly feels like *me&lt;/strong&gt;*.&lt;br&gt;&lt;br&gt;
And because of that, I’m calling it my last portfolio.&lt;/p&gt;

&lt;p&gt;I’ve attached a demo banner image above so you can get a quick idea of the look and feel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live URL (new portfolio):&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://taqui.vercel.app" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Checkout its live 🚀&lt;/a&gt;
 &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source code:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/taqui-786/taqui" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Drop a ⭐ on Github&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;If you’re curious, feel free to check it out.&lt;br&gt;&lt;br&gt;
And if the code helps you or inspires you in any way, &lt;strong&gt;dropping a GitHub star&lt;/strong&gt; would honestly mean a lot ⭐&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%2F1hpha1ol9wpb0otafogq.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%2F1hpha1ol9wpb0otafogq.png" alt="my footer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback is welcome.
&lt;/h2&gt;

&lt;p&gt;Happy Show Off Saturday 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>I Built Everything Fast… Then One Page Destroyed My Confidence</title>
      <dc:creator>Taqui</dc:creator>
      <pubDate>Tue, 09 Dec 2025 07:04:12 +0000</pubDate>
      <link>https://dev.to/taqui/i-built-everything-fast-then-one-page-destroyed-my-confidence-ik9</link>
      <guid>https://dev.to/taqui/i-built-everything-fast-then-one-page-destroyed-my-confidence-ik9</guid>
      <description>&lt;p&gt;Hey buddy, &lt;/p&gt;

&lt;p&gt;So… I built almost the whole app. Shipped every hard thing. Solved every annoying bug.&lt;/p&gt;

&lt;p&gt;And then &lt;strong&gt;one single page&lt;/strong&gt; came out of nowhere and said:&lt;br&gt;&lt;br&gt;
“Bro, sit down.”&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%2Fel30nef8fyrnuydxjws6.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%2Fel30nef8fyrnuydxjws6.png" alt="snapgroove"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome to my life with &lt;strong&gt;Snapgroove&lt;/strong&gt; - a tiny tool I’m building to make your screenshots look less like a cry for help. Give them shadows, gradients, device frames… all in one click. Basically: &lt;em&gt;make your work look expensive without knowing design.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And guess what?&lt;br&gt;&lt;br&gt;
&lt;strong&gt;The core app is done.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Like actually done.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Editor works
&lt;/li&gt;
&lt;li&gt;Image export is smooth
&lt;/li&gt;
&lt;li&gt;All features tested
&lt;/li&gt;
&lt;li&gt;Logo and branding ready
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Live here → &lt;strong&gt;&lt;a href="https://snapgroove.vercel.app" rel="noopener noreferrer"&gt;https://snapgroove.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But then…&lt;br&gt;&lt;br&gt;
The landing page happened.&lt;br&gt;&lt;br&gt;
And suddenly I felt like I forgot how to think.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;The Fun Part: Building the Actual App&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;As a full-stack dev, building features is my comfort zone.&lt;br&gt;&lt;br&gt;
Give me logic, give me APIs, give me bugs that ruin my sleep - I will survive.&lt;/p&gt;

&lt;p&gt;Snapgroove came together pretty fast:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A clean editor
&lt;/li&gt;
&lt;li&gt;Nice export flow
&lt;/li&gt;
&lt;li&gt;Simple UI
&lt;/li&gt;
&lt;li&gt;It’s all open-source too: &lt;strong&gt;taqui-786/Snapgroove&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/taqui-786/Snapgroove" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;I even vibe-coded some layouts for the landing page.&lt;br&gt;&lt;br&gt;
But honestly? Everything felt &lt;strong&gt;too generic&lt;/strong&gt; or &lt;strong&gt;too messy&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
I’m just not great at design stuff. And this is the part that always slows me down on every project I make.&lt;/p&gt;

&lt;p&gt;And yes, I know the app itself is still not perfect. It’s in beta. I’m improving it as fast as I can. But landing pages… bro… they hit different.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Not-So-Fun Part: The Landing Page Breakdown&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;It’s wild how I can build a full editor in a single sitting, but a landing page will take my brain hostage for days.&lt;/p&gt;

&lt;p&gt;I tried multiple layouts.&lt;br&gt;&lt;br&gt;
I tried being creative.&lt;br&gt;&lt;br&gt;
I even told myself, “Just ship it, nobody cares.”&lt;/p&gt;

&lt;p&gt;But I care.&lt;br&gt;&lt;br&gt;
And nothing feels right.&lt;/p&gt;

&lt;p&gt;Landing pages are weird.&lt;br&gt;&lt;br&gt;
You need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Good design
&lt;/li&gt;
&lt;li&gt;Clean layout
&lt;/li&gt;
&lt;li&gt;The right words
&lt;/li&gt;
&lt;li&gt;The right vibe
&lt;/li&gt;
&lt;li&gt;Something that doesn’t scream “bro, we know you’re a developer”
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And I’m still figuring that out.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;What I Need Help With (Yes, You 😭)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you’re reading this, I’d honestly love your input.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Take a quick look at the app
&lt;/li&gt;
&lt;li&gt;Tell me what confused you
&lt;/li&gt;
&lt;li&gt;Suggest what the landing page should highlight
&lt;/li&gt;
&lt;li&gt;Share any design inspo sites you use
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anything helps.&lt;br&gt;&lt;br&gt;
I’m a developer who’s way better at &lt;strong&gt;building things&lt;/strong&gt; than &lt;strong&gt;selling them&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
So any tips, design ideas, or copy advice… I’ll take it all.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why I’m Even Sharing This&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Because building stuff is fun.&lt;br&gt;&lt;br&gt;
But being stuck alone makes it harder.&lt;/p&gt;

&lt;p&gt;And I know I’m not the only dev who can ship complex features in 2 hours but can’t pick a font for 2 weeks.&lt;/p&gt;

&lt;p&gt;If you feel the same, you’re not alone.&lt;br&gt;&lt;br&gt;
We’re in the same boat, staring at Figma like it’s a final exam.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Thanks for Reading 🙏&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you have even 2 minutes, your design brain cells could save my entire project.&lt;/p&gt;

&lt;p&gt;Drop any tips.&lt;br&gt;&lt;br&gt;
Share any inspo.&lt;br&gt;&lt;br&gt;
Tell me what looks weird.&lt;br&gt;&lt;br&gt;
Or just say “yo this looks clean” so I don’t cry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App:&lt;/strong&gt; &lt;a href="https://snapgroove.vercel.app" rel="noopener noreferrer"&gt;https://snapgroove.vercel.app&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Codebase:&lt;/strong&gt; taqui-786/Snapgroove&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
