Replying to Avatar jb55

Hey guys!

Here's our Q3-Q4 report. There was some confusion with the timing of the previous quarters so we've accumulated everything since the Q2 report (March 2nd, 2024) into this one. Enjoy!

# Damus OpenSats Q3-Q4 Progress Report

The third and fourth quarter of the initial Damus OpenSats grant encompasses work done across many of the active projects being worked on at Damus HQ. Here's a quick overview of the progress made across the organization:

## nostrdb

### Added

- Author query support (William Casarin)

- REQ support: ndb_subscribe (William Casarin)

- CLOSE support: ndb_unsubscibe (William Casarin)

- Profile flatbuffer dump utility (William Casarin)

- Ability to register a subscription callback instead of just polling (William Casarin)

### Changed

- Dump json in filter and fulltext queries in cli tool (William Casarin)

### Stats

```

name added removed commits

William Casarin +665 -739 16

```

## nostrdb-rust

### Added

- Note builder interface (William Casarin)

- Nip10 implementation (William Casarin)

- Getting profile by key (William Casarin)

- Note tag support (William Casarin)

- `Tag::into_iter` method (Yuki Kishimoto)

- `FilterBuilder::until` method (Yuki Kishimoto)

- Export structs from `tags` module (Yuki Kishimoto)

## Fixed

- `FilterBuilder::limit` method (Yuki Kishimoto)

- `Note::sig` method (Yuki Kishimoto)

### Stats

```

Yuki Kishimoto +20 -4 5

William Casarin +1551 -867 32

```

## Damus NoteDeck/Android

This project is in heavy development and doesn't have clean changelogs yet,

so here are all of the git logs from this period

### Willam's updates

- account_manager: don't add the same pubkey more than once

- actionbar placeholder

- actionbar: remove border on reply button, add expand animation

- actionbar: support both dark and light buttons

- Add forward navigation animation

- add hover to profile map demo

- add --light lightmode flag to previews and notedeck

- add my pubkey to the timeline query for testing

- add test queries for elsat

- add vertical separators between timelines

- allow missing profiles in account switcher

- allow multiple invocations of --sec

- always have some default timeline

- app: make ndb public

- a quick note about the View trait

- args: allow filter files and raw filters on cli

- bump timeline filter limit

- cap size of remote filter limits

- change selection color to purple

- check: remove duplicate and disable wasm checks

- ci: disable wasm builds for now

- cli: add --sec argument to quickly add an account

- clippy postbox cleanups

- crates: add bitflags

- damus: make relay pool public

- darker quote reposts for mobile

- debug: add some debug logs for keyboard note selection

- deps: using tracing instead of log

- direnv: disable nix direnv on darwin

- direnv: make args explicit so its easy to change

- don't bump timeline when adding notes

- dont since-optimize when we don't have enough notes

- don't use an actual keystorage in Damus test apps

- drafts: clear post after posting

- enable nip10 replies

- enostr: rename Event to Note

- env: allow private things like secret keys

- filter: add default limit

- filters: fix hashtag filters

- filter: unify nostrdb and remote limits

- Fix all warnings

- fixed_window: fix clippy warning

- fix global query

- fix inline note preview colors

- fix light borders for quote reposts

- fix postbox design

- fix scroll area shrinking

- fix some clippy warnings

- fix until filters

- fix warnings

- fonts: always use base fonts for all families

- fun large profile grid preview

- get all missing ids from all timelines

- github: remove pages workflow

- gitignore: add perf files

- hide navigation title on global nav

- ids: find more unknown ids from inline notes

- images: add aspect_fill

- initial inline note previews

- initial navigation

- initial note posting

- initial postbox for testing

- initial post box view

- initial post reply view

- initial refactor in preparation for routing

- input: fix deadlock on resize

- input: handle raw events

- input: process input once

- input: switch to scanning over raw input events

- integrate sidebar into main view

- introduce View and Previews traits

- irc mode

- ircmode: tighten username

- keys: actually use the keystore

- lighter gray for inline previews in white mode

- list: switch from arc mutext to rc refcell

- load timelines from commandline

- log: reduce spammy new note log

- log relay subscriptions

- make notedeck front and center

- mobile: add lots of top padding on mobile

- mobile: a tad more padding at the top

- mobile: black panel bg color

- mobile: don't add hover on mobile

- mobile: make mobile flag runtime-configurable

- mobile: simplify is_mobile

- mobile: use my timeline for testing again

- move account_login_view to ui submodule

