ZEMOSO ENGINEERING STUDIO
November 2, 2020
5 min read

Unlock the power of atomic design in React and React Native using a theming library — Part 1

The market is evolving rapidly. While many ideas see success in no time, that success is seldom sustainable if the solution itself is not sustainable or if it is not implemented at the right time.

In most of the cases, it begins with a website or mobile application. While there are many approaches to build a website or mobile application, picking the right one is important. The approach should help you come up with a minimum viable product (MVP) fast and adapt to user feedback and market needs easily.

In this two-part article, We'll discuss how we can quickly build a sustainable website, with or without a designer, using Theming Library. We'll discuss how to make the website scalable using the atomic design principle.

Table of contents

Part 1

1. Introduction to Atomic Design

2. Introduction to Theming library

3. Setup Theming library with React

4. Create atoms

Part 2

1. Overview of molecules and organisms

2. Templates and page

3. Fine tune the theme

4. Add dark mode

5. Deploy

Overview of atomic design

Atomic Design methodology allows us to split user interface (UI) code into smaller components and build it bottom-up into a fully functional page or application.

Inspiration

As the name suggests, the Atomic Design principle is inspired from the basic building blocks of nature, which are the atoms, molecules, and organisms.

Concept

The key driving concept of the Atomic design methodology is to build reusable UI components that accelerate the development process and create an application with a uniform look.

We use atomic design principles to build atoms, molecules, organisms, templates, and pages for more manageable and easy-to-use code. 

Theming library (UI library)

Theming libraries are a set of pre-built UI components, which adhere to the Material design system. It can be used to easily build professional and beautiful applications. Many libraries also include some basic customization options for typography, spacing, and color themes.

Why not create my own UI from scratch?

Most programmers/developers are problem solvers and are more focused on the business logic. They take inspiration from other websites with limited understanding of what dimensions to use (and many do not even bother with that). A Theming Library helps create a uniform appearance across the application without asking the developer to deeply understand principles of design. It allows her or him to easily replicate the referring application or design.

Should you bother with a library if you have designers on your team?

Most professional designers stick to Material design system as a baseline to build creative and innovative applications. To speed up development and deployment, designers are able to customize specific components of the library and insert creative elements as needed. So the tradeoff is this: instead of designers having to build 20 components from scratch, they only have to build 2. 

Many Theming libraries also provide dark theme support. 

Another reason to still use a Theming Library is to upgrade your entire site (based on the fast-changing market requirements) with minimal effort. 

Wait!!

We already have atoms and molecules from the theming library. What are we building with them?

Let’s build it and see how it comes together.

We are building a React application with Material UI following Atomic Design principles. 

Refer:  Material UI

Simple UI for a reminder application

Basic layout for the application

This version does not have margins or dimensions. Now, to build out each section. 

Basic layout of all the components in one screen

We'll use Visual Studio Code with a prettier plugin for the rest of the article, you can use your favorite integrated development environment for React.

Setting up the React application with Material UI

Use create-react-app for a fast build

       npx create-react-app reminder-atomic-app

       cd reminder-atomic-app

The application is now functional; let us add a Material UI library to the application.

       npm install @material-ui/core

       npm install @material-ui/icons

You can add icons to make your application even more visually appealing. Standard open source icons are available freely for use in the application; no worries about searching for icons and licensing.

The project structure

As per the de facto standard, pages are not components. It is simply the styling of templates. So here we go…

Project structure

On a side note, we prefer having absolute imports in the application. So, We'll be using absolute imports for the rest of the application. It can be easily added by adding a file jsconfig.json (or tsconfig.json for typescript) in the root folder with the following content.

     {

      "compilerOptions": {

        "baseUrl": "src"

     },

      "include": ["src"]

     }

Let us begin by setting up a theme

 

Theme

view rawApp.js hosted with ❤ by GitHub

view rawInitialTheme.js hosted with ❤ by GitHub

Initial set-up for theme and app

We have set up a base theme and the theme provider in the main application. We'll discuss more as we proceed further.

We are not adding any colors, spacing, or theming yet. That is the beauty of this approach, begin with MVP features and style it as per your convenience.

But before that, let us see if our application runs without errors…

npm start

Let us identify the components based on the above design

1. Header: Atom

2. Title: Atom

3. Subtitle:  Atom

4. Label:  Atom

5. Text:  Atom

