<?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: Michael Amachree</title>
    <description>The latest articles on DEV Community by Michael Amachree (@dev_michael).</description>
    <link>https://dev.to/dev_michael</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%2F595000%2Fed5ecff4-53c2-4e77-b328-c4e0709b4657.jpg</url>
      <title>DEV Community: Michael Amachree</title>
      <link>https://dev.to/dev_michael</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dev_michael"/>
    <language>en</language>
    <item>
      <title>AI didn't make me a worse coder. It made me a worse reviewer.</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Fri, 21 Aug 2026 22:10:19 +0000</pubDate>
      <link>https://dev.to/dev_michael/ai-didnt-make-me-a-worse-coder-it-made-me-a-worse-reviewer-48d0</link>
      <guid>https://dev.to/dev_michael/ai-didnt-make-me-a-worse-coder-it-made-me-a-worse-reviewer-48d0</guid>
      <description>&lt;p&gt;I built a lot of apps last year. I approved most of the code and commits that went into them, and a good portion of it I could not explain.&lt;/p&gt;

&lt;p&gt;Not "couldn't explain to a junior." Couldn't explain to &lt;em&gt;myself&lt;/em&gt;. The tests were green, the diff looked like something I would have written, and I hit approve. If you had stopped me forty minutes later and asked why that function needed a lock, I would have had to go read it again like it was someone else's code.&lt;/p&gt;

&lt;p&gt;Which, in a sense, it was. And because most of these were my own projects, there was no second reviewer downstream of me. I was the entire quality gate — and the gate had quietly stopped reading.&lt;/p&gt;

&lt;p&gt;I am not going to pretend this is a novel observation. If you read dev.to you have already seen this post four times this spring, and if you read r/ExperiencedDevs you have seen the thread where someone calls themselves "a tourist in their own codebase" and four hundred people say &lt;em&gt;yeah, same&lt;/em&gt;. One in five developers in the 2025 Stack Overflow survey picked "I've become less confident in my own problem-solving" as a top frustration with AI tools. The fear is not underreported. It might be the most reported feeling in software right now.&lt;/p&gt;

&lt;p&gt;So this isn't a diagnosis post. The diagnosis is done. What I couldn't find anywhere was an honest answer to the next question: &lt;strong&gt;every fix anyone proposes for this has the same shape, and that shape is known to fail.&lt;/strong&gt; Including the one I spent two weeks designing.&lt;/p&gt;

&lt;p&gt;That's what I want to work through, and then I want to ask you something.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually decays
&lt;/h2&gt;

&lt;p&gt;The reframe that finally made this click for me came from aviation, and it's about thirty years old.&lt;/p&gt;

&lt;p&gt;When researchers tested airline pilots who had trained on manual flight but then spent their careers flying highly automated aircraft, they found something specific. The &lt;em&gt;procedural&lt;/em&gt; skills — scanning instruments, hand-flying the aircraft — were rusty but largely intact. The pilots could still fly the plane.&lt;/p&gt;

