<?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: GEEK</title>
    <description>The latest articles on DEV Community by GEEK (@geek_).</description>
    <link>https://dev.to/geek_</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3717629%2Ff98e8ddb-8e14-45fc-a4f4-c17139cea15d.gif</url>
      <title>DEV Community: GEEK</title>
      <link>https://dev.to/geek_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/geek_"/>
    <language>en</language>
    <item>
      <title>What Actually Happens When You Run `npx @deepseek-ai/dsh web`</title>
      <dc:creator>GEEK</dc:creator>
      <pubDate>Mon, 17 Aug 2026 12:29:33 +0000</pubDate>
      <link>https://dev.to/geek_/what-actually-happens-when-you-run-npx-deepseek-aidsh-web-2jfm</link>
      <guid>https://dev.to/geek_/what-actually-happens-when-you-run-npx-deepseek-aidsh-web-2jfm</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F158fvttp3mgb1r2wbr5o.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%2F158fvttp3mgb1r2wbr5o.png" alt="https://github.com/deepseek-ai/deepseek-harness" width="799" height="349"&gt;&lt;/a&gt;&lt;br&gt;
DeepSeek Harness (DSH) got a lot of attention for being usable with a single line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @deepseek-ai/dsh web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That opens a local Web UI at &lt;code&gt;http://127.0.0.1:3080&lt;/code&gt;. It genuinely works. But "it started" and "I know what I'm running" are different things, and the answers to the obvious follow-up questions — why is it asking for an API key, why is the composer locked, what does "everything is a plugin" mean for me, is a random plugin safe — are spread across &lt;strong&gt;four different files&lt;/strong&gt; in the official repo.&lt;/p&gt;

&lt;p&gt;I've been assembling a reference site for DSH, which meant reading all four closely. This post connects them. Every claim below is from the official docs; I'm just holding the pieces together.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;code&gt;dsh&lt;/code&gt; is a launcher, not the app
&lt;/h2&gt;

&lt;p&gt;The CLI spec describes itself precisely:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The &lt;code&gt;dsh&lt;/code&gt; command is the product launcher for profiles: ordered stacks of plugin-bundle patch layers under the user's own overrides.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When you run &lt;code&gt;npx @deepseek-ai/dsh web&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The launcher parses only its own flags (&lt;code&gt;src/args.ts&lt;/code&gt; owns the grammar; &lt;code&gt;bin.ts&lt;/code&gt; loads only the selected runner). Invalid commands, options from another mode, config errors, and boot failures &lt;strong&gt;exit nonzero&lt;/strong&gt; — good news if you script around it.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;web&lt;/code&gt; is an alias for &lt;code&gt;--profile web&lt;/code&gt;, which boots a profile living under &lt;code&gt;$DSH_HOME/profiles/web&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;web&lt;/code&gt; and &lt;code&gt;headless&lt;/code&gt; profiles &lt;strong&gt;auto-initialize from shipped templates on first use&lt;/strong&gt;. That's why zero-config works. Any other profile name must be created through &lt;code&gt;dsh plugin&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A detail people miss: &lt;strong&gt;your current working directory becomes the default filesystem root&lt;/strong&gt;. "The &lt;code&gt;dsh&lt;/code&gt; process uses its invoking directory as the default filesystem location." Where you launch from is not a neutral choice.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. "Everything is a plugin" is a layering system, not a slogan
&lt;/h2&gt;

&lt;p&gt;Each profile directory holds a &lt;code&gt;package.json&lt;/code&gt; (with a &lt;code&gt;dsh.profile&lt;/code&gt; manifest listing &lt;strong&gt;ordered bundles&lt;/strong&gt;) and a &lt;code&gt;cordis.patch.yml&lt;/code&gt; (your override layer). The final plugin tree composes in this order:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;each bundle's patch, in dsh.profile.bundles order
→ the profile's own cordis.patch.yml
→ the home-level $DSH_HOME/cordis.patch.yml
→ --patch command-line overlays
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bundle resolution: built-ins first (&lt;code&gt;@deepseek-ai/dsh-base&lt;/code&gt;, &lt;code&gt;dsh-web-app&lt;/code&gt;, &lt;code&gt;dsh-headless&lt;/code&gt;, installed with dsh itself), then the profile's own &lt;code&gt;node_modules&lt;/code&gt; — which is exactly where &lt;strong&gt;third-party plugins&lt;/strong&gt; land.&lt;/p&gt;

