<?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: James Bachini</title>
    <description>The latest articles on DEV Community by James Bachini (@jamesbachini).</description>
    <link>https://dev.to/jamesbachini</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%2F2971337%2Fb7031f6b-ed76-4ec7-b45c-157953aca722.jpg</url>
      <title>DEV Community: James Bachini</title>
      <link>https://dev.to/jamesbachini</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jamesbachini"/>
    <language>en</language>
    <item>
      <title>How to Sell Services to AI Agents | x402 Goes Live On The Stellar Network</title>
      <dc:creator>James Bachini</dc:creator>
      <pubDate>Tue, 17 Mar 2026 03:45:41 +0000</pubDate>
      <link>https://dev.to/jamesbachini/how-to-sell-services-to-ai-agents-x402-goes-live-on-the-stellar-network-12a2</link>
      <guid>https://dev.to/jamesbachini/how-to-sell-services-to-ai-agents-x402-goes-live-on-the-stellar-network-12a2</guid>
      <description>&lt;p&gt;If you want to charge for an API you might issue API keys, set up a payment processor, manage rate limits, and hope your users don't churn. That model assumes a human is on the other side of the keyboard.&lt;/p&gt;

&lt;p&gt;AI agents change the dynamic as they don’t have access or permissions to sign up for credit card based subscriptions. But what if you could give your agent access to a small amount of digital assets and they could use it to pay for metered access.&lt;/p&gt;

&lt;p&gt;This is where x402 comes in. It revives the long reserved HTTP status code “402 Payment Required”.&lt;/p&gt;

&lt;p&gt;Instead of redirecting to a checkout page, a server can respond with a machine readable payment request. The client signs a transaction providing authentication to route the digital assets and the resource is returned.&lt;/p&gt;

&lt;p&gt;No dashboards. No credit cards. No humans in the loop. Just native payments via http.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why The Stellar Network &amp;amp; USDC
&lt;/h2&gt;

&lt;p&gt;Payment rails matter.&lt;/p&gt;

&lt;p&gt;If you're charging $0.001 per API call, a $0.30 card processing fee is a non-starter. Settlement time measured in days doesn't work either when agents expect instant feedback.&lt;/p&gt;

&lt;p&gt;The Stellar network provides the missing foundation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Transactions settle in seconds&lt;/li&gt;
&lt;li&gt;  Fees are fractions of a cent&lt;/li&gt;
&lt;li&gt;  Native USDC support via Circle&lt;/li&gt;
&lt;li&gt;  Non custodial, on chain settlement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That combination makes micropayments via x402 viable. Not as a thought experiment, but as robust production architecture.&lt;/p&gt;

&lt;p&gt;With x402 integrated on Stellar, an AI agent can find your endpoint, receive a structured payment request in USDC, sign a transaction, and proceed - all within a standard request/response cycle.&lt;/p&gt;

&lt;p&gt;For the first time, the economics align with the automation, and it’s a great time to be a builder.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Can You Sell to AI Agents?
&lt;/h2&gt;

&lt;p&gt;The opportunity is not theoretical. Agents already consume:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Market data&lt;/li&gt;
&lt;li&gt;  Code analysis&lt;/li&gt;
&lt;li&gt;  Security scanning&lt;/li&gt;
&lt;li&gt;  Model inference&lt;/li&gt;
&lt;li&gt;  Compute cycles&lt;/li&gt;
&lt;li&gt;  Private datasets&lt;/li&gt;
&lt;li&gt;  Execution endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right now, most of these are gated by API keys or subscription contracts. That friction limits experimentation and composability.&lt;/p&gt;

&lt;p&gt;With x402, you can expose a service and receive payment based directly on the volume of usage. The agent doesn't need an account or any intermediary.&lt;/p&gt;

&lt;p&gt;Think about what Claude Code and OpenClaw are doing: they allow agents to navigate repositories, execute commands, install dependencies, and reason about systems.&lt;/p&gt;

&lt;p&gt;Now imagine those agents discovering your paid endpoint in the process.&lt;/p&gt;

&lt;p&gt;They attempt a request.Your server responds with &lt;em&gt;402 Payment Required&lt;/em&gt;.Payment options are provided in USDC on the Stellar network.The agent evaluates the cost.It signs and resubmits.You receive the digital assets to your wallet&lt;/p&gt;

&lt;p&gt;No onboarding call. No SaaS sales funnel. No subscription churn.&lt;/p&gt;

&lt;p&gt;Your API becomes economically composable.&lt;/p&gt;

&lt;p&gt;Developers often talk about "&lt;em&gt;the machine economy&lt;/em&gt;" in abstract terms. This is what it will look like in the next few years: small, verifiable, programmatic payments flowing between autonomous systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simplicity For Developers
&lt;/h2&gt;

&lt;p&gt;One of the more compelling aspects of x402 is how little it actually demands from developers.&lt;/p&gt;

&lt;p&gt;On the server side, the logic is straightforward: when payment is required, the endpoint responds with a “&lt;em&gt;402 Payment Required&lt;/em&gt;” status, includes structured payment instructions, and verifies on chain settlement before delivering the resource.&lt;/p&gt;

&lt;p&gt;On the client side, the process is equally simple. The client detects the 402 response, signs the required transaction, and retries the request with proof of payment. Beyond that exchange, everything else continues to run on standard HTTP infrastructure, without introducing complex new layers or bespoke protocols.&lt;/p&gt;

