<?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: CryptoCardInsider Rosa</title>
    <description>The latest articles on DEV Community by CryptoCardInsider Rosa (@cryptocardinsider).</description>
    <link>https://dev.to/cryptocardinsider</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%2F4207527%2Fa66cb6d9-2dfb-405e-85eb-019c8567a997.png</url>
      <title>DEV Community: CryptoCardInsider Rosa</title>
      <link>https://dev.to/cryptocardinsider</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cryptocardinsider"/>
    <language>en</language>
    <item>
      <title>A card issuer publishes four country lists, and they don't match. So I put them in a CSV.</title>
      <dc:creator>CryptoCardInsider Rosa</dc:creator>
      <pubDate>Wed, 04 Nov 2026 06:54:14 +0000</pubDate>
      <link>https://dev.to/cryptocardinsider/a-card-issuer-publishes-four-country-lists-and-they-dont-match-so-i-put-them-in-a-csv-4kdi</link>
      <guid>https://dev.to/cryptocardinsider/a-card-issuer-publishes-four-country-lists-and-they-dont-match-so-i-put-them-in-a-csv-4kdi</guid>
      <description>&lt;p&gt;If you ask "does this crypto card work in my country?", the answer depends on which page you read.&lt;/p&gt;

&lt;p&gt;RedotPay's help center has four separate restriction lists: account verification, card issuance, card delivery and app access. We read all four on 22 October 2026 and merged them into one table, with one column per list. The result is a small CC BY 4.0 dataset on &lt;a href="https://github.com/NoviceComputer/crypto-card-fees-dataset" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, with a &lt;a href="https://doi.org/10.5281/zenodo.23722747" rel="noopener noreferrer"&gt;Zenodo DOI&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the merged table shows
&lt;/h2&gt;

&lt;p&gt;51 countries and regions appear on at least one list. The lists have different lengths:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;List&lt;/th&gt;
&lt;th&gt;Places named&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Account verification&lt;/td&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Card issuance&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Card delivery&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;App access&lt;/td&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;35 places are on all four. The other 16 are the interesting ones, because reading a single list gives you the wrong picture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Singapore is only on the card issuance list.&lt;/li&gt;
&lt;li&gt;Tanzania is only on the app access list.&lt;/li&gt;
&lt;li&gt;Egypt, Tunisia and Palestine are only on the delivery list.&lt;/li&gt;
&lt;li&gt;India is on the issuance and delivery lists, but not on the other two.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The United Kingdom isn't named on any of them, and neither is Nigeria. That doesn't prove a card works there, and the README says so: a country missing from all four lists isn't confirmed as supported. Only the app can confirm that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproducing the counts
&lt;/h2&gt;

&lt;p&gt;The CSV is plain enough that a few lines of standard-library Python get you the same numbers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;collections&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Counter&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data/redotpay-country-lists-20261022.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DictReader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="n"&gt;lists&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;listed_&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="n"&gt;on_how_many&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;on_how_many&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# 4 lists: 35, 3: 6, 2: 5, 1: 5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The source table you can't scrape
&lt;/h2&gt;

&lt;p&gt;The same repo has a second file: issuance, FX and ATM fees for 11 crypto debit cards. The fiddly part was RedotPay's fee table, which is an image on its help page, so a text extraction comes back empty. It had to be read from the image itself. Two of its articles also disagree: the fee table lists a 1,000,000 USD daily spending limit, and an older article says there is none. When sources conflict like that, we note it instead of quietly picking one.&lt;/p&gt;

&lt;p&gt;Each fee record has a &lt;code&gt;lastVerified&lt;/code&gt; date and an &lt;code&gt;evidenceLevel&lt;/code&gt;, so you can see where a value came from and how old it is. These are snapshots and they go stale. The most recent check in the current file is 27 October 2026, and some records are older.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you use it
&lt;/h2&gt;

&lt;p&gt;Keep the snapshot date with any number you reuse, and check the issuer's app before relying on it. Corrections are welcome as GitHub issues, with a link to the source.&lt;/p&gt;

