<?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: Samuel Emmanuel</title>
    <description>The latest articles on DEV Community by Samuel Emmanuel (@sammynug).</description>
    <link>https://dev.to/sammynug</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%2F3935223%2F63181f05-1509-4be1-a5f2-0cceca92567e.jpg</url>
      <title>DEV Community: Samuel Emmanuel</title>
      <link>https://dev.to/sammynug</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sammynug"/>
    <language>en</language>
    <item>
      <title>Thanks for reading! I'd love your feedback. Which feature would you add next to PassionSpace, or what would you improve about the current design?</title>
      <dc:creator>Samuel Emmanuel</dc:creator>
      <pubDate>Sat, 11 Jul 2026 02:38:53 +0000</pubDate>
      <link>https://dev.to/sammynug/thanks-for-reading-id-love-your-feedback-which-feature-would-you-add-next-to-passionspace-or-2l3l</link>
      <guid>https://dev.to/sammynug/thanks-for-reading-id-love-your-feedback-which-feature-would-you-add-next-to-passionspace-or-2l3l</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/sammynug/how-i-built-passionspace-with-react-firebase-google-ai-studio-26jo" class="crayons-story__hidden-navigation-link"&gt;🚀 How I Built PassionSpace with React, Firebase &amp;amp; Google AI Studio&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/sammynug" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3935223%2F63181f05-1509-4be1-a5f2-0cceca92567e.jpg" alt="sammynug profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/sammynug" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Samuel Emmanuel
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Samuel Emmanuel
                
              
              &lt;div id="story-author-preview-content-4116963" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/sammynug" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3935223%2F63181f05-1509-4be1-a5f2-0cceca92567e.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Samuel Emmanuel&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/sammynug/how-i-built-passionspace-with-react-firebase-google-ai-studio-26jo" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 11&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/sammynug/how-i-built-passionspace-with-react-firebase-google-ai-studio-26jo" id="article-link-4116963"&gt;
          🚀 How I Built PassionSpace with React, Firebase &amp;amp; Google AI Studio
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/weekendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;weekendchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/sammynug/how-i-built-passionspace-with-react-firebase-google-ai-studio-26jo" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;5&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/sammynug/how-i-built-passionspace-with-react-firebase-google-ai-studio-26jo#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>🚀 How I Built PassionSpace with React, Firebase &amp; Google AI Studio</title>
      <dc:creator>Samuel Emmanuel</dc:creator>
      <pubDate>Sat, 11 Jul 2026 02:32:55 +0000</pubDate>
      <link>https://dev.to/sammynug/how-i-built-passionspace-with-react-firebase-google-ai-studio-26jo</link>
      <guid>https://dev.to/sammynug/how-i-built-passionspace-with-react-firebase-google-ai-studio-26jo</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-07-09"&gt;Weekend Challenge: Passion Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This weekend's challenge was to build something inspired by passion. Instead of creating another habit tracker, I wanted to build a dashboard that helps people measure the time they invest in the things they genuinely love&lt;/p&gt;

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

&lt;p&gt;Title: 🚀 &lt;strong&gt;PassionSpace&lt;/strong&gt;&lt;br&gt;
PassionSpace is an offline-first, highly polished, and motivating personal tracking dashboard designed to help people organize, track, and measure their personal hobbies, side projects, sports, skills, and creative interests.&lt;/p&gt;

&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%2Fge3aqh1l03hln9vphmq6.gif" 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%2Fge3aqh1l03hln9vphmq6.gif" alt="PassionSpace Demo" width="760" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 What It Does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;em&gt;Passion &amp;amp; Skill Portfolio:&lt;/em&gt; Allows users to define custom "passions" with custom emojis, category groupings, and weekly hour targets.&lt;/li&gt;
&lt;li&gt;  &lt;em&gt;Consistency Tracking:&lt;/em&gt; Built-in visual metrics including a GitHub-style 90-Day Consistency Heatmap, streak tracking, and active focus projections.&lt;/li&gt;
&lt;li&gt;  &lt;em&gt;Interactive Sessions &amp;amp; Goals:&lt;/em&gt; Users log active focus sessions with quality-ratings and reflective notes, aligning them directly with incremental milestones and target objectives.&lt;/li&gt;
&lt;li&gt;  &lt;em&gt;Reflection Journals:&lt;/em&gt; A clean space to write learning summaries, blockages, and milestones.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Gamified Badge Shelf:&lt;/em&gt; An interactive shelf displaying achievements (e.g., Polymath, Deep Work Specialist, Streak Master) alongside locked milestones to encourage persistent logging.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Stats Sharing:&lt;/em&gt; A dynamic profile sharing card that renders a clean copyable performance report to share with community groups.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&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%2Fubncsmajkt16veo5u5qg.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%2Fubncsmajkt16veo5u5qg.png" alt="Badges" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 The Intended Goal
&lt;/h2&gt;

&lt;p&gt;The goal of PassionSpace was to transition self-improvement and hobby tracking away from dry, clinical spreadsheets into a visually inspiring, central workspace.&lt;/p&gt;

&lt;p&gt;By pairing deliberate typography, smooth transition animations, and a cohesive, modern dark-and-light-mode aesthetic, the application lowers the friction of self-reflection. It provides individuals with immediate, beautiful feedback about where they spend their life hours—celebrating consistent micro-habits rather than just final outcomes &lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://passionspace-1060401326994.europe-west2.run.app" rel="noopener noreferrer"&gt;https://passionspace-1060401326994.europe-west2.run.app&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/sammy-nug/PassionSpace.git" rel="noopener noreferrer"&gt;https://github.com/sammy-nug/PassionSpace.git&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🛠️ Technical Approach &amp;amp; Walkthrough&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For PassionSpace, I wanted to build a modern, responsive application that feels fast, reliable, and enjoyable to use. Here's a look at the architecture, technical decisions, and development workflow behind the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗️ Core Architecture
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Frontend
&lt;/h2&gt;

&lt;p&gt;The frontend is built with &lt;strong&gt;React&lt;/strong&gt;, &lt;strong&gt;TypeScript&lt;/strong&gt;, and &lt;strong&gt;Vite&lt;/strong&gt;, providing a fast development experience and excellent runtime performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Styling
&lt;/h2&gt;