&lt;p&gt;And of course there is npm middleware available from Coinbase:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&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;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;route&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ROUTE_PATH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PRICE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;network&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NETWORK&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nf"&gt;paymentMiddlewareFromConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;`GET &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ROUTE_PATH&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;accepts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;exact&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PRICE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;network&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NETWORK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;payTo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PAY_TO&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HTTPFacilitatorClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;FACILITATOR_URL&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;network&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NETWORK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ExactStellarScheme&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&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;AI agents are becoming more capable, moving from passive assistants to active operators. As that shift accelerates, the demand for machine to machine services will grow with it. The developers who expose programmable, metered services early will shape that ecosystem.&lt;/p&gt;

&lt;p&gt;x402 on the Stellar network provides the missing payment primitive to support it.&lt;/p&gt;

&lt;p&gt;A small extension to HTTP backed by a network built for fast, low cost global settlement.&lt;/p&gt;

&lt;p&gt;If you're building tools, datasets, models, or infrastructure that agents can use, the question is no longer whether machines will consume your services. It's whether they'll be able to pay you directly when they do.&lt;/p&gt;

</description>
      <category>x402</category>
      <category>402</category>
      <category>ai</category>
      <category>stellar</category>
    </item>
    <item>
      <title>Dev Diaries Ep.6 | Launch Day</title>
      <dc:creator>James Bachini</dc:creator>
      <pubDate>Mon, 13 Oct 2025 11:20:15 +0000</pubDate>
      <link>https://dev.to/stellar/dev-diaries-ep6-launch-day-33ni</link>
      <guid>https://dev.to/stellar/dev-diaries-ep6-launch-day-33ni</guid>
      <description>&lt;p&gt;Startups in Web3 don’t launch like traditional products, there are no rollbacks, no "patch it later" second tries.&lt;/p&gt;

&lt;p&gt;When you hit deploy on-chain, it's live and responsible for financial transactions.&lt;/p&gt;

&lt;p&gt;In Episode 6 of the Stellar Dev Diaries, the Freelii team takes the leap every founder dreams about: &lt;strong&gt;launching on Stellar mainnet.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🎥 Check out Episode 6: Launch Day&lt;br&gt;&lt;br&gt;


  &lt;iframe src="https://www.youtube.com/embed/7Yf2g7meHKc"&gt;
  &lt;/iframe&gt;


&lt;br&gt;&lt;br&gt;
📺 &lt;a href="https://youtu.be/7Yf2g7meHKc" rel="noopener noreferrer"&gt;Watch it on YouTube&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this episode, the team reflects on the reality of launch day:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🚀 The emotions of finally going live after months of testing and preparation
&lt;/li&gt;
&lt;li&gt;😬 The nerves and risks of pushing code to an immutable blockchain
&lt;/li&gt;
&lt;li&gt;🛠 The last-minute fixes and checks before hitting deploy
&lt;/li&gt;
&lt;li&gt;🤝 How Stellar’s support—grants, feedback, and guidance—made launch possible
&lt;/li&gt;
&lt;li&gt;💡 Advice for other Web3 founders preparing for mainnet
&lt;/li&gt;
&lt;li&gt;🔮 Their vision for how Web3 and DeFi will evolve over the next decade
&lt;/li&gt;
&lt;li&gt;💳 What’s next for Freelii&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Launch day isn't hype, it's execution. Freelii is live. Mainnet is real. And this is just the beginning.  &lt;/p&gt;

&lt;p&gt;🛠 Ready to build on Stellar? Dive into the dev docs:&lt;br&gt;&lt;br&gt;
🌐 &lt;a href="https://developers.stellar.org/" rel="noopener noreferrer"&gt;https://developers.stellar.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👀 Catch up on the series:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Episode 1: &lt;a href="https://youtu.be/FInE2PSx1es" rel="noopener noreferrer"&gt;How a Hackathon Project Became a Web3 Startup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Episode 2: &lt;a href="https://youtu.be/Azz2QPUX4Xs" rel="noopener noreferrer"&gt;How The Freeli Team Raised $70k+ In Funding&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Episode 3: &lt;a href="https://youtu.be/krWqGMv-Tq4" rel="noopener noreferrer"&gt;User Feedback &amp;amp; The Pivot That Saved The Project&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Episode 4: &lt;a href="https://youtu.be/lnLLpgumOlA" rel="noopener noreferrer"&gt;Building Production Systems That Handle Real Money&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Episode 5: &lt;a href="https://youtu.be/n2C2K3HHEV0" rel="noopener noreferrer"&gt;Startup Life Isn't Always Glamorous&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Episode 6: &lt;a href="https://youtu.be/7Yf2g7meHKc" rel="noopener noreferrer"&gt;Launch Day&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devdiaries</category>
      <category>dev</category>
      <category>devjournal</category>
      <category>stellar</category>
    </item>
    <item>
      <title>Dev Diaries Episode 5 – Startup Life Isn't Always Glamorous</title>
      <dc:creator>James Bachini</dc:creator>
      <pubDate>Fri, 05 Sep 2025 11:34:24 +0000</pubDate>
      <link>https://dev.to/stellar/dev-diaries-episode-5-startup-life-isnt-always-glamorous-5gm</link>
      <guid>https://dev.to/stellar/dev-diaries-episode-5-startup-life-isnt-always-glamorous-5gm</guid>
      <description>&lt;p&gt;Startups in Web3 don’t follow straight lines. The technology shifts under your feet, the rules are unclear, and the grind is relentless. In Episode 5 of the Stellar Dev Diaries, we step away from code and architecture to explore the human side of building Freelii.&lt;/p&gt;

