:IF: Friends - the messenger you'll never want to move away from

Some minor upgrades like dweb attribution, routes upgrade and larger avatar pics + opening them in modal on click:


here we go - my roadmap from here (I tried to reorder in a reasonable manner to take amount of work and importance of the features into account - while thinking about the order I decided to go for the first tasks immediately :wink: ):

  • dweb watermark
  • route upgrades as per dwebs upgrade
  • opening friends avatars in larger modal
  • showing your own avatar pic in the messenger somewhere (on the left side above your friends maybe ..?)
  • using asymmetric encryption to exchange encrypted messages (offer/answer/offline messages) in the public scratchpads
  • privacy anonymity with friends - chapter in readme; graphic to show message flow/connections what is communicated where? (thank you @Toivo)
  • scrolling when too many friends
  • simplifying and documenting external stylesheets for easier theming of friends
  • implementing plugins (loaded from autonomi) as JavaScript Webcomponents.
  • revisiting translations / locations where text is visible
  • more extensive profile pages
  • code cleaning :smiley:
  • extended states (free for chat, afk, DND, show offline)
  • SDK for plugins
  • offline messages (simply utilizing the handshake scratchpads - message encrypted via public key of a asymmetric public key read from friends profile)
  • optionally persisting chat history with friends via scratchpads
  • separate view in chat with persisted files - maybe categorized by type (pictures / audio / video / others)
  • display ANT/gas balance (just here this late because I hope for @happybeing to implement the needed route before I reach this point :smiley: I guess I’ll go for a PR for dweb if it is not implemented here :smiley: )
  • upload avatar in-app (same as point above)
  • releasing a python version of smokesigns (name already reserved)
  • and creating a simple demo on how to use it to connect (from everywhere in the world) via WebRTC to e.g. a locally running Raspberry Pi with a camera and fetching a picture it takes with a pi-camera
  • python terminal chat (friends compatible - only selecting friends and chatting with them as text only; no adding/removing of friends etc)
  • the whole Friends app as JS WebComponent
  • import and use root private key (different from the one generally used by dweb)
  • create invite (send coin to a private key and encrypt it) → share a link leading to the info
  • Friends bundled with dweb via Tauri as standalone app
  • Friends bundled with dweb via Tauri as standalone app for mobile (thank you for this task @happybeing :stuck_out_tongue: )
  • multi session / multi user chats (chat groups!)
  • in-app feedback (anonymously writing to feedback-scratchpad that I then will check for new feedback :smiley: )
  • audio chat
  • video chat (@Tom1 that’s you ;D )
  • screen sharing on audio/video chat
  • account recovery through multiple other friends (multisig/multi-decrypt of owner-secret)
  • revisiting the need for a companion app to break into symmetric nat
    • checking the possibility to route messages through autonomi via its kademlia routing client → client if direct messaging is not available or not desired :smiley:

ps: upgraded the app on alpha and mainnet; as of now only alpha will succeed in the handshake due to mainnet read/write-speeds

12 Likes

little friends upgrade! :smiley: :tada:

  • showing your own avatar pic in the messenger somewhere (on the left side above your friends maybe ..?)
  • Interface Languages: English, Deutsch, Français, Español, Български, 日本語, 한국어, 中文

(yeah - that language stuff wasn’t on the roadmap - I just felt like it’s time for proper language support)

feel free to ask for other languages I should add - just thought those may be good ones to start with :man_shrugging:

12 Likes

I just got hit with my first facebook “Ad Break”. Dont use facebook much, now even less.

I notice facebook allow you do down load yiur data.

I guess it would be a bit of a massive job to have “Friends” ingest tye dowbload file and recreate my content and create placeholders for my socal graph?

I think enough people are upset they would download their data and trasfer over to autonomi.

4 Likes

Korean please

2 Likes

hmhmmm - since (at least as of now) friends is more like the messenger window within Facebook and currently doesn’t even persist messages once you closed the window and reopen it that would be a bit too much for it in the foreseeable future.

but I guess a real social platform (as jams / project decorum were planned to be) could try to go this route and just use friends as instant messenger service within the platform =)

