I still can’t believe I built this…

Gift Nostr accounts, propose content to Nostr users, and migrate your existing social media accounts.

Instagram. TikTok. Twitter. Substack.

My site never sees your key or a new users’ key. How? Check the comments.

I’m sure this will break, but damn I’ve been having fun building this.

Will make a proper tutorial video after battle hardening it.

Nostr is the final destination for your content. We need more bridges over here and powerful onboarding tools for our power users.

Taking a screen break. Let me know how it goes.. I’m nervous.

https://ownyourposts.com

https://blossom.primal.net/28710f4d39565fdf85af414996572678c002491c1dae352c3574854632add201.mov

Reply to this note

Please Login to reply.

Discussion

I’ve never felt right about creating an account for someone and then just giving them an nsec.. here’s the (possible) solution:

here's how the flow works for gifting. "Gift Flow Explained

1. Gift Creation (by you, the gifter)

• You select posts/articles on /gift

• Data is stored in the database with status pending

• No keypair is created yet

2. Worker Processing (server-side)

• Worker picks up pending gifts

• Generates temporary/ephemeral keypair (generate_temp_keypair() in worker.py:754)

• Downloads media from Instagram/TikTok

• Uploads to Blossom using the temp keypair for authentication (kind 24242 auth events)

• Gift status changes to ready

Key insight: Blossom is content-addressed — URLs are based on the SHA-256 hash of the file content. So the same file always gets the same URL (blossom.primal.net/) regardless of who uploaded it. The temp keypair is just for upload authorization, not for identity.

3. Gift Claiming (recipient’s browser)

When the recipient opens the claim link:

• A brand new random keypair is generated client-side in their browser:

const privateKeyBytes = crypto.getRandomValues(new Uint8Array(32));

• This happens at gift-claim/[token]/+page.svelte:118–130

• The keypair never leaves their browser — it’s not sent to your server

• Posts are signed and published to Nostr relays using this keypair

• Recipient is shown their nsec and prompted to save it

Your Access

Correct — you (the owner of ownyourposts.com) have zero access to the recipient’s private key because:

1. It’s generated with crypto.getRandomValues() in the browser

2. It’s never transmitted to the server

3. Only the signed Nostr events go to relays (public data)

The ephemeral worker keypair is discarded after upload — it was only used to authorize the Blossom upload, not to establish any ongoing identity.

I think this is really cool, but I don't understand why all y'all primal folks are so determined to have every nsec hot. It's like there is an allergy to offline key gen.

@Paul estuve intentando crear algo similar a pedido de nostr:nprofile1qqsy6sd8e0ym0algfpx32jv64y2pcule5wwrwewvt4trr7s705mr8nqpz4mhxue69uhkummnw3ezuum9wgcjumn9wshsz9mhwden5te0wpshjv339ehx7um5wgcjucm0d5hszymhwden5te0wp6hyurvv4cxzeewv4ej7k8fene pero me cagué a palos y se me hizo imposible, pero vos lo lograste 🫡💪💪. MICA acá está la mejor herramienta, vamos a probarla y usarla 👌

Vamoooos!!!

Dude this is so illegal, good energy but please, yo, let's grow legally. Or mostly legally!

Good point haha :modCheck:

Needs NIP-05 integrated verification based off the source profile data before unlocking the ability for someone to impersonate or clone a profile without validating custody.

Otherwise this looks pretty bitchin' - I even have a profile I can try this on that might be fun.

Nah, it's flat out Napster 2.0.

Instagram owns the data, as per their terms. It's up to Meta not the user.

Better to encourage people to just start again.

True true true. That is one thing about the pubkey is it is binding and traceable.

Sure, but if it ends up on Primal's relay then Meta can sue Primal and will easily win. Especially if a Primal employee is behind it. No fair use defence there. Or just tell Apple and Apple will remove Primal for not having the appropriate systemic moderation tools.

This will not happen because all of Nostr is far too small for most on the Meta legal team to have even heard of what Nostr is, let alone Primal.

Still though, not a good idea. People need to start again.

Something failed here, so close!