&lt;p&gt;🎥 Check out Episode 5: Startup Life Isn’t Always Glamorous&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/n2C2K3HHEV0"&gt;
  &lt;/iframe&gt;
&lt;br&gt;
📺 &lt;a href="https://youtu.be/n2C2K3HHEV0" rel="noopener noreferrer"&gt;Watch it on YouTube&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this episode, Jose and Joseph open up about the unseen struggles of startup life:&lt;/p&gt;

&lt;p&gt;⚡ The pressure of shipping products that must work on-chain, with no safety net&lt;br&gt;
💡 Features they dreamed of building if time and resources weren’t constraints&lt;br&gt;
😓 The lowest points of the journey—and what kept them moving forward&lt;br&gt;
🤝 Lessons in trust, persistence, and teamwork that made Freelii possible&lt;br&gt;
🤖 How AI tools like ChatGPT helped (and sometimes failed) when building at the cutting edge&lt;br&gt;
🌐 Why Stellar’s transparency and reliability made it the right home for Freelii&lt;/p&gt;

&lt;p&gt;Startup life isn't always glamorous. It’s late nights, broken builds, and quiet persistence. Episode 5 shows what it really takes to keep going when the hype fades and the grind begins.&lt;/p&gt;

&lt;p&gt;🛠 Ready to build on Stellar? Dive into the dev docs:&lt;br&gt;
🌐 &lt;a href="https://developers.stellar.org/" rel="noopener noreferrer"&gt;https://developers.stellar.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👀 Catch up on the series:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Episode 1: &lt;a href="https://youtu.be/FInE2PSx1es" rel="noopener noreferrer"&gt;How a Hackathon Project Became a Web3 Startup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Episode 2: &lt;a href="https://youtu.be/Azz2QPUX4Xs" rel="noopener noreferrer"&gt;How The Freeli Team Raised $70k+ In Funding&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Episode 3: &lt;a href="https://youtu.be/krWqGMv-Tq4" rel="noopener noreferrer"&gt;User Feedback &amp;amp; The Pivot That Saved The Project&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Episode 4: &lt;a href="https://youtu.be/lnLLpgumOlA" rel="noopener noreferrer"&gt;Building Production Systems That Handle Real Money&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Episode 5: &lt;a href="https://youtu.be/n2C2K3HHEV0" rel="noopener noreferrer"&gt;Startup Life Isn't Always Glamorous&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devdiaries</category>
      <category>web3</category>
      <category>blockchain</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Dev Diaries Episode 4 – Building A Reliable Payout System In DeFi</title>
      <dc:creator>James Bachini</dc:creator>
      <pubDate>Fri, 08 Aug 2025 23:55:41 +0000</pubDate>
      <link>https://dev.to/stellar/dev-diaries-episode-4-building-a-reliable-payout-system-in-defi-17hj</link>
      <guid>https://dev.to/stellar/dev-diaries-episode-4-building-a-reliable-payout-system-in-defi-17hj</guid>
      <description>&lt;p&gt;Ever wondered what it really takes to move money at scale using blockchain? In Episode 4 of the Stellar Dev Diaries, we go under the hood with the Freelii team as they tackle one of the hardest challenges in Web3: building a secure, reliable, cross-border payout system.&lt;/p&gt;

&lt;p&gt;🎥 Check out Episode 4: Building a Reliable Payout System in DeFi&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/lnLLpgumOlA"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;📺 &lt;a href="https://youtu.be/lnLLpgumOlA" rel="noopener noreferrer"&gt;Watch it on YouTube&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Missed earlier episodes?&lt;br&gt;
👉 Episode 1: &lt;a href="https://youtu.be/FInE2PSx1es" rel="noopener noreferrer"&gt;How a Hackathon Project Became a Web3 Startup&lt;/a&gt;&lt;br&gt;
👉 Episode 2: &lt;a href="https://youtu.be/Azz2QPUX4Xs" rel="noopener noreferrer"&gt;How The Freeli Team Raised $70k+ In Funding&lt;/a&gt;&lt;br&gt;
👉 Episode 3: &lt;a href="https://youtu.be/krWqGMv-Tq4" rel="noopener noreferrer"&gt;User Feedback &amp;amp; The Pivot That Saved The Project&lt;/a&gt;&lt;br&gt;
👉 Episode 4: &lt;a href="https://youtu.be/lnLLpgumOlA" rel="noopener noreferrer"&gt;Building Production Systems That Handle Real Money&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Episode 4, we dive deep into the technical architecture behind Freelii’s payout system. The mission? Help businesses pay global teams without the pain of traditional banking delays and fees.&lt;/p&gt;

&lt;p&gt;We explore:&lt;/p&gt;

&lt;p&gt;🔧 How Freelii designed a system to handle real money, real users, and real risk&lt;br&gt;
🌐 Solving the cross-border payment problem for influencer houses, remote teams, and digital businesses&lt;br&gt;
🚀 Why they chose Stellar for its speed, low fees, and powerful anchor ecosystem&lt;br&gt;
💡 How “policy signers” let them execute secure automated transactions without user interaction&lt;br&gt;
🧪 The challenge of testing without a sandbox—and how the team used Stellar’s testnet and custom tools to bridge the gap&lt;br&gt;
📊 How a serverless backend with Upstash queues ensures reliable transaction execution&lt;/p&gt;