&lt;p&gt;The UI is designed entirely with &lt;strong&gt;Tailwind CSS&lt;/strong&gt;, focusing on a clean, distraction-free experience featuring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modern card layouts&lt;/li&gt;
&lt;li&gt;Rounded container panels&lt;/li&gt;
&lt;li&gt;Intentional negative space&lt;/li&gt;
&lt;li&gt;Responsive design&lt;/li&gt;
&lt;li&gt;Soft light and dark themes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was to make the interface feel calm and inviting rather than overwhelming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Micro-Animations
&lt;/h2&gt;

&lt;p&gt;To improve the overall user experience, the application uses &lt;strong&gt;Motion&lt;/strong&gt; for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smooth page transitions&lt;/li&gt;
&lt;li&gt;Hover interactions&lt;/li&gt;
&lt;li&gt;Animated tab switching&lt;/li&gt;
&lt;li&gt;Lightweight feedback during user interactions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These subtle animations make tracking progress feel rewarding instead of tedious.&lt;/p&gt;

&lt;h2&gt;
  
  
  State Management &amp;amp; Synchronization
&lt;/h2&gt;

&lt;p&gt;Global application state is managed through a dedicated &lt;strong&gt;React Context Provider&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This architecture allows the application to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Update the UI instantly&lt;/li&gt;
&lt;li&gt;Maintain in-memory state efficiently&lt;/li&gt;
&lt;li&gt;Queue synchronization tasks to &lt;strong&gt;Firebase Firestore&lt;/strong&gt; in the background&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is an interface that remains responsive while data persistence happens seamlessly.&lt;/p&gt;

&lt;h2&gt;
  
  
  💾 Persistence Layer
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Cloud Persistence
&lt;/h2&gt;

&lt;p&gt;User data is stored in &lt;strong&gt;Firebase Firestore&lt;/strong&gt;, while &lt;strong&gt;Firebase Authentication&lt;/strong&gt; manages user identity.&lt;/p&gt;

&lt;p&gt;Custom Firestore security rules ensure that each user can only read and write documents associated with their authenticated account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local-First Experience
&lt;/h2&gt;

&lt;p&gt;To reduce perceived latency, the application implements &lt;strong&gt;optimistic UI updates&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Whenever users create or modify content, the interface updates immediately while synchronization occurs in the background. This keeps interactions feeling fast even on slower connections.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Interesting Technical Decisions
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Visual Intensity Markers Instead of Heavy Chart Libraries
&lt;/h2&gt;

&lt;p&gt;Rather than relying on large visualization libraries like D3 or canvas-based charting for simple progress tracking, PassionSpace uses custom-built heatmaps and progress gauges.&lt;/p&gt;

&lt;p&gt;This approach provides several benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smaller JavaScript bundle&lt;/li&gt;
&lt;li&gt;Faster loading times&lt;/li&gt;
&lt;li&gt;Cleaner interface&lt;/li&gt;
&lt;li&gt;Highly readable visual effort indicators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is an intuitive overview of consistency and focus without unnecessary complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Standardized Data Schema
&lt;/h2&gt;

&lt;p&gt;The application's core entities are linked hierarchically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Passions&lt;/li&gt;
&lt;li&gt;Sessions&lt;/li&gt;
&lt;li&gt;Goals&lt;/li&gt;
&lt;li&gt;Journal Entries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a user logs a focus session, the application automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identifies the associated passion&lt;/li&gt;
&lt;li&gt;Updates related goals&lt;/li&gt;
&lt;li&gt;Calculates accumulated hours&lt;/li&gt;
&lt;li&gt;Refreshes weekly progress&lt;/li&gt;
&lt;li&gt;Updates overall streak statistics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these operations occur within a single, consistent update pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic Share Cards
&lt;/h2&gt;

&lt;p&gt;Instead of generating a simple share link, PassionSpace creates a pre-formatted progress card containing live user statistics.&lt;/p&gt;

&lt;p&gt;Each card includes information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Current streak&lt;/li&gt;
&lt;li&gt;Total focus hours&lt;/li&gt;
&lt;li&gt;Completed goals&lt;/li&gt;
&lt;li&gt;Active passions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The output is formatted using a clean monospace layout, making it easy to paste directly into developer communities, chat applications, or social platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 Google AI Studio &amp;amp; AI Agent Integration
&lt;/h2&gt;

&lt;p&gt;One of the most interesting parts of this project was using &lt;strong&gt;Google AI Studio&lt;/strong&gt; I used Google AI Studio as a development assistant for refactoring, code navigation, and iterative improvements. The architecture, implementation decisions, and feature design remained my responsibility..&lt;/p&gt;

&lt;h2&gt;
  
  
  System Metadata &amp;amp; Permissions Management
&lt;/h2&gt;

&lt;p&gt;Application configuration is managed through &lt;strong&gt;metadata.json&lt;/strong&gt;, where the workspace defines capabilities and permissions.&lt;/p&gt;

&lt;p&gt;Using the AI Studio agent workspace, permissions were configured dynamically, including declaring:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;MAJOR_CAPABILITY_SERVER_SIDE_GEMINI_API&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This enables secure backend operations while maintaining appropriate permission boundaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Environment Security
&lt;/h2&gt;

&lt;p&gt;Sensitive configuration values are managed using environment variables.&lt;/p&gt;

&lt;p&gt;Database credentials and API keys are mapped through &lt;code&gt;.env.example&lt;/code&gt; and secure runtime configuration, ensuring that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No secrets are exposed to the client&lt;/li&gt;
&lt;li&gt;Firestore operations remain authenticated&lt;/li&gt;
&lt;li&gt;Server-side functionality stays protected&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps the application secure while maintaining a smooth development workflow.&lt;/p&gt;

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

&lt;p&gt;Building PassionSpace wasn't just about implementing features—it was about creating an experience that feels fast, polished, and motivating.&lt;/p&gt;

