惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
B
Blog RSS Feed
C
Check Point Blog
D
Docker
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
博客园_首页
Apple Machine Learning Research
Apple Machine Learning Research
量子位
有赞技术团队
有赞技术团队
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
M
MIT News - Artificial intelligence
B
Blog
阮一峰的网络日志
阮一峰的网络日志
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
月光博客
月光博客

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
How I Built a Free Random Letter Generator — And Got 7,80...
shahriyar an · 2026-05-20 · via DEV Community

I'm not a full-time developer. I'm an SEO and WordPress specialist. So when I decided to build and launch a web tool from scratch, I knew I had to be smart about every decision — from the tech stack to how I'd get it in front of people.

This is the story of how I built randomletter.io — a free, fast, accessible random letter generator — and what I learned along the way.

Why I Built It

The idea was simple: I wanted to create a suite of small, useful generator tools under one brand. Random letter generator was Tool #1.

I looked at what was already out there. Most existing tools were cluttered, slow, or just plain ugly. I knew I could do better — and more importantly, I knew a clean, fast, accessible tool could rank well on Google with the right SEO foundation.

So I got to work.

The Stack

I kept it deliberately simple:

  • WordPress as the CMS (I know it well, it's fast to deploy)
  • Kadence Theme — lightweight, performance-friendly
  • Custom Vanilla JS plugin for the actual tool logic
  • LiteSpeed Cache + Cloudflare for speed
  • Rank Math SEO for on-page optimization
  • Hostinger for hosting

No React. No npm. No build pipeline. Just clean, dependency-free Vanilla JS wrapped in a custom WordPress plugin.

Building the Tool Plugin

The core tool lives in a custom plugin at wp-content/plugins/. I built it entirely in Vanilla JS — no frameworks, no libraries.

Why Vanilla JS? A few reasons:

  1. Performance — no library overhead. Every millisecond matters for PageSpeed scores.
  2. Simplicity — fewer moving parts means fewer things to break.
  3. Control — I own every line of code.

The plugin handles letter generation, display modes (single letter, multiple letters), and user settings like excluding vowels or consonants. It enqueues its own CSS and JS cleanly, without touching the theme.

One early mistake: I accidentally enqueued Google Fonts twice — once in the theme and once in the plugin. Fixed it, and PageSpeed jumped immediately. Small things like that compound fast.

Accessibility from Day One

This was non-negotiable for me. A tool that teachers and students use needs to work for everyone.

I made sure:

  • All interactive elements have proper accessibility labels
  • Colour contrast meets accessibility standards (I had to fix --rlg-text-muted — the default was too light)
  • The tool is fully keyboard navigable
  • Screen reader announcements work correctly when a new letter generates

Result: 100/100 Accessibility score on PageSpeed Insights. Not a nice-to-have — a baseline.

The PageSpeed Obsession

I'll be honest — I became a little obsessed with PageSpeed scores.

After a lot of tweaking — removing duplicate font loads, deferring non-critical CSS, optimising the LiteSpeed Cache configuration, and setting up Cloudflare properly — here's where I landed:

Metric Mobile Desktop
Performance 98 100
Accessibility 100 100
Best Practices 100 100
SEO 100 100

A perfect or near-perfect score doesn't guarantee rankings — but it removes a barrier. Google won't penalise you for being fast.

SEO Strategy: Content Over Tricks

I didn't do anything clever with SEO. I just did the basics well:

  • Targeted low-competition keywords
  • Wrote genuinely useful supporting content
  • Built clean internal linking
  • Made sure the site was fully crawlable

No black hat. No shortcuts. Just content that actually helps people.

The Results (8 Weeks In)

As of May 2026, with zero ad spend:

  • 7,870 impressions on Google Search Console
  • 85 clicks
  • Average position: 18.2 (and improving)
  • 7 pages indexed
  • Impressions in 145 countries — India, USA, UK, Japan, Canada, Philippines, and counting

Not viral numbers. But for an 8-week-old site with no backlinks budget, I'll take it.

What's Next

Continuing to grow organically — more content, more visibility, more tools under the same brand. Slow and steady.

No shortcuts. No rushing.

What I Learned

  1. Vanilla JS is underrated. You don't need a framework for a focused, single-purpose tool.
  2. Accessibility and performance aren't opposites. You can have both if you're intentional from the start.
  3. WordPress gets a bad reputation it doesn't always deserve. With the right stack, it's genuinely fast.
  4. SEO is slow. That's fine. Compound interest is slow too. Keep going.

If you're thinking about building a small web tool — just start. Keep the scope small, the code clean, and the user experience tight.

You can check it out at randomletter.io — feedback always welcome.