&lt;p&gt;🛠 Ready to build on Stellar? Dive into the dev docs:&lt;br&gt;
🌐 &lt;a href="https://developers.stellar.org/" rel="noopener noreferrer"&gt;https://developers.stellar.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow the Freelii team as they continue building toward launch. Episode 4 is all about going live on mainnet—don’t miss it!&lt;/p&gt;

&lt;p&gt;👀 Watch the series:&lt;br&gt;
🎬 Episode 1: &lt;a href="https://youtu.be/FInE2PSx1es" rel="noopener noreferrer"&gt;How a Hackathon Project Became a Web3 Startup&lt;/a&gt;&lt;br&gt;
🎬 Episode 2: &lt;a href="https://youtu.be/Azz2QPUX4Xs" rel="noopener noreferrer"&gt;How The Freeli Team Raised $70k+ In Funding&lt;/a&gt;&lt;br&gt;
🎬 Episode 3: &lt;a href="https://youtu.be/krWqGMv-Tq4" rel="noopener noreferrer"&gt;User Feedback &amp;amp; The Pivot That Saved The Project&lt;/a&gt;&lt;br&gt;
🎬 Episode 4: &lt;a href="https://youtu.be/lnLLpgumOlA" rel="noopener noreferrer"&gt;Building Production Systems That Handle Real Money&lt;/a&gt;&lt;/p&gt;

</description>
      <category>defi</category>
      <category>stellar</category>
      <category>devdiaries</category>
      <category>web3</category>
    </item>
    <item>
      <title>Dev Diaries Episode 3 - User Feedback &amp; The Pivot That Saved The Project</title>
      <dc:creator>James Bachini</dc:creator>
      <pubDate>Tue, 24 Jun 2025 11:58:49 +0000</pubDate>
      <link>https://dev.to/stellar/dev-diaries-episode-3-user-feedback-the-pivot-that-saved-the-project-54g7</link>
      <guid>https://dev.to/stellar/dev-diaries-episode-3-user-feedback-the-pivot-that-saved-the-project-54g7</guid>
      <description>&lt;p&gt;In the Stellar Dev Diaries series, we’re following the journey of a dev team building on the Stellar Network as they go from hackathon idea to funded startup, testing their product in the real world and adapting as they go.&lt;/p&gt;

&lt;p&gt;🎥 Check out Episode 3: User Feedback &amp;amp; The Pivot That Saved The Project&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/krWqGMv-Tq4"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;📺 [&lt;a href="https://youtu.be/krWqGMv-Tq4" rel="noopener noreferrer"&gt;Watch on YouTube&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;Missed the earlier episodes?&lt;br&gt;
👉 &lt;a href="https://youtu.be/FInE2PSx1es" rel="noopener noreferrer"&gt;Episode 1: How a Hackathon Project Became a Web3 Startup&lt;/a&gt;&lt;br&gt;
👉 &lt;a href="https://youtu.be/Azz2QPUX4Xs" rel="noopener noreferrer"&gt;Episode 2: How the Freelii Team Raised $70k+ In Funding&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s It All About?
&lt;/h2&gt;

&lt;p&gt;In this series, we go behind the scenes with the team at Freelii as they build and launch a new product on the Stellar Network. You’ll get a raw, unfiltered look at the process—ideation, feedback, failure, and pivots—all while working with the cutting-edge tools Web3 has to offer.&lt;/p&gt;

&lt;p&gt;Each episode explores the team’s journey from prototype to product, sharing not only technical insights and code walkthroughs, but also the hard lessons learned when your ideas meet the real world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Episode 3
&lt;/h2&gt;

&lt;p&gt;Episode 3 is all about the pivot—and the power of listening.&lt;/p&gt;

&lt;p&gt;After developing an early version of their chatbot-based remittance product, José and Joseph took it to the Philippines to test in one of the world’s largest remittance markets. The feedback was humbling. Users didn’t trust messaging apps for handling money. The team’s assumptions didn’t hold up, and it forced a tough but necessary shift in direction.&lt;/p&gt;

&lt;p&gt;Instead of sticking to the original plan, the team listened. And that led them to a better opportunity: automating business payouts.&lt;/p&gt;

&lt;p&gt;💡 “We stopped trying to get individuals to change their behaviour and started solving a real, painful problem for businesses.”&lt;/p&gt;

&lt;p&gt;This episode covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Field-testing a Web3 prototype in the real world&lt;/li&gt;
&lt;li&gt;Gathering user feedback in one of the world’s top remittance markets&lt;/li&gt;
&lt;li&gt;Why cultural insights matter when designing fintech tools&lt;/li&gt;
&lt;li&gt;Learning that trust and compliance are more important than tech novelty&lt;/li&gt;
&lt;li&gt;Discovering a new use case by talking to business owners&lt;/li&gt;
&lt;li&gt;Pivoting from a consumer remittance app to a B2B payout automation platform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This pivot plays directly to Stellar’s strengths—fast, low-cost transactions and seamless crypto-to-cash conversion—while giving the team a much clearer go-to-market strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Takeaway?
&lt;/h2&gt;