- move add_space to its correct location

- nip10: fetch unknown replied-to notes

- nip10: show initial reply information on notes

- nix: add openssl dep for reqwest

- nix: make android emulator optional

- nostrdb: bump to support timeline queries

- note: don't allow nested note previews

- note: support nprofile mentions

- perf: don't clone bytes via a more specialized function

- perf: fix continuous repaint

- perf: profiling note content rendering

- popup: increase fixed window margin

- popup: simplify borrow

- postbox: add focused state

- postbox: add focus shadow from figma

- post: full available width

- postview: add vertical scroll

- previews: remove central panel frame

- profile: add about and username to profile previews

- profiles: introduce DisplayNames

- profiling: update puffin version

- queries: add a few more test queries

- queries: set reasonable initial query sizes

- queries: update hashtags query

- readme: add usage

- readme: document previews

- readme: make it clear that its for desktop

- readme: make it clear that nix is optional for non-android dev

- readme: show notedeck preview

- refactor: move fixed_window to ui

- refactor: move note into its own widget

- refactor: rename widgets to ui

- refactor: use map instead of explicit `if let`

- remote: use default_remote_limit instead of hardcoding

- remove context from DesktopSidePanel

- remove minimum window size

- remove useless struct

- render_pfp: only depend on imgcache

- reset virtual list if notes are spliced into timeline

- set tooltip delay to 100ms

- side_panel: return more detailed side panel responses

- simplify is_mobile check

- simplify tab underline calculation

- since filter optimization

- slightly larger pfpfs

- small inline preview pfps

- style: initial logic for mobile style

- style: less bubbly

- style: realtime hover interactions

- style: set 0 duration tooltip delay

- Switch to egui master to fix wgpu issues

- switch to glow for now

- switch to rustls-tls-native-roots

- tabs: select notes & replies by default

- test: add test timeline query

- test: update test profile with a banner

- test: use my timeline query by default for testing

- textmode: adjust name sizing so it doesn't bump the column

- textmode: fix coloring of abbreviated names

- textmode: no previews in textmore for now

- theme: update to correct colors based on figma design

- timeline: don't hide on resize

- timeline: refactor tabs into TimelineView

- timeline: use strips instead of panels

- ui: add banners to profile previews

- ui: add feathering-resistant hline separator fn

- ui: add frame around note previews

- ui: add initial Profile hover previews

- ui: add profile picture hover animation

- ui: integrate egui-tabs for notes & replies selector

- ui: introduce profile picture widget

- ui: make pixel sizes correct, use more of the figma

- ui: move RelayView into ui module

- ui: only inline preview kind1 notes for now

- ui: reduce vertical padding for more compact timelines

- ui: remove some old note ui comments

- ui: simplify note widget

- ui: switch to flags for note options

- update slow timeline query

- update to latest nostrdb, adding tag support

- update version in comment because I still use this on my laptop

- use egui_virtual_list for rendering

- use unique id for post/reply view

- weird actionbar experiment

- we should just called this damus

- widgets: begin organizing ui components into widgets

- working notes + notes&replies

### kernelkind's updates

- account_management: refactor

- AccountManagementView

- AccountManager: add ability to make a selection

- AccountSelectionWidget

- Account switcher

- Add AccountManager to app

- Add custom visual themes

- Add flag to emulate mobile during preview

- Add keypair & update pubkey

- Add login key parsing

- Add login manager

- Add MacOS key storage

- Add MobileAccountLoginView

- Add modular custom text styles

- Add monospace text style

- Add nix-shell for macos android development

- Add nostr-sdk dependency

- Add precommit hook to suggest proper formatting

- Add preview for RelayView

- Add relay view

- add reqwest as dependency

- Add SimpleProfilePreview

- Add ui_test_harness binary implementation

- Add warn color and highlight color

- app: add accounts to Damus & mock

- Apply app style to AccountLoginView

- Apply cargo fmt

- Conditionally compile MacOS key storage code

- Constrain app minimum size

- Create account login panel

- Create side panel & global popup

- enostr: expose RelayStatus

- Extract the sample relay to test_data for reuse

- impl linux credential storage

- Integrate account switcher to side panel

- Integrate global popup into app

- login: Add key loading & error to mobile

- macos_key_storage: runner ignore tests

- migrate AccountManagementView to enostr Keypair

- Migrate to new AccountManagementView conception

- Move login business logic to LoginManager

- move login logic from promise to async fns

- Move preview controller out of account_manager.rs

