1 karma · joined September 11, 2026
I have about hopefully a week left until it is where I want it to be, any feedback I'll put into the app. The global UI isn't amazing right now but if you login its better but I figure having the public stuff is good for seo and discovery.
It has a cdn under it all but its creative with trying to use as much webtorrent as is reasonable/unreasonable. The app has been closed behind privacy walls for a while and I'be been building the public layers in this week.
The intent is to have social media that doesn't try to cram as much stuff in front of your eyes as is chosen by the algorithm. Like when you boot up this app you get your own home bubble and you can see public "bublic" and global bubbles. Global bubbles are what you see here, they exist outside the app. Private bubbles you will never see unless you are in one, and the 'bublic' bubbles are in app only. The stream follows suit in terms of you stream to a bubble and if you are in the bubble you see the stream.
I have some work to do with routing the livestreams (right now they all coalesce in one tab but I want them separated so you can share just one livestream and not see the entire bubble. Stuff like that but its graphql and its annoying lol.
Basically the key to this thing is that it shares the metadata quickly to users so they know where the magnetlinks are, and I run a tracker to connect seeders/feeders. There is no aws or s3 buckets or anything like that but there is mongodb and heroku and ipfs & piñata (cdn and pinning) and a lot of caching (and i have some backend caches i still need to reconnect). Also it uses the idbchunkstore its a webtorrent thing that stores torrent data in indexeddb to keep swarms going. I figure lets be the data center why not.
Its also an attempt to have a human algorithm (oh the humanity). And there is an option to submit a cj.com affiliate link if you want to add one to your profile the site picks at random and places them so its a community monetization thing. Its also an attempt to reconnect people to their actual social media communities so people aren't shadowbanned/throttled/promoted/excluded. There are more privacy controls on the way (bubble visibility etc). User can select public or private right now so even if they post in a global (web facing) bubble the site doesn't print those so no one will see. I want member lists to be the same way, stuff like that but you have to deal with the db a lot :). Private bubbles are invite only at the moment so you actively have to get people to your bubble (or join from an invite).
Anyways have a great week and thanks for checking it out.
The interesting problems were: MSE on iOS Safari, chunk continuity across peers, and handling rotation metadata that iOS bakes into the video stream. Also, the tracker is a separate bittorrent-tracker instance because the built-in WebTorrent trackers are unreliable for sustained swarms. Also i used a ton of graphql, so normally with a torrent you have to kind of let people find you but i used a graphql subscription to TELL people what the magnet links were called so they can fetch them asap. Lots of shortcuts like that, its been interesting!!
I've been building a social app on top of WebTorrent instead of centralized cloud storage.
The basic idea: its BASED... but on bubbles. :)
No feed. You're in a series of small, private "bubbles" (think Discord servers, but for any context — family, work, hobby). Basically its set up like a venn diagram with every user at the middle of their own ecosystem. You have your own bubble and you can make new bubbles and join other bubbles. The idea is if you seed your own content you are providing it to others. If your feed is boring, post stuff you like to see or join up with interesting friends! Just post stuff you like. Noone is going to baby sit your feed with an algo. I figure we all have these devices and internet and phones what if we just pooled together and actually truly shared content and hopefully your mom won't shadowban you lol.
Content is served via WebTorrent. Every viewer becomes a seeder. The more people in a bubble, the faster it gets. There is a cdn fallback (Pinata).
If no peer has a file, we fetch from IPFS, then cache locally (or cache from webtorrent directly which is the goal).
Livestreams work by chunking video into 8-second segments, torrenting each chunk, and reassembling client-side. There's a slight delay, but it works. I boost the chunks from heroku, and i have a webtorrent tracker and graphql subscriptions to keep everyone in the loop as to where the chunks are. Its ephemeral lol. Getting iphone's managed media source to cooperate was interesting. There is no camera preview if you go 'live' (there is a delay because webtorrent takes time to set up). This is 'proof' of concept. I almost had the preview set up last week but Deepseek took me on a crazy ass detour i still love it though, and if Deepseek couldn't figure something out i'd hit up Gemini, it could solve some tricky stuff quickly.
Affiliate links are built into the profile. If you have a CJ.com account, you can drop your ad URL into your profile and it runs as a platform ad. The idea is to give regular people a shot at ad revenue.
Stack: React Native + Expo, Apollo GraphQL, MongoDB, WebTorrent, hosted on Heroku + Vercel. No AWS.
It's invite-only, so you'll never end up with strangers in your bubble unless you open invites from strangers.. ahem...
Here's an invite to the bubble I set up for here https://bubblebased.com/join/BC7F8C3B820B13FE
Bubbles can be as big or small as you want them you print out the invitation for as many or as few people as you want. I am going to be working on a public super highway of sorts for this thing and cache all over the place lol but for now this is it. Webtorrent gets BETTER with scale so its something to look forward to. For now its small quiet social media. Why not.
I'm about a month out from where I want it, but feedback is welcome. Known issues: Safari rotation on livestream is janky and fragile, chat sometimes needs a refresh, cache eviction still being tuned. The main issue I have is testing webtorrents all by myself :( So if you want to break this thing feel free there is a bunch of UI stuff I am working on but its getting there. frontend is here https://github.com/bcebel/minnowfrontend backend is here https://github.com/bcebel/MINNOWSPACEbackend