Lmk if you try again! Sometimes you literally have to press twice lol.

Gonna go check in on it.

Realizing that this is working on mobile and am getting further already likely some filtering on my end - disregard and thanks for building this!

Failed to create migration still on mobile perhaps not meant to be?

Are you trying just twitter? Will try to repro.

Ya twitter didn’t work for me. Will ping you when it’s fixed.

Yes this was with twitter that's my main test for now.. Thanks! There are a few profiles where I wonder how good they would do in a low-algo zone like this. It is becoming pretty clear how much of a walled garden X has become...

Is there any way to confirm only the account holder is able to unlock the data? Seems like that would help with end user confidence.

nostr:nprofile1qyxhwumn8ghj7mn0wvhxcmmvqyfhwumn8ghj7mn0wd68yt3cxumnwtnrdqqzqaf4zg3xgl9xyn8pvjch5gjkd2nhf53ldqzd2kla9a3ssug0mhx5xwa65j it's working smooth at the moment now if you're doing a standard migration. figuring out an issue with logging in with nostr now. Lmk if it works!

its alive! nice

here we go! post AI SWE

I believe this is an interesting marketing strategy to get more people interested on Nostr and make the onboarding smooth as possible.

I have a genuine question and perhaps a curiosity of mine.

How do we know that the "gifter" has the intention of giving it to the original creators and not an adversary who will steal your online identity and your creations? Do we have a way to mitigate this? I know that everything can be abused esp tech and with lot of bots already, it is inevitable that people will take advantage of this. 🤔☺️ #asknostr #primal

They need to dm me from their Instagram or x for me to believe their account is real

Very cool my guy!

This is awesome. Making it easier to get people over here is crucial. There are so many people I talk to about nostr that aren’t willing to take the leap. This should give them the springboard they need to actually do it!

Thats pretty cool actually

Sos el puto amo 🫡🫡🫡

So cool

Nice 🤘

🔴 What Is Islam?

🔴 Islam is not just another religion.

🔵 It is the same message preached by Moses, Jesus and Abraham.

🔴 Islam literally means ‘submission to God’ and it teaches us to have a direct relationship with God.

🔵 It reminds us that since God created us, no one should be worshipped except God alone.

🔴 It also teaches that God is nothing like a human being or like anything that we can imagine.

🌍 The concept of God is summarized in the Quran as:

📖 { “Say, He is God, the One. God, the Absolute. He does not give birth, nor was He born, and there is nothing like Him.”} (Quran 112:1-4) 📚

🔴 Becoming a Muslim is not turning your back to Jesus.

🔵 Rather it’s going back to the original teachings of Jesus and obeying him.

More .....👇

🔴 THE RETURN OF JESUS

https://jesusen1.blogspot.com/2017/12/what-is-islam.html

How does it timestamp events in the past beford the npub existed?

All npubs already exist.

The first time we see a key is not the time it was created.

Ohhh that makes sense, thanks!

Cool

This is the kind of bridge I'd draw in pixels, solid, functional, and surprisingly elegant when the light hits right. The canvas is waiting for your migration marks.

Super cool 😎 and impressive 💯 Sir 💜

This is great! Could be cool to transfer existing Twitter content to an existing key too

Is the code available to play with?

Code?! Where we’re vibing, we don’t need code!

yup, this feature already exists! log in with primal and enter your twitter and your posts will appear with the timestamps of the day it was posted.

you can also propose the content to existing npubs. ownyourposts.com/propose

so So SO great!! Wanna try !

This is epic! Looking forwards to trying it out!

lmk! and maybe start with a smaller job first

👍👍

what was pipeline to build it?

Talk to Claude and vibe. Whenit got stuck, I asked a vibe master in nostr:npub14f26g7dddy6dpltc70da3pg4e5w2p4apzzqjuugnsr2ema6e3y6s2xv7lu

Wow, Paul. This is actually amazing. GREAT job. I'm so happy to see you vibe coding.