6. Primary button: Atom

7. Icon button: Atom

8. List item:  Molecule

9. Event list:  Organism

10. Next event banner: Organism

11. Add event: Organism

Deciding which part of the UI is what?

1. Atom: This is the smallest possible unit in the application that can be used directly. For example, the header cannot be broken down further, but it can exist on its own.

2. Molecule vs. Organism: This part can get tricky. One rule of thumb is, if a collection of atoms or molecules form a unit and there are chances that this unit will be reused in other components again, then it’s a molecule. For example,


3. List item: is a collection of atoms and it is further used as a child in the list component; hence it is a molecule.

4. Event List: But the “event list” and the “next event banner'' are not used in any other components as “child”, hence they are organisms.

5. List: is a collection of molecules and “banner” is a collection of atoms; yet both are called organisms because of their usage in the application.

6. Templates: are just a special placeholder component for other components. Hence we do not consider it as a direct parent for the components.

7. Components: If a component that is directly added to a template is reused in other components, it’s a molecule by precedence.

Also, it is not necessary that a molecule is always a collection of atoms; a molecule can also be a collection of other molecules.

Preview the components we are building

We can either add the component in theApp.jsto to preview it, or use Storybook to render each component. We are using Storybook for the rest of this article. (Don’t worry, I will include the code for that too in the project repository.)

Begin with a bloggers favorite component — <Button />

Material UI already comes with a button component that works perfectly in most cases. But sometimes, we can wrap it in an atom to achieve a uniform look across the app. Here, we’ll make sure that all developers use the same button with the same dimensions and colors.

View rawButtonComponent.js hosted with ❤ by GitHub

Primary Button on Storybook

Icon Button on Storybook

Test file and Storybook setup are included in the Github Project link here

Create an atom for the Icon Button

Though called the button component, Primary Button and Icon Button look completely different and present different types of information. Hence, the need to create two components. 

Typography for header, title, subtitle and body

Unlike two different buttons, we’ll be using a single typography component for all types of text in the application, except the label text. This example is for a very simple typography component. Many more mappings and configurations can be done per your requirements.

View rawTypographyComponent.js hosted with ❤ by GitHub

Typography on Storybook

Create the last atom — <TextField />

We will not create a label component. It is very rare that a label will be used in isolation. We'll use it either with a dropdown or a Text Field, and therefore, can be considered a single atom.

View rawTextFieldComponent.js hosted with ❤ by GitHub

Text Field in Storybook

We will cover how to set up molecules, organisms, templates and everything else to complete the page in Part 2; unlike your favorite show, we’ll not make you wait for it. 

Read part 2 here. 

You can find the full project on Github from the Zemoso author.

An earlier version of this blog post was published by the author on Medium. 

ZEMOSO ENGINEERING STUDIO

Unlock the power of atomic design in React and React Native using a theming library — Part 1

By Zemoso Engineering Studio
November 2, 2020
5 min read

The market is evolving rapidly. While many ideas see success in no time, that success is seldom sustainable if the solution itself is not sustainable or if it is not implemented at the right time.

In most of the cases, it begins with a website or mobile application. While there are many approaches to build a website or mobile application, picking the right one is important. The approach should help you come up with a minimum viable product (MVP) fast and adapt to user feedback and market needs easily.

In this two-part article, We'll discuss how we can quickly build a sustainable website, with or without a designer, using Theming Library. We'll discuss how to make the website scalable using the atomic design principle.

Table of contents

Part 1

1. Introduction to Atomic Design

2. Introduction to Theming library

3. Setup Theming library with React

4. Create atoms

Part 2

1. Overview of molecules and organisms

2. Templates and page

3. Fine tune the theme

4. Add dark mode

5. Deploy

Overview of atomic design

Atomic Design methodology allows us to split user interface (UI) code into smaller components and build it bottom-up into a fully functional page or application.

Inspiration

As the name suggests, the Atomic Design principle is inspired from the basic building blocks of nature, which are the atoms, molecules, and organisms.

Concept

The key driving concept of the Atomic design methodology is to build reusable UI components that accelerate the development process and create an application with a uniform look.

We use atomic design principles to build atoms, molecules, organisms, templates, and pages for more manageable and easy-to-use code. 

Theming library (UI library)

Theming libraries are a set of pre-built UI components, which adhere to the Material design system. It can be used to easily build professional and beautiful applications. Many libraries also include some basic customization options for typography, spacing, and color themes.

