<?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: Karyu</title>
    <description>The latest articles on DEV Community by Karyu (@braindetox).</description>
    <link>https://dev.to/braindetox</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%2F3953542%2F4f8632c8-29b7-4380-aad1-c478d858ab13.png</url>
      <title>DEV Community: Karyu</title>
      <link>https://dev.to/braindetox</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/braindetox"/>
    <language>en</language>
    <item>
      <title>I built 6 free dev tools to skip the signup walls — here's what I learned</title>
      <dc:creator>Karyu</dc:creator>
      <pubDate>Wed, 27 May 2026 04:41:19 +0000</pubDate>
      <link>https://dev.to/braindetox/i-built-6-free-dev-tools-to-skip-the-signup-walls-heres-what-i-learned-13h7</link>
      <guid>https://dev.to/braindetox/i-built-6-free-dev-tools-to-skip-the-signup-walls-heres-what-i-learned-13h7</guid>
      <description>&lt;p&gt;You know that moment when you just want to decode a JWT, but &lt;a href="https://jwt.io" rel="noopener noreferrer"&gt;jwt.io&lt;/a&gt; wants you to log in to "save your tokens"? Or when you need a quick curl command and Postman's 200MB Electron app feels like overkill?&lt;/p&gt;

&lt;p&gt;I had that moment too many times in 2025, so over the past year I built &lt;strong&gt;6 small dev tools&lt;/strong&gt; to replace the ones with signup walls, ads, and heavy apps. All free, all in the browser, no account needed. Here's what I built, why each one is different, and what I learned along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. JWT Decoder — privacy-first, no library
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;a href="https://braindetox.kr/en/static/jwt_decoder.html" rel="noopener noreferrer"&gt;JWT Decoder&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; Most online JWT decoders ask you to paste your token into a remote server. For a &lt;em&gt;secret&lt;/em&gt; token. With &lt;em&gt;signature verification&lt;/em&gt;. That's how data leaks happen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I built:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decode, generate, verify in one page&lt;/li&gt;
&lt;li&gt;HS256 / HS512 using the &lt;strong&gt;Web Crypto API&lt;/strong&gt; (zero external libraries)&lt;/li&gt;
&lt;li&gt;Tokens never leave your browser — all crypto runs locally&lt;/li&gt;
&lt;li&gt;Color-coded segments (header / payload / signature)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;exp&lt;/code&gt; / &lt;code&gt;iat&lt;/code&gt; / &lt;code&gt;nbf&lt;/code&gt; shown as relative time + ISO-8601&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've ever pasted a production JWT into jwt.io and felt a small wave of regret, this one is for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. SSH Config Generator — visual &lt;code&gt;~/.ssh/config&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;a href="https://braindetox.kr/en/static/ssh_config_generator.html" rel="noopener noreferrer"&gt;SSH Config Generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; Editing &lt;code&gt;~/.ssh/config&lt;/code&gt; for a bastion + 5 internal hosts is a special kind of pain. ProxyJump syntax is unforgiving.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I built:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visual multi-host editor&lt;/li&gt;
&lt;li&gt;ProxyJump (bastion host) support&lt;/li&gt;
&lt;li&gt;Port forwarding (LocalForward, RemoteForward, DynamicForward)&lt;/li&gt;
&lt;li&gt;4 presets: AWS EC2, DigitalOcean, Bastion+Internal, Dev+LocalForward&lt;/li&gt;
&lt;li&gt;Output: monospace preview + copy + download &lt;code&gt;.txt&lt;/code&gt; + &lt;code&gt;chmod 600&lt;/code&gt; reminder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I made this after the third time I tunneled through the wrong host trying to reach a Kubernetes node.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. iptables Generator — 50 real-world scenarios
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;a href="https://braindetox.kr/en/static/iptables_generator.html" rel="noopener noreferrer"&gt;iptables Generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; iptables documentation is dense, and getting 5 rules right under pressure is harder than it should be.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I built:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rule builder for common patterns: SSH hardening, DDoS rate limiting, Docker bridge, Kubernetes node, NAT/port forwarding&lt;/li&gt;
&lt;li&gt;50 ready-to-paste scenarios — pick one, edit IPs/ports, you're done&lt;/li&gt;
&lt;li&gt;Tested against the actual iptables syntax (no AI hallucination)&lt;/li&gt;
&lt;li&gt;Both &lt;code&gt;iptables&lt;/code&gt; and &lt;code&gt;iptables-save&lt;/code&gt; formats&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A reasonable middle ground between "memorize the man page" and "ask AI and hope."&lt;/p&gt;

