<?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: Kai Alder</title>
    <description>The latest articles on DEV Community by Kai Alder (@trinhcuong-ast).</description>
    <link>https://dev.to/trinhcuong-ast</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%2F3738636%2Feb5b4604-0970-4d76-8f5c-8e07bbcfa8cb.png</url>
      <title>DEV Community: Kai Alder</title>
      <link>https://dev.to/trinhcuong-ast</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/trinhcuong-ast"/>
    <language>en</language>
    <item>
      <title>I just needed a quick mock API, not a whole setup</title>
      <dc:creator>Kai Alder</dc:creator>
      <pubDate>Mon, 02 Mar 2026 08:33:31 +0000</pubDate>
      <link>https://dev.to/trinhcuong-ast/i-just-needed-a-quick-mock-api-not-a-whole-setup-1dl2</link>
      <guid>https://dev.to/trinhcuong-ast/i-just-needed-a-quick-mock-api-not-a-whole-setup-1dl2</guid>
      <description>&lt;p&gt;I needed a mock API last week. Not a full mock server setup — just a quick endpoint that returns some JSON so I could test my frontend without waiting on the backend team.&lt;/p&gt;

&lt;p&gt;I tried the usual suspects. json-server needs a local setup. Mockoon is a desktop app. Beeceptor wants me to sign up. Mocky.io works but the responses are static — no faker data, no conditional logic.&lt;/p&gt;

&lt;p&gt;So I built one into &lt;a href="https://webtoolz.dev/json/mock-api" rel="noopener noreferrer"&gt;webtoolz&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;You define endpoints (GET /users, POST /orders/:id, whatever), set up the response body with template variables, and get a live URL. That's it.&lt;/p&gt;

&lt;p&gt;The response body supports faker.js placeholders:&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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{uuid}}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{faker.person.fullName}}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{faker.internet.email}}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"joined"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{now}}"&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;p&gt;Every request generates fresh data. You also get access to path params, query strings, headers, and request body via &lt;code&gt;{{params.id}}&lt;/code&gt;, &lt;code&gt;{{query.page}}&lt;/code&gt;, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  The parts I actually use
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sequence mode&lt;/strong&gt; — return a 500 on the first call, then 200 on retry. Great for testing error handling without manually toggling things.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conditional responses&lt;/strong&gt; — match on query params, headers, or body fields. So &lt;code&gt;GET /users?status=active&lt;/code&gt; returns one response, anything else hits the fallback. Supports regex.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shareable URLs&lt;/strong&gt; — the entire config is encoded in the URL. No database, no account, no "please verify your email." Send the link to a teammate and they see exactly what you built. They can fork it and modify.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auto-generated docs&lt;/strong&gt; — click "Docs" and you get a Swagger-style page with a "Test Request" button. Handy when you want to share the mock API with someone who doesn't want to mess with curl.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it doesn't do
&lt;/h2&gt;

