<?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>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 href="https://opencode.ai/go?ref=7H224A2F11" rel="noopener noreferrer"&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>
    <item>
      <title>Day 6: Christmas Emoji Challenge (Advanced Emoji Tools)</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Wed, 31 Dec 2025 17:32:55 +0000</pubDate>
      <link>https://dev.to/dev_michael/day-6-christmas-emoji-challenge-advanced-emoji-tools-1cgj</link>
      <guid>https://dev.to/dev_michael/day-6-christmas-emoji-challenge-advanced-emoji-tools-1cgj</guid>
      <description>&lt;p&gt;It’s &lt;strong&gt;Day 6&lt;/strong&gt; of &lt;strong&gt;12 Days of Svelte Apps&lt;/strong&gt; 🎄&lt;/p&gt;

&lt;p&gt;Today we’re doing something fun: &lt;strong&gt;Advanced Emoji Tools&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/advanced-emoji-tools" rel="noopener noreferrer"&gt;https://svelte-apps.me/apps/advanced-emoji-tools&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)/advanced-emoji-tools" rel="noopener noreferrer"&gt;https://github.com/Michael-Obele/Svelte-MiniApps/tree/main/src/routes/apps/(app)/advanced-emoji-tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This one is built for speed: search emojis, transform text, and copy results instantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenge
&lt;/h2&gt;

&lt;p&gt;Post a Christmas song in emojis and let people guess.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔔🔔🔔&lt;/li&gt;
&lt;li&gt;🎅🛷🌙&lt;/li&gt;
&lt;li&gt;❄️🏠🔥☕&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What the app includes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Transform&lt;/strong&gt;: emojify text (and reverse it)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt;: type a keyword, hit enter, and grab the exact emoji you want&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Random&lt;/strong&gt;: roll a random emoji when you need inspiration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check&lt;/strong&gt;: see whether a word has an emoji equivalent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app makes it easy to search + copy emojis quickly — perfect for turning replies into little puzzles.&lt;/p&gt;

&lt;h2&gt;
  
  
  A few ready-to-post prompts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;“Guess the movie”: 🧑‍🎄🏠🧱🪤&lt;/li&gt;
&lt;li&gt;“Holiday vibe check”: 🎄☕📚✨&lt;/li&gt;
&lt;li&gt;“Travel day”: ✈️🧳❄️&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>svelte</category>
      <category>fun</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Day 5: Festive QR Gift Tags (QR Code Generator)</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Wed, 31 Dec 2025 17:31:39 +0000</pubDate>
      <link>https://dev.to/dev_michael/day-5-festive-qr-gift-tags-qr-code-generator-26n9</link>
      <guid>https://dev.to/dev_michael/day-5-festive-qr-gift-tags-qr-code-generator-26n9</guid>
      <description>&lt;p&gt;It’s &lt;strong&gt;Day 5&lt;/strong&gt; of &lt;strong&gt;12 Days of Svelte Apps&lt;/strong&gt; 🎄&lt;/p&gt;

&lt;p&gt;Today’s featured mini-app is the &lt;strong&gt;QR Code Generator&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/qr-code-generator" rel="noopener noreferrer"&gt;https://svelte-apps.me/apps/qr-code-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)/qr-code-generator" rel="noopener noreferrer"&gt;https://github.com/Michael-Obele/Svelte-MiniApps/tree/main/src/routes/apps/(app)/qr-code-generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’ve never used QR codes beyond restaurant menus, here’s a holiday twist: &lt;strong&gt;QR gift tags&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of writing a long URL on a tag (or texting it later), you generate a QR once, download it, and print it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it can generate
&lt;/h2&gt;

&lt;p&gt;The app includes three quick modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text/URL&lt;/strong&gt;: any message or link&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contact Card&lt;/strong&gt;: generate a vCard-style QR for sharing contact details&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Social Links&lt;/strong&gt;: bundle multiple links into one QR payload&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3 holiday uses (that feel a little magical)
&lt;/h2&gt;

&lt;p&gt;1) &lt;strong&gt;Video greeting tag&lt;/strong&gt;: link a short "Merry Christmas" video.&lt;br&gt;
2) &lt;strong&gt;Playlist gift&lt;/strong&gt;: link a Spotify/Apple playlist.&lt;br&gt;
3) &lt;strong&gt;Photo album&lt;/strong&gt;: link a shared album.&lt;/p&gt;

&lt;p&gt;Bonus idea: add a QR to a “coupon” gift ("One free coffee", "Movie night", "Car wash") and link it to a note or a digital card.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick how-to
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the app&lt;/li&gt;
&lt;li&gt;Pick &lt;strong&gt;Text/URL&lt;/strong&gt;, &lt;strong&gt;Contact Card&lt;/strong&gt;, or &lt;strong&gt;Social Links&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enter your info&lt;/li&gt;
&lt;li&gt;Download the QR code image&lt;/li&gt;
&lt;li&gt;Print it small and tape it to a tag 🎁&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Generate → download → print. That’s it.&lt;/p&gt;

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