DEV Community

Gordienko Roman
Gordienko Roman

Posted on

I Built 19 Free Developer Tools That Run Entirely in the Browser — Here's What I Learned

I got tired of jumping between 5-6 different sites just to format JSON, decode a JWT, or generate a UUID. Each one had signup popups, cookie banners, and ads covering half the screen.

So I built DevToolKit — a collection of 19 browser-based developer tools. No backend, no signup, no data ever leaves your machine.

Here's what I learned building it, the technical decisions that mattered, and what surprised me about SEO for tool sites.

The Stack

  • Next.js 14 with App Router — each tool is a separate route with its own metadata
  • Tailwind CSS — dark theme, consistent design across all tools
  • Zero backend — everything runs client-side with native browser APIs
  • Vercel for hosting — automatic deployments from GitHub

No database. No authentication. No server-side processing. Every tool is a self-contained React component that processes data locally.

The 19 Tools

Data: JSON Formatter & Validator, JSON Tree Viewer (collapsible tree with path copying), YAML ↔ JSON Converter, SQL Formatter

Encoding: Base64 Encoder/Decoder (text + file drag & drop), URL Encoder/Decoder

Security: JWT Decoder, Hash Generator (SHA-1/256/384/512 via Web Crypto API), Password Generator (crypto.getRandomValues())

DevOps: Cron Expression Parser (human-readable descriptions + next run times), PostgreSQL Config Generator (a PGTune alternative)

Generators: UUID v4, QR Code (PNG + SVG), Lorem Ipsum

Text & Reference: Regex Tester, Text Diff Checker, Unix Timestamp Converter, Color Converter (HEX/RGB/HSL), HTTP Status Codes Reference

Technical Decisions That Mattered

1. Each tool = separate page with its own SEO

Instead of building a single-page app with tab switching, every tool has its own URL, title, meta description, and canonical tag. This means Google indexes each tool independently:

/json-formatter/   → "JSON Formatter & Validator"
/cron-parser/      → "Cron Expression Parser & Generator"
/postgres-config/  → "PostgreSQL Config Generator"
Enter fullscreen mode Exit fullscreen mode

This is huge for organic traffic. Someone googling "cron parser online" lands directly on the cron tool, not a generic homepage.

2. Web Crypto API over external libraries

For hashing and password generation, I use the native Web Crypto API (crypto.subtle.digest() and crypto.getRandomValues()) instead of importing crypto-js or similar libraries. Benefits:

  • Zero bundle size for crypto operations
  • Hardware-accelerated on most devices
  • Same security guarantees as server-side implementations
const hash = await crypto.subtle.digest('SHA-256',
  new TextEncoder().encode(input)
);
Enter fullscreen mode Exit fullscreen mode

3. FileReader API for Base64 file encoding

The Base64 tool supports drag & drop file encoding without uploading anything. The FileReader API reads the file locally and converts it to a data URI:

const reader = new FileReader();
reader.onload = () => {
  const base64 = reader.result.split(',')[1];
  // Ready to use — never left the browser
};
reader.readAsDataURL(file);
Enter fullscreen mode Exit fullscreen mode

This is the killer feature users don't expect — drop an image, get a data:image/png;base64,... string instantly.

4. PostgreSQL config calculations

The PG Config tool implements the same tuning algorithms as PGTune. The key formula for work_mem:

work_mem = (RAM - shared_buffers) / (max_connections × 3)
Enter fullscreen mode Exit fullscreen mode

The ×3 factor accounts for the fact that a single query can use multiple work_mem allocations (sorts, hash joins, etc.). For data warehouse workloads, we use ×1 since there are fewer concurrent connections.

5. Cron parser with actual execution time calculation

Instead of just describing the cron expression, the parser calculates the next 10 actual execution times by iterating through minutes:

const d = new Date();
for (let i = 0; i < 525960 && runs.length < 10; i++) {
  if (months.includes(d.getMonth() + 1) &&
      doms.includes(d.getDate()) &&
      dows.includes(d.getDay()) &&
      hours.includes(d.getHours()) &&
      mins.includes(d.getMinutes())) {
    runs.push(new Date(d));
  }
  d.setMinutes(d.getMinutes() + 1);
}
Enter fullscreen mode Exit fullscreen mode

Simple brute force, but 525,960 iterations (one year of minutes) runs in <10ms on any modern device.

What I Learned About SEO for Tool Sites

Every page needs text content

Initially, most tool pages were just UI — an input, a button, an output. Google ranked them nowhere. Adding 2-3 paragraphs of genuine "about this tool" content to each page explaining what it does, why it exists, and how it works — rankings started climbing within 2 weeks.

Meta descriptions matter more than I expected

Pages with 40-50 character descriptions were getting ignored or Google was generating its own (usually bad) snippets. Expanding every description to 120-180 characters with action keywords made a visible difference in click-through rates.

Domain consistency is critical

I had my sitemap pointing to www.devtoolkit.site but canonical tags pointing to devtoolkit.site (without www). Google was treating them as two different sites and splitting my authority. One-line fix, significant impact.

Mobile-first is not optional

My original sidebar navigation ate 250px on mobile screens, leaving tools nearly unusable on phones. Adding a responsive hamburger menu and adjusting padding increased mobile engagement immediately. Google notices when users bounce from mobile — it affects rankings.

What's Next

I'm planning to add:

  • CSV ↔ JSON Converter
  • chmod Calculator
  • Markdown Preview
  • JWT Generator (not just decoder)

Try It

https://www.devtoolkit.site/

All 19 tools, zero signup, zero tracking. Everything runs in your browser tab.

I'd love to hear what tools you use daily that are missing, or any feedback on the UX. Drop a comment or open an issue on GitHub.


Built with Next.js 14, Tailwind CSS, and deployed on Vercel. No backend, no database, no cookies.

Top comments (0)