&lt;p&gt;From optimistic UI updates and lightweight visualizations to AI-assisted development workflows and secure cloud persistence, every technical decision was made with one goal in mind:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make progress tracking feel effortless, responsive, and enjoyable.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Google AI.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>programming</category>
    </item>
    <item>
      <title>Token-2022 Explained for Web2 Developers: Add Fees, Interest, and Transfer Rules Without Building Backend Middleware</title>
      <dc:creator>Samuel Emmanuel</dc:creator>
      <pubDate>Mon, 06 Jul 2026 14:44:10 +0000</pubDate>
      <link>https://dev.to/sammynug/token-2022-explained-for-web2-developers-add-fees-interest-and-transfer-rules-without-building-1og2</link>
      <guid>https://dev.to/sammynug/token-2022-explained-for-web2-developers-add-fees-interest-and-transfer-rules-without-building-1og2</guid>
      <description>&lt;p&gt;If you've built a payment system, loyalty program, or in-app currency in Web2, you've probably written backend logic to enforce transfer rules, calculate fees, or manage user balances. On Solana, many of those responsibilities can be configured directly into a token instead of being implemented as custom application code. That's what finally clicked for me while working through the &lt;strong&gt;100 Days of Solana&lt;/strong&gt; challenge.&lt;/p&gt;

&lt;p&gt;The original SPL Token Program provides the foundation for creating and managing fungible tokens on Solana. &lt;strong&gt;Token-2022&lt;/strong&gt; is an upgraded version that keeps that foundation while adding &lt;strong&gt;extensions&lt;/strong&gt;—optional features that a token mint can enable when it's created. Rather than creating a new token standard or forking the protocol every time you need new behavior, you simply opt into the extensions your application needs. A single mint can support features like transfer fees, interest-bearing balances, on-chain metadata, default frozen accounts, non-transferable (soulbound) tokens, permanent delegates, and more.&lt;/p&gt;

&lt;p&gt;The easiest way for me to understand Token-2022 was to think of its extensions as &lt;strong&gt;middleware for tokens&lt;/strong&gt;. In a typical Web2 application, middleware intercepts requests to add authentication, logging, rate limiting, or validation without changing every endpoint. Token-2022 works in a similar way. Instead of writing backend services to calculate platform fees or enforce transfer restrictions, those behaviors become part of the token itself. Every wallet and application interacting with that token follows the same rules because they're enforced at the protocol level, not by your API.&lt;/p&gt;

&lt;p&gt;One thing that surprised me most was how much application logic can move into the token configuration itself. Instead of treating tokens as simple balances, I now see them as programmable assets with built-in behaviors. For a real product, I'd reach for Token-2022 extensions to build loyalty programs with automatic platform fees, issue non-transferable certificates or membership badges, and create financial products that benefit from interest-bearing balances all without reinventing the same backend logic for every application.&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>tutorial</category>
      <category>web3</category>
      <category>backend</category>
    </item>
    <item>
      <title>My First Anchor Program: More Than Just a Counter</title>
      <dc:creator>Samuel Emmanuel</dc:creator>
      <pubDate>Thu, 02 Jul 2026 14:53:26 +0000</pubDate>
      <link>https://dev.to/sammynug/my-first-anchor-program-more-than-just-a-counter-1637</link>
      <guid>https://dev.to/sammynug/my-first-anchor-program-more-than-just-a-counter-1637</guid>
      <description>&lt;p&gt;Building a counter is one of those projects that looks trivial until you build it yourself.&lt;/p&gt;

&lt;p&gt;This week, I completed my first working Anchor program on Solana. At a glance, it only initializes a counter and increments a number, but under the hood it taught me some of the core ideas behind Solana development.&lt;/p&gt;

&lt;p&gt;Here's what my program does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Initializes a counter account for a user.&lt;/li&gt;
&lt;li&gt;Stores the owner's public key and the current count.&lt;/li&gt;
&lt;li&gt;Allows the owner to increment the counter.&lt;/li&gt;
&lt;li&gt;Prevents other wallets from modifying someone else's counter through account constraints.&lt;/li&gt;
&lt;li&gt;Includes tests for both successful transactions and expected failures.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most valuable lesson wasn't writing the &lt;code&gt;increment&lt;/code&gt; function it was understanding why the account constraints matter.&lt;/p&gt;

&lt;p&gt;Instead of trusting whatever account a client sends, Anchor lets you describe exactly what a valid account should look like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The account must belong to the correct program.&lt;/li&gt;
&lt;li&gt;It must be derived from the expected PDA seeds.&lt;/li&gt;
&lt;li&gt;It must have the correct authority.&lt;/li&gt;
&lt;li&gt;The signer must match the stored owner.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If any of those checks fail, the instruction never reaches my business logic.&lt;/p&gt;

&lt;p&gt;I also learned that good tests aren't just about proving the happy path works. They're about proving the program rejects invalid behavior. Writing tests that intentionally fail helped me understand how Anchor's validation protects my program before my Rust code even executes.&lt;/p&gt;

&lt;p&gt;Another takeaway was that debugging taught me as much as coding. I ran into program ID mismatches, malformed macros, Rust compiler errors, and tooling issues with Cargo, Node, and Yarn. Solving those problems forced me to understand how the entire development environment fits together instead of simply copying code until it compiled.&lt;/p&gt;

&lt;p&gt;This project may be "just a counter," but it introduced me to concepts I'll use in every future Solana program:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Program Derived Addresses (PDAs)&lt;/li&gt;
&lt;li&gt;Account validation with &lt;code&gt;#[derive(Accounts)]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Signers and authorities&lt;/li&gt;
&lt;li&gt;Safe arithmetic&lt;/li&gt;
&lt;li&gt;Integration testing&lt;/li&gt;
&lt;li&gt;Thinking about security before writing business logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The code runs, the tests pass, and I finally feel like I understand what Anchor is doing instead of treating it as magic.&lt;/p&gt;

&lt;p&gt;On to the next day of the challenge. 🚀&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>100daysofsolana</category>
      <category>tutorial</category>
      <category>web3</category>
    </item>
    <item>
      <title>🚀 Just published a new article from my #100DaysOfSolana journey!
