<?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: Reece Harris</title>
    <description>The latest articles on DEV Community by Reece Harris (@notreeceharris).</description>
    <link>https://dev.to/notreeceharris</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F689242%2Fa1869fb7-1fec-4ac8-9023-46fdf471af2f.png</url>
      <title>DEV Community: Reece Harris</title>
      <link>https://dev.to/notreeceharris</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/notreeceharris"/>
    <language>en</language>
    <item>
      <title>Turn Any File Into a Art Masterpiece!</title>
      <dc:creator>Reece Harris</dc:creator>
      <pubDate>Mon, 14 Jul 2025 21:47:44 +0000</pubDate>
      <link>https://dev.to/notreeceharris/turn-any-file-into-a-pixel-art-masterpiece-nl0</link>
      <guid>https://dev.to/notreeceharris/turn-any-file-into-a-pixel-art-masterpiece-nl0</guid>
      <description>&lt;p&gt;Ever wanted to &lt;em&gt;see&lt;/em&gt; your data? Not just in boring old spreadsheets or text files—but as a vibrant, colorful image? With my latest side project, &lt;strong&gt;RGBA Data Encoder&lt;/strong&gt;, you can now transform &lt;em&gt;any file&lt;/em&gt; into a PNG by packing raw bytes into pixel channels!  &lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;Each pixel in a PNG has four channels: &lt;strong&gt;Red, Green, Blue, and Alpha (RGBA)&lt;/strong&gt;. My encoder takes your file, converts it to hexadecimal, and then stores &lt;strong&gt;two hex characters per channel&lt;/strong&gt;—meaning &lt;strong&gt;one pixel = four bytes&lt;/strong&gt; of your original data.  &lt;/p&gt;

&lt;p&gt;The result? A &lt;strong&gt;lossless&lt;/strong&gt;, perfectly reconstructable image version of your file. Dodgy compression, no tricks—just pure, unadulterated data turned into art.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Example Time!
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ading2210/doompdf" rel="noopener noreferrer"&gt;&lt;strong&gt;Doom (PDF)&lt;/strong&gt;&lt;/a&gt; → 4.8MB (original 6.2MB) -1.4MB &lt;em&gt;(smaller than original!)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dn720401.ca.archive.org/0/items/TouhouBadApple/Touhou%20-%20Bad%20Apple.mp4" rel="noopener noreferrer"&gt;&lt;strong&gt;Bad Apple (MP4)&lt;/strong&gt;&lt;/a&gt; → 37.8MB (original 21.7MB) +16.1MB &lt;em&gt;(way bigger, but way cooler!)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/doodad-labs/rgba-data-encoder/blob/main/test/doom.pdf.png?raw=true" rel="noopener noreferrer"&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.amazonaws.com%2Fuploads%2Farticles%2F6m8khjxwsrl3ksjstmmp.png" alt="Doom PDF as an image" width="800" height="799"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;"Doom, but make it abstract expressionism."&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/doodad-labs/rgba-data-encoder/blob/main/test/bad-apple.mp4.png?raw=true" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdoodad-labs%2Frgba-data-encoder%2Fblob%2Fmain%2Ftest%2Fbad-apple.mp4.png%3Fraw%3Dtrue" alt="Bad Apple MP4 as an image" width="8" height="8"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;"The entire Bad Apple video… as a single, chaotic image."&lt;/em&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Why Would You Do This?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Steganography?&lt;/strong&gt; Maybe.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Archival storage?&lt;/strong&gt; If you &lt;em&gt;really&lt;/em&gt; like PNGs.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Just for fun?&lt;/strong&gt; Absolutely.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn’t about efficiency—it’s about &lt;strong&gt;seeing data in a new way&lt;/strong&gt;. Want to hide a secret message in plain sight? Turn your resume into a modern art piece? Encode your favorite meme &lt;em&gt;into another meme&lt;/em&gt;? The possibilities are endless (and slightly ridiculous).  &lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Try It Yourself
&lt;/h2&gt;

