Sitemap
6 min readApr 1, 2026

--

# Why I Built a Free Toolkit for Linux Sysadmins and DevOps Engineers

## The tools I wished existed — so I made them

Press enter or click to view image in full size

— -

If you’ve ever Googled “chmod 755 meaning” or “cron every 5 minutes” at 2 AM during an incident, you know the pain. You land on a bloated site with pop-ups, cookie banners, and a calculator buried under three paragraphs of SEO text. You just want to check one value and move on.

I got tired of it. So I built **[LinuxTools.app](https://linuxtools.app)** — a collection of 32 free, browser-based tools for developers, sysadmins, and DevOps engineers. Everything runs locally. No sign-up. No data ever leaves your browser.

This article covers what I built, the technical decisions behind it, and what I learned shipping a developer tool in 2026.

— -

## The Problem

I work in DevOps consulting. On any given day, I might need to:

- Calculate a subnet range for a VPC

- Generate an SSH key and configure `~/.ssh/config`

- Debug a cron expression that isn’t firing

- Decode a JWT from an API response

- Check if a server’s SSL cert is about to expire

- Convert JSON secrets from AWS Secrets Manager to `.env` format

For each of these, the existing options are either:

1. **Man pages** — accurate but painful to skim during a live incident

2. **Stack Overflow** — great, but you’re reading five different answers to find the one that applies

3. **Online tools** — usually work, but want your email, send your data to their server, or are covered in ads

I wanted something that was fast, private, and just *worked*.

— -

## What I Built

LinuxTools.app has 32 tools across three categories, plus a network operations hub.

**Linux Tools** — the core. Chmod calculator, cron generator, SSH key setup, SSH config generator, nginx config generator, systemd unit builder, firewall rule generator, server hardening checklist, Linux command cheat sheets, shell script library, and more.

**Cloud & DevOps** — subnet calculator, Dockerfile generator, Kubernetes YAML generator, Terraform snippets, and cloud cost estimator.

**Utilities** — Base64 encoder, JSON/YAML/TOML converter, regex tester, Git command builder, SSL checker, UUID generator, JSON-to-env converter, JWT decoder, network tools, and password generator.

There’s also a **NetOps** section with server-side tools like ping, traceroute, nmap, WHOIS, and GeoIP — backed by a self-hosted FastAPI API running in Docker.

And the newest addition: **[linuxtools.app/myip](https://linuxtools.app/myip)** — a free, public IP lookup endpoint that works like ipinfo.io.

> Every client-side tool uses `crypto.getRandomValues()` for any randomness. No `Math.random()` anywhere.

— -

## Architecture Decisions

### Static Export for Maximum Privacy

The site is built with **Next.js 16** and exported as a fully static site. No server-side rendering, no API routes (except the separate FastAPI backend for network tools). This means:

- **Privacy by default** — your data physically cannot leave the browser because there’s no server to receive it

- **Speed** — HTML files served directly by nginx, cached by Cloudflare

- **Reliability** — the only thing that can go down is the VPS itself

### Session-Based Form Persistence

One of the most annoying things about web tools is losing your work when you accidentally refresh the page or hit the back button. Every form on LinuxTools.app persists its state to `sessionStorage` through a custom React hook:

```typescript

// Drop-in replacement for useState

const [value, setValue] = useSessionState(“cron:expression”, “* * * * *”);

```

It’s a small thing, but it makes a huge difference in usability. Your half-built Kubernetes YAML doesn’t disappear because you opened the docs in the same tab.

### Cmd+K Search Across Everything

With 31 tools, discoverability becomes a problem. I added a global command palette (Cmd+K / Ctrl+K) that lets you search and jump to any tool from any page. It’s the same pattern you see in VS Code, Slack, and GitHub — because it works.

### Security-First Network Tools

The NetOps backend runs tools like `nmap`, `traceroute`, and `dig` on the server. This requires careful security:

- **Rate limiting** — 5 nmap scans per 5 minutes per IP

- **Private IP blocking** — no scanning internal ranges (10.x, 172.16.x, 192.168.x)

- **API key authentication** — injected by nginx at the reverse proxy layer, invisible to the browser

- **Strict input validation** — every parameter validated against regex patterns before reaching the shell

The backend runs in Docker with minimal privileges. No tool output is stored.

— -

## Design Philosophy

### Dark Mode Only

This is a tool for people who live in terminals. I didn’t bother with a light theme. The color palette is inspired by GitHub’s dark mode — dark background (#0a0f1a), soft foreground text, and a green accent (#00ff9d) for highlights and interactive elements.

### Monospace Everything

Tool inputs, outputs, and descriptions all use JetBrains Mono. When you’re looking at a chmod value or a cron expression, you want a monospace font. The only exception is the display font (Bebas Neue) used for page titles.

### No Frameworks for UI Components

No component library. No shadcn. No Radix. Just Tailwind CSS utility classes. Every tool’s UI is purpose-built for its specific use case. A generic dropdown component doesn’t know how to display cron presets or SSH algorithms.

— -

## Lessons From Building Developer Tools

### People don’t read instructions

The UI has to be self-explanatory. If someone lands on the chmod calculator, they should understand how to use it within 3 seconds. Tooltips, sensible defaults, and visual feedback do more than any “how to use” paragraph.

### SEO is how people find tools

Nobody bookmarks a chmod calculator. They Google “chmod calculator” when they need one. So every tool page is optimized:

- Descriptive `<title>` and `<meta>` tags

- JSON-LD structured data (WebApplication schema + FAQ schema)

- Canonical URLs and proper sitemap

- Semantic headings and content below the tool

### Persistence is an underrated feature

Adding sessionStorage persistence was maybe 2 hours of work across all tools. But it eliminated the #1 frustration: losing form state on refresh. Small UX improvements like this are what separate a tool you use once from one you bookmark.

### Static sites can do more than you think

We’ve over-indexed on server-side rendering. Most developer tools don’t need a server. A JWT decoder, a regex tester, a password generator — these are all pure computation. Ship them as static HTML and they’ll load faster, cost less, and respect user privacy.

— -

## A Free ipinfo.io Alternative

One of my favourite recent additions is **[linuxtools.app/myip](https://linuxtools.app/myip)**.

It’s a public IP lookup endpoint with content negotiation — meaning it behaves differently depending on who’s calling it:

**In your browser** — you get a clean page showing your IP, city, region, country, coordinates, ISP, and timezone.

**In the terminal** — you get clean JSON in ipinfo.io-compatible format:

```bash

$ curl linuxtools.app/myip

{

“ip”: “27.34.64.11”,

“city”: “Kathmandu”,

“region”: “Bagmati Province”,

“country”: “NP”,

“loc”: “27.7017,85.3206”,

“org”: “AS17501 WorldLink Communications Pvt Ltd”,

“timezone”: “Asia/Kathmandu”

}

```

**In your app** — CORS is open, so any frontend can call it directly:

```javascript

const res = await fetch(“https://linuxtools.app/myip");

const { ip, city, country } = await res.json();

```

### How it works

The geo data comes from a local **MaxMind GeoLite2** database running on the FastAPI backend — no external API calls, no rate limits, no cost per lookup.

nginx handles the content negotiation:

```nginx

location = /myip {

if ($http_accept ~* “text/html”) {

rewrite ^ /myip.html last; # serve the browser page

}

proxy_pass http://127.0.0.1:8000/api/myip; # serve JSON for curl/fetch

add_header Access-Control-Allow-Origin “*” always;

}

```

The trick: browsers send `Accept: text/html` — curl and `fetch()` don’t. nginx routes accordingly.

— -

## The Numbers

- **32 tools** across 3 categories

- **3 mini-games** (Bash Challenge, Linux Trivia, Chmod Puzzle)

- **1 self-hosted API** for network reconnaissance

- **0 user accounts** required

- **0 bytes** of user data sent to any server (for client-side tools)

— -

## Try It

**[LinuxTools.app](https://linuxtools.app)** — free, no sign-up, no tracking.

If you’re a developer, sysadmin, or DevOps engineer, I’d love to know:

- Which tool do you reach for most often?

- What tool do you wish existed?

I’m actively building based on feedback, so every suggestion matters.

— -

*Find me at [khimananda.com](https://khimananda.com) or on the [contact page](https://linuxtools.app/contact).*

--

--

Khimananda Oli
Khimananda Oli

Written by Khimananda Oli

Lead DevOps Engineer & Cloud Architect | Shipping infrastructure that scales, recovers, and stays up