<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vipul Singh</title>
    <description>The latest articles on DEV Community by Vipul Singh (@vipul_singh_755a9075cfbdd).</description>
    <link>https://dev.to/vipul_singh_755a9075cfbdd</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4093579%2F3b40f8ef-8f15-4d90-a414-79376204ffb8.png</url>
      <title>DEV Community: Vipul Singh</title>
      <link>https://dev.to/vipul_singh_755a9075cfbdd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vipul_singh_755a9075cfbdd"/>
    <language>en</language>
    <item>
      <title>Why free batch file tools cap you at 3 files, and how I built one that doesn't (Web Workers + streamed ZIP)</title>
      <dc:creator>Vipul Singh</dc:creator>
      <pubDate>Sun, 11 Oct 2026 12:55:30 +0000</pubDate>
      <link>https://dev.to/vipul_singh_755a9075cfbdd/why-free-batch-file-tools-cap-you-at-3-files-and-how-i-built-one-that-doesnt-web-workers--3f56</link>
      <guid>https://dev.to/vipul_singh_755a9075cfbdd/why-free-batch-file-tools-cap-you-at-3-files-and-how-i-built-one-that-doesnt-web-workers--3f56</guid>
      <description>&lt;p&gt;Compressing one PDF is free everywhere. Compressing the forty in a folder is where free tiers stop. The usual excuse is server cost, which is true when files get uploaded, processed on someone else's hardware and downloaded again. Do the work in the browser and that cost disappears, so a 3-file cap is a business decision.&lt;/p&gt;

&lt;p&gt;But browser-side batch processing swaps the bottleneck from server capacity to your device's memory. How I handled it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bounded concurrency: 3 files at a time in Web Workers, rather than all at once (memory spike, crashed tab) or strictly sequential (slow)&lt;/li&gt;
&lt;li&gt;Streamed ZIP output: each result is added to the archive as it finishes instead of being held in memory until the end&lt;/li&gt;
&lt;li&gt;Per-file failure isolation: one corrupt or password-protected PDF is reported and skipped, not a failed run&lt;/li&gt;
&lt;li&gt;A pre-flight memory warning (~500 MB desktop, ~150 MB mobile) that is an honest estimate, not a paywall prompt&lt;/li&gt;
&lt;li&gt;Libraries (pdf-lib, pdf.js) bundled with the page, so it works offline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Operations: PDF compress/merge/watermark/page-to-image, and image convert/resize/compress/EXIF-strip. The EXIF one is the one I care about most. Phone photos carry GPS coordinates, and people share them without realizing.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.forgeplug.com/tools/bulk-file-ops" rel="noopener noreferrer"&gt;https://www.forgeplug.com/tools/bulk-file-ops&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you've done heavy batch work in the browser, I'd like to hear how you handle memory pressure on mobile.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>performance</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Built a bulk redirect checker that follows every hop manually, with SSRF protection on each one</title>
      <dc:creator>Vipul Singh</dc:creator>
      <pubDate>Fri, 09 Oct 2026 17:47:02 +0000</pubDate>
      <link>https://dev.to/vipul_singh_755a9075cfbdd/built-a-bulk-redirect-checker-that-follows-every-hop-manually-with-ssrf-protection-on-each-one-3dce</link>
      <guid>https://dev.to/vipul_singh_755a9075cfbdd/built-a-bulk-redirect-checker-that-follows-every-hop-manually-with-ssrf-protection-on-each-one-3dce</guid>
      <description>&lt;p&gt;Before a site migration, someone has to verify that every old URL either still works or redirects correctly. One at a time, that's hours of work. The bulk tools (Screaming Frog, Ahrefs, SEMrush) cap their free tiers to push you toward a subscription.&lt;/p&gt;

&lt;p&gt;So I built a bulk checker:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Takes up to 100 URLs per run: pasted list, CSV upload (it detects URL columns automatically, whatever the header says), or a sitemap URL whose  entries become the list&lt;/li&gt;
&lt;li&gt;Follows redirects manually instead of letting fetch auto-follow, so it records the status code and Location header at every hop (up to 20 deep)&lt;/li&gt;
&lt;li&gt;Flags common problems in plain English: chains of 3+ hops, 302 used for a permanent move, HTTPS → HTTP → HTTPS downgrades, 404s at the end of a redirect&lt;/li&gt;
&lt;li&gt;Streams results back as each URL finishes, with a concurrency pool of 10&lt;/li&gt;
&lt;li&gt;Exports a text report or CSV&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interesting engineering bit is SSRF protection. A server that fetches arbitrary URLs can be tricked into hitting internal resources, and a redirect is the classic way to do it (a public URL that 302s to 169.254.169.254, the cloud metadata address). Validating only the initial URL isn't enough, so every redirect hop is checked against private and reserved ranges before the request is made.&lt;/p&gt;

