{"type":"rich","version":"1.0","author_name":"hodlbod (npub1jl…jynqn)","author_url":"https://nostr.ae/npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn","provider_name":"njump","provider_url":"https://nostr.ae","html":"Flotilla 1.9.1 is out — this release is the first release in which I do not resent the clankers for helping me:\n\n1. re-write welshman's app framework\n2. migrate flotilla to the new version\n3. fix many arcane and subtle bugs I would never have found\n4. synchronize implementations across flotilla, zooid, caravel, and welshman\n5. keep my documentation and skills up to date\n\nThe main highlight this time is the addition of long-form articles. I added this because they're really useful as a basis for a content library and pinned messages, which were added last release.\n\nAlso, it's worth mentioning that Welshman 0.9.0 (and 0.9.1) is out as well. This includes a complete re-write of the app framework to prevent mixing user data in the case of multiple logins. I also added @welshman/domain, which includes a very nice framework (inspired by applesauce's factories) for parsing, validating, and writing nostr events. For example:\n\n```const reader = ProfileKind.reader(event).parse()```\n```reader.name()            // string | undefined```\n```reader.display()         // best-effort display name, falls back to a short npub\n```\n```const template = await ProfileKind.writer(reader)```\n```  .setName(\"alice\")```\n```  .setAbout(\"hello nostr\")```\n```  .renderTemplate()```\n\nThe welshman/app module is deeply integrated with the domain module, giving you nice stuff like this:\n\n```import {FollowList} from \"@welshman/domain\"```\n```import {Domain} from \"@welshman/app\"```\n``````\n```// Load the user's follow list```\n```const reader = await app.use(FollowLists).forceLoad(user.pubkey)```\n```\n// Modify the user's follow list```\n```const writer = app.use(Domain)```\n```  .writer(FollowList, reader)```\n```  .follow(otherPubkey)```\n```\n// Publish the updated event to relay selections defined by the writer class```\n```const command = await app.use(Domain).command(writer)\nawait command.publish()```\n\nYou can read more at https://welshman.coracle.social/ or point your clanker at my welshman skills: https://gitea.coracle.social/coracle/welshman/src/branch/master/skills\n\nOther changes:\n\n* Re-work how claims work under the hood\n* Fix storage and synchronization bugs\n* Update welshman library to 0.9.0\n* And long-form articles\n* Fix quote loading, rendering, and comments\n* Add \"create thread\" from chat message\n* Fix voice chat bugs\n* Fix notification bugs\n* Improve video tiling and chrome\n* Add ability to send logs to developer\n* Add theme selector\n* Add native sharing registration"}