If you're a Web2 developer curious about Solana, this post explains tokens, Token-2022, and NFTs using familiar backend concepts like databases, APIs, and reward systems.
Give it a read</title>
      <dc:creator>Samuel Emmanuel</dc:creator>
      <pubDate>Thu, 02 Jul 2026 10:34:03 +0000</pubDate>
      <link>https://dev.to/sammynug/just-published-a-new-article-from-my-100daysofsolana-journey-if-youre-a-web2-developer-38md</link>
      <guid>https://dev.to/sammynug/just-published-a-new-article-from-my-100daysofsolana-journey-if-youre-a-web2-developer-38md</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/sammynug/as-a-web2-developer-i-finally-understood-solana-tokens-theyre-just-better-database-records-1a8k" class="crayons-story__hidden-navigation-link"&gt;As a Web2 Developer, I Finally Understood Solana Tokens (They're Just Better Database Records)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/sammynug" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3935223%2F63181f05-1509-4be1-a5f2-0cceca92567e.jpg" alt="sammynug profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/sammynug" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Samuel Emmanuel
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Samuel Emmanuel
                
              
              &lt;div id="story-author-preview-content-4029993" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/sammynug" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3935223%2F63181f05-1509-4be1-a5f2-0cceca92567e.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Samuel Emmanuel&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/sammynug/as-a-web2-developer-i-finally-understood-solana-tokens-theyre-just-better-database-records-1a8k" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 30&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/sammynug/as-a-web2-developer-i-finally-understood-solana-tokens-theyre-just-better-database-records-1a8k" id="article-link-4029993"&gt;
          As a Web2 Developer, I Finally Understood Solana Tokens (They're Just Better Database Records)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/100daysofsolana"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;100daysofsolana&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/blockchain"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;blockchain&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/web3"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;web3&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/sammynug/as-a-web2-developer-i-finally-understood-solana-tokens-theyre-just-better-database-records-1a8k" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;13&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/sammynug/as-a-web2-developer-i-finally-understood-solana-tokens-theyre-just-better-database-records-1a8k#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              2&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>As a Web2 Developer, I Finally Understood Solana Tokens (They're Just Better Database Records)</title>
      <dc:creator>Samuel Emmanuel</dc:creator>
      <pubDate>Tue, 30 Jun 2026 10:46:01 +0000</pubDate>
      <link>https://dev.to/sammynug/as-a-web2-developer-i-finally-understood-solana-tokens-theyre-just-better-database-records-1a8k</link>
      <guid>https://dev.to/sammynug/as-a-web2-developer-i-finally-understood-solana-tokens-theyre-just-better-database-records-1a8k</guid>
      <description>&lt;p&gt;When I started the &lt;strong&gt;100 Days of Solana&lt;/strong&gt; challenge, I assumed tokens were simply cryptocurrencies.&lt;/p&gt;

&lt;p&gt;I was wrong.&lt;/p&gt;

&lt;p&gt;After spending several days working with the SPL Token Program and Token-2022, I realized something surprising:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Solana tokens are less like "coins" and more like programmable database objects that the entire network understands.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That mindset shift made everything click.&lt;/p&gt;

&lt;p&gt;If you're a Web2 developer, here's the explanation I wish someone had given me.&lt;/p&gt;




&lt;h1&gt;
  
  
  Imagine Building a Rewards System in Web2
&lt;/h1&gt;

&lt;p&gt;Suppose your company wants a loyalty program.&lt;/p&gt;

&lt;p&gt;You'd probably build something 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;Users
-----
id
name

RewardBalances
--------------
user_id
balance

Transactions
------------
id
from_user
to_user
amount
timestamp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you'd write APIs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /mint
POST /transfer
GET /balance
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you need to worry about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;double spending&lt;/li&gt;
&lt;li&gt;race conditions&lt;/li&gt;
&lt;li&gt;database consistency&lt;/li&gt;
&lt;li&gt;authorization&lt;/li&gt;
&lt;li&gt;transaction history&lt;/li&gt;
&lt;li&gt;auditing&lt;/li&gt;
&lt;li&gt;scaling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You're responsible for everything.&lt;/p&gt;




&lt;h1&gt;
  
  
  Solana Already Solves This
&lt;/h1&gt;

&lt;p&gt;Instead of building the infrastructure yourself, Solana provides a shared program called the &lt;strong&gt;SPL Token Program&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Think of it as an API that already exists on-chain.&lt;/p&gt;

&lt;p&gt;Instead of writing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /mint
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you simply call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;spl-token mint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of creating your own balance table...&lt;/p&gt;

&lt;p&gt;Solana stores balances securely on-chain.&lt;/p&gt;

&lt;p&gt;The blockchain becomes the shared database.&lt;/p&gt;




&lt;h1&gt;
  
  
  The First Concept That Confused Me
&lt;/h1&gt;

&lt;p&gt;The first strange thing I encountered was this:&lt;/p&gt;

&lt;p&gt;My wallet couldn't receive my own token.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because Solana separates &lt;strong&gt;wallets&lt;/strong&gt; from &lt;strong&gt;token accounts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Coming from Web2, here's the easiest analogy.&lt;/p&gt;

&lt;p&gt;Imagine your wallet is a filing cabinet.&lt;/p&gt;

&lt;p&gt;Each token account is a folder inside it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Wallet
│
├── SOL
├── USDC
├── MyToken
└── AnotherToken
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every token gets its own dedicated account.&lt;/p&gt;

&lt;p&gt;That design keeps the runtime fast and data organized.&lt;/p&gt;




&lt;h1&gt;
  
  
  Mint ≠ Token
&lt;/h1&gt;

&lt;p&gt;This was another "aha!" moment.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Mint&lt;/strong&gt; is not your balance.&lt;/p&gt;

&lt;p&gt;A Mint is the definition of the currency itself.&lt;/p&gt;

&lt;p&gt;It stores things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;total supply&lt;/li&gt;
&lt;li&gt;decimal precision&lt;/li&gt;
&lt;li&gt;mint authority&lt;/li&gt;
&lt;li&gt;token configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as the schema for a table.&lt;/p&gt;

&lt;p&gt;Meanwhile, your Token Account stores your personal balance.&lt;/p&gt;

&lt;p&gt;It's the equivalent of one row in a balances table.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Mint
-----
Decimals
Supply
Authority

↓

Token Account

Owner
Balance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Metadata Makes Tokens Human
&lt;/h1&gt;

&lt;p&gt;Without metadata...&lt;/p&gt;

&lt;p&gt;Your token is just a long address.&lt;/p&gt;

&lt;p&gt;Nobody knows what it represents.&lt;/p&gt;

&lt;p&gt;Token-2022 lets metadata live directly on the mint.&lt;/p&gt;

&lt;p&gt;Instead of seeing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;4HwP8L....
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;wallets can display:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100DaysCoin

