{"id":21296416,"url":"https://github.com/thisdot/lets-chat-with","last_synced_at":"2026-02-07T01:31:15.657Z","repository":{"id":92353635,"uuid":"599794132","full_name":"thisdot/lets-chat-with","owner":"thisdot","description":"Conference networking tool built with Angular PWA and Serverless Framework + AWS AppSync","archived":false,"fork":false,"pushed_at":"2023-07-20T07:08:16.000Z","size":9590,"stargazers_count":3,"open_issues_count":41,"forks_count":0,"subscribers_count":4,"default_branch":"develop","last_synced_at":"2025-03-26T13:28:41.814Z","etag":null,"topics":["angular","appsync","pwa","serverless-framework"],"latest_commit_sha":null,"homepage":"https://app.letschatwith.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thisdot.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-02-09T22:24:43.000Z","updated_at":"2023-05-18T00:01:22.000Z","dependencies_parsed_at":"2025-07-17T11:05:18.502Z","dependency_job_id":"7c1fc08b-58d8-4b3b-8fb6-46caca983585","html_url":"https://github.com/thisdot/lets-chat-with","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/thisdot/lets-chat-with","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisdot%2Flets-chat-with","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisdot%2Flets-chat-with/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisdot%2Flets-chat-with/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisdot%2Flets-chat-with/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thisdot","download_url":"https://codeload.github.com/thisdot/lets-chat-with/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisdot%2Flets-chat-with/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29183947,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T00:44:15.062Z","status":"ssl_error","status_checked_at":"2026-02-07T00:35:01.758Z","response_time":59,"last_error":"SSL_read: 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":["angular","appsync","pwa","serverless-framework"],"created_at":"2024-11-21T14:26:25.810Z","updated_at":"2026-02-07T01:31:15.651Z","avatar_url":"https://github.com/thisdot.png","language":"TypeScript","readme":"# Let's Chat With\n\n## Installation Instructions\n\n### AWS\n\nThe first step is to install the AWS CLI. Follow the [official guide](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) for the installation instructions on your operating system. Once you have AWS installed, you need to create a local profile with the access key.\n\nYou will need Access Key ID and Secret Access Key. We suggest creating a new IAM user on your AWS account and add the following permissions policies to it:\n\n- AmazonDynamoDBFullAccess\n- IAMFullAccess\n- PowerUserAccess\n\nAfter creating a new user you need to create an access key. You can do that in the `Security credentials` tab of edit user page. The `Access Key ID` and `Secret Access Key` will be necessary for the next step\n\n\u003e The profile doesn't need to be named **lcw**, but it's recommended.\n\nRun the following to save the Access Key ID and Secret Access Key to local configuration in the `~/.aws` folder in the profile named `lcw`.\n\n```shell\naws configure --profile lcw\n\nAWS Access Key ID [None]: YOURACCESSKEYID\nAWS Secret Access Key [None]: YOURSECRETACCESSKEY\nDefault region name [None]: YOUR-REGION (e.g. us-east-1)\nDefault output format [None]: json\n```\n\n### Amplify\n\nNext, install the Amplify CLI. The Amplify CLI is used only for code generation:\n\n```shell\nnpm install -g @aws-amplify/cli\n```\n\nNow install the Serverless Framework CLI. This one is used for backend deployment:\n\n```shell\nnpm install -g serverless\n```\n\nSince there are two `package.json` files, one in the root folder, and one in the serverless folder, you will need to run `npm install` twice. (In the future, we may simplify this.)\n\n```shell\nnpm install\ncd serverless\nnpm install\n```\n\nWhile in the `serverless` folder, create a file named `.env` for your environment variables and add the `REGION` and `AWS_PROFILE` properties, which are mandatory. For example, this should be the content of the file if your AWS is named `lcw` as suggested earlier and uses the `us-east-1` region:\n\n```md\nREGION=us-east-1\nAWS_PROFILE=lcw\n```\n\n### Angular\n\nTo be able to use the Angular CLI run the following command:\n\n```bash\nnpm install -g @angular/cli\n```\n\n### User Pool\n\nIn order to use the app and seed it locally, you need to have a User Pool set up in AWS. You can do that in the AWS management console:\n\n- Go to Amazon Cognito and click \"Create user pool\".\n- In the first step, as a sign-in option, select \"Email\".\n- In the second step, choose \"Cognito defaults\" as Password policy and \"No MFA\" for Multi-factor authentication.\n- In the third step, leave everything at default.\n- In the fourth step, select \"Send email with Cognito\".\n- In the fifth step, just enter names for your user pool and app client.\n- In the last step, review your settings and create the user pool.\n\n\u003e If you are planning to deploy a staging environment and use its user pool for local development, you can skip to the \"Configuring Environments and Deployment\" section. And then fill in the value of the created pool into your `.env`.\n\nThe newly created pool information needs to be configured in [.env](./.env) for the main app and in [serverless/.env](./serverless/.env) for the admin app. You can find the `USER_POOL_ID` directly in the list of your user pools or in the details of the pool in the \"User pool overview\" section. To obtain `USER_POOL_WEB_CLIENT_ID` you need to go to the pool details and under `App integration` tab find `App client list` section you'll find the `Client ID` value.\n\n\u003e Don't forget to also replace the `REGION` value in your `.env` files with the actual region you are using (e.g. \"us-east-1\").\n\n### Offline Serverless Backend\n\nIn order to have some initial data available we've created a script to generate some Cognito users and seed data. You can run the following command (from the root directory) and follow the prompts to generate the seed data:\n\n```shell\nnpm run generate-seed-data\n```\n\n**IMPORTANT NOTE:** You need to run this command at least once to have some seed data available before running offline serverless backend. You will also be prompted for the Cognito user pool id that should have been generated earlier.\n\nThe initial password for each user is set to `TestPassword1.`\n\nInstall Java by any means you wish - as long as the `java` binary is in the PATH environment variable. For example, you can use Brew:\n\n```shell\nbrew install java\n```\n\nAdd the Java folder to PATH as suggested by the installer.\n\nInstall Watchman. Watchman will monitor your directory for changes to your GraphQL schema or lambdas.\n\n```shell\nbrew install watchman\n```\n\nNow for these next commands we need to change our working directory into the `serverless/` subdirectory, otherwise they will not work. This is the case for all of the `sls` command invocations. The `sls` command is in the PATH if serverless is installed globally. If you installed it as instructed before, then it should be accessible.\n\nInstall DynamoDB locally:\n\n```shell\nsls dynamodb install\n```\n\nTo verify that Serverless offline works, execute the following command:\n\n```shell\nsls offline start\n```\n\nYou can also invoke `npm start` to start the `sls` offline server in the root directory of the project.\n\nThe above command will automatically migrate and seed the DynamoDB tables whenever it executed. You can verify that the backend is running by opening the health check endpoint http://localhost:3000/health-check. Press Cmd+C/Ctrl+C to stop it once you've verified that it works.\n\nHowever if the profile you're using isn't the default one, make sure to specify it using the `AWS_PROFILE` environment variable.\n\n```shell\n# Linux / macOS\nexport AWS_PROFILE=profile_name\n\n# Windows\nset AWS_PROFILE=profile_name\n```\n\n**NOTE:** If at any point any of the `sls` invocations fail, make sure to clean up any `java` processes lingering in the background. When `sls` fails it doesn't always do a great job of cleaning itself up and will forget to release ports that may prevent future invocations from working properly.\n\n## Quick Start\n\nBefore running the server you need to have some environment variables set in the root `.env` file. We keep some of the environment configuration values outside of source control so that we don't need to commit changes to them to alter those values. You can copy the `.env.example` file as `.env` as a baseline to get started.\n\n```shell\n# Replace these values with your own.\nREGION=us-east-1\nENVIRONMENT=staging\n# Use the local serverless GraphQL API.\nGRAPHQL_ENDPOINT=\"http://localhost:20002/graphql\"\n# Cognito credentials that you need to generate yourself.\nUSER_POOL_ID=\"\u003cyour-user-pool-id\u003e\"\nUSER_POOL_WEB_CLIENT_ID=\"\u003cyour-user-pool-web-client-id\u003e\"\n```\n\nAfter all the above installations and your environment variables are set in the root `.env`, you can now run the client app for the first time. To do so, it's as simple as running:\n\n```shell\nnpm run start:local\n```\n\nfor local development or\n\n```shell\nnpm run start\n```\n\nto run against the config you have in [apps/client/src/environments/environment.ts](./apps/client/src/environments/environment.ts). You can put either local or remote configuration in that file.\n\n**Note:** The Angular CLI serve allows for live reloading of the app whenever you make changes to the client app code. However, there's a bug with this project that causes the CLI to live reload when no active code changes have been made and will reload on you frequently during development. To avoid this, you can run (just remember to refresh your browser by hand when you make changes!):\n\n```shell\nnpm run start:noreload\n```\n\nOnce the app is running on http://localhost:4200/, you should see the app's sign in page. If this is your first time running the app, go ahead and create your account in the signup flow on http://localhost:4200/signup (use a real email you have access to, you will need to multi-factor authenticate!). One helpful tip for development is if you use a Gmail account, you can sign up as multiple users using one email account. To do so, just add a `+1` at the end of your handle. For example: `letschatwith@thisdot.co`, `letschatwith+1@thisdot.co`, `letschatwith+2@thisdot.co`, etc.\n\nAfter signing in with your newly created account, you will notice your only option is to join a conference. Select the `Enter conference URL`, there are a few different conferences you can join if you look through `serverless/seed/event.json`, but for now you can just type `ngconf` to quickly proceed. There will be a few screens with basic prompts to fill out, this will create your **conference specific** `Attendee` object and any other conferences you join you will see these same prompts. Take special note of the interests and identifiers you select -- usually for testing it's easiest to select them all, but the selections do matter for potential matches!\n\nDepending on the state of the databases and how often people are testing, you may not see any cards. Log into a `+1` user in a separate browser/browser instance and follow the same steps and choose similar interests/identfiers, the two users should see each other's cards and be able to match each other. From there you can interact/unmatch/report, edit your conference profile, and join other conferences as you need!\n\n### Admin App\n\nYou can start the admin app in a similar way by running:\n\n```shell\nnpm run start:admin:local\n```\n\nor\n\n```shell\nnpm run start:admin\n```\n\n**Note:** Just like for the client app, the admin app also needs to be configured. Make sure your AWS credentials are in `libs/client/admin/core/environments/src/lib/environment.local.ts` when running the local server, or whatever the respective environment file is if you're testing another configuration.\n\nThe app will run on http://localhost:4201.\n\nBut you will not be able to log in as a normal user because only administrators can log in. To be an administrator, a userneeds to be a member of a group called `ADMINS`. Therefore you need to create a group with that name in your user pool if it doesn't exist already and add a user to it. You should be then able to log in as that user into the admin app.\n\n## Configuring Environments and Deployment\n\nAside from developing locally, you'll also want to set up and deploy online environments.\nThe repos come prepared for two environments: \"staging\" and \"production\".\n\n### Deploying serverless backend\n\nIf you are setting up the project, or you've made changes to your backend you will need to deploy your serverless app to AWS. Because we need to create an S3 bucket which has to be globally unique we are using `bucketSuffix` param in the [serverless/serverless.yml](./serverless/serverless.yml) file. Please generate your own uuid (or a different unique suffix value of your choice) and put it instead of the default value.\n\nYou will also need to know the URLs at which your FE apps will be available and configure these URLs in the `confirmationMailRedirectUrl` field in your [serverless/serverless.yml](./serverless/serverless.yml) file by replacing the placeholder `\u003cdev-app-url\u003e` and `\u003cproduction-app-url\u003e` values in order for your app to redirect users properly to the email confirmation page.\n\nAfter configuring the bucket suffix and `confirmationMailRedirectUrl` you should be able to deploy the backend by running the following command inside of `serverless` directory:\n\n```shell\nsls deploy --stage \u003cdev | prod\u003e --region \u003cmy-region\u003e\n```\n\nSo for example if you want to deploy to the staging environment and your region is `us-east-1`, the command would be:\n\n```shell\nsls deploy --stage dev --region us-east-1\n```\n\nYou can also use the `--appURL` and `bucketSuffix` parameters when running `sls deploy` instead of replacing them in the `serverless.yml` file:\n\n```shell\nsls deploy --stage dev --region us-east-1 --param=\"bucketSuffix=someUUID\" --param=\"appURL=https://my-url\"\n```\n\nAfter you deploy the app you will see the GraphQL endpoint URL in the console output. It will look like that:\n\n```\nappsync endpoints:\n  https://\u003cunique-appsync-id\u003e.appsync-api.\u003cregion\u003e.amazonaws.com/graphql\n```\n\nCopy that URL and put as `graphQlEndpoint` property into:\n\n- [apps/client/src/environments/environment.stage.ts](./apps/client/src/environments/environment.stage.ts) and [apps/client/src/environments/environment.stage.ts](./apps/client/src/environments/environment.stage.ts) in case of staging (\"dev\") and\n- [apps/client/src/environments/environment.prod.ts](./apps/client/src/environments/environment.prod.ts) and [apps/client/src/environments/environment.prod.ts](./apps/client/src/environments/environment.prod.ts) in case of production environment (\"prod\").\n\nIn the same files, you will also need to configure your Cognito properties.\n\nWhen deploying the app a new Cognito user pool was created. You can find it in your AWS console under `CognitoPool_dev` name in case of staging environment and `CognitoPool_prod` in case of production. User pool id should be visible in the list of your pools. To obtain `userPoolWebClientId` you need to go to the pool details and under `App integration` tab find `App client list` section you'll find the `Client ID` value.\n\nIn case you skipped creating a user pool for local development, you will also need to use the same Cognito user pool values in [apps/client/src/environments/environment.local.ts](./apps/client/src/environments/environment.local.ts) and [apps/client/src/environments/environment.local.ts](./apps/client/src/environments/environment.local.ts)\n\n\u003e Don't forget to also replace the `\u003cregion\u003e` placeholder in your environment files with the actual region you are using (e.g. \"us-east-1\").\n\nThen you can build and deploy the front end applications e.g. to AWS Amplify and they should be able to communicate with your serverless backends. You can also use the staging environment to develop against.\n\n### Offline Testing\n\nAs noted in the installation steps, there is a serverless capability in the app which allows development of the app and its backend in a nearly 100% offline scenario. First, you need to ensure that you're running the seeded serverless dynamodb process, as lined out in the [offline backend section](#offline-serverless-backend). Currently, AWS Cognito is still not mockable in our serverless setup, so you will still need to have signed up and logged in as a real user. You will also need to add your User to [the seed](./serverless/seed/user.json) -- with the app running (in normal online scenario) and your user logged in, open the console, switch to the network tab, and select `XHR/Fetch` to filter only our network calls. Find the `graphql` call that fetched `getUserByOwner` (you may need to refresh to see it) and add your user in the following format to `user.json`, substituting your `owner` and `id` IDs in the fetch response you just grabbed:\n\n```json\n{\n  \"__typename\": \"User\",\n  \"notificationConfig\": {\n    \"matches\": true,\n    \"messages\": true,\n    \"subscribe\": true\n  },\n  \"updatedAt\": \"2022-03-02T16:53:34.056Z\",\n  \"createdAt\": \"2022-03-02T16:53:34.056Z\",\n  \"owner\": \"a5a21abf-67bc-4ecf-ad18-efba8a07f4b8\",\n  \"id\": \"d04cc28e-89d2-49dc-8db7-3c93c1b581f6\",\n  \"email\": \"you@thisdot.co\"\n}\n```\n\nAlso, update the `email` property so that we know who this record belongs to.\n\nIn the project root, run `npm run start:serverless:dynamodb` in one terminal, while one of the following commands in another:\n\n```shell\nnpm run start:local\n```\n\nor\n\n```shell\nnpm run start:local:noreload\n```\n\nThis will both start the offline DynamoDB process and the UI.\n\nSign into your account if not already, and open the Network tab in your console, if the app is successfully fetching `graphql` calls from `localhost`, you're successfully running the app in offline mode!\n\n## Compodoc\n\nFor further documentation of the Client app's code and structure, run:\n\n```shell\nnpm run compodoc:client:start\n```\n\n## Tech Stack\n\nCheck out the [Tech Stack Docs](./docs/technology-stack.md).\n\n## Serverless Framework\n\nCheck out the [Serverless Framework Docs](./serverless/README.md).\n\n## Development Workflow\n\nCheck out the [Development Workflow Docs](./docs/development-workflow.md).\n\n## Architectural Guidelines\n\nCheck out the [Architectural Guidelines Docs](./docs/architectural-guidelines.md).\n\n## Testing\n\nCheck out the [Testing Docs](./docs/testing.md).\n\n## Storybook\n\nCheck out the [Storybook Docs](./docs/storybook.md).\n\n## CI/CD\n\nCheck out the [CI/CD Docs](./docs/ci-cd.md).\n\n## Additional Resources\n\nCheck out the [Additional Resources Docs](./docs/additional-resources.md).\n\n## Contributors\n\n| [\u003cimg alt=\"lindakatcodes\" src=\"https://avatars.githubusercontent.com/u/16214572?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/lindakatcodes)  | [\u003cimg alt=\"Amdrel\" src=\"https://avatars.githubusercontent.com/u/4316134?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Amdrel)  | [\u003cimg alt=\"TapaiBalazs\" src=\"https://avatars.githubusercontent.com/u/13385210?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/TapaiBalazs)  | [\u003cimg alt=\"ktrz\" src=\"https://avatars.githubusercontent.com/u/22615575?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/ktrz)  | [\u003cimg alt=\"cmwhited\" src=\"https://avatars.githubusercontent.com/u/18075124?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/cmwhited) |\n| :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------:|\n|                                             [lindakatcodes](https://github.com/lindakatcodes)                                               |                                             [Amdrel](https://github.com/Amdrel)                                               |                                             [TapaiBalazs](https://github.com/TapaiBalazs)                                               |                                             [ktrz](https://github.com/ktrz)                                               |                                             [cmwhited](https://github.com/cmwhited)                                              |\n\n| [\u003cimg alt=\"Coly010\" src=\"https://avatars.githubusercontent.com/u/12140467?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Coly010)  | [\u003cimg alt=\"dariodjuric\" src=\"https://avatars.githubusercontent.com/u/5459296?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/dariodjuric)  | [\u003cimg alt=\"dillionmegida\" src=\"https://avatars.githubusercontent.com/u/42855542?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/dillionmegida)  | [\u003cimg alt=\"dustinsgoodman\" src=\"https://avatars.githubusercontent.com/u/1815379?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/dustinsgoodman)  | [\u003cimg alt=\"frederikprijck\" src=\"https://avatars.githubusercontent.com/u/2146903?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/frederikprijck) |\n| :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------:|\n|                                             [Coly010](https://github.com/Coly010)                                               |                                             [dariodjuric](https://github.com/dariodjuric)                                               |                                             [dillionmegida](https://github.com/dillionmegida)                                               |                                             [dustinsgoodman](https://github.com/dustinsgoodman)                                               |                                             [frederikprijck](https://github.com/frederikprijck)                                              |\n\n| [\u003cimg alt=\"hawkgs\" src=\"https://avatars.githubusercontent.com/u/4449497?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/hawkgs)  | [\u003cimg alt=\"iansamz\" src=\"https://avatars.githubusercontent.com/u/15368874?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/iansamz)  | [\u003cimg alt=\"flakolefluk\" src=\"https://avatars.githubusercontent.com/u/11986564?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/flakolefluk)  | [\u003cimg alt=\"honzikec\" src=\"https://avatars.githubusercontent.com/u/11267785?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/honzikec)  | [\u003cimg alt=\"jdwilkin4\" src=\"https://avatars.githubusercontent.com/u/67210629?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/jdwilkin4) |\n| :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------:|\n|                                             [hawkgs](https://github.com/hawkgs)                                               |                                             [iansamz](https://github.com/iansamz)                                               |                                             [flakolefluk](https://github.com/flakolefluk)                                               |                                             [honzikec](https://github.com/honzikec)                                               |                                             [jdwilkin4](https://github.com/jdwilkin4)                                              |\n\n| [\u003cimg alt=\"JiaLiPassion\" src=\"https://avatars.githubusercontent.com/u/1442575?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/JiaLiPassion)  | [\u003cimg alt=\"KyleMit\" src=\"https://avatars.githubusercontent.com/u/4307307?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/KyleMit)  | [\u003cimg alt=\"thetaPC\" src=\"https://avatars.githubusercontent.com/u/13530427?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/thetaPC)  | [\u003cimg alt=\"morgnism\" src=\"https://avatars.githubusercontent.com/u/9042219?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/morgnism)  | [\u003cimg alt=\"NachoVazquez\" src=\"https://avatars.githubusercontent.com/u/9338604?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/NachoVazquez) |\n| :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------:|\n|                                             [JiaLiPassion](https://github.com/JiaLiPassion)                                               |                                             [KyleMit](https://github.com/KyleMit)                                               |                                             [thetaPC](https://github.com/thetaPC)                                               |                                             [morgnism](https://github.com/morgnism)                                               |                                             [NachoVazquez](https://github.com/NachoVazquez)                                              |\n\n| [\u003cimg alt=\"primedev22\" src=\"https://avatars.githubusercontent.com/u/29854456?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/primedev22)  | [\u003cimg alt=\"robocel\" src=\"https://avatars.githubusercontent.com/u/7085874?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/robocel)  | [\u003cimg alt=\"Zelig880\" src=\"https://avatars.githubusercontent.com/u/9040770?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/Zelig880)  | [\u003cimg alt=\"stevenspads\" src=\"https://avatars.githubusercontent.com/u/496718?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/stevenspads)  | [\u003cimg alt=\"tvanantwerp\" src=\"https://avatars.githubusercontent.com/u/2487968?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/tvanantwerp) |\n| :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------:|\n|                                             [primedev22](https://github.com/primedev22)                                               |                                             [robocel](https://github.com/robocel)                                               |                                             [Zelig880](https://github.com/Zelig880)                                               |                                             [stevenspads](https://github.com/stevenspads)                                               |                                             [tvanantwerp](https://github.com/tvanantwerp)                                              |\n\n| [\u003cimg alt=\"wescopeland\" src=\"https://avatars.githubusercontent.com/u/3984985?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/wescopeland)  | [\u003cimg alt=\"WillHutt\" src=\"https://avatars.githubusercontent.com/u/20880360?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/WillHutt)  | [\u003cimg alt=\"BrettZeidler\" src=\"https://avatars.githubusercontent.com/u/54006458?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/BrettZeidler)  | [\u003cimg alt=\"devpato\" src=\"https://avatars.githubusercontent.com/u/11162114?v=4\u0026s=117\" width=\"117\"\u003e](https://github.com/devpato) |\n| :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------:|\n|                                             [wescopeland](https://github.com/wescopeland)                                               |                                             [WillHutt](https://github.com/WillHutt)                                               |                                             [BrettZeidler](https://github.com/BrettZeidler)                                               |                                             [devpato](https://github.com/devpato)                                              |\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthisdot%2Flets-chat-with","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthisdot%2Flets-chat-with","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthisdot%2Flets-chat-with/lists"}