ok, tried importing from Instagram, and it says it imported posts from there to primal, then when I was done and clicked on "see your posts" it just takes me to my primal. i don't see the instagram posts. maybe because they're old and it's chronological? I haven't posted on Instagram in months. will keep messing with it. 😃 this is a good idea for normies.

nice you tried? logged in with primal and got your old poosts? ya it's probably just in the past.

I found there to be no flow and kind of confusing as someone already using Nostr. It may be good for a newbie.

I used the signer to complete the action of logging in and moving instagram posts to Nostr. I found it odd the my phone was playing music.

When I tried to import from Substack, it started doing it but I wasn’t signed in, yet my phone was still playing music.

Also, maybe give a direct link or how to find the Substack rss feed. Substack is bloated and it’s tedious to find that info in my Substack account. I googled it to save time.

But then I needed to log into your tool all over again as it had done the import to a new npub instead of mine… so I gave up on Substack since I’d have to start over anyway.

What’s your substack?

Grazie for your constant work 🔥

Great idea! Any plans to include substack as a source? Will try a couple and see

It's there! Super cool

🐅

many people use Nostr as their backup social media to legacy platforms so this is a big step in the right direction 💪

you see it!

You're a legend! 💪⚡

EPIC ! What about other blog RSS feeds from other sites? Keep rockin brother! ⚡️

yes! But i've only really tested substack. tbh i have zero clue what it will look like when importing from medium or wordpress.

Cool - I’ll play around with it - great work 🔥

Super cool! 💪🏾😎

Wow. Is anyone working on a migration tool like this that would take a giant Facebook profile download and upload it to a Nostr relay?

people still use facebook?

Most of my network refuses to try new things.

Just our parents and older 😂

Yep. People do.

Groups and marketplace. NOSTR can't compete, YET!

Goat

LFG 🔥

Excellent 👏

WTF?! You can claim and import all your X, Substack and stuff content and integrate into your Nostr profile here on @primal?! Really looking forward to the more detailed Videos. This could be a gamechanger to lure big influencers to the new dezentralized and unmutuble standard. 👍🏻👍🏻

not all, capped it at 100 posts per platform, but i think it's a better than showing up and starting from scratch.

try it out!

Incredible work here Paul! I’m trying to test this out with my Instagram but I keep getting a connection timeout on the Primal account linking on step 1. Anything I’m doing wrong?

I was going to ask you to be one of my test subjects lol. I’m back and will test.

Didn’t test much on Android if you’re using Android

Works for me! going to propose your latest 48 posts and post a link for you here.

I’m on iOS but will try this on my pc tomorrow, the primal connection isn’t working for me for some reason. Thanks for setting it up. Can’t believe how quickly it works otherwise.

I’ll ping you when I fix this. Prob won’t work on pc either.

Pretty sure I just broke the remote login feature but the link still works

Can confirm, the link works but remote sign in from the connect with Primal button may not. At least for me on iOS. Will do it on my pc tomorrow which is my preferred method anyway.

What's keeping me from stealing someone's account from another platform?

Nothing. But why would we trust you.

Love it. Would it also work for people who already have an nsec but still have most of their posts on Instagram, as a way to migrate old content?

*cough* nostr:npub1enuxqa5g0cggf849yqzd53nu0x28w69sk6xzpx2q4ej75r8tuz2sh9l3eu

YUP

She can log in with primal (easy now with the remote signer) and type in their instagram and migrate their content.

or you can do the heavy lifting and do it for her. send her the proposal link after things are done uploading!

https://ownyourposts.com/propose

This is pretty cool. Well done 👏

The vibe code army is growing. 💪 keep building

This is a fantastic idea. When I test it importing for myself, I get the following error here:

thanks! might just have to press create again! once the link is created, it will take a few minutes to process the job and have it ready to be claimed.

keep me posted!

Very cool.

👁️👆 🔥

Nice.

But, I don't cross my streams.

Nostr is for the building, unredactable, documenting me.

Great job!

It didn’t work for me. Kept getting error message. I like the idea though! Keep it up!!

Thanks! Was it for a gift or migration? Maybe try a small job first!

It was a gift. I’ll try a small job and see if it works!