3 Likes

aaaaaactually I think

Korean (한국어)

may already be available :smiley: …? or did chatgpt mess it up?

3 Likes

just for the record - I’m a bit proud of my language management update of tonight :smiley:

since I’m using AI agents to do the translations (and they sometimes just edit a few languages instead of all, and it takes forever for them to find the right place to add the key/value pair, then they forget to add the key in the list of Translationkeys, …) I wrote into my main translation file precise rules they should follow.
all files then have the exact same format which results in the agent being able to see where it should add/remove a key in the english version → and then it just does the exact same edit in the exact same line in all language files =)

we’ll see how well that works but I’m very positive this is a way agents can operate efficiently now!

4 Likes

Codeberg has a crowd sourcing translation platform. :thinking:

1 Like

that’s cool but I really think that people don’t need to be bothered with this anymore (until proven otherwise :smiley: )

…language models might not be able to think logically but they certainly am good at translating stuff :smiley:

1 Like

They are impressive but can’t be 100% because they don’t have context or understanding. Maybe that’s good enough, maybe it will look bad.

All LLM content looks off to me.

1 Like

:slight_smile: the good thing is that people can always just open issues / mention it to me that something looks off => I can edit it =)

I’ll start out like this and will adjust if/where needed :slight_smile:

ps: but they have context when I run them within my IDE => they know where I place a button - they can see what it’s being used for => so far in English and German it was perfect (the thing I’m most worried about here is length of text … that might vary in different languages wildly and can completely screw up the layout …)

3 Likes

Nice idea in theory, but very few people open issues. You will probably never know what your UI looks like in Korean unless you get Koreans to review it and Codeberg gives you an easy ish way to achieve that because people love to do that kind of thing.

Like open source itself, people love to help each other, and that’s why it works so well. Businesses can’t compete with this and that is probably one reason they are so wanting to not need people any more.

If thet don’t need people it’s bad. If they do, and I think they will find that’s true in a year or five, it’s also bad. I’m lucky that I’m retired, but it still bothers me because the world is bad enough already and I care about others, unlike the tech sociopaths betting billions on so called AI and taking crucial resources away from communities who will literally die without them, in order not to miss out on getting richer.

/rant :rofl:

2 Likes

:slight_smile:

i have a roadmap point! :smiley:

that should allow people to really simple give me feedback if there’s something wrong for them :smiley:
you’re ofc right that people usually hesitate to open issues etc … and maybe just using the codeberg crowd sourcing would be the best approach :smiley: in this moment of time everything changes so fast that I think an automatic translation is probably good enough and is the fastest to iterate for me :slight_smile:
I’ll reconsider when the dust starts to settle and we enter an era of stability =D

2 Likes

speaking of roadmap!

I just released a new version of smokesigns (webRTC communication library easy to use with dweb/autonomi!) with the option to use RSA public/private key encryption of the WebRTC offer/answer so even if anybody would learn where in the network (on which address) you and your friend exchange the peer info nobody except you 2 will be able to read each others IP addresses

I already implemented it into the latest version of friends which I’m running locally and where I see connections successfully being established:

while the content of the handshake-scratchpad is encrypted :slight_smile:

… but it’s late now - I will do some more tests and validate the encrypted friendship request flow too before releasing the next version on beta- and mainnet :smiley:

documentation of used encryption and where which data is being communicated is being worked on next :slight_smile:


