Coder Social home page Coder Social logo

jeremyckahn / chitchatter Goto Github PK

View Code? Open in Web Editor NEW
1.3K 14.0 153.0 11.44 MB

Secure peer-to-peer chat that is serverless, decentralized, and ephemeral

Home Page: https://chitchatter.im/

License: GNU General Public License v2.0

HTML 1.79% JavaScript 0.01% Shell 0.04% TypeScript 98.10% CSS 0.05%
end-to-end-encryption p2p peer-to-peer privacy serverless webrtc chat decentralized react ephemeral

chitchatter's Introduction

jeremyckahn's github stats

๐Ÿ“„ Check out my resume! ๐Ÿ‘ˆ๏ธ

My guiding principles
  • Open is good.
  • Dependencies are bad.
  • Help others help themselves! ๐Ÿ™‚

Please help support my work!

If you've enjoyed or gotten use out of my work, please sponsor me so I can continue to make great open source software! Any contributions are greatly appreciated. Thank you in advance!

chitchatter's People

Contributors

audiosutras avatar dependabot[bot] avatar flaykz avatar hkabig avatar ighmaz avatar jeremyckahn avatar krayste avatar mohammadtaseenkhan avatar nasaldaemon avatar ramyashreeshetty avatar rogerm4242 avatar sini6a avatar sonigeez avatar the-homeless-god avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chitchatter's Issues

Message recalling

Users should have the ability to request sent messages to be deleted on all peers devices (provided that there is still an active peer connection).

Voice calling

Users should be able to make voice calls to peers.

Message editing

Users should be able to edit their messages after they've been sent.

Easier sharing of private rooms

Should be able to send a private room URL which includes the password, such that one doesn't need to type in the room password. This is already an established pattern with zoom calls.

This can be contained purely in the local javascript layer by putting the password in the part of the URL after the hash #, since anything after hash is not sent to the server in the HTTP request.

If there's a concern about the URL being too readable, potentially a hash of the password is in the URL, rather than the password itself, and manually entered passwords are internally hashed to the same value before being passed to Trystero api call.

OTP feature for room links

Chitchatter needs an integrated OTP feature for securely sharing room links with peers. Something like https://burnernote.com/, but entirely client-side and built directly into Chitchatter.

Acceptance Criteria

Sharer experience

  • There is a new menu item called "Secure Invite"
  • When the user (Sharer) clicks "Secure Invite," they are redirected to a new route called /otp
  • The /otp route presents the user with a form that accepts a room name
  • When Sharer submits the form, the form is replaced with:
    • A Chitchatter Secure Link that can be shared with someone (a Sharee)
      • The Secure Link should direct users to a new /otp/:otpId route (example: https://chitchatter.im/otp/3b5ac1ff-e1c0-4797-9988-21a3e70302f2)
    • A message informing Sharer that they must keep their tab open until Sharee has accessed the Secure Link
    • When Sharee successfully accepts the invite and accesses the chat room, Sharer is automatically redirected to the chat room as well

Sharee experience

  • When a user (Sharee) navigates to the /otp/:otpId Secure Link as provided by Sharer (see above), they are presented with a button to accept the invite
  • When Sharee accepts the invite, they are redirected to the room that the Sharer specified

Notes

This is just the first iteration of this feature. In the future, we should add the following enhancements:

  • Password-protected OTP links
  • Capability to share Secure Links with more than one person

Secure Invite mockup

Inform users when an update is available

As an installed Progressive Web Application, available updates get automatically installed in the background after the page is loaded. When an updated version of the app is available, notify the user.

Nextjs implementation

Great work so far!

I'm trying to migrate this from CRA to nextjs, any clue if this is possible at all? Currently it's showing "Error: Trystero: already joined room".

Message grouping

A series of messages from one peer should appear grouped under the author's user name header, rather than one user name header per each message.

Linux and Windows native apps

Linux and Windows native apps should be produced when Chitchatter is deployed.

This can be achieved with electron-builder. Here's an example of how this can be achieved:

Note: MacOS builds are out of scope and not likely to be supported. This is because it will cost money to enable app auto-updating for that platform:

Code signing is required on macOS

macOS application must be signed in order for auto updating to work.

Android native app

Adding Android .apk support is a distinct effort from Windows/Linux, so I'll break that out into a new issue.

Originally posted by @jeremyckahn in #44 (comment)

Generate and provide installable Android .apk files as part of the build process.

Image sharing

Users should be able to upload image files to each other.

Height of room window too high

When in safari on an iPhone 11, the content when I'm in a room does not fit the screen. I can either scroll down to the input field it up to the first message. I cant see both at the same time

Transcript backfilling

Peers who join a room after there has already been text chatting should be shown the transcript of conversation that has already taken place (based on what's stored in memory on other peers' devices).

Screen sharing

Users should be able to share their screen with a room.

Disable WebRTC relays

Allow the user to disable TURN server relays.

Notes

  • It should be communicated to the user that this may prevent peers from being connected.

Combine audio/video streams

Currently, audio and video streams are handled separately. This comes at a possible performance cost and blocks #77. The streams should be combined so that audio is outputted via <video /> elements that provide audio UI controls.

Play a sound for new messages

When a user receives a message and the Chitchatter room is not in focus, play a sound to inform the user that there is a new message. This functionality should be off by default, but able to be enabled via a persisted user setting.

Display peer list

The usernames for all of the currently-connected peers should be displayed as a list.

QR code support

Users should be able to request a QR code to be presented that links to the current room.

Settings UI

Users should have a Settings UI from which they can set their application preferences and delete their persisted Settings data.

Private rooms

Users should be able to create private rooms that require a password to access.

Acceptance Criteria

Room Creator flow

  • There is a new toggle on the home page to select between "Public" and "Private" (see mock below). "Public" is selected by default.
  • When the user (Room Creator) flips the toggle to "Private", a "Password" entry field appears below the "Room name" field.
  • When the Room Creator flips the toggle back to "Public," the "Password entry field disappears.
  • The "Password" field is shown in plain text and is prefilled with a random UUID.
  • If the "Password" field is emptied out, the "Go to chat room" button is disabled until some content is entered again.
  • When there is both a room name and password provided and the Room Creator clicks the "Go to chat room" button, they are redirected to a chat room via a new /private/:roomId route (example: https://chitchatter.im/private/666e3a53-cdf9-4add-b8be-cd9853ba8885)

Room Participant flow

  • When a user who is not the Room Creator (Room Participant) navigates to a /private/:roomId route, they are presented with a Form Dialog that prompts the Room Participant to enter the room password.
  • When the Room Participant submits a password, the Form Dialog is dismissed.
  • If the password matches what the Room Creator specified, the Room Participant is connected to the room.
  • If the password does not match what the Room Creator specified, the Room Participant is not connected to room participants.
    • It is acceptable for Room Participants who provided an incorrect password to be connected to a room, they just cannot be connected to other peers who entered the correct password.

Technical notes

Trystero's encryption functionality should be used to password-protect peer rooms.

Screen Shot 2022-09-12 at 09 19 50

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.