&lt;p&gt;This one runs server-side, because browsers can't read cross-origin redirect chains. URLs aren't stored.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.forgeplug.com/tools/bulk-url-checker" rel="noopener noreferrer"&gt;https://www.forgeplug.com/tools/bulk-url-checker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curious what other checks would be useful in a migration audit, such as canonical or noindex detection.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>Free OCR sites cap you at 15 pages/hour, so I built an unlimited one that runs Tesseract in the browser</title>
      <dc:creator>Vipul Singh</dc:creator>
      <pubDate>Thu, 08 Oct 2026 18:43:15 +0000</pubDate>
      <link>https://dev.to/vipul_singh_755a9075cfbdd/free-ocr-sites-cap-you-at-15-pageshour-so-i-built-an-unlimited-one-that-runs-tesseract-in-the-3f77</link>
      <guid>https://dev.to/vipul_singh_755a9075cfbdd/free-ocr-sites-cap-you-at-15-pageshour-so-i-built-an-unlimited-one-that-runs-tesseract-in-the-3f77</guid>
      <description>&lt;p&gt;Every free OCR service I tried throttles you: 15 pages/hour, 50 pages/month, or a free tier that exists to push you to a paid plan. The cap makes sense for them, because server compute costs money on every page. The only genuinely unlimited free option has been raw Tesseract on the command line, which most people can't use.&lt;/p&gt;

&lt;p&gt;So I ran the same engine in the browser instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tesseract.js (Tesseract compiled to WebAssembly) runs on your own CPU, so there's no per-page cost and nothing to ration&lt;/li&gt;
&lt;li&gt;Accepts JPG, PNG, WEBP, HEIC (converted on-device) and multi-page scanned PDFs, processed page by page&lt;/li&gt;
&lt;li&gt;Text shows up per page as it finishes, not after the whole batch&lt;/li&gt;
&lt;li&gt;Each page returns Tesseract's confidence score, and low-confidence pages get flagged instead of silently handing you garbled text&lt;/li&gt;
&lt;li&gt;6 languages for now: English, Spanish, French, German, Hindi, Portuguese&lt;/li&gt;
&lt;li&gt;The language model downloads once (a few MB) and is cached. Your document itself is never uploaded, which you can verify in the Network tab&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Limits worth stating up front: it's a print-text engine, so no handwriting, no table or form reconstruction, and blurry low-resolution scans will struggle.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.forgeplug.com/tools/ocr-text-extractor" rel="noopener noreferrer"&gt;https://www.forgeplug.com/tools/ocr-text-extractor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which languages would be most useful to add next?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Blurring a card number in a screenshot isn't safe: I built a redactor that uses solid blocks and runs fully in the browser</title>
      <dc:creator>Vipul Singh</dc:creator>
      <pubDate>Sun, 04 Oct 2026 14:18:55 +0000</pubDate>
      <link>https://dev.to/vipul_singh_755a9075cfbdd/blurring-a-card-number-in-a-screenshot-isnt-safe-i-built-a-redactor-that-uses-solid-blocks-and-48pb</link>
      <guid>https://dev.to/vipul_singh_755a9075cfbdd/blurring-a-card-number-in-a-screenshot-isnt-safe-i-built-a-redactor-that-uses-solid-blocks-and-48pb</guid>
      <description>&lt;p&gt;Screenshots are an easy way to leak data without noticing: an email thread's full address, a card number in a payment app, an API key in a code editor. Most people blur it and move on, but blur and pixelation don't erase the pixels. They average or smear them, and on short structured text like a 16-digit card number that can be reversed. Researchers have shown both deblurring and depixelation attacks.&lt;/p&gt;