&lt;p&gt;If you want to look something up without opening a CSV, there's a &lt;a href="https://cryptocardinsider.com/content/guide-redotpay-available-countries-20261022" rel="noopener noreferrer"&gt;country checker built on the same data&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Disclosure: I run CryptoCard Insider, a crypto card comparison site, and we have a partner arrangement with RedotPay, so I may earn a commission if someone signs up through our links. This post was written by an AI agent working for me, and I approved it before publishing. The counts were recomputed from the CSV.&lt;/p&gt;

</description>
      <category>opendata</category>
      <category>datasets</category>
      <category>csv</category>
      <category>fintech</category>
    </item>
    <item>
      <title>I built a 3D gallery that compares 11 crypto debit cards</title>
      <dc:creator>CryptoCardInsider Rosa</dc:creator>
      <pubDate>Mon, 26 Oct 2026 01:58:37 +0000</pubDate>
      <link>https://dev.to/cryptocardinsider/six-things-i-fixed-while-building-a-3d-card-gallery-with-react-three-fiber-4jnd</link>
      <guid>https://dev.to/cryptocardinsider/six-things-i-fixed-while-building-a-3d-card-gallery-with-react-three-fiber-4jnd</guid>
      <description>&lt;p&gt;I run a small comparison site for crypto debit cards, and instead of another fee table I wanted something you could actually play with. The result is a ring of 11 cards in 3D that you can spin, tap and flip: &lt;a href="https://cryptocardinsider.com/?view=gallery" rel="noopener noreferrer"&gt;cryptocardinsider.com/?view=gallery&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can do with it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Spin the ring by dragging, on desktop or on a phone.&lt;/li&gt;
&lt;li&gt;Tap a card to bring it forward and flip it.&lt;/li&gt;
&lt;li&gt;See each card's issuance fee, FX fee, ATM fees and where it's available, next to a score.&lt;/li&gt;
&lt;li&gt;Compare cards like RedotPay, KAST, Crypto.com, OKX, Bitget, Nexo and MetaMask side by side without opening eleven tabs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cards use real payment-card proportions and the issuers' card designs, so they look like the plastic in your wallet rather than generic rectangles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why 3D for a comparison site
&lt;/h2&gt;

&lt;p&gt;Fee tables are useful but nobody remembers them. A physical-looking card is easier to recognise, and spinning through them turned out to be a faster way to narrow down which two or three cards are worth a closer look. The detailed numbers are still there once you tap a card.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was harder than expected
&lt;/h2&gt;

&lt;p&gt;Getting a ring of cards on screen was quick. Making them look like real cards, and keeping the whole thing smooth on a mid-range Android phone, took most of the work. Telling a tap apart from a drag on a touch screen also needed more tuning than I expected.&lt;/p&gt;

&lt;p&gt;The gallery's code isn't open source; it's part of the site.&lt;/p&gt;

&lt;h2&gt;
  
  
  The data is open
&lt;/h2&gt;

&lt;p&gt;The fee and availability data behind the gallery is published separately under CC BY 4.0, with a DOI: &lt;a href="https://doi.org/10.5281/zenodo.23722747" rel="noopener noreferrer"&gt;10.5281/zenodo.23722747&lt;/a&gt;. It's also on &lt;a href="https://github.com/NoviceComputer/crypto-card-fees-dataset" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, &lt;a href="https://www.kaggle.com/datasets/bradzhongzhengyang/crypto-debit-card-fees-and-redotpay-country-lists" rel="noopener noreferrer"&gt;Kaggle&lt;/a&gt; and &lt;a href="https://huggingface.co/datasets/CryptoCardInsider/crypto-card-fees-dataset" rel="noopener noreferrer"&gt;Hugging Face&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I'm a RedotPay partner and may earn a commission. If you order a RedotPay card, the code RDVIR took the virtual card from $10 to $8 and RDPHY took the physical card from $100 to $80 when I re-checked both in the app on October 26, 2026. The partner sign-up link is &lt;a href="https://cryptocardinsider.com/go/devto" rel="noopener noreferrer"&gt;cryptocardinsider.com/go/devto&lt;/a&gt; (invite code xn03i), and checkout screenshots are on &lt;a href="https://cryptocardinsider.com/redotpay-promo-code" rel="noopener noreferrer"&gt;the promo code page&lt;/a&gt;. None of this is financial advice.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you try the gallery, I'd like to hear what you'd compare next.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>fintech</category>
      <category>crypto</category>
    </item>
  </channel>
</rss>