&lt;p&gt;If you're building in Web3: talk to your users early and often.&lt;br&gt;
Innovation means nothing if it doesn’t solve a real problem.&lt;/p&gt;

&lt;p&gt;Freelii’s journey is a masterclass in adaptability—proof that the best ideas are often uncovered after launch, not before.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Up
&lt;/h2&gt;

&lt;p&gt;In Episode 4, we dive into the technical side of the new payout system—how it works, what’s under the hood, and the Stellar features that power it.&lt;/p&gt;

&lt;p&gt;Stay tuned.&lt;/p&gt;

&lt;p&gt;🛠 Want to start building on Stellar? Check out the dev docs here:&lt;br&gt;
&lt;a href="https://developers.stellar.org/docs" rel="noopener noreferrer"&gt;https://developers.stellar.org/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔐 Learn more about passkeys here:&lt;br&gt;
&lt;a href="https://jamesbachini.com/webauthn-passkey-smart-wallets/" rel="noopener noreferrer"&gt;https://jamesbachini.com/webauthn-passkey-smart-wallets/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👀 Catch up on the full series so far:&lt;/p&gt;

&lt;p&gt;📺 &lt;a href="https://youtu.be/FInE2PSx1es" rel="noopener noreferrer"&gt;Episode 1: How a Hackathon Project Became a Web3 Startup&lt;/a&gt;&lt;br&gt;
📺 &lt;a href="https://youtu.be/Azz2QPUX4Xs" rel="noopener noreferrer"&gt;Episode 2: How the Freelii Team Raised $70k+ In Funding&lt;/a&gt;&lt;br&gt;
📺 &lt;a href="https://youtu.be/krWqGMv-Tq4" rel="noopener noreferrer"&gt;Episode 3: User Feedback &amp;amp; The Pivot That Saved The Project&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow the journey. Learn by building.&lt;/p&gt;

</description>
      <category>payments</category>
      <category>webdev</category>
      <category>web3</category>
      <category>stellar</category>
    </item>
    <item>
      <title>Rust + Web3 For All Your Backend Code</title>
      <dc:creator>James Bachini</dc:creator>
      <pubDate>Sun, 01 Jun 2025 04:15:35 +0000</pubDate>
      <link>https://dev.to/jamesbachini/rust-web3-for-all-your-backend-code-3m85</link>
      <guid>https://dev.to/jamesbachini/rust-web3-for-all-your-backend-code-3m85</guid>
      <description>&lt;h2&gt;
  
  
  Introduction: Web3 Backends for Modern Developers
&lt;/h2&gt;

&lt;p&gt;This tutorial will show you how to leverage a React frontend with a Rust smart contract for Soroban as a powerful alternative to traditional database backed applications.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React is the worlds most popular Javascript framework for frontend development&lt;/li&gt;
&lt;li&gt;Stellar smart contract platform offers developers a way to build permissionless, decentralized applications with the performance and safety guarantees of Rust.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Web3?
&lt;/h2&gt;

&lt;p&gt;Before we dive in, let's talk about why you might want to consider this approach:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Decentralization&lt;/strong&gt;: Your data lives on the blockchain rather than a centralized server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Immutability&lt;/strong&gt;: Once written, your data can't be tampered with&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency&lt;/strong&gt;: All operations are public and verifiable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety&lt;/strong&gt;: Rust's memory safety guarantees help prevent common programming errors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt;: Soroban is designed for scalability and efficiency&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Stellar has been around since 2014 and has proven itself as a reliable blockchain network with low transaction costs and fast settlement times.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Basic knowledge of Rust (or willingness to learn!)&lt;/li&gt;
&lt;li&gt;Familiarity with web development concepts&lt;/li&gt;
&lt;li&gt;Node, Rust &amp;amp; Git installed&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setting Up Your Environment
&lt;/h2&gt;

&lt;p&gt;Let's start by getting your development environment ready. We'll need the Soroban CLI to interact with the Stellar network and deploy our contracts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install Rust if you haven't already&lt;/span&gt;
curl &lt;span class="nt"&gt;--proto&lt;/span&gt; &lt;span class="s1"&gt;'=https'&lt;/span&gt; &lt;span class="nt"&gt;--tlsv1&lt;/span&gt;.2 &lt;span class="nt"&gt;-sSf&lt;/span&gt; https://sh.rustup.rs | sh

&lt;span class="c"&gt;# Add the WebAssembly target&lt;/span&gt;
rustup target add wasm32-unknown-unknown

&lt;span class="c"&gt;# Install Soroban CLI&lt;/span&gt;
cargo &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--locked&lt;/span&gt; soroban-cli

&lt;span class="c"&gt;# Verify installation&lt;/span&gt;
soroban &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Project Structure: Stellar Soroban Boilerplate
&lt;/h2&gt;

&lt;p&gt;We'll be working with a boilerplate that provides a solid foundation for building web3 applications. The repository includes both smart contract code written in Rust and a React frontend interface to interact with it.&lt;/p&gt;

&lt;p&gt;All the code for this tutorial is available at: &lt;a href="https://github.com/jamesbachini/Stellar-Soroban-Boilerplate" rel="noopener noreferrer"&gt;https://github.com/jamesbachini/Stellar-Soroban-Boilerplate&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's clone the repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/jamesbachini/Stellar-Soroban-Boilerplate
&lt;span class="nb"&gt;cd &lt;/span&gt;Stellar-Soroban-Boilerplate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The project structure 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;Stellar-Soroban-Boilerplate/
├── soroban/contracts/src
│   └── lib.rs   # A simple key-value store contract
│   └── test.rs  # Unit tests for the contract
├── src/
│   └── App.js   # Frontend example
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Understanding the Key-Value Store Contract
&lt;/h2&gt;