- move test account creation & apply to global popup

- Pfp integration to side panel

- refactor account switcher & management previews

- Refactor 'ui tests' conception to previews

- reintroduce account management

- reintroduce account switcher

- remove nostr-sdk

- Rename PersistState -> StateInMemory

- select first account

- Seperate mobile dark color theme into its own func

- update cargo.lock to reflect toml change

- Update egui 0.26.1 -> 0.27.1

- Use app_creation for common app setup functions

- Use custom style in app

- use nostr in enostr

### Stats

```

name added removed commits

kernelkind +6844 -1979 58

William Casarin +9733 -5583 194

```

## Damus iOS

### Added

- Ability to create highlights (ericholguin)

- Add ability to mute hashtag from SearchView (Charlie Fish)

- Add ability to mute words, add new mutelist interface (Charlie) (William Casarin)

- Added callbackuri for a better ux when connecting mutiny wallet nwc (ericholguin)

- Added nip10 marker replies (William Casarin)

- Added title image and tags to longform events (ericholguin)

- Add event content preview to the full screen carousel (Daniel D’Aquino)

- Add First Aid solution for users who do not have a contact list created for their account (Daniel D’Aquino)

- Add marker nip10 support when reading notes (William Casarin)

- Add video cache to save network bandwidth (Daniel D’Aquino)

- Completely new threads experience that is easier and more pleasant to use (Daniel D’Aquino)

- Connect to Mutiny Wallet Button (ericholguin)

- Highlights (NIP-84) (ericholguin)

- Notification reminders for Damus Purple impending expiration (Daniel D’Aquino)

- Proxy Tags are now viewable on Selected Events (ericholguin)

- Relay fees metadata (ericholguin)

- Revamp emoji picker to be less error-prone and add search, frequently used, and multiple skin tone support capabilities (Terry Yiu)

- Show list of quoted reposts in threads (William Casarin)

### Changed

- Added first aid contact damus support email (alltheseas)

- Add support for Apple In-App purchases (Daniel D’Aquino)

- Always strip GPS data from images (kernelkind)

- Change reactions to use a native looking emoji picker (Terry Yiu)

- Errors with an NWC will show as an alert (ericholguin)

- Improve UX around video playback (Daniel D’Aquino)

- Moved paste nwc button to main wallet view (ericholguin)

- Relay config view user interface (ericholguin)

- Relay detail design (ericholguin)

- Updated Zeus logo (ericholguin)

### Fixed

- Fix broken GIF uploads (Daniel D’Aquino)

- Fix bug that would cause connection issues with relays defined with a trailing slash URL, and an inability to delete them. (Daniel D’Aquino)

- Fixed issue where some replies were including the q tag (William Casarin)

- Fixed issue where timeline was scrolling when it isn't supposed to (William Casarin)

- Fixed threads not loading sometimes (William Casarin)

- Fixed wallet not disconnecting when a user logs out (ericholguin)

- Fix emoji reactions being cut off (ericholguin)

- Fix ghost notifications caused by Purple impending expiration notifications (Daniel D’Aquino)

- Fix image indicators to limit number of dots to not spill screen beyond visible margins (ericholguin)

- Fix in-app purchase issue that would trigger an error on purchase before confirming the account information. (Daniel D’Aquino)

- Fix issue where bootstrap relays would inadvertently be added to the user's list on connectivity issues (Daniel D’Aquino)

- Fix missing Mute button in profile view menu (Terry Yiu)

- Fix nostrscripts not loading (William Casarin)

- Fix profile not updating bug (William Casarin)

- Fix stale feed issue when follow list is too big (Daniel D’Aquino)

- Fix thread bug where a quote isn't picked up as a reply (William Casarin)

- Fix welcome screen not showing if the user enters the app directly after a successful checkout without going through the link (Daniel D’Aquino)

- Improve reliability of contact list creation during onboarding (Daniel D’Aquino)

- Issue where NWC Scanner view would not dismiss after a failed scan/paste (ericholguin)

### Stats

```

name added removed commits

Fonta1n3 +1 -0 1

Sean Kibler +13 -2 1

alltheseas <64376233+alltheseas> +65 -1 4

Transifex +581 -39 36

Terry Yiu +763 -1383 8

William Casarin +1017 -1564 49

ericholguin +1962 -643 13

Daniel D’Aquino +3885 -761 48

```

I was thinking about this the other day. Appreciate all the work you are doing 👍

Reply to this note

Please Login to reply.

Discussion

No replies yet.