&lt;p&gt;This architecture explains both halves of the DSH experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The flexibility&lt;/strong&gt;: swapping models, tools, session storage, even the UI is a config change, not a fork.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The warning&lt;/strong&gt;: the README capitalizes "THERE WILL BE COMPATIBILITY-BREAKING CHANGES." When the whole product is a composed tree, any layer's interface change ripples upward. In developer preview, that's structural, not attitude.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. The three gates of first run
&lt;/h2&gt;

&lt;p&gt;Gate 1: &lt;strong&gt;API key.&lt;/strong&gt; Settings → Models, paste, save. Three details worth knowing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No restart needed.&lt;/strong&gt; "Model changes take effect on the next request without restarting the server." Just use it.&lt;/li&gt;
&lt;li&gt;Keys are &lt;strong&gt;write-only&lt;/strong&gt;: after saving, the UI only ever shows a redacted descriptor. You can't read it back.&lt;/li&gt;
&lt;li&gt;The key lives in &lt;code&gt;$DSH_HOME/.credentials.yaml&lt;/code&gt;; settings retain only a credential reference. Keep that in mind before you sync or screenshot config directories.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gate 2: &lt;strong&gt;workspace.&lt;/strong&gt; The guide is blunt: "The session composer remains unavailable until a workspace is selected." The composer is locked, not broken — click Choose workspace, add the directory you launched &lt;code&gt;dsh&lt;/code&gt; from, and select it. The agent reads, edits, and runs commands around that workspace, and the UI asks for approval on operations that require it under the active permission policy.&lt;/p&gt;

&lt;p&gt;Gate 3: &lt;strong&gt;the first task.&lt;/strong&gt; The official guide suggests:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Summarize this repository and identify its main packages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's a good first prompt because it's read-only and easy to verify by hand. Get one read-only task fully working before you let an agent touch code.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The vision-model gotcha
&lt;/h2&gt;

&lt;p&gt;If you add a custom model by hand, DSH treats it as &lt;strong&gt;text-only by default&lt;/strong&gt;: "A model you entered by hand is treated as text-only until it says otherwise." To accept images, declare the modality on the model in &lt;code&gt;$DSH_HOME/settings.yaml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;llm-pi-ai&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;my-gateway&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;apiKeyEnv&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;GATEWAY_API_KEY&lt;/span&gt;
      &lt;span class="na"&gt;api&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;openai-completions&lt;/span&gt;
      &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://gateway.example/v1&lt;/span&gt;
      &lt;span class="na"&gt;models&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;vision-preview&lt;/span&gt;
          &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the sharper edge, straight from the docs: &lt;strong&gt;DeepSeek's own chat-completions route is text-only and cannot be configured otherwise.&lt;/strong&gt; Vision requires a custom provider with a vision model, or a community plugin. Most people learn this only after an attachment gets refused.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Third-party plugins are npm packages
&lt;/h2&gt;

&lt;p&gt;The plugin command's mechanics are one sentence in the CLI spec:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dsh plugin &lt;span class="nt"&gt;--profile&lt;/span&gt; &amp;lt;name&amp;gt; &amp;lt;pnpm args&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It &lt;strong&gt;forwards your args to pnpm inside the profile directory&lt;/strong&gt;. A third-party plugin is a regular npm dependency running under your user permissions. Same threat model as any npm install: think &lt;code&gt;postinstall&lt;/code&gt; scripts, env vars, network access. The Awesome list explicitly says listing ≠ security review.&lt;/p&gt;

&lt;p&gt;Before installing, check at least: the repo's activity, the license, what its install scripts do, and which capabilities it actually needs (files, shell, network, credentials). The official discovery surface is the GitHub &lt;a href="https://github.com/topics/dsh-plugin" rel="noopener noreferrer"&gt;&lt;code&gt;dsh-plugin&lt;/code&gt; topic&lt;/a&gt; — the README asks plugin authors to tag their repos with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Preview-era survival kit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;See the composed tree without booting anything:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dsh &lt;span class="nt"&gt;--profile&lt;/span&gt; web &lt;span class="nt"&gt;--dump-default-config&lt;/span&gt;   &lt;span class="c"&gt;# what the default composition is&lt;/span&gt;
dsh &lt;span class="nt"&gt;--profile&lt;/span&gt; web &lt;span class="nt"&gt;--dump-config&lt;/span&gt;           &lt;span class="c"&gt;# what YOUR composition actually is&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the most underused debugging command in the whole CLI. "Is my config even in the tree?" — answered statically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One-shot, no UI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dsh &lt;span class="nt"&gt;--profile&lt;/span&gt; headless &lt;span class="s2"&gt;"Inspect the repository and fix the failing tests."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Runs a fresh persisted session, prints the final answer, exits. Scriptable by design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Python SDK:&lt;/strong&gt; &lt;code&gt;pip install deepseek-harness-sdk&lt;/code&gt; ships a bundled runtime — no system Node.js required. Two caveats from the guide: the checked-in example composition runs &lt;code&gt;danger-full-access&lt;/code&gt; (use a disposable checkout or container), and its persistent PTY backend needs POSIX, so no Windows agents in that composition.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;None of this is secret — it's all in the repo. It's just spread across the README, the CLI spec, and two guides, and nothing links the launcher to the first-run experience end to end. Once you see the shape — launcher → profile → layered plugin tree → workspace-gated session — the individual behaviors stop being surprising.&lt;/p&gt;