Symbol:
HUNDO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Along with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;image&lt;/li&gt;
&lt;li&gt;description&lt;/li&gt;
&lt;li&gt;project website&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It feels similar to adding display fields to a database record.&lt;/p&gt;




&lt;h1&gt;
  
  
  Token-2022 Is Where Things Get Interesting
&lt;/h1&gt;

&lt;p&gt;The original SPL Token Program is powerful.&lt;/p&gt;

&lt;p&gt;Token-2022 extends it with built-in capabilities that would normally require a backend service.&lt;/p&gt;

&lt;p&gt;Some examples surprised me.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Transfer Fees
&lt;/h2&gt;

&lt;p&gt;Imagine Stripe automatically charging platform fees...&lt;/p&gt;

&lt;p&gt;without your backend.&lt;/p&gt;

&lt;p&gt;That's what Token-2022 can do.&lt;/p&gt;

&lt;p&gt;When someone transfers tokens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Alice
100

↓

Bob
99

↓

1 token withheld as protocol fee
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The token program enforces the rules.&lt;/p&gt;

&lt;p&gt;Not your application.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Interest-Bearing Tokens
&lt;/h2&gt;

&lt;p&gt;This one felt almost magical.&lt;/p&gt;

&lt;p&gt;Normally, if you're building a savings application, you'd run scheduled jobs that update balances every day.&lt;/p&gt;

&lt;p&gt;Token-2022 works differently.&lt;/p&gt;

&lt;p&gt;The stored balance never changes.&lt;/p&gt;

&lt;p&gt;Instead, wallets calculate the displayed balance using the configured interest rate and elapsed time.&lt;/p&gt;

&lt;p&gt;It's similar to computing derived values when reading from a database instead of constantly updating every row.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Soulbound Tokens
&lt;/h2&gt;

&lt;p&gt;Another extension allows tokens that cannot be transferred.&lt;/p&gt;

&lt;p&gt;Think of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;employee badges&lt;/li&gt;
&lt;li&gt;university certificates&lt;/li&gt;
&lt;li&gt;contributor roles&lt;/li&gt;
&lt;li&gt;event attendance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You own them.&lt;/p&gt;

&lt;p&gt;But you cannot sell them.&lt;/p&gt;

&lt;p&gt;This maps almost perfectly to Web2 identity systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Permanent Delegates
&lt;/h2&gt;

&lt;p&gt;Imagine your company issues employee access cards.&lt;/p&gt;

&lt;p&gt;Employees can't modify them.&lt;/p&gt;

&lt;p&gt;HR can revoke them.&lt;/p&gt;

&lt;p&gt;Permanent delegates work similarly.&lt;/p&gt;

&lt;p&gt;The issuing authority can revoke or burn credentials without requiring the holder's permission.&lt;/p&gt;

&lt;p&gt;That's incredibly useful for certifications, memberships, and verified credentials.&lt;/p&gt;




&lt;h1&gt;
  
  
  NFTs Suddenly Made Sense
&lt;/h1&gt;

&lt;p&gt;I always thought NFTs were something completely different from tokens.&lt;/p&gt;

&lt;p&gt;They're not.&lt;/p&gt;

&lt;p&gt;An NFT is simply:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a token with a supply of one&lt;/li&gt;
&lt;li&gt;zero decimals&lt;/li&gt;
&lt;li&gt;mint authority disabled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it.&lt;/p&gt;

&lt;p&gt;Then metadata gives it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a name&lt;/li&gt;
&lt;li&gt;an image&lt;/li&gt;
&lt;li&gt;attributes&lt;/li&gt;
&lt;li&gt;a description&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The mint stores the identity.&lt;/p&gt;

&lt;p&gt;The metadata describes it.&lt;/p&gt;

&lt;p&gt;The supply guarantees uniqueness.&lt;/p&gt;

&lt;p&gt;Once I understood that, NFTs stopped feeling mysterious.&lt;/p&gt;




&lt;h1&gt;
  
  
  My Biggest Takeaway
&lt;/h1&gt;

&lt;p&gt;The most important lesson wasn't learning new CLI commands.&lt;/p&gt;

&lt;p&gt;It was realizing how much infrastructure Solana already provides.&lt;/p&gt;

&lt;p&gt;As backend developers, we're used to building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;balance tables&lt;/li&gt;
&lt;li&gt;transaction services&lt;/li&gt;
&lt;li&gt;permission systems&lt;/li&gt;
&lt;li&gt;fee processors&lt;/li&gt;
&lt;li&gt;interest calculations&lt;/li&gt;
&lt;li&gt;audit logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On Solana, much of that logic already exists inside audited programs that every application can share.&lt;/p&gt;

&lt;p&gt;Instead of writing another backend service, you're configuring a protocol.&lt;/p&gt;

&lt;p&gt;That shift changes how you think about application architecture.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;The more I work through the &lt;strong&gt;100 Days of Solana&lt;/strong&gt; challenge, the more I stop comparing Solana to traditional backend development and start seeing it as a globally shared application layer.&lt;/p&gt;

&lt;p&gt;Coming from Web2, that was the biggest mental shift.&lt;/p&gt;

&lt;p&gt;You're not replacing your backend with blockchain.&lt;/p&gt;

&lt;p&gt;You're moving the parts that benefit from shared trust, transparent state, and built-in asset management onto the network itself.&lt;/p&gt;

&lt;p&gt;For me, that made Solana finally click.&lt;/p&gt;

&lt;p&gt;If you're a backend developer who's been curious about blockchain, learning the SPL Token Program and Token-2022 is one of the best places to start.&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>blockchain</category>
      <category>web3</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Program Derived Addresses (PDAs): The Solana Feature Every Web2 Developer Should Understand</title>
      <dc:creator>Samuel Emmanuel</dc:creator>
      <pubDate>Mon, 29 Jun 2026 15:16:05 +0000</pubDate>
      <link>https://dev.to/sammynug/program-derived-addresses-pdas-the-solana-feature-every-web2-developer-should-understand-29k3</link>
      <guid>https://dev.to/sammynug/program-derived-addresses-pdas-the-solana-feature-every-web2-developer-should-understand-29k3</guid>
      <description>&lt;p&gt;If you're coming from a Web2 background, one of the first things that feels strange about Solana is that applications don't always create accounts using private keys.&lt;br&gt;
Instead, they often use something called a "Program Derived Address (PDA)".&lt;/p&gt;

