{"id":20279359,"url":"https://github.com/simplito/privmx-chatee","last_synced_at":"2026-02-14T03:40:58.730Z","repository":{"id":266249337,"uuid":"883216011","full_name":"simplito/privmx-chatee","owner":"simplito","description":"End-to-end encrypted chat, written in Next.js.","archived":false,"fork":false,"pushed_at":"2025-12-18T12:31:12.000Z","size":6793,"stargazers_count":3,"open_issues_count":2,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-12-21T18:27:53.133Z","etag":null,"topics":["chat","communication","end-to-end-encryption","messages","nextjs","privacy","zero-knowledge"],"latest_commit_sha":null,"homepage":"https://privmx.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/simplito.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-11-04T15:19:42.000Z","updated_at":"2025-12-18T12:31:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"06f97226-d3af-427a-8c18-66207d799222","html_url":"https://github.com/simplito/privmx-chatee","commit_stats":null,"previous_names":["simplito/privmx-chatee"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/simplito/privmx-chatee","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simplito%2Fprivmx-chatee","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simplito%2Fprivmx-chatee/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simplito%2Fprivmx-chatee/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simplito%2Fprivmx-chatee/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simplito","download_url":"https://codeload.github.com/simplito/privmx-chatee/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simplito%2Fprivmx-chatee/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29434785,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T03:34:37.767Z","status":"ssl_error","status_checked_at":"2026-02-14T03:34:09.092Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chat","communication","end-to-end-encryption","messages","nextjs","privacy","zero-knowledge"],"created_at":"2024-11-14T13:29:38.629Z","updated_at":"2026-02-14T03:40:58.696Z","avatar_url":"https://github.com/simplito.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Chatee\n\nChatee is a simple chat application created for testing and demonstration purpose. Chatee provides you with full end-to-end encryption communication with the use of [PrivMX Bridge](https://github.com/simplito/privmx-bridge) by Simplito. It is a great starting point for building your own chat application with end-to-end encryption.\n\n![chatee](./chatee.png)\n\n## Features\n\nChatee provides essential chat features, including group chats and file attachments. All the data exchanged within Chatee is\nend-to-end encrypted, meaning that only the end users can read (decrypt) their messages. It means that even the platform hosting\nprovider cannot access user data.\n\nChatee categorizes users into two distinct roles:\n\n- **Staff**: Authorized personnel who administer user accounts and permissions.\n- **Regular users**: Individuals who interact with the app's features and functionalities for communication.\n\nAll Staff users can invite others by sending them an invitation token generated inside the app. Before generating a\ntoken you can decide whether the account will have Staff permissions or be a regular user. Regular users can create new\nchats only with Staff members. Staff can add chats with all the users in the server, regardless of their status.\n\nChats occur in real-time. You can send text messages and files up to 50 MB.\n\n---\n\n## Basics\n\nChatee consist of two parts: **Web Application** and **Server Backend** (both written in Next.js). **Server Backend** manages **user accounts** and utilizes MongoDB for persistent data storage.\n\nAll the sent messages and files are managed by [PrivMX Bridge](https://github.com/simplito/privmx-bridge), to ensure they are properly encrypted and are not stored in your server environment.\n\n## Requirements\n\n- Node.js in 20.10 version;\n- Docker for running PrivMX Bridge instance;\n- MongoDB instance - you can instatiate MongoDB with our docker compose file, more info below.\n\n## How to start?\n\n- To begin, clone this repository. It includes the Chatee sources along with various helpful files.\n- Copy or rename `./.env.example` to `./.env.local`. `.env.exemple` contains essential variables and / or placeholders. All environmental variables for local development should be put there, including MongoDB connection string, PrivMX Bridge URL, API Keys, PrivMX Solution \u0026 Context IDs. You can find more information about these variables in the following sections.\n\n ### **Start Bridge Instance**\n\n \u003e To proceed, ensure that Docker is up and running.\n\nTo succesfully run Chatee, you need to have a running PrivMX Bridge instance. PrivMX Bridge is a service that provides end-to-end encryption for your communication. It is a crucial part of Chatee's architecture.\n\nTo set up a PrivMX Bridge instance locally clone [PrivMX Bridge Docker](https://github.com/simplito/privmx-bridge-docker) repository. Follow instructions included in its README. The PrivMX Bridge startup process will create all necessities required to run Chatee with end-to-end encryption, including essential ENV variables. After initialization, the terminal will output the following:\n\n- **PrivMX Bridge URL** - address of the running PrivMX Bridge instance;\n- **API Key ID** and **API Key Secret** - used to authorize Chatee requests to PrivMX Bridge;\n- **Solution ID** - ID of the created Solution;\n- **Context ID** - ID of one of the Contexts inside the Solution.\n\nPaste them into the `./env.local` file created earlier.\n\n\u003e If you want to know more about PrivMX Bridge, visit our documentation [here](https://docs.privmx.dev/).\n\n#### JWT Salt\n\nGenerate a random **JWT_SALT** using e.g. `openssl`:\n\n```sh\nopenssl rand -base64 20\n```\n\nand paste it into your `.env.local`.\n\n```ENV\nJWT_SALT=GENERATED_RANDOM_SECRET\n```\n\n#### Next Public Backend URL\n\nFor demo purposes, Chatee runs in localhost (port 3000). `NEXT_PUBLIC_BACKEND_URL` configures the app's default address. In production environment, you can use a fully qualified domain name.\n\n```ENV\nNEXT_PUBLIC_BACKEND_URL=http://localhost:3000\n```\n\n### **Start MongoDB Instance**\n\nYou need a **MongoDB** Instance with replica sets for transactions.\n\nFor demo purpose, you can use the `docker-compose-mongo.yml` from this repository. Run the following command to start MongoDB Docker in your local environment:\n\n```sh\ndocker-compose -f docker-compose-mongo.yml up\n```\n\nIt will create a MongoDB instance running on `0.0.0.0:27017` with a replica set named **rs0**.\n\nWhile using Docker and the provided `docker-compose-mongo.yml` file, you can use the following lines describing connection to your local MongoDB database:\n\n```ENV\nREPLICA_SET=rs0\nMONGODB_URI=mongodb://127.0.0.1:27017/?replicaSet=$REPLICA_SET\n```\n\nFeel free to adjust these settings if you opt for a custom setup.\n\n## Running the App\n\nIn a new terminal, go to project root folder.\n\n```sh\nnpm install\nnpm run dev\n```\n\nDurning the first run,  Chatee server will create the first invitation token. It's important to  **copy and save it somewhere**, it will be used for login.\nGo to \u003chttp://localhost:3000/sign-up\u003e and create the first Staff user.\n\n### Creating Threads\n\nWhen creating threads (chat rooms) you are given a list of all the users from your app.\nStaff users can create chats with all the users in the app.\nRegular users can create chats only with Staff.\n\n### Production Notes\n\n#### Alternative ways to use our docker-compose-production.yml\n\n1. Create the same .env file but name it **.env.production**.\n2. Run docker-compose. Variable `PORT` will define on which port it will be available.\n\n```sh\n   PORT=PORT_NUMER_OF_APPLICATION docker-compose -f docker-compose-production.yml up\n```\n\n## License\n\n[MIT](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimplito%2Fprivmx-chatee","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimplito%2Fprivmx-chatee","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimplito%2Fprivmx-chatee/lists"}