<?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>Forem: john Smith</title>
    <description>The latest articles on Forem by john Smith (@john_smith_e4067a855e0c61).</description>
    <link>https://forem.com/john_smith_e4067a855e0c61</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%2F3874087%2F2713c1b8-985e-4a7c-a891-370573ce179a.png</url>
      <title>Forem: john Smith</title>
      <link>https://forem.com/john_smith_e4067a855e0c61</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/john_smith_e4067a855e0c61"/>
    <language>en</language>
    <item>
      <title>I Thought Building a Simple Web3 Tool Was the Hard Part (It Wasn’t)</title>
      <dc:creator>john Smith</dc:creator>
      <pubDate>Sat, 02 May 2026 02:47:30 +0000</pubDate>
      <link>https://forem.com/john_smith_e4067a855e0c61/i-thought-building-a-simple-web3-tool-was-the-hard-part-it-wasnt-29dj</link>
      <guid>https://forem.com/john_smith_e4067a855e0c61/i-thought-building-a-simple-web3-tool-was-the-hard-part-it-wasnt-29dj</guid>
      <description>&lt;p&gt;A few months ago I started building a small tool on Solana.&lt;/p&gt;

&lt;p&gt;Nothing crazy.&lt;/p&gt;

&lt;p&gt;Just something that lets you:&lt;/p&gt;

&lt;p&gt;create a token&lt;br&gt;
attach metadata&lt;br&gt;
add liquidity&lt;br&gt;
and actually use it&lt;/p&gt;

&lt;p&gt;That was the idea.&lt;/p&gt;

&lt;p&gt;Keep it simple.&lt;/p&gt;

&lt;p&gt;The Plan Was Pretty Straightforward&lt;/p&gt;

&lt;p&gt;I didn’t want to build another “platform”.&lt;/p&gt;

&lt;p&gt;No custody.&lt;br&gt;
No custom smart contracts I fully control.&lt;/p&gt;

&lt;p&gt;Just an interface that prepares transactions and lets users sign everything in their wallet.&lt;/p&gt;

&lt;p&gt;Basically:&lt;/p&gt;

&lt;p&gt;backend prepares → wallet signs → chain executes&lt;/p&gt;

&lt;p&gt;In my head, that felt clean and simple.&lt;/p&gt;

&lt;p&gt;The First Reality Check&lt;/p&gt;

&lt;p&gt;The blockchain part wasn’t the hard part.&lt;/p&gt;

&lt;p&gt;Creating a token? fine&lt;br&gt;
Sending a transaction? fine&lt;/p&gt;

&lt;p&gt;The problems started when everything had to work together.&lt;/p&gt;

&lt;p&gt;Everything Around the Chain Is… Messy&lt;/p&gt;

&lt;p&gt;You don’t just “create a token”.&lt;/p&gt;

&lt;p&gt;You end up dealing with:&lt;/p&gt;

&lt;p&gt;metadata uploads (IPFS, gateways, broken links)&lt;br&gt;
DEX integrations (each one slightly different)&lt;br&gt;
APIs that don’t behave consistently&lt;br&gt;
rate limits you don’t control&lt;br&gt;
random failures you can’t reproduce&lt;/p&gt;

&lt;p&gt;Some days it felt like:&lt;/p&gt;

&lt;p&gt;API returns 200 → empty data&lt;br&gt;
retry → works&lt;br&gt;
retry again → rate limited&lt;/p&gt;

&lt;p&gt;No real logic behind it.&lt;/p&gt;

&lt;p&gt;I Had to Add a Backend Proxy&lt;/p&gt;

&lt;p&gt;At first I was calling everything directly from the frontend.&lt;/p&gt;

&lt;p&gt;Bad idea.&lt;/p&gt;

&lt;p&gt;Moved everything into a Node/Express backend:&lt;/p&gt;

&lt;p&gt;transaction building&lt;br&gt;
DEX calls&lt;br&gt;
metadata handling&lt;/p&gt;

&lt;p&gt;That alone made things easier to reason about.&lt;/p&gt;

&lt;p&gt;At least all the chaos lives in one place now.&lt;/p&gt;

