...The app uses a modified version of the nostrpostrlib to talk to Nostr relays. The overall architecture consists of the UI, which uses the usual State/ViewModel/Composition, the service layer that connects with Nostr relays, and the model/repository layer, which keeps all Nostr objects in memory, in a full OO graph. The repository layer stores Nostr Events as Notes and Users separately. Those classes use LiveData objects to allow the UI and other parts of the app to subscribe to each individual Note/User and receive updates when they happen. ...