&lt;p&gt;The encoder &amp;amp; decoder are &lt;strong&gt;super simple&lt;/strong&gt;—just a few lines of JavaScript. Want to play around with it? &lt;strong&gt;Star the repo&lt;/strong&gt; and turn your files into pixel art today!  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;(And yes, it’s 100% reversible. Your data is safe… just very colorful.)&lt;/em&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/doodad-labs/rgba-data-encoder" rel="noopener noreferrer"&gt;🔗 &lt;strong&gt;Check it out here!&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>algorithms</category>
      <category>opensource</category>
      <category>learning</category>
    </item>
    <item>
      <title>The Hidden Challenge of Disposable Email Detection (And How You Can Help)</title>
      <dc:creator>Reece Harris</dc:creator>
      <pubDate>Mon, 14 Jul 2025 11:53:38 +0000</pubDate>
      <link>https://dev.to/notreeceharris/the-hidden-challenge-of-disposable-email-detection-and-how-you-can-help-5h3k</link>
      <guid>https://dev.to/notreeceharris/the-hidden-challenge-of-disposable-email-detection-and-how-you-can-help-5h3k</guid>
      <description>&lt;p&gt;Disposable email services have become a double-edged sword for developers. While they offer privacy-conscious users a way to avoid spam, they also enable abuse of online services. That's why many platforms try to block them—but maintaining an accurate disposable domain list is harder than it looks.  &lt;/p&gt;

&lt;h2&gt;
  
  
  The Scale of the Problem
&lt;/h2&gt;

&lt;p&gt;Our open-source project currently tracks &lt;strong&gt;205,824 known disposable domains&lt;/strong&gt;, but here's the catch:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;New disposable providers emerge daily&lt;/strong&gt; (often with legitimate-sounding domains)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Legitimate domains sometimes get falsely flagged&lt;/strong&gt; (causing real users problems)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Providers constantly rotate domains&lt;/strong&gt; to bypass filters
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This creates an endless game of cat-and-mouse that no single maintainer can handle alone.  &lt;/p&gt;

&lt;h2&gt;
  
  
  How We Keep Up
&lt;/h2&gt;

&lt;p&gt;Our system combines:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automated scraping&lt;/strong&gt; of known disposable providers
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community-contributed lists&lt;/strong&gt; from various sources
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual verification&lt;/strong&gt; of disputed domains
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But automation alone isn't enough. The most valuable contributions come from humans spotting false positives—like when a legitimate email service gets mistakenly blacklisted.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Every incorrectly flagged domain means:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🚫 &lt;strong&gt;Legitimate users locked out of services&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;⏳ &lt;strong&gt;Developer time wasted handling support tickets&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Constant maintenance overhead&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Join the Effort
&lt;/h2&gt;

&lt;p&gt;We've intentionally kept contribution barriers low because:  &lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;No coding experience needed&lt;/strong&gt; to report false flags&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Small corrections have big impact&lt;/strong&gt; (single domains help real users)&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Great first open-source contribution&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to help:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review the &lt;a href="https://github.com/doodad-labs/disposable-email-domains/blob/main/data/allow_list.txt" rel="noopener noreferrer"&gt;allow_list.txt&lt;/a&gt; for missing legitimate domains
&lt;/li&gt;
&lt;li&gt;Report new disposable providers you encounter
&lt;/li&gt;
&lt;li&gt;Help improve our scrapers if you have technical skills
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't about promoting a tool—it's about maintaining a community resource that helps balance privacy and security across the web. The more eyes we have on this, the better it works for everyone.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/doodad-labs/disposable-email-domains" rel="noopener noreferrer"&gt;Contribute to the project here&lt;/a&gt; →  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Footnote: Special thanks to all current contributors—your pull requests directly reduce false positives for thousands of applications using this data.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>programming</category>
      <category>beginners</category>
      <category>javascript</category>
    </item>
    <item>
      <title>The World's Largest Disposable Email Domain List – How We Keep It Updated</title>
      <dc:creator>Reece Harris</dc:creator>
      <pubDate>Thu, 10 Jul 2025 14:47:56 +0000</pubDate>
      <link>https://dev.to/notreeceharris/the-worlds-largest-disposable-email-domain-list-how-we-keep-it-updated-pd7</link>
      <guid>https://dev.to/notreeceharris/the-worlds-largest-disposable-email-domain-list-how-we-keep-it-updated-pd7</guid>
      <description>&lt;p&gt;Most disposable email domain lists become outdated quickly as temporary email services constantly rotate domains. Our solution? &lt;strong&gt;A fully automated system that aggregates data from multiple trusted sources and scrapes providers directly&lt;/strong&gt; – currently tracking over 180,000 disposable domains.  &lt;/p&gt;