Why not create my own UI from scratch?

Most programmers/developers are problem solvers and are more focused on the business logic. They take inspiration from other websites with limited understanding of what dimensions to use (and many do not even bother with that). A Theming Library helps create a uniform appearance across the application without asking the developer to deeply understand principles of design. It allows her or him to easily replicate the referring application or design.

Should you bother with a library if you have designers on your team?

Most professional designers stick to Material design system as a baseline to build creative and innovative applications. To speed up development and deployment, designers are able to customize specific components of the library and insert creative elements as needed. So the tradeoff is this: instead of designers having to build 20 components from scratch, they only have to build 2. 

Many Theming libraries also provide dark theme support. 

Another reason to still use a Theming Library is to upgrade your entire site (based on the fast-changing market requirements) with minimal effort. 

Wait!!

We already have atoms and molecules from the theming library. What are we building with them?

Let’s build it and see how it comes together.

We are building a React application with Material UI following Atomic Design principles. 

Refer:  Material UI

Simple UI for a reminder application

Basic layout for the application

This version does not have margins or dimensions. Now, to build out each section. 

Basic layout of all the components in one screen

We'll use Visual Studio Code with a prettier plugin for the rest of the article, you can use your favorite integrated development environment for React.

Setting up the React application with Material UI

Use create-react-app for a fast build

       npx create-react-app reminder-atomic-app

       cd reminder-atomic-app

The application is now functional; let us add a Material UI library to the application.

       npm install @material-ui/core

       npm install @material-ui/icons

You can add icons to make your application even more visually appealing. Standard open source icons are available freely for use in the application; no worries about searching for icons and licensing.

The project structure

As per the de facto standard, pages are not components. It is simply the styling of templates. So here we go…

Project structure

On a side note, we prefer having absolute imports in the application. So, We'll be using absolute imports for the rest of the application. It can be easily added by adding a file jsconfig.json (or tsconfig.json for typescript) in the root folder with the following content.

     {

      "compilerOptions": {

        "baseUrl": "src"

     },

      "include": ["src"]

     }

Let us begin by setting up a theme

 

Theme

view rawApp.js hosted with ❤ by GitHub

view rawInitialTheme.js hosted with ❤ by GitHub

Initial set-up for theme and app

We have set up a base theme and the theme provider in the main application. We'll discuss more as we proceed further.

We are not adding any colors, spacing, or theming yet. That is the beauty of this approach, begin with MVP features and style it as per your convenience.

But before that, let us see if our application runs without errors…

npm start

Let us identify the components based on the above design

1. Header: Atom

2. Title: Atom

3. Subtitle:  Atom

4. Label:  Atom

5. Text:  Atom

6. Primary button: Atom

7. Icon button: Atom

8. List item:  Molecule

9. Event list:  Organism

10. Next event banner: Organism

11. Add event: Organism

Deciding which part of the UI is what?

1. Atom: This is the smallest possible unit in the application that can be used directly. For example, the header cannot be broken down further, but it can exist on its own.

2. Molecule vs. Organism: This part can get tricky. One rule of thumb is, if a collection of atoms or molecules form a unit and there are chances that this unit will be reused in other components again, then it’s a molecule. For example,


3. List item: is a collection of atoms and it is further used as a child in the list component; hence it is a molecule.

4. Event List: But the “event list” and the “next event banner'' are not used in any other components as “child”, hence they are organisms.

5. List: is a collection of molecules and “banner” is a collection of atoms; yet both are called organisms because of their usage in the application.

6. Templates: are just a special placeholder component for other components. Hence we do not consider it as a direct parent for the components.

7. Components: If a component that is directly added to a template is reused in other components, it’s a molecule by precedence.

Also, it is not necessary that a molecule is always a collection of atoms; a molecule can also be a collection of other molecules.

Preview the components we are building

We can either add the component in theApp.jsto to preview it, or use Storybook to render each component. We are using Storybook for the rest of this article. (Don’t worry, I will include the code for that too in the project repository.)

Begin with a bloggers favorite component — <Button />

Material UI already comes with a button component that works perfectly in most cases. But sometimes, we can wrap it in an atom to achieve a uniform look across the app. Here, we’ll make sure that all developers use the same button with the same dimensions and colors.