&lt;p&gt;I maintain a community reference for exactly this kind of thing — install paths, a curated plugin directory with permission notes, compatibility and troubleshooting pages, organized around "finish your first real task": &lt;a href="https://deepseekharness101.com" rel="noopener noreferrer"&gt;deepseekharness101.com&lt;/a&gt;. The &lt;a href="https://deepseekharness101.com/plugins" rel="noopener noreferrer"&gt;plugin directory&lt;/a&gt; and &lt;a href="https://deepseekharness101.com/troubleshooting" rel="noopener noreferrer"&gt;troubleshooting section&lt;/a&gt; are the most-linked pages.&lt;/p&gt;

&lt;p&gt;Docs will drift — it's a preview. The mechanisms won't. Good first run.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>devtools</category>
      <category>tutorial</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The hard part of building with AI isn't the code — it's catching the BS</title>
      <dc:creator>GEEK</dc:creator>
      <pubDate>Mon, 27 Jul 2026 05:00:00 +0000</pubDate>
      <link>https://dev.to/geek_/the-hard-part-of-building-with-ai-isnt-the-code-its-catching-the-bs-58m6</link>
      <guid>https://dev.to/geek_/the-hard-part-of-building-with-ai-isnt-the-code-its-catching-the-bs-58m6</guid>
      <description>&lt;p&gt;A game called Pathogenic launched on July 16. It's a roguelike where you play as a parasite inside the human body. By launch day, I had a full wiki for it live: guides, databases, patch notes, the works.&lt;/p&gt;

&lt;p&gt;I'm not a developer. I'm a product manager. I don't write code. I used an AI coding agent (Claude Code) to build the whole thing — Next.js, Cloudflare Workers, SSR, the content pipeline, all of it.&lt;/p&gt;

&lt;p&gt;And the experience taught me something that I think gets lost in the "AI will replace developers" discourse:&lt;/p&gt;

&lt;p&gt;The code was the easy part. The hard part was catching the bullshit.&lt;/p&gt;

&lt;p&gt;What "building with AI" actually looks like&lt;/p&gt;

&lt;p&gt;Here's my actual workflow. I don't open an editor. I open a terminal and talk to an AI agent in plain language — English, actually Chinese most of the time, since that's my first language. I say things like "rewrite the beginner guide to be more player-facing" or "the Co-op page needs a troubleshooting section." The agent writes the code, edits the data files, runs the build, runs the tests, deploys to production.&lt;/p&gt;

&lt;p&gt;It's fast. Shockingly fast. A full guide page — 1,200 words of content, structured data for SEO, optimized images, internal links, FAQ section — takes maybe 20 minutes from idea to deployed.&lt;/p&gt;

&lt;p&gt;But here's what nobody tells you: the AI will confidently write things that are wrong, and they'll look completely right.&lt;/p&gt;

&lt;p&gt;The content quality trap&lt;/p&gt;

&lt;p&gt;My wiki covers game mechanics. Things like "how does Overcharge work" and "what's the Brain boss weak to." These are factual claims. If I publish wrong information, players lose trust instantly.&lt;/p&gt;

&lt;p&gt;Early on, I told the AI to research how Burn damage works in the game. It came back with a beautifully written explanation — specific organelles, damage numbers, stacking rules. Sounded perfect.&lt;/p&gt;

&lt;p&gt;None of it was real.&lt;/p&gt;

&lt;p&gt;The AI had pulled fragments from medical literature (pathogenic bacteria, burn wounds) and a completely different board game called "Pathogenesis" and woven them into something that looked authoritative. If I'd published that, the wiki would have been dead on arrival.&lt;/p&gt;

&lt;p&gt;So I built a rule: every claim has to link to a source. Official patch notes, developer replies, or community gameplay videos. If I can't source it, I don't publish it. The AI does the research; I verify the research.&lt;/p&gt;