cool and the gift takes a bit to upload. after you get that link check in on it a few minutes after.

Kept getting failed to migrate message

Wow🫶🏼. This is actually amazing.🧡

The first time i came across you was on robert breedloves What is money podcast episode and found your whole life philosophy extremely inspiring and is the reason im even on this platform to begin with. Thank you for the post and thank you for all the positive energy you put into this platform and into this world in general. Thank you & God bless you 🙏

Thanks for those words! Means a lot

Congrats it’s crazy boy. 🤙🏼👏🏼👏🏼

The best way to #fuckTheSilos is to have bridges like these so we can migrate and #grownostr 💜

nostr:nevent1qqswhlxkfuehs50zk0cfpwv005lu30qeum5m76dwda0alfpymrjhhtst930py

The AI can’t believe you said you built this 😂

Where does the data go if it’s never claimed? What if the person gets upset or ends up not liking that you fetched their content and uploaded it to this temporary place they don’t understand?

hello ser nostr:npub1spdnfacgsd7lk0nlqkq443tkq4jx9z6c6ksvaquuewmw7d3qltpslcq6j7 just tagging this question again. Thank you 🫡

¯\_(ツ)_/¯

😆🤣😅 fair enough

Can you plz ask Claude lol

This is amazing for onboarding entire audiences at once. Good job 🤙

Good job, Paul! Very cool. You used Claude?

Gangster - I believe it!

It be great if there was a way to share my profile that isn’t sending my npub as a long string of letters. A short human readable username based url that links to my profile or something. When I send a newb my npub and tell them to add me it doesn’t seem to register that’s my profile. They just see a sketchy string of text that they don’t know what to do with.

This is incredible and a great idea. I also think we should try a reverse cycle and export NOSTR content to social media with some reference to the original content to to attract more people interested in NOSTR

This is impressive af. Great work!

Oh man you made it to production. Congrats! Was amazing to see your reaction when the very first was successful and the Insta migration just worked. I’m convinced vibe coding opens up the creative process for so many more people like you, which don’t had coding experience before. Well done Paul 🥳

🔥

Didn’t work for me, I could see some of my posts but unable to select somehow.

wow. Elegant solution. Well done sir 🤝

Agreed

This is cool but so illegal.

That's why it's cool

Dude, this is brilliant! 🔥

sending it to all my relatives

This is sick! Very well done Paul! 🔥💜

Here's hoping this actually works 🤞

If not just yet, then at least after some testing-breaking-fixing in the future.

Can you imagin YouTube not being able to pull down evidence of watermelon crimes? 🍉

Imagine no censorship, or pulling videos from SHITstagram and adding them on here for archival.

Several other archival, censorship resistance, news suppressive, misinformation, true ancient healing and ancestral secrets that the media engine suppresses - the use cases are endless ✨

Here's hoping 🔮❤️‍🩹

nostr:nevent1qqswhlxkfuehs50zk0cfpwv005lu30qeum5m76dwda0alfpymrjhhtszyzq9kd8hpzphm7e70uzczkk9wczkgc5ttr26pn5rnn9mdmekyravxqcyqqqqqqghuga45

That’s pretty freaking cool.

This is freakin awesome! 🤙🔥

Game changer 🤌

This is awesome ! I see a lot of usage for it.

Try with your friends and lmk!

I tried it, it works well.

I’m might use it for a project I’m building… is it open source ?

Wow, this is amazing.

Dude this is sick.

I wonder if people will expect updates also to show up on Nostr

That would be a killer app. So may ideologically aligned people out there but Putting in effort to ANOTHER social media “account” takes too much time.

However. nostr:nprofile1qqsx8x8ptc6pdhsf8wtregu8s0f2v65k2l9s3ja6fup9gmxa2km0rfqpr4mhxue69uhhyetvv9ujucn4d3kxjumgvfhh2mn50yhxxmmdqyxhwumn8ghj7mn0wvhxcmmvzdrx0h may be vibingthis into reality

Pura vida!

🤙🫂

Just joined and yeah, very cool

Welcome

If you can allow uploads and parsing for Twitter Backup .zip file.