View rawButtonComponent.js hosted with ❤ by GitHub

Primary Button on Storybook

Icon Button on Storybook

Test file and Storybook setup are included in the Github Project link here

Create an atom for the Icon Button

Though called the button component, Primary Button and Icon Button look completely different and present different types of information. Hence, the need to create two components. 

Typography for header, title, subtitle and body

Unlike two different buttons, we’ll be using a single typography component for all types of text in the application, except the label text. This example is for a very simple typography component. Many more mappings and configurations can be done per your requirements.

View rawTypographyComponent.js hosted with ❤ by GitHub

Typography on Storybook

Create the last atom — <TextField />

We will not create a label component. It is very rare that a label will be used in isolation. We'll use it either with a dropdown or a Text Field, and therefore, can be considered a single atom.

View rawTextFieldComponent.js hosted with ❤ by GitHub

Text Field in Storybook

We will cover how to set up molecules, organisms, templates and everything else to complete the page in Part 2; unlike your favorite show, we’ll not make you wait for it. 

Read part 2 here. 

You can find the full project on Github from the Zemoso author.

An earlier version of this blog post was published by the author on Medium. 

Recent Publications
Actual access control without getting in the way of actual work: 2023
Actual access control without getting in the way of actual work: 2023
March 13, 2023
Breaking the time barrier: Test Automation and its impact on product launch cycles
Breaking the time barrier: Test Automation and its impact on product launch cycles
January 20, 2023
Product innovation for today and the future! It’s outcome-first, timeboxed, and accountable
Product innovation for today and the future! It’s outcome-first, timeboxed, and accountable
January 9, 2023
From "great potential" purgatory to "actual usage" reality: getting SDKs right in a product-led world
From "great potential" purgatory to "actual usage" reality: getting SDKs right in a product-led world
December 6, 2022
Why Realm trumps SQLite as database of choice for complex mobile apps — Part 2
Why Realm trumps SQLite as database of choice for complex mobile apps — Part 2
October 13, 2022
Testing what doesn’t exist with a Wizard of Oz twist
Testing what doesn’t exist with a Wizard of Oz twist
October 12, 2022
Docs, Guides, Resources: Getting developer microsites right in a product-led world
Docs, Guides, Resources: Getting developer microsites right in a product-led world
September 20, 2022
Beyond methodologies: Five engineering do's for an agile product build
Beyond methodologies: Five engineering do's for an agile product build
September 5, 2022
Actual access control without getting in the way of actual work: 2023
Actual access control without getting in the way of actual work: 2023
March 13, 2023
Breaking the time barrier: Test Automation and its impact on product launch cycles
Breaking the time barrier: Test Automation and its impact on product launch cycles
January 20, 2023
Product innovation for today and the future! It’s outcome-first, timeboxed, and accountable
Product innovation for today and the future! It’s outcome-first, timeboxed, and accountable
January 9, 2023
From "great potential" purgatory to "actual usage" reality: getting SDKs right in a product-led world
From "great potential" purgatory to "actual usage" reality: getting SDKs right in a product-led world
December 6, 2022
Why Realm trumps SQLite as database of choice for complex mobile apps — Part 2
Why Realm trumps SQLite as database of choice for complex mobile apps — Part 2
October 13, 2022
ZEMOSO ENGINEERING STUDIO
November 2, 2020
5 min read

Unlock the power of atomic design in React and React Native using a theming library — Part 1

The market is evolving rapidly. While many ideas see success in no time, that success is seldom sustainable if the solution itself is not sustainable or if it is not implemented at the right time.

In most of the cases, it begins with a website or mobile application. While there are many approaches to build a website or mobile application, picking the right one is important. The approach should help you come up with a minimum viable product (MVP) fast and adapt to user feedback and market needs easily.

In this two-part article, We'll discuss how we can quickly build a sustainable website, with or without a designer, using Theming Library. We'll discuss how to make the website scalable using the atomic design principle.

Table of contents

Part 1

1. Introduction to Atomic Design

2. Introduction to Theming library

3. Setup Theming library with React

4. Create atoms

Part 2

1. Overview of molecules and organisms

2. Templates and page

3. Fine tune the theme

4. Add dark mode

5. Deploy

Overview of atomic design

Atomic Design methodology allows us to split user interface (UI) code into smaller components and build it bottom-up into a fully functional page or application.

Inspiration