&lt;h2&gt;
  
  
  How We Build the List
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Automated Aggregation from Trusted Sources (Weekly)
&lt;/h3&gt;

&lt;p&gt;We pull data from &lt;strong&gt;6+ authoritative disposable domain lists&lt;/strong&gt; via GitHub Actions, including:  &lt;/p&gt;

&lt;p&gt;📜 &lt;strong&gt;Text-based lists:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/disposable/disposable-email-domains" rel="noopener noreferrer"&gt;disposable/disposable-email-domains&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/disposable-email-domains/disposable-email-domains" rel="noopener noreferrer"&gt;disposable-email-domains/disposable_email_blocklist&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/7c/fakefilter" rel="noopener noreferrer"&gt;7c/fakefilter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/wesbos/burner-email-providers" rel="noopener noreferrer"&gt;wesbos/burner-email-providers&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📊 &lt;strong&gt;Structured formats:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://deviceandbrowserinfo.com/api/emails/disposable" rel="noopener noreferrer"&gt;DeviceAndBrowserInfo's disposable API&lt;/a&gt; (JSON)
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Propaganistas/Laravel-Disposable-Email" rel="noopener noreferrer"&gt;Laravel-Disposable-Email&lt;/a&gt; (JSON)
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/infiniteloopltd/TempEmailDomainMXRecords" rel="noopener noreferrer"&gt;TempEmailDomainMXRecords&lt;/a&gt; (CSV)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ &lt;strong&gt;Allowlist integration:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
We cross-check with &lt;a href="https://github.com/disposable-email-domains/disposable-email-domains" rel="noopener noreferrer"&gt;disposable-email-domains/allowlist&lt;/a&gt; to remove false positives.  &lt;/p&gt;
&lt;h3&gt;
  
  
  2. Direct Scraping of Temporary Email Services (Daily)
&lt;/h3&gt;

&lt;p&gt;We actively monitor &lt;strong&gt;10+ disposable email providers&lt;/strong&gt; (and growing) to catch newly rotated domains that haven't yet appeared in public lists.  &lt;/p&gt;

&lt;p&gt;This two-pronged approach ensures:&lt;br&gt;&lt;br&gt;
🔹 &lt;strong&gt;Maximum coverage&lt;/strong&gt; from established lists&lt;br&gt;&lt;br&gt;
🔹 &lt;strong&gt;Timely detection&lt;/strong&gt; of newly created domains&lt;br&gt;&lt;br&gt;
🔹 &lt;strong&gt;Minimal false positives&lt;/strong&gt; through allowlisting  &lt;/p&gt;
&lt;h2&gt;
  
  
  Keeping the List Clean
&lt;/h2&gt;

&lt;p&gt;To prevent legitimate domains from being blocked:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All entries are checked against our allowlist
&lt;/li&gt;
&lt;li&gt;Major email providers (Gmail, Outlook, etc.) are automatically excluded
&lt;/li&gt;
&lt;li&gt;Users can submit corrections via &lt;a href="https://github.com/doodad-labs/disposable-email-domains/blob/main/data/domain_whitelist.txt" rel="noopener noreferrer"&gt;allow_list.txt&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Access the Data
&lt;/h2&gt;