&lt;p&gt;So I built a redactor that defaults to solid blocks, which overwrite the pixels so there's nothing to reconstruct:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tesseract.js (OCR compiled to WebAssembly) reads the screenshot inside a Web Worker, so the page never freezes&lt;/li&gt;
&lt;li&gt;Pattern and checksum detectors scan the text for emails, phones, card numbers (Luhn-validated), IBANs (checksum-validated), UPI IDs, API keys, PAN, Aadhaar and SSN&lt;/li&gt;
&lt;li&gt;Checksums matter: most random 16-digit strings fail Luhn, so you get far fewer false positives than plain regex&lt;/li&gt;
&lt;li&gt;Each match is an outlined box you can toggle, or flip a whole category, or draw your own rectangle/brush mark for what OCR missed&lt;/li&gt;
&lt;li&gt;The export is drawn onto a fresh canvas, so no hidden layer and no EXIF/GPS carried over&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything runs client-side. You can confirm it in the Network tab: no requests carry image data. Free, no signup, no caps.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.forgeplug.com/tools/smart-redactor" rel="noopener noreferrer"&gt;https://www.forgeplug.com/tools/smart-redactor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One honest caveat: OCR can miss blurry or tiny text, so give the result a once-over before sharing. Feedback welcome on other detectors worth adding.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>security</category>
      <category>privacy</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Built a background remover that runs real AI (ISNet) locally — no upload, ever</title>
      <dc:creator>Vipul Singh</dc:creator>
      <pubDate>Sat, 03 Oct 2026 07:39:21 +0000</pubDate>
      <link>https://dev.to/vipul_singh_755a9075cfbdd/built-a-background-remover-that-runs-real-ai-isnet-locally-no-upload-ever-195h</link>
      <guid>https://dev.to/vipul_singh_755a9075cfbdd/built-a-background-remover-that-runs-real-ai-isnet-locally-no-upload-ever-195h</guid>
      <description>&lt;p&gt;Nearly every free background-removal tool works the same way: you upload your photo, their server runs a segmentation model, and you get the result back. That means your image — a product shot, a headshot, anything sensitive — passes through someone else's infrastructure.&lt;/p&gt;

&lt;p&gt;Built one that skips that entirely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runs an ISNet segmentation model directly in the browser via ONNX Runtime WebAssembly — the same class of model a server-side API would use, just local&lt;/li&gt;
&lt;li&gt;Pixel-level precision, including fine edges like hair and fur&lt;/li&gt;
&lt;li&gt;Before/after comparison slider to check quality before exporting&lt;/li&gt;
&lt;li&gt;Fast / Balanced / High Quality processing modes&lt;/li&gt;
&lt;li&gt;Option to replace the background with a solid color instead of transparency&lt;/li&gt;
&lt;li&gt;Supports PNG, JPG, WEBP, AVIF input up to 50MB; exports as transparent PNG or WEBP&lt;/li&gt;
&lt;li&gt;Model (~25-35MB) downloads once and caches — works offline after that, no per-image queue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No account, no file limits, no watermark.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.forgeplug.com/tools/background-remover" rel="noopener noreferrer"&gt;https://www.forgeplug.com/tools/background-remover&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curious if anyone's compared ISNet vs. the models behind paid tools like remove.bg — open to feedback on edge cases where it struggles.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>javascript</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Built a meta tags generator with live previews across 7 platforms (not just raw HTML output)</title>
      <dc:creator>Vipul Singh</dc:creator>
      <pubDate>Fri, 02 Oct 2026 18:29:48 +0000</pubDate>
      <link>https://dev.to/vipul_singh_755a9075cfbdd/built-a-meta-tags-generator-with-live-previews-across-7-platforms-not-just-raw-html-output-14k3</link>
      <guid>https://dev.to/vipul_singh_755a9075cfbdd/built-a-meta-tags-generator-with-live-previews-across-7-platforms-not-just-raw-html-output-14k3</guid>
      <description>&lt;p&gt;Most meta tag generators give you a block of HTML and leave you to imagine how it'll actually look once shared. That's how people end up with a broken link preview on Discord or a truncated title in Google search — you don't find out until it's already live.&lt;/p&gt;