&lt;p&gt;At the heart of our Web3 backend is a key-value store contract. This serves as a simple database replacement that stores data on the Stellar blockchain instead of a traditional database server.&lt;/p&gt;

&lt;p&gt;Let's look at the key parts of this contract:&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;#![no_std]&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;soroban_sdk&lt;/span&gt;&lt;span class="p"&gt;::{&lt;/span&gt;&lt;span class="n"&gt;contract&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;contractimpl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Env&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;symbol_short&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nd"&gt;#[contract]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;StarterContract&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;#[contractimpl]&lt;/span&gt;
&lt;span class="k"&gt;impl&lt;/span&gt; &lt;span class="n"&gt;StarterContract&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Env&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="nf"&gt;.storage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.persistent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="nf"&gt;.events&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.publish&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nd"&gt;symbol_short!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SET"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Env&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Option&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Symbol&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="nf"&gt;.storage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.persistent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Env&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="nf"&gt;.storage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.persistent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;mod&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This contract allows any user to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Store data with &lt;code&gt;set(key, value)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Retrieve data with &lt;code&gt;get(key)&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The set function stores the value on-chain and also fires an event which can be monitored on a frontend for real-time updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building and Deploying Your Contract
&lt;/h2&gt;

&lt;p&gt;Let's build and deploy our key-value store contract to the Soroban network:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo build &lt;span class="nt"&gt;--target&lt;/span&gt; wasm32-unknown-unknown &lt;span class="nt"&gt;--release&lt;/span&gt;

stellar keys generate mywallet

stellar keys fund mywallet

stellar contract deploy  &lt;span class="nt"&gt;--wasm&lt;/span&gt; target/wasm32-unknown-unknown/release/StarterContract.wasm &lt;span class="nt"&gt;--source&lt;/span&gt; YourWalletAlias &lt;span class="nt"&gt;--network&lt;/span&gt; testnet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The stellar keys commands generates a new wallet address or keypair and then funds it with testnet XLM to pay the deployment costs. You should see 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;Contract deployed successfully!
Contract ID: CABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF12345678
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Take note of this Contract ID - You can view it at: &lt;a href="https://stellar.expert/explorer/testnet" rel="noopener noreferrer"&gt;https://stellar.expert/explorer/testnet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll need it later for the frontend to interact with your contract!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Web3 Frontend
&lt;/h2&gt;

&lt;p&gt;Now that we have our contract deployed, let's look at how to interact with it from a web application. The boilerplate includes a simple frontend that demonstrates this.&lt;/p&gt;

&lt;p&gt;First, let's set up a react dev environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's edit src/App.js and modify lines 13, 15 &amp;amp; 16 to replace the contract ID and wallet keys which you can get via the stellar keys tool.&lt;/p&gt;

&lt;p&gt;Let's examine the set 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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleSet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;try&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;inputKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;StellarSdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;nativeToScVal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;symbol&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;inputValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;StellarSdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;nativeToScVal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;symbol&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;account&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAccount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;accountPublicKey&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;tx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;StellarSdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TransactionBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;account&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;fee&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;StellarSdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BASE_FEE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;networkPassphrase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;StellarSdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Networks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TESTNET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addOperation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;contract&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;set&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;inputKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;inputValue&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;build&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;preparedTx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prepareTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;preparedTx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;accountKeypair&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;txResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;preparedTx&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;txResult&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;txResult&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;setKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;(&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;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;setError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed to set value: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&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;The &lt;code&gt;handleSet&lt;/code&gt; function first prevents the default form submission behavior and converts the key and value from form inputs into a special Contract Value format as symbol types. It then retrieves the user's Stellar account and constructs a new transaction using the Stellar SDK. This transaction includes an operation to call the "set" method on a smart contract, passing in the converted key and value parameters.&lt;/p&gt;

&lt;p&gt;After setting a timeout and building the transaction, it's prepared for submission, signed using the user's keypair, and sent to the Stellar network.&lt;/p&gt;

&lt;p&gt;Note that when updating on-chain we have to pay a tx fee to modify the state and cover network/storage costs. When reading data there is no cost and we can just simulate the tx as we will see in the next snippet for the get function.&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.amazonaws.com%2Fuploads%2Farticles%2Fhgc89qqy7f9cx3g5h3k0.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.amazonaws.com%2Fuploads%2Farticles%2Fhgc89qqy7f9cx3g5h3k0.png" alt="Simulated Transaction Slide" width="800" height="450"&gt;&lt;/a&gt;&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleGet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;try&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;inputGetKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;StellarSdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;nativeToScVal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;getKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;symbol&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;account&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAccount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;accountPublicKey&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;tx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;StellarSdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TransactionBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;account&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;fee&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;StellarSdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;BASE_FEE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;networkPassphrase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;StellarSdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Networks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TESTNET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addOperation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;contract&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;get&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;inputGetKey&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;simulateTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;sim&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;decoded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;StellarSdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scValToNative&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;retval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;setGetValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;decoded&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;setError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Failed to get value: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&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;In this function we are using the rpc.simulateTransaction function to ask our RPC node which is our entry point to the network to return the data from it's copy of the blockchain state.&lt;/p&gt;