&lt;p&gt;Use it in your projects via:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;throwaway-email@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or use the raw domain list directly:&lt;br&gt;&lt;br&gt;
📁 &lt;a href="https://raw.githubusercontent.com/doodad-labs/disposable-email-domains/main/data/domains.txt" rel="noopener noreferrer"&gt;domains.txt&lt;/a&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Help Improve the List
&lt;/h2&gt;

&lt;p&gt;We welcome contributions to:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add new disposable email sources
&lt;/li&gt;
&lt;li&gt;Improve scrapers for temporary email services
&lt;/li&gt;
&lt;li&gt;Report false positives
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/doodad-labs/disposable-email-domains" rel="noopener noreferrer"&gt;Contribute on GitHub →&lt;/a&gt;&lt;/strong&gt;  &lt;/p&gt;

</description>
      <category>programming</category>
      <category>database</category>
      <category>security</category>
      <category>automation</category>
    </item>
    <item>
      <title>A Faster Approach to Email Validation: Why We Ditched Regex</title>
      <dc:creator>Reece Harris</dc:creator>
      <pubDate>Thu, 10 Jul 2025 14:39:39 +0000</pubDate>
      <link>https://dev.to/notreeceharris/a-faster-approach-to-email-validation-why-we-ditched-regex-14al</link>
      <guid>https://dev.to/notreeceharris/a-faster-approach-to-email-validation-why-we-ditched-regex-14al</guid>
      <description>&lt;p&gt;Email validation is a common requirement for nearly every web application, yet most implementations rely on regular expressions—an approach that's often slower and less accurate than it needs to be. Today, I want to share an alternative method that not only validates emails more efficiently but also checks against disposable domains—all while being faster than traditional regex-based solutions.  &lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with Regex for Email Validation
&lt;/h2&gt;

&lt;p&gt;Most email validation libraries use regular expressions to check if an email address conforms to RFC standards. While regex is powerful, it has some drawbacks:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance overhead&lt;/strong&gt;: Complex regex patterns can be slow, especially when validating millions of emails.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incomplete RFC compliance&lt;/strong&gt;: Many regex patterns either over-restrict (blocking valid emails) or under-restrict (allowing invalid formats).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lack of additional checks&lt;/strong&gt;: Regex alone can't verify whether an email domain is disposable or temporary.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Different Approach: Bitmask Logic and Set Lookups
&lt;/h2&gt;

&lt;p&gt;Instead of relying on regex, we implemented a validation method that:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Uses bitmask comparisons&lt;/strong&gt; for character validation (faster than regex matching).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Checks RFC compliance&lt;/strong&gt; by directly validating email structure (length, &lt;code&gt;@&lt;/code&gt; position, dot rules).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Includes disposable domain detection&lt;/strong&gt; with a preloaded database of 180,000+ known temporary email providers.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optionally verifies TLDs&lt;/strong&gt; against ICANN's official list.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result? &lt;strong&gt;A 13.7% performance improvement&lt;/strong&gt; over the fastest regex-based validator we tested, while also providing more thorough validation.  &lt;/p&gt;

&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;p&gt;The validation process follows these steps:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Basic structural checks&lt;/strong&gt; (length, &lt;code&gt;@&lt;/code&gt; position, local/domain part sizes).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local part validation&lt;/strong&gt; (alphanumeric + special characters, no invalid dot placements).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain validation&lt;/strong&gt; (correct label formatting, hyphen rules, TLD length).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disposable domain check&lt;/strong&gt; (instant lookup against a Set of known temporary email domains).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TLD verification&lt;/strong&gt; (optional check against ICANN-recognized top-level domains).
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Because we avoid regex, the validation logic is both &lt;strong&gt;faster and more transparent&lt;/strong&gt;—you can see exactly which rules are being enforced.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Performance
&lt;/h2&gt;

