Giter Club home page Giter Club logo

chat's Introduction

⚠️ WARNING: This project is not production-ready. It is an unstable experimental proof-of-concept and may contain bugs and/or incomplete features. Use it at your own risk.

App Logo

Live App | Website | Reddit | Medium

Chat

GitHub stars GitHub forks GitHub issues GitHub license Staging gh-pages-build-deployment CodeQL Code size PRs Welcome

Discover Positive Intentions Chat: A secure, browser-based chat application leveraging WebRTC for decentralized messaging, file sharing, and virtual reality experiences. Prioritizing privacy and user control, it's redefining the way we think about online communication. Join us in shaping the future of chat.

🚀 Introducing a groundbreaking chat application that redefines online communication. Built with a focus on privacy, security, and user control, this app offers a pioneering approach to chatting, file sharing, and exploring virtual spaces—all from within your browser.

🔒 Privacy by Design: Leveraging WebRTC for peer-to-peer connections, our app ensures your conversations and files stay between you and your contacts—no middlemen involved. With encryption technologies built into modern browsers, we enable users to manage their encryption keys, ensuring unmatched privacy and security.

🌍 Decentralized and Empowering: Say goodbye to the constraints of traditional server-based apps. Our technology allows for decentralized authentication, encrypted messaging, and even decentralized file transfers. Your data, your rules.

🔥 Feature-Rich Experience:

  • Secure Messaging: End-to-end encryption for all messages.
  • File Sharing: Seamlessly share files with peers using cutting-edge WebRTC technology.
  • Voice and Video Calls: Connect more personally with high-quality calls.
  • Mixed-Reality Spaces: Dive into shared virtual environments for a new way of interaction.
  • Image Board: Share and discover images in a community-driven space.
  • Webtop Environment: Desktop experience on the browser.

👾 Tech for the Future: Beyond chat, we're exploring virtual reality, enabling users to share 3D positions and live video streams within VR environments. Imagine socializing in a virtual space that's as easy to access as opening your browser.

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.

Prerequisites for development

You need to have Node.js installed on your system to run the app. If you don't have Node.js installed, you can download it from here.

Running the app

First, clone the repository to your local machine.

For users that dont want to install anything and just want to try the app locally, you can open the file found at <root>/Frontend/index.html in a browser of your choice.

For NPM users:

npm install
npm start

For docker users:

npm run docker:build # docker build -t chat -f docker/Chat.Dockerfile . --no-cache
npm run docker:run # docker run --name chat-container -p 8080:80 chat

This will start the development server and open the app in your default browser. If it doesn't open automatically, you can navigate to http://localhost:8080 to view the app.

See the package.json file for more scripts.

For GitHub users:

You can fork the repo and host it on Github Pages for free if the repository is made public. After forking the repo, you can go to Settings>Pages to set the following:

  • Source: "Deploy from a branch"
  • Branch: "staging"
  • Select folder: "/docs"

Finally click "Save" to enable Github Pages.

Trying it out

Try it out between you phone and laptop. The app is using browser storage, so if you open 2 tabs of the app, they will use and update the same data. This can lead to conflict issues and should be avoided. instead if you want to try on your device, you can try between different browsers (like chrome and edge). Its also worth noting that incognito modes on all the browsers would also use a different store.

iOS, Android and Desktop

The app can be installed on iOS, Android and Desktop. The project is not mature enough to be published on the app stores (exception?). This repository has the necessary files to build the app for these platforms. This should be done by someone with experience in building apps for these platforms.

iOS and Android

To build for mobile, you need to have respective build tools installed on your computer (xcode/android studio) installed on your system. the build is created with capacitorjs found here. See the folders ios and android in the root folder for the build files.

Desktop

To build for desktop, you need to install the dependencies with the npm i command, then you may also need to install rust on your system as described here. The desktop build is based on Tauri found here. You can create a build by running npm run tauri build. the build will be found in the tauri/target/release/bundle folder (you may need to add executable permissions chmod +x <filename>).

Join Us on This Journey

Pushing the boundaries of what's possible with current web technologies to create a chat app that prioritizes user empowerment and privacy. But this is just the beginning. With your support, we can explore new features, refine the user experience, and expand the app's capabilities.

How You Can Help

  • Feedback: Your insights are invaluable. Share your thoughts on current features, suggest new ones, or report any bugs you encounter.
  • Development: Interested in contributing code? Let's talk! While the app isn't fully open-source yet, parts of it are, and I'm keen on opening more in the future.
  • Spread the Word: Help us grow by sharing the app with others who value privacy and control over their digital communication.
  • Github Stars: If you like the project, consider starring the repository. It helps others discover it and boosts my motivation.
  • Financial Support: Development is fueled by passion and coffee. Your sponsorship helps keep both flowing.