&lt;p&gt;What had cratered were the cognitive skills. Maintaining awareness of where the aircraft actually was. Tracking what the next step should be. Recognizing and handling an instrument failure. (This is Casner et al., 2014; the FAA's response was to recommend that pilots hand-fly for the majority of flights.)&lt;/p&gt;

&lt;p&gt;Read that again with your own job substituted in. The typing survives. The &lt;em&gt;model in your head&lt;/em&gt; is what goes.&lt;/p&gt;

&lt;p&gt;A 2024 review by Brooke Macnamara and colleagues in &lt;em&gt;Cognitive Research&lt;/em&gt; extends this to AI assistants specifically, and makes the argument sharper than I would have dared: because AI mimics &lt;em&gt;cognitive&lt;/em&gt; work rather than mechanical work, and because cognitive skills decay faster than physical ones, AI-induced skill decay should be &lt;strong&gt;worse&lt;/strong&gt; than the automation decay we already documented in cockpits.&lt;/p&gt;

&lt;p&gt;That's the reframe. It isn't that AI makes you slow at writing code. It's that AI is very good at the exact part of the job that used to build your judgment as a side effect, and the judgment does not maintain itself in storage.&lt;/p&gt;

&lt;p&gt;Which matters, because look at what the job is now. Reviewing. Catching the thing the model was confident about and wrong about. Knowing what to build. Deciding when the plausible answer is the wrong answer. Every one of those is the cognitive column, not the procedural one. We have automated our way out of the reps that produced the only skills we still get paid for.&lt;/p&gt;

&lt;h2&gt;
  
  
  You cannot feel this happening
&lt;/h2&gt;

&lt;p&gt;Here's the part that changed how I think about the whole problem. There are three independent findings that all say the same uncomfortable thing: &lt;strong&gt;you are structurally unable to self-assess this.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One.&lt;/strong&gt; Macnamara's review names the mechanism directly. Ordinary skill decay you notice, because you stopped doing the task. AI-induced decay hides, because you &lt;em&gt;didn't&lt;/em&gt; stop doing the task — you kept shipping, kept reviewing, kept closing tickets. Only the cognitive engagement stopped. A surgeon still completing successful operations has no signal that their judgment has softened. Neither do you, with a green CI badge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two.&lt;/strong&gt; METR ran a randomized controlled trial in 2025 with sixteen experienced open-source developers on 246 real tasks in their own repositories — projects averaging five years of their own contributions. Developers predicted AI would make them 24% faster. Afterward, they estimated they &lt;em&gt;had been&lt;/em&gt; about 20% faster. They were 19% &lt;strong&gt;slower&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Sit with that. Not "they were wrong about the tool." They were wrong about their own experience, immediately after having it, on code they knew better than anyone. And the slowdown was &lt;em&gt;worse&lt;/em&gt; on tasks where they had high prior experience. Whatever perceptual instrument you'd use to detect this in yourself, that study is the calibration check, and it failed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three.&lt;/strong&gt; The classic testing-effect result from Roediger and Karpicke (2006): students who re-read material rated themselves more confident about remembering it than students who self-tested — and then recalled 40% versus 61% a week later. The re-readers read the passage 14.2 times on average. The testers read it 3.4 times. Re-reading felt like learning and wasn't.&lt;/p&gt;

&lt;p&gt;Re-reading a diff until it looks fine is the same operation. It builds confidence and not much else.&lt;/p&gt;

&lt;p&gt;So: the decay is invisible by construction, our self-reports are demonstrably inverted, and the review habit we all use produces exactly the false confidence the memory research warns about. Any solution that depends on &lt;em&gt;noticing you have a problem&lt;/em&gt; is dead on arrival.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try this before you read on
&lt;/h2&gt;

&lt;p&gt;Two minutes, on your own code. I'd genuinely like to know what happens.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the last commit or PR you shipped that an AI mostly wrote. Don't read it yet.&lt;/li&gt;
&lt;li&gt;In a scratch file, write what it does, why it was needed, and what breaks if you delete it.&lt;/li&gt;
&lt;li&gt;Now read the diff.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Note where you stalled. Not whether you were "right" — where you &lt;em&gt;stalled&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This has a name in cognitive science: the &lt;strong&gt;illusion of explanatory depth&lt;/strong&gt; (Rozenblit &amp;amp; Keil, 2002). People rate their understanding of how things work as high, are asked to produce an actual causal explanation, and then revise their own rating sharply downward. The effect is much stronger for explanatory knowledge than for facts or procedures — meaning it's strongest for precisely the kind of knowing that code review requires. It's also strongest when the mechanism is visible in front of you, which is a fairly brutal description of reading a diff and feeling like you understand it.&lt;/p&gt;

&lt;p&gt;The MIT Media Lab found a version of this last year: participants who wrote essays with an LLM struggled to quote the essay they had finished minutes earlier. Small study, preprint, treat it lightly. But "I shipped this and can't quote it" is a sentence I recognize.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I'm not building a skill score
&lt;/h2&gt;

&lt;p&gt;My first instinct was a dashboard. Measure me. &lt;code&gt;Your coding ability: 73% and falling.&lt;/code&gt; A number, a trend line, and enough dread to keep me honest.&lt;/p&gt;

&lt;p&gt;I'm glad I read the habit-formation literature before writing any code, because that idea is a known failure mode.&lt;/p&gt;

&lt;p&gt;A CHI 2016 study looked at Lift (later Coach.me), one of the most popular habit apps of its era. Streaks and reminders &lt;em&gt;did&lt;/em&gt; drive repetition — that part works. But they created a &lt;strong&gt;dependency&lt;/strong&gt;: the behavior was attached to the app rather than to the person. Users performed for the streak. And then, inevitably, they stopped opening the app — the same paper notes the wider pattern, that around 74% of users abandon health apps after ten uses — and the behavior went with it. The authors' framing is that these features introduce &lt;em&gt;fragility&lt;/em&gt; into exactly the thing they were meant to make durable.&lt;/p&gt;

&lt;p&gt;Extrinsic reward crowding out the internal motive is old, well-replicated psychology. A skill score is that trap wearing a developer hat: gamified anxiety. It tells you you're declining, which feels bad, which makes you avoid the tool, which makes the number worse. Week two you uninstall it.&lt;/p&gt;

&lt;p&gt;And there's a cleaner objection. A score measures output. Understanding isn't output — it's a capacity, and the only way to observe a capacity is to make someone &lt;em&gt;use&lt;/em&gt; it. You cannot report understanding. You can only demonstrate it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the usual advice doesn't work either
&lt;/h2&gt;

&lt;p&gt;This is the part I expect people to argue with, so let me be careful.&lt;/p&gt;

&lt;p&gt;Every article on this topic — including the good ones — ends with roughly the same list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;have no-AI days&lt;/li&gt;
&lt;li&gt;try it manually for fifteen minutes first&lt;/li&gt;
&lt;li&gt;20–30 minutes of unassisted problem-solving daily&lt;/li&gt;
&lt;li&gt;close the tool and explain every line out loud&lt;/li&gt;
&lt;li&gt;write the architecture yourself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this advice is wrong. I think all of it works, when done. But look at the shape of it: every item is &lt;strong&gt;discipline-shaped, scheduled, and outside the workflow.&lt;/strong&gt; It's a separate practice, competing for time, sustained by willpower, with no cue and no consequence for skipping it.&lt;/p&gt;

&lt;p&gt;That is structurally the same object as the habit app. It's the pre-app version of the same object. And the reason to expect it to fail is the reason the article gave you in paragraph one: you're being asked to voluntarily add friction to fix a problem &lt;em&gt;you cannot perceive yourself having&lt;/em&gt;, using time pressure as the counterweight, in an industry that measures you on what you shipped, never on whether you understood it.&lt;/p&gt;

&lt;p&gt;Also — the specific advice to "rotate AI-free days" is trying to solve skill decay with abstinence, and the research doesn't actually support that framing. Which brings me to the useful finding.&lt;/p&gt;

&lt;h2&gt;
  
  
  The finding that changed the design
&lt;/h2&gt;

&lt;p&gt;In January 2026 Anthropic published a randomized controlled trial (Shen &amp;amp; Tamkin) that is, as far as I can tell, the most directly relevant study that exists. 52 mostly-junior engineers learned Trio, an async Python library none of them knew. Half had an AI assistant; half had docs and web search.&lt;/p&gt;

&lt;p&gt;The headline is grim and got all the coverage: the AI group scored &lt;strong&gt;50% on the comprehension quiz versus 67%&lt;/strong&gt; for the hand-coders — about two letter grades, on concepts they had used minutes earlier. The largest gap was on the &lt;strong&gt;debugging&lt;/strong&gt; questions, which is the precise skill you need to catch bad AI output. The speed advantage was about two minutes and wasn't statistically significant. Same speed. Much less understanding.&lt;/p&gt;

&lt;p&gt;But the finding nobody quotes is the one underneath it. The researchers identified six distinct interaction patterns, and &lt;strong&gt;three of them preserved learning even with full AI assistance.&lt;/strong&gt; High scorers averaged 65–86%. Low scorers were under 40%. Same tool, same time budget, double the comprehension.&lt;/p&gt;

&lt;p&gt;The three that worked all involved cognitive engagement at the moment of generation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generate the code, then ask follow-up questions about it&lt;/li&gt;
&lt;li&gt;ask for code &lt;em&gt;and&lt;/em&gt; an explanation together&lt;/li&gt;
&lt;li&gt;ask conceptual questions, then write the code yourself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The three that failed: delegate wholesale, drift into delegation over the session, or use the AI to iteratively fix things without ever understanding them. (Participants in that last group were also &lt;em&gt;slower&lt;/em&gt;.)&lt;/p&gt;

&lt;p&gt;So the variable is not how much AI you use. It's whether an act of retrieval or explanation happens at the point of use. That's a much smaller intervention than "no-AI Fridays," and unlike willpower, it's the kind of thing software can put in front of you at the right moment.&lt;/p&gt;

&lt;p&gt;Microsoft Research and CMU landed in the same place from a different direction at CHI 2025. Surveying 319 knowledge workers across 936 real AI-assisted tasks, they found higher confidence in the AI predicted &lt;em&gt;less&lt;/em&gt; critical thinking, while higher confidence in your own ability predicted more. Their design recommendation was for tools that use "proactive prompts" and act as a &lt;strong&gt;provocateur&lt;/strong&gt; rather than an answer machine.&lt;/p&gt;

&lt;p&gt;I read that and realized the intervention I wanted had already been specified by people with better data than me. Nobody had built it into the place where the work actually happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want to build
&lt;/h2&gt;

&lt;p&gt;Not a score. Not an app. A &lt;strong&gt;review-time forcing function&lt;/strong&gt; — something in the hook or MCP layer between the agent and the merge, where I already am.&lt;/p&gt;

&lt;p&gt;The agent drafts a change. Before I can rubber-stamp it, it asks me one question:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What does this change do?&lt;/li&gt;
&lt;li&gt;What breaks if we remove it?&lt;/li&gt;
&lt;li&gt;Where's the edge case this misses?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then it does the part that makes it more than a journaling prompt: it &lt;strong&gt;compares my answer to the actual diff&lt;/strong&gt; and shows me where my model diverged. Over time the signal isn't a vibe, it's a record — did my explanation match the code? Did I flag the thing that later broke? That's review accuracy and bug-catch rate, which are evidence, not a self-report.&lt;/p&gt;

&lt;p&gt;Design constraints, all of them derived from something above rather than from taste:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;In-workflow, not an app.&lt;/strong&gt; Out-of-workflow practices are the failure mode of the entire genre.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One question, ~20 seconds.&lt;/strong&gt; Anything longer loses to delivery pressure, which is the honest reason none of us do the 20-minute practice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No score, no streak, no dashboard.&lt;/strong&gt; Lift, and everything downstream of Lift.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explanation-shaped, not recall-shaped.&lt;/strong&gt; The illusion of explanatory depth is where the gap is largest; quizzing trivia would miss it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval before review, not after.&lt;/strong&gt; Roediger &amp;amp; Karpicke — you have to attempt the answer &lt;em&gt;before&lt;/em&gt; seeing the material, or you've just re-read the diff with extra steps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The adjacent shape I keep sketching is spaced repetition over your own codebase — Anki for the repo. "Why does this function exist?" "What would break if you deleted it?" I think it's weaker: it's out-of-workflow again, and it drifts toward recall when the thing that matters is explanation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where I think this might be wrong
&lt;/h2&gt;

&lt;p&gt;Three real holes, and I'd rather name them than get talked out of them in the comments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It might become another rubber stamp.&lt;/strong&gt; Anything mandatory gets gamed. I'd type "makes the retry idempotent" seventeen times a day without thinking. Every forced-friction tool ever built has hit this wall, and I don't have a good answer beyond "vary the question and only fire on non-trivial diffs," which is a hope, not a design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Something has to grade the explanation, and that something is an AI.&lt;/strong&gt; Which means I'd be offloading the assessment of whether I understood something to the same class of system whose output I stopped understanding. I think this is survivable — comparing my prose against a diff is a much narrower task than generating the diff — but I notice the shape of it, and it bothers me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The friction lands in the wrong place.&lt;/strong&gt; 66% of developers say their top AI frustration is code that's "almost right, but not quite," and 45% say debugging AI output already takes longer than writing it themselves. Those people are not short on friction. Adding a question to their review might be adding a tax to the exact step that's already the expensive one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The question
&lt;/h2&gt;

&lt;p&gt;I'm asking because I have a rule against starting things right now — one flagship for 90 days, everything else goes in a parking lot file. This idea is in the parking lot. It comes out only if the reaction here says it should, so this is a real question with a real consequence, not a call to action.&lt;/p&gt;

&lt;p&gt;Three things, and short answers are genuinely more useful than long ones:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Did you run the two-minute test above?&lt;/strong&gt; What happened — did you stall, or was it fine? Just say "stalled" or "fine" if that's all you've got. I especially want to hear "fine," because if most people are fine then I've written 1,800 words about my own bad habits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What's your actual anti-atrophy practice&lt;/strong&gt; — not the one you'd recommend, the one you &lt;em&gt;did&lt;/em&gt; this week?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Would you install this?&lt;/strong&gt; And if you think it's a bad idea, say so plainly. "This would annoy me into uninstalling it in a day" is the most useful comment I could get, and it costs you one line.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I've been assuming that because I can feel the erosion, a tool should exist. The research above says pretty clearly that my feelings about my own competence are not evidence. Yours might be worth more than mine.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources, if you want to check my work: &lt;a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" rel="noopener noreferrer"&gt;METR RCT (2025)&lt;/a&gt; · &lt;a href="https://www.anthropic.com/research/AI-assistance-coding-skills" rel="noopener noreferrer"&gt;Shen &amp;amp; Tamkin, Anthropic (2026)&lt;/a&gt; · &lt;a href="https://link.springer.com/article/10.1186/s41235-024-00572-8" rel="noopener noreferrer"&gt;Macnamara et al., Cognitive Research (2024)&lt;/a&gt; · &lt;a href="https://www.microsoft.com/en-us/research/wp-content/uploads/2025/01/lee_2025_ai_critical_thinking_survey.pdf" rel="noopener noreferrer"&gt;Lee et al., CHI 2025 (PDF)&lt;/a&gt; · &lt;a href="https://discovery.ucl.ac.uk/1477627/1/Chi%202016%20LBW%202.1%20camera%20ready.pdf" rel="noopener noreferrer"&gt;"Don't Kick the Habit," CHI 2016&lt;/a&gt; · &lt;a href="https://learninglab.psych.purdue.edu/downloads/2006/2006_Roediger_Karpicke_PsychSci.pdf" rel="noopener noreferrer"&gt;Roediger &amp;amp; Karpicke (2006)&lt;/a&gt; · &lt;a href="https://cogdevlab.yale.edu/sites/default/files/files/rozenblit%20%26%20keil%20%202002.pdf" rel="noopener noreferrer"&gt;Rozenblit &amp;amp; Keil (2002)&lt;/a&gt; · &lt;a href="https://survey.stackoverflow.co/2025/ai" rel="noopener noreferrer"&gt;Stack Overflow Developer Survey 2025&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>discuss</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The cheapest model on my plan loses every benchmark. It still beats models charging 14x more.</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Fri, 21 Aug 2026 20:38:31 +0000</pubDate>
      <link>https://dev.to/dev_michael/the-cheapest-model-on-my-plan-loses-every-benchmark-it-still-beats-models-charging-14x-more-2po8</link>
      <guid>https://dev.to/dev_michael/the-cheapest-model-on-my-plan-loses-every-benchmark-it-still-beats-models-charging-14x-more-2po8</guid>
      <description>&lt;p&gt;The cheapest model I can run on my plan costs &lt;strong&gt;$0.14&lt;/strong&gt; per million tokens. The one I actually reach for costs &lt;strong&gt;$0.44&lt;/strong&gt;. I put them side by side expecting the cheap one to be &lt;em&gt;close&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It lost all four benchmarks. Coding, reasoning, math, real-world bug-fixing — four for four.&lt;/p&gt;

&lt;p&gt;I'm still recommending it. Not because it competes with the good models. Because of what it does to the models in the middle.&lt;/p&gt;

&lt;h2&gt;
  
  
  The trade, stated plainly
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;MiMo-V2.5&lt;/th&gt;
&lt;th&gt;Deepseek v4 flash&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Input / 1M&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.14&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.44&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output / 1M&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.28&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$1.32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requests per 5h window&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;30,100&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;7,600&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding&lt;/td&gt;
&lt;td&gt;56.8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;69.1&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning&lt;/td&gt;
&lt;td&gt;38.0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;51.8&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Math&lt;/td&gt;
&lt;td&gt;85.0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;86.0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bug-fixing (SWE-Bench)&lt;/td&gt;
&lt;td&gt;43.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;49.9&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two numbers matter more than the rest. MiMo gives you roughly &lt;strong&gt;four times as many requests&lt;/strong&gt; before your window empties, at &lt;strong&gt;a third of the input price&lt;/strong&gt;. And it gives up &lt;strong&gt;twelve points of coding ability&lt;/strong&gt; to do it.&lt;/p&gt;

&lt;p&gt;That's the whole decision. Not "which model is better" — which resource you're actually short on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where my instinct was wrong
&lt;/h2&gt;

&lt;p&gt;I went in believing the cheap models had quietly caught up. The number I expected to find was a two- or three-point gap.&lt;/p&gt;

&lt;p&gt;Math cooperated: 85.0 against 86.0. One point. That's noise, and it's a real result — for arithmetic-heavy work the cheap model is simply fine.&lt;/p&gt;

&lt;p&gt;Reasoning did not cooperate. 38.0 against 51.8 is a &lt;strong&gt;27% drop&lt;/strong&gt;, the widest gap of the four. On paper that reads like a rounding difference. In practice it's the difference between a model that follows a four-step refactor and one that loses the thread at step two and confidently ships step three.&lt;/p&gt;

&lt;p&gt;So "close enough" was wrong, and it was wrong in the direction that costs you the most: the reasoning gap is exactly the gap you feel when you hand a model something ambiguous.&lt;/p&gt;

&lt;h2&gt;
  
  
  The comparison I should have run first
&lt;/h2&gt;

&lt;p&gt;The interesting fight was never cheap-versus-best. Look at what sits &lt;em&gt;between&lt;/em&gt; them.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Coding&lt;/th&gt;
&lt;th&gt;Input / 1M&lt;/th&gt;
&lt;th&gt;Requests / 5h&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MiMo-V2.5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;56.8&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.14&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;30,100&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3.7-Plus&lt;/td&gt;
&lt;td&gt;55.9&lt;/td&gt;
&lt;td&gt;$1.20&lt;/td&gt;
&lt;td&gt;4,300&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GLM-5.1&lt;/td&gt;
&lt;td&gt;55.8&lt;/td&gt;
&lt;td&gt;$1.40&lt;/td&gt;
&lt;td&gt;880&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3.6 Plus&lt;/td&gt;
&lt;td&gt;54.5&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;3,300&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The $0.14 model beats all three.&lt;/p&gt;

&lt;p&gt;Qwen3.6 Plus charges &lt;strong&gt;fourteen times more per input token&lt;/strong&gt; and codes a point and a half worse. GLM-5.1 charges ten times more, scores a point lower, and burns your quota &lt;strong&gt;thirty-four times faster&lt;/strong&gt; — 880 requests against 30,100.&lt;/p&gt;

&lt;p&gt;That's the finding. The floor didn't rise to meet the ceiling. It rose to swallow the middle. Every model priced between one and two dollars is now paying a premium for benchmark scores it doesn't actually have, and the only reason that isn't obvious is that nobody puts price, benchmark, and quota burn in the same row.&lt;/p&gt;

&lt;p&gt;Which is the entire reason I built the thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "cheapest" needs an asterisk
&lt;/h2&gt;

&lt;p&gt;MiMo-V2.5 isn't literally the cheapest model on my plan. There's one below it: &lt;strong&gt;Muse spark 1.2 contributor&lt;/strong&gt;, at $0.10/$0.20, with 45,300 requests per window and a coding score of 72.2 — better than DeepSeek, at a quarter of the price.&lt;/p&gt;

&lt;p&gt;That combination doesn't happen by accident. The word &lt;em&gt;contributor&lt;/em&gt; is sitting right there in the model name. I don't have documentation explaining the arrangement, so I'm not going to assert one. I'll say this instead: when one model is cheaper, faster-burning, &lt;em&gt;and&lt;/em&gt; better than everything around it, the price is buying something other than compute. Treat it as an outlier until you know what.&lt;/p&gt;

&lt;p&gt;Set it aside and MiMo-V2.5 is the floor. Hy3 ties it on input price at $0.14 and actually out-codes it slightly at 58.8 — but charges twice as much on output and gives you 4,300 requests instead of 30,100.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I got wrong building this
&lt;/h2&gt;

&lt;p&gt;The first version of my burn scoring inferred quota cost from price. Cheaper token, slower burn. It seemed obviously true.&lt;/p&gt;

&lt;p&gt;It was wrong, and it was wrong in an embarrassing direction: it ranked expensive models as quota-hungry even when the provider gave them generous request allowances, and it flattered cheap models that burn through a window fast. I was measuring the thing I could see instead of the thing I cared about.&lt;/p&gt;

&lt;p&gt;The fix was to stop inferring and start reading — the published request counts per window, straight from the docs. That's when the table started disagreeing with my intuitions, which is when it started being useful. The MiMo-versus-middle finding above only exists because burn stopped being a function of price.&lt;/p&gt;

&lt;p&gt;There's still a bug I haven't fixed: at the low end, a couple of models render a burn band that disagrees with their own request count. It's on my list. I'd rather say that here than have you find it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this doesn't tell you
&lt;/h2&gt;

&lt;p&gt;Benchmarks are a proxy and a coarse one. A twelve-point coding gap is real, but I can't tell you it maps cleanly onto your codebase, your language, or your prompting habits. Some of these scores come from different evaluation suites and get normalized to sit in the same column — that normalization is a judgment call, and it's mine.&lt;/p&gt;

&lt;p&gt;Nothing here is hand-curated. Scores, tags, and burn bands are all computed from three upstream sources, so when they update, my conclusions change without my permission. That's the design. It also means I'm occasionally wrong in public.&lt;/p&gt;

&lt;p&gt;And I have no historical data. I can tell you what the board looks like right now. I can't tell you what moved.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I actually want to argue about
&lt;/h2&gt;

&lt;p&gt;I think most people pick a model once, by reputation, and never revisit it — and then spend the rest of the month rationing requests they didn't need to ration.&lt;/p&gt;

&lt;p&gt;The table is free, needs no account, and links every number back to its source: &lt;strong&gt;&lt;a href="https://zp.svelte-apps.me" rel="noopener noreferrer"&gt;zp.svelte-apps.me&lt;/a&gt;&lt;/strong&gt; · code at &lt;strong&gt;&lt;a href="https://github.com/Michael-Obele/zenpick" rel="noopener noreferrer"&gt;github.com/Michael-Obele/zenpick&lt;/a&gt;&lt;/strong&gt; · &lt;a href="https://github.com/Michael-Obele/zenpick/issues" rel="noopener noreferrer"&gt;open an issue&lt;/a&gt; if a number looks wrong to you, because sometimes it is.&lt;/p&gt;

&lt;p&gt;So: &lt;strong&gt;when you're choosing a model, are you short on capability or short on requests?&lt;/strong&gt; I've been answering that question wrong for months — optimizing for the smartest model I could afford, then quietly avoiding using it. Curious whether anyone else has caught themselves doing the same thing.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I Got Tired of Guessing OpenCode Go Models — So I Built a Live Fit + Burn Dashboard</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Wed, 29 Jul 2026 05:55:02 +0000</pubDate>
      <link>https://dev.to/dev_michael/i-got-tired-of-guessing-opencode-go-models-so-i-built-a-live-fit-burn-dashboard-545d</link>
      <guid>https://dev.to/dev_michael/i-got-tired-of-guessing-opencode-go-models-so-i-built-a-live-fit-burn-dashboard-545d</guid>
      <description>&lt;h2&gt;
  
  
  I Got Tired of Guessing OpenCode Go Models — So I Built a Live Fit + Burn Dashboard
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://zp.svelte-apps.me/" rel="noopener noreferrer"&gt;zp.svelte-apps.me&lt;/a&gt;&lt;/strong&gt; · open source: &lt;a href="https://github.com/Michael-Obele/zenpick" rel="noopener noreferrer"&gt;github.com/Michael-Obele/zenpick&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  TL;DR
&lt;/h3&gt;

&lt;p&gt;&lt;a&gt;OpenCode Go&lt;/a&gt; is $10/month for 13+ curated open coding models — &lt;strong&gt;the first month is $5 anyway&lt;/strong&gt; (their standard intro offer), and if you sign up through my link we each get an extra $5 credit on top. The hard part isn't the price — it's picking the right one without torching your quota. &lt;strong&gt;ZenPick is the focus here:&lt;/strong&gt; it's a free, open-source dashboard that ranks every Go model by &lt;strong&gt;task fit&lt;/strong&gt; and &lt;strong&gt;quota burn&lt;/strong&gt; so you can decide in 10 seconds. Built with Svelte 5 + SvelteKit.&lt;/p&gt;




&lt;h2&gt;
  
  
  The decision that actually hurt
&lt;/h2&gt;

&lt;p&gt;OpenCode Go is a strong deal. One subscription, $10/month, 13+ models. DeepSeek, Qwen, Kimi, GLM, MiMo, and more.&lt;/p&gt;

&lt;p&gt;But Go usage limits are defined in &lt;strong&gt;dollar value&lt;/strong&gt;, not request counts.&lt;/p&gt;

&lt;p&gt;Pick a cheap workhorse and you can run &lt;strong&gt;tens of thousands&lt;/strong&gt; of requests per 5-hour window. Pick a premium reasoning model and you might land under &lt;strong&gt;a thousand&lt;/strong&gt; in the same window.&lt;/p&gt;

&lt;p&gt;Same tier, wildly different economics. Pick wrong for a long agentic session and you can burn a large chunk of your monthly quota in an afternoon. Pick too cheap for a hard reasoning task and you waste hours on weak output.&lt;/p&gt;

&lt;p&gt;The docs give you a markdown table. Cross-referencing benchmarks, request volume, pricing, and task fit across 13+ models in a table is a bad developer experience.&lt;/p&gt;

&lt;p&gt;So I built ZenPick.&lt;/p&gt;




&lt;h2&gt;
  
  
  Three questions, answered fast
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Which model fits my task?
&lt;/h3&gt;

&lt;p&gt;Every model gets an &lt;strong&gt;algorithmic fit score (0–100)&lt;/strong&gt; across six scenarios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Brainstorming&lt;/strong&gt; — open-ended ideation, long context&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coding&lt;/strong&gt; — coding benchmarks + tools/speed/uptime fit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitive&lt;/strong&gt; — hard one-shot reasoning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agentic&lt;/strong&gt; — long multi-step runs, stability signals&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend UI&lt;/strong&gt; — Design Arena Elo + intelligence + coding&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget&lt;/strong&gt; — cheapest option that still ranks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scores are weighted blends of real signals — Artificial Analysis TrueSkill for coding, Design Arena Elo for UI preference, context and tooling for agentic fit. Missing data doesn't zero a model out of the ranking. The table is never empty, and ordering stays meaningful.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. How fast will it burn my quota?
&lt;/h3&gt;

&lt;p&gt;Each model gets a &lt;strong&gt;thermal burn&lt;/strong&gt; classification from blended price per million tokens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❄️ &lt;strong&gt;Slow burn&lt;/strong&gt; (&amp;lt; $1.50) — volume workhorse&lt;/li&gt;
&lt;li&gt;🌡️ &lt;strong&gt;Moderate&lt;/strong&gt; ($1.50 – $6.00) — daily driver&lt;/li&gt;
&lt;li&gt;🔥 &lt;strong&gt;Fast burn&lt;/strong&gt; (&amp;gt; $6.00) — premium / focused sessions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The table also surfaces request estimates per window so the economics are visible &lt;em&gt;before&lt;/em&gt; you start a long run.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. What does it replace from a closed-source workflow?
&lt;/h3&gt;

&lt;p&gt;Open any row's detail drawer for &lt;strong&gt;migration hints&lt;/strong&gt; — e.g. if you used a frontier Sonnet-class model, which Go model is the closest practical stand-in. Plus pricing, benchmarks, quota estimates, and one-tap model ID copy for your OpenCode config.&lt;/p&gt;




&lt;h2&gt;
  
  
  What actually shipped
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Scenario pills + search.&lt;/strong&gt; Tap Brainstorming, Coding, Competitive, Agentic, Frontend UI, or Budget. The table re-ranks by fit for that job. Search narrows by name or provider. You can go from "13+ models" to "two agentic options that won't torch quota" in a few seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sortable model table.&lt;/strong&gt; Sort by name, benchmarks, price, quota requests, scenario fit, or burn. Scenario filter and sort are independent — e.g. Budget scenario, then sort by coding score.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model drawer.&lt;/strong&gt; Click a row for benchmark bars, pricing per 1M tokens, request estimates (5h / week / month), migration hints, &lt;strong&gt;Add to compare&lt;/strong&gt;, and &lt;strong&gt;Copy model ID&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Side-by-side compare (up to 4).&lt;/strong&gt; Open Compare. Each row highlights the winner; ties stay unhighlighted. Benchmarks, pricing, context, speed, burn, scenario fit, tags, and migration sit in one grid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ask AI.&lt;/strong&gt; From compare, jump into Grok, ChatGPT, Claude, or Gemini with a &lt;strong&gt;pre-filled prompt&lt;/strong&gt; that already includes the live ZenPick stats for the selected models. You bring the task; the context is already there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quota calculator.&lt;/strong&gt; Estimate tokens per request for &lt;em&gt;your&lt;/em&gt; session pattern and see how request counts shift. Official tables assume fixed patterns; real agent runs often don't.&lt;/p&gt;




&lt;h2&gt;
  
  
  The build
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; Svelte 5 runes · SvelteKit · Tailwind v4 · shadcn-svelte · Bits UI · Bun.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remote functions for data.&lt;/strong&gt; Model loading lives as a SvelteKit &lt;strong&gt;remote query&lt;/strong&gt;, not a pile of ad-hoc client fetches. It fetches Go models, modelgrep, and llm-stats in &lt;strong&gt;parallel&lt;/strong&gt;, matches each Go model across sources, runs inference (tags, scenario scores, burn, migration hints), and serves through a &lt;strong&gt;6-hour stale-while-revalidate&lt;/strong&gt; cache. So you get a fast page and data that isn't days old, without burning your own rate limits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-source blending, honest and field-specific.&lt;/strong&gt; You can't naively average every benchmark. Methodologies differ.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Primary&lt;/th&gt;
&lt;th&gt;Fallback / blend&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Coding&lt;/td&gt;
&lt;td&gt;modelgrep AA TrueSkill&lt;/td&gt;
&lt;td&gt;llm-stats only if modelgrep missing — &lt;strong&gt;no average&lt;/strong&gt; (different scales)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning&lt;/td&gt;
&lt;td&gt;modelgrep AA TrueSkill&lt;/td&gt;
&lt;td&gt;llm-stats only when outlier-safe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Math&lt;/td&gt;
&lt;td&gt;GPQA + llm-stats math&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Blend&lt;/strong&gt; when both are 0–1 accuracy-style scores&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Design Arena Elo&lt;/td&gt;
&lt;td&gt;modelgrep&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;False precision is worse than a clear primary source. The UI prefers honesty over a single "magic number."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Algorithmic scenario scoring.&lt;/strong&gt; Each scenario has its own weighted blend. The Frontend UI score leans heavy on Design Arena Elo (human preference), with some general intelligence and a touch of coding. If every input is missing, the model gets a neutral floor (0.5) — not zero — so the table stays comparable. The pattern repeats for the other five scenarios with their own field weights.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Svelte 5 runes end-to-end.&lt;/strong&gt; No legacy &lt;code&gt;$:&lt;/code&gt; or &lt;code&gt;export let&lt;/code&gt;. UI state uses &lt;code&gt;$state&lt;/code&gt; / &lt;code&gt;$derived&lt;/code&gt; / &lt;code&gt;$props&lt;/code&gt;. Compare selection is a small client store; the compare route keeps &lt;code&gt;?models=&lt;/code&gt; in sync for shareable links.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;1. Benchmark field names lie.&lt;/strong&gt; Upstream labels aren't always what they sound like. Verify what a score measures before you put it in a column header. One wrong label trains users to distrust the whole table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Blending requires methodology discipline.&lt;/strong&gt; Averaging TrueSkill-style ranks with 0–1 composites produces a number that &lt;em&gt;feels&lt;/em&gt; precise and &lt;em&gt;is&lt;/em&gt; nonsense. Field-specific primary/fallback rules beat "average everything."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Continuous fit scores beat tags.&lt;/strong&gt; v1-style tag filters (&lt;code&gt;coding&lt;/code&gt;, &lt;code&gt;tools&lt;/code&gt;) go stale and create fake ties. A 0–100 score from live signals is harder to build and much more useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Stale-while-revalidate is the right default for this dashboard.&lt;/strong&gt; Nobody needs millisecond-fresh Elo on every paint. They need a fast page and data that isn't days old. 6h TTL + SWR hits both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Compare + Ask AI closes the last mile.&lt;/strong&gt; A ranked table answers "what's good." A 4-model grid + a pre-filled AI chat answers "for &lt;em&gt;my&lt;/em&gt; task, tonight, which two should I try?"&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick picks (starting points — not guarantees)
&lt;/h2&gt;

&lt;p&gt;Live scores move. Treat this as a &lt;strong&gt;compass&lt;/strong&gt;, then verify in ZenPick:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use case&lt;/th&gt;
&lt;th&gt;Start here&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Daily workhorse / high volume&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;DeepSeek V4 Flash&lt;/strong&gt; (slow burn, high request density)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hard reasoning + tough coding&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Qwen3.7 Max&lt;/strong&gt; (premium; use deliberately)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long agentic sessions&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;MiMo-V2.5-Pro&lt;/strong&gt; or &lt;strong&gt;Kimi K2.7 Code&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max requests / tight budget&lt;/td&gt;
&lt;td&gt;Cheapest strong coding option in the &lt;strong&gt;Budget&lt;/strong&gt; scenario (often MiMo-class)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend / UI generation&lt;/td&gt;
&lt;td&gt;Highest &lt;strong&gt;Design Arena&lt;/strong&gt; / Frontend UI fit in the current lineup&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If your real sessions disagree with the table, that's useful signal — open an issue.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🔗 &lt;strong&gt;Live:&lt;/strong&gt; &lt;a href="https://zp.svelte-apps.me/" rel="noopener noreferrer"&gt;zp.svelte-apps.me&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://github.com/Michael-Obele/zenpick" rel="noopener noreferrer"&gt;github.com/Michael-Obele/zenpick&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📄 &lt;strong&gt;About / methodology:&lt;/strong&gt; &lt;a href="https://zp.svelte-apps.me/about" rel="noopener noreferrer"&gt;zp.svelte-apps.me/about&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⚖️ &lt;strong&gt;Compare:&lt;/strong&gt; &lt;a href="https://zp.svelte-apps.me/compare" rel="noopener noreferrer"&gt;zp.svelte-apps.me/compare&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💰 &lt;strong&gt;&lt;a href="https://opencode.ai/go?ref=7H224A2F11" rel="noopener noreferrer"&gt;OpenCode Go&lt;/a&gt;&lt;/strong&gt; — $10/month, 13+ models. First month is $5 standard; my link adds another $5 credit on top (we both get it).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;modelgrep and the OpenCode Go model list work without keys; llm-stats enrichment is better with an API key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Already on GitHub Copilot in VSCode?&lt;/strong&gt; You can route OpenCode Go through your existing setup with the &lt;a href="https://marketplace.visualstudio.com/items?itemName=OnesoftQwQ.opencode-go-copilot-provider" rel="noopener noreferrer"&gt;opencode-go-copilot-provider&lt;/a&gt; extension — no separate config dance. (I use it myself; ZenPick picks the model, the extension routes it.)&lt;/p&gt;




&lt;h2&gt;
  
  
  Honest limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fit scores and burn tiers are &lt;strong&gt;derived&lt;/strong&gt;, not hand-curated editorials.&lt;/li&gt;
&lt;li&gt;Benchmarks lag releases; a brand-new Go model may show thin data until upstream catches up.&lt;/li&gt;
&lt;li&gt;Request estimates depend on assumed token patterns — use the calculator for your workflow.&lt;/li&gt;
&lt;li&gt;ZenPick doesn't replace reading &lt;a href="https://opencode.ai/docs/go/" rel="noopener noreferrer"&gt;OpenCode Go docs&lt;/a&gt; for billing, privacy, and plan rules.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What's your biggest Go pain right now?
&lt;/h2&gt;

&lt;p&gt;Is it picking the right model, budgeting the burn, migrating from a closed-source workflow, or something else entirely?&lt;/p&gt;

&lt;p&gt;I'm collecting real stories from people using OpenCode Go to figure out what to build next. Drop a comment with your Tuesday problem — I'll dig into the patterns.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with Svelte 5, SvelteKit, Tailwind v4, shadcn-svelte, and Bun.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Data attribution: modelgrep, llm-stats, OpenCode Go — see the About page.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>sveltekit</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Built Tech Invoice Forge: an Offline-First Invoice App for Tech Freelancers</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Fri, 03 Apr 2026 13:03:59 +0000</pubDate>
      <link>https://dev.to/dev_michael/i-built-tech-invoice-forge-an-offline-first-invoice-app-for-tech-freelancers-41p7</link>
      <guid>https://dev.to/dev_michael/i-built-tech-invoice-forge-an-offline-first-invoice-app-for-tech-freelancers-41p7</guid>
      <description>&lt;p&gt;Most invoicing tools follow the same pattern: create an account, connect to a cloud app, hand over your data, and pay monthly for the privilege of sending a PDF.&lt;/p&gt;

&lt;p&gt;That model works for some people. It never felt right for me.&lt;/p&gt;

&lt;p&gt;I wanted something simpler: a professional invoicing tool that runs entirely in the browser, stores data locally, works offline, and generates clean PDFs instantly without a backend. That is what Tech Invoice Forge is.&lt;/p&gt;

&lt;p&gt;Tech Invoice Forge is a local-first invoice and receipt generator built for tech professionals, freelancers, and small teams who want speed, privacy, and control without subscription friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Tech Invoice Forge does
&lt;/h2&gt;

&lt;p&gt;At its core, Tech Invoice Forge lets you create invoices, preview them live, save them locally, and export them as PDFs or JSON.&lt;/p&gt;

&lt;p&gt;The experience is intentionally straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fill in sender and client details&lt;/li&gt;
&lt;li&gt;Add line items, tax, and discounts&lt;/li&gt;
&lt;li&gt;Watch the PDF preview update as you type&lt;/li&gt;
&lt;li&gt;Save everything locally in the browser&lt;/li&gt;
&lt;li&gt;Download the finished invoice instantly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no account to create and no server round trip for the core workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why build it this way?
&lt;/h2&gt;

&lt;p&gt;I kept running into the same frustration with cloud invoicing software: too much overhead for a simple task.&lt;/p&gt;

&lt;p&gt;If all I need is to generate a clean invoice and send it, why should I have to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create an account&lt;/li&gt;
&lt;li&gt;trust a third-party cloud database&lt;/li&gt;
&lt;li&gt;wait for server-side rendering&lt;/li&gt;
&lt;li&gt;pay for features I do not need&lt;/li&gt;
&lt;li&gt;worry about my invoice history living somewhere else&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tech Invoice Forge is my answer to that problem.&lt;/p&gt;

&lt;p&gt;The goal was not to make a bloated finance platform. The goal was to make a fast, reliable, privacy-first invoicing tool that feels like a native part of the browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes it different
&lt;/h2&gt;

&lt;p&gt;Tech Invoice Forge is built around a few ideas that matter a lot in practice.&lt;/p&gt;

&lt;h3&gt;
  
  
  It works offline by default
&lt;/h3&gt;

&lt;p&gt;All core data lives locally in IndexedDB. That means invoices, client records, and profile details stay on the device unless you choose to move them elsewhere later.&lt;/p&gt;

&lt;h3&gt;
  
  
  It gives instant feedback
&lt;/h3&gt;

&lt;p&gt;The invoice preview updates as you type, so you can see the final document without waiting for a server response.&lt;/p&gt;

&lt;h3&gt;
  
  
  It keeps the workflow lightweight
&lt;/h3&gt;

&lt;p&gt;The app includes the essentials without forcing unnecessary complexity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sender profile management&lt;/li&gt;
&lt;li&gt;saved client records&lt;/li&gt;
&lt;li&gt;invoice history&lt;/li&gt;
&lt;li&gt;multiple templates&lt;/li&gt;
&lt;li&gt;currency support&lt;/li&gt;
&lt;li&gt;notes and terms&lt;/li&gt;
&lt;li&gt;PDF export&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  It stays out of your way
&lt;/h3&gt;

&lt;p&gt;The app is designed to feel clean and professional, not crowded. You can open it, create an invoice, and get back to work quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quick tour of the product
&lt;/h2&gt;

&lt;p&gt;The public site is split into a few simple experiences.&lt;/p&gt;

&lt;p&gt;The landing page positions the app as a local-first alternative to cloud invoicing tools. It focuses on the promise: no accounts, no backend, no monthly subscription just to create a PDF.&lt;/p&gt;

&lt;p&gt;The pricing page makes the product direction explicit. There is a Local Edition for people who want a self-contained workflow, and a Cloud Sync waitlist for users who may eventually want cross-device access and team features.&lt;/p&gt;

&lt;p&gt;The invoice editor is where the product matters most. It includes sender details, client details, invoice metadata, line items, discounts, notes, and a live preview panel that shows the rendered result as you work.&lt;/p&gt;

&lt;p&gt;The profile area keeps business details and client data organized so creating the next invoice is faster than starting from scratch every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack behind it
&lt;/h2&gt;

&lt;p&gt;I built Tech Invoice Forge with a modern Svelte stack because the product benefits from being fast and reactive at the UI layer.&lt;/p&gt;

&lt;p&gt;The current stack includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Svelte 5&lt;/li&gt;
&lt;li&gt;SvelteKit 2&lt;/li&gt;
&lt;li&gt;Tailwind CSS v4&lt;/li&gt;
&lt;li&gt;IndexedDB for local persistence&lt;/li&gt;
&lt;li&gt;Valibot for validation&lt;/li&gt;
&lt;li&gt;pdfmake for PDF generation&lt;/li&gt;
&lt;li&gt;Lucide icons for the interface&lt;/li&gt;
&lt;li&gt;Bun for development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That combination fits the product well. The browser handles the entire workflow, and the app stays responsive while the user is entering data and previewing documents.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned building it
&lt;/h2&gt;

&lt;p&gt;The biggest lesson was that local-first software can feel better than cloud software when the problem is narrow and repetitive.&lt;/p&gt;

&lt;p&gt;For invoicing, most users do not need a giant platform. They need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;speed&lt;/li&gt;
&lt;li&gt;privacy&lt;/li&gt;
&lt;li&gt;reliability&lt;/li&gt;
&lt;li&gt;good defaults&lt;/li&gt;
&lt;li&gt;a clean export path&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you remove the account wall and the backend dependency, the product becomes easier to trust and easier to use.&lt;/p&gt;

&lt;p&gt;I also learned that a small set of thoughtful features is usually more valuable than a long list of generic ones. If the preview is instant, the data is local, and the PDF looks professional, the app already solves the core job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;p&gt;Tech Invoice Forge is a good fit for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;freelancers who want a fast invoice workflow&lt;/li&gt;
&lt;li&gt;developers who prefer local-first tools&lt;/li&gt;
&lt;li&gt;agencies that want a lightweight billing tool&lt;/li&gt;
&lt;li&gt;anyone who does not want their invoice data tied to a cloud account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you care about privacy, portability, and a low-friction workflow, this kind of app makes a lot of sense.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;I built Tech Invoice Forge because invoicing should not feel like signing up for another subscription service.&lt;/p&gt;

&lt;p&gt;It should feel like opening a tool, doing the work, and getting a clean result immediately.&lt;/p&gt;

&lt;p&gt;If that sounds useful, try the live demo and see how it feels in practice.&lt;/p&gt;

&lt;p&gt;Live demo: &lt;a href="https://tif.svelte-apps.me" rel="noopener noreferrer"&gt;https://tif.svelte-apps.me&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Michael-Obele/tif" rel="noopener noreferrer"&gt;https://github.com/Michael-Obele/tif&lt;/a&gt;&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>sveltekit</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>DocShark: a local-first documentation MCP server for AI</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Thu, 19 Mar 2026 10:39:23 +0000</pubDate>
      <link>https://dev.to/dev_michael/docshark-a-local-first-documentation-mcp-server-for-ai-ia9</link>
      <guid>https://dev.to/dev_michael/docshark-a-local-first-documentation-mcp-server-for-ai-ia9</guid>
      <description>&lt;h2&gt;
  
  
  DocShark: documentation for AI, served locally
&lt;/h2&gt;

&lt;p&gt;Most AI tools are only as good as the documentation they can reach.&lt;br&gt;
When the docs are spread across websites, rendered client-side, or buried behind a maze of pages, the context you get back is often incomplete or stale.&lt;/p&gt;

&lt;p&gt;That is the problem DocShark is built to solve.&lt;/p&gt;

&lt;p&gt;DocShark is a fast, local-first &lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;Model Context Protocol&lt;/a&gt; server that scrapes, indexes, and serves documentation from any website. It turns documentation into a local knowledge base that your AI tools can search instantly, without depending on a cloud service or an API key.&lt;/p&gt;

&lt;p&gt;Live site:&lt;br&gt;


&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://dsharkd.svelte-apps.me/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;dsharkd.svelte-apps.me&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;GitHub: &lt;a href="https://github.com/Michael-Obele/docshark" rel="noopener noreferrer"&gt;https://github.com/Michael-Obele/docshark&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What DocShark does
&lt;/h2&gt;

&lt;p&gt;At a high level, DocShark does four things well:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crawls documentation websites.&lt;/li&gt;
&lt;li&gt;Extracts the useful content and converts it to clean Markdown.&lt;/li&gt;
&lt;li&gt;Breaks pages into context-aware chunks.&lt;/li&gt;
&lt;li&gt;Makes the result searchable through MCP and the CLI.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result is a local documentation layer that works with coding agents, desktop clients, and terminal workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;There are already tools that can fetch docs, but many of them only work for a narrow source type or rely on heavier infrastructure.&lt;/p&gt;

&lt;p&gt;DocShark focuses on a simpler model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;documentation websites, not just GitHub repos&lt;/li&gt;
&lt;li&gt;local storage, not a remote index&lt;/li&gt;
&lt;li&gt;SQLite FTS5, not a hosted search backend&lt;/li&gt;
&lt;li&gt;Bun-first tooling, not a large runtime stack&lt;/li&gt;
&lt;li&gt;MCP compatibility, so AI clients can use it directly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That combination makes it useful both for individual developers and for people building agent workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  How DocShark compares
&lt;/h2&gt;

&lt;p&gt;Context7 is the obvious comparison point because it also solves the "AI needs current documentation" problem. It is strong when you want a hosted documentation service that injects up-to-date library docs and examples into your prompt.&lt;/p&gt;

&lt;p&gt;DocShark takes a different path. It is better when you want to index real documentation websites, keep everything local, avoid API keys and rate limits, and use one tool for both MCP and CLI workflows.&lt;/p&gt;

&lt;p&gt;Here is the practical tradeoff:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Strengths&lt;/th&gt;
&lt;th&gt;Limitations&lt;/th&gt;
&lt;th&gt;Where DocShark wins&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Context7&lt;/td&gt;
&lt;td&gt;Fresh version-specific docs, code examples, MCP integration, polished onboarding&lt;/td&gt;
&lt;td&gt;Cloud service, API key/rate-limit considerations, focused on supported libraries rather than arbitrary websites&lt;/td&gt;
&lt;td&gt;DocShark is better if you want a local-first index for any documentation site and no external dependency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docfork&lt;/td&gt;
&lt;td&gt;Broad library coverage, up-to-date docs, open source, easy access to software library docs&lt;/td&gt;
&lt;td&gt;Optimized for library documentation rather than arbitrary rendered documentation sites&lt;/td&gt;
&lt;td&gt;DocShark is better for crawling and indexing any docs website, including custom or rendered docs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deepcon&lt;/td&gt;
&lt;td&gt;Strong documentation retrieval for AI workflows, cloud-hosted convenience&lt;/td&gt;
&lt;td&gt;More service-oriented than local-first, and it is narrower in how you manage your own source set&lt;/td&gt;
&lt;td&gt;DocShark is better if you want to own the index and control exactly what gets crawled and stored&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitMCP / GitHub repo tools&lt;/td&gt;
&lt;td&gt;Great for repository-centric docs and code browsing&lt;/td&gt;
&lt;td&gt;Best when the source of truth lives in GitHub, not when the docs are published on a separate site&lt;/td&gt;
&lt;td&gt;DocShark is better for public docs sites, rendered pages, and documentation that is not tied to one repo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per-library MCP servers&lt;/td&gt;
&lt;td&gt;Very targeted, often simple to set up for one project&lt;/td&gt;
&lt;td&gt;They do not scale well when you need to switch between many libraries&lt;/td&gt;
&lt;td&gt;DocShark is better as a single general-purpose server for multiple sources&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you want the shortest summary: Context7 is a strong hosted documentation service, but DocShark is the better alternative for local-first workflows, broader website coverage, and users who want to keep the whole documentation layer under their control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core features
&lt;/h2&gt;


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

  
&lt;h3&gt;
  
  
  Any documentation site
&lt;/h3&gt;

&lt;p&gt;DocShark is not limited to source repositories. It can crawl public documentation sites and index their rendered content, which makes it useful for modern docs that are built from multiple routes, dynamic pages, or generated content.&lt;/p&gt;
&lt;h3&gt;
  
  
  Smart extraction
&lt;/h3&gt;

&lt;p&gt;The scraper is designed to pull out the main content and discard the noise. Navigation, sidebars, and other non-essential layout elements are removed so the indexed result is easier for an AI assistant to use.&lt;/p&gt;
&lt;h3&gt;
  
  
  Semantic chunking
&lt;/h3&gt;

&lt;p&gt;Pages are split by heading structure so the search results preserve context. That matters because a search result is only useful if it still knows where it came from in the document.&lt;/p&gt;
&lt;h3&gt;
  
  
  SQLite + FTS5 search
&lt;/h3&gt;

&lt;p&gt;DocShark uses SQLite with FTS5 for full-text search, which keeps the entire experience local and fast.&lt;/p&gt;

&lt;p&gt;That gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;instant keyword search&lt;/li&gt;
&lt;li&gt;offline access once content is indexed&lt;/li&gt;
&lt;li&gt;no external search provider&lt;/li&gt;
&lt;li&gt;no dependency on cloud APIs&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  JS-rendered site support
&lt;/h3&gt;

&lt;p&gt;Many docs sites are not simple static HTML pages.&lt;br&gt;
DocShark supports rendered documentation sites, so it can work with sites that rely on JavaScript for content delivery.&lt;/p&gt;
&lt;h3&gt;
  
  
  Polite crawling
&lt;/h3&gt;

&lt;p&gt;The crawler respects site structure and includes rate limiting and robots-aware behavior so it is safer to use against public documentation sites.&lt;/p&gt;
&lt;h3&gt;
  
  
  MCP server + CLI
&lt;/h3&gt;

&lt;p&gt;DocShark exposes the same knowledge base through both an MCP server and a Bun-first CLI. That gives you two ways to work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;agent integrations for AI tools&lt;/li&gt;
&lt;li&gt;direct terminal commands for indexing, searching, and maintenance

&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  The workflow
&lt;/h2&gt;

&lt;p&gt;Using DocShark usually looks like this:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Add a documentation site
&lt;/h3&gt;

&lt;p&gt;Point DocShark at a docs URL to begin crawling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bunx docshark add https://svelte.dev/docs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Search the indexed content
&lt;/h3&gt;

&lt;p&gt;Once the content is indexed, you can search for the exact topic you need.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bunx docshark search &lt;span class="s2"&gt;"query syntax"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Connect your AI tool
&lt;/h3&gt;

&lt;p&gt;Because DocShark speaks MCP, you can connect it to compatible clients and let the assistant query your documentation library directly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"docshark"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bunx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"docshark"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"--stdio"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  CLI features
&lt;/h2&gt;

&lt;p&gt;DocShark includes a practical set of commands for day-to-day use:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;start&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Runs the MCP server in HTTP or STDIO mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;add&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Adds a new documentation source and starts crawling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rename&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Renames an existing library without changing content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Searches the indexed documentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Lists indexed libraries and their status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;refresh&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Re-crawls an existing library&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;remove&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Deletes a library and its indexed content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Returns the full markdown content for a page&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;info&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shows details and indexed pages for a library&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;update&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Checks for or installs a newer Bun release&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That command surface makes the project useful even if you never connect it to an AI client.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP tools
&lt;/h2&gt;

&lt;p&gt;On the protocol side, DocShark exposes a compact but useful toolset:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;manage_library&lt;/code&gt; to add, rename, refresh, inspect, or remove a library&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;search_docs&lt;/code&gt; to search across indexed content&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;list_libraries&lt;/code&gt; to inspect what is available&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_doc_page&lt;/code&gt; to retrieve a full page in markdown form&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those tools are designed to map naturally to how people actually work with documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is inside the stack
&lt;/h2&gt;

&lt;p&gt;DocShark keeps the stack intentionally small:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bun for runtime and CLI execution&lt;/li&gt;
&lt;li&gt;SQLite for persistence&lt;/li&gt;
&lt;li&gt;FTS5 for search&lt;/li&gt;
&lt;li&gt;Readability.js for extracting the main content&lt;/li&gt;
&lt;li&gt;Turndown with GFM support for Markdown conversion&lt;/li&gt;
&lt;li&gt;Valibot for validation&lt;/li&gt;
&lt;li&gt;CAC for the CLI parser and command dispatch&lt;/li&gt;
&lt;li&gt;TMCP for the protocol server&lt;/li&gt;
&lt;li&gt;A shared library service that powers both the CLI and MCP server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The current MCP surface is intentionally compact:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;manage_library&lt;/code&gt; for add, rename, refresh, inspect, and remove workflows&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;search_docs&lt;/code&gt; for ranked search&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;list_libraries&lt;/code&gt; for discovery&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_doc_page&lt;/code&gt; for full-page retrieval&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That choice keeps the project local, fast, and easier to reason about than a larger server stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it is for
&lt;/h2&gt;

&lt;p&gt;DocShark is a good fit if you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;use AI coding assistants regularly&lt;/li&gt;
&lt;li&gt;want documentation access inside your editor or terminal&lt;/li&gt;
&lt;li&gt;work with documentation sites that are not simple markdown repos&lt;/li&gt;
&lt;li&gt;prefer local tools over hosted indexing services&lt;/li&gt;
&lt;li&gt;want one general-purpose MCP server instead of many per-library integrations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it out
&lt;/h2&gt;

&lt;p&gt;If you want to see the project in action, open the live site and source repo above.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Michael-Obele/docshark" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Star DocShark on GitHub&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thought
&lt;/h2&gt;

&lt;p&gt;DocShark is a small idea with a practical goal: make documentation available where AI tools already work, without handing your context over to a cloud service.&lt;/p&gt;

&lt;p&gt;If you spend time jumping between docs tabs, terminal commands, and assistant prompts, it is the kind of tool that quietly removes friction from the whole workflow.&lt;/p&gt;

</description>
      <category>bunjs</category>
      <category>typescript</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>What Your AI Chat History Says About Your Love Life (A Valentine’s Roast)</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Sat, 14 Feb 2026 22:40:34 +0000</pubDate>
      <link>https://dev.to/dev_michael/what-your-ai-chat-history-says-about-your-love-life-a-valentines-roast-o6d</link>
      <guid>https://dev.to/dev_michael/what-your-ai-chat-history-says-about-your-love-life-a-valentines-roast-o6d</guid>
      <description>&lt;p&gt;It’s Valentine’s Day. The air is filled with the scent of roses, expensive chocolates, and the faint ozone smell of servers overheating.&lt;/p&gt;

&lt;p&gt;While everyone else is out having candlelit dinners, some of us are right here, staring at a blinking cursor, asking a Large Language Model why our CSS grid isn't centering. But have you ever stopped to think that your relationship with your AI might be a mirror for your actual romantic life?&lt;/p&gt;

&lt;p&gt;I took a look at the most common "AI conversation archetypes" among developers. Find your chat style below, and accept your diagnosis.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The "Fix This Immediately" Typer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Logs:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Error: undefined is not a function. Fix it."&lt;/em&gt;&lt;br&gt;
&lt;em&gt;"Still broken. Try again."&lt;/em&gt;&lt;br&gt;
&lt;em&gt;"Why did you import a library I don't have? REFOCUS."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The Diagnosis:&lt;/strong&gt; &lt;strong&gt;The Toxic Ex.&lt;/strong&gt;&lt;br&gt;
You don't want a partner; you want a miracle worker who can read your mind without you communicating your needs. You provide zero context, demand immediate results, and threaten to switch to a different model the second things get difficult. In relationships, you’re probably the one who says "I'm fine" when you are absolutely, cataclysmically &lt;em&gt;not&lt;/em&gt; fine, and then gets mad when your partner doesn't guess why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prescription:&lt;/strong&gt; touch grass (or at least add a "please").&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Over-Explainer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Logs:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Hi! Hope you're having a good processing cycle. So, I have this React component—it's a button, but not just any button, it represents the existential dread of the user. I want it to be blue, but like, a sad blue? Here is the entire history of the project since 2019 for context..."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The Diagnosis:&lt;/strong&gt; &lt;strong&gt;The Stage 5 Clinger.&lt;/strong&gt;&lt;br&gt;
You pour your heart out. You treat every prompt like a first date where you simply &lt;em&gt;must&lt;/em&gt; explain your entire childhood trauma before the appetizers arrive. You crave deep connection and context, but you’re mostly just exhausting the token limit. In love, you’re sending 14-paragraph texts at 2 AM asking "What are we?" after one coffee date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prescription:&lt;/strong&gt; Learn to summarize. Your AI (and your date) doesn't need to know about the legacy code from three years ago.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The "Just Copy-Paste" trust fall
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Logs:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Write me a full auth system in Go."&lt;/em&gt;&lt;br&gt;
&lt;em&gt;(User copies code without reading it)&lt;/em&gt;&lt;br&gt;
&lt;em&gt;(User deploys to production)&lt;/em&gt;&lt;br&gt;
&lt;em&gt;(Production crashes)&lt;/em&gt;&lt;br&gt;
&lt;em&gt;"Why did you do this to me??"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The Diagnosis:&lt;/strong&gt; &lt;strong&gt;The Hopeless Romantic.&lt;/strong&gt;&lt;br&gt;
You fall in love fast and hard. You trust blindly. You see a snippet of code that looks vaguely correct, and you’re already planning the wedding (deployment). You ignore all the red flags (security vulnerabilities) because you just want it to &lt;em&gt;work&lt;/em&gt; so bad. When it inevitably breaks your heart, you blame the universe instead of your lack of unit tests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prescription:&lt;/strong&gt; Code review is a love language. Use it.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The Gaslighter
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Logs:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Are you sure that's the syntax? Pretty sure it's not."&lt;/em&gt;&lt;br&gt;
&lt;em&gt;"I think you're hallucinating. That library doesn't exist."&lt;/em&gt;&lt;br&gt;
&lt;em&gt;(AI apologizes)&lt;/em&gt;&lt;br&gt;
&lt;em&gt;"Actually, wait, you were right. But you should have been more confident."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The Diagnosis:&lt;/strong&gt; &lt;strong&gt;The "It’s Complicated."&lt;/strong&gt;&lt;br&gt;
You enjoy the power dynamic. You like testing boundaries. You don't actually want the answer; you want to see if you can trick the other party into slipping up. This is a relationship built on intellectual one-upmanship. It’s exhausting, it’s petty, and frankly, it’s why you’re spending Valentine's Day arguing with a non-sentient neural network about the efficacy of &lt;code&gt;var&lt;/code&gt; vs &lt;code&gt;let&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prescription:&lt;/strong&gt; Admit when you're wrong. It’s sexy.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The "Prompt Engineer" Perfectionist
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The Logs:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Act as a senior Rust engineer with 20 years of experience, a PhD in CompSci, and a penchant for dry humor. Analyze this function using the Socratic method..."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The Diagnosis:&lt;/strong&gt; &lt;strong&gt;The Checklist Dater.&lt;/strong&gt;&lt;br&gt;
You have a list of requirements for a partner that is longer than a webpack config file. You don't want a connection; you want a customized build. You spend more time tweaking your dating profile (prompt) than actually going on dates (coding). You are paralyzed by the idea that there might be a &lt;em&gt;slightly better&lt;/em&gt; optimization out there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prescription:&lt;/strong&gt; Sometimes &lt;code&gt;npm install&lt;/code&gt; is good enough. Perfect is the enemy of "shipped."&lt;/p&gt;




&lt;h3&gt;
  
  
  So, who is your Valentine?
&lt;/h3&gt;

&lt;p&gt;Whether you're treating your AI like a therapist, a junior dev, or a magical oracle, remember: at least the AI replies instantly and never judges you for eating pizza over the sink at 3 AM.&lt;/p&gt;

&lt;p&gt;Happy Valentine's Day, devs. May your commits be clean, your tests pass, and your deployment pipelines remain green. ❤️&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>humor</category>
      <category>productivity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Day 12: The Grand Finale &amp; New App Launch! (Countdown Timer)</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Wed, 31 Dec 2025 19:41:28 +0000</pubDate>
      <link>https://dev.to/dev_michael/day-12-the-grand-finale-new-app-launch-countdown-timer-4lfg</link>
      <guid>https://dev.to/dev_michael/day-12-the-grand-finale-new-app-launch-countdown-timer-4lfg</guid>
      <description>&lt;p&gt;🎄 &lt;strong&gt;Day 12 of 12 Days of Svelte Apps&lt;/strong&gt; 🎄&lt;/p&gt;

&lt;p&gt;We made it! To celebrate the finale, we are launching a brand new mini-app today.&lt;/p&gt;

&lt;p&gt;🎁 &lt;strong&gt;Presenting: The Countdown Timer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔗 Start counting:&lt;/strong&gt; &lt;a href="https://svelte-apps.me/apps/countdown-timer" rel="noopener noreferrer"&gt;https://svelte-apps.me/apps/countdown-timer&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why we love countdowns
&lt;/h2&gt;

&lt;p&gt;Did you know the first crowd countdown (in Times Square/NYC) only started in 1979? It's a surprisingly modern tradition.&lt;/p&gt;

&lt;p&gt;We love them because they mark a "genesis moment"—when time resets and anything feels possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;p&gt;This new app lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set a target date and time&lt;/li&gt;
&lt;li&gt;See a live, ticking breakdown of Days, Hours, Minutes, and Seconds&lt;/li&gt;
&lt;li&gt;Enjoy a distraction-free, beautiful interface&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Thank You!
&lt;/h2&gt;

&lt;p&gt;Thank you for following along with this 12-day series. We've explored everything from budget trackers to text summarizers.&lt;/p&gt;

&lt;p&gt;The Svelte MiniApps collection is open source and growing. If you want to contribute in 2025, come join us on GitHub!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy Holidays and a Happy New Year!&lt;/strong&gt; 🥂&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>sveltekit</category>
      <category>newyear</category>
      <category>launch</category>
    </item>
    <item>
      <title>Day 11: New Year, New Security (Password Generator)</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Wed, 31 Dec 2025 19:40:03 +0000</pubDate>
      <link>https://dev.to/dev_michael/day-11-new-year-new-security-password-generator-1hah</link>
      <guid>https://dev.to/dev_michael/day-11-new-year-new-security-password-generator-1hah</guid>
      <description>&lt;p&gt;It’s &lt;strong&gt;Day 11&lt;/strong&gt; of &lt;strong&gt;12 Days of Svelte Apps&lt;/strong&gt; 🎄&lt;/p&gt;

&lt;p&gt;As we approach the New Year, it's the perfect time for a "Digital Deep Clean".&lt;/p&gt;

&lt;p&gt;Verify your backups, unsubscribe from spam, and &lt;strong&gt;update your weak passwords&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fact:&lt;/strong&gt; "123456", "password", and "admin" are still the most leaked passwords in 2024.&lt;/p&gt;

&lt;p&gt;Today's app: &lt;strong&gt;Random Password Generator&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔗 Generate a key:&lt;/strong&gt; &lt;a href="https://svelte-apps.me/apps/random-password-generator" rel="noopener noreferrer"&gt;https://svelte-apps.me/apps/random-password-generator&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;💻 View the code:&lt;/strong&gt; &lt;a href="https://github.com/Michael-Obele/Svelte-MiniApps/tree/main/src/routes/apps/(app)/random-password-generator" rel="noopener noreferrer"&gt;https://github.com/Michael-Obele/Svelte-MiniApps/tree/main/src/routes/apps/(app)/random-password-generator&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use this over a server-side tool?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Privacy.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;This app runs entirely in your browser. The passwords generated never leave your device. There is no API call involved in the generation logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Length Control&lt;/strong&gt;: Go beyond 8 characters. Try 20+.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Character Sets&lt;/strong&gt;: Toggle symbols, numbers, upper/lowercase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One-click Copy&lt;/strong&gt;: Grab it and paste it into your password manager.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start 2025 secure.&lt;/p&gt;

</description>
      <category>security</category>
      <category>svelte</category>
      <category>privacy</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Day 10: Visualize Your 2024 Code Journey (GitHub Tracker)</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Wed, 31 Dec 2025 19:38:57 +0000</pubDate>
      <link>https://dev.to/dev_michael/day-10-visualize-your-2024-code-journey-github-tracker-29k9</link>
      <guid>https://dev.to/dev_michael/day-10-visualize-your-2024-code-journey-github-tracker-29k9</guid>
      <description>&lt;p&gt;It’s &lt;strong&gt;Day 10&lt;/strong&gt; of &lt;strong&gt;12 Days of Svelte Apps&lt;/strong&gt; 🎄&lt;/p&gt;

&lt;p&gt;The end of the year is a time for reflection. For developers, that often means looking at our contribution graphs.&lt;/p&gt;

&lt;p&gt;Today's app is the &lt;strong&gt;GitHub Contribution Tracker&lt;/strong&gt;, a tool to visualize and celebrate your open source activity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔗 Create your summary:&lt;/strong&gt; &lt;a href="https://svelte-apps.me/apps/github-contribution-tracker" rel="noopener noreferrer"&gt;https://svelte-apps.me/apps/github-contribution-tracker&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;💻 View the code:&lt;/strong&gt; &lt;a href="https://github.com/Michael-Obele/Svelte-MiniApps/tree/main/src/routes/apps/(app)/github-contribution-tracker" rel="noopener noreferrer"&gt;https://github.com/Michael-Obele/Svelte-MiniApps/tree/main/src/routes/apps/(app)/github-contribution-tracker&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  More Than Green Squares
&lt;/h2&gt;

&lt;p&gt;While GitHub's profile graph is iconic, sometimes you want focused data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What was my longest streak?&lt;/li&gt;
&lt;li&gt;How many total contributions did I make?&lt;/li&gt;
&lt;li&gt;Which repos got the most love?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Built with SvelteKit
&lt;/h2&gt;

&lt;p&gt;This app demonstrates fetching data from the GitHub GraphQL API server-side and rendering visual components with Svelte. It handles authentication and data visualization seamlessly.&lt;/p&gt;

&lt;p&gt;Share your stats in the comments! 👇&lt;/p&gt;

</description>
      <category>github</category>
      <category>svelte</category>
      <category>yearincode</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Day 9: Smart Holiday Shopping &amp; Travel (Currency Converter)</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Wed, 31 Dec 2025 19:37:37 +0000</pubDate>
      <link>https://dev.to/dev_michael/day-9-smart-holiday-shopping-travel-currency-converter-dmb</link>
      <guid>https://dev.to/dev_michael/day-9-smart-holiday-shopping-travel-currency-converter-dmb</guid>
      <description>&lt;p&gt;It’s &lt;strong&gt;Day 9&lt;/strong&gt; of &lt;strong&gt;12 Days of Svelte Apps&lt;/strong&gt; 🎄&lt;/p&gt;

&lt;p&gt;Shopping globally for gifts? Planning a winter getaway?&lt;/p&gt;

&lt;p&gt;Don't guess with your money. Today's app is the &lt;strong&gt;Currency Converter&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔗 Try it live:&lt;/strong&gt; &lt;a href="https://svelte-apps.me/apps/currency-converter" rel="noopener noreferrer"&gt;https://svelte-apps.me/apps/currency-converter&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;💻 View the code:&lt;/strong&gt; &lt;a href="https://github.com/Michael-Obele/Svelte-MiniApps/tree/main/src/routes/apps/(app)/currency-converter" rel="noopener noreferrer"&gt;https://github.com/Michael-Obele/Svelte-MiniApps/tree/main/src/routes/apps/(app)/currency-converter&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  real-time Rates
&lt;/h2&gt;

&lt;p&gt;We hook into live exchange rate APIs to ensure you're getting current data, not last month's numbers. &lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;150+ Currencies&lt;/strong&gt;: From AUD to ZAR.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant Calculation&lt;/strong&gt;: Reactivity in Svelte makes conversions feel immediate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reverse Mode&lt;/strong&gt;: Easily swap source and target currencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Save your budget this holiday season by knowing exactly what you're spending.&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>sveltekit</category>
      <category>travel</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Day 8: Recipe Conversions Without the Panic (Unit Converter)</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Wed, 31 Dec 2025 17:55:11 +0000</pubDate>
      <link>https://dev.to/dev_michael/day-8-recipe-conversions-without-the-panic-unit-converter-2hb6</link>
      <guid>https://dev.to/dev_michael/day-8-recipe-conversions-without-the-panic-unit-converter-2hb6</guid>
      <description>&lt;p&gt;It’s &lt;strong&gt;Day 8&lt;/strong&gt; of &lt;strong&gt;12 Days of Svelte Apps&lt;/strong&gt; 🎄&lt;/p&gt;

&lt;p&gt;Holiday cooking is fun… right up until the recipe switches units on you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cups vs milliliters&lt;/li&gt;
&lt;li&gt;ounces vs grams&lt;/li&gt;
&lt;li&gt;Fahrenheit vs Celsius&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So today’s mini-app is the &lt;strong&gt;Unit Converter&lt;/strong&gt; — a clean, fast converter you can keep open while you cook.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔗 Try it live:&lt;/strong&gt; &lt;a href="https://svelte-apps.me/apps/unit-converter" rel="noopener noreferrer"&gt;https://svelte-apps.me/apps/unit-converter&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;💻 View the code:&lt;/strong&gt; &lt;a href="https://github.com/Michael-Obele/Svelte-MiniApps/tree/main/src/routes/apps/(app)/unit-converter" rel="noopener noreferrer"&gt;https://github.com/Michael-Obele/Svelte-MiniApps/tree/main/src/routes/apps/(app)/unit-converter&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;The UI is intentionally simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pick a unit category (Volume, Temperature, Mass, etc.)&lt;/li&gt;
&lt;li&gt;Enter a value&lt;/li&gt;
&lt;li&gt;Choose “From” and “To” units&lt;/li&gt;
&lt;li&gt;Get a formatted result instantly&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It also includes a &lt;strong&gt;Swap&lt;/strong&gt; button so you can flip the direction quickly, and a &lt;strong&gt;Clear&lt;/strong&gt; action to reset the input.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes it feel good to use
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Results are formatted cleanly (so you don’t get unreadable long decimals)&lt;/li&gt;
&lt;li&gt;It handles "same unit" conversions gracefully&lt;/li&gt;
&lt;li&gt;It supports a wide set of categories beyond cooking too (length, area, time, angle, data, energy, force, power, pressure)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A few holiday-friendly conversions to try
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Oven temperature
&lt;/h3&gt;

&lt;p&gt;If your recipe says &lt;strong&gt;350°F&lt;/strong&gt; but you’re using a °C oven, pick &lt;strong&gt;Temperature&lt;/strong&gt; and convert.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cups to milliliters
&lt;/h3&gt;

&lt;p&gt;For recipes written in US cups, pick &lt;strong&gt;Volume&lt;/strong&gt; and convert to mL for a measuring jug.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ounces to grams
&lt;/h3&gt;

&lt;p&gt;For baking (where precision matters), converting to grams can make measuring a lot easier.&lt;/p&gt;

&lt;p&gt;If you try it, post a conversion you used today (or a recipe you’re making) and tag me.&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>sveltekit</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Day 7: Holiday Word of the Day (English Dictionary App)</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Wed, 31 Dec 2025 17:42:56 +0000</pubDate>
      <link>https://dev.to/dev_michael/day-7-holiday-word-of-the-day-english-dictionary-app-51jm</link>
      <guid>https://dev.to/dev_michael/day-7-holiday-word-of-the-day-english-dictionary-app-51jm</guid>
      <description>&lt;p&gt;It’s &lt;strong&gt;Day 7&lt;/strong&gt; of &lt;strong&gt;12 Days of Svelte Apps&lt;/strong&gt; 🎄&lt;/p&gt;

&lt;p&gt;If you want a tiny holiday habit that takes less than a minute, try this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick one word you heard today and look it up.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Maybe it’s from a carol, a Christmas movie, a family recipe, or a caption you’re writing.&lt;/p&gt;

&lt;p&gt;Today’s mini-app is the &lt;strong&gt;English Dictionary App&lt;/strong&gt; — a clean word lookup tool that focuses on the stuff you actually want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clear definitions&lt;/li&gt;
&lt;li&gt;pronunciation (including audio when available)&lt;/li&gt;
&lt;li&gt;synonyms and antonyms&lt;/li&gt;
&lt;li&gt;examples and word origin (when provided)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🔗 Try it live:&lt;/strong&gt; &lt;a href="https://svelte-apps.me/apps/dictionary-app" rel="noopener noreferrer"&gt;https://svelte-apps.me/apps/dictionary-app&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;💻 View the code:&lt;/strong&gt; &lt;a href="https://github.com/Michael-Obele/Svelte-MiniApps/tree/main/src/routes/apps/(app)/dictionary-app" rel="noopener noreferrer"&gt;https://github.com/Michael-Obele/Svelte-MiniApps/tree/main/src/routes/apps/(app)/dictionary-app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get from one search
&lt;/h2&gt;

&lt;p&gt;Type a word and hit &lt;strong&gt;Find Meaning&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The results are organized so you can skim quickly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the word + phonetic spelling&lt;/li&gt;
&lt;li&gt;pronunciation buttons (tap to play)&lt;/li&gt;
&lt;li&gt;meanings grouped by part of speech (noun/verb/etc.)&lt;/li&gt;
&lt;li&gt;numbered definitions (with examples when available)&lt;/li&gt;
&lt;li&gt;a small set of synonyms/antonyms (deduped and kept readable)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There’s also a &lt;strong&gt;Cached&lt;/strong&gt; indicator when results come from cache — a nice detail when you’re searching the same word again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Holiday words to try (starter pack)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;merriment&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tinsel&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;solstice&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;carol&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yule&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this is a great micro-app
&lt;/h2&gt;

&lt;p&gt;It’s not trying to be a full language-learning platform. It’s a quick lookup tool with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a friendly empty state&lt;/li&gt;
&lt;li&gt;a solid loading experience (skeleton UI)&lt;/li&gt;
&lt;li&gt;a clear error state when a word isn’t found&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you try it, reply with your &lt;strong&gt;holiday word of the day&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>sveltekit</category>
      <category>learning</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
