8:39
16 new notes
preston preston@primal.net · 5m

Welcome to #Nostr! A magical place where you can speak freely and truly own your account, content, and followers. ✨ I've been enjoying Primal! Big shoutout to @miljan and the team! 🚀

1,000 Welcome to Nostr!
pablof7z f7z.io · 9m
100 LFG!
jack jack@primal.net · 8m

Big day today. One of many to come.

Lyn Alden lyn@primal.net · 12m

Unfortunately, the days of using cash for in-person purchases are numbered. It won't be long before non-trivial numbers of e-stores require KYC. Augmented privacy networks like Nostr and Lightning give people a way to transact and communicate behind a pseudonym to do business in a distant store.

ODELL odell@primal.net · 14m

A reminder: self-custody is non-negotiable. Not your keys, not your coins. Not your relay, not your speech.

500 amen
LØPP lopp@primal.net · 21m

Reminder: your seed phrase is a bearer instrument. Treat it like one.

gigi dergigi.com · 34m

The thing about Nostr is that it doesn't need to win. It just needs to exist. The fact that you can't stop it is the entire point.

2,100 this
NVK nvk@primal.net · 47m

Hardware wallets are not optional. If you have more sats than you can afford to lose on a phone, you need cold storage. End of conversation.

JeffG · 18 hours ago

The Technology Adoption Curve for Builders

7 min read 2 comments
HODL · 3 days ago

Nostr will be worth 90-days in US$1,000,000

5 min read 12 comments
LOPP · 6 days ago

How To Create A Nostr Quotes Bot

10 min read 8 comments
Gigi · 8 days ago

Purple Text Orange Highlights

6 min read 3 comments
Lyn Alden · 11 days ago

The Fiscal Endgame and Why Hard Money Wins

18 min read 47 comments
Calle · 13 days ago

Cashu in 2026: What Ecash Got Right About Privacy

9 min read 14 comments
pablof7z · 15 days ago

NDK Patterns: Building Nostr Clients That Don't Suck

12 min read 9 comments
ODELL · 17 days ago

Self-Custody is Not a Spectrum

4 min read 22 comments
Preston · 19 days ago

Why I Stopped Caring About Block Size

8 min read 31 comments
NVK · 22 days ago

A Field Guide to Hardware Wallet Threat Models

14 min read 18 comments
LIVE
RABBIT HOLE REC... is live 18m
Bitcoin All Time High, Where To Next? | RABBIT HOLE RECAP #145 Live Started 18m ago ▶ 112
preston replied to your note 33m

looking great, ship it

+45
Princ Filip liked your note 1h

Welcome to #Nostr! A magical place where you can speak freely and truly own your account, content, and followers.

+10
ODELL bookmarked your note 2h

This is my post that is getting all the attention. Think of the zaps, likes, replies and re-posts.

+2
jack highlighted your article 3h

Social interactions benefit from the address book represented by the Nostr

Users

jack
ODELL
HODL
gigi
Paul Keati...
Lyn Alden
PabloF7z
NVK
Erik Casen
TK
preston
Calle

Follow Packs

Freedom Tech Signal ODELL
Bitcoin Builders JeffG
today
yesterday
Latest Latest notes by your follows
Latest with Replies Latest notes and replies by your follows
Latest Videos Primal search results
It's Funny Because It's True and It's N... Primal search results
Trending Images Primal search results
Trending 1h Global trending notes from the last hour
Trending 24h Global trending notes from the last 24 hours
Trending 7d Global trending notes from the past 7 days
Nostr Reads Latest reads from your network
All reads Latest global reads
Bitcoin Reads Bitcoin Topic Reads from Primal
Nostr Reads Nostr Topic Reads from Primal
Philosophy Reads Philosophy Topic Reads from Primal
All Notifications Based on your notification settings
Zaps Show incoming zaps
Replies Show replies in your threads
Mentions Show mentions of you or your content
Reposts Show reposts of your content
Explore Find people, feeds, media
Feed Gallery Browse feed gallery
Follow Packs Curated lists of users to follow
Zaps Top zaps on Nostr today
Media Top images and videos on Nostr today
Spark Wallet miljan@primal.net
172,650 sats
Spark Wallet preston@primal.net
540,000 sats
NWC: Alby Hub alby.miljan.dev
18,420 sats

Account

Options and settings

miljan

miljan@primal.net

135 Following 345 Followers

Thread
preston preston@primal.net

Welcome to #Nostr! A magical place where you can speak freely and truly own your account, content, and followers. ✨ I've been enjoying Primal! Big shoutout to @miljan and the team! 🚀

3,001 Welcome to Nostr! 1,500 Welcome to Nostr! 500
Monday, April 8, 2024 · 10:29 AM
152 Replies 52 Zaps 84 Likes 6 Reposts
24 2,444 8 1
LØPP lopp@lopp.net · 18m ago