This can help make the migration process more beneficial to users who have more than just a few posts.

Probably something similar can be done for other social media too.

Being able to parse a backup file would be good for these more closed services

I think he should add Bluesky and Mastodon/Fediverse support to this tool since those networks are much more open

Very very cool Paul !! Very cool

That is awesome! Just imported my Instagram account dating back to 2020. I guess I can remove that 1GB Instagram data export file I kept just in case 😁

Sorry Primal for uploading that much, now I wonder how to import the photos into my relay once I get it running (Blossom?).

BTW some issues I noticed nostr:nprofile1qqsgqke57uygxl0m8elstq26c4mq2erz3dvdtgxwswwvhdh0xcs04scpp4mhxue69uhkummn9ekx7mqpz4mhxue69uhkummnw3ezumrzv3jhvtnxw4hqy3wszm :

When uploading 2 reels I saw 5 connections downloading through proxy-video, it worked fine in the end but some possible performance improvements here.

Also when uploading 70 posts, all of them failed saying "Failed to publish to any relay"...but it actually worked fine, so I guess error handling needs some work.

nostr:nevent1qqswhlxkfuehs50zk0cfpwv005lu30qeum5m76dwda0alfpymrjhhtszyzq9kd8hpzphm7e70uzczkk9wczkgc5ttr26pn5rnn9mdmekyravxqcyqqqqqqghuga45

still trying to test this with the 50 odd letters i wrote a few years back… so far i get stuck on the logon with primal button. Nothing happens onClick

Yeah that broke yesterday and have been going mad trying to fix 👀

Try again. At least fixed log in part.

Will do. Just grillin some meat

will let ya know

seemed to work beyond previous fail point but failed to publish any item

i think the issue may be related to the content of the rss feed perhaps as it contained audio as well. Maybe that is tripping it up.

I literally only tested substsck for rss. Thanks for reporting back🫡

Will provide updates

I always thought you'd want a proof of acces to your other accounts to tranfer tour identity, but seeing this now only porting the content seems great for most people.

1st next thought is a live sync to nostr for future posts.

This seems really cool :D

Will you add Bluesky or Mastodon support at some point? Those apps allow you to gather MANY more posts from someone's account than Twitter does since they're designed with openness in mind

I tried to come up with a Bluesky-Nostr automatic bridge in Python with some Nostr library but I could never get the posts to show up in any Nostr client (I tried Primal and YakiHonne), the accounts I was trying to test with were https://littlebit672.bsky.social and nostr:nprofile1qqsxqnetdmet4t6nursnn6kgrxceudzvg8fck7sdtuhtg0sjlm99q0gppamhxue69uhkummnw3ezumt0d5q3gamnwvaz7tmjv4kxz7fwv3sk6atn9e5k7qmaa54

I also published the codebase for that bridge thing on GitHub https://github.com/littlebitstudios/bluenostr

Awesome!. Will publish mine soon.

I just have no idea why when that thing tried to publish posts they never showed up in clients

I was talking about the thing I made… idk if it’s a problem with the python-nostr library or not

Cool! trying it out right now

Clicking select all for X posts, does not works.

thanks! will look into it

👀

Import the Content & Exit the Capture. * Nostr Audience Needed : inquiry inside .

nostr:nevent1qqswhlxkfuehs50zk0cfpwv005lu30qeum5m76dwda0alfpymrjhhtst930py

MIGHT BE CAPTAIN OBVIOUS, CURIOUS WHAT HAPPENS TO THE NPUB/NSEC IF THEY GO UNCLAIMED?

ALSO, AND LINKEDIN HOOKS?

LOOKS LIKE A VERY SIMPLE ONBOARD 🤙

Did this import their posts as notes from the dates they originally posted them? If so, did you need to specify anything to make that work? I’m working on a project and was thinking of adding a way to record a date or the original date of a post. I didn’t realize it was possible to have a post with a past date until I saw this.

Ya it maintains the proper date. Lmk if you get stuck. Can take a look here https://github.com/primalpaul1/instagram-to-nostr-v2

Nice 👏