It started with a stupid moment of paranoia.
I was merging some work PDFs one evening.
Contracts. NDAs. Sensitive stuff.
Using one of those popular online PDF tools.
And then I thought — wait. Where do these files actually go?
I read the privacy policy.
"We delete your files after 2 hours."
Sure. But I have no way to verify that.
That frustration turned into 4 weeks of building after work every day.
The result is taptools.dev — 30 free developer tools that run entirely in your browser.
The core idea
Most online tools work like this:
Your file → their server → processing → result
taptools works like this:
Your file → your browser → processing → result
No upload. No server. No way for anyone to access your files.
Your data never leaves your device. Not mine. Not anyone's.
What I built
PDF Tools
- Merge PDF — combine multiple PDFs into one
- Split PDF — extract specific pages
- Compress PDF — reduce file size
- PDF to JPG — convert pages to images
- PDF to Word — extract text with paragraph detection
Developer Utilities
- JSON Formatter — format + auto-fix broken JSON
- XML Formatter — format with syntax highlighting
- JWT Decoder — decode and inspect JWT tokens
- Base64 Encoder/Decoder — encode and decode instantly
- Regex Tester — test with live match highlighting
- Hash Generator — MD5, SHA-1, SHA-256, SHA-512
- Unix Timestamp Converter — with next run times
- URL Encoder/Decoder — component and full URL modes
- UUID Generator — v1 and v4 with multiple formats
- cURL to Fetch Converter — convert in both directions
- Cron Expression Parser — plain English explanation
- Diff Checker — unified and split view
- Color Converter — HEX, RGB, HSL, CMYK
Text & Other Tools
- Word Counter — words, chars, reading time, top words
- Text Case Converter — camelCase, snake_case and more
- Lorem Ipsum Generator — paragraphs, sentences, words
- Password Generator — random + passphrase mode
- Number Base Converter — decimal, binary, octal, hex
- QR Code Generator — with custom frames and colors
- Image to Base64 — drag and drop converter
- And more...
The tech stack
Framework: Next.js 14 + TypeScript
Styling: Tailwind CSS
Hosting: Vercel
PDF: pdfjs-dist + pdf-lib
Crypto: Web Crypto API
Images: Canvas API
Word docs: docx library
QR codes: qrcode library
The most interesting technical challenge
JSON Auto-Fix
Most JSON formatters just show you the error and stop.
Mine tries to fix the error automatically.
The fix pipeline:
// Step 1 — Remove comments
s = s.replace(/\/\/[^\n]*/g, '')
// Step 2 — Fix boolean casing
s = s.replace(/\bTrue\b/g, 'true')
s = s.replace(/\bFalse\b/g, 'false')
// Step 3 — Remove trailing commas
s = s.replace(/,\s*([}\]])/g, '$1')
// Step 4 — Add missing quotes around keys
s = s.replace(/([{,]\s*)([a-zA-Z_][a-zA-Z0-9_]*)\s*:/g, '$1"$2":')
// Step 5 — Fix missing closing quote on keys
s = s.replace(/"([a-zA-Z0-9_\s\-]+)(?<!"):(?!\s*\/\/)/g, '"$1":')
// Step 6 — Character level scanner (handles edge cases)
It handles:
- Single quotes → double quotes
- Trailing commas
- Unquoted keys
- Missing closing quotes on keys
- Wrong boolean casing
- Comments (JavaScript style)
Not perfect. But it handles the most common real-world mistakes.
PDF to Word with Smart Paragraph Detection
Instead of dumping raw text I built a positioning algorithm:
// 1. Extract text items with X, Y positions
// 2. Group items on the same line (similar Y value)
// 3. Detect paragraph breaks (large Y gap between lines)
// 4. Detect headings (larger font size than average)
// 5. Detect bullet points (starts with •, -, *, etc)
// 6. Create proper Word paragraphs with spacing
Result is a properly structured Word document
instead of a wall of text.
Browser-Based PDF Rendering
const pdfjsLib = await import('pdfjs-dist')
const pdf = await pdfjsLib.getDocument({ data }).promise
const page = await pdf.getPage(pageNum)
const viewport = page.getViewport({ scale: 2 }) // 144 DPI
const canvas = document.createElement('canvas')
canvas.width = viewport.width
canvas.height = viewport.height
await page.render({
canvasContext: canvas.getContext('2d'),
viewport,
canvas
}).promise
const dataUrl = canvas.toDataURL('image/jpeg', 0.92)
All in the browser. No server needed.
What I learned
1. Ship early with fewer tools
I launched with 8 tools in week 1.
Real users from 10 countries found it organically
within the first month without any marketing.
🇺🇸 USA — 24 users
🇮🇹 Italy — 19 users
🇫🇷 France — 6 users
🇱🇰 Sri Lanka — 4 users
🇬🇧 UK — 4 users
🇳🇱 Netherlands — 4 users
That feedback loop is worth more than any amount of planning.
2. Privacy is a real differentiator
Most competing tools upload your files to their servers.
Some even have subscription traps — generate a QR code
for free, print it on 1000 business cards, then your
QR code expires unless you pay monthly.
taptools QR codes are static — the data is embedded
directly in the image. They work forever even if
taptools.dev shuts down tomorrow.
3. 56 hours is enough to build something real
2 hours/day × 28 days = 56 hours
I work on a legacy enterprise system by day.
Next.js was relatively new to me.
Those 2-3 hours after work every day compounded
into 30 live tools.
Your day job teaches you more than you think.
Debugging complex systems, thinking about edge cases,
handling errors — those skills transfer directly.
4. SEO compounds slowly but powerfully
Each tool page targets specific search terms.
Merge PDF — 1.2M searches/month
Compress PDF — 900k searches/month
QR Code Generator — 800k searches/month
Word Counter — 500k searches/month
Password Generator — 400k searches/month
30 pages × focused keywords = compounding
organic traffic over time.
5. The hardest part is not the code
It's convincing yourself to keep going
when nobody is watching.
When you have a full time job a side project
lives or dies in those 2-3 hours after work.
Tired hours. Distracted hours.
But those hours compound into something real.
The numbers
Tools live: 30
Countries with users: 10+
Marketing spend: €0
What's next
- More tools based on analytics data
- Blog content targeting long-tail SEO keywords
- AdSense monetization (pending approval)
The goal is simple passive income that funds
future projects.
Not to get rich. Just to build something
sustainable that keeps earning while I sleep.
Try it yourself
No signup. Nothing stored. Ever.
Would love your feedback in the comments below 👇
What tools do you use daily that you wish had a
privacy-first browser-based version?
Thanks for reading! If you found this useful
consider following for more build-in-public content.
Top comments (0)