Welcome aboard. This place rewards patience — the relays you pick now will shape what your feed feels like a year from now.

pablof7z f7z.io · 32m ago

Welcome! Don't be shy about pruning your follow list aggressively. The signal-to-noise ratio is whatever you make it.

500 truth
jack jack@primal.net · 41m ago

Glad to have you. The early days of any open protocol are the most interesting ones.

ODELL odell@primal.net · 1h ago

Big +1 for the team. Primal has been doing real work on the client side while everyone else is still arguing about NIPs.

gigi dergigi.com · 2h ago

Welcome. Pro tip: zap the people whose posts genuinely shifted something for you. It's the closest thing this protocol has to a thank-you note.

2,100 this
Lyn Alden lyn@primal.net · 3h ago

Glad you're here. The interesting conversation has been migrating off legacy platforms for a while — Nostr is where most of it has landed.

NVK nvk@coldcard.com · 4h ago

Welcome. Get a key backup strategy in place before you post anything you'd miss.

JeffG jeffg@primal.net

The Technology Adoption Curve for Builders

May 12, 2026 · 7 min read · 18 hours ago

Most builders read Rogers and walk away with the wrong lesson. The curve isn't a roadmap — it's a description of who you can credibly reach with the product you can credibly ship. This piece is about how to choose your wedge.

100,000 🎉🚀🔥

The canonical adoption curve was first described by Everett Rogers — a 1962 framing that we keep mistaking for a description and treating as prescription.

For builders, the curve is rarely the question. The question is which segment you can credibly reach with the surface you can credibly ship.

A lot of teams skip this step entirely. They build for "everyone" and then act surprised when the product feels like it was built for nobody. The curve doesn't flatten because adoption is hard. It flattens because each segment requires a different product, not a different marketing campaign.

Adoption is never about the technology itself.

Innovators (2.5%)

These are the people who try the thing before it works. They are also the people who tell you, with conviction, that it works.

Innovators are valuable not because they're representative — they aren't — but because they're willing to absorb the cost of a half-built product in exchange for the option value of being early. Treat them as collaborators, not customers. They'll write your changelog for you.

The trap is mistaking innovator enthusiasm for early-majority readiness. Innovators love the thing because it's broken. The early majority will reject the thing for exactly the same reason.

Early Adopters (13.5%)

Early adopters are pragmatists who've been burned. They want the thing to work, but they've seen enough vapor to be suspicious of anyone selling a vision before a product. They will pay for the version that ships, not the version on the roadmap.

The Chasm

Geoffrey Moore's 1991 addendum to Rogers — Crossing the Chasm — describes the gap between early adopters and the early majority as the single most under-priced risk in tech. Most products die in this gap. Not because they're bad, but because the thing that worked for early adopters doesn't work for the next cohort.

The way through is unromantic: you pick one beachhead segment, dominate it completely, and use that as a reference for the next. There is no "broad market launch." There is a series of beachheads, ordered correctly.

#adoption#builders#go-to-market#product strategy#rogers
2 540 18 1

Comments

ODELL odell@primal.net · 1h

Nailed it. The chasm is the only thing that matters.

pablof7z f7z.io · 2h

The "beachhead segment" framing is underrated. Most teams I see try to build a Swiss-army-knife product and end up with a thing that nobody loves.

Lyn Alden lyn@primal.net · 3h

The Bitcoin parallel is striking. The original adopters wanted a peer-to-peer cash system that mostly didn't work. The early majority wanted a store of value that mostly did. Two different products, same network.

5,000 this is the take
gigi dergigi.com · 5h

I'd add: the order of the beachheads matters more than the choice of any single beachhead. Get the sequencing wrong and you spend years rebuilding the product for a market that never showed up.

Messages All conversations
David King 5s

Just followed up on email. Sorry I missed yesterday. Hopefully we can still meet

PABLOF7z 2023-05-18
preston 5d

Loving the new Primal build 👍

ODELL 5d

kinda hilarious that uncle Jim has been a known term, I made it up drunk on rhr

Max 5d

These look great Miljan. Super fast!

TK 5d

Latest Android release is great! pull down to refresh and I can mostly

ROCKSTAR 5d

Ovo vidis po objavama, samo jurim

yegorpetrov 2023-05-12
preston preston@primal.net
hey man!
how close is NDK to prime time?
12 minutes ago
NDK is functional, not feature-complete by any means, but interests is starting to pick up; kieran is looking into integrating it into snort, verbiricha into habla.news
9 minutes ago
that's excellent news
5 minutes ago
Love to see everyone aligned like this
9 minutes ago

VERSION 3.5.9

Sessions disconnected.

PrimalWeb

Last Session: May 17, 2026 12:05 PM

Auto start session

PrimalWeb