&lt;p&gt;Where it got real&lt;/p&gt;

&lt;p&gt;Last week, a player commented on my Steam guide. They said: "There is a shop in the Brain area."&lt;/p&gt;

&lt;p&gt;My guide said there was no shop. I had written that confidently, based on the fact that a gameplay video I watched didn't show one. The AI had helped me write it.&lt;/p&gt;

&lt;p&gt;The player was specific: the shop barely gives you currency, but the parts are always legendary tier.&lt;/p&gt;

&lt;p&gt;I had two choices: trust the player's comment and change my guide, or verify first.&lt;/p&gt;

&lt;p&gt;I almost changed it immediately. My instinct was "a player who's actually played the Brain knows more than I do." But then I caught myself. One comment isn't verification. I searched for independent confirmation. Couldn't find any. The video I'd watched didn't mention a shop either — but that's not the same as confirming there isn't one.&lt;/p&gt;

&lt;p&gt;So I changed the wording to something neutral: "finish your build before entering the Brain." Not "there's no shop" and not "there is a shop." Just practical advice that works either way.&lt;/p&gt;

&lt;p&gt;That's the job. Not writing content. Not writing code. Catching the moments where something sounds right but isn't confirmed, and making a judgment call.&lt;/p&gt;

&lt;p&gt;What I actually spend my time on&lt;/p&gt;

&lt;p&gt;If I'm honest, the split looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;20% telling the AI what to build&lt;/li&gt;
&lt;li&gt;30% reviewing what it produced&lt;/li&gt;
&lt;li&gt;30% verifying facts against sources&lt;/li&gt;
&lt;li&gt;20% arguing with the AI about tone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one is real. The AI writes in this weird "helpful assistant" register — everything is "comprehensive" and "seamless" and "it's worth noting that." I spend a lot of time saying "stop sounding like a wiki editor, sound like a player who knows the game."&lt;/p&gt;

&lt;p&gt;The code part? I barely think about it. The agent handles the build, the deployment, the SEO headers, the structured data. It even caught a regression once — I changed a shared component and it broke another guide page. The agent noticed before I did.&lt;/p&gt;

&lt;p&gt;What I'd tell someone starting the same thing&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The AI is fast but not trustworthy. Treat it like a brilliant intern who occasionally hallucinates. Every factual claim gets verified. Every "I checked the sources" gets re-checked by you.&lt;/li&gt;
&lt;li&gt;Pick a niche with verifiable facts. A game wiki works because there are patch notes, developer posts, and gameplay videos to check against. If I were building a marketing blog, I don't know how I'd verify anything.&lt;/li&gt;
&lt;li&gt;The quality bar is yours, not the AI's. The AI will happily publish a 2,000-word guide that's 80% correct and 20% fabricated. That 20% will destroy your credibility. You have to be the one who catches it.&lt;/li&gt;
&lt;li&gt;Engage with your community. The player who corrected my Steam guide did me a favor. I learned something. And when I thanked them and said "I'll verify this," it built more trust than if I'd just silently changed the text.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The site&lt;/p&gt;

&lt;p&gt;If you're curious: &lt;a href="https://pathogenicgamewiki.com/" rel="noopener noreferrer"&gt;Pathogenic Game Wiki&lt;/a&gt;. It has guides for the Brain route, Brain Boss fight, Overcharge mechanics, a Burn build, Co-op setup, and a beginner guide. Every claim links to its source. The ones that aren't confirmed say so.&lt;/p&gt;

&lt;p&gt;I'm not claiming this is the future of development. I'm saying: for a non-coder with a clear content vision and a strict quality bar, the tools are finally good enough to ship real things. The bottleneck moved from "can I build this?" to "is this actually correct?" — and that's a much more interesting problem.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>sideprojects</category>
      <category>webdev</category>
      <category>seo</category>
    </item>
    <item>
      <title>Gemma 4 VRAM Requirements: The hardware guide I wish I had</title>
      <dc:creator>GEEK</dc:creator>
      <pubDate>Fri, 03 Apr 2026 10:56:58 +0000</pubDate>
      <link>https://dev.to/geek_/gemma-4-vram-requirements-the-hardware-guide-i-wish-i-had-3plo</link>
      <guid>https://dev.to/geek_/gemma-4-vram-requirements-the-hardware-guide-i-wish-i-had-3plo</guid>
      <description>&lt;p&gt;Running Gemma 4 locally is amazing, but hardware mismatch is the #1 reason for a bad experience.&lt;/p&gt;