chat's People

Contributors

xoron avatar dependabot[bot] avatar

Stargazers

 avatar Ricardo M. Aleixo avatar  avatar Mahmoud Zalt avatar Sibelius Seraphini avatar  avatar Jessy GÉRY avatar Jo Kroese avatar Christian Neff avatar Alexandru-Mihai Maftei avatar Remy J Kim avatar marc avatar Almir Dzidic avatar Nemanja Mitic avatar Izzy avatar Giulio Ferrazzi avatar  avatar  avatar Ish Abbi avatar Seohyun Joo avatar  avatar Jordan Vohwinkel avatar VOLO Digital Agency avatar Suri avatar  avatar  avatar Ján Bočínec avatar Victor avatar Dmitriy avatar Savino Basanisi avatar Nicolas avatar  avatar [sCRiPTz-TEAM] avatar  avatar  avatar  avatar Leon avatar Koray avatar Girish Ravi avatar Joel Nod avatar Illya Marchenko avatar  avatar DJGosnell avatar  avatar  avatar Mike avatar  avatar Andrii Syrokomskyi avatar Rüger avatar Anurag Vohra avatar YI avatar Akhil Pillai avatar Ken Eucker avatar Zach avatar  avatar r3dm4t3 avatar SJ avatar  avatar aRandomSteve avatar Steven Evans avatar

Watchers

 avatar

chat's Issues

Docker image

Hello,
Thanks for the incredible work.
Would very much appreciate a docker image. Is it something you can see in the future?
Thanks again and have a great one.

wireup encryption demo

creating a javascript encryption demo page: https://chat.positive-intentions.com/#/encrypt

in the file described as: src/components/pages/encryption/Encryption.js some UI components are created, but it isnt connected to the functionality.

encryption functionality is as decribed by the file here: https://github.com/positive-intentions/cryptography/blob/staging/src/stories/components/Cryptography.tsx

it is used as a federated module like in the file: src/components/p2p/ReduxConnectedPeerProvider.js. see import { useCryptography } from "cryptography/Cryptography"; usage in the file.

Idea: WebXR hand meshes in augmented reality

details to be investigated:

Babylon includes hand meshes in the package. they are right/left hand models, based on the WebXR specs found here: https://immersive-web.github.io/webxr-hand-input/

If you are able to manipulate the mesh using the 25 points required for WebXR hand tracking, you can “emulate” it.

the code that adjust the hand meshes using this data is here: https://github.com/BabylonJS/Babylon.js/blob/master/packages/dev/core/src/XR/features/WebXRHandTracking.ts

there is hand-post estimation in the app based on the technology described here: https://blog.tensorflow.org/2021/11/3D-handpose.html it can be tested in the app here: https://chat.positive-intentions.com/#/hands

the result of the models estimations is that there is a 3d point-cloud of the pose detection.

in theory it is possible to get the handpose-estimation mapped into the BabylonJS augmented reality as seen on the app here: https://chat.positive-intentions.com/#/verse

Help me with testing on iOS

I don't have an iPhone and I notice there's are iOS specific bugs throughout on other peoples devices. Help me identify and fix them.

Create webrtc wizard

(for testing purposes i use 2 separate browsers (not just windows) (there is a bug where you need a profile for this to work... you can ignore this bug for now, but for incognito, you will have to have agreed to terms and conds in the welcome screen)):

demo as seen: https://chat.positive-intentions.com/#/webrtc
its a bit delicate, but the sequence to connect is something like:

  • peer1 - generates webrtc offer "webrtc-offer"
  • peer2 - pastes in "webrtc-offer" into the field for "WebRTC remote offer". a "webrtc-answer" is generated.
  • peer1 - pastes in "webrtc-answer" into the field for "WebRTC remote answer"
  • peer1 and peer2 - exchange "webrtc-ice-candidate" into the field for "WebRTC remote ice candidate"
  • you can now send a message and it will be logged to the browser console.

this interaction can be reduce to sharing 2 separate inputs for each peer in a sequence as described above. (it is possible to combing the "webrtc-ice-candidates" with one of the other fields)

functionality to create

  • use qr-code to exchange the required webrtc data (the implementation for this is not finished: src/components/atomic/molecules/qr-text/QRText.js)
  • create accordion structure with steps "meet", "handshake".
  • functionality so far: src/components/pages/webrtc/WebRTC.js

future considerations:
this would be ideal to investigating sending encryption keys over qr-code. it might get appende to this functionality.

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.