Sorry for the radio silence. My body called in another debt, and I went analogue while I paid it: my Bible, pen and paper, and not much else.
The debt's paid down for now, but the field's been fallow long enough. I'm going to try and push some more code. It's not ready, but it never will be...
Innis2d
You missed Hubstr Relay, and Hubstr Blossom:
https://github.com/johninnis/hubstr-relay
https://github.com/johninnis/hubstr-blossom
Innis3d
Thank you! It means a lot that you noticed the care I take, and even more that you're building on top of it. Looking forward to checking out Decent Newsroom!
Innis4d
Yeah, I still use Symfony for work apps. This is a different paradigm tho, a long-running async process, so it's AMPHP. I'll do a write-up once the last piece ships.
Innis4d
Shipped Hubstr Blossom yesterday too.
A personal Blossom server: your images, video, and files stored under their SHA-256, served from your own origin, and managed with your Nostr key. Two kinds of visitor. Anyone can fetch a blob by its hash. Tenants can upload, mirror, optimise, list, and delete them.
Every upload is hashed and type-sniffed on arrival, so the stored hash is what was received and the stored type is what the bytes are, not what the header said. PUT /media re-encodes an image and drops its metadata, applying the EXIF orientation first. The result is kept only if it is smaller. Dimensions and a blurhash are computed for NIP-94. Kind 1984 reports are accepted and kept.
Blobs live on the filesystem, sharded by hash, moved into place with one atomic rename. The SQLite index holds one row per tenant per blob, so the same bytes uploaded by two tenants are stored once and removed only when the last of them deletes. Nothing else deletes them. Bytes are streamed from the process with ranges, ETags, and CORS handled in application code, so a plain reverse proxy is all it needs. Hashing and media work run on a worker pool, off the event loop.
BUDs 01, 02, 04, 05, 06, 08, 09, 11, and 12, and an acceptance suite that boots a real daemon and drives every one of them over HTTP. Caddyfile and systemd unit included. PHP 8.4, two config keys to change, and it starts.
A version of this server has been running on blossom.innis.xyz for months, with earlier versions in the wild for longer.
Built on innis/nostr-blossom, innis/nostr-core, and innis/hubstr-core.
https://github.com/johninnis/hubstr-blossom
Thanks to for the elegant protocol.
MIT.
#nostr #php #opensource #nostrdev #blossom
#nostr
#php
#opensource
#nostrdev
#blossom
Innis4d
Yesterday I shipped Hubstr Relay. Not a library. A relay you can run.
A personal relay: one PHP process, one SQLite file, and two kinds of visitor. Guests see your public presence, the notes, profile, articles, reactions, and lists you signed, and can reply, react, zap, and DM you. Tenants, authenticated over NIP-42, see every kind, and everything the relay holds, including events from other users cached there... More on that soon.
Point your kind 10050 at it and it is your DM inbox. Gift wraps come in from anyone and go out only to you. It carries NIP-46 traffic, so it works as a bunker relay too. Full-text search over NIP-50, COUNT over NIP-45, expiry swept under NIP-40, protected events under NIP-70.
The policy is managed at runtime over NIP-86, signed with NIP-98. Add a tenant. Decide which kinds guests may read and write. Ban a word, a pubkey, or a hashtag, and what is already stored goes with it. Block an IP. Set the rate limits. Watch every open connection and the subscriptions it holds. And an explore feed computed from what the relay has seen: trending hashtags, most followed, most muted, most zapped by count or sats, top zappers, most reacted to, most reposted, over a day, a week, a month, or all time, plus a web-of-trust score for any pubkey as seen from your follows. As above, more on relay management and content discovery soon...
Another feature of guest writes is that admitting an event by the prefix of a tag value allows sites to host their own NIP-22 comments without becoming a public free-for-all.
Database work runs on worker processes, off the event loop. Tested at two million events, with author and kind lookups under a millisecond. A version of this relay has been running on relay.innis.xyz since December, but earlier versions have been elsewhere in the wild for far longer.
Import and export are JSONL, and an export can pull one key's whole presence, everything it wrote and everything that tagged it. Caddyfile and systemd unit included. PHP 8.4, three config keys, and it starts.
Built on innis/nostr-relay, innis/nostr-core, and innis/hubstr-core.
https://github.com/johninnis/hubstr-relay
MIT.
#nostr #php #opensource #nostrdev
#nostr
#php
#opensource
#nostrdev
Welcome to Innis spacestr profile!
About Me
Building on protocol. Austrian economics, Bitcoin, Nostr, and the older traditions that saw this coming. Low time preference. Long game.