Started on: May 17, 2026 12:05 PM

Read Public Key
Encrypt
Decrypt
User Metadata
Publish Note
Follows
Encrypted Direct M...
Event Deletion Req...
Repost
Reaction
Direct Message

PrimalWeb

Started on: May 17, 2026 12:05 PM

Application-specific Data

May 17, 2026 12:05:59 PM

Signed

ID:
8d58c44be957...ee111af9acf6
Pubkey:
c0f582a48863...d9b8ae6f8890
Event kind:
30078 - Application-specific Data
Created at:
1779012358
Tags:
"d", "Primal-Web App", "set_app_subs_..."
Content:
{"subkey":"user-nwc","settings":{"nwcList":[["Primal Remote Wallet","2pBsmGGASJVVn1ugZF9qSEDpuBDJ/mfG+lUyJk5uC1JqsJ/Nux5DjyiPag8hA3A61fjQuL2j1rc5KSM3daGIjtVizfjURLqIPkBIhoBG+WkrBa72Z5CTgZIz0NTs5zlAwFLFOhXCDUkkq3s1v+IoLpp/T5bnA56WpHqGin1skpN0ib20Bmm1Ub4jc91hj6JVPGgeOzXiZMryXHtNkaz/KKkh+wfh3vSnzPDgZQA3+cjZicwtj+zYjU0...
Send
Recent
Point at a QR to send
Lightning invoice, address, or Bitcoin address
Sending To
Recipient address@primal.net
0 sats
Add a message
Sending…

Sending 0 sats
to recipient

Success

Success! 0 sats sent to
recipient

Receive via Lightning
Your Lightning Address: miljan@primal.net
Copied to clipboard
Payment Received

Received 2,100 sats
from bob

Zap Received
420 sats
ODELL odell@primal.net

Great having you at Bitcoin Park last week. Looking forward to next time!

Note Met ODELL at Bitcoin Park
DateMay 17, 2026, 2:32 PM
StatusPaid
Transaction TypeNostr Zap
Current USD value$0.28
Original USD value$0.28
Transaction Fee0 sats
Invoice lncpq1m…p5dl3jh0dkj0
preston preston@primal.net · 5m

Welcome to #Nostr! A magical place where you can speak freely and truly own your account, content, and followers. ✨ I've been enjoying Primal! Big shoutout to @miljan and the team! 🚀

22 2,475 56 14
Wallet

Wallet Balance: 172,650 sats

This wallet has not been backed up. It is important to back up your wallet so you don't lose access to your funds.

LN address miljan@primal.net

You can change your Nostr Lightning Address (for receiving zaps) in your profile settings.

Open the wallet when Primal starts

You can choose to hide small transactions to avoid spam in your transaction list

Write down your wallet recovery phrase so you don't lose access to your funds

If you have an existing wallet that you wish to use with your Nostr account, you can restore it here using your 12-24 word recovery phrase.

Download your entire wallet transaction history in CSV format

Alternatively you can connect to an external lightning wallet via Nostr Wallet Connect

App Daily Budget Revoke
Olas 10,000 sats
Amethyst 100,000 sats

You can connect your Primal Wallet to other Nostr apps via Nostr Wallet Connect to enable zapping and payments.

To keep running reliably it's necessary to run wallet service in the background.

Download logs history for all connected apps in CSV format

Backup Wallet

We are going to display your wallet recovery phrase on the next screen.

IMPORTANT: Primal does not have access to the funds in your wallet. You have sole custody of your wallet via the recovery phrase. If you lose your recovery phrase, Primal will not be able to restore your funds.

embrace 1
open 2
universe 3
acquire 4
entire 5
section 6
direct 7
loud 8
acoustic 9
erupt 10
brave 11
champion 12

This is your wallet recovery phrase. To backup your wallet, simply write these words down in the correct order.

The words are not case sensitive and they are separated by spaces. We will ask you to verify on the next screen.

Your wallet has been backed up. You now hold the keys to your bitcoin! Please confirm the three points below.

I understand that:

  • My funds are not held by Primal
  • If my device gets lost or stolen, the only way to recover my funds is via the wallet recovery phrase
  • It is my sole responsibility to keep my recovery phrase safe
Restore Existing Wallet

We support recovery of any existing bitcoin wallet on the Spark network. Recovery phrases are 12 to 24 words long.

Restoring your wallet...

Wallet Upgrade
  • It will take less than a minute
  • We'll transfer your wallet balance
  • We'll copy your transaction history
  • You'll keep your lightning address

Please keep Primal open
until the upgrade process is done.

Questions? Check out our FAQs.

Upgrading...

Creating your new Spark wallet...

Please keep Primal open
until the upgrade process is done.

Success

Wallet upgraded!

Primal Wallet

Non-custodial Bitcoin wallet on Android and iOS. Shipped in Primal 3.0, March 2026.

Shipped Mar 2026Android · iOSBitcoin · Lightning
Play one of

Tap the phone any time to pause and explore.

“the primal team spent a ton of time working on the new wallet and the migration flow. miljan refused to release until it was perfect. full nostr integration, seamless onchain and lightning, no kyc. massive win.”
Matt Odell @ODELL · 2026-03-17
“the wallet upgrade migration path is super easy. great work and kudos to the primal team.”
Derek Ross · 2026-03-17
“Liking the new Primal app. Wallet migration went seamlessly. Great work Primal team!”
Justin Moon @justinmoon · 2026-03-18
“I just updated it too, honestly feels smooth. You can tell how much work went into this… the no KYC + seamless lightning/onchain combo is a game changer. Big win for primal.”
Benking · 2026-03-17

Challenge

Primal’s social client treats Bitcoin as part of the experience: zaps, balances, and payments live inside the feed. Third-party wallets could not deliver that experience, so a wallet had to be built into the app itself. The first one was custodial. We built the app side; Strike held the funds. It shipped on Android, solved the problem, and ran in production for more than two years. The trade-off was that a custodial wallet also made Primal a custodial, KYC-bound service, which is not what Primal set out to be. The real job followed from that: find a non-custodial path, build the wallet for it, and move the entire userbase across in a single tap, without losing a sat.


What we built

The non-custodial work delivered three things: the wallet itself, the system that moved everyone onto it, and the shared library it ships as.

The non-custodial wallet. The new wallet is non-custodial. Keys live on the user’s device, not on anyone’s servers. It covers Bitcoin on-chain and Lightning in one place, with send, receive, and transaction history, and no KYC at any step. It is built on the Spark network, through the Breez SDK, and it implements Nostr Wallet Connect, so other Nostr apps can request payments against it with the user’s approval.

The one-tap migration. Moving a user off the custodial wallet is a single tap. Behind it sit new backend endpoints, a feature flag, and a dual-wallet state: through the migration window a user can hold both wallets at once. Once migrated, the old custodial wallet is locked rather than deleted, and hidden from view. After the window closed, the custodial wallet was sunset, and the app stays aware enough to show only the wallet that is live.

Cross-platform library. The wallet is not only the Android product. Its logic is shared multiplatform code, packaged as a standalone library that runs in production on Primal’s iOS app as well. It is one of the two libraries the wider Primal engagement extracted from the Android codebase, alongside the remote signer.


Technical decisions

Four decisions shaped the work more than the rest.

The research, and build versus buy. Getting off custodial started as a research problem. The search for a non-custodial design led to the Spark network, and a round of experiments and test code proved it out. That raised the next question: build directly against Spark, or adopt an existing library. We chose the Breez SDK. A wallet is one part of a much larger app, and a feature-rich, maintained SDK was the stable choice over a from-scratch integration we would carry forever. The team aligned on it together.

Built to migrate again. Because Appollo41 ran the research, we could shape the deliverable, not just build to spec. The wallet became a multi-platform library, shared across Android and iOS, and an architecture-agnostic one: it treats the wallet backend as swappable, able to host a custodial wallet, a non-custodial one, or a fully native self-custodial design. Spark is the best option on the market today, not a permanent commitment. When something better aligned with Primal’s values appears, moving to it is a change the library is already built to absorb. The migration just shipped will not be the last, and the next will be easier.

The migration, designed end to end. The migration was designed in full before any of it was built, then taken to the team. Alternatives were proposed and stress-tested together against every failure mode the group could name, and the work converged back on the original. The design runs a state machine on the device and a matching one on the backend, tracking the same stages, so both sides always agree on where a migration stands. An interrupted transfer resumes exactly where it stopped. A networking hiccup is a pause, never a lost sat.

Infrastructure reuse. A non-custodial wallet lives on the user’s device, and Nostr Wallet Connect means other apps have to reach it there. That keep-alive layer already existed, built earlier for the remote signer, which faces the same problem. One piece of infrastructure paid for a second feature. On top of NWC we added an audit log that product had not asked for, a recoverable record if anything ever needs reconstructing after the fact.


Outcome

The migration shipped in Primal 3.0. Launch was the quiet kind, which for a wallet migration is the whole point.

The numbers. Roughly 14,000 users moved onto the new wallet within the first two weeks, carrying hundreds of millions of sats between them. There were zero technical defects in production.

No longer custodial. With the migration complete and the old wallet retired, Primal no longer holds its users’ funds, and no longer needs KYC to run a wallet. That was the point of the engagement. It is the outcome that outlasts the launch-week numbers.


The wallet is one part of a three-year Primal engagement.


← All work

Have an app that needs building?

30-minute call with the founder. No sales script. Just a real conversation.
Imagine you and us. So happy, together. 🎵

Book a Discovery Call