Like a lot of developers, I have a handful of bookmarked utility sites I use constantly — JSON formatter, regex tester, that kind of thing. Over time most of them got slower, ad-heavier, or started asking for signups for basic features.
So I built my own small suite:
- JSON Formatter — format/validate/minify, with a tree view for nested objects
- Regex Tester — live match highlighting plus a plain-English breakdown of what your pattern does
- Cron Builder — visual builder + parser, shows your next 5 execution times
- Contrast Checker — WCAG AA/AAA contrast checking with a live preview
- API Tester — lightweight Postman-style request tester, no install
Everything runs client-side in the browser — no backend, no data leaves your machine, no account needed.
### A few implementation notes for anyone curious
The cron parser was the one piece I ended up writing from scratch rather than pulling in a library. I wanted predictable behavior for the "next 5 execution times" calculation without dragging in a heavy dependency.
Writing a cron parser from scratch is a trap, though. I immediately hit a subtle bug in how Day-of-Month and Day-of-Week restrictions interact. In standard Unix cron, if both fields are restricted (i.e. not *), the engine treats them as an OR condition, not an AND. My initial logic combined them with an AND operator, which broke schedules like 0 0 1 * 1 (which should run on the 1st of the month or every Monday). I caught it when sanity-checking the next execution times against public standard engines, and had to rewrite the matching logic to correctly handle the conditional OR/AND split.
Built with React + Vite + Tailwind, deployed as a static site.
Would genuinely appreciate feedback — especially if anything looks broken on mobile, that's the area I'm least confident in right now.
Top comments (2)
How did you handle JSON formatting for very large datasets on your site, and I'm curious to hear more about your approach to keeping it ad-free, would love to swap ideas on this.
Good question! For large JSON - I'm not doing anything fancy on the parsing side (still using the browser's native JSON.parse), but the tree view is virtualized so it only renders visible nodes rather than the whole tree at once. That's what keeps big files from freezing the tab. Haven't stress-tested it past a few hundred MB though, so if you've got a pathological case, I'd genuinely like to try it and see where it breaks.
On staying ad-free honestly the simplest lever is just not needing to monetize yet. It's static, hosted on Cloudflare Pages, so my hosting cost is close to zero even with real traffic. The plan if it ever needs revenue is probably a small affiliate mention (dev tooling, hosting) rather than display ads, since that's what made the tools I was replacing so annoying to use. Curious what you've seen work for similar side-project tools without ruining the UX?