&lt;p&gt;This data is decoded and returned to be displayed on the frontend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;While our example uses a simple key-value store, you can build much more sophisticated data models. Here is an example of a function that has access control meaning only a certain account can update the ledger.&lt;/p&gt;

&lt;p&gt;In this example the &lt;code&gt;admin: Address&lt;/code&gt; variable would be set in the constructor or somewhere else and then we check that they are the ones that are calling the set function so that only they can update data.&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;#[contractimpl]&lt;/span&gt;
&lt;span class="k"&gt;pub&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;Env&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;store&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="nf"&gt;.storage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.persistent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="nf"&gt;.get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nd"&gt;symbol_short!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"admin"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="nf"&gt;.unwrap&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="nf"&gt;.require_auth&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;store&lt;/span&gt;&lt;span class="nf"&gt;.set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="nf"&gt;.events&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.publish&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nd"&gt;symbol_short!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SET"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;value&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;h2&gt;
  
  
  Handling Data Limitations
&lt;/h2&gt;

&lt;p&gt;Blockchains in their current form are good for storing small amounts of critical data. Scaling efforts are constantly pushing the boundaries of what we can do within a smart contract.&lt;/p&gt;

&lt;p&gt;Here are some strategies for managing larger datasets:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Store Hashes&lt;/strong&gt;: For large files or datasets, store only a hash or reference on-chain, with the full data in IPFS or a centralized service&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paginate Data&lt;/strong&gt;: If you have collections, implement pagination to retrieve data in chunks. Avoid iterating over an array of unknown size i.e. user data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Events&lt;/strong&gt;: For historical data, use blockchain events rather than storing everything. These can be indexed and referred back to as required.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For web developers looking to step into Web3, Soroban provides a gentle learning curve with familiar concepts and excellent documentation. The Stellar network efficiency makes it practical for real-world applications beyond simple experiments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://soroban.stellar.org/docs" rel="noopener noreferrer"&gt;Soroban Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rust-lang.org/" rel="noopener noreferrer"&gt;Rust Programming Language&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/stellar/soroban-examples" rel="noopener noreferrer"&gt;Soroban Examples Repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rust</category>
      <category>web3</category>
      <category>soroban</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>🚀 Stellar Dev Diaries: Episode 2 - Becoming Fundable</title>
      <dc:creator>James Bachini</dc:creator>
      <pubDate>Thu, 08 May 2025 07:06:50 +0000</pubDate>
      <link>https://dev.to/stellar/stellar-dev-diaries-episode-2-becoming-fundable-4kg3</link>
      <guid>https://dev.to/stellar/stellar-dev-diaries-episode-2-becoming-fundable-4kg3</guid>
      <description>&lt;p&gt;Ever wondered what it takes to build a Web3 startup from scratch? In the Stellar Dev Diaries series, we’re following the journey of a team of developers building on the &lt;a href="https://stellar.org/?utm_source=dev.to&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=dev-diaries-s1"&gt;Stellar Network&lt;/a&gt; as they go from hackathon wins to getting funded and launching their product on mainnet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check out Episode 2: Becoming Fundable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/Azz2QPUX4Xs"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Missed Episode 1: &lt;a href="https://youtu.be/FInE2PSx1es" rel="noopener noreferrer"&gt;Watch it here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s It All About?
&lt;/h2&gt;

&lt;p&gt;In this series, we take a deep dive into the experiences of the Freelii team as they build and launch their product on the Stellar Network.&lt;/p&gt;

&lt;p&gt;Throughout the series, you'll get an inside look at what it takes to go from zero to one: turning ideas into products, getting funded, and scaling a startup in a fast-moving space. Each episode will feature real code examples with walkthroughs of the features the team used and the challenges they encountered along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Episode 2
&lt;/h2&gt;

&lt;p&gt;In Episode 2, we explore how the team pivoted from their initial idea into something with broader appeal to secure more hackathon wins. We also hear more about their experiences navigating the grant application process to secure funding from the &lt;a href="https://communityfund.stellar.org/?utm_source=dev.to&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=dev-diaries-s1"&gt;Stellar Community Fund&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;On the technical side, we go deeper into the tools that Jose and Joseph used to build the first version of the Freelii remittance chatbot, discussing some key Stellar features that made it possible. &lt;/p&gt;

&lt;p&gt;In this episode, we dive into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; The experience of going from hackathon partners to full-blown entrepreneurs&lt;/li&gt;
&lt;li&gt; Building a Telegram mini app&lt;/li&gt;
&lt;li&gt; Leveraging &lt;a href="https://stellar.org/learn/anchor-basics" rel="noopener noreferrer"&gt;Stellar Anchors&lt;/a&gt; for seamless on-ramping&lt;/li&gt;
&lt;li&gt; Successfully applying for a grant from the Stellar Community Fund&lt;/li&gt;
&lt;li&gt; Managing early-stage costs to maximize runway&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want to know what it takes to build and launch a product in Web3? Then keep watching as we follow José and Joseph on their journey from idea to mainnet. &lt;/p&gt;

&lt;p&gt;To learn more about the Stellar Anchors feature that we discussed in the episode, check out the tutorials here: &lt;/p&gt;