&lt;p&gt;In benchmarks against popular email validation libraries, this approach consistently outperformed regex-based solutions:  &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Library&lt;/th&gt;
&lt;th&gt;Avg. Time per Validation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;throwaway (this method)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;155.73 ns&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;email-validator&lt;/td&gt;
&lt;td&gt;180.47 ns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a class="mentioned-user" href="https://dev.to/shelf"&gt;@shelf&lt;/a&gt;/is-valid-email&lt;/td&gt;
&lt;td&gt;404.70 ns&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The difference becomes significant when validating large datasets—for example, processing 1 million emails would take:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;~156ms with this method
&lt;/li&gt;
&lt;li&gt;~180ms with &lt;code&gt;email-validator&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;~405ms with &lt;code&gt;@shelf/is-valid-email&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Disposable Email Detection
&lt;/h2&gt;

&lt;p&gt;Beyond basic validation, this method includes &lt;strong&gt;real-time disposable domain checking&lt;/strong&gt;. The database is automatically updated weekly by scraping known sources of temporary email providers, ensuring new domains are detected quickly.  &lt;/p&gt;

&lt;p&gt;If a domain is incorrectly flagged (e.g., a legitimate service is mistakenly marked as disposable), users can contribute fixes by submitting pull requests to an allow list.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Open and Community-Driven
&lt;/h2&gt;

&lt;p&gt;The project is open-source (GPL-3.0 licensed) and encourages community contributions:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Adding new disposable domains&lt;/strong&gt; (via automated scrapers or manual submissions).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improving validation logic&lt;/strong&gt; (e.g., better handling of quoted strings or internationalized emails).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fixing false positives&lt;/strong&gt; in the disposable domain list.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;p&gt;If you're looking for a faster, more comprehensive email validation solution, you can test it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;throwaway-email@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or use the raw domain list directly from the &lt;a href="https://github.com/doodad-labs/throwaway-email-checker" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Example Usage
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;validEmail&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;throwaway-email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Basic validation (TLD + disposable check)&lt;/span&gt;
&lt;span class="nf"&gt;validEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user@example.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="nf"&gt;validEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user@tempmail.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// false (disposable)&lt;/span&gt;
&lt;span class="nf"&gt;validEmail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user@invalid.tld&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// false (unknown TLD)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Regex isn't always the best tool for the job—sometimes, a more direct approach can yield better performance and accuracy. If you're working on a project that requires robust email validation, consider trying this method and contributing to its improvement.  &lt;/p&gt;

&lt;p&gt;What do you think? Have you encountered performance issues with regex-based validation before? Let us know your experiences!  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://github.com/doodad-labs/throwaway-email-checker" rel="noopener noreferrer"&gt;View the project on GitHub&lt;/a&gt; | &lt;a href="https://github.com/doodad-labs/throwaway-email-checker/blob/main/data/allow_list.txt" rel="noopener noreferrer"&gt;Contribute to the domain list&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>webscraping</category>
    </item>
    <item>
      <title>Why on-boarding processes can be a snooze fest (and how to fix It with svelte)</title>
      <dc:creator>Reece Harris</dc:creator>
      <pubDate>Tue, 25 Mar 2025 09:56:50 +0000</pubDate>
      <link>https://dev.to/notreeceharris/why-on-boarding-processes-can-be-a-snooze-fest-and-how-to-fix-it-with-svelte-3p7</link>
      <guid>https://dev.to/notreeceharris/why-on-boarding-processes-can-be-a-snooze-fest-and-how-to-fix-it-with-svelte-3p7</guid>
      <description>&lt;p&gt;Let’s face it: onboarding processes in web applications can be a drag. You’ve got forms to fill out, instructions to read, maybe a progress bar that crawls while the user waits for some backend magic to happen. As developers, we pour our hearts into building sleek, functional apps, but when it comes to onboarding, we often leave users staring at a screen, twiddling their thumbs. Why? Because waiting sucks, and static loading screens or walls of text don’t exactly scream “fun.”&lt;/p&gt;