&lt;p&gt;Built one with an actual live preview:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full tag suite: title, description, robots, canonical, Open Graph, Twitter Cards, and verification tags for Google, Bing, Yandex, Pinterest, and Facebook&lt;/li&gt;
&lt;li&gt;Live preview panel rendering exactly how Google, Facebook, X, LinkedIn, WhatsApp, Discord, and Telegram will display your tags&lt;/li&gt;
&lt;li&gt;Smart validation flags missing fields, duplicate values, over-length titles, and invalid URLs before you ship&lt;/li&gt;
&lt;li&gt;Import existing tags from a URL/HTML to edit instead of starting from scratch&lt;/li&gt;
&lt;li&gt;Framework-aware export: plain HTML, React Helmet, Next.js Metadata API, Vue Meta, Nuxt, Astro&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;100% client-side — nothing uploaded, no account.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.forgeplug.com/tools/meta-tags-generator" rel="noopener noreferrer"&gt;https://www.forgeplug.com/tools/meta-tags-generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If there's a platform preview or framework export missing, let me know — happy to add it.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Built a meta tags generator with live previews across 7 platforms (not just raw HTML output)</title>
      <dc:creator>Vipul Singh</dc:creator>
      <pubDate>Tue, 29 Sep 2026 18:34:14 +0000</pubDate>
      <link>https://dev.to/vipul_singh_755a9075cfbdd/built-a-meta-tags-generator-with-live-previews-across-7-platforms-not-just-raw-html-output-akn</link>
      <guid>https://dev.to/vipul_singh_755a9075cfbdd/built-a-meta-tags-generator-with-live-previews-across-7-platforms-not-just-raw-html-output-akn</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb7yvv69rb8ttmyd8wqqw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb7yvv69rb8ttmyd8wqqw.png" alt=" " width="728" height="564"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9j45b5ja898jq3py48fc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9j45b5ja898jq3py48fc.png" alt=" " width="800" height="368"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fflr2igi8t4qj3yy12hjb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fflr2igi8t4qj3yy12hjb.png" alt=" " width="658" height="648"&gt;&lt;/a&gt;&lt;br&gt;
Most meta tag generators give you a block of HTML and leave you to imagine how it'll actually look once shared. That's how people end up with a broken link preview on Discord or a truncated title in Google search — you don't find out until it's already live.&lt;/p&gt;

&lt;p&gt;Built one with an actual live preview:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full tag suite: title, description, robots, canonical, Open Graph, Twitter Cards, and verification tags for Google, Bing, Yandex, Pinterest, and Facebook&lt;/li&gt;
&lt;li&gt;Live preview panel rendering exactly how Google, Facebook, X, LinkedIn, WhatsApp, Discord, and Telegram will display your tags&lt;/li&gt;
&lt;li&gt;Smart validation flags missing fields, duplicate values, over-length titles, and invalid URLs before you ship&lt;/li&gt;
&lt;li&gt;Import existing tags from a URL/HTML to edit instead of starting from scratch&lt;/li&gt;
&lt;li&gt;Framework-aware export: plain HTML, React Helmet, Next.js Metadata API, Vue Meta, Nuxt, Astro&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;100% client-side — nothing uploaded, no account.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.forgeplug.com/tools/meta-tags-generator" rel="noopener noreferrer"&gt;https://www.forgeplug.com/tools/meta-tags-generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If there's a platform preview or framework export missing, let me know — happy to add it.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Built a free citation generator with no cap and no style paywall (10 styles, 27+ source types)</title>
      <dc:creator>Vipul Singh</dc:creator>
      <pubDate>Sat, 26 Sep 2026 19:27:10 +0000</pubDate>
      <link>https://dev.to/vipul_singh_755a9075cfbdd/built-a-free-citation-generator-with-no-cap-and-no-style-paywall-10-styles-27-source-types-19b1</link>
      <guid>https://dev.to/vipul_singh_755a9075cfbdd/built-a-free-citation-generator-with-no-cap-and-no-style-paywall-10-styles-27-source-types-19b1</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fev4q61wca3va8r616w05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fev4q61wca3va8r616w05.png" alt=" " width="800" height="438"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa38yx35odl095do7g2cs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa38yx35odl095do7g2cs.png" alt=" " width="800" height="881"&gt;&lt;/a&gt;&lt;br&gt;
Every "free" citation tool I've seen follows the same pattern: APA and MLA only, capped at 5-10 citations, then a subscription wall. For students juggling dissertations or literature reviews across dozens of sources, that's not actually free.&lt;/p&gt;