&lt;p&gt;“Non-Custodial” Sounds Simple (It’s Not)&lt;/p&gt;

&lt;p&gt;“Users sign their own transactions” sounds great.&lt;/p&gt;

&lt;p&gt;But it changes everything.&lt;/p&gt;

&lt;p&gt;you don’t control execution&lt;br&gt;
you can’t easily retry&lt;br&gt;
you depend on wallet behavior&lt;br&gt;
UX gets tricky fast&lt;/p&gt;

&lt;p&gt;If something fails, you can’t fix it for the user.&lt;/p&gt;

&lt;p&gt;You just… try again.&lt;/p&gt;

&lt;p&gt;Rate Limits Became a Real Issue&lt;/p&gt;

&lt;p&gt;Some endpoints were getting hit way more than expected.&lt;/p&gt;

&lt;p&gt;So I added:&lt;/p&gt;

&lt;p&gt;per-wallet limits when possible&lt;br&gt;
fallback to IP&lt;/p&gt;

&lt;p&gt;Then Redis wasn’t always available.&lt;/p&gt;

&lt;p&gt;So I added a memory fallback.&lt;/p&gt;

&lt;p&gt;Not perfect, but at least things don’t break.&lt;/p&gt;

&lt;p&gt;External Services Are Not Reliable&lt;/p&gt;

&lt;p&gt;For token images / metadata I used:&lt;/p&gt;

&lt;p&gt;Uploadcare&lt;br&gt;
Pinata (IPFS fallback)&lt;/p&gt;

&lt;p&gt;Different formats everywhere:&lt;/p&gt;

&lt;p&gt;ipfs://...&lt;br&gt;
gateway URLs&lt;br&gt;
CDN links&lt;/p&gt;

&lt;p&gt;At some point I just gave up trying to “support everything properly”.&lt;/p&gt;

&lt;p&gt;Now everything gets normalized on the backend.&lt;/p&gt;

&lt;p&gt;One format. One output.&lt;/p&gt;

&lt;p&gt;Less surprises.&lt;/p&gt;

&lt;p&gt;The Part I Didn’t Expect&lt;/p&gt;

&lt;p&gt;I thought I’d spend most of my time on:&lt;/p&gt;

&lt;p&gt;blockchain logic&lt;br&gt;
token creation&lt;br&gt;
transactions&lt;/p&gt;

&lt;p&gt;I didn’t.&lt;/p&gt;

&lt;p&gt;Most of the time went into:&lt;/p&gt;

&lt;p&gt;handling weird API responses&lt;br&gt;
fixing edge cases&lt;br&gt;
retry logic&lt;br&gt;
cleaning inconsistent data&lt;/p&gt;

&lt;p&gt;The glue code is the real work.&lt;/p&gt;

&lt;p&gt;When It Started to Feel Different&lt;/p&gt;

&lt;p&gt;There was a moment where nothing visually changed…&lt;/p&gt;

&lt;p&gt;but the codebase felt different.&lt;/p&gt;

&lt;p&gt;Less fragile.&lt;br&gt;
Less “don’t touch this part”.&lt;br&gt;
More predictable.&lt;/p&gt;

&lt;p&gt;That’s when I knew it was actually improving.&lt;/p&gt;

&lt;p&gt;Something I Really Didn’t Expect&lt;/p&gt;

&lt;p&gt;I thought once the tool worked, builders would just… start using it.&lt;/p&gt;

&lt;p&gt;That didn’t happen.&lt;/p&gt;

&lt;p&gt;Finding Builders Is Way Harder Than Building&lt;/p&gt;

&lt;p&gt;I tried a few things:&lt;/p&gt;

&lt;p&gt;posting on Twitter&lt;br&gt;
sharing in communities&lt;br&gt;
reaching out to people&lt;/p&gt;

&lt;p&gt;Most of it either gets ignored or feels forced.&lt;/p&gt;

&lt;p&gt;And honestly, I get it.&lt;/p&gt;

&lt;p&gt;There’s a lot of noise in Web3.&lt;/p&gt;