&lt;p&gt;The truth is, onboarding doesn’t have to be boring. It’s a chance to hook users, show off your app’s personality, and keep them engaged while they get set up. But too often, we fall into the trap of “good enough” design—spinners, generic messages, or a multi-step form that feels like a tax return. Users aren’t here for that. They want to dive in, not wait around.&lt;/p&gt;

&lt;h2&gt;
  
  
  Waiting Kills the Vibe
&lt;/h2&gt;

&lt;p&gt;Picture this: a new user signs up for your app. They’re excited! They click “Get Started,” and… they’re hit with a loading screen. Or maybe a “Verify Your Email” prompt that leaves them hanging. Those little moments of downtime might only last a few seconds, but to the user, it feels like forever. Studies show attention spans are shrinking—people bounce if they’re not entertained or engaged fast. In web dev, we’re so focused on functionality that we forget: boring onboarding can lose users before they even begin.&lt;/p&gt;

&lt;p&gt;So, how do we fix it? Sure, we could optimize load times or streamline steps (and we should), but there’s another angle: make the wait fun. Enter a wild idea—games. Yep, games! Why not give users something to do while they’re stuck in that onboarding limbo? It’s a small twist that can turn a mundane process into a memorable one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet "svelte-games"
&lt;/h2&gt;

&lt;p&gt;I’ve been tinkering with this problem myself, and I’m excited to share my latest open-source project: &lt;a href="https://github.com/doodad-labs/svelte-games" rel="noopener noreferrer"&gt;&lt;code&gt;svelte-games&lt;/code&gt;&lt;/a&gt;. It’s a lightweight package designed for Svelte developers who want to sprinkle some joy into their apps. The idea is simple: drop in a game component wherever you’d normally have dead space—like during onboarding—and let users play while they wait.&lt;/p&gt;

&lt;p&gt;Here’s how easy it is to use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight svelte"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"ts"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Snake&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;svelte-games/Snake.svelte&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;Snake&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Boom! With one line, you’ve got a fully functional Snake game right in your Svelte app. No fuss, no complex setup—just a ready-to-go component that’s lightweight and customizable. Imagine sticking this in your onboarding flow: instead of a “Please wait…” message, users get to chase a high score while their account syncs. It’s a tiny addition that screams, “Hey, we’re different—and we care about your experience.”&lt;/p&gt;

&lt;p&gt;🎮 Demo some of the games &lt;a href="https://doodad-labs.github.io/svelte-games/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Games? Why Svelte?
&lt;/h2&gt;

&lt;p&gt;Games are universal. They’re quick to grasp, require no explanation, and instantly pull people in. Pair that with Svelte’s simplicity and performance (no heavy runtime overhead, just pure compiled JS), and you’ve got a match made in heaven. &lt;code&gt;svelte-games&lt;/code&gt; isn’t about turning your app into a gaming platform—it’s about adding a spark where users might otherwise tune out.&lt;/p&gt;

&lt;p&gt;Right now, the package includes classics like Snake, but I’m dreaming bigger: Tetris, Pong, maybe even a little trivia component. It’s open-source, so you can fork it, tweak it, or add your own games to the mix. The goal? Make it carefree for Svelte devs to experiment with fun.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/doodad-labs/svelte-games" rel="noopener noreferrer"&gt;https://github.com/doodad-labs/svelte-games&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/svelte-games" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/svelte-games&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://doodad-labs.github.io/svelte-games/" rel="noopener noreferrer"&gt;https://doodad-labs.github.io/svelte-games/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>svelte</category>
      <category>saas</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