&lt;p&gt;Built Citation Studio without those limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10 citation styles: APA 7/6, MLA 9/8, Chicago (Notes &amp;amp; Author-Date), Harvard, IEEE, Vancouver, AMA, ACS, Bluebook, Turabian&lt;/li&gt;
&lt;li&gt;27+ source types — books, journal articles, websites, YouTube, podcasts, GitHub repos, patents, court decisions, and AI chat conversations (ChatGPT/Claude citations are a newer style-guide addition)&lt;/li&gt;
&lt;li&gt;Smart URL/DOI auto-detection that fills author, title, date, and publisher for you&lt;/li&gt;
&lt;li&gt;Bibliography builder — collect sources as you research, export as BibTeX, RIS, EndNote, CSV, or JSON&lt;/li&gt;
&lt;li&gt;100% client-side — nothing is uploaded, works offline, no account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Free forever, no citation limit.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.forgeplug.com/tools/citation-generator" rel="noopener noreferrer"&gt;https://www.forgeplug.com/tools/citation-generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curious if there's a citation style or source type still missing that people actually need — happy to add it.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>education</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Built a DNS propagation checker that queries 3 resolvers at once instead of guessing from one</title>
      <dc:creator>Vipul Singh</dc:creator>
      <pubDate>Tue, 22 Sep 2026 19:18:00 +0000</pubDate>
      <link>https://dev.to/vipul_singh_755a9075cfbdd/built-a-dns-propagation-checker-that-queries-3-resolvers-at-once-instead-of-guessing-from-one-16ko</link>
      <guid>https://dev.to/vipul_singh_755a9075cfbdd/built-a-dns-propagation-checker-that-queries-3-resolvers-at-once-instead-of-guessing-from-one-16ko</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkpjoig0c2xdh52aeixd9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkpjoig0c2xdh52aeixd9.png" alt=" " width="800" height="520"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fglmypvmyj2ozfbrdb1zd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fglmypvmyj2ozfbrdb1zd.png" alt=" " width="800" height="567"&gt;&lt;/a&gt;&lt;br&gt;
Is my DNS change live yet?" is genuinely hard to answer from a single machine. Your own resolver might still be serving a cached answer while the rest of the internet has moved on — or vice versa. And "propagation" is a bit of a misnomer: nothing spreads outward from your nameserver. Your authoritative server updates instantly; every resolver that already cached the old value just keeps serving it until the TTL expires.&lt;/p&gt;

&lt;p&gt;Built a checker that makes this actually observable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Queries Cloudflare, Google, and Quad9 — three independent public resolvers — at the same instant&lt;/li&gt;
&lt;li&gt;Checks A, AAAA, MX, TXT (incl. SPF), and NS records in one pass&lt;/li&gt;
&lt;li&gt;Flags any record where the resolvers disagree, which is the clearest live signal a change is still propagating&lt;/li&gt;
&lt;li&gt;NS-record visibility specifically for full nameserver migrations (IP records can look "done" while delegation is still catching up)&lt;/li&gt;
&lt;li&gt;Uses DNS-over-HTTPS since the serverless platform this runs on blocks outbound UDP on port 53&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's part of a broader Site Health Check — submitting also runs an SSL check, HTTP security header scan, and robots.txt validation on the same domain, all in parallel.&lt;/p&gt;

&lt;p&gt;Free, rate-limited per IP (not paywalled), no signup.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.forgeplug.com/tools/dns-propagation-checker" rel="noopener noreferrer"&gt;https://www.forgeplug.com/tools/dns-propagation-checker&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>networking</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Built a free invoice generator with no invoice cap and no watermark (100% browser-based)</title>
      <dc:creator>Vipul Singh</dc:creator>
      <pubDate>Sat, 19 Sep 2026 16:00:07 +0000</pubDate>
      <link>https://dev.to/vipul_singh_755a9075cfbdd/built-a-free-invoice-generator-with-no-invoice-cap-and-no-watermark-100-browser-based-3gb3</link>
      <guid>https://dev.to/vipul_singh_755a9075cfbdd/built-a-free-invoice-generator-with-no-invoice-cap-and-no-watermark-100-browser-based-3gb3</guid>
      <description>&lt;p&gt;Every freelance invoicing tool I looked at had the same catch — free tier caps you at 3-5 invoices a month, or the PDF ships with a watermark until you subscribe. For something as basic as billing a client, that felt excessive.&lt;/p&gt;