updated state:

  • dweb watermark
  • route upgrades as per dwebs upgrade
  • opening friends avatars in larger modal
  • showing your own avatar pic in the messenger somewhere (on the left side above your friends maybe ..?)
  • revisiting translations / locations where text is visible
  • Interface Languages: English, Deutsch, Français, Español, Български, 日本語, 한국어, 中文
  • scrolling when too many friends
  • using asymmetric encryption to exchange encrypted messages (offer/answer/offline messages) in the public scratchpads
  • privacy anonymity with friends - chapter in readme; graphic to show message flow/connections what is communicated where? (thank you @Toivo)
  • spinner for sending/answering friendship requests
  • ‘last seen online’ display for friends
  • simplifying and documenting external stylesheets for easier theming of friends
  • implementing plugins (loaded from autonomi) as JavaScript Webcomponents.
  • more extensive profile pages
  • code cleaning :smiley:
  • extended states (free for chat, afk, DND, show offline)
  • SDK for plugins
  • offline messages (simply utilizing the handshake scratchpads - message encrypted via public key of a asymmetric public key read from friends profile)
  • optionally persisting chat history with friends via scratchpads
  • separate view in chat with persisted files - maybe categorized by type (pictures / audio / video / others)
  • display ANT/gas balance (just here this late because I hope for @happybeing to implement the needed route before I reach this point :smiley: I guess I’ll go for a PR for dweb if it is not implemented here :smiley: )
  • upload avatar in-app (same as point above)
  • releasing a python version of smokesigns (name already reserved)
  • and creating a simple demo on how to use it to connect (from everywhere in the world) via WebRTC to e.g. a locally running Raspberry Pi with a camera and fetching a picture it takes with a pi-camera
  • python terminal chat (friends compatible - only selecting friends and chatting with them as text only; no adding/removing of friends etc)
  • the whole Friends app as JS WebComponent
  • import and use root private key (different from the one generally used by dweb)
  • create invite (send coin to a private key and encrypt it) → share a link leading to the info
  • Friends bundled with dweb via Tauri as standalone app
  • Friends bundled with dweb via Tauri as standalone app for mobile (thank you for this task @happybeing :stuck_out_tongue: )
  • multi session / multi user chats (chat groups!)
  • in-app feedback (anonymously writing to feedback-scratchpad that I then will check for new feedback :smiley: )
  • audio chat
  • video chat (@Tom1 that’s you ;D )
  • screen sharing on audio/video chat
  • account recovery through multiple other friends (multisig/multi-decrypt of owner-secret)
  • revisiting the need for a companion app to break into symmetric nat
    • checking the possibility to route messages through autonomi via its kademlia routing client → client if direct messaging is not available or not desired :smiley:
3 Likes

Desperate to get poking at this
but all I see is


for the last 10 mins :frowning:

dweb serve output is this scrolling past furiously


DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: ae458f48ab4fe204c84422951b34145211dff4507359c840a6883974a0ba6cfe874359c6ca7dc90b2f9462d223ef85b1
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: ae458f48ab4fe204c84422951b34145211dff4507359c840a6883974a0ba6cfe874359c6ca7dc90b2f9462d223ef85b1
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: ae458f48ab4fe204c84422951b34145211dff4507359c840a6883974a0ba6cfe874359c6ca7dc90b2f9462d223ef85b1
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: ae458f48ab4fe204c84422951b34145211dff4507359c840a6883974a0ba6cfe874359c6ca7dc90b2f9462d223ef85b1
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: ae458f48ab4fe204c84422951b34145211dff4507359c840a6883974a0ba6cfe874359c6ca7dc90b2f9462d223ef85b1
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
DEBUG /scratchpad-private POST failed to create scratchpad - Scratchpad already exists at this address: b15569114cc69755847a8a316b5563422a1ca3accb4843154d0a0c9980feca864e8d58a05aa4cbea397ee192ffb437ff
1 Like

huh oO … that would be a pretty dumb reason to fail … let me check …

can you just do an f5? first assumption would be that it failed to read so tried to create it (But it was there … just not readable in that moment …)

why does it try to create 2 different addresses as private scratchpads?! Oo … did you try to set an accountname?

…do you have enough token in the wallet used by dweb to create it? is the error message possibly wrong? mainnet or beta?

1 Like

Other network stuff seems OK FWIW

I had an account name set up before but I could never connect to anyone but you IIRC

So when I dweb open friends this time I get invited to set up a fresh account …

oooooh - so it’s a migration issue … the data in your account is unexpected and therefore it goes the route of non-existing account package … which is wrong behavior … sorry about that …

1 Like

Dont apologise - its my job to break things :slight_smile:

1 Like

I restarted dweb serve
and now Im Activated but with no connections as before

1 Like