<?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: Tanisha fonseca</title>
    <description>The latest articles on DEV Community by Tanisha fonseca (@tanisha_fonseca).</description>
    <link>https://dev.to/tanisha_fonseca</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%2F3822717%2Fdd1c1711-c737-42e7-a9de-c42ad309f783.png</url>
      <title>DEV Community: Tanisha fonseca</title>
      <link>https://dev.to/tanisha_fonseca</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tanisha_fonseca"/>
    <language>en</language>
    <item>
      <title>Connecting Phantom to a Web App Changed How I Think About "Login"</title>
      <dc:creator>Tanisha fonseca</dc:creator>
      <pubDate>Tue, 28 Apr 2026 01:05:30 +0000</pubDate>
      <link>https://dev.to/tanisha_fonseca/connecting-phantom-to-a-web-app-changed-how-i-think-about-login-3p0h</link>
      <guid>https://dev.to/tanisha_fonseca/connecting-phantom-to-a-web-app-changed-how-i-think-about-login-3p0h</guid>
      <description>&lt;p&gt;On Day 4 of #100DaysOfSolana, I built a small Vite app that connects to a browser wallet. The feature itself is maybe 30 lines of code. The mindset shift it triggered is harder to measure.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;A minimal web app that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detects installed wallets using &lt;code&gt;getWallets()&lt;/code&gt; from &lt;code&gt;@wallet-standard/app&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Filters for Solana-compatible wallets by checking &lt;code&gt;wallet.chains&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Prompts Phantom to connect with one button click&lt;/li&gt;
&lt;li&gt;Displays the connected address and devnet balance
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getWallets&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@wallet-standard/app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getWallets&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;solanaWallets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wallet&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chains&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chain&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;chain&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;solana:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No API keys. No backend. No session management. The wallet handles all of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Surprised Me
&lt;/h2&gt;

&lt;p&gt;In Web2, "Sign in with Google" feels like a convenience feature, you're still handing your identity to Google, who hands a token to the app. The app trusts Google. You trust Google. Everything flows through Google.&lt;/p&gt;

&lt;p&gt;With Phantom, the app never sees your private key. It never talks to a central auth server. It sends a connection request to &lt;em&gt;your&lt;/em&gt; wallet extension, which prompts &lt;em&gt;you&lt;/em&gt; to approve it. If you approve, the app gets your public address, nothing more. Every subsequent action that needs your signature goes through the same approval flow.&lt;/p&gt;

&lt;p&gt;The trust model is completely inverted. The app doesn't authenticate you. &lt;strong&gt;You authenticate yourself&lt;/strong&gt;, and the app just observes the result.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Sign in with Phantom" isn't "Sign in with Google for Web3." It's closer to showing your passport, the app sees proof of who you are, but it never holds the passport.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;Week 2 is about writing transactions and moving tokens on-chain. I'm looking forward to seeing how that signing flow works end-to-end from the user clicking a button, to Phantom prompting for approval, to the transaction landing on devnet.&lt;/p&gt;

&lt;p&gt;If you're following along, drop your wallet setup experience below. Did anything about the browser wallet model surprise you?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Part of my #100DaysOfSolana journey.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>web3</category>
      <category>beginners</category>
    </item>
    <item>
      <title>You Already Understand Solana Identity: You Just Don't Know It Yet</title>
      <dc:creator>Tanisha fonseca</dc:creator>
      <pubDate>Tue, 28 Apr 2026 00:59:53 +0000</pubDate>
      <link>https://dev.to/tanisha_fonseca/you-already-understand-solana-identity-you-just-dont-know-it-yet-5563</link>
      <guid>https://dev.to/tanisha_fonseca/you-already-understand-solana-identity-you-just-dont-know-it-yet-5563</guid>
      <description>&lt;p&gt;&lt;strong&gt;A Web2 developer's guide to on-chain identity, from SSH keys to self-sovereignty&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;Let me tell you about the moment it clicked for me.&lt;/p&gt;

&lt;p&gt;I was on day three of learning Solana, staring at a terminal that had just printed a 44-character string: my new wallet address. I ran one function, and suddenly I &lt;em&gt;existed&lt;/em&gt; on a global, permissionless network.&lt;/p&gt;

&lt;p&gt;That felt like magic. But it's not magic. It's math you've already worked with before.&lt;/p&gt;




&lt;h2&gt;
  
  
  The SSH Key You've Been Using Without Realizing It
&lt;/h2&gt;

&lt;p&gt;If you've ever set up a GitHub account with SSH access, you've done this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"your_email@example.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That command creates two files: a private key (which you protect carefully) and a public key (which you paste into GitHub). GitHub stores your public key. When you &lt;code&gt;git push&lt;/code&gt;, your computer signs the request with your private key, GitHub verifies it with the public key you gave them, and you're authenticated no password needed.&lt;/p&gt;

&lt;p&gt;Solana identity works on the &lt;em&gt;exact same algorithm&lt;/em&gt;. Ed25519. Two keys, one pair.&lt;/p&gt;

&lt;p&gt;The difference? On Solana, there's no GitHub in the middle. You don't give your public key to anyone. You broadcast it to a network of thousands of validators, and your identity is established by mathematical proof alone. The "server" that recognizes your key is the entire Solana blockchain.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;generateKeyPairSigner&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@solana/kit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;wallet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;generateKeyPairSigner&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Your address &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One function call. No server. No company. You just created a valid identity on a global financial network, entirely offline if you wanted to.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your Username Lives in Someone Else's Database
&lt;/h2&gt;