&lt;p&gt;Built one without the catch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logo upload, client details, up to 50 line items with live-calculating totals&lt;/li&gt;
&lt;li&gt;Flat or itemized tax (same math as the GST Calculator — handles India's mixed GST slabs)&lt;/li&gt;
&lt;li&gt;Discounts, fixed or percentage, applied before or after tax&lt;/li&gt;
&lt;li&gt;10 currencies with correct locale formatting&lt;/li&gt;
&lt;li&gt;3 templates (Minimal, Modern, Classic) → matching PDF via pdf-lib, or direct print&lt;/li&gt;
&lt;li&gt;Drafts autosave to localStorage — nothing uploaded, no account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No cap, no watermark, free forever.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.forgeplug.com/tools/invoice-generator" rel="noopener noreferrer"&gt;https://www.forgeplug.com/tools/invoice-generator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If there's a currency or tax scenario I'm missing, let me know — happy to add it.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>privacy</category>
      <category>javascript</category>
      <category>freelance</category>
    </item>
    <item>
      <title>Every "free" digital business card maker had a catch — so I built one that doesn't</title>
      <dc:creator>Vipul Singh</dc:creator>
      <pubDate>Thu, 17 Sep 2026 08:56:05 +0000</pubDate>
      <link>https://dev.to/vipul_singh_755a9075cfbdd/every-free-digital-business-card-maker-had-a-catch-so-i-built-one-that-doesnt-3mak</link>
      <guid>https://dev.to/vipul_singh_755a9075cfbdd/every-free-digital-business-card-maker-had-a-catch-so-i-built-one-that-doesnt-3mak</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F77hh2i01qzfv7zae3n8t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F77hh2i01qzfv7zae3n8t.png" alt=" " width="800" height="581"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flcztckq7yopxwsr6u1bk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flcztckq7yopxwsr6u1bk.png" alt=" " width="800" height="602"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgw0rs6mhpxrj9f2txldu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgw0rs6mhpxrj9f2txldu.png" alt=" " width="800" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A few months back I needed a digital business card. Went through half a dozen "free" tools and found the same pattern every time: 3 fields free, then a paywall. Or free, but your QR code carries their logo. Or free, but your contact info goes into their database "for sync."&lt;/p&gt;

&lt;p&gt;That last one bothered me the most — a business card is &lt;em&gt;your&lt;/em&gt; contact info. Why does making a digital version of it require uploading it to someone else's server?&lt;/p&gt;

&lt;p&gt;So I built one that doesn't do any of that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;16 themes, including role-specific ones (Developer, Lawyer, Real Estate, Healthcare, Photographer)&lt;/li&gt;
&lt;li&gt;Real vCard QR codes — scan and it saves straight into Contacts on iOS/Android/Outlook, no app required&lt;/li&gt;
&lt;li&gt;Action buttons: Call, Email, WhatsApp, Book Meeting&lt;/li&gt;
&lt;li&gt;Export as PNG, SVG, vCard (.vcf), or a print-ready PDF with crop marks&lt;/li&gt;
&lt;li&gt;Zero login. Zero server. Your card is saved locally in your browser, full stop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've been burned by a "free" tool that wasn't, I'd genuinely like to hear the worst one you've hit — swapping stories in the comments.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.forgeplug.com/tools/digital-business-card" rel="noopener noreferrer"&gt;https://www.forgeplug.com/tools/digital-business-card&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>privacy</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I built a free, private Global Salary Calculator (8 countries, offer comparison, 100% client-side)</title>
      <dc:creator>Vipul Singh</dc:creator>
      <pubDate>Tue, 15 Sep 2026 11:47:35 +0000</pubDate>
      <link>https://dev.to/vipul_singh_755a9075cfbdd/i-built-a-free-private-global-salary-calculator-8-countries-offer-comparison-100-client-side-ad6</link>
      <guid>https://dev.to/vipul_singh_755a9075cfbdd/i-built-a-free-private-global-salary-calculator-8-countries-offer-comparison-100-client-side-ad6</guid>
      <description>&lt;p&gt;Gross salary numbers are misleading — what you actually take home depends on tax brackets, social security, and country-specific deductions that vary wildly.&lt;/p&gt;

&lt;p&gt;I built a Global Salary Calculator that computes net pay, CTC, and the full gross-to-net breakdown across 8 countries (India, US, UK, Canada, Australia, Singapore, UAE), with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-detected, country-specific tax rules&lt;/li&gt;
&lt;li&gt;Job-offer comparison mode (currency conversion included)&lt;/li&gt;
&lt;li&gt;Budget planning using the 50/30/20 rule&lt;/li&gt;
&lt;li&gt;Loan eligibility + retirement projections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Like everything on ForgePlug, it's 100% client-side — your salary figures never leave your browser, no signup, works offline.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.forgeplug.com/tools/salary-calculator" rel="noopener noreferrer"&gt;https://www.forgeplug.com/tools/salary-calculator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback welcome — especially if you've got a country's tax rules you'd like added.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>finance</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