&lt;p&gt;People don’t just switch tools because something new exists.&lt;/p&gt;

&lt;p&gt;Even if it’s better.&lt;/p&gt;

&lt;p&gt;What I’m Starting to Realize&lt;/p&gt;

&lt;p&gt;It’s not really about “finding users”.&lt;/p&gt;

&lt;p&gt;It’s more like:&lt;/p&gt;

&lt;p&gt;being where builders already are&lt;br&gt;
understanding what they actually need&lt;br&gt;
not overbuilding before that&lt;/p&gt;

&lt;p&gt;Right now I’m not aiming for 100 users.&lt;/p&gt;

&lt;p&gt;I’d be happy with 2–3 real builders using it and telling me what’s broken.&lt;/p&gt;

&lt;p&gt;Where It’s At Right Now&lt;/p&gt;

&lt;p&gt;It works.&lt;/p&gt;

&lt;p&gt;Not perfectly, but:&lt;/p&gt;

&lt;p&gt;tokens can be created&lt;br&gt;
transactions are signed in the wallet&lt;br&gt;
liquidity can be added&lt;br&gt;
no funds are ever held&lt;/p&gt;

&lt;p&gt;That was the core goal.&lt;/p&gt;

&lt;p&gt;Final Thought&lt;/p&gt;

&lt;p&gt;Building in Web3 isn’t just about the chain.&lt;/p&gt;

&lt;p&gt;It’s about everything around it.&lt;/p&gt;

&lt;p&gt;unreliable APIs&lt;br&gt;
wallet UX&lt;br&gt;
edge cases&lt;br&gt;
user behavior&lt;/p&gt;

&lt;p&gt;The chain is actually the most predictable part.&lt;/p&gt;

&lt;p&gt;If you’ve built something similar, I’m curious:&lt;/p&gt;

&lt;p&gt;how did you handle unreliable APIs?&lt;br&gt;
did you struggle getting real users early on?&lt;/p&gt;

&lt;p&gt;Still figuring this out as I go.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>solana</category>
      <category>nextjs</category>
      <category>backend</category>
    </item>
    <item>
      <title>Dev Journal — Building a Non-Custodial Token Tool on Solana</title>
      <dc:creator>john Smith</dc:creator>
      <pubDate>Wed, 29 Apr 2026 00:01:02 +0000</pubDate>
      <link>https://forem.com/john_smith_e4067a855e0c61/dev-journal-building-a-non-custodial-token-tool-on-solana-25d4</link>
      <guid>https://forem.com/john_smith_e4067a855e0c61/dev-journal-building-a-non-custodial-token-tool-on-solana-25d4</guid>
      <description>&lt;p&gt;Day 3&lt;/p&gt;

&lt;p&gt;Added a proxy layer for external calls.&lt;/p&gt;

&lt;p&gt;Everything goes through backend now:&lt;/p&gt;

&lt;p&gt;DEX interactions&lt;br&gt;
quotes&lt;br&gt;
token stuff&lt;/p&gt;

&lt;p&gt;Why&lt;br&gt;
Didn’t want the frontend juggling 5 APIs directly.&lt;/p&gt;

&lt;p&gt;Problem&lt;br&gt;
External APIs are unreliable.&lt;/p&gt;

&lt;p&gt;Sometimes:&lt;/p&gt;

&lt;p&gt;random 500&lt;br&gt;
sometimes 429&lt;br&gt;
sometimes just empty responses&lt;/p&gt;

&lt;p&gt;Decision&lt;br&gt;
Centralize everything in the proxy and handle retries there.&lt;/p&gt;

</description>
      <category>api</category>
      <category>architecture</category>
      <category>devjournal</category>
      <category>web3</category>
    </item>
    <item>
      <title>Dev Journal — Building a Non-Custodial Token Tool on Solana</title>
      <dc:creator>john Smith</dc:creator>
      <pubDate>Tue, 21 Apr 2026 00:03:54 +0000</pubDate>
      <link>https://forem.com/john_smith_e4067a855e0c61/dev-journal-building-a-non-custodial-token-tool-on-solana-41m3</link>
      <guid>https://forem.com/john_smith_e4067a855e0c61/dev-journal-building-a-non-custodial-token-tool-on-solana-41m3</guid>
      <description>&lt;p&gt;Day 2&lt;/p&gt;

