<?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.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 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>
    <item>
      <title>🚀 Boost Your Svelte DX: A Guide to the Vite Svelte Inspector</title>
      <dc:creator>Michael Amachree</dc:creator>
      <pubDate>Wed, 31 Dec 2025 00:06:35 +0000</pubDate>
      <link>https://dev.to/dev_michael/boost-your-svelte-dx-a-guide-to-the-vite-svelte-inspector-2kim</link>
      <guid>https://dev.to/dev_michael/boost-your-svelte-dx-a-guide-to-the-vite-svelte-inspector-2kim</guid>
      <description>&lt;p&gt;Ever found yourself staring at a UI element in your browser, wondering exactly which component file it lives in?&lt;/p&gt;

&lt;p&gt;If you are using Svelte with Vite, there is a powerful tool designed to solve exactly that. Meet &lt;strong&gt;&lt;code&gt;@sveltejs/vite-plugin-svelte-inspector&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This plugin adds a DOM inspector directly to your browser during development. When enabled, you can hover over an element to see its file path and &lt;strong&gt;click to automatically open your code editor&lt;/strong&gt; at that exact location.&lt;/p&gt;

&lt;p&gt;Here is how to set it up and customize it to fit your workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ The Setup
&lt;/h2&gt;

&lt;p&gt;First, ensure you have &lt;code&gt;@sveltejs/vite-plugin-svelte&lt;/code&gt; installed (it's a peer dependency).&lt;/p&gt;

&lt;p&gt;The inspector is actually built into the Svelte config logic. You don't usually need to install a separate package if you are on a recent version of Svelte/Vite, but you do need to enable it.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Basic Enable
&lt;/h3&gt;

&lt;p&gt;Open your &lt;code&gt;svelte.config.js&lt;/code&gt; and simply set the inspector to &lt;code&gt;true&lt;/code&gt; inside &lt;code&gt;vitePlugin&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// svelte.config.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;vitePlugin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;inspector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Custom Configuration
&lt;/h3&gt;

&lt;p&gt;If you want to change how you toggle the inspector or where the button sits, you can pass an object instead of a boolean.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// svelte.config.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;vitePlugin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;inspector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;toggleKeyCombo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;alt-x&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;showToggleButton&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;always&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;toggleButtonPos&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bottom-right&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💡 Pro Tip: Personalize with Environment Variables
&lt;/h2&gt;

&lt;p&gt;This is arguably the coolest feature. Inspector settings—like key combos—are often personal preferences. Your teammate might love &lt;code&gt;Alt-x&lt;/code&gt;, but you might prefer &lt;code&gt;Cmd-Shift&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You shouldn't have to fight over the &lt;code&gt;svelte.config.js&lt;/code&gt; file in Git.&lt;/p&gt;

&lt;p&gt;The inspector allows you to configure options via &lt;strong&gt;Environment Variables&lt;/strong&gt; (shell or &lt;code&gt;.env&lt;/code&gt; files). These take precedence over the config file!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Set a custom key combo (unquoted string)&lt;/span&gt;
&lt;span class="nv"&gt;SVELTE_INSPECTOR_TOGGLE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;alt-x

&lt;span class="c"&gt;# Pass a full JSON options object&lt;/span&gt;
&lt;span class="nv"&gt;SVELTE_INSPECTOR_OPTIONS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{"holdMode": false, "toggleButtonPos": "bottom-left"}'&lt;/span&gt;

&lt;span class="c"&gt;# Disable it completely for your machine&lt;/span&gt;
&lt;span class="nv"&gt;SVELTE_INSPECTOR_OPTIONS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⚙️ Configuration Reference
&lt;/h2&gt;

&lt;p&gt;Here is a breakdown of the options you can tweak to make the inspector feel right for you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Toggle &amp;amp; Display
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;toggleKeyCombo&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;string&lt;/code&gt;): The shortcut to turn the inspector on/off.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Default:&lt;/em&gt; &lt;code&gt;'alt-x'&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Tip:&lt;/em&gt; Use modifiers + key, like &lt;code&gt;control-shift-o&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;showToggleButton&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;'always' | 'active' | 'never'&lt;/code&gt;): Controls the on-screen UI button.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Default:&lt;/em&gt; &lt;code&gt;'active'&lt;/code&gt; (shows only when inspector is on).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;toggleButtonPos&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'&lt;/code&gt;): Where the floating button appears.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Default:&lt;/em&gt; &lt;code&gt;'top-right'&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;holdMode&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;boolean&lt;/code&gt;): If &lt;code&gt;true&lt;/code&gt;, the inspector is only active while you hold down the toggle keys. If &lt;code&gt;false&lt;/code&gt;, the keys act as a switch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Default:&lt;/em&gt; &lt;code&gt;true&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Navigation &amp;amp; Accessibility
&lt;/h3&gt;

&lt;p&gt;You can navigate the DOM tree using your keyboard!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;navKeys&lt;/code&gt;&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;parent&lt;/code&gt;: 'ArrowUp'&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;child&lt;/code&gt;: 'ArrowDown'&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;next&lt;/code&gt;: 'ArrowRight' (next sibling)&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;prev&lt;/code&gt;: 'ArrowLeft' (previous sibling)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;openKey&lt;/code&gt;&lt;/strong&gt;: Key to open the editor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Default:&lt;/em&gt; &lt;code&gt;'Enter'&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;escapeKeys&lt;/code&gt;&lt;/strong&gt;: Keys to close the inspector.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Default:&lt;/em&gt; &lt;code&gt;['Backspace', 'Escape']&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Styling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;customStyles&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;boolean&lt;/code&gt;): Defaults to &lt;code&gt;true&lt;/code&gt;. This injects styles when active.&lt;/li&gt;
&lt;li&gt;If you want to override the inspector's look, the &lt;code&gt;body&lt;/code&gt; gets the class &lt;code&gt;svelte-inspector-enabled&lt;/code&gt;, and the hovered element gets &lt;code&gt;svelte-inspector-active-target&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📝 Editor Support
&lt;/h2&gt;

&lt;p&gt;The "Click-to-Open" magic relies on your editor being recognized.&lt;/p&gt;

&lt;p&gt;Standard editors (VS Code, WebStorm, etc.) are usually supported out of the box. However, if your editor isn't opening:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check the &lt;a href="https://github.com/yyx990803/launch-editor#supported-editors" rel="noopener noreferrer"&gt;Supported Editors list&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Follow the &lt;a href="https://github.com/yyx990803/launch-editor#custom-editor-support" rel="noopener noreferrer"&gt;Custom Editor instructions&lt;/a&gt; if yours is obscure or requires a specific binary path.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Happy debugging! 🐛➡️✨&lt;/p&gt;




&lt;h3&gt;
  
  
  🔗 Reference
&lt;/h3&gt;

&lt;p&gt;For the most up-to-date options and details, check out the &lt;a href="https://github.com/sveltejs/vite-plugin-svelte/blob/main/docs/inspector.md" rel="noopener noreferrer"&gt;official documentation on GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>vite</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