&lt;p&gt;No persistent storage (it's stateless). No WebSocket mocking. No rate limiting simulation. If you need those, Mockoon or WireMock are better fits.&lt;/p&gt;

&lt;p&gt;But if you just need "give me a fake /users endpoint with realistic data in 30 seconds" — this does the job without installing anything.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://webtoolz.dev/json/mock-api" rel="noopener noreferrer"&gt;Try it here&lt;/a&gt; — pick a template (REST CRUD, Auth, Health Check) or start from scratch.&lt;/p&gt;




&lt;p&gt;Curious what mock API setup you all use? I've been on a json-server → Beeceptor → this pipeline and wondering if there's something obvious I'm missing.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>api</category>
      <category>testing</category>
      <category>javascript</category>
    </item>
    <item>
      <title>I keep messing up my MCP config files, so I built a visual generator</title>
      <dc:creator>Kai Alder</dc:creator>
      <pubDate>Sun, 01 Mar 2026 13:41:23 +0000</pubDate>
      <link>https://dev.to/trinhcuong-ast/i-keep-messing-up-my-mcp-config-files-so-i-built-a-visual-generator-4i08</link>
      <guid>https://dev.to/trinhcuong-ast/i-keep-messing-up-my-mcp-config-files-so-i-built-a-visual-generator-4i08</guid>
      <description>&lt;p&gt;Every time I set up a new MCP server for Claude Desktop, I end up in the same loop: copy some JSON from a README, tweak the paths, fat-finger a comma, wonder why nothing works, stare at the config for 10 minutes, find the typo.&lt;/p&gt;

&lt;p&gt;I figured there had to be a better way. There wasn't. So I built one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What even is MCP?
&lt;/h2&gt;

&lt;p&gt;If you haven't touched it yet — MCP (Model Context Protocol) is how AI apps like Claude Desktop, Cursor, and Windsurf connect to external tools. Want Claude to read your files? Search the web? Query your database? You need an MCP server, and that means editing a JSON config file by hand.&lt;/p&gt;

&lt;p&gt;The config looks something like this:&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;"filesystem"&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;"npx"&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;"@modelcontextprotocol/server-filesystem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/Users/me/projects"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&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;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;p&gt;Simple enough for one server. But once you're running GitHub + Slack + PostgreSQL + Brave Search + a couple more, the config turns into a wall of JSON that's begging for a missing comma.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;MCP Config Generator&lt;/strong&gt; — a visual tool where you pick servers from a catalog, fill in your settings, and get valid config JSON. No signup, runs in the browser.&lt;/p&gt;

&lt;p&gt;Here's what it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;40+ server templates&lt;/strong&gt; — Filesystem, GitHub, GitLab, Slack, PostgreSQL, MongoDB, Brave Search, Notion, Docker, and a bunch more. Each one pre-fills the command, args, and env vars so you don't have to dig through READMEs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;6 AI clients&lt;/strong&gt; — Claude Desktop, Cursor, Windsurf, Claude Code, Cline, Continue. Each has slightly different config formats, and the tool handles that for you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Custom servers&lt;/strong&gt; — If your server isn't in the catalog, add it manually with whatever command/args/env you need.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Share links&lt;/strong&gt; — Generate a URL that recreates your exact config. Useful for team setups or \"here's how to configure X\" docs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;100% browser-based&lt;/strong&gt; — Nothing gets uploaded. Your API keys stay on your machine.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The catalog is organized by category (Filesystem, Dev Tools, Databases, Communication, Cloud, AI, Search, Productivity) so you can actually find what you need.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just use the existing tools?
&lt;/h2&gt;

&lt;p&gt;I looked. There are a few out there:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some are barebones text editors with validation&lt;/li&gt;
&lt;li&gt;Others only support Claude Desktop&lt;/li&gt;
&lt;li&gt;Most don't have a server catalog — you still need to know the exact npm package name and args&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The gap I saw was \"I don't want to read 15 different GitHub READMEs just to configure my setup.\" Pick from a list, fill in your API key, done.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;a href="https://webtoolz.dev/ai/mcp" rel="noopener noreferrer"&gt;webtoolz.dev/ai/mcp&lt;/a&gt;&lt;/strong&gt; — free, no account needed.&lt;/p&gt;

&lt;p&gt;If you find a missing server or something that's wrong, the whole thing is open source: &lt;a href="https://github.com/orgs/webtoolz-org" rel="noopener noreferrer"&gt;github.com/webtoolz-org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What servers are you all running? I'm curious what setups people have landed on — I'm personally using Filesystem + GitHub + Brave Search + Sequential Thinking as my daily stack.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>claude</category>
      <category>tooling</category>
    </item>
    <item>
      <title>I built a free Mermaid diagram editor that doesn't suck</title>
      <dc:creator>Kai Alder</dc:creator>
      <pubDate>Tue, 17 Feb 2026 15:18:41 +0000</pubDate>
      <link>https://dev.to/trinhcuong-ast/i-built-a-free-mermaid-diagram-editor-that-doesnt-suck-47i7</link>
      <guid>https://dev.to/trinhcuong-ast/i-built-a-free-mermaid-diagram-editor-that-doesnt-suck-47i7</guid>
      <description>&lt;p&gt;I use Mermaid diagrams a lot. Architecture docs, PR descriptions, onboarding flows — they're everywhere in my projects.&lt;/p&gt;

&lt;p&gt;But every time I need to quickly iterate on one, I end up in the Mermaid Live Editor. Which works... but feels clunky. No themes, the UI is busy, and exporting is annoying.&lt;/p&gt;

&lt;p&gt;So I added a Mermaid Studio to &lt;a href="https://webtoolz.dev/mermaid" rel="noopener noreferrer"&gt;webtoolz.dev&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's different
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Themes.&lt;/strong&gt; Not just "default" and "dark" — actual styled themes like Blueprint, Forest, Neutral. Pick one from the dropdown and your diagram looks completely different.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Templates.&lt;/strong&gt; Don't want to remember the syntax for a state diagram? Grab a template. Flowcharts, sequence diagrams, ER diagrams, Gantt charts — they're all there as starting points.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Split editor/preview.&lt;/strong&gt; Write on the left, see the result on the right. Or go full preview when you're presenting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Export.&lt;/strong&gt; SVG or just share a link. The share URL encodes the entire diagram so nothing is stored server-side.&lt;/p&gt;

&lt;h2&gt;
  
  
  The privacy thing
&lt;/h2&gt;

&lt;p&gt;Same as everything else on webtoolz — it runs in your browser. No backend. Your diagrams aren't being sent anywhere. If you're mapping out internal architecture or database schemas, that matters.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://webtoolz.dev/mermaid" rel="noopener noreferrer"&gt;webtoolz.dev/mermaid&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've got feedback or want a feature, open an issue on &lt;a href="https://github.com/orgs/webtoolz-org" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. Or just tell me here — I actually read the comments.&lt;/p&gt;

</description>
      <category>mermaid</category>
      <category>diagrams</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I built a free AI music generator (no signup, no BS)</title>
      <dc:creator>Kai Alder</dc:creator>
      <pubDate>Mon, 09 Feb 2026 16:22:59 +0000</pubDate>
      <link>https://dev.to/trinhcuong-ast/i-built-a-free-ai-music-generator-no-signup-no-bs-10ki</link>
      <guid>https://dev.to/trinhcuong-ast/i-built-a-free-ai-music-generator-no-signup-no-bs-10ki</guid>
      <description>&lt;p&gt;Last month I got fed up.&lt;/p&gt;

&lt;p&gt;Every AI music tool I tried either wanted my credit card, my email, or both. Just to hear what it could do. So I built something different.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;webtoolz AI Music Studio&lt;/strong&gt; generates full songs — with actual lyrics — from a text prompt. That's it. No account. No "free trial." Just type what you want and hit generate.&lt;/p&gt;

&lt;p&gt;This full song was made with just "hello there" as the prompt:&lt;br&gt;
&lt;a href="https://webtoolz.dev/music/studio/N4IgbiBcCMA0IBMogBYFMA2GD2ACALugE5ojz5QBMAzAAzwDmyAhgK77YgC+QA" rel="noopener noreferrer"&gt;https://webtoolz.dev/music/studio/N4IgbiBcCMA0IBMogBYFMA2GD2ACALugE5ojz5QBMAzAAzwDmyAhgK77YgC+QA&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try it yourself: &lt;a href="https://webtoolz.dev/music/studio" rel="noopener noreferrer"&gt;https://webtoolz.dev/music/studio&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Type a prompt (e.g., "upbeat indie rock about Monday mornings")&lt;/li&gt;
&lt;li&gt;Pick instrumental or with vocals&lt;/li&gt;
&lt;li&gt;Wait ~30 seconds&lt;/li&gt;
&lt;li&gt;Download your track&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The model handles melody, arrangement, and lyrics. Two words in, full production out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I made it free
&lt;/h2&gt;

&lt;p&gt;I'm building webtoolz as a collection of free dev tools. No ads, no tracking, no accounts. The music studio is the first "fun" tool — mostly to see if people actually want this.&lt;/p&gt;

&lt;p&gt;Curious what you'd use it for. Background music for videos? Podcast intros? Just messing around?&lt;/p&gt;

&lt;p&gt;Would love feedback: &lt;a href="https://webtoolz.dev/music/studio" rel="noopener noreferrer"&gt;https://webtoolz.dev/music/studio&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>music</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I got tired of broken JSON so I built a fixer</title>
      <dc:creator>Kai Alder</dc:creator>
      <pubDate>Thu, 29 Jan 2026 16:20:20 +0000</pubDate>
      <link>https://dev.to/trinhcuong-ast/i-got-tired-of-broken-json-so-i-built-a-fixer-471</link>
      <guid>https://dev.to/trinhcuong-ast/i-got-tired-of-broken-json-so-i-built-a-fixer-471</guid>
      <description>&lt;p&gt;You know that moment when you're debugging at 2am and the API returns malformed JSON? Or when someone sends you a config file with trailing commas and Python's &lt;code&gt;True&lt;/code&gt; instead of &lt;code&gt;true&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;I kept running into this, so I built something for it.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://webtoolz.dev" rel="noopener noreferrer"&gt;webtoolz.dev&lt;/a&gt; is a JSON studio that runs entirely in your browser. The usual stuff is there—formatter, validator, minifier, tree view. But the thing I actually use most is the AI fix.&lt;/p&gt;

&lt;p&gt;Paste broken JSON, click fix, get valid JSON. It handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing quotes around keys&lt;/li&gt;
&lt;li&gt;Trailing commas&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;True&lt;/code&gt;/&lt;code&gt;False&lt;/code&gt; → &lt;code&gt;true&lt;/code&gt;/&lt;code&gt;false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Missing commas between properties&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why browser-only matters
&lt;/h2&gt;

&lt;p&gt;Nothing leaves your machine. I work with config files that have API keys and credentials—not comfortable pasting those into random online tools that "process on the server."&lt;/p&gt;

&lt;p&gt;This runs 100% client-side. Check the network tab if you don't believe me.&lt;/p&gt;

&lt;h2&gt;
  
  
  No signup, no tracking
&lt;/h2&gt;

&lt;p&gt;Just use it. That's it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://webtoolz.dev" rel="noopener noreferrer"&gt;webtoolz.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love feedback if you try it.&lt;/p&gt;

</description>
      <category>json</category>
      <category>webdev</category>
      <category>tools</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