As the name suggests, the Atomic Design principle is inspired from the basic building blocks of nature, which are the atoms, molecules, and organisms.

Concept

The key driving concept of the Atomic design methodology is to build reusable UI components that accelerate the development process and create an application with a uniform look.

We use atomic design principles to build atoms, molecules, organisms, templates, and pages for more manageable and easy-to-use code. 

Theming library (UI library)

Theming libraries are a set of pre-built UI components, which adhere to the Material design system. It can be used to easily build professional and beautiful applications. Many libraries also include some basic customization options for typography, spacing, and color themes.

Why not create my own UI from scratch?

Most programmers/developers are problem solvers and are more focused on the business logic. They take inspiration from other websites with limited understanding of what dimensions to use (and many do not even bother with that). A Theming Library helps create a uniform appearance across the application without asking the developer to deeply understand principles of design. It allows her or him to easily replicate the referring application or design.

Should you bother with a library if you have designers on your team?

Most professional designers stick to Material design system as a baseline to build creative and innovative applications. To speed up development and deployment, designers are able to customize specific components of the library and insert creative elements as needed. So the tradeoff is this: instead of designers having to build 20 components from scratch, they only have to build 2. 

Many Theming libraries also provide dark theme support. 

Another reason to still use a Theming Library is to upgrade your entire site (based on the fast-changing market requirements) with minimal effort. 

Wait!!

We already have atoms and molecules from the theming library. What are we building with them?

Let’s build it and see how it comes together.

We are building a React application with Material UI following Atomic Design principles. 

Refer:  Material UI

Simple UI for a reminder application

Basic layout for the application

This version does not have margins or dimensions. Now, to build out each section. 

Basic layout of all the components in one screen

We'll use Visual Studio Code with a prettier plugin for the rest of the article, you can use your favorite integrated development environment for React.

Setting up the React application with Material UI

Use create-react-app for a fast build

       npx create-react-app reminder-atomic-app

       cd reminder-atomic-app

The application is now functional; let us add a Material UI library to the application.

       npm install @material-ui/core

       npm install @material-ui/icons

You can add icons to make your application even more visually appealing. Standard open source icons are available freely for use in the application; no worries about searching for icons and licensing.

The project structure

As per the de facto standard, pages are not components. It is simply the styling of templates. So here we go…

Project structure

On a side note, we prefer having absolute imports in the application. So, We'll be using absolute imports for the rest of the application. It can be easily added by adding a file jsconfig.json (or tsconfig.json for typescript) in the root folder with the following content.

     {

      "compilerOptions": {

        "baseUrl": "src"

     },

      "include": ["src"]

     }

Let us begin by setting up a theme

 

Theme

view rawApp.js hosted with ❤ by GitHub

view rawInitialTheme.js hosted with ❤ by GitHub

Initial set-up for theme and app

We have set up a base theme and the theme provider in the main application. We'll discuss more as we proceed further.

We are not adding any colors, spacing, or theming yet. That is the beauty of this approach, begin with MVP features and style it as per your convenience.

But before that, let us see if our application runs without errors…

npm start

Let us identify the components based on the above design

1. Header: Atom

2. Title: Atom

3. Subtitle:  Atom

4. Label:  Atom

5. Text:  Atom

6. Primary button: Atom

7. Icon button: Atom

8. List item:  Molecule

9. Event list:  Organism

10. Next event banner: Organism

11. Add event: Organism

Deciding which part of the UI is what?

1. Atom: This is the smallest possible unit in the application that can be used directly. For example, the header cannot be broken down further, but it can exist on its own.

2. Molecule vs. Organism: This part can get tricky. One rule of thumb is, if a collection of atoms or molecules form a unit and there are chances that this unit will be reused in other components again, then it’s a molecule. For example,


3. List item: is a collection of atoms and it is further used as a child in the list component; hence it is a molecule.

4. Event List: But the “event list” and the “next event banner'' are not used in any other components as “child”, hence they are organisms.

5. List: is a collection of molecules and “banner” is a collection of atoms; yet both are called organisms because of their usage in the application.

6. Templates: are just a special placeholder component for other components. Hence we do not consider it as a direct parent for the components.

7. Components: If a component that is directly added to a template is reused in other components, it’s a molecule by precedence.

Also, it is not necessary that a molecule is always a collection of atoms; a molecule can also be a collection of other molecules.