&lt;p&gt;I've compiled a practical guide for the different Gemma 4 tiers based on real-world VRAM usage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;E2B / E4B : Perfect for 8GB RAM laptops and workflow validation.&lt;/li&gt;
&lt;li&gt;26B A4B : The sweet spot for 16GB-24GB GPU users.&lt;/li&gt;
&lt;li&gt;31B : For those who need reasoning quality on 24GB+ hardware.
Check out the full breakdown and the Ollama setup guide here: &lt;a href="https://gemma4guide.com/" rel="noopener noreferrer"&gt;Gemma4Guide&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also included specific optimizations for Apple Silicon (M1-M4) unified memory. What are you running Gemma 4 on? Let's discuss in the comments!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>llm</category>
      <category>gemma4</category>
    </item>
    <item>
      <title>How I Built a Free Derivative Calculator with Next.js 15 &amp; React 19</title>
      <dc:creator>GEEK</dc:creator>
      <pubDate>Sun, 18 Jan 2026 09:23:11 +0000</pubDate>
      <link>https://dev.to/geek_/how-i-built-a-free-derivative-calculator-with-nextjs-15-react-19-3i5o</link>
      <guid>https://dev.to/geek_/how-i-built-a-free-derivative-calculator-with-nextjs-15-react-19-3i5o</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi05045whcbg7rs5k3kit.jpeg" 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%2Fi05045whcbg7rs5k3kit.jpeg" alt="derivativecalculatortool.online" width="800" height="410"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;The Problem&lt;/strong&gt;&lt;br&gt;
I recently needed a reliable derivative calculator that could show step-by-step solutions . While big tools exist, they often lock the detailed steps behind a paywall.&lt;/p&gt;

&lt;p&gt;I decided to build my own free tool to solve this. It was also the perfect challenge to push the limits of Next.js 15 and React 19 in a real-world application.&lt;/p&gt;

&lt;p&gt;👉 Try it here:&lt;a href="https://derivativecalculatortool.online" rel="noopener noreferrer"&gt;Derivative Calculator &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Tech Stack&lt;/strong&gt;&lt;br&gt;
I wanted the app to be instant and responsive. Here is the stack I chose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Framework: &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 15&lt;/a&gt; (App Router)&lt;/li&gt;
&lt;li&gt;UI: React 19 + &lt;a href="https://tailwindcss.com/" rel="noopener noreferrer"&gt;Tailwind CSS&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Math Engine: A custom implementation using nerdamer for symbolic differentiation.&lt;/li&gt;
&lt;li&gt;Performance: Web Workers for off-main-thread calculations.
### The Biggest Challenge: Performance
Calculating the derivative of a complex nested function (like sin^2(e^(2x)) ) involves heavy recursive processing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Initially, running this logic on the main thread caused the UI to freeze . The input would lag, and the browser would become unresponsive for a few milliseconds.&lt;/p&gt;

&lt;p&gt;The Solution: Web Workers&lt;/p&gt;

&lt;p&gt;To fix this, I moved the entire math engine into a Web Worker . This architecture allows the React UI to remain buttery smooth (60fps) even while the engine is crunching through massive equations in the background.&lt;/p&gt;

&lt;p&gt;Here is a simplified look at how the architecture works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// The main thread sends the math expression to the worker
const handleCalculate = async () =&amp;gt; {
  setLoading(true);

  // Offload to Worker with a safety timeout
  const workerRes = await computeDerivativeInWorker({
      expression: inputExpression,
      variable: 'x',
  }, {
      timeoutMs: 8000 
  });

  if (workerRes.ok) {
      setResult(workerRes.result);
  }
  setLoading(false);
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;br&gt;
Besides performance, I focused heavily on the UX:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Step-by-Step Breakdown: The app explains the Chain Rule, Product Rule, and Quotient Rule as they are applied.&lt;/li&gt;
&lt;li&gt;Interactive Graphs: I integrated function-plot to visualize the function and its derivative instantly.&lt;/li&gt;
&lt;li&gt;Smart Input: Handling math input on the web is hard. I optimized the parser to handle implicit multiplication (e.g., understanding that 2x means 2*x ) to make it user-friendly.
### Why I'm Sharing This
I built this tool to help students and developers who need quick, free math verification.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I'm currently looking for feedback on the User Experience (UX) .&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the step-by-step explanation make sense?&lt;/li&gt;
&lt;li&gt;Is the graph interaction intuitive?
Give it a try and let me know what you think in the comments!&lt;/li&gt;
&lt;/ul&gt;

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

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