&lt;p&gt;✒️ &lt;a href="https://jamesbachini.com/stellar-anchor-platform/" rel="noopener noreferrer"&gt;https://jamesbachini.com/stellar-anchor-platform/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📺 &lt;a href="https://youtu.be/57iZMxAr_1Y" rel="noopener noreferrer"&gt;https://youtu.be/57iZMxAr_1Y&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To start building on Stellar, check out the &lt;a href="https://developers.stellar.org/docs/build/smart-contracts/getting-started/setup?utm_source=dev.to&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=dev-diaries-s1"&gt;developer docs here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Follow the Freelii team as they build, adapt, and prepare to launch their product on the Stellar Network. Check out all the episodes here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Episode 1: &lt;a href="https://youtu.be/FInE2PSx1es" rel="noopener noreferrer"&gt;How a Hackathon Project Became a Web3 Startup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Episode 2: &lt;a href="https://youtu.be/Azz2QPUX4Xs" rel="noopener noreferrer"&gt;How The Freeli Team Raised $70k+ In Funding&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Episode 3: &lt;a href="https://youtu.be/krWqGMv-Tq4" rel="noopener noreferrer"&gt;User Feedback &amp;amp; The Pivot That Saved The Project&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>🚀 Stellar Dev Diaries Series: Episode 1 is LIVE!</title>
      <dc:creator>James Bachini</dc:creator>
      <pubDate>Wed, 09 Apr 2025 19:52:43 +0000</pubDate>
      <link>https://dev.to/stellar/stellar-dev-diaries-series-episode-1-is-live-10j2</link>
      <guid>https://dev.to/stellar/stellar-dev-diaries-series-episode-1-is-live-10j2</guid>
      <description>&lt;p&gt;Ever wondered what it takes to build a web3 startup from scratch? In the Stellar Dev Diaries series, we follow the journey of a team of developers building on the &lt;a href="https://stellar.org/?utm_source=dev.to&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=dev-diaries-s1"&gt;Stellar Network&lt;/a&gt; as they go from hackathon win to getting funded and launching on mainnet. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check out Episode 1: How a Hackathon Project Became a Web3 Startup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/FInE2PSx1es"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s It All About?
&lt;/h2&gt;

&lt;p&gt;In the Stellar Dev Diaries, we take a dive deep into the experiences of the Freelii team as they build and launch their product on the Stellar Network.&lt;/p&gt;

&lt;p&gt;As we follow their journey, you'll get the insider's playbook: turning ideas into products, getting funded, transitioning from Web2 to Web3, and scaling a startup in a space that's still being defined. On top of that, each episode will feature real code examples with walkthroughs of the features they used and challenges they encountered. &lt;/p&gt;

&lt;h2&gt;
  
  
  Episode 1
&lt;/h2&gt;

&lt;p&gt;In Episode 1, we meet José Toscano and Joseph Anthony, the brains behind Freelii, a startup that started as a hackathon win right here on Dev.to and went on to win again at Stellar’s Hack Meridian in London.&lt;br&gt;
Realizing that they had a winning partnership and a great product idea, José and Joseph secured funding, quit their 9-to-5 jobs, and went all in on Freelii.&lt;/p&gt;

&lt;p&gt;In this episode, we dive into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The hackathon wins that sparked the journey.&lt;/li&gt;
&lt;li&gt;The moment José and Joseph decided to go all-in.&lt;/li&gt;
&lt;li&gt;Building a working prototype on Stellar.&lt;/li&gt;
&lt;li&gt;Using the PassKeys feature of &lt;a href="https://stellar.org/soroban?utm_source=dev.to&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=dev-diaries-s1"&gt;Soroban&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Getting funded via the &lt;a href="https://communityfund.stellar.org/?utm_source=dev.to&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=dev-diaries-s1"&gt;Stellar Community Fund&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want to know what it takes to build and launch a product in Web3? Then keep watching as we follow José and Joseph on their journey from idea to mainnet. &lt;/p&gt;

&lt;p&gt;If you want to learn more about the PassKeys feature that we discussed in the episode, check out the tutorials here: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/QGUh6CjcNcA" rel="noopener noreferrer"&gt;https://youtu.be/QGUh6CjcNcA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jamesbachini.com/webauthn-passkey-smart-wallets/" rel="noopener noreferrer"&gt;https://jamesbachini.com/webauthn-passkey-smart-wallets/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to start building on Stellar, check out the &lt;a href="https://developers.stellar.org/docs/build/smart-contracts/getting-started/setup?utm_source=dev.to&amp;amp;utm_medium=cpc&amp;amp;utm_campaign=dev-diaries-s1"&gt;developer docs here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Follow the Freelii team as they build, adapt, and prepare to launch their product on the Stellar Network. Check out all the episodes here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Episode 1: &lt;a href="https://youtu.be/FInE2PSx1es" rel="noopener noreferrer"&gt;How a Hackathon Project Became a Web3 Startup&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Episode 2: &lt;a href="https://youtu.be/Azz2QPUX4Xs" rel="noopener noreferrer"&gt;How The Freeli Team Raised $70k+ In Funding&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Episode 3: &lt;a href="https://youtu.be/krWqGMv-Tq4" rel="noopener noreferrer"&gt;User Feedback &amp;amp; The Pivot That Saved The Project&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>devdiaries</category>
      <category>sponsored</category>
    </item>
  </channel>
</rss>