&lt;p&gt;At first, that sounded complicated to me.&lt;br&gt;
After building several Anchor programs during my #100DaysOfSolana challenge, I realized PDAs aren't magic at all they solve a problem that every backend developer already understands.&lt;/p&gt;

&lt;p&gt;Let's look at them through a Web2 lens.&lt;/p&gt;
&lt;h2&gt;
  
  
  How We Usually Think in Web2
&lt;/h2&gt;

&lt;p&gt;Imagine you're building a SaaS application.&lt;/p&gt;

&lt;p&gt;You have a table like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;User ID&lt;/th&gt;
&lt;th&gt;Counter&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;205&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;318&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Whenever a request arrives, you already know the user's ID.&lt;/p&gt;

&lt;p&gt;You don't generate a random database key every time. Instead, you derive which row belongs to the user.&lt;br&gt;
Your application always knows exactly where that user's data lives.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Problem on Solana
&lt;/h2&gt;

&lt;p&gt;My first Anchor counter program didn't work like that.&lt;/p&gt;

&lt;p&gt;To create a counter, I generated a brand new keypair for the account. That worked... but it meant the client had to remember that keypair forever.&lt;br&gt;
Lose it, and you lose the ability to easily locate your counter account.&lt;br&gt;
That approach is fine for tutorials but not for real applications.&lt;/p&gt;
&lt;h2&gt;
  
  
  Enter Program Derived Addresses
&lt;/h2&gt;

&lt;p&gt;A PDA is an account whose address is deterministically derived from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one or more seeds&lt;/li&gt;
&lt;li&gt;your program ID&lt;/li&gt;
&lt;li&gt;a bump value
For example:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="n"&gt;seeds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s"&gt;b"counter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="nf"&gt;.key&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.as_ref&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;Every time the same user calls the program, Anchor derives the exact same address.&lt;/p&gt;

&lt;p&gt;No database lookup.&lt;br&gt;
No random account generation.&lt;br&gt;
No extra storage needed to remember where the account lives.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Web2 Analogy
&lt;/h2&gt;

&lt;p&gt;Imagine this function:&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="nf"&gt;getCounter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Internally your backend might do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;counters&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The user ID uniquely identifies the row.&lt;/p&gt;

&lt;p&gt;PDAs work almost the same way.&lt;br&gt;
Instead of looking up a database row, Solana derives an account address from predictable inputs.&lt;/p&gt;

&lt;p&gt;It's closer to computing a deterministic primary key than generating a UUID.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why This Is Powerful
&lt;/h2&gt;

&lt;p&gt;Suppose Alice opens your app.&lt;/p&gt;

&lt;p&gt;Anchor derives:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;("counter", Alice)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bob opens the app.&lt;/p&gt;

&lt;p&gt;Anchor derives:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;("counter", Bob)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both users automatically get different accounts.&lt;/p&gt;

&lt;p&gt;No collisions.&lt;br&gt;
No bookkeeping.&lt;/p&gt;

&lt;p&gt;Your program always knows where each user's state belongs.&lt;/p&gt;
&lt;h2&gt;
  
  
  Where Anchor Helps
&lt;/h2&gt;

&lt;p&gt;One thing I really appreciate about Anchor is how much boilerplate disappears.&lt;br&gt;
Instead of manually checking addresses, ownership, and account creation, you simply declare constraints:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="nd"&gt;#[account(&lt;/span&gt;
    &lt;span class="nd"&gt;init,&lt;/span&gt;
    &lt;span class="nd"&gt;payer&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="nd"&gt;user,&lt;/span&gt;
    &lt;span class="nd"&gt;seeds&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="s"&gt;b"counter"&lt;/span&gt;&lt;span class="nd"&gt;,&lt;/span&gt; &lt;span class="nd"&gt;user&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="nd"&gt;key()&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="nd"&gt;as_ref()]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;bump&lt;/span&gt;
&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Anchor then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;derives the PDA&lt;/li&gt;
&lt;li&gt;computes the canonical bump&lt;/li&gt;
&lt;li&gt;creates the account&lt;/li&gt;
&lt;li&gt;allocates storage&lt;/li&gt;
&lt;li&gt;makes the program sign for it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All before your instruction handler even runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security Comes from Constraints
&lt;/h2&gt;

&lt;p&gt;Another thing that clicked for me was that authorization often lives in account constraints rather than business logic.&lt;br&gt;
For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="nd"&gt;#[account(&lt;/span&gt;
    &lt;span class="nd"&gt;has_one&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="nd"&gt;user&lt;/span&gt;
&lt;span class="nd"&gt;)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="nd"&gt;#[account(&lt;/span&gt;
    &lt;span class="nd"&gt;constraint&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="nd"&gt;config&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="nd"&gt;paused&lt;/span&gt;
&lt;span class="nd"&gt;)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of writing lots of validation code inside the handler, Anchor verifies everything first.&lt;br&gt;
If validation fails, the transaction never reaches your business logic.&lt;br&gt;
As a backend developer, it reminded me of middleware that rejects unauthorized requests before your controller executes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;One thing the Solana journey has taught me is that blockchain development isn't about throwing away Web2 knowledge.&lt;/p&gt;

&lt;p&gt;It's about applying familiar backend concepts in a different environment.&lt;br&gt;
Database rows become accounts.&lt;br&gt;
Primary keys become deterministic addresses.&lt;br&gt;
Middleware becomes account constraints.&lt;/p&gt;

&lt;p&gt;Tables become on-chain state.&lt;br&gt;
Once I started viewing Solana through concepts I already understood, everything became much easier to reason about.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Building
&lt;/h2&gt;

&lt;p&gt;This article is based on one of the programs I built during my #100DaysOfSolana challenge.&lt;/p&gt;

&lt;p&gt;The project evolved from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a simple counter&lt;/li&gt;
&lt;li&gt;to stateful accounts&lt;/li&gt;
&lt;li&gt;to authorization with &lt;code&gt;has_one&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;to negative testing with LiteSVM&lt;/li&gt;
&lt;li&gt;to per-user PDAs&lt;/li&gt;
&lt;li&gt;to configuration PDAs&lt;/li&gt;
&lt;li&gt;to reclaiming rent by closing PDA accounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each step felt surprisingly familiar once I translated it into Web2 concepts.&lt;/p&gt;

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