&lt;h2&gt;
  
  
  4. curl Command Builder — 4-language output
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;a href="https://braindetox.kr/en/static/curl_builder.html" rel="noopener noreferrer"&gt;curl Command Builder&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; curl is great until you need to translate it to fetch/axios/Python requests for a teammate's stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I built:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GUI to build any curl command (headers, body, auth, file upload)&lt;/li&gt;
&lt;li&gt;8 common options as toggles (&lt;code&gt;-k&lt;/code&gt;, &lt;code&gt;-v&lt;/code&gt;, &lt;code&gt;-L&lt;/code&gt;, &lt;code&gt;-i&lt;/code&gt;, &lt;code&gt;-s&lt;/code&gt;, &lt;code&gt;--compressed&lt;/code&gt;, &lt;code&gt;-o&lt;/code&gt;, &lt;code&gt;--max-time&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simultaneous output in 4 formats&lt;/strong&gt;: curl, fetch (JS), axios, Python requests&lt;/li&gt;
&lt;li&gt;6 presets: GET, POST JSON, Bearer Token, Form Data, File Download, Reset&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 4-language output is what I missed in every other curl builder I tried.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. YAML / JSON Converter — with k8s and Helm presets
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;a href="https://braindetox.kr/en/static/yaml_json_converter.html" rel="noopener noreferrer"&gt;YAML/JSON Converter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; Most YAML/JSON converters are one-way and stuck in 2018 UX.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I built:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time bidirectional conversion&lt;/li&gt;
&lt;li&gt;Auto-detect input format (YAML or JSON)&lt;/li&gt;
&lt;li&gt;5 presets: Kubernetes Service, docker-compose, Helm values, GitHub Actions, plain JSON&lt;/li&gt;
&lt;li&gt;Key sorting toggle&lt;/li&gt;
&lt;li&gt;3-column grid on desktop, vertical on mobile&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Helm values preset alone has saved me an embarrassing number of &lt;code&gt;helm install&lt;/code&gt; attempts.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. HTTP Status Codes — 100+ codes with usage scenarios
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;a href="https://braindetox.kr/en/static/http_status_codes.html" rel="noopener noreferrer"&gt;HTTP Status Codes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; Quick — what's the difference between 401, 403, and 451?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I built:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100+ codes across 1xx, 2xx, 3xx, 4xx, 5xx&lt;/li&gt;
&lt;li&gt;Real-time search and category filter with color-coded borders&lt;/li&gt;
&lt;li&gt;POPULAR badge for the codes you actually see (200, 301, 401, 403, 404, 500, 503)&lt;/li&gt;
&lt;li&gt;"When to use" scenarios for each&lt;/li&gt;
&lt;li&gt;FAQ section with 6 common questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a reference, not a calculator, but it's the reference I open three times a week.&lt;/p&gt;




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

&lt;p&gt;A few things that surprised me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Privacy is a feature, not a sermon.&lt;/strong&gt;&lt;br&gt;
For tools that handle secrets (JWTs, SSH configs), running everything in-browser with no server is a &lt;em&gt;concrete user benefit&lt;/em&gt;. People notice. They share the link to colleagues with "this one doesn't phone home."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Multi-language matters more than you think.&lt;/strong&gt;&lt;br&gt;
I shipped all 6 tools in 4 languages (English, Korean, Japanese, Chinese). Watching the analytics, ~30% of the traffic uses a non-English version. If the tool is for "the global dev community," shipping English-only is leaving 30% on the table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Presets &amp;gt; options.&lt;/strong&gt;&lt;br&gt;
Every tool above has 4–6 presets at the top. They get used way more than the manual builder. A new user wants "give me AWS EC2 SSH config" not "let me fill in 17 fields." Defaults to a working starting point beats power-user flexibility for first-time use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; is underused.&lt;/strong&gt;&lt;br&gt;
The HTTP Status Codes page uses 100+ &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; elements for the per-code explanations. They collapse by default, search works across all of them (because content is in the DOM), and the page weighs less than a single React component would.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Building in public is slow but cumulative.&lt;/strong&gt;&lt;br&gt;
None of these tools went viral on day one. But six months in, the steady search traffic from "free jwt decoder," "ssh config generator," "iptables rate limit example" adds up. The flywheel is real, just slower than every marketing post claims.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try them, break them, tell me
&lt;/h2&gt;

&lt;p&gt;All 6 are free, no signup, no telemetry beyond Google Analytics on the marketing pages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://braindetox.kr/en/static/jwt_decoder.html" rel="noopener noreferrer"&gt;JWT Decoder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://braindetox.kr/en/static/ssh_config_generator.html" rel="noopener noreferrer"&gt;SSH Config Generator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://braindetox.kr/en/static/iptables_generator.html" rel="noopener noreferrer"&gt;iptables Generator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://braindetox.kr/en/static/curl_builder.html" rel="noopener noreferrer"&gt;curl Command Builder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://braindetox.kr/en/static/yaml_json_converter.html" rel="noopener noreferrer"&gt;YAML/JSON Converter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://braindetox.kr/en/static/http_status_codes.html" rel="noopener noreferrer"&gt;HTTP Status Codes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If something breaks or you wish a tool had a specific preset, the comments are the fastest place to reach me. I read everything.&lt;/p&gt;

&lt;p&gt;Thanks for reading — and may your &lt;code&gt;iptables&lt;/code&gt; rules always work on the first try.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