&lt;p&gt;Here's a thought experiment: open Twitter, GitHub, and your bank in three browser tabs.&lt;/p&gt;

&lt;p&gt;In each one, there's a record in a database somewhere that says "this email + this password = this user." That's your identity. And here's the uncomfortable truth: it's not really &lt;em&gt;yours&lt;/em&gt;. It's theirs. They let you use it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Twitter can ban your account. Your followers, your handle, your history — gone.&lt;/li&gt;
&lt;li&gt;GitHub can suspend your repositories.&lt;/li&gt;
&lt;li&gt;Your bank can freeze your funds pending review.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't hypothetical edge cases. They happen regularly. The companies aren't necessarily being malicious they're following their own rules, regulations, or algorithms. But the point stands: you have access &lt;em&gt;because they allow it&lt;/em&gt;, not because you cryptographically own anything.&lt;/p&gt;

&lt;p&gt;A Solana address is different at a fundamental level. It looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;14grJpemFaf88c8tiVb77W7TYg2W3ir6pfkKz3YjhhZ5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That 44-character string (a 32-byte Ed25519 public key encoded in Base58) &lt;em&gt;is&lt;/em&gt; your identity. Not a pointer to a record in a database ,the identity itself. The Base58 encoding is a thoughtful detail: it deliberately excludes characters like &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;O&lt;/code&gt;, &lt;code&gt;I&lt;/code&gt;, and &lt;code&gt;l&lt;/code&gt; that look similar in most fonts, because humans are the ones copying and pasting these addresses.&lt;/p&gt;

&lt;p&gt;And ownership of everything associated with that address is proven by one thing only: possession of the corresponding private key. There is no admin panel that can override this. There is no customer support workflow. No one can reset your account because there is no account, there's a cryptographic relationship between a public and private key.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Unlocks
&lt;/h2&gt;

&lt;p&gt;At this point, a reasonable Web2 developer might say: "Okay, so it's a decentralized username. Cool, I guess."&lt;/p&gt;

&lt;p&gt;But on-chain identity isn't a replacement for usernames. It's a &lt;em&gt;foundation&lt;/em&gt; that enables things that simply aren't possible in Web2 without enormous coordination overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Token ownership&lt;/strong&gt; is the obvious one. When you hold SOL or a token in your wallet, you hold it directly. There's no custodian, no brokerage, no settlement delay. The network's state says your address owns those tokens, and only your private key can authorize moving them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Program interactions&lt;/strong&gt; work the same way. Every time you interact with a Solana program (think: a smart contract, a DeFi protocol, an NFT marketplace), you sign the transaction with your private key. The program knows exactly who called it. There are no sessions, no cookies, no JWT tokens to steal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Governance&lt;/strong&gt; becomes meaningful. When a DAO votes on a proposal, each vote is a signed transaction. You can verify on-chain that exactly the right addresses cast exactly the right votes, and that no one voted twice. The auditability is free and automatic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reputation is portable&lt;/strong&gt;. In Web2, your reputation on GitHub doesn't follow you to LinkedIn, which doesn't follow you to Twitter. On Solana, your address accumulates history everywhere, every protocol you've used, every NFT you've minted, every DAO you've participated in — and it's all publicly readable by anyone building on the network.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Tradeoff Worth Naming
&lt;/h2&gt;

&lt;p&gt;None of this is free. The tradeoff for removing the middleman is that &lt;em&gt;you&lt;/em&gt; are now responsible for your private key.&lt;/p&gt;

&lt;p&gt;In Web2, "I forgot my password" is a solvable problem. There's a reset flow, a support ticket, a backup email. On Solana, if you lose your private key and your seed phrase, your funds are gone. The network isn't being cruel it genuinely cannot help you, because there's no back door to an account that doesn't exist as a record in anyone's database.&lt;/p&gt;

&lt;p&gt;This is why wallet UX matters so much. Browser extensions like Phantom and Solflare exist to manage this complexity, they store your private key encrypted behind a password, derive it from a human-readable seed phrase, and let you sign transactions without ever exposing the raw key to the applications you use. Hardware wallets go further, keeping the key inside a physical device that never lets it leave.&lt;/p&gt;

&lt;p&gt;The underlying math is the same everywhere. The security model just shifts where you place your trust: in a company's servers, or in your own custody of a string of words.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Week In
&lt;/h2&gt;

&lt;p&gt;Seven days ago, I couldn't generate a keypair without following a tutorial. Now I understand that a Solana address isn't some exotic blockchain thing it's an Ed25519 public key, the same algorithm your SSH config uses, deployed on a global network instead of a single server.&lt;/p&gt;

&lt;p&gt;The cryptography didn't change. What changed is the architecture around it: no central authority, no database, no company that can revoke your access. Just math, validators, and the private key only you hold.&lt;/p&gt;

&lt;p&gt;That, I think, is what "decentralized identity" actually means not a buzzword, but a very specific shift in &lt;em&gt;who controls the proof of ownership&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;And it started with one function call that printed 44 characters to my terminal.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This post is part of my #100DaysOfSolana series. Follow along as I go from zero to building on Solana, one day at a time.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;100daysofsolana&lt;/code&gt; &lt;code&gt;solana&lt;/code&gt; &lt;code&gt;web3&lt;/code&gt; &lt;code&gt;blockchain&lt;/code&gt; &lt;code&gt;beginners&lt;/code&gt;*&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>web3</category>
      <category>blockchain</category>
    </item>
  </channel>
</rss>