&lt;p&gt;If you're a Web2 developer curious about Solana, don't start by trying to memorize blockchain terminology.&lt;br&gt;
Instead, ask:&lt;/p&gt;

&lt;p&gt;"What problem is this solving that I already solve every day?"&lt;br&gt;
More often than not, there's a familiar backend concept hiding underneath.&lt;/p&gt;

&lt;p&gt;That's what finally made PDAs click for me.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

&lt;p&gt;I'm documenting my learning journey through &lt;strong&gt;#100DaysOfSolana&lt;/strong&gt;, sharing what I build and translating blockchain concepts into language that backend developers already understand.&lt;/p&gt;

&lt;p&gt;If you're learning Solana too, I'd love to connect and learn together.&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>blockchain</category>
      <category>web3</category>
      <category>writing</category>
    </item>
    <item>
      <title>My Solana Learning Journey So Far 🚀</title>
      <dc:creator>Samuel Emmanuel</dc:creator>
      <pubDate>Tue, 02 Jun 2026 09:55:08 +0000</pubDate>
      <link>https://dev.to/sammynug/my-solana-learning-journey-so-far-2kef</link>
      <guid>https://dev.to/sammynug/my-solana-learning-journey-so-far-2kef</guid>
      <description>&lt;p&gt;Over the past few days, I've been diving into Solana development, and it's been a fascinating shift from traditional web development. I've built wallets, worked with keypairs, explored SOL and lamports, connected browser wallets using the Wallet Standard API, and interacted with both Devnet and Mainnet through RPC calls.&lt;/p&gt;

&lt;p&gt;One thing that surprised me was how identity works in Web3. In Web2, we're used to usernames, emails, and passwords. In Solana, your identity is essentially a cryptographic keypair, and wallet extensions handle authentication without exposing private keys to applications. That was a major mindset shift for me.&lt;/p&gt;

&lt;p&gt;What really clicked was understanding that most blockchain interactions are just requests to a network. Once I started using RPC endpoints to fetch balances, transaction history, and account data, the blockchain felt much less mysterious and more like a distributed system that exposes APIs.&lt;/p&gt;

&lt;p&gt;What's still a bit confusing is the deeper relationship between accounts, programs, and how on-chain data is structured. I understand the basics, but I'm looking forward to learning more about Solana programs and seeing how everything fits together when building full decentralized applications.&lt;/p&gt;

&lt;p&gt;Overall, the journey has been both challenging and rewarding. Every day I gain a better understanding of how blockchain applications work under the hood, and I'm excited to keep building and exploring the Solana ecosystem.&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>devjourney</category>
      <category>javascript</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Day 7 of my Solana learning journey</title>
      <dc:creator>Samuel Emmanuel</dc:creator>
      <pubDate>Mon, 01 Jun 2026 14:12:00 +0000</pubDate>
      <link>https://dev.to/sammynug/day-7-of-my-solana-learning-journey-1gja</link>
      <guid>https://dev.to/sammynug/day-7-of-my-solana-learning-journey-1gja</guid>
      <description>&lt;p&gt;Today, I built a Solana web application that connects to browser wallet extensions using the Wallet Standard API. The application can discover compatible wallets, connect securely with user permission, and retrieve wallet account information without ever handling private keys.&lt;/p&gt;

&lt;p&gt;One of the biggest shifts from traditional web development has been realizing that wallet extensions manage identity and authentication. Instead of creating accounts with usernames, emails, and passwords, users authenticate through cryptographic wallets that they control.&lt;/p&gt;

&lt;p&gt;This project gave me a deeper understanding of how Web3 applications interact with users while maintaining security and ownership of private keys.&lt;/p&gt;

&lt;p&gt;Next, I'm excited to move beyond wallet connections and balance checks and start building full-featured Web3 applications on Solana, including creating and signing transactions.&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>web3</category>
      <category>blockchain</category>
      <category>javascript</category>
    </item>
    <item>
      <title>SSH Keys, But for the Internet: Understanding Identity on Solana</title>
      <dc:creator>Samuel Emmanuel</dc:creator>
      <pubDate>Wed, 27 May 2026 12:49:24 +0000</pubDate>
      <link>https://dev.to/sammynug/ssh-keys-but-for-the-internet-understanding-identity-on-solana-bk5</link>
      <guid>https://dev.to/sammynug/ssh-keys-but-for-the-internet-understanding-identity-on-solana-bk5</guid>
      <description>&lt;p&gt;If you’ve spent years building in Web2, the idea of “identity on a blockchain” can sound strange at first. Where are the usernames? The login forms? The OAuth providers?&lt;/p&gt;

&lt;p&gt;On Solana, identity works very differently but there’s a good chance you already understand the core idea without realizing it.&lt;/p&gt;

&lt;p&gt;Think about SSH keys.&lt;/p&gt;

&lt;p&gt;When you SSH into a server, you don’t type “who you are” every time. Instead, you prove ownership of a private key. The server trusts the corresponding public key, and that cryptographic relationship becomes your identity.&lt;/p&gt;

&lt;p&gt;Solana works almost exactly the same way.&lt;/p&gt;

&lt;p&gt;Your keypair is your identity&lt;br&gt;
In Solana, identity starts with a keypair:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A private key that only you control&lt;/li&gt;
&lt;li&gt;Public key that everyone can see
When you create a wallet, you are really generating a cryptographic identity.
Your public key becomes your address on the network. It looks something like this:
14grJpemFaf88c8tiVb77W7TYg2W3ir6pfkKz3YjhhZ5, That’s not a username stored in a database. It’s a 32-byte Ed25519 public key encoded in Base58.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Base58 exists for practical reasons:&lt;br&gt;
It removes visually confusing characters like 0, O, I, and l&lt;br&gt;
It avoids punctuation that breaks copying and URLs&lt;br&gt;
It makes addresses safer for humans to handle&lt;br&gt;
Under the hood, though, it’s still just a public key.&lt;/p&gt;

&lt;p&gt;The network replaces the company&lt;br&gt;
In Web2, identity is usually managed by a company.&lt;br&gt;
Your Twitter account exists because Twitter’s database says it exists.&lt;br&gt;
Your access depends on:&lt;br&gt;
Email/password records&lt;br&gt;
Session tokens&lt;br&gt;
OAuth providers&lt;br&gt;
Admin systems&lt;br&gt;
Ultimately, the platform decides whether your account is valid.&lt;br&gt;
Solana removes that middle layer.&lt;br&gt;
There is no central database saying “Alice owns this account.” Instead, ownership is proven cryptographically.&lt;/p&gt;