&lt;p&gt;Worked on the token creation flow.&lt;/p&gt;

&lt;p&gt;built /api/create-token&lt;br&gt;
backend prepares transactions&lt;br&gt;
frontend signs via wallet (Phantom)&lt;/p&gt;

&lt;p&gt;Why&lt;br&gt;
I wanted to keep everything non-custodial.&lt;/p&gt;

&lt;p&gt;Problem&lt;br&gt;
Where does signing actually happen?&lt;/p&gt;

&lt;p&gt;At first I was mixing things:&lt;/p&gt;

&lt;p&gt;some logic frontend&lt;br&gt;
some backend&lt;/p&gt;

&lt;p&gt;It got messy fast.&lt;/p&gt;

&lt;p&gt;Decision&lt;br&gt;
Backend builds → wallet signs → that’s it.&lt;/p&gt;

&lt;p&gt;No exceptions.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>blockchain</category>
      <category>devjournal</category>
      <category>web3</category>
    </item>
    <item>
      <title>Dev Journal — Building a Non-Custodial Token Tool on Solana</title>
      <dc:creator>john Smith</dc:creator>
      <pubDate>Fri, 17 Apr 2026 00:04:24 +0000</pubDate>
      <link>https://forem.com/john_smith_e4067a855e0c61/dev-journal-building-a-non-custodial-token-tool-on-solana-c7k</link>
      <guid>https://forem.com/john_smith_e4067a855e0c61/dev-journal-building-a-non-custodial-token-tool-on-solana-c7k</guid>
      <description>&lt;p&gt;Day 1&lt;/p&gt;

&lt;p&gt;Started by figuring out the overall architecture.&lt;/p&gt;

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

&lt;p&gt;Next.js for the frontend&lt;br&gt;
Node/Express as a backend proxy&lt;br&gt;
MongoDB for anything off-chain&lt;/p&gt;

&lt;p&gt;Didn’t want to write custom smart contracts right away. Too much overhead. So I decided early:&lt;/p&gt;

&lt;p&gt;→ use native SPL tokens&lt;br&gt;
→ plug into existing DEXs (Orca / Raydium)&lt;/p&gt;

&lt;p&gt;Why&lt;br&gt;
I’m not trying to rebuild the ecosystem. Just orchestrate it.&lt;/p&gt;

&lt;p&gt;Problem&lt;br&gt;
Too many choices for DEX integrations. Nothing standardized.&lt;/p&gt;

&lt;p&gt;Decision&lt;br&gt;
Start with Orca (simpler), keep Raydium as fallback.&lt;/p&gt;

</description>
      <category>solana</category>
      <category>nextjs</category>
      <category>web3</category>
    </item>
    <item>
      <title>I built a non-custodial token launcher on Solana</title>
      <dc:creator>john Smith</dc:creator>
      <pubDate>Sat, 11 Apr 2026 23:27:43 +0000</pubDate>
      <link>https://forem.com/john_smith_e4067a855e0c61/i-built-a-non-custodial-token-launcher-on-solana-4b53</link>
      <guid>https://forem.com/john_smith_e4067a855e0c61/i-built-a-non-custodial-token-launcher-on-solana-4b53</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Designed to connect with DEXs like Raydium&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not just an idea — it's already functional and evolving.&lt;/p&gt;




&lt;p&gt;What I’m trying to solve is not speed.&lt;/p&gt;

&lt;p&gt;It’s structure.&lt;/p&gt;

&lt;p&gt;Launching fast is easy.&lt;br&gt;&lt;br&gt;
Launching properly is not.&lt;/p&gt;




&lt;p&gt;If you're building in Web3 or have worked with Solana,&lt;br&gt;
I’d be interested in your feedback.&lt;/p&gt;

&lt;p&gt;And if you're the kind of builder who likes shipping real products,&lt;br&gt;
feel free to reach out.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>solana</category>
      <category>blockchain</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
