teleren/devto huggingface dataset:
Automated JIRA release notes
Tags: actionshackathon, github, actions, jira
Published: 2020-08-16 10:52:49

This is my submission to the [#ActionsHackathon](https://dev.to/devteam/announcing-the-github-actions-hackathon-on-dev-3ljn). It is a github action designed to generate release notes based on commit messages.

### My Workflow

My tendency to get tunnel vision when working has often led me to lose track of events happening in my team. The number of projects and repos being large, keeping track of release cycles had me worried.

I built the [`patrixr/jira-release-notes`](https://github.com/marketplace/actions/jira-release-notes) action with the intent of being notified by email whenever one of our (many) apps got released.

It works as follows:

- It **compares** two git refs and reads all the new commits (typically when a pull request is merged)
- It finds JIRA ticket references in the commit messages (e.g ABC-123)
- Using jira credentials, it will retrieve the ticket info
- It will generate release notes in Markdown based on those tickets

The available outputs are:

- **PDF** - The action will always generate a pdf file
- **Email** - Optional - If provided with a Sendgrid key and recipients, will forward the notes via email


### Submission Category: 

- DIY Deployments


### Yaml File or Link to Code

For details, head over to the github repo:

{% github https://github.com/patrixr/jira-release-notes %}

You can also find it on the [Marketplace](https://github.com/marketplace/actions/jira-release-notes)


Usage example

```yaml
name: Forward release notes

on:
  pull_request:
    types: [closed]
    branches:
      - live

jobs:
  release-notes:
    runs-on: ubuntu-latest
    if: github.event.pull_request.merged == true
    steps:
    - uses: actions/checkout@v2
    - name: Generate and email notes
      uses: actions/jira-release-notes@v1.0.1
      id: pdf_generator
      with:
        head: ${{github.event.pull_request.head.sha}}
        base: ${{github.event.pull_request.base.sha}}
        jira-code: 'ABC'
        jira-host: jira.mycompany.org
        jira-username: ${{secrets.jira_username}}
        jira-password: ${{secrets.jira_password}}
        email-to: 'john@mycompany.org,jane@mycompany.org'
        sendgrid-api-key: ${{secrets.sendgrid_api_key}}
        app-name: 'My Awesome Service'
        unshallow: true
    - name: Process the pdf
      run: echo "The generated pdf was ${{ steps.pdf_generator.outputs.pdf }}"
        
```

### Additional Resources / Info

We have been using this tool within the [Goodcity Project](https://www.goodcity.hk), a system designed to gather, managed and distribute donations. The project lives under the umbrella of the non-profit [Crossroads Foundation](https://crossroads.org.hk). Our work is available on [github](https://github.com/crossroads).

### Ideas for improvement

- Multiple email service support
- Custom Markdown template for email/pdf structure
- Support for other project management platforms

Feel free to reach out for any issue or suggestions :)


Happy coding everyone !

Cheers !
A Short Introduction to APIs in 6 slides
Tags: beginners, codenewbie, webdev, computerscience
Published: 2020-08-16 10:52:38

You will discover:
➡️ How APIs are working
➡️ How to request an API
➡️ How an API answers
➡️ Why is it interesting to have an API
➡️ The API business

An API (Application Programming Interface) is an interface between multiple applications. It means that it allows two applications to communicate.

An API follows the principle of question and answer, exactly as humans do.

![How APIs are working - Non technical](https://dev-to-uploads.s3.amazonaws.com/i/la181xadgbdhsb79p6se.png)

Questions, and answer are the same as humans, but it's written in a technical way.

Request: "Give me all the pictures of Bender's profile"
Answer: "Here're all pictures of Bender's profile

![How APIs are working - Technical](https://dev-to-uploads.s3.amazonaws.com/i/ig8m04ysu3wn9ow02fvb.png)

Because APIs are not humans, you can't ask questions as you do on Google. To communicate with them, you can use fourth basic requests.

![How to request an API](https://dev-to-uploads.s3.amazonaws.com/i/4ftjv49w7lztrc2gj4z9.png)

Most of the time, an API is answering your request with a language called JSON.

JSON stands for "JavaScript Object Notation". It's a data representation easy to read by humans and easy to manipulate through code.

![How an API answers](https://dev-to-uploads.s3.amazonaws.com/i/4qupjx5e36hi0bxvrski.png)

When you use an API on your project, you will divide the visual part (front-end) from the server (back-end). It means that your application will be at least divided into two projects.

![Why is it interesting to have an API](https://dev-to-uploads.s3.amazonaws.com/i/gpybsoc7zoe82cqmu3z0.png)

An API is a valuable part of a project. Some companies build their applications and sell access to their API at the same time.

For example, for a company that makes home deliveries, it's a huge time saver to outsource the geolocation part to Google.

![The API business](https://dev-to-uploads.s3.amazonaws.com/i/lkhte2ewwiol6ohxuqzo.png)

---

If you want more content like this, you can [follow me on Twitter](https://twitter.com/gaelgthomas/), where I tweet about web development, self-improvement, and my journey as a fullstack developer!
React.ReactNode, React.ReactElement, JSX.Element là gì?
Published: 2020-08-16 10:42:30

---
title: React.ReactNode, React.ReactElement, JSX.Element là gì?
published: true
description: 
tags: 
cover_image: https://dev-to-uploads.s3.amazonaws.com/i/rsk1t9l8w4up1jwg44se.jpg
---

Typing là một phần tất yếu của việc lập trình bằng typescript. Khi bạn import thư viện nào mà quên cài đặt mấy cái "@type/..." là bị VSCode complain ngay.

*Tuy nhiên vì không ai viết document cho type nên chúng ta không hề biết sử dụng type nào cho từng loại biến. Developer phải từ mò mà không có hướng dẫn nào cả*

Và cụ thể là khi sử dụng ReactJS với Typescript, có nhiều trường hợp bạn không biết phải sử dụng type nào để khai báo biến cho event hoặc cho các props.

Ngộ nghĩnh là việc sử dụng những type như *React.ReactNode, React.ReactElement, JSX.Element* đó hầu như đều mang lại kết quả như nhau, tuy nhiên thỉnh thoảng lại bị vscode báo lỗi. Vậy chúng khác nhau như thế nào và sử dụng sao cho đúng?

Để hiểu bọn này khác nhau thế nào, chúng ta sẽ làm 1 việc đơn giản là đọc source code:

Sau đây là phần định nghĩa của ReactElement:
```jsx
interface ReactElement<P = any, T extends string | JSXElementConstructor<any> = string | JSXElementConstructor<any>> {
   type: T;
   props: P;
   key: Key | null;
}
```

Và đây là định nghĩ của JSX.Element:
```jsx
interface Element extends React.ReactElement<any, any> { }
```
Vậy thì JSX.Element và React.ReactElement đều là một, và chúng ta dùng 2 cái này khi mà bạn muốn variable của mình nhận vào 1 React component.

Đối với React.ReactNode:
```jsx
type ReactNode = ReactChild | ReactFragment | ReactPortal | boolean | null | undefined;
type ReactChild = ReactElement | ReactText;
type ReactText = string | number;
```
Như vậy ta có thể thấy ReactNode có thể chấp nhận *ReactElement, string, text, boolean, null, undefined*. Chúng ta có thể dùng ReactNode để khi muốn sử dụng render props.

Chẳng hạn:
```jsx
<MyElement header={MyHeader} />
```
Trong trường hợp này, nếu như bạn muốn header của mình flexible, có thể nhận được cả string hoặc là nhận được cả 1 React component khác vào thì tốt nhất type của header sẽ là ReactNode :)
MY ENCOUNTER WITH LINUX UBUNTU.
Tags: linux, ubuntu, grub, bash
Published: 2020-08-16 10:40:39

**A**h! thank-God that now it’s all set! What actually happened was I-myself reset my Administrative-Login Password for Linux Ubuntu [18.04 lts]. But, Unfortunately, I forgot that and became panic for which I had done. Ultimately, I started using Trial & Hit method but, none of my expected password Matched. Then, I came to know after a Great research that Something can be done. And thus, I reached a Solution and soon {Late night} the problem resolved. So, if You Gotta stuck while re-setting the password forgotten for your Administration Login in Latest version of Linux Ubuntu i.e. 18.04 lts. Then all you have to do to resolve this Issue in 10 minutes is to follow the Given steps-:

* Start You PC. Keep in Mind that the moment when you click the power button, You have to click `ESC` key suddenly to go to `GNU GRUB MENU` directly. This is the main thing you have to do i.e. Entry in GNU GRUB MENU. But, if you see Ubuntu or sometimes Manufacturer’s logo on the screen-Then You’ve missed the moment and all you have to do is to restart your PC again and repeat the same process. Huh, I’ve repeated this about 30–40 times. If you see a Purple screen on Your PC then you’ve succeed Step 1. You’ll see something like this-:

![home](https://i.imgur.com/zxoXwLk.png)

* The second step is to Press ‘E’ key to edit Ubuntu option. After doing this, You will be immediately redirected to a screen as shown below-:

![home2](https://i.imgur.com/05Kia1q.png)

Now, Navigate down with the arrow-down key until you can see a line ending with:

> `ro quiet splash $vt_handoff`

Using your keyboard replace the following keywords -:
* From :  `ro quiet splash $vt_handoff`
* To      :  `rw init=/bin/bash`

![home3](https://i.imgur.com/RYpBoK4.png)

Now, Once you’ve made the change Press “F1” or “CTRL+X” to perform boot action in single mode . Once you’ve done this you’ll be ultimately redirected to the following screen below-:

![home4](https://i.imgur.com/REnmnjW.png)

Now, You can reset your Admin-Password by below silly simple steps-:
* If your root partition is mounted read-only (ro) then,Make it mount read-write (rw):

> `# mount -o remount, rw /`

* Now, Reset your root password by “passwd” command.

> `# passwd`

* Alternatively, you can reset your user password. The following linux command will reset the password for the “linuxconfig” user or you may also use your Admin-username as follows :

> `# passwd linuxconfig`

here, `linuxconfig` is your Admin-username.
* Now, you’ll be redirected to a screen as shown below-:

![home5](https://i.imgur.com/21oMdyR.png)

Your Admin-Password has been updated successfully!
* Reboot your system with the following command-:

> `# exec /sbin/init`

 We're all done, happy using Linux :tada:
I made clone of dev.to
Tags: react, node, mern, css
Published: 2020-08-16 10:25:39

![clone of ui card](https://dev-to-uploads.s3.amazonaws.com/i/5zc5pmvxugi6qsye5nyu.png)

hehe sorry for that "clickme" title. actually i made clone of card ui component of dev.to. **but planning to make a clone project of dev.to soon**

the card which is being used for showing post on homepage of dev.to
i used tailwindcss and reactjs for this. tailwindcss is my favorite css utility based framework.

please check and and give me your heart or suggestions. i am putting github repo link here feel free to use it but don't forget to leave a star before cloning my repo (god is can see you heheh).

[github repo](https://github.com/Meenachinmay/dev.to-card-ui-react-tailwindcss)
Why I created a 50 page ebook and gave it away for FREE!
Tags: career, books
Published: 2020-08-16 10:24:29

Yesterday, I launched *[From Aspire to Hired](https://gum.co/WssIGB)*, a 50+ page ebook to help aspiring or junior devs get into code and land their first job.

My book pulls together a lot of knowledge and experience from a frontend development career spanning 15 years. 

**And I gave it away, for FREE! £0, nada, zip, ziltch.**

But why? 

I've seen books like this averaging around £30-£45, authors of which can be seen posting revenues of £1000's, so why miss out on that?

> Simple: because I don't need the money; people need the knowledge. 

And, given the current situation in 2020, more people than ever are looking for work, and struggling financially. So you know what, why not help them without asking for anything in return?!

## How From Aspire to Hired came about

I'm a coding mentor and I help my students to overcome some of the barriers they face on their self-learning journeys, right from learning to code, through to landing their first frontend job. 

Learning to code can be a daunting and frustrating process that can leave many newcomers feeling overwhelmed and alienated, despite how welcoming the tech community is, (especially on platforms such as [Twitter](https://twitter.com/kendalmintcode)).

I wanted to help those people who might feel like they can't do it, can't make it as a developer, don't have a CS degree.

This is especially true when it comes to looking for jobs. You'll face rejection, criticism, and a growing list of role requirements that can knock your confidence. 

I wrote [this book](https://gum.co/WssIGB) to help with that. I wrote it to tap into my knowledge and experience as a developer in the tech industry and give out as much helpful advice and practical guidance as I could.

## How does the book help

I've been through my fair share of interviews. I've been a candidate. I've been a hiring manager. I've seen both sides of the coin and I want to give out some personal approaches and insider knowledge that I have to those looking for a developer job. 

The book covers a range of topics starting with 'what to learn as a frontend developer', before covering other important areas such as:

- Getting hired in the tech industry
- Job hunting
- Tailoring your CV
- Creative approaches to job applications
- Surviving a remote position
- ...and beyond

[![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ke7psl56i4hcyr3mc3cq.png)](https://twitter.com/kendalmintcode)

## Grab your own copy today

This isn't a limited time deal or some special sale I'm running. You can grab your very own copy of [From Aspire to Hired](https://gum.co/WssIGB) right now for the price of absolutely nothing. 

It's [available on Gumroad](https://gum.co/WssIGB) so go download a copy and let me know what you think.
เส้นทางบันทึก...Week_5/14
Published: 2020-08-16 10:01:57

---
title: เส้นทางบันทึก...Week_5/14
published: true
description: 
tags: 
---

สวัสดีครับ สำหรับสัปดาห์ที่ 5 นี้ผมทำตามตารางฝึกได้ไม่ครบทุกวันครับ โดยช่วงต้นสัปดาห์ 
3 วันไม่ได้ทำตามตารางฝึก คือ วันจันทร์ อังคาร พุธ และผมกลับมาทำตามตารางอีกครั้งในวัน พฤหัสบดี ศุกร์ เสาร์ ครับ เนื่องจากตอนนี้ผมฝึกผ่านมา 5 สัปดาห์แล้วและผมรู้สึกว่าความแข็งแรงของหน้าท้องเพิ่มขึ้นมาตามลำดับ สัปดาห์หน้าผมตั้งใจจะหาวิธีเพิ่มความคมชัดของกล้ามเนื้อครับ

**สิ่งที่ได้เรียนรู้** : ถึงแม้ว่าความแข็งแรงของกล้ามหน้าท้องจะเพิ่มขึ้นแต่ความคมชัดของกล้ามเนื้อยังไม่มีครับ ผมต้องหาความรู้และขั้นตอนวิธีการฝึกเพื่อช่วยเพิ่มความคมชัดของกล้ามเนื้อให้มากขึ้น
Learning Ruby: check equality
Tags: ruby, beginners
Published: 2020-08-16 10:01:15

There are different ways to determine whether two values are the same in Ruby. 

####Equality operators: == and !=

The equals operator == will return `true` if the values compared are equal.

```
string_one = "Cookies"
string_two = "Cookies"

string_one == string_two   #Output: => true
string_one != string_two   #Output: => false
```
When we compare numbers of different types (float and integer), the equals operator will return true if both have the same numeric value.

```
7 == 7.0   #Output: => true
```
####eql? 

The `eql?` method checks both the value type and the exact value it holds. So an integer and a float that have the same numeric value will not be equal.

```
7.eql?(7.0)   #Output: => false
```

####equal? 

The `equal?` method is the strictest form of comparison in Ruby. It checks whether both values are the exact same object in memory.

```
a = "Cookies"
b = "Cookies"

puts a.object_id #Output: => 47343105968220
puts b.object_id #Output: => 47343105968200

a.equal? b  # Output: => false
```
Things are a bit different for numbers, because of the way computers store integers in memory. 7 will always point at the same object id, so if we assign the number 7 to two different variables and use the `equal?` method on those two variables, the result will be true.

```
a = 7
b = 7

puts a.object_id # Output: => 15
puts b.object_id # Output: => 15

puts a.equal?(b)  # Output: => true

```

#### The spaceship operator <=>

Differently from the previous operators / methods, the spaceship operator does not return true or false, but it returns one of three numerical values. 

* `-1` if the value on the left is less than the value on the right
* `0` if the value on the left is equal to the value on the right
* `1` if the value on the left is greater than the value on the right

```

7 <=> 8 # Output: => -1
7 <=> 7.0 # Output: => 0
7 <=> 7 # Output: => 0
7 <=> 1 # Output: => 1

```
This operator is mostly used for sorting functions.
Rule...
Tags: rule, believe, coach
Published: 2020-08-16 09:55:43

🚩กฎ คือ 
 
จาก คำแปล กูเกิล
คำกริยา(โบราณ)
จดบันทึกไว้เป็นหลักฐาน, ตรา.
คำนาม
1.(กฎหมาย) ข้อกำหนด หรือข้อบัญญัติที่บังคับให้ต้องมีการปฏิบัติตาม.
"กฎหมาย"
2.วิทย์ ข้อกำหนดทางธรรมชาติที่ได้ศึกษาค้นคว้า."กฎทรงมวล กฎของชาร์ล"

จาก วิกิพีเดีย
กฎ (อังกฤษ: rule, law) คือ ข้อบังคับ ที่อยู่ในความเป็นจริง เพื่อไม่ให้เกิดความเสียหายต่อทรัพย์สินและ ชีวิต แต่อย่างไรก็ตามกฎในบางแขนงวิชาเช่นชีววิทยามีโอกาสถูกล้มล้างได้ โดยมีความจริงในตัวของมันเองสามารถทดสอบได้ และได้ผลเหมือนเดิมทุกครั้งโดยไม่มีข้อโต้แย้ง เช่น [กฎการถ่ายทอดพันธุกรรมของเมนเดล] (mendel's law )

ไม่ว่าจะแปลความหมายคำว่า "กฎ" ว่าอย่างไรก็ตาม เราทุกคนมีกฎของตัวเองที่สอดคล้องกับความเชื่อของเราเสมอๆ จนบางครั้งเราใช้กฎเหล่านั้นด้วยความเคยชิน ทำให้การใช้ชีวิตในทุกๆวันดูเป็นเรื่องยาก หรือบางครั้งกฎเหล่านั้นส่งผลให้คุณไม่ประสบความสำเร็จตามที่ตั้งเป้าไว้ก็ได้ และเราไม่เคยรู้มาก่อนเลยว่าเรามีกฎนั้นๆอยู่ 
เช่น หากคุณมีความเชื่อว่า ก่อนออกจากบ้าน จิ้งจกทัก ห้ามออก ถึงแม้วันนั้นต้องไปพบลูกค้าคนสำคัญหรือมีธุระสำคัญก็ห้ามไป ไม่อย่างนั้นจะโชคร้าย หรือ ห้ามตัดผมวันพุธ ไม่ดี เป็นต้น 

หลายๆความเชื่อผสมกับวัฒนธรรมและสิ่งแวดล้อม ทำให้เกิดความเชื่อและตั้งเป็น กฎ ขึ้น เพื่อรักษาความสงบเรียบร้อย ให้มีความสามัคคี โดยส่วนรวม หรือ กฎ เฉพาะบุคคลที่เราๆนั้นตั้งขึ้นมาเอง ก็ตาม ล้วนก่อเกิดมาจาก ความเชื่อ ประสบการณ์ และสิ่งแวดล้อมที่เราพบเจอมาทั้งสิ้น จนเป็นผลให้เกิดเป็น กฎ นั้นๆขึ้น กฎ เปลี่ยนแปลงได้ ไปตามความเชื่อและประสบการณ์ เราควรไตร่ตรองให้ดีในการตั้งหรือใช้กฎนั้นๆก่อนเสมอ

เพราะฉะนั้น กฎ อะไร ก็ตามที่เรามี หรือ ที่สังคมมี เราควรเคารพ ให้ถูกต้องตามกาละเทศะ มีความยืดหยุ่น ไม่หย่อนยาน จะทำให้การใช้ชีวิตและการตัดสินใจเป็นไปอย่างเหมาะสมควรแก่สถานการณ์นั้นๆ
The Shoes Company
Tags: html, webdev, productivity, beginners
Published: 2020-08-16 09:48:54

<p>Hi, <b>Rough-King</b> is back with the new code-pen of the hypothetical shoes company name <strong>The Shoes </strong>.This the product landing page for the shoes store. The Store have decent collections of shoes  and  membership to avail extra benefits. Remember to drop a love and comment. </p> You can Check out this for full page view and code on https://codepen.io/roughking/full/pogMYZX.<br>
Follow Rough-King at CodePen https://codepen.io/dashboard/ for my others project.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/scmfmf2gonbdn21upwid.PNG)
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/1s9e2qkhgyi8jenzu51s.PNG)
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/a2p0uns4qhd1jechgmw3.PNG)
<a href="https://dev.to/roughking">
  <img src="https://d2fltix0v2e0sb.cloudfront.net/dev-badge.svg" alt="Rough-king's DEV Profile" height="30" width="60">
</a>
Using CSS-in-JS with Preact
Tags: preact, styled, emotion
Published: 2020-08-16 09:40:50

---
title: Using CSS-in-JS with Preact
published: true
date: 2020-08-16 09:40:00 UTC
tags: preact, styled, emotion
canonical_url: https://www.emgoto.com/preact-css-in-js/
cover_image: https://www.emgoto.com/preact-css-in-js-dev.png
---

The two most popular CSS-in-JS libraries, [styled-components](https://github.com/styled-components/styled-components) and [Emotion](https://github.com/emotion-js/emotion), don’t support Preact out of the box. However there is an easy workaround.

Add these aliases to your `webpack.config.js` file:

```js
module.exports = {
    resolve: {
        alias: {
            react: 'preact/compat',
            'react-dom/test-utils': 'preact/test-utils',
            'react-dom': 'preact/compat',
        },
    },
};
```

> Adding these aliases allows you to use other libraries intended for React too!

And if you’re using Storybook, you’ll need to add the same alias to your `.storybook/main.js` file:

```js
module.exports = {
	stories: ['../app/javascript/**/story.tsx'],
	webpackFinal: async config => {
		config.resolve.alias = Object.assign({}, config.resolve.alias, {
			react: "preact/compat",
			'react-dom': 'preact/compat'
		})
	    return config;
	  },
};
```

After this you can install your preferred package:

```bash
npm i @emotion/styled
# OR
npm i styled-components
```

And use either styled-components or Emotion without any problems:

```js
import styled from '@emotion/styled'; 
// OR
import styled from 'styled-components';

export const Container = styled.div`
  background-color: pink;
`;
```
100DaysOfCode | Day 19, 20(Are You committed yourself?)
Tags: 100daysofcode, beginners, python, challenge
Published: 2020-08-16 09:18:28


▄█ █▀█ █▀█ █▀▄ ▄▀█ █▄█ █▀ █▀█ █▀▀ █▀▀ █▀█ █▀▄ █▀▀
░█ █▄█ █▄█ █▄▀ █▀█ ░█░ ▄█ █▄█ █▀░ █▄▄ █▄█ █▄▀ ██▄
Hey everyone, today is my day 21 of __#100DaysOfCode Challenge__!
If I want to be honest yesterday I didn't code even a second :(
I'm so sad about it, cause one of my friend invited me to his own party and I made a mistake to accept his invitation.

So I just wanted to share how do I feel about my decision and actually I lost one day that I'm gonna add to the last of the challenge.
I'm so damn tired and do not have enough energy to start coding, but It doesn't matter cause __I committed myself to do it__ every-single-day!
I'm gonna dive into it right now and you should too.


![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/b3ldfcejrfnbszgjze1l.jpg)
<figcaption>ArE YoU?</figcaption>

Keep Moving Forward __ツ__

Enjoy Your Journey 👊

Code with __💛__

__🅑🅐🅝🅙🅘__
GroupChatApp - A group chatting app using Flutter
Tags: flutter, flutterdev, opensource, github
Published: 2020-08-16 09:12:41

Hello guys, a few days ago I developed a group chatting app using Flutter and Firebase, and made it open-source by uploading the source code on my GitHub profile.

**Here is the link to the Source code:**  [https://github.com/ahmedgulabkhan/GroupChatApp](https://github.com/ahmedgulabkhan/GroupChatApp)

If you like the project, you can star the repository on GitHub, or contribute to it by making Pull requests.

## Features
**1. Sign in/Register**
- Users can register on the app by entering their Email, Full name and Password.
- If already registered, they can simply sign in by entering Email and Password.
- Used Firebase to implement sign in/register for users.

**2. Creating Groups**
- After being successfully logged in, users can create a new group with any name.
- When a user creates a group, they automatically become a member of the group.
- All the groups that a user is a member of, are displayed on the user's home screen page.

**3. Search for Groups**
- Users can also search for any content related groups created by other users.
- If you come across a group and like the content, you can join the group and start chatting with other members of the group.

**4. Chatting in groups**
- Only the members of a group can chat within the group.
- All the chats related to a group will be private to that group.
- All the details of a group are stored in a Firebase collection and all the messages related to that group are stored in the sub-collection of that group's collection.

**5. Logout**
- Logout functionality implemented using Firebase.

In the journey of making this app, I learned a lot of new things. So, I decided to make this project open-source so that other people can also learn and benefit from it.

**Source code/GitHub repo:**  [https://github.com/ahmedgulabkhan/GroupChatApp](https://github.com/ahmedgulabkhan/GroupChatApp)

If you like the project, you can star the repo on GitHub by going to the above link.

Would love to hear your valuable feedback on this.