&lt;p&gt;If you can produce a valid signature using the private key, the network accepts that you are the owner.&lt;br&gt;
That’s it.&lt;br&gt;
No support ticket.&lt;br&gt;
No password reset.&lt;br&gt;
No admin override.&lt;br&gt;
This is one of the biggest mindset shifts for Web2 developers: identity is not granted by an application. Identity is derived from cryptographic control.&lt;/p&gt;

&lt;p&gt;Accounts on Solana are more like containers&lt;br&gt;
Another important difference is that Solana’s accounts are not “user profiles.”&lt;br&gt;
On Solana, everything lives inside accounts:&lt;br&gt;
Wallet balances&lt;br&gt;
Program state&lt;br&gt;
Smart contracts&lt;br&gt;
NFTs&lt;br&gt;
Governance records&lt;br&gt;
Accounts are the fundamental storage units of the network.&lt;br&gt;
Your keypair controls some of those accounts by signing transactions.&lt;/p&gt;

&lt;p&gt;If you’re coming from backend development, think of it this way:&lt;br&gt;
In Web2:&lt;br&gt;
Your app owns the database&lt;br&gt;
Users authenticate against your system&lt;br&gt;
Your backend decides permissions&lt;/p&gt;

&lt;p&gt;In Solana:&lt;br&gt;
The blockchain is the shared database&lt;br&gt;
Users authenticate with signatures&lt;br&gt;
Programs verify permissions cryptographically&lt;br&gt;
Instead of checking:&lt;br&gt;
if (session.user.id === post.ownerId)&lt;br&gt;
A Solana program checks whether the transaction was signed by the expected public key.&lt;br&gt;
The trust model moves from application logic to cryptographic proof&lt;/p&gt;

&lt;p&gt;Identity becomes portable&lt;br&gt;
This is where things get interesting.&lt;br&gt;
In Web2, your identity is fragmented:&lt;br&gt;
GitHub knows one version of you&lt;br&gt;
Discord knows another&lt;br&gt;
Stripe knows another&lt;br&gt;
None of them automatically trust each other&lt;/p&gt;

&lt;p&gt;On Solana, the same identity works everywhere on the network.&lt;br&gt;
One wallet can:&lt;br&gt;
Hold tokens&lt;br&gt;
Vote in governance systems&lt;br&gt;
Trade NFTs&lt;br&gt;
Interact with DeFi protocols&lt;br&gt;
Build on-chain reputation&lt;br&gt;
Sign into apps&lt;/p&gt;

&lt;p&gt;And no application has to ask another application for permission.&lt;br&gt;
That portability is possible because the identity layer is shared infrastructure.&lt;/p&gt;

&lt;p&gt;Signing replaces logging in&lt;br&gt;
A useful mental model is this:&lt;br&gt;
Web2 apps ask:&lt;br&gt;
“Do you know the password?”&lt;br&gt;
Solana asks:&lt;br&gt;
“Can you prove ownership of this key?”&lt;br&gt;
That proof happens through digital signatures.&lt;br&gt;
When your wallet signs a transaction:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The transaction data is hashed&lt;/li&gt;
&lt;li&gt;Your private key signs the hash&lt;/li&gt;
&lt;li&gt;The network verifies it using your public key
The private key never leaves your wallet, but the network can still verify ownership mathematically.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is why wallets matter so much in crypto. They are not just payment apps — they are identity providers.&lt;/p&gt;

&lt;p&gt;The tradeoff: freedom and responsibility&lt;br&gt;
This model gives users something rare on the internet: true ownership.&lt;br&gt;
But it also removes safety nets.&lt;br&gt;
If a company controls identity, they can restore access.&lt;br&gt;
If you control identity, losing the private key usually means losing access permanently.&lt;/p&gt;

&lt;p&gt;That tradeoff is intentional.&lt;br&gt;
Solana’s identity model prioritizes self-custody over recoverability.&lt;br&gt;
For Web2 developers, this can feel uncomfortable at first because we are used to centralized account recovery systems. But it also unlocks something powerful: users no longer need permission from a platform to exist online.&lt;/p&gt;

&lt;p&gt;Their identity belongs to them.&lt;/p&gt;

&lt;p&gt;And on Solana, that identity is simply a keypair.&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>beginners</category>
      <category>web3</category>
    </item>
    <item>
      <title>Is Learning to Code Still Worth It in the AI Era?</title>
      <dc:creator>Samuel Emmanuel</dc:creator>
      <pubDate>Sun, 24 May 2026 01:37:04 +0000</pubDate>
      <link>https://dev.to/sammynug/is-learning-to-code-still-worth-it-in-the-ai-era-511i</link>
      <guid>https://dev.to/sammynug/is-learning-to-code-still-worth-it-in-the-ai-era-511i</guid>
      <description>&lt;p&gt;With AI tools becoming more powerful every day, many beginners are wondering if learning programming is still worth it.&lt;br&gt;
Do you think AI will replace some developer jobs, or will it simply make developers more productive?&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts and experiences 👇&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Hello DEV! 👋🏽 My Developer Journey Begins</title>
      <dc:creator>Samuel Emmanuel</dc:creator>
      <pubDate>Sat, 16 May 2026 17:58:58 +0000</pubDate>
      <link>https://dev.to/sammynug/hello-dev-my-developer-journey-begiy-3idg</link>
      <guid>https://dev.to/sammynug/hello-dev-my-developer-journey-begiy-3idg</guid>
      <description>&lt;p&gt;Hello DEV 👋&lt;/p&gt;

&lt;p&gt;Hi everyone! I'm new here and excited to join the DEV Community.&lt;/p&gt;

&lt;p&gt;I'm currently learning software development and exploring areas like web development, AI, and open-source technologies. I enjoy building small projects, learning new tools, and improving my coding skills every day.&lt;/p&gt;

&lt;p&gt;I joined DEV to connect with other developers, share my learning journey, and learn from the community.&lt;/p&gt;

&lt;p&gt;Looking forward to growing with you all 🚀&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>community</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
