NostrCal for Android is on Zapstore!

I just published the first version of nostrcal for android to Zapstore. This version doesn't yet include private events but does let you see your public calendar events on the calendar + search for public events you may want to RSVP to.

It's nothing special yet but hope to continue to build from here! Thank you nostr:nprofile1qyghwumn8ghj7mn0wd68ytnvv9hxgtcqypex583xrnryw3n5aq59uw23kwa38xlf5aeart85nhyx3kuxrgwpzjh056v for making this possible with #purplestack. There's no way I could have built this myself without your tooling!

Reply to this note

Please Login to reply.

Discussion

You can just build stuff 🍻πŸ’ͺ

Make sure to add the outbox model early or you are going to suffer later on.

I've been working on integrating outbox into the web version already but right now the android version just uses a set group of relays. This version is pre-alpha though and will definitely be something I work towards getting fixed with time.

Outbox belongs in the purplebase library, which #purplestack uses. I'll eventually get to that.

It could be done in the app, but in that case, it will become a huge mess - the LLM will certainly get lost.

πŸ‘€

Is this Nip 52?

Never mind, checking out the web app now. Fantastic stuff brother!

It is indeed! Web app will primarily save NIP-52 as gift wraps to ensure privacy but those same features will eventually make it to mobile as well.

Sweet! Is it on GitHub? Nice to see it get some privacy features, I know this wasn’t part of the original NIP

The main site's repo is https://github.com/patrickulrich/nostrcal and the android version is https://github.com/patrickulrich/nostrcal-android. It's still the same NIP-52 events, even for private events, they're just being wrapped via NIP-59 gift wraps.

The project originated as a calendar booking service, like Calendly, and by necessity morphed into a wider calendar project. Since it's original method was around booking I handle the gift wraps very similar to NIP-17 DM messages. I've also used kind 31926 and 31927 to address availability. 31926 let's you set your availability template for calendar booking while 31927 is to allow you to publish a "busy" time. This is primarily intended to serve as ways of blocking time against gift wrapped 31923s but can be used just to indicate busy blocks. https://github.com/patrickulrich/nips/blob/master/52.md

Yes, the calendar event models are based on NIP-52

Yes very cool. Can you tell me more about purple stack? I’ve been using Claude with vs code and just referencing different Nostr repos/projects but would love to try something more integrated

It's a very opinionated stack, built on a nostr library I designed (purplebase) and models, which exposes nostr NIPs as domain models. I am using it to build Zapstore and other apps and improving it as I go along.

Are you taking bribes on what models you work on? 😁

Lol the stack is prepared to create and registered new models from new kinds. Should work.

I actually started work on integrating my custom 31926 and 31927 already but then shied away when I was having issues getting 59 events to decrypt. I need to dig back in again!

What are these custom events? If it's improving NIP-52 in models, I'd gladly take a PR

On my todo is to create a PR to 52 for these. 926 is to create availability lists to show when you want to accept booking requests and 927 is just a public busy time that I create when users create gift wrapped 393 so that the booking can still see the user as busy without knowing why.

I will definitely send a PR when I have them working well. I slid away from the android side for a few days and started putting some focus on another project but will definitely get it over.

Ugh I got lost already πŸ˜… sure man. Welcome

Can I try it?

It's on stacks or just clone https://github.com/purplebase/purplestack

I'd be interested in your feedback

I’ll check it out for sure. My project is next js and using NDK but I have something else I wanted to build in the near future. Thanks!

Need a widget for this app, thank you! πŸ‘πŸΌπŸ‘πŸΌπŸ‘πŸΌ