Preview the components we are building

We can either add the component in theApp.jsto to preview it, or use Storybook to render each component. We are using Storybook for the rest of this article. (Don’t worry, I will include the code for that too in the project repository.)

Begin with a bloggers favorite component — <Button />

Material UI already comes with a button component that works perfectly in most cases. But sometimes, we can wrap it in an atom to achieve a uniform look across the app. Here, we’ll make sure that all developers use the same button with the same dimensions and colors.

View rawButtonComponent.js hosted with ❤ by GitHub

Primary Button on Storybook

Icon Button on Storybook

Test file and Storybook setup are included in the Github Project link here

Create an atom for the Icon Button

Though called the button component, Primary Button and Icon Button look completely different and present different types of information. Hence, the need to create two components. 

Typography for header, title, subtitle and body

Unlike two different buttons, we’ll be using a single typography component for all types of text in the application, except the label text. This example is for a very simple typography component. Many more mappings and configurations can be done per your requirements.

View rawTypographyComponent.js hosted with ❤ by GitHub

Typography on Storybook

Create the last atom — <TextField />

We will not create a label component. It is very rare that a label will be used in isolation. We'll use it either with a dropdown or a Text Field, and therefore, can be considered a single atom.

View rawTextFieldComponent.js hosted with ❤ by GitHub

Text Field in Storybook

We will cover how to set up molecules, organisms, templates and everything else to complete the page in Part 2; unlike your favorite show, we’ll not make you wait for it. 

Read part 2 here. 

You can find the full project on Github from the Zemoso author.

An earlier version of this blog post was published by the author on Medium. 

Recent Publications

ZEMOSO ENGINEERING STUDIO

Testing what doesn’t exist with a Wizard of Oz twist

October 12, 2022
7 min read
ZEMOSO ENGINEERING STUDIO

Beyond methodologies: Five engineering do's for an agile product build

September 5, 2022
6 min read
ZEMOSO ENGINEERING STUDIO

How we built a big data platform for a futuristic AgriTech product

June 3, 2022
8 min read
ZEMOSO NEWS

Zemoso Labs starts operations in Waterloo, Canada

May 25, 2022
5 min read
ZEMOSO ENGINEERING STUDIO

Honorable mention at O’Reilly’s Architectural Katas event

May 17, 2021
5 min read
ZEMOSO ENGINEERING STUDIO

Product dev with testable spring boot applications, from day one

May 4, 2021
5 min read
ZEMOSO ENGINEERING STUDIO

When not to @Autowire in Spring or Spring Boot applications

May 1, 2021
5 min read
ZEMOSO ENGINEERING STUDIO

Efficiently handle data and integrations in Spring Boot

January 24, 2021
5 min read
ZEMOSO ENGINEERING STUDIO

Our favorite CI/CD DevOps Practice: Simplify with GitHub Actions

October 25, 2020
5 min read
ZEMOSO ENGINEERING STUDIO

How to use BERT and DNN to build smarter NLP algorithms for products

February 14, 2020
12 min read
ZEMOSO ENGINEERING STUDIO

GraphQL — Why is it essential for agile product development?

April 30, 2019
12 min read
ZEMOSO ENGINEERING STUDIO

GraphQL with Java Spring Boot and Apollo Angular for Agile platforms

April 30, 2019
9 min read
ZEMOSO ENGINEERING STUDIO

Deploying Airflow on Kubernetes 

November 30, 2018
2 min read
ZEMOSO PRODUCT STUDIO

How to validate your Innovation: Mastering Experiment Design

November 22, 2018
8 min read
ZEMOSO PRODUCT STUDIO

Working Backwards: Amazon's Culture of Innovation: My notes

November 19, 2018
8 min read
ZEMOSO ENGINEERING STUDIO

Product developer POV: Caveats when building with Spark

November 5, 2018
2 min read

Want more best practices?

Access thought-leadership and best practice content across
the product development lifecycle

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

© 2023  Zemoso Technologies
Privacy Policy

Terms of Use
LinkedIn Page - Zemoso TechnologiesFacebook Page - Zemoso TechnologiesTwitter Account - Zemoso Technologies

© 2021 Zemoso Technologies
Privacy Policy

LinkedIn Page - Zemoso TechnologiesFacebook Page - Zemoso TechnologiesTwitter Account - Zemoso Technologies
May 25, 2023