{"id":16513655,"url":"https://github.com/levysantiago/text-me","last_synced_at":"2026-04-04T08:38:59.680Z","repository":{"id":155730827,"uuid":"616709448","full_name":"levysantiago/text-me","owner":"levysantiago","description":"TextMe is a chat application created using React.js, Websocket, Nest.js, RabbitMQ, Prisma and other technologies.","archived":false,"fork":false,"pushed_at":"2025-01-06T18:56:53.000Z","size":27947,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-06T19:53:38.204Z","etag":null,"topics":["axios","chat","docker","nestjs","nginx","nodejs","postgresql","prisma","reactjs","socket-io","websocket","zod"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/levysantiago.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2023-03-20T23:24:04.000Z","updated_at":"2025-01-06T18:56:58.000Z","dependencies_parsed_at":null,"dependency_job_id":"5b97ca3b-d92f-4d69-b6fd-6dcd99492120","html_url":"https://github.com/levysantiago/text-me","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levysantiago%2Ftext-me","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levysantiago%2Ftext-me/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levysantiago%2Ftext-me/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/levysantiago%2Ftext-me/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/levysantiago","download_url":"https://codeload.github.com/levysantiago/text-me/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241494184,"owners_count":19971871,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["axios","chat","docker","nestjs","nginx","nodejs","postgresql","prisma","reactjs","socket-io","websocket","zod"],"created_at":"2024-10-11T16:09:46.872Z","updated_at":"2025-10-25T08:34:41.477Z","avatar_url":"https://github.com/levysantiago.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TextMe\n\nThe TextMe is a messaging chat application that allows texting with your friends and also with a AI assistant.\n\n## Registry and Messaging\nHere is a demo from Signing up to texting a friend.\n\n\u003cdiv align=\"center\" style=\"display: flex;\"\u003e\n\u003cimg src=\"https://github.com/levysantiago/text-me/blob/main/assets/textme_demo_chat.gif\" alt=\"TextMe application Demo\" width=\"700px\"\u003e\n\u003c/div\u003e\n\n## OpenAI Assistant\nHere is a demo of how to talk with the AI assistant.\n\n\u003cdiv align=\"center\" style=\"display: flex;\"\u003e\n\u003cimg src=\"https://github.com/levysantiago/text-me/blob/main/assets/textme_demo_openai.gif\" alt=\"TextMe application OpenAI Demo\" width=\"700px\"\u003e\n\u003c/div\u003e\n\n## TextMe Screenshots\n\n\u003cdiv align=\"center\" style=\"display: flex;flex-direction: row; width:100%;\"\u003e\n  \u003ca align=\"center\" style=\"display: flex;flex-direction: column;\"\u003e\n    \u003cimg src=\"https://github.com/levysantiago/text-me/blob/main/assets/signup.png\" alt=\"TextMe application Demo\" width=\"300px\"\u003e\n  \u003c/a\u003e\n  \n  \u003ca align=\"center\" style=\"display: flex;flex-direction: column;\"\u003e\n    \u003cimg src=\"https://github.com/levysantiago/text-me/blob/main/assets/login.png\" alt=\"TextMe application Demo\" width=\"300px\"\u003e\n  \u003c/a\u003e\n\n  \u003ca align=\"center\" style=\"display: flex;flex-direction: column;\"\u003e\n    \u003cimg src=\"https://github.com/levysantiago/text-me/blob/main/assets/messages.png\" alt=\"TextMe application Demo\" width=\"300px\"\u003e\n  \u003c/a\u003e\n\n  \u003ca align=\"center\" style=\"display: flex;flex-direction: column;\"\u003e\n    \u003cimg src=\"https://github.com/levysantiago/text-me/blob/main/assets/add-friend.png\" alt=\"TextMe application Demo\" width=\"300px\"\u003e\n  \u003c/a\u003e\n\n  \u003ca align=\"center\" style=\"display: flex;flex-direction: column;\"\u003e\n    \u003cimg src=\"https://github.com/levysantiago/text-me/blob/main/assets/chat.png\" alt=\"TextMe application Demo\" width=\"300px\"\u003e\n  \u003c/a\u003e\n\n  \u003ca align=\"center\" style=\"display: flex;flex-direction: column;\"\u003e\n    \u003cimg src=\"https://github.com/levysantiago/text-me/blob/main/assets/chat2.png\" alt=\"TextMe application Demo\" width=\"300px\"\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n## Technologies used\n\nTextMe was built using different technologies, here are some of them and where each one was used.\n\n- **ReactJS**: Used in the TextMe webpage application construction.\n- **NestJS**: Used to build the TextMe server API.\n- **Socket.io**: Used to send instant text messages from one user to another.\n- **Prisma ORM**: Used as server ORM to interact with the Database.\n- **PostgreSQL**: The database used in TextMe application.\n- **Fastify**: Used to build the OpenAI microservice that works as an used in the TextMe application for the users to interact with an AI friend.\n- **RabbitMQ**: Used to queue the OpenAI microservice messaging requests sent by the users.\n- **Redis**: Used by the OpenAI microservice to temporarily save the messaging context of the conversations with the AI assistant (This is going to be made in a separated database in the future).\n- **OpenAI API**: Used to allow users to interact with Chat GPT (`gpt-3.5-turbo`) inside TextMe app.\n\n## TextMe Services overview\n\nCurrently the TextMe application count with 3 main services, the **Front-End client application**, the **TextMe API Server** and the **OpenAI microservice**. Here is a diagram of how each one of these services interact with each other and with external services as **PostgreSQL**, **Redis**, **RabbitMQ** and **OpenAI API**.\n\n```mermaid\nflowchart LR\n  subgraph TextMe\n  \n  subgraph TextMeServer [TextMe Server]\n  SERVER_HTTP(Http Routers)\n  SERVER_SOCKET_IO(Socket.io)\n  SERVER_PRISMA(Prisma ORM)\n  end\n\n  APP(Front-End) \u003c-.-\u003e |\"Chat (websocket)\"| SERVER_SOCKET_IO\n  APP \u003c--\u003e |\"Http Requests (login, signup, etc)\"| SERVER_HTTP\n  SERVER_PRISMA \u003c--\u003e |\"Stores (postgres/TCP)\"| DB[(PostgreSQL)]\n\n  SERVER_SOCKET_IO \u003c-.-\u003e|\"Chat (websocket)\"| AI_MICRO(OpenAI Microservice)\n  AI_MICRO --\u003e |\"Store Cache (redis/TCP)\"| REDIS[(Redis)]\n  end\n\n  subgraph OpenAI\n  OPENAI[OpenAI API] \u003c--\u003e |\"Http Requests (AI Chat Completions)\"| AI_MICRO\n  end\n\n  subgraph RabbitMQ\n  EXCHANGE[\"Exchange (Direct)\"] --\u003e|Routing| Q1[Queue 1]\n  end\n\n  AI_MICRO --\u003e|Publish| EXCHANGE\n  Q1 --\u003e|Consume| AI_MICRO\n\n  style TextMeServer fill:#333,stroke:#fff,stroke-width:0.5px\n```\n\nThe **OpenAI Microservice** here works as a normal user, it also have it's own registry on the TextMe application. But every time it receives a new message from a user, publishes this message as a new request to the RabbitMQ that will later be consumed by the Microservice itself in order to send to the OpenAI and receive a response from the ChatGPT (`gpt-3.5-turbo`).\n\n# Getting started\n\n## Running the TextMe Demo\n\nAs you saw, we have many services here to run before having the application ready to try. Thinking about that, I made a Demo where you can run few commands and get the application up and running in your machine using Docker.\n\n- To do that you will have to [install the Docker](https://www.docker.com/) in your machine. \n- Then you can start the `PostgreSQL`, `Redis` and `RabbitMQ`running the script below (you might need to run `chmod +x run-services.sh` first):\n\n```bash\n./run-services.sh\n```\n\n- Ok, now you're good to go and run the script to start the TextMe Server, Web Client and OpenAI Microservice (you might need to run `chmod +x run-demo.sh` first):\n\n```bash\n./run-demo.sh\n```\n\n- This command will start the TextMe Server, start the OpenAI Microservice which will connect with Server Websocket as a user and will start the Client application that will be available in `http://localhost:3000`.\n- The TextMe Demo already have two users created that you can start playing with, Alice and Bob:\n\n**Alice credentials:**\n```text\nEmail: alice@gmail.com\nPassword: 12345678\n```\n\n**Bob credentials:**\n```text\nEmail: bob@gmail.com\nPassword: 12345678\n```\n\n## Run the project in your machine\n\nBefore running the project in your machine, certify you have started the PostgreSQL, Redis and RabbitMQ containers, because the TextMe services will need them. If you just passed through the Demo, then you're good to go, if not, you can execute (you might need to run `chmod +x run-services.sh` first):\n\n```bash\n./run-services.sh\n```\n\nTo get the whole project running in your machine instead of Docker, you must go to the respective folders of each service below. It's recommended to execute in this order:\n\n- [Server](./server)\n- [OpenAI Microservice](./openai-microservice/)\n- [Client](./client)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flevysantiago%2Ftext-me","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flevysantiago%2Ftext-me","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flevysantiago%2Ftext-me/lists"}