diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..609c8509
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+# dependencies
+node_modules
+
+# misc
+.DS_Store
+
+# debug
+npm-debug.log*
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100755
index 00000000..fab93065
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1,6 @@
+#!/bin/sh
+. "$(dirname "$0")/_/husky.sh"
+
+node ./scripts/update-data-file.js
+git add **/data.json
+npx lint-staged
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 00000000..dca71acf
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,10 @@
+{
+ "trailingComma": "none",
+ "bracketSpacing": false,
+ "arrowParens": "avoid",
+ "singleQuote": true,
+ "printWidth": 80,
+ "useTabs": true,
+ "tabWidth": 4,
+ "semi": true
+}
diff --git a/README.md b/README.md
deleted file mode 100644
index f63bb1fb..00000000
--- a/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# DevRel Stack Data
-
-All the files are in the [production](https://github.com/RapidAPI/DevRel-Stack-Contents/tree/production) branch so that Google won't index GitHub hosted content.
diff --git a/authors/ahmadAwais/avatar.png b/authors/ahmadAwais/avatar.png
new file mode 100644
index 00000000..6d9d3c39
Binary files /dev/null and b/authors/ahmadAwais/avatar.png differ
diff --git a/authors/ahmadBilal/avatar.png b/authors/ahmadBilal/avatar.png
new file mode 100644
index 00000000..33ae693c
Binary files /dev/null and b/authors/ahmadBilal/avatar.png differ
diff --git a/authors/aniaKubow/avatar.png b/authors/aniaKubow/avatar.png
new file mode 100644
index 00000000..1811e720
Binary files /dev/null and b/authors/aniaKubow/avatar.png differ
diff --git a/authors/catalinPit/avatar.png b/authors/catalinPit/avatar.png
new file mode 100644
index 00000000..6fcf345b
Binary files /dev/null and b/authors/catalinPit/avatar.png differ
diff --git a/authors/codeStackr/avatar.png b/authors/codeStackr/avatar.png
new file mode 100644
index 00000000..44a838c1
Binary files /dev/null and b/authors/codeStackr/avatar.png differ
diff --git a/authors/codeWithTomi/avatar.png b/authors/codeWithTomi/avatar.png
new file mode 100644
index 00000000..cd9d2936
Binary files /dev/null and b/authors/codeWithTomi/avatar.png differ
diff --git a/authors/coderCoder/avatar.png b/authors/coderCoder/avatar.png
new file mode 100644
index 00000000..db44b2a9
Binary files /dev/null and b/authors/coderCoder/avatar.png differ
diff --git a/authors/data.json b/authors/data.json
new file mode 100644
index 00000000..14ece561
--- /dev/null
+++ b/authors/data.json
@@ -0,0 +1,114 @@
+{
+ "ahmadAwais": {
+ "name": "Ahmad Awais",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/ahmadAwais/avatar.png",
+ "designation": "Head of Developer Relations, RapidAPI",
+ "isDeveloperProgramMember": true,
+ "bio": "Ahmad Awais is an award-winning open-source engineer. Head of Developer Relations at RapidAPI. His software serves millions of developers. Code he wrote went to Mars. “What an awesome example for developers,” said Satya Nadella, CEO of Microsoft — featuring Awais’s code contribution to NASA Ingenuity Mars mission. He’s a Google Devs Expert and recipient of the 8th GitHub Stars gold award."
+ },
+ "richardDoe": {
+ "name": "Richard Doe",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/richard%20doe/avatar.png",
+ "designation": "Content Producer @ RapidAPI",
+ "isDeveloperProgramMember": false,
+ "bio": "Sample user bio."
+ },
+ "saad": {
+ "name": "Saad Irfan",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/saad/avatar.png",
+ "designation": "RapidAPI Content Dev Student Expert",
+ "isDeveloperProgramMember": true,
+ "bio": "Saad is a frontend developer, Student Expert at RapidAPI, Next.js Conf 2021 speaker, open-sourcerer, Major League Hacking fellow, former Developer Advocate at Worwox, Technical Writer, and a guitarist. He has authored 20+ open-source tools that are used by thousands of developers. He also founded Google’s Developer Students Club at his college and is a part of Microsoft’s Student program."
+ },
+ "pratham": {
+ "name": "Pratham",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/pratham/avatar.png",
+ "designation": "Developer Advocate @ RapidAPI",
+ "isDeveloperProgramMember": true,
+ "bio": "I break Web Development into pieces reducing its difficulty to 2%. Over 50 million developers worldwide read my content on Twitter every month. I'm a CSS fanatic who loves to create CSS arts and illustrations on Codepen where thousands of developers love my work. "
+ },
+ "ahmadBilal": {
+ "name": "Ahmad Bilal",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/ahmadBilal/avatar.png",
+ "designation": "RapidAPI Content Dev Student Expert",
+ "isDeveloperProgramMember": true,
+ "bio": "Bilal is a Full Stack Web Engineer and Developer Advocacy Enthusiast. Being an avid open-sourcerer; he has curated & contributed to software being used by many. Google Summer of Code'19. Speaker. Loves to write and create content for developers."
+ },
+ "javascriptMastery": {
+ "name": "JavaScript Mastery",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/javascriptMastery/avatar.png",
+ "designation": "",
+ "isDeveloperProgramMember": false,
+ "bio": "The purpose of JavaScript Mastery is to help aspiring and established developers to take their development skills to the next level and build awesome apps."
+ },
+ "sirajRaval": {
+ "name": "Siraj Raval",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/sirajRaval/avatar.png",
+ "designation": "",
+ "isDeveloperProgramMember": false,
+ "bio": " I'm a technologist on a mission to spread data literacy. Artificial Intelligence, Mathematics, Science, Technology, I simplify these topics to help you understand how they work. Using this knowledge you can build wealth and live a happier, more meaningful life. I live to serve this community. We are the fastest growing AI community in the world! "
+ },
+ "coderCoder": {
+ "name": "Jessica Chan",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/coderCoder/avatar.png",
+ "designation": "",
+ "isDeveloperProgramMember": false,
+ "bio": "Practical tips for the beginner web developer."
+ },
+ "codeStackr": {
+ "name": "codeSTACKr",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/codeStackr/avatar.png",
+ "designation": "",
+ "isDeveloperProgramMember": false,
+ "bio": "I create the best content I possibly can to give away free. My tutorials are generally about web development and include coding languages such as HTML, CSS, Sass, JavaScript, and TypeScript. Subscribe to my YouTube channel for the latest content."
+ },
+ "weibenfalk": {
+ "name": "Weibenfalk",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/weibenfalk/avatar.png",
+ "designation": "",
+ "isDeveloperProgramMember": false,
+ "bio": "I'm Thomas Weibenfalk. A developer and designer from Sweden. I share my knowledge of modern front end development in a (hopefully) down to earth and fun way! I'll cover topics as React, Vanilla Javascript, Gatsby, CSS, HTML and occasional backend development. A lot of the focus is on ReactJS cause I love it! As I'm also a designer there might even be some UI/UX stuff from time to time."
+ },
+ "naveenKumarNamachivayam": {
+ "name": "NaveenKumar Namachivayam",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/naveenKumarNamachivayam/avatar.png",
+ "designation": "",
+ "isDeveloperProgramMember": false,
+ "bio": "I am a performance engineer ⚡. I break stuffs 🔨. I make videos about performance testing tools, performance engineering and more. If you are still reading this 💙, here is the special discount for you https://qain.si/devweb, coupon code: YOUTUBE. 🙏 Please connect me on LinkedIn https://www.linkedin.com/in/naveenkumarn/ | Join QAInsights Community at https://community.qainsights.com/"
+ },
+ "catalinPit": {
+ "name": "Catalin Pit",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/catalinPit/avatar.png",
+ "designation": "",
+ "isDeveloperProgramMember": false,
+ "bio": "A software engineer that talks about all topics in tech. I create programming tutorials; mostly about Web Development and JavaScript. Occasionally, I cover other topics as well! I also create developer vlogs where I talk about other topics than coding."
+ },
+ "programWithGio": {
+ "name": "Gio",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/programWithGio/avatar.png",
+ "designation": "",
+ "isDeveloperProgramMember": false,
+ "bio": "I've been coding since 2005 & my very first website was built with HTML, CSS, & PHP all in a single index.php file (good old times). I decided to make my own channel and start producing content on things that I know & have learned over the years as well as the things that I will learn along the way. Currently, my main stack consists of PHP, Laravel, GraphQL, React JS (Next.js & Gatsby) & Tailwind CSS. (Though, I am planning on exploring others soon like Flutter & Dart)"
+ },
+ "codeWithTomi": {
+ "name": "Tomi Tokko",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/codeWithTomi/avatar.png",
+ "designation": "",
+ "isDeveloperProgramMember": false,
+ "bio": "I teach about coding and i build cool projects. So, stay tuned to the channel to get quality contents."
+ },
+ "aniaKubow": {
+ "name": "Ania Kubów",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/authors/aniaKubow/avatar.png",
+ "designation": "",
+ "isDeveloperProgramMember": false,
+ "bio": "My name is Ania Kubow and I am a Software Developer (ex-Eurostar) who quit the rat race to focus on my channel and teach others how to code by building retro Games and awesome projects. I am also part of the core team @FreeCodeCamp. You can find me putting out videos on there, as well as on my own channel every Wednesday (and sometimes an extra one during the week too)!"
+ },
+ "rapidAPITraining": {
+ "name": "RapidAPI Training",
+ "avatar": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/training/authors/rapidAPITraining/avatar.png",
+ "designation": "Your designation",
+ "isDeveloperProgramMember": false,
+ "bio": "RapidAPI Customer Education / Training"
+ }
+}
diff --git a/authors/javascriptMastery/avatar.png b/authors/javascriptMastery/avatar.png
new file mode 100644
index 00000000..b4be7d02
Binary files /dev/null and b/authors/javascriptMastery/avatar.png differ
diff --git a/authors/naveenKumarNamachivayam/avatar.png b/authors/naveenKumarNamachivayam/avatar.png
new file mode 100644
index 00000000..5e22370f
Binary files /dev/null and b/authors/naveenKumarNamachivayam/avatar.png differ
diff --git a/authors/pratham/avatar.png b/authors/pratham/avatar.png
new file mode 100644
index 00000000..a27ff502
Binary files /dev/null and b/authors/pratham/avatar.png differ
diff --git a/authors/programWithGio/avatar.png b/authors/programWithGio/avatar.png
new file mode 100644
index 00000000..b6415d92
Binary files /dev/null and b/authors/programWithGio/avatar.png differ
diff --git a/authors/rapidAPITraining/avatar.png b/authors/rapidAPITraining/avatar.png
new file mode 100644
index 00000000..2bef7122
Binary files /dev/null and b/authors/rapidAPITraining/avatar.png differ
diff --git a/authors/richard doe/avatar.png b/authors/richard doe/avatar.png
new file mode 100644
index 00000000..500b8f95
Binary files /dev/null and b/authors/richard doe/avatar.png differ
diff --git a/authors/saad/avatar.png b/authors/saad/avatar.png
new file mode 100644
index 00000000..8f9d50b6
Binary files /dev/null and b/authors/saad/avatar.png differ
diff --git a/authors/sirajRaval/avatar.png b/authors/sirajRaval/avatar.png
new file mode 100644
index 00000000..c885a8c0
Binary files /dev/null and b/authors/sirajRaval/avatar.png differ
diff --git a/authors/weibenfalk/avatar.png b/authors/weibenfalk/avatar.png
new file mode 100644
index 00000000..5dfb6c6f
Binary files /dev/null and b/authors/weibenfalk/avatar.png differ
diff --git a/categories/data.json b/categories/data.json
new file mode 100644
index 00000000..c4fad4fa
--- /dev/null
+++ b/categories/data.json
@@ -0,0 +1,34 @@
+{
+ "api": {
+ "name": "API",
+ "color": "orange"
+ },
+ "http": {
+ "name": "HTTP",
+ "color": "yellow"
+ },
+ "interactive": {
+ "name": "Interactive",
+ "color": "green"
+ },
+ "apps": {
+ "name": "Apps",
+ "color": "brown"
+ },
+ "webApis": {
+ "name": "Web APIs",
+ "color": "purple"
+ },
+ "bestPractices": {
+ "name": "Best Practices",
+ "color": "maroon"
+ },
+ "rapidapi": {
+ "name": "RapidAPI",
+ "color": "blue"
+ },
+ "comparison": {
+ "name": "Comparison",
+ "color": "cyan"
+ }
+}
diff --git a/courses/assets/favicon-96x96.png b/courses/assets/favicon-96x96.png
new file mode 100644
index 00000000..e5934eb7
Binary files /dev/null and b/courses/assets/favicon-96x96.png differ
diff --git a/courses/assets/ogg.jpg b/courses/assets/ogg.jpg
new file mode 100644
index 00000000..a118b6c2
Binary files /dev/null and b/courses/assets/ogg.jpg differ
diff --git a/courses/assets/rapidapi-logo.png b/courses/assets/rapidapi-logo.png
new file mode 100644
index 00000000..a18710cd
Binary files /dev/null and b/courses/assets/rapidapi-logo.png differ
diff --git a/courses/assets/rapidapi-og.png b/courses/assets/rapidapi-og.png
new file mode 100644
index 00000000..ae26a519
Binary files /dev/null and b/courses/assets/rapidapi-og.png differ
diff --git a/courses/config.json b/courses/config.json
new file mode 100644
index 00000000..c749109a
--- /dev/null
+++ b/courses/config.json
@@ -0,0 +1,13 @@
+{
+ "siteName": "RapidAPI Courses",
+ "type": "website",
+ "description": "Free video courses by RapidAPI and RapidAPI Developer Experts offer short to help you become a pro API Developer.",
+ "language": "en",
+ "locale": "en_US",
+ "siteUrl": "https://rapidapi.com/courses",
+ "siteLogo": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/courses/assets/rapidapi-logo.png",
+ "siteFavicon": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/courses/assets/favicon-96x96.png",
+ "ogImage": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/courses/assets/ogg.jpg",
+ "socialBanner": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/courses/assets/rapidapi-logo.png",
+ "twitter": "rapid_api"
+}
diff --git a/courses/data.json b/courses/data.json
new file mode 100644
index 00000000..10d54179
--- /dev/null
+++ b/courses/data.json
@@ -0,0 +1,27 @@
+[
+ {"source": "rapidapi-openapi-extensions"},
+ {"source": "rapidapi-openapi-extensions"},
+ {"source": "rapidapi-openapi-extensions"},
+ {"source": "openapi-introduction"},
+ {"source": "openapi-introduction"},
+ {"source": "openapi-introduction"},
+ {"source": "ehadmin-part-2"},
+ {"source": "ehadmin-part-2"},
+ {"source": "ehadmin-part-2"},
+ {"source": "ehadmin-part-2"},
+ {"source": "build-and-sell-your-own-api"},
+ {"source": "turn-api-startup"},
+ {"source": "build-deploy-google-maps-travel-companion-application"},
+ {
+ "source": "build-deploy-react-cryptocurrency-app-master-redux-toolkit-video"
+ },
+ {"source": "building-node-js-app-javascript-noob"},
+ {"source": "convolutional-networks-heart-disease-prediction"},
+ {"source": "4-apis-manage-multiple-apis-application-programming-interface"},
+ {"source": "4-steps-millions-api"},
+ {"source": "money-developer-selling-apis"},
+ {"source": "integrate-multiple-apis-laravel-app-rapidapi"},
+ {"source": "react-google-maps-geolocation-react-typescript"},
+ {"source": "build-full-working-api-django-publicizing-rapidapi"},
+ {"source": "crash-api-testing-rapidapi-github-actions"}
+]
diff --git a/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/breaking-news-api.md b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/breaking-news-api.md
new file mode 100644
index 00000000..b5ad049c
--- /dev/null
+++ b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/breaking-news-api.md
@@ -0,0 +1,15 @@
+---
+title: Breaking News API
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/chuck-norris-api.md b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/chuck-norris-api.md
new file mode 100644
index 00000000..9ad2fea4
--- /dev/null
+++ b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/chuck-norris-api.md
@@ -0,0 +1,15 @@
+---
+title: Chuck Norris API
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/geo-location-api.md b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/geo-location-api.md
new file mode 100644
index 00000000..bbe86edc
--- /dev/null
+++ b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/geo-location-api.md
@@ -0,0 +1,15 @@
+---
+title: Geo Location API
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/index-html.md b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/index-html.md
new file mode 100644
index 00000000..416ca43a
--- /dev/null
+++ b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/index-html.md
@@ -0,0 +1,15 @@
+---
+title: index.html
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/index.md b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/index.md
new file mode 100644
index 00000000..9fcb87dc
--- /dev/null
+++ b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/index.md
@@ -0,0 +1,22 @@
+---
+title: 4 APIs at ONCE! | How To Manage Multiple APIs (Application Programming Interface)
+description: Let's say you have an application that uses multiple APIs from various platforms. Each API has its own key and its own way of managing access. What if I told you that there's a platform where you can manage all of your APIs in one spot? We're going to build an app that consumes multiple APIs using RapidAPI to see how easy it is to use. We'll create a quick project by using Vite.js and Tailwind CSS, then use RapidAPI to connect to 4 APIs and consume their data.
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+modules:
+ - source: index
+lessons:
+ - source: intro
+ - source: rapidapi-marketplace
+ - source: project-setup-vite-js
+ - source: index-html
+ - source: main-js-setup
+ - source: geo-location-api
+ - source: open-weather-api
+ - source: chuck-norris-api
+ - source: breaking-news-api
+videoId: NFToND6x_nI
+---
diff --git a/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/intro.md b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/intro.md
new file mode 100644
index 00000000..beaba04d
--- /dev/null
+++ b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/intro.md
@@ -0,0 +1,11 @@
+---
+title: Intro
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/main-js-setup.md b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/main-js-setup.md
new file mode 100644
index 00000000..f964e2b0
--- /dev/null
+++ b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/main-js-setup.md
@@ -0,0 +1,15 @@
+---
+title: main.js setup
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/open-weather-api.md b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/open-weather-api.md
new file mode 100644
index 00000000..95a7499e
--- /dev/null
+++ b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/open-weather-api.md
@@ -0,0 +1,15 @@
+---
+title: Open Weather API
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/project-setup-vite-js.md b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/project-setup-vite-js.md
new file mode 100644
index 00000000..8ecff359
--- /dev/null
+++ b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/project-setup-vite-js.md
@@ -0,0 +1,15 @@
+---
+title: Project Setup (Vite.js)
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/rapidapi-marketplace.md b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/rapidapi-marketplace.md
new file mode 100644
index 00000000..a2ca1902
--- /dev/null
+++ b/courses/posts/4-apis-manage-multiple-apis-application-programming-interface/rapidapi-marketplace.md
@@ -0,0 +1,15 @@
+---
+title: RapidAPI Marketplace
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-steps-millions-api/api.md b/courses/posts/4-steps-millions-api/api.md
new file mode 100644
index 00000000..968e2284
--- /dev/null
+++ b/courses/posts/4-steps-millions-api/api.md
@@ -0,0 +1,15 @@
+---
+title: What is an API?
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-steps-millions-api/build.md b/courses/posts/4-steps-millions-api/build.md
new file mode 100644
index 00000000..11303b77
--- /dev/null
+++ b/courses/posts/4-steps-millions-api/build.md
@@ -0,0 +1,15 @@
+---
+title: The Build
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-steps-millions-api/conclusion.md b/courses/posts/4-steps-millions-api/conclusion.md
new file mode 100644
index 00000000..2386b702
--- /dev/null
+++ b/courses/posts/4-steps-millions-api/conclusion.md
@@ -0,0 +1,15 @@
+---
+title: Conclusion
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-steps-millions-api/host.md b/courses/posts/4-steps-millions-api/host.md
new file mode 100644
index 00000000..06acc6f7
--- /dev/null
+++ b/courses/posts/4-steps-millions-api/host.md
@@ -0,0 +1,15 @@
+---
+title: The Host
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-steps-millions-api/idea.md b/courses/posts/4-steps-millions-api/idea.md
new file mode 100644
index 00000000..65018e5f
--- /dev/null
+++ b/courses/posts/4-steps-millions-api/idea.md
@@ -0,0 +1,15 @@
+---
+title: The Idea
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-steps-millions-api/index.md b/courses/posts/4-steps-millions-api/index.md
new file mode 100644
index 00000000..9f917b77
--- /dev/null
+++ b/courses/posts/4-steps-millions-api/index.md
@@ -0,0 +1,21 @@
+---
+title: 4 Steps to Make $Millions with an API
+description: There's an API for just about everything these days. Let me show you how to build your own API and make money from it.
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+modules:
+ - source: index
+lessons:
+ - source: intro
+ - source: api
+ - source: steps-making-api
+ - source: idea
+ - source: build
+ - source: host
+ - source: sell
+ - source: conclusion
+videoId: GpYboktUnTY
+---
diff --git a/courses/posts/4-steps-millions-api/intro.md b/courses/posts/4-steps-millions-api/intro.md
new file mode 100644
index 00000000..f4b522aa
--- /dev/null
+++ b/courses/posts/4-steps-millions-api/intro.md
@@ -0,0 +1,11 @@
+---
+title: Intro
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-steps-millions-api/sell.md b/courses/posts/4-steps-millions-api/sell.md
new file mode 100644
index 00000000..e45f0dbe
--- /dev/null
+++ b/courses/posts/4-steps-millions-api/sell.md
@@ -0,0 +1,15 @@
+---
+title: The Sell
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/4-steps-millions-api/steps-making-api.md b/courses/posts/4-steps-millions-api/steps-making-api.md
new file mode 100644
index 00000000..fba31dea
--- /dev/null
+++ b/courses/posts/4-steps-millions-api/steps-making-api.md
@@ -0,0 +1,15 @@
+---
+title: Steps to making an API
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeStackr
+---
+
+
diff --git a/courses/posts/build-and-sell-your-own-api/adding-endpoints-rapidapi.md b/courses/posts/build-and-sell-your-own-api/adding-endpoints-rapidapi.md
new file mode 100644
index 00000000..450f5212
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/adding-endpoints-rapidapi.md
@@ -0,0 +1,15 @@
+---
+title: Adding our Endpoints to RapidAPI
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+---
+
+
diff --git a/courses/posts/build-and-sell-your-own-api/adding-pricing-plans.md b/courses/posts/build-and-sell-your-own-api/adding-pricing-plans.md
new file mode 100644
index 00000000..e4bf4746
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/adding-pricing-plans.md
@@ -0,0 +1,15 @@
+---
+title: Adding Pricing Plans
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+---
+
+
diff --git a/courses/posts/build-and-sell-your-own-api/creating-api-rapidapi.md b/courses/posts/build-and-sell-your-own-api/creating-api-rapidapi.md
new file mode 100644
index 00000000..1aa7121d
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/creating-api-rapidapi.md
@@ -0,0 +1,15 @@
+---
+title: Creating our API on RapidAPI
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+---
+
+
diff --git a/courses/posts/build-and-sell-your-own-api/creating-node-js-project.md b/courses/posts/build-and-sell-your-own-api/creating-node-js-project.md
new file mode 100644
index 00000000..6ed911d1
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/creating-node-js-project.md
@@ -0,0 +1,15 @@
+---
+title: Creating our Node.js project
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+---
+
+
diff --git a/courses/posts/build-and-sell-your-own-api/creating-rapidapi-account.md b/courses/posts/build-and-sell-your-own-api/creating-rapidapi-account.md
new file mode 100644
index 00000000..e905cfa9
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/creating-rapidapi-account.md
@@ -0,0 +1,15 @@
+---
+title: Creating a RapidAPI account
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+---
+
+
diff --git a/courses/posts/build-and-sell-your-own-api/deploying-heroku.md b/courses/posts/build-and-sell-your-own-api/deploying-heroku.md
new file mode 100644
index 00000000..8df4b0d2
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/deploying-heroku.md
@@ -0,0 +1,15 @@
+---
+title: Deploying to Heroku
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+---
+
+
diff --git a/courses/posts/build-and-sell-your-own-api/index.md b/courses/posts/build-and-sell-your-own-api/index.md
new file mode 100644
index 00000000..4bb27f57
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/index.md
@@ -0,0 +1,27 @@
+---
+title: Build and sell your own API
+description: In this video I show you how to make a profitable API and sell it on the RapidAPI Hub.
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+modules:
+ - source: index
+lessons:
+ - source: introduction
+ - source: overview-of-final-product
+ - source: creating-rapidapi-account
+ - source: creating-node-js-project
+ - source: routing-express
+ - source: news-source
+ - source: multiple-news-sources
+ - source: individual-news-source-parameter
+ - source: refactoring-prep-deployment
+ - source: creating-api-rapidapi
+ - source: deploying-heroku
+ - source: adding-endpoints-rapidapi
+ - source: adding-pricing-plans
+ - source: publishing-api
+videoId: GK4Pl-GmPHk
+---
diff --git a/courses/posts/build-and-sell-your-own-api/individual-news-source-parameter.md b/courses/posts/build-and-sell-your-own-api/individual-news-source-parameter.md
new file mode 100644
index 00000000..491e4db7
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/individual-news-source-parameter.md
@@ -0,0 +1,15 @@
+---
+title: Getting an individual news source by parameter
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+---
+
+
diff --git a/courses/posts/build-and-sell-your-own-api/introduction.md b/courses/posts/build-and-sell-your-own-api/introduction.md
new file mode 100644
index 00000000..c929674e
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/introduction.md
@@ -0,0 +1,15 @@
+---
+title: Introduction
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+---
+
+
diff --git a/courses/posts/build-and-sell-your-own-api/multiple-news-sources.md b/courses/posts/build-and-sell-your-own-api/multiple-news-sources.md
new file mode 100644
index 00000000..87eb957f
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/multiple-news-sources.md
@@ -0,0 +1,15 @@
+---
+title: Getting multiple news sources
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+---
+
+
diff --git a/courses/posts/build-and-sell-your-own-api/news-source.md b/courses/posts/build-and-sell-your-own-api/news-source.md
new file mode 100644
index 00000000..88625ba8
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/news-source.md
@@ -0,0 +1,15 @@
+---
+title: Getting a news source
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+---
+
+
diff --git a/courses/posts/build-and-sell-your-own-api/overview-of-final-product.md b/courses/posts/build-and-sell-your-own-api/overview-of-final-product.md
new file mode 100644
index 00000000..1b2f953f
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/overview-of-final-product.md
@@ -0,0 +1,15 @@
+---
+title: Overview of the final product
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+---
+
+
diff --git a/courses/posts/build-and-sell-your-own-api/publishing-api.md b/courses/posts/build-and-sell-your-own-api/publishing-api.md
new file mode 100644
index 00000000..1ca65632
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/publishing-api.md
@@ -0,0 +1,15 @@
+---
+title: Publishing our API
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+---
+
+
diff --git a/courses/posts/build-and-sell-your-own-api/refactoring-prep-deployment.md b/courses/posts/build-and-sell-your-own-api/refactoring-prep-deployment.md
new file mode 100644
index 00000000..a2680c83
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/refactoring-prep-deployment.md
@@ -0,0 +1,15 @@
+---
+title: Refactoring and Prep for Deployment
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+---
+
+
diff --git a/courses/posts/build-and-sell-your-own-api/routing-express.md b/courses/posts/build-and-sell-your-own-api/routing-express.md
new file mode 100644
index 00000000..618605f2
--- /dev/null
+++ b/courses/posts/build-and-sell-your-own-api/routing-express.md
@@ -0,0 +1,15 @@
+---
+title: Routing in Express
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - aniaKubow
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/change-map-styles.md b/courses/posts/build-deploy-google-maps-travel-companion-application/change-map-styles.md
new file mode 100644
index 00000000..f4072927
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/change-map-styles.md
@@ -0,0 +1,15 @@
+---
+title: Change Map Styles
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/demo.md b/courses/posts/build-deploy-google-maps-travel-companion-application/demo.md
new file mode 100644
index 00000000..3376edd1
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/demo.md
@@ -0,0 +1,11 @@
+---
+title: Demo
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/deployment.md b/courses/posts/build-deploy-google-maps-travel-companion-application/deployment.md
new file mode 100644
index 00000000..0ceb7143
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/deployment.md
@@ -0,0 +1,15 @@
+---
+title: Deployment
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/display-places-map.md b/courses/posts/build-deploy-google-maps-travel-companion-application/display-places-map.md
new file mode 100644
index 00000000..5e696907
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/display-places-map.md
@@ -0,0 +1,15 @@
+---
+title: Display Places on the Map
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/env.md b/courses/posts/build-deploy-google-maps-travel-companion-application/env.md
new file mode 100644
index 00000000..93a2482b
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/env.md
@@ -0,0 +1,11 @@
+---
+title: ENV
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/folder-structure.md b/courses/posts/build-deploy-google-maps-travel-companion-application/folder-structure.md
new file mode 100644
index 00000000..35f6a926
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/folder-structure.md
@@ -0,0 +1,15 @@
+---
+title: Folder Structure
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/header.md b/courses/posts/build-deploy-google-maps-travel-companion-application/header.md
new file mode 100644
index 00000000..d4f347a8
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/header.md
@@ -0,0 +1,15 @@
+---
+title: Header
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/index.md b/courses/posts/build-deploy-google-maps-travel-companion-application/index.md
new file mode 100644
index 00000000..c9796689
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/index.md
@@ -0,0 +1,30 @@
+---
+title: Build and Deploy a Google Maps Travel Companion Application
+description: 'Geolocation, Google Maps API & Google Places API, fetching API data based on the location, data filtering are just some features that make this Travel Advisor App the best Maps Application that you can currently find on YouTube'
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+modules:
+ - source: index
+lessons:
+ - source: intro
+ - source: setup
+ - source: demo
+ - source: project-setup
+ - source: folder-structure
+ - source: header
+ - source: map
+ - source: list
+ - source: working-apis
+ - source: place-card
+ - source: display-places-map
+ - source: scroll-places-filters
+ - source: places-search
+ - source: weather-api
+ - source: change-map-styles
+ - source: env
+ - source: deployment
+videoId: UKdQjQX1Pko
+---
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/intro.md b/courses/posts/build-deploy-google-maps-travel-companion-application/intro.md
new file mode 100644
index 00000000..e8e637ef
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/intro.md
@@ -0,0 +1,11 @@
+---
+title: Intro
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/list.md b/courses/posts/build-deploy-google-maps-travel-companion-application/list.md
new file mode 100644
index 00000000..8290e1de
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/list.md
@@ -0,0 +1,11 @@
+---
+title: List
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/map.md b/courses/posts/build-deploy-google-maps-travel-companion-application/map.md
new file mode 100644
index 00000000..b31a39cc
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/map.md
@@ -0,0 +1,11 @@
+---
+title: Map
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/place-card.md b/courses/posts/build-deploy-google-maps-travel-companion-application/place-card.md
new file mode 100644
index 00000000..adfaca27
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/place-card.md
@@ -0,0 +1,15 @@
+---
+title: Place Card
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/places-search.md b/courses/posts/build-deploy-google-maps-travel-companion-application/places-search.md
new file mode 100644
index 00000000..0dfcb01a
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/places-search.md
@@ -0,0 +1,15 @@
+---
+title: Places Search
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/project-setup.md b/courses/posts/build-deploy-google-maps-travel-companion-application/project-setup.md
new file mode 100644
index 00000000..b9ff0b75
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/project-setup.md
@@ -0,0 +1,15 @@
+---
+title: Project Setup
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/scroll-places-filters.md b/courses/posts/build-deploy-google-maps-travel-companion-application/scroll-places-filters.md
new file mode 100644
index 00000000..f7656173
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/scroll-places-filters.md
@@ -0,0 +1,15 @@
+---
+title: Scroll Places & Filters
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/setup.md b/courses/posts/build-deploy-google-maps-travel-companion-application/setup.md
new file mode 100644
index 00000000..55581a55
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/setup.md
@@ -0,0 +1,11 @@
+---
+title: Setup
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/weather-api.md b/courses/posts/build-deploy-google-maps-travel-companion-application/weather-api.md
new file mode 100644
index 00000000..5e47af99
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/weather-api.md
@@ -0,0 +1,15 @@
+---
+title: Weather API
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-google-maps-travel-companion-application/working-apis.md b/courses/posts/build-deploy-google-maps-travel-companion-application/working-apis.md
new file mode 100644
index 00000000..8cbaeb93
--- /dev/null
+++ b/courses/posts/build-deploy-google-maps-travel-companion-application/working-apis.md
@@ -0,0 +1,15 @@
+---
+title: Working with APIs
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/challenge.md b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/challenge.md
new file mode 100644
index 00000000..7f470f71
--- /dev/null
+++ b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/challenge.md
@@ -0,0 +1,15 @@
+---
+title: Challenge
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/chart.md b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/chart.md
new file mode 100644
index 00000000..8ed35399
--- /dev/null
+++ b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/chart.md
@@ -0,0 +1,11 @@
+---
+title: Chart
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/crypto-details.md b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/crypto-details.md
new file mode 100644
index 00000000..32d3ad53
--- /dev/null
+++ b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/crypto-details.md
@@ -0,0 +1,15 @@
+---
+title: Crypto Details
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/crypto-news.md b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/crypto-news.md
new file mode 100644
index 00000000..af5597d4
--- /dev/null
+++ b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/crypto-news.md
@@ -0,0 +1,15 @@
+---
+title: Crypto News
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/cryptocurrencies.md b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/cryptocurrencies.md
new file mode 100644
index 00000000..12cfeb13
--- /dev/null
+++ b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/cryptocurrencies.md
@@ -0,0 +1,15 @@
+---
+title: Cryptocurrencies
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/homepage.md b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/homepage.md
new file mode 100644
index 00000000..8a535d75
--- /dev/null
+++ b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/homepage.md
@@ -0,0 +1,15 @@
+---
+title: Homepage
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/index.md b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/index.md
new file mode 100644
index 00000000..e58644fb
--- /dev/null
+++ b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/index.md
@@ -0,0 +1,24 @@
+---
+title: Build and Deploy a React Cryptocurrency App and Master Redux Toolkit in One Video
+description: Learn advanced React best practices, State Management using Redux Toolkit, UI Creation using Ant Design, creating charts using Chart.js, and fetching data from multiple sources using RapidAPI while building the best Cryptocurrency App on YouTube - Cryptoverse.
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+modules:
+ - source: index
+lessons:
+ - source: intro
+ - source: rapidapi
+ - source: layout
+ - source: homepage
+ - source: redux-toolkit-api-dev
+ - source: cryptocurrencies
+ - source: crypto-news
+ - source: crypto-details
+ - source: chart
+ - source: mobile-navigation
+ - source: challenge
+videoId: 9DDX3US3kss
+---
diff --git a/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/intro.md b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/intro.md
new file mode 100644
index 00000000..d70d3886
--- /dev/null
+++ b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/intro.md
@@ -0,0 +1,11 @@
+---
+title: Intro
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/layout.md b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/layout.md
new file mode 100644
index 00000000..2ba8b48c
--- /dev/null
+++ b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/layout.md
@@ -0,0 +1,11 @@
+---
+title: Layout
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/mobile-navigation.md b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/mobile-navigation.md
new file mode 100644
index 00000000..f3aee2cb
--- /dev/null
+++ b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/mobile-navigation.md
@@ -0,0 +1,15 @@
+---
+title: Mobile navigation
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/rapidapi.md b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/rapidapi.md
new file mode 100644
index 00000000..c799fdf4
--- /dev/null
+++ b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/rapidapi.md
@@ -0,0 +1,15 @@
+---
+title: RapidAPI
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/redux-toolkit-api-dev.md b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/redux-toolkit-api-dev.md
new file mode 100644
index 00000000..bd8e9ee1
--- /dev/null
+++ b/courses/posts/build-deploy-react-cryptocurrency-app-master-redux-toolkit-video/redux-toolkit-api-dev.md
@@ -0,0 +1,15 @@
+---
+title: Redux Toolkit & API Dev
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/build-full-working-api-django-publicizing-rapidapi/build-api-django.md b/courses/posts/build-full-working-api-django-publicizing-rapidapi/build-api-django.md
new file mode 100644
index 00000000..8730ccbe
--- /dev/null
+++ b/courses/posts/build-full-working-api-django-publicizing-rapidapi/build-api-django.md
@@ -0,0 +1,15 @@
+---
+title: Build An API In Django
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeWithTomi
+---
+
+
diff --git a/courses/posts/build-full-working-api-django-publicizing-rapidapi/deploy-django-api-heroku.md b/courses/posts/build-full-working-api-django-publicizing-rapidapi/deploy-django-api-heroku.md
new file mode 100644
index 00000000..0df4efc1
--- /dev/null
+++ b/courses/posts/build-full-working-api-django-publicizing-rapidapi/deploy-django-api-heroku.md
@@ -0,0 +1,15 @@
+---
+title: Deploy A Django API To Heroku
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeWithTomi
+---
+
+
diff --git a/courses/posts/build-full-working-api-django-publicizing-rapidapi/index.md b/courses/posts/build-full-working-api-django-publicizing-rapidapi/index.md
new file mode 100644
index 00000000..3565f6ef
--- /dev/null
+++ b/courses/posts/build-full-working-api-django-publicizing-rapidapi/index.md
@@ -0,0 +1,17 @@
+---
+title: How To Build A Full Working API In Django and Publicizing IT On RapidAPI
+description: In this video, we will build a basic API in Django using the Django Rest Framework, deploy it on heroku and put it on RapidAPI Hub.
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeWithTomi
+modules:
+ - source: index
+lessons:
+ - source: intro
+ - source: build-api-django
+ - source: deploy-django-api-heroku
+ - source: putting-api-rapidapi-hub
+videoId: Zy0k1KnkO9w
+---
diff --git a/courses/posts/build-full-working-api-django-publicizing-rapidapi/intro.md b/courses/posts/build-full-working-api-django-publicizing-rapidapi/intro.md
new file mode 100644
index 00000000..53e5b121
--- /dev/null
+++ b/courses/posts/build-full-working-api-django-publicizing-rapidapi/intro.md
@@ -0,0 +1,11 @@
+---
+title: Intro
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeWithTomi
+---
+
+
diff --git a/courses/posts/build-full-working-api-django-publicizing-rapidapi/putting-api-rapidapi-hub.md b/courses/posts/build-full-working-api-django-publicizing-rapidapi/putting-api-rapidapi-hub.md
new file mode 100644
index 00000000..2eb735e3
--- /dev/null
+++ b/courses/posts/build-full-working-api-django-publicizing-rapidapi/putting-api-rapidapi-hub.md
@@ -0,0 +1,15 @@
+---
+title: Putting Our API On RapidAPI Hub
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - codeWithTomi
+---
+
+
diff --git a/courses/posts/building-node-js-app-javascript-noob/api-key-secure-dotenv.md b/courses/posts/building-node-js-app-javascript-noob/api-key-secure-dotenv.md
new file mode 100644
index 00000000..dc350662
--- /dev/null
+++ b/courses/posts/building-node-js-app-javascript-noob/api-key-secure-dotenv.md
@@ -0,0 +1,15 @@
+---
+title: How to keep your API key secure using dotenv
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - coderCoder
+---
+
+
diff --git a/courses/posts/building-node-js-app-javascript-noob/asynchronous-javascript-json-data-server-side-client.md b/courses/posts/building-node-js-app-javascript-noob/asynchronous-javascript-json-data-server-side-client.md
new file mode 100644
index 00000000..a67ddc57
--- /dev/null
+++ b/courses/posts/building-node-js-app-javascript-noob/asynchronous-javascript-json-data-server-side-client.md
@@ -0,0 +1,15 @@
+---
+title: Use asynchronous JavaScript to get JSON data from server-side to client
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - coderCoder
+---
+
+
diff --git a/courses/posts/building-node-js-app-javascript-noob/dynamically-generate-image-tag-javascript.md b/courses/posts/building-node-js-app-javascript-noob/dynamically-generate-image-tag-javascript.md
new file mode 100644
index 00000000..e2d7c773
--- /dev/null
+++ b/courses/posts/building-node-js-app-javascript-noob/dynamically-generate-image-tag-javascript.md
@@ -0,0 +1,15 @@
+---
+title: Dynamically generate image tag using JavaScript
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - coderCoder
+---
+
+
diff --git a/courses/posts/building-node-js-app-javascript-noob/index.md b/courses/posts/building-node-js-app-javascript-noob/index.md
new file mode 100644
index 00000000..2dd8326e
--- /dev/null
+++ b/courses/posts/building-node-js-app-javascript-noob/index.md
@@ -0,0 +1,20 @@
+---
+title: Building a Node.js app (as a JavaScript noob)
+description: 'In this video, we will be building a basic web app using Node.js (Express.js) loading external API data using asynchronous JavaScript.'
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - coderCoder
+modules:
+ - source: index
+lessons:
+ - source: intro
+ - source: set-website-files-local-express-js-site
+ - source: set-route-node-js-load-api-data-fetch
+ - source: asynchronous-javascript-json-data-server-side-client
+ - source: dynamically-generate-image-tag-javascript
+ - source: api-key-secure-dotenv
+ - source: style-website-css
+videoId: wYALykLb5oY
+---
diff --git a/courses/posts/building-node-js-app-javascript-noob/intro.md b/courses/posts/building-node-js-app-javascript-noob/intro.md
new file mode 100644
index 00000000..d4563737
--- /dev/null
+++ b/courses/posts/building-node-js-app-javascript-noob/intro.md
@@ -0,0 +1,11 @@
+---
+title: Intro
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - coderCoder
+---
+
+
diff --git a/courses/posts/building-node-js-app-javascript-noob/set-route-node-js-load-api-data-fetch.md b/courses/posts/building-node-js-app-javascript-noob/set-route-node-js-load-api-data-fetch.md
new file mode 100644
index 00000000..e46275a6
--- /dev/null
+++ b/courses/posts/building-node-js-app-javascript-noob/set-route-node-js-load-api-data-fetch.md
@@ -0,0 +1,15 @@
+---
+title: Set up route in Node.js to load API data using fetch()
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - coderCoder
+---
+
+
diff --git a/courses/posts/building-node-js-app-javascript-noob/set-website-files-local-express-js-site.md b/courses/posts/building-node-js-app-javascript-noob/set-website-files-local-express-js-site.md
new file mode 100644
index 00000000..194e19ed
--- /dev/null
+++ b/courses/posts/building-node-js-app-javascript-noob/set-website-files-local-express-js-site.md
@@ -0,0 +1,15 @@
+---
+title: Set up website files and local Express.js site
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - coderCoder
+---
+
+
diff --git a/courses/posts/building-node-js-app-javascript-noob/style-website-css.md b/courses/posts/building-node-js-app-javascript-noob/style-website-css.md
new file mode 100644
index 00000000..20267586
--- /dev/null
+++ b/courses/posts/building-node-js-app-javascript-noob/style-website-css.md
@@ -0,0 +1,15 @@
+---
+title: Style the website with CSS
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - coderCoder
+---
+
+
diff --git a/courses/posts/convolutional-networks-heart-disease-prediction/index.md b/courses/posts/convolutional-networks-heart-disease-prediction/index.md
new file mode 100644
index 00000000..70456cb3
--- /dev/null
+++ b/courses/posts/convolutional-networks-heart-disease-prediction/index.md
@@ -0,0 +1,14 @@
+---
+title: Convolutional Networks for Heart Disease Prediction
+description: AlphaCare is an open-source project that Keshav Boudaria and I have been working on for the past few weeks, and it's built entirely on top of freely available open-source data, algorithms, and compute. In this first video of the AlphaCare series, I'll explain how we can use it to classify ECG data from patient heartbeats to accurately predict the likelihood of different types of heart disease, mainly Arrhythmia. The goal of AlphaCare is to progressively improve it's capabilities as a community until it's able to be used as a tool to treat and prevent the top 10 major disease globally. Ultimately, we'd like to use it to treat the root cause of all diseases, Aging. AlphaCare is a work in progress, we have a lot of work to do together. I can't wait to learn and grow with all of you, let's make a massive positive impact together!
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - sirajRaval
+modules:
+ - source: index
+lessons:
+ - source: intro
+videoId: fGv6VmfGMLc
+---
diff --git a/courses/posts/convolutional-networks-heart-disease-prediction/intro.md b/courses/posts/convolutional-networks-heart-disease-prediction/intro.md
new file mode 100644
index 00000000..55df50b8
--- /dev/null
+++ b/courses/posts/convolutional-networks-heart-disease-prediction/intro.md
@@ -0,0 +1,15 @@
+---
+title: Convolutional Networks for Heart Disease Prediction
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - sirajRaval
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/conclusion.md b/courses/posts/crash-api-testing-rapidapi-github-actions/conclusion.md
new file mode 100644
index 00000000..23ef1c00
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/conclusion.md
@@ -0,0 +1,15 @@
+---
+title: Conclusion
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/demo-api-performance.md b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-api-performance.md
new file mode 100644
index 00000000..0f9517e6
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-api-performance.md
@@ -0,0 +1,15 @@
+---
+title: '[Demo] API Performance'
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/demo-creating-test-rapidapi-testing.md b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-creating-test-rapidapi-testing.md
new file mode 100644
index 00000000..1ca10d76
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-creating-test-rapidapi-testing.md
@@ -0,0 +1,15 @@
+---
+title: '[Demo] Creating a Test in RapidAPI Testing'
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/demo-executing-rapidapi-github-action.md b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-executing-rapidapi-github-action.md
new file mode 100644
index 00000000..0898f085
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-executing-rapidapi-github-action.md
@@ -0,0 +1,15 @@
+---
+title: '[Demo] Executing RapidAPI GitHub Action'
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-developer-dashboard.md b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-developer-dashboard.md
new file mode 100644
index 00000000..821e3149
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-developer-dashboard.md
@@ -0,0 +1,15 @@
+---
+title: '[Demo] RapidAPI Developer Dashboard'
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-github-action.md b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-github-action.md
new file mode 100644
index 00000000..1e3d1af6
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-github-action.md
@@ -0,0 +1,15 @@
+---
+title: '[Demo] RapidAPI GitHub Action'
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-marketplace-search.md b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-marketplace-search.md
new file mode 100644
index 00000000..59f9be95
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-marketplace-search.md
@@ -0,0 +1,15 @@
+---
+title: '[Demo] RapidAPI Marketplace Search'
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-marketplace.md b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-marketplace.md
new file mode 100644
index 00000000..6087f028
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-marketplace.md
@@ -0,0 +1,15 @@
+---
+title: '[Demo] RapidAPI Marketplace'
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-provide-dashboard.md b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-provide-dashboard.md
new file mode 100644
index 00000000..adc1511e
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-provide-dashboard.md
@@ -0,0 +1,15 @@
+---
+title: '[Demo] RapidAPI Provide Dashboard'
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-signin.md b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-signin.md
new file mode 100644
index 00000000..992c1918
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-signin.md
@@ -0,0 +1,15 @@
+---
+title: '[Demo] RapidAPI Signin'
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-test-endpoint.md b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-test-endpoint.md
new file mode 100644
index 00000000..d3fe0e54
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-test-endpoint.md
@@ -0,0 +1,15 @@
+---
+title: '[Demo] RapidAPI Test Endpoint'
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-testing.md b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-testing.md
new file mode 100644
index 00000000..fc838469
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-rapidapi-testing.md
@@ -0,0 +1,15 @@
+---
+title: '[Demo] RapidAPI Testing'
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/demo-testing-apis.md b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-testing-apis.md
new file mode 100644
index 00000000..3124a024
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/demo-testing-apis.md
@@ -0,0 +1,15 @@
+---
+title: '[Demo] Testing the APIs'
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/index.md b/courses/posts/crash-api-testing-rapidapi-github-actions/index.md
new file mode 100644
index 00000000..5e00cefd
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/index.md
@@ -0,0 +1,31 @@
+---
+title: 'Crash Course: API Testing with RapidAPI & GitHub Actions'
+description: 'In this tutorial you will learn about RapidAPI, API testing using RapidAPI Testing solution, how to monitor the performance of the API, RapidAPI GitHub Action and more.'
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+modules:
+ - source: index
+lessons:
+ - source: intro
+ - source: rapidapi
+ - source: rapidapi-products
+ - source: rapidapi-testing
+ - source: rapidapi-github-action
+ - source: demo-rapidapi-signin
+ - source: demo-rapidapi-marketplace
+ - source: demo-rapidapi-developer-dashboard
+ - source: demo-rapidapi-marketplace-search
+ - source: demo-rapidapi-test-endpoint
+ - source: demo-rapidapi-provide-dashboard
+ - source: demo-rapidapi-testing
+ - source: demo-creating-test-rapidapi-testing
+ - source: demo-testing-apis
+ - source: demo-api-performance
+ - source: demo-rapidapi-github-action
+ - source: demo-executing-rapidapi-github-action
+ - source: conclusion
+videoId: yCE7QvwG1-c
+---
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/intro.md b/courses/posts/crash-api-testing-rapidapi-github-actions/intro.md
new file mode 100644
index 00000000..d661755e
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/intro.md
@@ -0,0 +1,11 @@
+---
+title: Intro
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/rapidapi-github-action.md b/courses/posts/crash-api-testing-rapidapi-github-actions/rapidapi-github-action.md
new file mode 100644
index 00000000..7f013cf1
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/rapidapi-github-action.md
@@ -0,0 +1,15 @@
+---
+title: RapidAPI GitHub Action
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/rapidapi-products.md b/courses/posts/crash-api-testing-rapidapi-github-actions/rapidapi-products.md
new file mode 100644
index 00000000..5cd867a4
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/rapidapi-products.md
@@ -0,0 +1,15 @@
+---
+title: RapidAPI Products
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/rapidapi-testing.md b/courses/posts/crash-api-testing-rapidapi-github-actions/rapidapi-testing.md
new file mode 100644
index 00000000..57dcbba8
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/rapidapi-testing.md
@@ -0,0 +1,15 @@
+---
+title: RapidAPI Testing
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/crash-api-testing-rapidapi-github-actions/rapidapi.md b/courses/posts/crash-api-testing-rapidapi-github-actions/rapidapi.md
new file mode 100644
index 00000000..d17d5cc2
--- /dev/null
+++ b/courses/posts/crash-api-testing-rapidapi-github-actions/rapidapi.md
@@ -0,0 +1,15 @@
+---
+title: What is RapidAPI?
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - naveenKumarNamachivayam
+---
+
+
diff --git a/courses/posts/integrate-multiple-apis-laravel-app-rapidapi/index.md b/courses/posts/integrate-multiple-apis-laravel-app-rapidapi/index.md
new file mode 100644
index 00000000..37b1f629
--- /dev/null
+++ b/courses/posts/integrate-multiple-apis-laravel-app-rapidapi/index.md
@@ -0,0 +1,14 @@
+---
+title: How to integrate multiple APIs with your Laravel app using RapidAPI
+description: In this video we review what RapidAPI is & how you can use it to connect & integrate multiple APIs into your Laravel application with a single API key. We are going to integrate with a currency conversion API & build a flexible API wrapper that we can use to connect to multiple APIs that are on RapidAPI.
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - programWithGio
+modules:
+ - source: index
+lessons:
+ - source: intro
+videoId: c8Zc0kbaR5I
+---
diff --git a/courses/posts/integrate-multiple-apis-laravel-app-rapidapi/intro.md b/courses/posts/integrate-multiple-apis-laravel-app-rapidapi/intro.md
new file mode 100644
index 00000000..dddb0054
--- /dev/null
+++ b/courses/posts/integrate-multiple-apis-laravel-app-rapidapi/intro.md
@@ -0,0 +1,15 @@
+---
+title: How to integrate multiple APIs with your Laravel app using RapidAPI
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - programWithGio
+---
+
+
diff --git a/courses/posts/money-developer-selling-apis/api.md b/courses/posts/money-developer-selling-apis/api.md
new file mode 100644
index 00000000..4371196d
--- /dev/null
+++ b/courses/posts/money-developer-selling-apis/api.md
@@ -0,0 +1,15 @@
+---
+title: What's an API?
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - catalinPit
+---
+
+
diff --git a/courses/posts/money-developer-selling-apis/apis.md b/courses/posts/money-developer-selling-apis/apis.md
new file mode 100644
index 00000000..e97e4b27
--- /dev/null
+++ b/courses/posts/money-developer-selling-apis/apis.md
@@ -0,0 +1,15 @@
+---
+title: Why do we need APIs?
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - catalinPit
+---
+
+
diff --git a/courses/posts/money-developer-selling-apis/build-api.md b/courses/posts/money-developer-selling-apis/build-api.md
new file mode 100644
index 00000000..ca414dea
--- /dev/null
+++ b/courses/posts/money-developer-selling-apis/build-api.md
@@ -0,0 +1,15 @@
+---
+title: Build the API
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - catalinPit
+---
+
+
diff --git a/courses/posts/money-developer-selling-apis/deploy-api.md b/courses/posts/money-developer-selling-apis/deploy-api.md
new file mode 100644
index 00000000..9ccef0a8
--- /dev/null
+++ b/courses/posts/money-developer-selling-apis/deploy-api.md
@@ -0,0 +1,15 @@
+---
+title: Deploy the API
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - catalinPit
+---
+
+
diff --git a/courses/posts/money-developer-selling-apis/index.md b/courses/posts/money-developer-selling-apis/index.md
new file mode 100644
index 00000000..b76f2a4d
--- /dev/null
+++ b/courses/posts/money-developer-selling-apis/index.md
@@ -0,0 +1,21 @@
+---
+title: Make Money As A Developer By Selling APIs
+description: 'Building and selling APIs is a great way to create a new source of passive income. Thus, in this video, you will see how to monetize your API!'
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - catalinPit
+modules:
+ - source: index
+lessons:
+ - source: introduction
+ - source: api
+ - source: apis
+ - source: rapidapi-hub
+ - source: build-api
+ - source: deploy-api
+ - source: rapidapi-monetize-api
+ - source: leaving
+videoId: TvRe8NLbF30
+---
diff --git a/courses/posts/money-developer-selling-apis/introduction.md b/courses/posts/money-developer-selling-apis/introduction.md
new file mode 100644
index 00000000..c46a3467
--- /dev/null
+++ b/courses/posts/money-developer-selling-apis/introduction.md
@@ -0,0 +1,15 @@
+---
+title: Introduction
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - catalinPit
+---
+
+
diff --git a/courses/posts/money-developer-selling-apis/leaving.md b/courses/posts/money-developer-selling-apis/leaving.md
new file mode 100644
index 00000000..9716568e
--- /dev/null
+++ b/courses/posts/money-developer-selling-apis/leaving.md
@@ -0,0 +1,15 @@
+---
+title: Before leaving
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - catalinPit
+---
+
+
diff --git a/courses/posts/money-developer-selling-apis/rapidapi-hub.md b/courses/posts/money-developer-selling-apis/rapidapi-hub.md
new file mode 100644
index 00000000..ca9aeeb3
--- /dev/null
+++ b/courses/posts/money-developer-selling-apis/rapidapi-hub.md
@@ -0,0 +1,15 @@
+---
+title: RapidAPI Hub
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - catalinPit
+---
+
+
diff --git a/courses/posts/money-developer-selling-apis/rapidapi-monetize-api.md b/courses/posts/money-developer-selling-apis/rapidapi-monetize-api.md
new file mode 100644
index 00000000..e3582d0d
--- /dev/null
+++ b/courses/posts/money-developer-selling-apis/rapidapi-monetize-api.md
@@ -0,0 +1,15 @@
+---
+title: Use RapidAPI to monetize the API
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - catalinPit
+---
+
+
diff --git a/courses/posts/react-google-maps-geolocation-react-typescript/api-data-map-markers.md b/courses/posts/react-google-maps-geolocation-react-typescript/api-data-map-markers.md
new file mode 100644
index 00000000..e7849d1a
--- /dev/null
+++ b/courses/posts/react-google-maps-geolocation-react-typescript/api-data-map-markers.md
@@ -0,0 +1,15 @@
+---
+title: API data and Map Markers
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - weibenfalk
+---
+
+
diff --git a/courses/posts/react-google-maps-geolocation-react-typescript/api-water-data.md b/courses/posts/react-google-maps-geolocation-react-typescript/api-water-data.md
new file mode 100644
index 00000000..9b061a0a
--- /dev/null
+++ b/courses/posts/react-google-maps-geolocation-react-typescript/api-water-data.md
@@ -0,0 +1,15 @@
+---
+title: API for water data
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - weibenfalk
+---
+
+
diff --git a/courses/posts/react-google-maps-geolocation-react-typescript/create-google-map.md b/courses/posts/react-google-maps-geolocation-react-typescript/create-google-map.md
new file mode 100644
index 00000000..1f8bc473
--- /dev/null
+++ b/courses/posts/react-google-maps-geolocation-react-typescript/create-google-map.md
@@ -0,0 +1,15 @@
+---
+title: Create the Google Map
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - weibenfalk
+---
+
+
diff --git a/courses/posts/react-google-maps-geolocation-react-typescript/geolocation.md b/courses/posts/react-google-maps-geolocation-react-typescript/geolocation.md
new file mode 100644
index 00000000..cb147860
--- /dev/null
+++ b/courses/posts/react-google-maps-geolocation-react-typescript/geolocation.md
@@ -0,0 +1,15 @@
+---
+title: Geolocation
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - weibenfalk
+---
+
+
diff --git a/courses/posts/react-google-maps-geolocation-react-typescript/index.md b/courses/posts/react-google-maps-geolocation-react-typescript/index.md
new file mode 100644
index 00000000..065253ed
--- /dev/null
+++ b/courses/posts/react-google-maps-geolocation-react-typescript/index.md
@@ -0,0 +1,19 @@
+---
+title: React Google Maps - Geolocation with React and TypeScript
+description: In this tutorial, you'll learn how to create a Google Map with React.js and Typescript. The app will find the nearest bars both by click and geolocation.
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - weibenfalk
+modules:
+ - source: index
+lessons:
+ - source: intro
+ - source: tech-starter-files
+ - source: create-google-map
+ - source: api-data-map-markers
+ - source: api-water-data
+ - source: geolocation
+videoId: I9F-CMiKOz4
+---
diff --git a/courses/posts/react-google-maps-geolocation-react-typescript/intro.md b/courses/posts/react-google-maps-geolocation-react-typescript/intro.md
new file mode 100644
index 00000000..b9503d23
--- /dev/null
+++ b/courses/posts/react-google-maps-geolocation-react-typescript/intro.md
@@ -0,0 +1,11 @@
+---
+title: Intro
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - weibenfalk
+---
+
+
diff --git a/courses/posts/react-google-maps-geolocation-react-typescript/tech-starter-files.md b/courses/posts/react-google-maps-geolocation-react-typescript/tech-starter-files.md
new file mode 100644
index 00000000..19aed634
--- /dev/null
+++ b/courses/posts/react-google-maps-geolocation-react-typescript/tech-starter-files.md
@@ -0,0 +1,15 @@
+---
+title: Tech used and starter files
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - weibenfalk
+---
+
+
diff --git a/courses/posts/turn-api-startup/about-apis-and-setup.md b/courses/posts/turn-api-startup/about-apis-and-setup.md
new file mode 100644
index 00000000..1f41e642
--- /dev/null
+++ b/courses/posts/turn-api-startup/about-apis-and-setup.md
@@ -0,0 +1,15 @@
+---
+title: About APIs and Setup
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/turn-api-startup/adding-endpoints.md b/courses/posts/turn-api-startup/adding-endpoints.md
new file mode 100644
index 00000000..6761004e
--- /dev/null
+++ b/courses/posts/turn-api-startup/adding-endpoints.md
@@ -0,0 +1,15 @@
+---
+title: Adding endpoints
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/turn-api-startup/create-server.md b/courses/posts/turn-api-startup/create-server.md
new file mode 100644
index 00000000..d2f21ffe
--- /dev/null
+++ b/courses/posts/turn-api-startup/create-server.md
@@ -0,0 +1,15 @@
+---
+title: Create a Server
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/turn-api-startup/deployment-preparation.md b/courses/posts/turn-api-startup/deployment-preparation.md
new file mode 100644
index 00000000..f122b8d8
--- /dev/null
+++ b/courses/posts/turn-api-startup/deployment-preparation.md
@@ -0,0 +1,15 @@
+---
+title: Deployment Preparation
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/turn-api-startup/hosting.md b/courses/posts/turn-api-startup/hosting.md
new file mode 100644
index 00000000..ae8b86c1
--- /dev/null
+++ b/courses/posts/turn-api-startup/hosting.md
@@ -0,0 +1,15 @@
+---
+title: Hosting
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/turn-api-startup/index.md b/courses/posts/turn-api-startup/index.md
new file mode 100644
index 00000000..68b1fcbd
--- /dev/null
+++ b/courses/posts/turn-api-startup/index.md
@@ -0,0 +1,20 @@
+---
+title: Turn an API into a Startup?! Build & Sell an API with JavaScript
+description: "The only Node JS API tutorial you need. Learn how to Build and Deploy your own fully custom JavaScript API with Node and Express from scratch. Once you've learned that, I'll teach you how to put it on a platform called RapidAPI, set the pricing tiers, start selling, and finally, build a business around it."
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+modules:
+ - source: index
+lessons:
+ - source: intro
+ - source: about-apis-and-setup
+ - source: create-server
+ - source: adding-endpoints
+ - source: deployment-preparation
+ - source: hosting
+ - source: rapidapi-marketplace
+videoId: be9sHQ7xqo0
+---
diff --git a/courses/posts/turn-api-startup/intro.md b/courses/posts/turn-api-startup/intro.md
new file mode 100644
index 00000000..c7a03827
--- /dev/null
+++ b/courses/posts/turn-api-startup/intro.md
@@ -0,0 +1,11 @@
+---
+title: Intro
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/courses/posts/turn-api-startup/rapidapi-marketplace.md b/courses/posts/turn-api-startup/rapidapi-marketplace.md
new file mode 100644
index 00000000..9dc68c99
--- /dev/null
+++ b/courses/posts/turn-api-startup/rapidapi-marketplace.md
@@ -0,0 +1,15 @@
+---
+title: RapidAPI Marketplace
+description: ''
+publishedDate: 2021-09-22T17:49:44.101Z
+lastModifiedDate: 2021-09-22T17:49:44.101Z
+coverImage: ''
+authors:
+ - javascriptMastery
+---
+
+
diff --git a/guides/assets/favicon-96x96.png b/guides/assets/favicon-96x96.png
new file mode 100644
index 00000000..e5934eb7
Binary files /dev/null and b/guides/assets/favicon-96x96.png differ
diff --git a/guides/assets/ogg.jpg b/guides/assets/ogg.jpg
new file mode 100644
index 00000000..c3093358
Binary files /dev/null and b/guides/assets/ogg.jpg differ
diff --git a/guides/assets/rapidapi-logo.png b/guides/assets/rapidapi-logo.png
new file mode 100644
index 00000000..a18710cd
Binary files /dev/null and b/guides/assets/rapidapi-logo.png differ
diff --git a/guides/assets/rapidapi-og.png b/guides/assets/rapidapi-og.png
new file mode 100644
index 00000000..ae26a519
Binary files /dev/null and b/guides/assets/rapidapi-og.png differ
diff --git a/guides/config.json b/guides/config.json
new file mode 100644
index 00000000..6c37a710
--- /dev/null
+++ b/guides/config.json
@@ -0,0 +1,13 @@
+{
+ "siteName": "RapidAPI Guides",
+ "type": "website",
+ "description": "Guides by RapidAPI offer short and long from API Development content with interactive examples & visuals to help you become a pro API Developer.",
+ "language": "en",
+ "locale": "en_US",
+ "siteUrl": "https://rapidapi.com/guides",
+ "siteLogo": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/guides/assets/rapidapi-logo.png",
+ "siteFavicon": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/guides/assets/favicon-96x96.png",
+ "ogImage": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/guides/assets/ogg.jpg",
+ "socialBanner": "https://raw.githubusercontent.com/RapidAPI/DevRel-Stack-Data/production/guides/assets/rapidapi-logo.png",
+ "twitter": "rapid_api"
+}
diff --git a/guides/data.json b/guides/data.json
new file mode 100644
index 00000000..693c9bf3
--- /dev/null
+++ b/guides/data.json
@@ -0,0 +1,116 @@
+[
+ {"source": "graphql-aliases-variables"},
+ {"source": "use-rapidapi-teams"},
+ {"source": "response-chaining"},
+ {"source": "build-crypto-news-app"},
+ {"source": "build-text-sentiment-analysis-app"},
+ {"source": "build-time-app"},
+ {"source": "learn-dom-api"},
+ {"source": "rest-api-concepts"},
+ {"source": "api-rate-limiting"},
+ {"source": "build-superhero-app"},
+ {"source": "build-graphql-app"},
+ {"source": "use-rapidapi-client"},
+ {"source": "graphql-axios"},
+ {"source": "graphql-fetch-ways"},
+ {"source": "use-graphql-apis"},
+ {"source": "graphql-fields-arguments"},
+ {"source": "build-dictionary-app"},
+ {"source": "learn-fetch-api"},
+ {"source": "build-text-extraction-app"},
+ {"source": "async-api"},
+ {"source": "build-spell-checker-app"},
+ {"source": "build-paraphrase-app"},
+ {"source": "build-movie-details-app"},
+ {"source": "build-music-app"},
+ {"source": "build-qrcode-app"},
+ {"source": "rapidapi-teams"},
+ {"source": "rapidql"},
+ {"source": "rapidapi-testing"},
+ {"source": "rapidapi-client"},
+ {"source": "graphql-schema-stitching"},
+ {"source": "fetch-api"},
+ {"source": "dom-api"},
+ {"source": "canvas-api"},
+ {"source": "browser-api"},
+ {"source": "difference-kafka-rest"},
+ {"source": "difference-graphql-kafka"},
+ {"source": "practices-working-kafka-api"},
+ {"source": "apache-kafka"},
+ {"source": "api-pagination"},
+ {"source": "increase-api-adoption"},
+ {"source": "build-covid-app"},
+ {"source": "internal-api"},
+ {"source": "build-news-app"},
+ {"source": "authentication-authorization"},
+ {"source": "top-five-voice-recognition-apis"},
+ {"source": "composite-api"},
+ {"source": "difference-api-microservices"},
+ {"source": "create-text-sentiment-analysis-app-using-react"},
+ {"source": "api-management-practices"},
+ {"source": "everything-need-know-http-request-methods"},
+ {"source": "http-compression"},
+ {"source": "rest-api-principles"},
+ {"source": "build-currency-conversion-app"},
+ {"source": "top-four-apis-can-make-web-accessible"},
+ {"source": "api-gateway"},
+ {"source": "top-five-sms-apis"},
+ {"source": "use-api-from-rapidapi"},
+ {"source": "top-five-amazing-text-analysis-apis"},
+ {"source": "top-five-voice-sports-apis"},
+ {"source": "api-caching"},
+ {"source": "optimize-api"},
+ {"source": "difference-rest-graphql"},
+ {"source": "top-five-food-recipe-apis"},
+ {"source": "top-five-machine-learning-apis"},
+ {"source": "top-five-movie-apis"},
+ {"source": "api-vulnerabilities"},
+ {"source": "top-five-facial-recognition-apis"},
+ {"source": "top-five-covid-apis"},
+ {"source": "api"},
+ {"source": "top-five-random-quote-generator-apis"},
+ {"source": "top-five-geocoding-location-apis"},
+ {"source": "http-request-method"},
+ {"source": "practices-designing-rest-apis"},
+ {"source": "introduction-publish-subscribe-pattern-based-api"},
+ {"source": "http-status-code"},
+ {"source": "authentication-rest-api"},
+ {"source": "ten-widely-used-http-headers"},
+ {"source": "secure-api"},
+ {"source": "introduction-api-testing"},
+ {"source": "build-weather-app"},
+ {"source": "web-api"},
+ {"source": "jamstack"},
+ {"source": "authenticate-authorize-graphql"},
+ {"source": "dns"},
+ {"source": "update-graphql-api"},
+ {"source": "difference-gRPC-rest"},
+ {"source": "difference-gRPC-graphql"},
+ {"source": "gRPC"},
+ {"source": "websockets"},
+ {"source": "tls"},
+ {"source": "webrtc"},
+ {"source": "common-http-status-code"},
+ {"source": "oath2.0"},
+ {"source": "ssl"},
+ {"source": "api-gateway"},
+ {"source": "api-spec"},
+ {"source": "difference-json-xml"},
+ {"source": "http-2"},
+ {"source": "intro-http-headers"},
+ {"source": "open-api-spec"},
+ {"source": "application-programming-interface"},
+ {"source": "http-cookies"},
+ {"source": "webhook"},
+ {"source": "practices-designing-soap-api"},
+ {"source": "difference-rest-soap"},
+ {"source": "practices-designing-graphql-api"},
+ {"source": "practices-versioning-rest-api"},
+ {"source": "http"},
+ {"source": "cors"},
+ {"source": "api-testing"},
+ {"source": "top-five-gaming-apis"},
+ {"source": "what-is-rest-and-when-you-should-use-it"},
+ {"source": "what-is-graphql-and-when-you-should-use-it"},
+ {"source": "top-five-http-headers-might-not-know"}
+]
diff --git a/guides/posts/apache-kafka/post.md b/guides/posts/apache-kafka/post.md
new file mode 100644
index 00000000..c0e68d2b
--- /dev/null
+++ b/guides/posts/apache-kafka/post.md
@@ -0,0 +1,51 @@
+---
+title: Introduction to Apache Kafka
+description: You can use Apache Kafka to build services like real-time data streams, and it provides five core APIs for Java and Scala to implement such services.
+publishedDate: 2021-11-03T16:27:05.876Z
+lastModifiedDate: 2021-11-03T16:27:05.876Z
+authors:
+ - saad
+category: api
+tags:
+ - apache-kafka
+ - kafka
+coverImage: ''
+---
+
+
+
+When developing an application, sometimes you need to implement a data pipeline or real-time data streams, etc. You can use Apache Kafka to build such features, and it provides five core APIs for Java and Scala to implement such services.
+
+
+
+## What is Apache Kafka
+
+[Apache Kafta](https://kafka.apache.org/) is an event streaming platform that combines three capabilities so that you can implement different use cases. Event streaming is used to get data in real-time from other event sources like databases, sensors, mobile devices, cloud services, and software applications in the form of streams of events.
+
+The three capabilities are as follow:
+
+- Publishing and subscribing to the streams of events
+- The user might need to store streams of events. So Apache Kafka also stores streams of events durably and reliably.
+- Process streams of events as they occur.
+
+Let’s take a look at the core APIs of Apache Kafka.
+
+### Admin API
+
+It is used to manage and inspect topics, brokers, and other Kafka objects.
+
+### Producer API
+
+You use Producer API to publish or write a stream of events to one or more Kafka topics. It allows the client to connect to Kafka servers running in the cluster and publish the stream of topics.
+
+### Consumer API
+
+It is used to subscribe or read one or more topics and process the stream of events produced to them. It connects to Kafka servers running in the cluster and then costumes streams of records.
+
+### Streams API
+
+Apache Kafka is widely used for implementing stream processing applications and microservices. It does this using Stream API. It provides the client with higher-order functions to process the event streams, including transformations, stateful operations, windowing, processing based on event-time, etc.
+
+### Kafka Connect API
+
+You use it to build and run reusable data import/export connectors that consume or produce streams of events from and to external systems and applications so they can integrate with Kafka.
diff --git a/guides/posts/api-caching/post.md b/guides/posts/api-caching/post.md
new file mode 100644
index 00000000..fc773b04
--- /dev/null
+++ b/guides/posts/api-caching/post.md
@@ -0,0 +1,50 @@
+---
+title: How does API caching work?
+description: REST APIs cache its response. This cache can be used to fetch the same response later. Let's take a look at it.
+publishedDate: 2021-10-07T17:01:53.644Z
+lastModifiedDate: 2021-10-07T17:01:53.644Z
+authors:
+ - saad
+category: api
+tags:
+ - cache
+coverImage: ''
+---
+
+
+ A REST API works by sending a request to the server and getting a response
+ in return. Every time you request data, it uses the GET method to fetch that
+ information. Do you think that if you visit a different page of the same
+ website and then get back to the original page, another GET request will be
+ sent to the server to get the same data? The answer to it is no. Let’s take
+ a look at it.
+
+
+## API Caching
+
+Caching is the ability to store copies of frequently accessed data in several places along the request-response path. The REST APIs are cacheable. It is one of its architectural constraints.
+
+When a client requests some resources, the request first goes through a cache and then to the server. If the cache contains the updated data, the request uses that data to satisfy the user request. If it does not, the data comes from the server.
+
+There are three types of caches:
+
+- Client Cache
+- Server Cache
+- Proxy Cache
+
+The client cache caches the response on the browser level. The server cache does the same thing but on the server. And proxy cache implements caching on the proxy server between the client and the server.
+
+## Cache Supported HTTP Methods
+
+Since REST API is cacheable, two methods support the caching: GET and POST. The GET request is cached by default. But the POST request, on the other hand, can be cached if required. You can set your POST request to cache by either providing it with an Expire or a Cache-Control header.
+
+The PUT and DELETE methods’ responses are not cacheable.
+
+## Benefits of API Caching
+
+There are several benefits of caching your API’s response. Here are some of them:
+
+- Your quality of service improves.
+- The website consumes less bandwidth.
+- The website latency decreases.
+- Server load also decreases.
diff --git a/guides/posts/api-gateway/post.md b/guides/posts/api-gateway/post.md
new file mode 100644
index 00000000..04d0bd57
--- /dev/null
+++ b/guides/posts/api-gateway/post.md
@@ -0,0 +1,38 @@
+---
+title: Introduction to API Gateways
+description: API Gateway sends the incoming API traffic to the API management system that handles various other functions.
+publishedDate: 2021-10-13T11:27:45.681Z
+lastModifiedDate: 2021-10-13T11:27:45.681Z
+authors:
+ - saad
+category: api
+tags:
+ - api
+ - gateway
+coverImage: ''
+---
+
+
+ When working with APIs, you will come across API Gateways sooner or later.
+ It sends the incoming API traffic to the API management system that handles
+ various other functions. Let’s take a look at it.
+
+
+## What is an API Gateway?
+
+An API Gateway accepts API requests from a client, directs them to the appropriate services, and then combines the results into a synchronous experience. To put it simply, the API Gateway first takes all the requests from a client, understands these requests and determines which services are needed, and then combines them into a unified, seamless experience for the user.
+
+The API Gateway is an API management tool that sits between client and server. API Gateways performs various functions, including authentication, routing, rate limiting, billing, monitoring, analytics, policies, alerts, security, etc.
+
+## API Gateway Usage
+
+As briefly mentioned above, API Gateway has several usages. You can use it to implement authentication and rate-limiting to protect your APIs from overuse and abuse. This will act as a countermeasure in case there is a Denial of Service (DDoS) attack. It can also be used to add analytics and monitoring to understand how people are using your API. You can use it to connect to a billing system if you are monetizing your API.
+
+## Benefits of API Gateway
+
+There are several benefits of using API Gateways. Let’s take a look at some of them:
+
+- You can standardize and also centralize the delivery of services through APIs or microservices using API Gateway.
+- It provides flexibility because they are highly configurable. The developers can write the internal structure of an application in multiple ways to invoke multiple backend services using the API Gateway.
+- It allows enterprises that rely on legacy applications to work with those apps or extend their functionality.
+- It contributes towards monitoring and observability. The API Gateway logs can pinpoint an issue during a monitoring failure.
diff --git a/guides/posts/api-management-practices/post.md b/guides/posts/api-management-practices/post.md
new file mode 100644
index 00000000..cbf62085
--- /dev/null
+++ b/guides/posts/api-management-practices/post.md
@@ -0,0 +1,43 @@
+---
+title: What are best API Management practices?
+description: Your company’s growth directly influences its tech infrastructure, and this, in turn, affects the size of your APIs. So you must follow some best practices for managing your APIs.
+publishedDate: 2021-10-26T10:25:53.100Z
+lastModifiedDate: 2021-10-26T10:25:53.100Z
+authors:
+ - saad
+category: bestPractices
+tags:
+ - api
+ - management
+coverImage: ''
+---
+
+
+ APIs have become crucial for business development stacks since they provide
+ a way to communicate between client and server or other applications. Your
+ company’s growth directly influences its tech infrastructure, and this, in
+ turn, affects the size of your APIs. So you must follow some best practices
+ for managing your APIs.
+
+
+## What is API Management?
+
+API management is the practice of overseeing all aspects of the APIs that your enterprise uses. It includes but is not limited to providing different ways of building APIs, making them accessible for all users, monitoring and analyzing their usage, reporting performance metrics, and securing access so only authenticated users can use them.
+
+Let’s take a look at some of the API management practices that you should follow.
+
+### API Availability
+
+Your APIs are acting as messengers between your servers, and if they are down, your whole business can go down with it. So you need to ensure that your API is available at all times and see as little downtime as reasonably possible.
+
+### Provide API Support
+
+One of the essential API management practices is providing quality support for your APIs to developers. You should also provide as many options as possible so developers can fully utilize the power of your API.
+
+### Provide Reliability
+
+Your APIs must be reliable; otherwise, no one is going to use them. You can do this by ensuring you are pulling the data from reliable sources or providing an endpoint that does not crash as the traffic increases.
+
+### API Security
+
+If your APIs are not secure, no one is going to use them. You also need to ensure that your company’s internal APIs are secure; otherwise, your data will be vulnerable to outside threats. You can use different techniques like rate-limiting, authentication, input validation, and adding a fail-safe to add additional security layers within your API.
diff --git a/guides/posts/api-pagination/post.md b/guides/posts/api-pagination/post.md
new file mode 100644
index 00000000..fea38e24
--- /dev/null
+++ b/guides/posts/api-pagination/post.md
@@ -0,0 +1,58 @@
+---
+title: What is API Pagination?
+description: Performance is the most critical factor of an API, and pagination is one way of optimizing it. Let's learn why.
+publishedDate: 2021-10-01T17:10:30.765Z
+lastModifiedDate: 2021-10-01T17:10:30.765Z
+authors:
+ - ahmadBilal
+category: api
+tags:
+ - api
+ - pagination
+ - paging
+coverImage: ''
+---
+
+
+ If you have ever navigated through multiple pages of Google Search results
+ or clicked the "load more posts" button on a blog, you have seen pagination.
+ API pagination works in a similar way.
+
+
+## Why is API Pagination needed?
+
+Imagine if Google showed all the search results on a single page. What would be the effect? For starters, it will take ages to compile and fit so many results on a single page. Not to mention the immense load each request will put on the server.
+
+This is the same reason why we need pagination for APIs. The APIs tracking medium to large size databases can return millions of entities as results, if not more. Therefore, such APIs divide their responses and return them in "pages" to keep performance in check.
+
+## Basics of API Pagination
+
+Typically, all the endpoints of an API that return a list of entities must be paginated. Even if, at some point, the data is not large enough to require pagination, it may increase in the future. Modifying endpoints later can get complicated. Therefore, pagination must be kept in mind while designing an API.
+
+You can choose what endpoint needs to be paginated. Depending upon the data, you can define a "Size" parameter that dictates how many entities are returned per page. Another endpoint, typically named "Page"(as in the current page number), will work together with Size to handle pagination. Paging also assumes that the responses are in some sort of order.
+
+## Is API Pagination necessary?
+
+Do you always need pagination? It depends on the API in question.
+
+If the dataset it serves is small and well defined, the users can reduce the number of responses by being more specific in requests. In this scenario, you may not need to paginate your API. But still, it is considered a good practice to provide pagination through API calls.
+
+## Types of API Pagination
+
+Pagination can be implemented in different ways. Depending on the implementation, the types are as follows.
+
+### Offset Paging
+
+It is the most common and relatively simple type of pagination. It is implemented by two parameters, Limit (aka Size) and Offset (aka Page). It is frequently used for apps that are backed by a SQL Database. Because Limit and Offset keywords are already part of the SQL syntax, very little logic is required to implement Offset Paging.
+
+### Keyset Paging
+
+In this approach, a key or delimiter is selected by which data can be sorted. Then, they key is used as a reference to split data into pages.
+
+For example, if data is sorted by user ids, then the key will be `since_user_id`. If the limit is set to 10, then the user will have to specify `since_user_id=10` to get results from 10 to 20.
+
+### Cursor Paging
+
+In cursor paging, in addition to the page requested, the API also returns a cursor. This cursor basically points to the contents of the next page. Hence paging is tightly controlled by logic on the API's end.
+
+This guide was an introduction to API Pagination. In the next one, we dive deeper into its types to learn more about them.
diff --git a/guides/posts/api-rate-limiting/post.md b/guides/posts/api-rate-limiting/post.md
new file mode 100644
index 00000000..1c59231d
--- /dev/null
+++ b/guides/posts/api-rate-limiting/post.md
@@ -0,0 +1,49 @@
+---
+title: Introduction To API Rate Limiting
+slug: api-rate-limiting
+description: API Rate Limiting is the process through which you limit the amount of traffic coming to your API by a single IP address.
+publishedDate: 2021-11-19T18:41:43.732Z
+lastModifiedDate: 2021-11-19T18:41:43.732Z
+authors:
+ - saad
+category: api
+tags:
+ - rate-limiting
+ - api
+coverImage: ''
+draft: false
+---
+
+
+
+When designing an API, you follow various best practices to ensure your API’s performance and success. Some of them include using the HTTP status codes, endpoint nesting, SSL certificate, using JSON for communication, etc. Another critical practice that plays a crucial role in your site’s uptime is rate-limiting.
+
+
+
+Let’s take a look at it.
+
+## What is API Rate Limiting?
+
+It is the process through which you limit the amount of traffic coming to your API by a single IP address. API rate limiting also protects your site from Distributed Denial of Service (DDoS) attacks. If the attacker tries to tank your server by launching a DDoS attack, the rate-limiting will stop addressing the API requests after reaching a certain threshold.
+
+The API Rate Limiting also helps to make your API scalable. If your API becomes popular out of the blue, there will be unexpected spikes of traffic that will cause lag. Thus, having rate-limiting will keep your API going for other developers.
+
+## Types of Rate Limiting
+
+There are two approaches to rate limiting. Let’s take a look at them.
+
+### Key-level Rate Limiting
+
+This rate-limiting level is more focused on controlling traffic from individual IP addresses to ensure that users do not go above their prescribed limit.
+
+### API-Level Rate Limiting
+
+This rate-limiting type deals with all the traffic coming to the API from all the users. It is to ensure that the overall API rate limit does not exceed.
+
+## Methods of API Rate Limiting
+
+Here are some of the methods you can use for API rate limiting.
+
+- **Hard Stop:** Your API consumers will get an error when they call the API if they are over the limit.
+- **Soft Stop:** You can implement a small period where the API calls will continue to succeed after the limit has been reached. You can use this period to let your API consumer know that they may have to subscribe to a new package.
+- **Throttled Stop:** Another thing you can implement is to slow down the response time once the user has reached the limit.
diff --git a/guides/posts/api-spec/post.md b/guides/posts/api-spec/post.md
new file mode 100644
index 00000000..c1340d62
--- /dev/null
+++ b/guides/posts/api-spec/post.md
@@ -0,0 +1,49 @@
+---
+title: What is an API spec?
+description: There are a lot of APIs out there, each with different specifications. The developers define these specifications when building an API.
+publishedDate: 2021-10-13T11:27:45.681Z
+lastModifiedDate: 2021-10-13T11:27:45.681Z
+authors:
+ - saad
+category: api
+tags:
+ - api
+ - specs
+coverImage: ''
+---
+
+
+ There are a lot of APIs out there, each with different specifications. The
+ developers define these specifications when building an API to set some
+ standards right from the start. Let’s take a look at some of these
+ specifications.
+
+
+## API Specs
+
+It is used to standardize data exchange between web services. Standardize means the ability of diverse systems, written in different programming languages, to run on different operating systems, or use various technologies to communicate.
+
+The API specification provides a comprehensive understanding of how an API behaves and links with other APIs. It also explains how the API functions and the results to expect when using the API.
+
+There are four types of API specifications:
+
+- Representational State Transfer (REST)
+- Simple Object Access Protocol (SOAP)
+- GraphQL
+- Remote Procedure Call (RPC)
+
+## REST
+
+REST API is one of the most common specifications of API. REST APIs allow you to perform CRUD (create, read, update, and delete) operations between a client and a server. It connects your backend with your frontend so they can communicate with each other.
+
+## SOAP
+
+SOAP API is another type of web service that allows communication between client and server. Any web service that complies with the SOAP web services specification is a SOAP web service. The W3C (World Wide Web Consortium) is behind these specifications.
+
+## GraphQL
+
+The GraphQL API is designed to provide you with the precise amount of data you request. With the REST API, you often encounter the problem of over-fetching and under-fetching, and GraphQL solves these problems.
+
+## RPC
+
+It is a simple interaction where a local client sends commands to a remote server. Both client and server use different call parameters, and these parameters are converted on both sides. These conversions happen through stubs that are dedicated pieces of code responsible for transforming and deconverting the call function parameters.
diff --git a/guides/posts/api-testing/post.md b/guides/posts/api-testing/post.md
new file mode 100644
index 00000000..a8bdd9f2
--- /dev/null
+++ b/guides/posts/api-testing/post.md
@@ -0,0 +1,47 @@
+---
+title: 'What is API Testing?'
+description: "API Testing helps your APIs to become more secure. Let's see how."
+publishedDate: 2021-10-05T15:41:15.688Z
+lastModifiedDate: 2021-10-05T15:41:15.688Z
+authors:
+ - saad
+category: api
+tags:
+ - testing
+coverImage: ''
+---
+
+
+ We are using APIs to build applications. An app is usually divided into
+ three layers: presentation, service, and data layer. The service layer or
+ the API acts as a bridge between the other two layers to communicate. It is
+ therefore imperative to test this layer to make sure everything is working
+ correctly.
+
+
+## API Testing
+
+Just like you test your UI to make sure a button is working, you also test your APIs. This testing is done to ensure that each endpoint is working as it should. This not only helps with improving the performance of the API but also makes it more secure.
+
+There are a few ways to test an API. Here are some:
+
+- Using a GUI tool like [RapidAPI Client](https://RapidAPI.com/products/api-design/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) to test different endpoints.
+- Using Curl for testing.
+- Writing tests yourself.
+
+## Why You Should Test Your APIs
+
+Testing your APIs timely helps to ensure your app is up all the time. There are a few reasons that make this testing extremely important.
+
+You can detect a lot of security or performance issues. You can also check if the response data is structured correctly or not. API testing can also reveal unused flags, irregular errors, incorrect handling of argument values, etc.
+
+At this stage, you can also identify whether there is any difficulty in connecting with the API or getting a valid response through it.
+
+## Benefits of API Testing
+
+There are several benefits associated with API testing. Here is a list of some of them:
+
+- API testing is faster than UI testing since they involve running only commands. So this means you will find more bugs in less time.
+- When API tests fail, you know precisely where the issue lies that crashed the system.
+- API tests are language-independent since data is exchanged via XML or JSON. So you can write them in any of your preferred languages.
+- API testing also helps you to release faster.
diff --git a/guides/posts/api-vulnerabilities/post.md b/guides/posts/api-vulnerabilities/post.md
new file mode 100644
index 00000000..30b6f45b
--- /dev/null
+++ b/guides/posts/api-vulnerabilities/post.md
@@ -0,0 +1,38 @@
+---
+title: Introduction To API Security Vulnerabilities
+description: Everyone is using APIs to build large-scale applications. APIs are made scalable so they can grow as an application grows.
+publishedDate: 2021-10-11T20:53:04.094Z
+lastModifiedDate: 2021-10-11T20:53:04.094Z
+authors:
+ - saad
+category: api
+tags:
+ - api
+ - vulnerabilities
+coverImage: ''
+---
+
+
+ Everyone is using APIs to build large-scale applications. APIs are made
+ scalable so they can grow as an application grows. You also need to ensure
+ that your APIs are secure; otherwise, anyone can unethically access its
+ data.
+
+
+There are many different vulnerabilities that you need to take care of while developing an API. Let’s take a look at some of them.
+
+## Man-in-the-Middle
+
+It is a type of cyber attack where someone is intercepting the communication between two parties. It can be client and server communication or client to client communication using APIs. This can be a high-security vulnerability, especially if you are exchanging sensitive data over communication.
+
+To prevent this, you need to ensure that your communication is encrypted. You can achieve this by adding an SSL certificate to encrypt your API communication.
+
+## Committing API Key Publicly
+
+When building an application, you often use a platform where you put your code for collaboration. This can be [GitHub](https://github.com/), [GitLab](https://about.gitlab.com/), [BitBucket](https://bitbucket.org/product/), etc. If your application source code is public and you are using some API to fetch some resources, you need to make sure you do not commit your API key along with the source code.
+
+It would be best if you use environment variables for this. For this, create a `.env.local` file in the root of your project and put your API key there and then access the environment variable in your code to get the API key.
+
+## Distributed Denial of Services (DDoS)
+
+If your API does not have a rate-limiting feature implemented, then it is vulnerable to DDoS attacks. A DDoS attack is a malicious attempt to disrupt regular traffic of a target server, service, or network by overwhelming the target with a flood of internet traffic. The rate-limiting, if implemented, will stop serving the user data after a particular limit has been reached.
diff --git a/guides/posts/api/post.md b/guides/posts/api/post.md
new file mode 100644
index 00000000..b1a65af4
--- /dev/null
+++ b/guides/posts/api/post.md
@@ -0,0 +1,48 @@
+---
+title: Introduction to APIs
+description: APIs are used to communicate between two architectures in order to perform CRUD operations. Let's take a deeper look at it.
+publishedDate: 2021-10-06T16:28:30.765Z
+lastModifiedDate: 2021-10-06T16:28:30.765Z
+authors:
+ - saad
+category: api
+tags:
+ - api
+coverImage: ''
+---
+
+
+ In a web application, the server and the client codebase are autonomous. But
+ the client needs to communicate with the server to work correctly. But how
+ does this communication work? It is done through APIs, and there are many
+ other instances where APIs come into action.
+
+
+## What is an API?
+
+The Application Programming Interface (API) is like a middle man, 2connecting two sides; a waiter takes your order and brings you food. It is a channel that applications utilize to talk with each other. You put some information at one end, the API takes that information and gets back with a result.
+
+Many different types of APIs exist. You can use them to build web, desktop, mobile applications, CLI tools, extensions, and much more.
+
+Here are different types of APIs that are available to use:
+
+- REST API
+- GraphQL API
+- Web API
+- Browser API
+
+## REST API
+
+This is the most common type of API, and many people often confuse the term API with the REST API. REST APIs allow you to perform CRUD (create, read, update, and delete) operations between a client and a server. It connects your backend with your frontend so they can communicate with each other.
+
+## GraphQL API
+
+With GraphQL, you get precisely the data you request. No more, no else. You have a single entry point, i.e., /graphql, that you use to get the data. This fixes the issues of under-fetching and over-fetching and thus consumes low bandwidth.
+
+## Web API
+
+When you are building a website, there are many Web APIs available that you can use. The fetch API allows you to get data from a server. The DOM API lets you manipulate the DOM elements. Both of these are web APIs.
+
+## Browser API
+
+This API exists to let you communicate with browsers. It is often used to build browser extensions. It provides different functions that you use to perform specific actions. For instance, if you are developing an extension that zooms into the page, you may use the `setZoom` function of the browser API to manipulate the zoom settings.
diff --git a/guides/posts/application-programming-interface/post.md b/guides/posts/application-programming-interface/post.md
new file mode 100644
index 00000000..a8eb0dd1
--- /dev/null
+++ b/guides/posts/application-programming-interface/post.md
@@ -0,0 +1,46 @@
+---
+title: 'Application Programming Interface'
+description: 'Let’s see what is an API and how APIs can make your life as a Developer easier.'
+authors:
+ - pratham
+category: api
+tags:
+ - api
+publishedDate: 2021-10-13T08:00:00+08:00
+lastModifiedDate: 2021-10-13T08:00:00+08:00
+---
+
+
+ API is the acronym for Application Programming Interface. API is a set of
+ definitions and protocols that allow technology products and services to
+ communicate with each other via the internet. APIs are how apps talk to each
+ other.
+
+
+API is a set of definitions and protocols that allow technology products and services to communicate with each other via the internet. APIs are how apps talk to each other.
+
+Imagine you are building an app like Uber, and when a user signs up, you want to check if their email is valid.
+
+**How would you do that?**
+
+There's pretty complicated logic that goes into validating an email address:
+
+You'd check the format of string (does it have an @ sign?), you would ping the domain to make sure it runs an email server, and check a couple of blocklists to make sure it's not a delisted address.
+
+Do you think you have time to build and maintain an email validation service like that? Especially, when it’s just you or with a small team. Wouldn’t you rather spend time improving your business than spending time on trivial things like this?
+
+Instead, you could use an API - a 3rd party service that already implements the email validation logic, maintains it, and improves it as it’s their business to do so. You can rely on a 3rd party API to validate your users’ email IDs.
+
+Hence we can say that APIs help developers in 4 key ways:
+
+1. APIs increase the development speed
+ By leveraging APIs — developers spend less time implementing trivial features and get more time to focus on their essential business. Execution speed matters.
+
+2. APIs reduce the overall software cost
+ When you need to implement and maintain less code (relying on APIs), your development cost goes down. It’s a classic Build vs Buy argument.
+
+3. APIs can increase the quality of the software
+ Using a good API can make your software better. Each API component is developed by a business primarily focused on making it the best possible solution rather than one team that has to be good at many things.
+
+4. APIs yield new possibilities
+ With APIs, developers can now integrate with data sets and implement features like AI and Machine Learning that they wouldn't have been able to use before, creating new business opportunities.
diff --git a/guides/posts/async-api/post.md b/guides/posts/async-api/post.md
new file mode 100644
index 00000000..2b895f95
--- /dev/null
+++ b/guides/posts/async-api/post.md
@@ -0,0 +1,54 @@
+---
+title: Introduction to Async APIs
+description: AsyncAPI is an open-source project aimed at improving the current state of EDA.
+publishedDate: 2021-11-11T15:59:08.034Z
+lastModifiedDate: 2021-11-11T15:59:08.034Z
+authors:
+ - saad
+category: api
+tags:
+ - async-api
+coverImage: ''
+---
+
+
+
+APIs let you perform complex business operations by working with both the client and the server. If a human conducts these operations, it will take a lot of time, and also, there will be a considerable margin for error. So you must design your APIs as efficiently as possible because your company’s success may depend on how effectively you have implemented the communication.
+
+
+
+There are two kinds of APIs: Synchronous and Asynchronous. Let’s take a look at the latter one.
+
+## AsyncAPI
+
+Before we talk about AsyncAPI, let’s briefly mention Event-Driven Architecture (EDA). The EDA is a software architecture paradigm involving production, detection, consumption, and reaction to events.
+
+AsyncAPI is an open-source project aimed at improving the current state of EDA. These APIs allow relatively time-consuming requests to be processed in the background while other requests are made.
+
+Like the OpenAPI specification, AsyncAPI also provides a specification that allows developers, architects, and product managers to define asynchronous API interfaces. The recently released AsyncAPI specification 2.1.0 laid the foundation for EDA's more significant and better tool ecosystem.
+
+## AsyncAPI Document
+
+Like OpenAPI, AsyncAPI also uses a document that contains standardized definitions of channels, subscribers, messages, and payloads. The document file is either a YAML or JSON file.
+
+The payload may include data types, minimum, maximum values, and regexp.
+
+## Benefits of Using AsyncAPI
+
+Let’s take a look at some of the advantages of using AsyncAPI over synchronous APIs.
+
+### Ready-to-use Tools
+
+AsyncAPI also provides ready-to-use tools to help with the practical implementation of the AsyncAPI standard. Code and documentation generation tools for the most popular platforms make it easier for developers to implement standards in their APIs.
+
+### Message Format
+
+Since there is a specification written for the AsyncAPI, there is also a well-defined structure for exchanged messages. The message format needs to be generic so all the participants involved in the communication can understand. AsyncAPI supports multiple schemas like JSON, etc.
+
+### Improved Quality of Service for API Consumers
+
+AsyncAPI can generate API documentation with the AsyncAPI document using YAML or JSON. It helps the API consumers to understand how to use your API.
+
+### Multiple Protocols
+
+There are different protocols for exchanging data between other APIs. For instance, there are WebSockets, [Kafka](https://rapidapi.com/guides/apache-kafka?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel), etc. But the AsyncAPI standard is expected to be applicable no matter the protocol.
diff --git a/guides/posts/authenticate-authorize-graphql/post.md b/guides/posts/authenticate-authorize-graphql/post.md
new file mode 100644
index 00000000..52849c83
--- /dev/null
+++ b/guides/posts/authenticate-authorize-graphql/post.md
@@ -0,0 +1,65 @@
+---
+title: How to authenticate and authorize with GraphQL?
+description: You can use REST APIs, GraphQL API, and gRPC to communicate between client and server. These communications also involve user authentications and authorization.
+publishedDate: 2021-10-21T16:18:42.178Z
+lastModifiedDate: 2021-10-21T16:18:42.178Z
+authors:
+ - saad
+category: api
+tags:
+ - authenticate
+ - authorize
+ - graphql
+coverImage: ''
+---
+
+
+
+There are different types of API architecture available. You can use REST APIs, [GraphQL API](https://graphql.org/), and [gRPC](https://grpc.io/) to communicate between client and server. These communications also involve user authentications and authorization.
+
+
+
+Let’s take a look at [GraphQL](https://graphql.org/) and how you can authenticate and authorize users using it.
+
+## What is GraphQL?
+
+It is a query language that allows you to read and mutate the data in APIs. With [GraphQL](https://graphql.org/), you can quickly solve the problems of under-fetching and over-fetching. You get precisely the data that you request. No more, no else. You have a single entry point, i.e., /graphql, that you use to get the data.
+
+## GraphQL Authentication
+
+There are different ways you can authenticate a user in GraphQL. You can use the HTTP header to pass the authentication credentials to the server or utilize JSON Web Token.
+
+You can use [ApolloServer](https://www.apollographql.com/) for setting up GraphQL. The code below extracts the user token from the Authorization header included in each operation request. The server then processes the token and retrieves the appropriate user object for that token. Finally, it adds this object to the `context` object that is passed to every executed resolver.
+
+Once everything is done, each resolver can use this object to determine what data the user can access and what the user can request.
+
+```js
+const {ApolloServer} = require('apollo-server');
+
+const server = new ApolloServer({
+ typeDefs,
+ resolvers,
+ context: ({req}) => {
+ // Get the user token from the headers.
+ const token = req.headers.authorization || '';
+
+ // Try to retrieve a user with the token
+ const user = getUser(token);
+
+ // Add the user to the context
+ return {user};
+ }
+});
+
+server.listen().then(({url}) => {
+ console.log(`Server running at ${url}`);
+});
+```
+
+## Authorization
+
+There are different authorization methods that you can use with GraphQL. Here are some of them:
+
+- **In Resolvers:** The individual field resolvers in GraphQL servers check the user role and then make decisions if the user is authorized or not.
+- **With Data Models:** You can use the data models to put the authorization logic in one place and then use it in different areas.
+- **With Custom Directives:** You can use the GraphQL schema directive to implement authorization.
diff --git a/guides/posts/authentication-authorization/post.md b/guides/posts/authentication-authorization/post.md
new file mode 100644
index 00000000..02242a59
--- /dev/null
+++ b/guides/posts/authentication-authorization/post.md
@@ -0,0 +1,36 @@
+---
+title: Introduction to Authentication and Authorization
+description: 'Authentication and authorization are two different features that often play a crucial role in your application’s security, and you implement them using APIs.'
+publishedDate: 2021-10-27T17:46:45.950Z
+lastModifiedDate: 2021-10-27T17:46:45.950Z
+authors:
+ - saad
+category: api
+tags:
+ - authentication
+ - authorization
+coverImage: ''
+---
+
+
+ There are different kinds of APIs that you can use for client-server
+ communication. There are REST APIs, GraphQL APIs, gRPC, SOAP APIs. Each of
+ these provides various options, and you can implement all kinds of features
+ for your app using them.
+
+
+Authentication and authorization are two different features that often play a crucial role in your application’s security, and you implement them using APIs. Let’s take a look at them.
+
+## Authentication
+
+Validating the user to identify if they are who they claim to be is called authentication. There are different ways you can implement authentication in your applications. For instance, you can implement sign-up functionality for new users. If a user comes back to your application, they would have to sign in again using their email and password.
+
+You can also set a one-time password to authenticate a user for only a single session or transaction. Another way is using biometric authentication, where the user presents their fingerprint or retina scan to gain access to your application.
+
+For additional security, you can also add a two-factor authentication layer to your system where the user has to provide the code sent to their mobile or email after giving the username or password.
+
+## Authorization
+
+Authorization always comes after authentication. It is the process of permitting users to access different resources from the server, and it’s not visible and changeable by the user. Authorization works through settings that are implemented and maintained by the organization.
+
+An application may be designed for different kinds of users. For instance, an e-commerce website may have an admin dashboard for shopkeepers to add their products to the website. A customer looking at the website will not have access to this dashboard and have a separate dashboard entirely different from the shopkeeper’s one, and the shopkeeper will not have access to this dashboard.
diff --git a/guides/posts/authentication-rest-api/post.md b/guides/posts/authentication-rest-api/post.md
new file mode 100644
index 00000000..6374c50a
--- /dev/null
+++ b/guides/posts/authentication-rest-api/post.md
@@ -0,0 +1,52 @@
+---
+title: Different Authentication Methods in REST API
+description: You often need to add a user authentication system as a feature in your app, and REST API also acts as a bridge for this.
+publishedDate: 2021-10-20T17:13:16.859Z
+lastModifiedDate: 2021-10-20T17:13:16.859Z
+authors:
+ - saad
+category: api
+tags:
+ - authentication
+ - rest
+coverImage: ''
+---
+
+
+ Your application’s client and server need to communicate with each other.
+ This communication highly relies on REST APIs. You often need to add a user
+ authentication system as a feature in your app, and REST API also acts as a
+ bridge for this.
+
+
+## Authentication Methods
+
+There are many authentication methods that you can use with your REST APIs. Let’s discuss the three most common methods among the lot.
+
+### HTTP Authentication Schemes
+
+There are various HTTP security schemes that you can use with your REST APIs for authentication. For instance:
+
+- **Basic:** With this, the sender places the username and password in the request header. Both the username and password are encrypted with Base64. The server decrypts the data and sends back a response of whether the user is authenticated or not.
+- **Bearer:** An HTTP authentication scheme where the server generates a token and provides it to the client. The client then has to send this token in the Authorization header when making requests to protected resources.
+- **Digest:** This type of authentication does not need a password to be transmitted. The client takes the username and password and uses the MD5 hashing algorithm to create a hash that is then sent to the SQL server.
+- **OAuth:** It is an authorization protocol that provides applications the ability to secure designated access.
+
+### API Keys
+
+Another authentication method widely used with REST APIs is API keys. It provides first-time users with a unique generated key. When the user tries to access the requested resources, they use their API key. The API key tells the server this is the same user as before.
+
+
+ API keys must not be sent to the server as query parameters. Instead, they
+ should be sent in the Authorization header using REST APIs.
+
+
+### OAuth 2.0
+
+OAuth 2.0 (Open Authorization) is a standard developed to allow a user access to resources from a third-party application. It is an authorization protocol designed only to grant access to resources, and it works by using access tokens.
+
+The access token is information that provides authorization to access resources on behalf of the user. Usually, the JSON Web Token (JWT) format is used for the access token.
+
+
+ They also may have an expiration date because of security reasons.
+
diff --git a/guides/posts/browser-api/post.md b/guides/posts/browser-api/post.md
new file mode 100644
index 00000000..e86e9884
--- /dev/null
+++ b/guides/posts/browser-api/post.md
@@ -0,0 +1,38 @@
+---
+title: Introduction to Browser API
+description: Browser APIs are used to build browser extensions and other web applications that utilize the functionalities of a web browser.
+publishedDate: 2021-11-03T16:27:05.876Z
+lastModifiedDate: 2021-11-03T16:27:05.876Z
+authors:
+ - saad
+category: webApis
+tags:
+ - browser-api
+coverImage: ''
+---
+
+
+
+APIs are used for communication between two separate entities. These entities can be a server, a browser, DOM, or anything that provides functionalities used by other applications. If you are developing a mobile application, you will have to use the Android API to use the mobile’s camera, microphone in your application.
+
+
+
+Let’s take a look at the Browser API and how you can use it.
+
+## What is the Browser API?
+
+Browser APIs or Web APIs are used to build browser extensions and other web applications that utilize the functionalities of a web browser. They are built right into your web browser to provide browser data and its surrounding environment to perform complex things with it. They allow developers to perform complex operations without dealing with sophisticated lower-level code.
+
+Let’s take a look at some of the most common Browser APIs.
+
+### Fetch API
+
+It is a Browser API that uses promises to make network requests over the HTTP/1.1 protocol. You can make both exact or cross-origin requests using the Fetch API. This API takes at least one argument, i.e., the path of the resource you are interested in fetching. When the response is received, it is converted to JSON.
+
+### Fullscreen API
+
+You can use the Fullscreen API to remove everything in your browser except the website body. You can also set a particular element to go fullscreen using the `requestFullscreen` method. There are multiple use cases associated with it. For instance, while shopping on an e-commerce website, you need to look at the product closely. If you are watching a video, you may want the rest of the browser to temporarily go out of sight to have a better viewing experience.
+
+## Clipboard API
+
+This API allows you to access the clipboard of your operating system right from your browser. This is relatively common since often web developers are building features that copy or paste content or some data to the user’s clipboard.
diff --git a/guides/posts/build-covid-app/images/code-snippet.jpg b/guides/posts/build-covid-app/images/code-snippet.jpg
new file mode 100644
index 00000000..70f65acf
Binary files /dev/null and b/guides/posts/build-covid-app/images/code-snippet.jpg differ
diff --git a/guides/posts/build-covid-app/images/covid-stats-app.png b/guides/posts/build-covid-app/images/covid-stats-app.png
new file mode 100644
index 00000000..6ba21a5d
Binary files /dev/null and b/guides/posts/build-covid-app/images/covid-stats-app.png differ
diff --git a/guides/posts/build-covid-app/images/subscribe.jpg b/guides/posts/build-covid-app/images/subscribe.jpg
new file mode 100644
index 00000000..b3503a78
Binary files /dev/null and b/guides/posts/build-covid-app/images/subscribe.jpg differ
diff --git a/guides/posts/build-covid-app/post.md b/guides/posts/build-covid-app/post.md
new file mode 100644
index 00000000..b936f60c
--- /dev/null
+++ b/guides/posts/build-covid-app/post.md
@@ -0,0 +1,335 @@
+---
+title: How to build a COVID-19 Stats app using Next.js and COVID-19 API?
+description: Today, I am building an application that will show the user coronavirus stats of any country they enter.
+publishedDate: 2021-10-28T15:57:17.709Z
+lastModifiedDate: 2021-10-28T15:57:17.709Z
+authors:
+ - saad
+category: apps
+tags:
+ - rapidapi
+ - covid-stats-app
+coverImage: ''
+---
+
+
+
+There are several public APIs out there that you can use to develop small to large-scale applications. You do not have to create a new feature from scratch, and you can just find an API of it and use it to implement the feature.
+
+
+
+[RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides you with thousands of these public APIs that you can use in your apps. Many APIs on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) have free versions available, but you can also buy a premium version if the free version does not satisfy your need.
+
+Today, I am building an application that will show the user coronavirus stats of any country they enter. So without any further ado, let’s jump in.
+
+## Stack
+
+We need to choose a stack first to build this application. I have decided to go with the [Jamstack](https://jamstack.org/).
+
+I am going to use [Next.js](https://nextjs.org/) for the client-side and [TailwindCSS](https://tailwindcss.com/) for the styling.
+
+If you don’t know about Next.js, it is a JavaScript framework built on top of React and provides features like server-side rendering, static site generation, etc. Tailwind is a CSS framework that provides utility classes to speed up the development process.
+
+## Choosing The API
+
+Let’s find an API that we can use to fetch the COVID-19 stats. Go to [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and [create an account](https://RapidAPI.com/auth/sign-up?referral=/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) if you haven’t already and then search for "covid-19" in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+You will see different search results related to COVID-19 APIs. For this piece, I am using [COVID-19 data API](https://rapidapi.com/Gramzivi/api/covid-19-data/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel).
+
+To use this API, you need to subscribe to it first. You can do this by clicking on **Subscribe to Test** button.
+
+
+
+Once you click the button, you will be redirected to another page where different available subscription packages will be shown. Let’s go with the free one for now.
+
+After all this, you will be redirected back to the original page. Here you will have a key `x-rapidapi-key`. Save it. It will be used later in the application.
+
+## Building The UI
+
+You can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your terminal. So let’s do that.
+
+```sh
+npx create-next-app -e with-tailwindcss covid-stats-app
+```
+
+This command is going to take a minute to set everything up. After generating the boilerplate, you will see a folder with the name `covid-stats-app` has been created. Open this folder in your preferred code editor. I am going to use [VSCode](https://code.visualstudio.com/) for the project.
+
+### Project Files
+
+When you open the project in your code editor, you will see the following directories and files in the root directory:
+
+- `pages` directory: Inside it, you will have files `index.js`, `_app.js`, and another directory called - - - `api`. You only need to know about the `index.js` file that is the main entry point in your project.
+- `public` directory: This directory contains icons. You place your static files here to load later in the application.
+- `node_modules`: It’s another directory that contains all the node modules you are using in your application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+
+Before we move on to writing the code, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/covid-stats-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are some TailwindCSS configurations I have done specifically for this project. I have added some colors that you do not have by default with TailwindCSS and set some screen sizes.
+
+Now let’s start writing the code. I am going to do it in steps so you can follow along.
+
+### → STEP #1
+
+Open the `pages/index.js` file and remove all the existing code. After this, copy-paste the following code there:
+
+```js
+export default function Home() {
+ return (
+
+
+ COVID-19 Stats App
+
+
+ Track COVID-19 Spread Across the World
+
+
+ );
+}
+```
+
+It will create two headings for you with the text "COVID-19 Stats App" and "Track COVID-19 Spread Across the World". You can change it to anything you prefer.
+
+### → STEP #2
+
+Now let’s create an input field and search button. For this, copy the following code and paste it in `pages/index.js`:
+
+```js
+export default function Home() {
+ return (
+
+
+ COVID-19 Stats App
+
+
+ Track COVID-19 Spread Across the World
+
+
+
+
+
+
+
+
+ );
+}
+```
+
+This code is going to create an input field and button. I have also styled them a little bit using [TailwindCSS](<(https://tailwindcss.com/)>).
+
+### → STEP #3
+
+Let’s create some states to store the user input and the stats we will receive from the API. For this, copy-paste the following code in `pages/index.js`.
+
+```js
+import {useState} from 'react';
+
+export default function Home() {
+ const [country, setCountry] = useState(null);
+ const [stats, setStats] = useState(null);
+
+ return (
+
+
+ COVID-19 Stats App
+
+
+ Track COVID-19 Spread Across the World
+
+
+
+ setCountry(e.target.value)}
+ />
+
+
+
+
+ );
+}
+```
+
+You can see that I have added an `onChange` event handler to set the state value as soon as the user writes something in the input field.
+
+### → STEP #4
+
+Let’s integrate the API now. For this, first, create a `.env.local` file and paste the following in it:
+
+```sh
+NEXT_PUBLIC_RAPIDAPI_KEY=YOUR-RAPIDAPI-KEY
+```
+
+You need to replace `YOUR-RAPIDAPI-KEY` here with the API key you got when you subscribed to the [COVID-19 data API](https://rapidapi.com/Gramzivi/api/covid-19-data/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel). It is the value of `x-rapidapi-key` that you saved earlier.
+
+Now download and add `axios` to your project. For this, run the following command in the terminal:
+
+```sh
+npm install axios
+```
+
+Now import `axios` at the top of the `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+### → STEP #5
+
+We are going to use the `getLatestCountryDataByName` endpoint of the [COVID-19 data API](https://rapidapi.com/Gramzivi/api/covid-19-data/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) to get the country-specific COVID-19 stats. I am also going to use the code snippet of `(JavaScript) Axios` that [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides us.
+
+
+
+Create a file called `stats` in the `pages/api` directory and copy-paste the following code there:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ if (req.method === 'GET') {
+ const options = {
+ method: 'GET',
+ url: 'https://covid-19-data.p.rapidapi.com/country',
+ params: {name: req.query.country},
+ headers: {
+ 'x-rapidapi-host': 'covid-19-data.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ res.status(response.status);
+ });
+ } else {
+ res.status(400);
+ }
+}
+```
+
+Now let’s create a function in the `pages/index.js` file to request the `http://localhost:3000/api/stats` for the COVID-19 statistics. You can just copy and replace the following code in `pages/index.js` file:
+
+```js
+import axios from 'axios';
+import {useState} from 'react';
+
+export default function Home() {
+ const [country, setCountry] = useState(null);
+ const [stats, setStats] = useState(null);
+
+ /**
+ *
+ *
+ * Fetches COVID-19 Stats of a country
+ */
+ const fetchStats = async () => {
+ try {
+ const res = await axios.get(`http://localhost:3000/api/stats`, {
+ params: {country}
+ });
+ const {data} = res;
+ setStats(data[0]);
+ } catch (err) {
+ console.log(err);
+ }
+ };
+
+ return (
+
+
+ COVID-19 Stats App
+
+
+ Track COVID-19 Spread Across the World
+
+
+
+ setCountry(e.target.value)}
+ />
+
+
+ {stats && (
+
+
+
+
+
+ Country
+
+
+ Confirmed
+
+
+ Recovered
+
+
+ Deaths
+
+
+
+
+
+
+ {stats.country}
+
+
+ {stats.confirmed}
+
+
+ {stats.recovered}
+
+
+ {stats.deaths}
+
+
+
+
+
+ )}
+
+
+ );
+}
+```
+
+You can see that I have created a function, `fetchStats`, for getting the statistics. I am also creating a table to display and conditionally rendering it on the screen to display the statistics as soon as the user receives them.
+
+## Wrap Up
+
+This is it. We have successfully built a [COVID Stats App](https://rapidapi-example-covid-stats.vercel.app/) using the [COVID-19 data API](https://RapidAPI.com/Gramzivi/api/covid-19-data/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel). You can find the code of this web app [here](https://github.com/RapidAPI/DevRel-Examples-External/tree/main/covid-stats-app?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel). It will look something like this:
+
+
diff --git a/guides/posts/build-crypto-news-app/images/code-snippet.png b/guides/posts/build-crypto-news-app/images/code-snippet.png
new file mode 100644
index 00000000..e132a9b2
Binary files /dev/null and b/guides/posts/build-crypto-news-app/images/code-snippet.png differ
diff --git a/guides/posts/build-crypto-news-app/images/crypto-news-1.png b/guides/posts/build-crypto-news-app/images/crypto-news-1.png
new file mode 100644
index 00000000..b6f228b1
Binary files /dev/null and b/guides/posts/build-crypto-news-app/images/crypto-news-1.png differ
diff --git a/guides/posts/build-crypto-news-app/images/crypto-news-2.png b/guides/posts/build-crypto-news-app/images/crypto-news-2.png
new file mode 100644
index 00000000..3e103f23
Binary files /dev/null and b/guides/posts/build-crypto-news-app/images/crypto-news-2.png differ
diff --git a/guides/posts/build-crypto-news-app/images/initial.png b/guides/posts/build-crypto-news-app/images/initial.png
new file mode 100644
index 00000000..ea08a714
Binary files /dev/null and b/guides/posts/build-crypto-news-app/images/initial.png differ
diff --git a/guides/posts/build-crypto-news-app/images/subscribe.png b/guides/posts/build-crypto-news-app/images/subscribe.png
new file mode 100644
index 00000000..26bb460c
Binary files /dev/null and b/guides/posts/build-crypto-news-app/images/subscribe.png differ
diff --git a/guides/posts/build-crypto-news-app/post.md b/guides/posts/build-crypto-news-app/post.md
new file mode 100644
index 00000000..1b9ebefb
--- /dev/null
+++ b/guides/posts/build-crypto-news-app/post.md
@@ -0,0 +1,394 @@
+---
+title: How to build a Crypto News Next.js app using a Cryptocurrency API from RapidAPI Hub?
+description: Let's see how we can build a Crypto News app using a Cryptocurrency API.
+publishedDate: 2021-11-18T15:57:17.709Z
+lastModifiedDate: 2021-11-18T15:57:17.709Z
+authors:
+ - ahmadBilal
+category: apps
+tags:
+ - rapidapi
+ - cryptocurrency
+ - news
+ - app
+coverImage: ''
+draft: false
+---
+
+
+
+Today, public APIs provide a fast and convenient way to develop an application. Whether a small tool-based application or a big eCommerce portal, these APIs can be very serviceable.
+
+
+
+[RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) lets you choose from thousands of these public APIs for use in your projects. You can explore thousands of these on RapidAPI Hub and select one for your next project.
+
+Today, we will be building a web application that will display the latest news related to Cryptocurrency. It will be a single point of access to news from various sources. Let's build it.
+
+## Stack
+
+The stack for our app is going to be as follows. I am going to use [Next.js](https://nextjs.org/) for the client-side of our app and [TailwindCSS](https://tailwindcss.com/) for styling it.
+
+Even if you don’t know about Next.js, being familiar with React will be enough for this guide. Tailwind is a CSS framework that provides utility classes to use directly in the markup, saving time during the development process.
+
+## Choosing The API
+
+We need an API that will serve us Cryptocurrency related news from multiple sources. Let’s find an API that meets our requirements. Go to [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and [create an account](https://RapidAPI.com/auth/sign-up?referral=/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) if you haven’t already. Then, search for "Cryptocurrency" in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+You will see that we have a bunch of options for Cryptocurrency APIs. For our app, I will use [Investing - Cryptocurrency Markets API](https://rapidapi.com/apidojo/api/investing-cryptocurrency-markets/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel).
+
+To use this API, you need to subscribe to it first. You can do this by clicking on the **Subscribe to Test** button.
+
+
+
+Once you click the button, you will be redirected to the pricing page, which will show the subscription packages for the API. The free plan allows up to 500 requests per month. We are going to subscribe to the free plan for this guide.
+
+Once subscribed, you will be back on the **Endpoints** page. In the central section, you should see a field named `x-rapidapi-key`. Save its value. We will need it later to call the API.
+
+## Building The UI
+
+We can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your terminal.
+
+```sh
+npx create-next-app -e with-tailwindcss crypto-news-app
+```
+
+It will take some time to install the packages. After generating the boilerplate, you will see a folder with the name `crypto-news-app` has been created. Open this folder in your preferred code editor.
+
+### Project Files
+
+In our project folder, we will have the following folders and files. I will briefly break them down for you:
+
+- `pages` directory: It has the `index.js` file, which is the entry point of our app, basically the home page. It also has`_app.js` and another directory named `api` where we will store the requests to our API.
+- `public` directory: It holds assets. You can place your static files here to load later in the application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+
+I will be using a particular set of colors for this app. You can use colors of your preference, but if you are interested in mine, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/crypto-news-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are Tailwind configurations for the colors I will be using.
+
+With all that set, it's time to code the app. Let's jump right into it.
+
+### → STEP #1
+
+Open the `pages/index.js` file and remove all the existing code. Let's add the layout.
+
+```js
+export default function Home() {
+ return (
+
+
+ Crypto News App
+
+
+ Next.js app which provides information latest news about Crypto
+ using Cryptocurrency API.
+
+
+ );
+}
+```
+
+### → STEP #2
+
+We need a button that will trigger the API call and fetch the latest news from the API. On a side note, if you want to render the news whenever the page is loaded, you can use the `useRef` React hook. But since we are using the free plan, we will go for the button. Let's code it.
+
+```js
+export default function Home() {
+ return (
+
+
+ Crypto News App
+
+
+ Next.js app which provides information latest news about Crypto using
+ Cryptocurrency API
+
+
+
+
+
+
+
+ );
+}
+```
+
+This code is going to create the button. I have also styled and made them responsive using [TailwindCSS](<(https://tailwindcss.com/)>). At this point, this is what our app looks like:
+
+
+
+### → STEP #3
+
+Let’s create two states, `response` to hold the response from the API, and `page` to implement pagination in our news app.
+
+```js
+import { useState } from "react";
+
+export default function Home() {
+ const [page, setPage] = useState(1);
+ const [response, setResponse] = useState(null);
+
+ return (
+
+
+ Crypto News App
+
+
+ Next.js app which provides information latest news about Crypto using Cryptocurrency API
+
+
+
+
+
+
+ );
+}
+```
+
+We want the page state to be `1` when initialized.
+
+### → STEP #4
+
+Let’s integrate the API now. For this, first, create a `.env.local` file in the root directory of your project and paste the following into it:
+
+```sh
+NEXT_PUBLIC_RAPIDAPI_KEY=YOUR-RAPIDAPI-KEY
+```
+
+Remember the `x-rapidapi-key` I asked you to save earlier? You need to replace `YOUR-RAPIDAPI-KEY` with its value. You get the key after subscribing to the [Cryptocurrency API](https://rapidapi.com/apidojo/api/investing-cryptocurrency-markets/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel).
+
+Now download and add `axios` to your project. For this, run the following command in the terminal:
+
+```sh
+npm install axios
+```
+
+And import `axios` in `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+### → STEP #5
+
+The [Cryptocurrency API](https://rapidapi.com/apidojo/api/investing-cryptocurrency-markets/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides a bunch of very useful endpoints like markets, overviews, conversions, etc. You can see these endpoints on the left pane. For our news app, we are going to use the `get-news` endpoint.
+
+
+
+We will send a GET request to get the latest news related to Cryptocurrency. The optional parameter `page` will help us implement pagination in our app. For easy integration, [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) automatically generates snippets in multiple languages and options. We will copy the `(JavaScript) Axios` one, as you can see above.
+
+Next, I am going to create a file named `news.js` in the `pages/api` directory and use the code snippet as follows:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ const options = {
+ method: 'GET',
+ url: 'https://investing-cryptocurrency-markets.p.rapidapi.com/coins/get-news',
+ params: {
+ pair_ID: '1057391', // Setting Bitcoin as the general focus of the news.
+ page: req.query.page, // Query parameter sent from the client side.
+ time_utc_offset: '28800',
+ lang_ID: '1'
+ },
+ headers: {
+ 'x-rapidapi-host':
+ 'investing-cryptocurrency-markets.p.rapidapi.com',
+ 'x-rapidapi-key': NEXT_PUBLIC_RAPIDAPI_KEY
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ });
+}
+```
+
+We have specified the parameters. Our API call is ready. Now we need to create a function in the `pages/index.js` file to send the request from the client-side to our API at `http://localhost:3000/api/news`. You can just copy and replace the following code in `pages/index.js` file:
+
+```js
+import axios from 'axios';
+import {useState} from 'react';
+
+export default function Home() {
+ const [page, setPage] = useState(1);
+ const [response, setResponse] = useState(null);
+
+ // Getter function for getting news from the API.
+ const getNews = async () => {
+ try {
+ const res = await axios.get('api/news/', {
+ params: {page}
+ });
+ const {data} = res;
+ setResponse(data.data[0].screen_data.news);
+ } catch (error) {
+ console.error(error);
+ }
+ };
+
+ return (
+
+
+ Crypto News App
+
+
+ Next.js app which provides information latest news about Crypto
+ using Cryptocurrency API
+
+
+
+
+
+
+
+
+ );
+}
+```
+
+See the `getNews` function I have created to get the response from the API. We are binding this function to the button we created, using the `onClick` event handler. It sends the `page` state holding our page number as the parameter. Once the response is received, it is destructured. `data.data[0].screen_data.news` representing the news array, is stored in the `response` state.
+
+### → FINAL STEP
+
+In the final step, we will display the results and implement pagination. We have the news array in response `state`, which holds all the information we need, such as title, source, related image, and URL. We are going to do the following things:
+
+1. Use a map function to iterate through response, which holds an array of objects. I will be rendering the headline, provider name, related image, and URL for each news article. For their design, I used a grid.
+
+2. Hide the **Get latest news** button once we have the response.
+
+3. Show a **Load next page** button once we have the response. When clicked, it will increment the page state and make the API Call for that page.
+
+Our final code looks like this:
+
+```js
+import axios from 'axios';
+import {useState} from 'react';
+
+export default function Home() {
+ const [page, setPage] = useState(1);
+ const [response, setResponse] = useState(null);
+
+ const getNews = async () => {
+ try {
+ const res = await axios.get('api/news/', {
+ params: {page}
+ });
+ const {data} = res;
+ setResponse(data.data[0].screen_data.news);
+ } catch (error) {
+ console.error(error);
+ }
+ };
+
+ return (
+
+
+ Crypto News App
+
+
+ Next.js app which provides information latest news about Crypto
+ using Cryptocurrency API
+
+ );
+}
+```
+
+This is what our app looks like:
+
+
+
+
+
+## Wrap Up
+
+All done. Our [crypto news app](https://rapidapi-example-crypto-news-app.vercel.app/) is ready. Like this, you can utilize the remaining endpoints to create a full-fledged Cryptocurrency focused application. Find the code of this web app [here](https://github.com/RapidAPI/DevRel-Examples-External/tree/main/crypto-news-app).
diff --git a/guides/posts/build-currency-conversion-app/images/convert-endpoint.jpg b/guides/posts/build-currency-conversion-app/images/convert-endpoint.jpg
new file mode 100644
index 00000000..c739adcb
Binary files /dev/null and b/guides/posts/build-currency-conversion-app/images/convert-endpoint.jpg differ
diff --git a/guides/posts/build-currency-conversion-app/images/currency-conversion-app.png b/guides/posts/build-currency-conversion-app/images/currency-conversion-app.png
new file mode 100644
index 00000000..e7967401
Binary files /dev/null and b/guides/posts/build-currency-conversion-app/images/currency-conversion-app.png differ
diff --git a/guides/posts/build-currency-conversion-app/images/subscribe.jpg b/guides/posts/build-currency-conversion-app/images/subscribe.jpg
new file mode 100644
index 00000000..c4e77a49
Binary files /dev/null and b/guides/posts/build-currency-conversion-app/images/subscribe.jpg differ
diff --git a/guides/posts/build-currency-conversion-app/images/symbols-endpoint.jpg b/guides/posts/build-currency-conversion-app/images/symbols-endpoint.jpg
new file mode 100644
index 00000000..834e3694
Binary files /dev/null and b/guides/posts/build-currency-conversion-app/images/symbols-endpoint.jpg differ
diff --git a/guides/posts/build-currency-conversion-app/post.md b/guides/posts/build-currency-conversion-app/post.md
new file mode 100644
index 00000000..3b596f02
--- /dev/null
+++ b/guides/posts/build-currency-conversion-app/post.md
@@ -0,0 +1,437 @@
+---
+title: How to build a Currency Conversion App using Next.js and Currency Conversion API?
+description: Today, I am going to build a Currency Conversion app using Currency Conversion API from RapidAPI Hub and Next.js.
+publishedDate: 2021-10-25T16:19:49.280Z
+lastModifiedDate: 2021-10-25T16:19:49.280Z
+authors:
+ - saad
+category: apps
+tags:
+ - rapidapi
+ - currency-conversion-app
+coverImage: ''
+---
+
+
+
+There are thousands of APIs available on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) that you can use to build different products. [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides you with a broad category of APIs ranging from Finance to Payments. Today, I have decided to use a [Currency Conversion API](https://RapidAPI.com/principalapis/api/currency-conversion-and-exchange-rates/) from [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) to build a small application that will convert one concurrency to another. So without any further ado, let’s jump in.
+
+
+
+## Stack
+
+We need to choose a stack first to build this application. I have decided to go with the [Jamstack](https://jamstack.org/) since we will make a couple of API calls without having a proper backend.
+
+I am going to use [Next.js](https://nextjs.org/) for the client-side and [TailwindCSS](https://tailwindcss.com/) for the styling.
+
+If you don’t know about Next.js, it is a JavaScript framework built on top of React and provides features like server-side rendering, static site generation, etc. Tailwind is a CSS framework that provides utility classes to speed up the development process.
+
+## Choosing The API
+
+Let’s decide which API we are going to use. Go to [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and [create an account](https://RapidAPI.com/auth/sign-up?referral=/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) if you haven’t already and then search for "currency conversion" in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+I am using [Currency Conversion and Exchange Rates API](https://rapidapi.com/principalapis/api/currency-conversion-and-exchange-rates/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) by [Principal APIs](https://rapidapi.com/user/principalapis/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel).
+
+To use this API, you need to subscribe to it first. You can do this by clicking on **Subscribe to Test** button.
+
+
+
+Once you click the button, you will be redirected to another page where different available subscription packages will be shown. Let’s go with the free one for now.
+
+After all this, you will be redirected back to the original page. Here you will have a key `x-rapidapi-key`. Save it. It will be used later in the application.
+
+## Building The UI
+
+You can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your terminal. So let’s do that.
+
+```sh
+npx create-next-app -e with-tailwindcss currency-converter-app
+```
+
+This command is going to take a minute to set everything up. After it is finished generating the boilerplate, you will see a folder with the name `currency-converter-app` has been created. Open this folder in your preferred code editor. I am going to use [VSCode](https://code.visualstudio.com/) for the project.
+
+### Project Files
+
+When you open the project in your code editor, you will see the following directories and files in the root directory:
+
+- `pages` directory: Inside it, you will have files `index.js`, `_app.js`, and another directory called `api`. You only need to know about the - - - `index.js` file that is the main entry point in your project.
+- `public` directory: This directory contains icons. You place your static files here to load later in the application.
+- `node_modules`: It’s another directory that contains all the node modules you are using in your application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+
+Before we move on to writing the code, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/currency-converter-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are some TailwindCSS configurations I have done specifically for this project. I have added some colors that you do not have by default with TailwindCSS and also have set some screen sizes.
+
+Now let’s start writing the code. I am going to do it in steps so you can follow along.
+
+### → STEP #1
+
+Open the`pages/index.js` file and remove all the existing code. After this, copy-paste the following code there:
+
+```js
+export default function Home() {
+ return (
+
+
+ Currency Conversion App
+
+
+ Convert Different Concurrencies Quickly
+
+
+ );
+}
+```
+
+It is going to create two headings for you with the text "Currency Conversion App" and "Convert Different Concurrencies Quickly". You can change it to anything you prefer.
+
+### → STEP #2
+
+Now create a new folder called `components` in the root directory. Inside it, create a new file called `Input.js`. Now copy-paste the following code inside this file:
+
+```js
+const Input = ({dropdown, onChange, label, symbols}) => {
+ const arrOfSymbols = Object.keys(symbols);
+
+ return (
+
+ );
+};
+
+export default Input;
+```
+
+It is a separate component that I have created for adding input fields in my application. If the dropdown value is set to `true`, the `Input` component will render a dropdown list. The list is going to show the user different currency options.
+
+This component is receiving `symbols` object as a prop. The `symbols` object contains different currency exchange options. I have created a separate array for the keys of the `symbol` object. Later, I am mapping this array to generate the dropdown list.
+
+If the dropdown value is set to `false`, the Input component will render a text field that will only accept numbers.
+
+The component is also receiving `onChange` function, which I have set to both the dropdown and input text field’s `onChange` event. Now, if the value of input fields changes, the `onChange` function will trigger.
+
+### → STEP #3
+
+Let’s integrate the API now. For this, first, create a `.env.local` file and paste the following in it:
+
+```sh
+NEXT_PUBLIC_RAPIDAPI_KEY=YOUR-RAPIDAPI-KEY
+```
+
+You need to replace `YOUR-RAPIDAPI-KEY` here with the API key you got when you subscribed to the [Currency Conversion and Exchange Rates API](https://rapidapi.com/principalapis/api/currency-conversion-and-exchange-rates/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel). It is the value of `x-rapidapi-key` that you saved earlier.
+
+Now download and add `axios` in your project. For this, run the following command in the terminal:
+
+```sh
+npm install axios
+```
+
+Now import `axios` at the top of the `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+### → STEP #4
+
+There are more than 190+ countries in the world. Since almost everyone has a different currency, it was challenging to write down their three code currency symbols.
+
+The [Currency Conversion and Exchange Rates API](https://rapidapi.com/principalapis/api/currency-conversion-and-exchange-rates/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides an endpoint that can get you all these symbols as a response. I am going to this endpoint along with the code snippet [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides us.
+
+
+
+For this, create a `symbol.js` file in `pages/api` directory, and paste the following code in it:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ if (req.method === 'GET') {
+ const options = {
+ method: 'GET',
+ url: 'https://currency-conversion-and-exchange-rates.p.rapidapi.com/symbols',
+ headers: {
+ 'x-rapidapi-host':
+ 'currency-conversion-and-exchange-rates.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ });
+ } else {
+ res.status(400);
+ }
+}
+```
+
+Now copy-paste the following code, and put it inside the `pages/index.js` file:
+
+```js
+import {useState} from 'react';
+import axios from 'axios';
+import Input from '../components/Input';
+
+export default function Home({symbols}) {
+ const [convertFrom, setConvertFrom] = useState('ANG');
+ const [convertTo, setConvertTo] = useState('ANG');
+ const [amount, setAmount] = useState(null);
+
+ return (
+
+
+ Currency Conversion App
+
+
+ Convert Different Concurrencies Quickly
+
+
+
+
+
+
+
+
+ );
+}
+
+export async function getServerSideProps() {
+ const res = await axios.get('http://localhost:3000/api/symbol');
+ const {data} = res;
+ const {symbols} = data;
+
+ if (!symbols) {
+ return {
+ notFound: true
+ };
+ }
+
+ return {
+ props: {
+ symbols
+ }
+ };
+}
+```
+
+I am using server-side rendering so that all the currency symbols fetches before the application loads. I have also created different states to store the data.
+
+I have used the `Input` component that we created earlier to render different fields on the viewport. I am sending the `onChange` prop in the `Input` component that will get triggered when the value of the input field changes.
+
+### → STEP #5
+
+Now let’s convert the currency. For this, we are going to use a different endpoint of our API.
+
+
+
+For this, create a `convert.js` file in the `pages/api` directory and paste the following code there:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ if (req.method === 'GET') {
+ console.log(req.query.convertFrom);
+ const options = {
+ method: 'GET',
+ url: 'https://currency-conversion-and-exchange-rates.p.rapidapi.com/convert',
+ params: {
+ from: `${req.query.convertFrom}`,
+ to: `${req.query.convertTo}`,
+ amount: `${req.query.amount}`
+ },
+ headers: {
+ 'x-rapidapi-host':
+ 'currency-conversion-and-exchange-rates.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ });
+ } else {
+ res.status(400);
+ }
+}
+```
+
+Now open the `pages/index.js` file and copy-paste the following code there:
+
+```js
+import {useState} from 'react';
+import axios from 'axios';
+import Input from '../components/Input';
+
+export default function Home({symbols}) {
+ const [convertFrom, setConvertFrom] = useState('ANG');
+ const [convertTo, setConvertTo] = useState('ANG');
+ const [amount, setAmount] = useState(null);
+ const [convertedAmount, setConvertedAmount] = useState(null);
+
+ /**
+ *
+ *
+ * Fetch the converted amount
+ */
+ const convertCurrency = () => {
+ const options = {
+ method: 'GET',
+ url: 'http://localhost:3000/api/convert',
+ params: {convertFrom, convertTo, amount}
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ const {data} = response;
+ setConvertedAmount(Math.floor(data.result));
+ })
+ .catch(function (error) {
+ console.error(error);
+ });
+ };
+
+ return (
+
+ );
+}
+
+export async function getServerSideProps() {
+ const res = await axios.get('http://localhost:3000/api/symbol');
+ const {data} = res;
+ const {symbols} = data;
+
+ if (!symbols) {
+ return {
+ notFound: true
+ };
+ }
+
+ return {
+ props: {
+ symbols
+ }
+ };
+}
+```
+
+You can see that I have added another function called `convertCurrency` that will trigger when the user clicks on the `Convert` button. Inside the function, I am making an API call to my Next.js API `convert` route. This API route will request the [Currency Conversion and Exchange Rates API](https://rapidapi.com/principalapis/api/currency-conversion-and-exchange-rates/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and then send the response it receives to the client.
+
+I have created another state variable to store the converted amount. When the request is successful at client-side, the converted amount is stored to the `convertedAmount` state variable.
+
+When the `convertedAmount` changes from null to some other value, it will trigger a UI piece that will show the converted amount.
+
+## Wrap Up
+
+This is it. We have successfully built a [Currency Converter application](https://rapidapi-example-currency-conversion.vercel.app/) using the [Currency Conversion and Exchange Rates API](https://rapidapi.com/principalapis/api/currency-conversion-and-exchange-rates/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel). You can find the code of this web app [here](https://github.com/RapidAPI/DevRel-Examples-External/tree/main/currency-converter-app?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel). It will look something like this:
+
+
diff --git a/guides/posts/build-dictionary-app/images/code-snippet.png b/guides/posts/build-dictionary-app/images/code-snippet.png
new file mode 100644
index 00000000..cce14a7d
Binary files /dev/null and b/guides/posts/build-dictionary-app/images/code-snippet.png differ
diff --git a/guides/posts/build-dictionary-app/images/cover.png b/guides/posts/build-dictionary-app/images/cover.png
new file mode 100644
index 00000000..6865bdd8
Binary files /dev/null and b/guides/posts/build-dictionary-app/images/cover.png differ
diff --git a/guides/posts/build-dictionary-app/post.md b/guides/posts/build-dictionary-app/post.md
new file mode 100644
index 00000000..108a8b59
--- /dev/null
+++ b/guides/posts/build-dictionary-app/post.md
@@ -0,0 +1,358 @@
+---
+title: How to build a Dictionary app using Next.js and dictionary API?
+description: "Let's take a look at how you can build a dictionary application."
+publishedDate: 2021-11-12T20:22:52.607Z
+lastModifiedDate: 2021-11-12T20:22:52.607Z
+authors:
+ - saad
+category: apps
+tags:
+ - build-dictionary-app
+coverImage: ''
+---
+
+
+
+[RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides you with thousands of these public APIs that you can use in your apps. Many APIs on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) have free versions available, but you can also buy a premium version if the free version does not satisfy your need.
+
+
+
+Today, I am building a dictionary application that will take a word from the user and bring back its meaning using an API. So without any further ado, let’s jump in.
+
+## Stack
+
+We need to choose a stack first to build this application. I have decided to go with the [Jamstack](https://jamstack.org/).
+
+I am going to use [Next.js](https://nextjs.org/) for the client-side and [TailwindCSS](https://tailwindcss.com/) for the styling.
+
+If you don’t know about Next.js, it is a JavaScript framework built on top of React and provides features like server-side rendering, static site generation, etc. Tailwind is a CSS framework that provides utility classes to speed up the development process.
+
+## Choosing The API
+
+Let’s find an API that we can use to fetch the meaning of a word. Go to [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and [create an account](https://RapidAPI.com/auth/sign-up?referral=/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) if you haven’t already and then search for “dictionary apis” in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+You will see different search results related to all the available spell check APIs. For this piece, I am using [Dictionary by API-Ninjas](https://rapidapi.com/apininjas/api/dictionary-by-api-ninjas/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel).
+
+It is a free API, so you do not need to subscribe to it. Although, you will need your RapidAPI key. Go ahead and save the `x-rapidapi-key` so you can use it later.
+
+## Building The UI
+
+You can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your terminal. So let’s do that.
+
+```sh
+npx create-next-app -e with-tailwindcss dictionary-app
+```
+
+This command is going to take a minute to set everything up. After generating the boilerplate, you will see a folder with the name `dictionary-app` has been created. Open this folder in your preferred code editor. I will use [VSCode](https://code.visualstudio.com/) for this project.
+
+### Project Files
+
+When you open the project in your code editor, you will see the following directories and files in the root directory:
+
+- `pages` directory: Inside it, you will have files `index.js`, `_app.js`, and another directory called `api`. You only need to know about the `index.js` file that is the main entry point in your project.
+- `public` directory: This directory contains icons. You place your static files here to load later in the application.
+- `node_modules`: It’s another directory that contains all the node modules you are using in your application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+
+Before we move on to writing the code, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/dictionary-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are some TailwindCSS configurations I have done specifically for this project. I have added some colors that you do not have by default with TailwindCSS and set some screen sizes.
+
+Now let’s start writing the code. I am going to do it in steps so you can follow along.
+
+### → STEP #1
+
+Open the `pages/index.js` file and remove all the existing code. After this, copy-paste the following code there:
+
+```js
+export default function Home() {
+ return (
+
+
+ Dictionary App
+
+
+ Check Meaning of any word
+
+
+ );
+}
+```
+
+It will create two headings for you with the text “Dictionary App” and “Check Meaning of any word”. You can change it to anything you prefer.
+
+### → STEP #2
+
+Now let’s create an input field and a search button. The user will be able to type in the input field and use the search button to get the word’s meaning.
+
+For this, copy the following code and paste it in `pages/index.js`:
+
+```js
+export default function Home() {
+ return (
+
+
+ Dictionary App
+
+
+ Check Meaning of any word
+
+
+
+
+
+ );
+}
+```
+
+This code is going to create an input field and button. I have also styled them a little bit using [TailwindCSS](<(https://tailwindcss.com/)>).
+
+### → STEP #3
+
+Let’s create some states to store the user input and the meaning we will receive from the API. For this, copy-paste the following code in `pages/index.js`.
+
+```js
+import {useState} from 'react';
+
+export default function Home() {
+ const [word, setWord] = useState('');
+ const [wordInfo, setWordInfo] = useState(null);
+
+ return (
+
+
+ Dictionary App
+
+
+ Check Meaning of any word
+
+
+
+
+
+ );
+}
+```
+
+You can see that I have added an `onChange` event handler to set the state value as soon as the user writes something in the input field.
+
+### → STEP #4
+
+Let’s integrate the API now. For this, first, create a `.env.local` file and paste the following in it:
+
+```sh
+NEXT_PUBLIC_RAPIDAPI_KEY=YOUR-RAPIDAPI-KEY
+```
+
+You need to replace `YOUR-RAPIDAPI-KEY` with the API key I told you to save earlier in the article.
+
+Now download and add `axios` to your project. For this, run the following command in the terminal:
+
+```sh
+npm install axios
+```
+
+Now import `axios` at the top of the `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+### → STEP #5
+
+We are using the `/v1/dictionary` endpoint of the [Dictionary by API-Ninjas](https://rapidapi.com/apininjas/api/dictionary-by-api-ninjas/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel) to get the meaning of the word.
+
+I am also going to use the code snippet of `(JavaScript) Axios` that [RapidAPI Hub](https://rapidapi.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides us.
+
+
+
+Create a file called `info.js` in the `pages/api` directory and copy-paste the following code there:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ if (req.method === 'GET') {
+ const options = {
+ method: 'GET',
+ url: 'https://dictionary-by-api-ninjas.p.rapidapi.com/v1/dictionary',
+ params: {word: req.query.word},
+ headers: {
+ 'x-rapidapi-host': 'dictionary-by-api-ninjas.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ });
+ } else {
+ res.status(400);
+ }
+}
+```
+
+Now let’s create a function in the `pages/index.js` file to request the `/api/info` for the word meaning. You can just copy and replace the following code in `pages/index.js` file:
+
+```js
+import {useState} from 'react';
+import axios from 'axios';
+
+export default function Home() {
+ const [word, setWord] = useState('');
+ const [wordInfo, setWordInfo] = useState(null);
+
+ /**
+ *
+ *
+ * Fetch word information
+ */
+ const fetchInfo = async e => {
+ e.preventDefault();
+ try {
+ const res = await axios.get(`/api/info`, {
+ params: {word}
+ });
+ const {data} = res;
+ const {definition} = data;
+
+ // split the response string into an array using regex
+ const newDefinition = definition.split(/1. |2. | 3. /);
+ setWordInfo(newDefinition);
+ } catch (err) {
+ console.log(err);
+ }
+ };
+
+ return (
+
+ );
+}
+```
+
+You can see that I have created a function, `fetchInfo`, to get the meaning of the word. I have also used a little bit of regex to split the long string we receive as a response from the API into smaller strings.
+
+I have also created a piece of UI that is conditionally rendering on the screen.
+
+## Wrap Up
+
+That’s it. We have successfully built a [Dictionary App](https://rapidapi-example-dictionary-app.vercel.app/) using [Dictionary by API-Ninjas](https://rapidapi.com/apininjas/api/dictionary-by-api-ninjas/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel). You can find the source code [here](https://github.com/RapidAPI/DevRel-Examples-External/tree/main/dictionary-app) of this web app.
+
+In the end, it will look something like this:
+
+
diff --git a/guides/posts/build-graphql-app/images/graphql-app.png b/guides/posts/build-graphql-app/images/graphql-app.png
new file mode 100644
index 00000000..82797555
Binary files /dev/null and b/guides/posts/build-graphql-app/images/graphql-app.png differ
diff --git a/guides/posts/build-graphql-app/images/response.png b/guides/posts/build-graphql-app/images/response.png
new file mode 100644
index 00000000..653568db
Binary files /dev/null and b/guides/posts/build-graphql-app/images/response.png differ
diff --git a/guides/posts/build-graphql-app/images/subscribe.png b/guides/posts/build-graphql-app/images/subscribe.png
new file mode 100644
index 00000000..afc30456
Binary files /dev/null and b/guides/posts/build-graphql-app/images/subscribe.png differ
diff --git a/guides/posts/build-graphql-app/images/testing-endpoint.png b/guides/posts/build-graphql-app/images/testing-endpoint.png
new file mode 100644
index 00000000..97143757
Binary files /dev/null and b/guides/posts/build-graphql-app/images/testing-endpoint.png differ
diff --git a/guides/posts/build-graphql-app/post.md b/guides/posts/build-graphql-app/post.md
new file mode 100644
index 00000000..28ccf135
--- /dev/null
+++ b/guides/posts/build-graphql-app/post.md
@@ -0,0 +1,455 @@
+---
+title: How to build a Next.js app using a GraphQL API?
+description: Let's see how we can fetch and use data from GraphQL in a Next.js app.
+publishedDate: 2021-11-10T12:17:11.709Z
+lastModifiedDate: 2021-11-10T12:17:11.709Z
+authors:
+ - ahmadBilal
+category: apps
+tags:
+ - rapidapi
+ - graphql
+ - app
+ - nextjs
+coverImage: ''
+---
+
+
+
+GraphQL APIs allow developers to build highly performant production-ready apps. However, GraphQL APIs are a tad bit different from other types like REST in terms of implementation.
+
+
+
+[RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) lets you choose from thousands of public APIs for use in your projects. These also include GraphQL APIs, and you can explore thousands of them on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel).
+
+Today, we will be building a web application using the Next.js framework and fetching data from a GraphQL API. The app will allow us to get details like currency, flag, and capital of any given country. Let's build it.
+
+## Stack
+
+The stack for our app is going to be as follows. I am going to use [Next.js](https://nextjs.org/) for the client-side of our app and [TailwindCSS](https://tailwindcss.com/) for styling it.
+
+Even if you don’t know about Next.js, being familiar with React will be enough for this guide. Tailwind is a CSS framework that provides utility classes to use directly in the markup, saving time during the development process.
+
+## Choosing The API
+
+There are many GraphQL APIs available on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel). [Create an account](https://RapidAPI.com/auth/sign-up?referral=/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) on it if you haven’t already. Then, you can look for [GraphQL APIs](https://rapidapi.com/search/graphql?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+For our app, I will use [GeoDB Cities API](https://rapidapi.com/wirefreethought/api/geodb-cities-graphql/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel), which can serve the global city, region, and country data.
+
+To use this API, you need to subscribe to it first. You can do this by clicking on the **Subscribe to Test** button.
+
+
+
+Once you click the button, you will be redirected to the pricing page, which will show the subscription packages for the API. The free plan allows up to 1000 requests per day with restricted features, and we will use it for this guide.
+
+Once subscribed, you will be back on the **Endpoints** page. In the central section, you should see a field named `x-rapidapi-key`. Save its value. We will need it later to call the API.
+
+## Building The UI
+
+We can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your countryNameinal.
+
+```sh
+npx create-next-app -e with-tailwindcss graphql-app
+```
+
+It will take some time to install the packages. After generating the boilerplate, you will see a folder with the name `graphql-app` has been created. Open this folder in your preferred code editor.
+
+### Project Files
+
+In our project folder, we will have the following folders and files. I will briefly break them down for you:
+
+- `pages` directory: It has the `index.js` file, which is the entry point of our app, basically the home page. It also has`_app.js` and another directory named `api`, where we will store the requests to our API.
+- `public` directory: It holds assets. You can place your static files here to load later in the application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+
+I will be using a particular set of colors for this app. You can use colors of your preference, but if you are interested in mine, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/graphql-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are Tailwind configurations for the colors I will be using.
+
+With all that set, it's time to code the app. Let's jump right into it.
+
+### → STEP #1
+
+Open the `pages/index.js` file and remove all the existing code. Let's add the layout.
+
+```js
+export default function Home() {
+ return (
+
+
+ Example GraphQl App
+
+
+ Next.js app which provides information about a given country
+ using a GraphQl API.
+
+
+ );
+}
+```
+
+### → STEP #2
+
+We want to add the functionality of searching for any country. So we will need an input field where the query will go, and it will be submitted by clicking a button. Let's add both of these.
+
+```js
+export default function Home() {
+ return (
+
+
+ Example GraphQl App
+
+
+ Next.js app which provides information about a given country
+ using a GraphQl API.
+
+
+
+
+
+
+
+
+ );
+}
+```
+
+This code is going to create the search field and the submit button. I have also styled and made them responsive using [TailwindCSS](<(https://tailwindcss.com/)>).
+
+### → STEP #3
+
+Let’s create two states, `countryName` to store the search input and `response` to hold the response from the API.
+
+```js
+import {useState} from 'react';
+
+export default function Home() {
+ const [countryName, setCountryName] = useState(null);
+ const [response, setResponse] = useState(null);
+
+ return (
+
+
+ Example GraphQl App
+
+
+ Next.js app, which provides information about a given country
+ using a GraphQl API.
+
+
+
+ setCountryName(e.target.value)}
+ />
+
+
+
+
+
+
+ );
+}
+```
+
+I am using the `setCountryName(e.target.value)` to save the value of the input field in the state we just created, using the `onChange` event handler.
+
+### → STEP #4
+
+Let’s integrate the API now. For this, first, create a `.env.local` file in the root directory of your project and paste the following into it:
+
+```sh
+NEXT_PUBLIC_RAPIDAPI_KEY=YOUR-RAPIDAPI-KEY
+```
+
+Remember the `x-rapidapi-key` I asked you to save earlier? You need to replace `YOUR-RAPIDAPI-KEY` with its value in this file. You get the key after subscribing to the [GeoDB API](https://rapidapi.com/wirefreethought/api/geodb-cities-graphql/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel).
+
+Now download and add `axios` to your project. For this, run the usual command in the terminal:
+
+```sh
+npm install axios
+```
+
+And import `axios` in `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+### → STEP #5
+
+Before we use the API, we need to find out what kind of a query is required for our use case, fetching a given country’s details. Since it is based on GraphQL, you can go and check its [GraphQL schema here](https://wirefreethought.github.io/geodb-cities-graphql-schema-docs/). I will summarize it for you. We can find a country by passing the required country's name as `namePrefix` to the `Countries` endpoint. It provides an array of objects named `edges`, which holds information of all countries that match our input. Then, we can traverse through the object to get our required data.
+
+Our GraphQL query should look something like this:
+
+```graphql
+{
+ countries(namePrefix: "Ame") {
+ edges {
+ node {
+ name
+ capital
+ flagImageUri
+ currencyCodes
+ }
+ }
+ }
+}
+```
+
+Let's test it. On the [endpoints page](https://rapidapi.com/wirefreethought/api/geodb-cities-graphql/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel), scroll down to find a text section where you can enter your GraphQL query. Copy the GraphQL query we created above and paste it here.
+
+
+
+[RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) automatically generates snippets in multiple languages and options. Copy the `(JavaScript) Axios` one. Now, go ahead and click the `Test Endpoint` button. You will get the following response:
+
+
+
+Our query was successful, and we received the details for our input **"Ame"**. Now, it is time to integrate it into our app. I am going to create a file named `countries.js` in the `pages/api` directory and use the JavaScript (Axios) code snippet we copied above. as follows:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ const options = {
+ method: 'POST',
+ url: 'https://geodb-cities-graphql.p.rapidapi.com/',
+ headers: {
+ 'content-type': 'application/json',
+ 'x-rapidapi-host': 'geodb-cities-graphql.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY
+ },
+ data: {
+ query: `{
+ countries(namePrefix: "Ame") {
+ edges {
+ node {
+ name
+ capital
+ flagImageUri
+ currencyCodes
+ }
+ }
+ }
+ }`
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ res.status(response.status);
+ });
+}
+```
+
+Done. But do you see the problem here? It is the hard-coded input value. We need to pass it dynamically from the client side. However, in GraphQL queries, we can not simply replace "Ame" with our input value from the client. Instead, we will have to make the following changes to the `data` object:
+
+```js
+ data: {
+ query: `query getCountry($prefix: String!){
+ countries(namePrefix: $prefix) {
+ edges {
+ node {
+ name
+ capital
+ flagImageUri
+ currencyCodes
+ }
+ }
+ }
+ }`,
+ variables: {
+ prefix: req.query.countryName,
+ },
+ },
+```
+
+We create a query function `getCountry`, which takes a parameter `prefix` of type string. Then, inside the data object, we create another child named `variables` we can pass our client's input variable.
+
+Finally, our API call is ready. Now we need to write a function in the `pages/index.js` file to send the request from the client-side to our API at `http://localhost:3000/api/countries`. You can just copy and replace the following code in `pages/index.js` file:
+
+```js
+import axios from 'axios';
+import {useState} from 'react';
+
+export default function Home() {
+ const [countryName, setCountryName] = useState(null);
+ const [response, setResponse] = useState(null);
+
+ /**
+ * Fetches search results for the input country name
+ */
+ const getSearchResults = async () => {
+ try {
+ const res = await axios.get('api/countries/', {
+ params: {countryName}
+ });
+ const {data} = res;
+ setResponse(data.data.countries.edges);
+ } catch (error) {
+ console.error(error);
+ }
+ };
+
+ return (
+
+
+ Example GraphQl App
+
+
+ Next.js app which provides information about a given country
+ using a GraphQl API.
+
+
+
+ setCountryName(e.target.value)}
+ />
+
+
+
+
+
+
+ );
+}
+```
+
+See the `getSearchResults` function I have created to get the response. It sends the `countryName` state holding our text input as the parameter. Once the response is received, it is stored in the `response` state. We bind this function to the search button we created, using the `onClick` event handler.
+
+### → FINAL STEP
+
+In the final step, we will display the results. The API returns an object having all the details for our query. We are going to use a map function to iterate through this array of objects. I will be displaying the country's full name, capital, currency code, and image of its flag. For the design, I used a grid to organize cards for each country. This is our client-side code in its final form:
+
+```js
+import axios from "axios";
+import { useState } from "react";
+
+export default function Home() {
+ const [countryName, setCountryName] = useState(null);
+ const [response, setResponse] = useState(null);
+
+ const getSearchResults = async () => {
+ try {
+ const res = await axios.get("api/countries/", {
+ params: { countryName },
+ });
+ const { data } = res;
+ setResponse(data.data.countries.edges);
+ } catch (error) {
+ console.error(error);
+ }
+ };
+
+ return (
+
+
+ Example GraphQl App
+
+
+ Next.js app which provides information about a given country using a
+ GraphQl API.
+
+ );
+}
+```
+
+And this is what our app looks like:
+
+
+
+## Wrap Up
+
+All done. Our [GraphQL app](https://rapidapi-example-graphql-app.vercel.app/) is ready. Find the code of this web app [here](https://github.com/RapidAPI/DevRel-Examples-External/tree/main/graphql-app).
diff --git a/guides/posts/build-movie-details-app/images/code-snippet.png b/guides/posts/build-movie-details-app/images/code-snippet.png
new file mode 100644
index 00000000..3041d75a
Binary files /dev/null and b/guides/posts/build-movie-details-app/images/code-snippet.png differ
diff --git a/guides/posts/build-movie-details-app/images/cover.png b/guides/posts/build-movie-details-app/images/cover.png
new file mode 100644
index 00000000..174c5a95
Binary files /dev/null and b/guides/posts/build-movie-details-app/images/cover.png differ
diff --git a/guides/posts/build-movie-details-app/images/subscribe.png b/guides/posts/build-movie-details-app/images/subscribe.png
new file mode 100644
index 00000000..4b4960d8
Binary files /dev/null and b/guides/posts/build-movie-details-app/images/subscribe.png differ
diff --git a/guides/posts/build-movie-details-app/post.md b/guides/posts/build-movie-details-app/post.md
new file mode 100644
index 00000000..ffe290a0
--- /dev/null
+++ b/guides/posts/build-movie-details-app/post.md
@@ -0,0 +1,343 @@
+---
+title: How to build a Movie Details App using Next.js and IMDb API?
+description: 'There are a lot of different movie APIs available on the Internet. Instead of looking for them, you can visit RapidAPI Hub and search for "movies" to see all the available APIs.'
+publishedDate: 2021-11-08T18:18:51.569Z
+lastModifiedDate: 2021-11-08T18:18:51.569Z
+authors:
+ - saad
+category: apps
+tags:
+ - rapidapi
+ - movie-details-app
+coverImage: ''
+---
+
+
+
+There are a lot of different movie APIs available on the Internet. Instead of looking for them, you can visit [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and search for them. You will find a lot of different API options there.
+
+
+
+[RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides you with thousands of these public APIs that you can use in your apps. Many APIs on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) have free versions available, but you can also buy a premium version if the free version does not satisfy your need.
+
+Today, I am building a web application that will show the details of a movie like its runtime, the year it was released, poster, etc., to the user. So without any further ado, let’s jump in.
+
+## Stack
+
+We need to choose a stack first to build this application. I have decided to go with the [Jamstack](https://jamstack.org/).
+
+I am going to use [Next.js](https://nextjs.org/) for the client-side and [TailwindCSS](https://tailwindcss.com/) for the styling.
+
+If you don’t know about Next.js, it is a JavaScript framework built on top of React and provides features like server-side rendering, static site generation, etc. Tailwind is a CSS framework that provides utility classes to speed up the development process.
+
+## Choosing The API
+
+Let’s find an API that we can use to fetch the movie information. Go to [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and [create an account](https://RapidAPI.com/auth/sign-up?referral=/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) if you haven’t already and then search for “movies” in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+You will see different search results related to all the available movie APIs. For this piece, I am using [IMDb API](https://rapidapi.com/apidojo/api/imdb8/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) by [Api Dojo](https://rapidapi.com/user/apidojo?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel).
+
+To use this API, you need to subscribe to it first. You can do this by clicking on **Subscribe to Test** button.
+
+
+
+Once you click the button, you will be redirected to another page where different available subscription packages will be shown. Let’s go with the free one for now.
+
+After all this, you will be redirected back to the original page. Here you will have a key `x-rapidapi-key`. Save it. It will be used later in the application.
+
+## Building The UI
+
+You can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your terminal. So let’s do that.
+
+```sh
+npx create-next-app -e with-tailwindcss movie-details-app
+```
+
+This command is going to take a minute to set everything up. After generating the boilerplate, you will see a folder with the name `movie-details-app` has been created. Open this folder in your preferred code editor. I am going to use [VSCode](https://code.visualstudio.com/) for the project.
+
+### Project Files
+
+When you open the project in your code editor, you will see the following directories and files in the root directory:
+
+- `pages` directory: Inside it, you will have files `index.js`, `_app.js`, and another directory called `api`. You only need to know about the - - - `index.js` file that is the main entry point in your project.
+- `public` directory: This directory contains icons. You place your static files here to load later in the application.
+- `node_modules`: It’s another directory that contains all the node modules you are using in your application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+
+Before we move on to writing the code, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/movie-details-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are some TailwindCSS configurations I have done specifically for this project. I have added some colors that you do not have by default with TailwindCSS and set some screen sizes.
+
+Now create a file called `next.config.js` and paste all the content from [here](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/movie-details-app/next.config.js) to this file. We are doing this because the API will provide us with the image URLs. We will use the Next.js Image component to render the image, and this component needs a domain property in the `next.config.js` file to render an image from a URL.
+
+Now let’s start writing the code. I am going to do it in steps so you can follow along.
+
+### → STEP #1
+
+Open the `pages/index.js` file and remove all the existing code. After this, copy-paste the following code there:
+
+```js
+export default function Home() {
+ return (
+
+
+ Movie Details App
+
+
+ Get info about any movie
+
+
+ );
+}
+```
+
+It will create two headings for you with the text “Movie Details App” and “Get Info About Any Movie”. You can change it to anything you prefer.
+
+### → STEP #2
+
+Now let’s create an input field and search button. For this, copy the following code and paste it in `pages/index.js`:
+
+```js
+export default function Home() {
+ return (
+
+
+ Movie Details App
+
+
+ Get info about any movie
+
+
+
+
+
+
+
+
+ );
+}
+```
+
+This code is going to create an input field and button. I have also styled them a little bit using [TailwindCSS](<(https://tailwindcss.com/)>).
+
+### → STEP #3
+
+Let’s create some states to store the user input and the movie information we will receive from the API. For this, copy-paste the following code in `pages/index.js`.
+
+```js
+import {useState} from 'react';
+
+export default function Home() {
+ const [movieName, setMovieName] = useState(null);
+ const [movieInfo, setMovieInfo] = useState(null);
+
+ return (
+
+
+ Movie Details App
+
+
+ Get info about any movie
+
+
+
+ setMovieName(e.target.value)}
+ />
+
+
+
+
+ );
+}
+```
+
+You can see that I have added an `onChange` event handler to set the state value as soon as the user writes something in the input field.
+
+### → STEP #4
+
+Let’s integrate the API now. For this, first, create a `.env.local` file and paste the following in it:
+
+```sh
+NEXT_PUBLIC_RAPIDAPI_KEY=YOUR-RAPIDAPI-KEY
+```
+
+You need to replace `YOUR-RAPIDAPI-KEY` here with the API key you got when you subscribed to the [IMDb API](https://rapidapi.com/apidojo/api/imdb8/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel). It is the value of `x-rapidapi-key` that you saved earlier.
+
+Now download and add `axios` to your project. For this, run the following command in the terminal:
+
+```sh
+npm install axios
+```
+
+Now import `axios` at the top of the `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+### → STEP #5
+
+We are going to use the `title/find` endpoint of the [IMDb API](https://rapidapi.com/apidojo/api/imdb8/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) to get the details of the movie user want to see.
+
+I am also going to use the code snippet of `(JavaScript) Axios` that [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides us.
+
+
+
+Create a file called `movie` in the `pages/api` directory and copy-paste the following code there:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ if (req.method === 'GET') {
+ const options = {
+ method: 'GET',
+ url: 'https://imdb8.p.rapidapi.com/title/find',
+ params: {q: req.query.movieName},
+ headers: {
+ 'x-rapidapi-host': 'imdb8.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ res.status(response.status);
+ });
+ } else {
+ res.status(400);
+ }
+}
+```
+
+Now let’s create a function in the `pages/index.js` file to request the `http://localhost:3000/api/movie` for the movie details. You can just copy and replace the following code in `pages/index.js` file:
+
+```js
+import {useState} from 'react';
+import Image from 'next/image';
+import Link from 'next/link';
+import axios from 'axios';
+
+export default function Home() {
+ const [movieName, setMovieName] = useState(null);
+ const [movieInfo, setMovieInfo] = useState(null);
+
+ /**
+ *
+ *
+ * Fetch Movie Info from the IMDB
+ */
+ const fetchMovieInfo = async () => {
+ try {
+ const res = await axios.get(`http://localhost:3000/api/movie`, {
+ params: {movieName}
+ });
+ const {data} = res;
+ const {results} = data;
+ setMovieInfo(results[0]);
+ } catch (err) {
+ console.log(err);
+ }
+ };
+
+ return (
+
+ );
+}
+```
+
+You can see that I have created a function, `fetchMovieInfo`, for getting movie details. I have also created a piece of UI that is conditionally rendering on the screen. If the state variable, `movieInfo`, changes from null to the movie details object, it renders on the screen with data from the `movieInfo` object.
+
+## Wrap Up
+
+That’s it. We have successfully built a [Movie Details App](https://rapidapi-example-movie-details-app.vercel.app/) using [IMDb API](https://rapidapi.com/apidojo/api/imdb8/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel). You can find the source code [here](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/movie-details-app) of this web app.
+
+In the end, it will look something like this:
+
+
diff --git a/guides/posts/build-music-app/images/code-snippet.png b/guides/posts/build-music-app/images/code-snippet.png
new file mode 100644
index 00000000..05296740
Binary files /dev/null and b/guides/posts/build-music-app/images/code-snippet.png differ
diff --git a/guides/posts/build-music-app/images/music-app.png b/guides/posts/build-music-app/images/music-app.png
new file mode 100644
index 00000000..5038ba1d
Binary files /dev/null and b/guides/posts/build-music-app/images/music-app.png differ
diff --git a/guides/posts/build-music-app/images/subscribe.png b/guides/posts/build-music-app/images/subscribe.png
new file mode 100644
index 00000000..b93a9832
Binary files /dev/null and b/guides/posts/build-music-app/images/subscribe.png differ
diff --git a/guides/posts/build-music-app/post.md b/guides/posts/build-music-app/post.md
new file mode 100644
index 00000000..53f0270d
--- /dev/null
+++ b/guides/posts/build-music-app/post.md
@@ -0,0 +1,410 @@
+---
+title: How to build a Music App app using Shazam API and Next.js?
+description: Let's see how we can build a music app using Shazam API.
+publishedDate: 2021-11-04T15:57:17.709Z
+lastModifiedDate: 2021-11-04T15:57:17.709Z
+authors:
+ - ahmadBilal
+category: apps
+tags:
+ - rapidapi
+ - music
+ - shazam
+ - app
+coverImage: ''
+---
+
+
+
+Today, public APIs provide a fast and convenient way to develop an application. Whether a small tool-based application or a big eCommerce portal, these APIs can be very serviceable.
+
+
+
+[RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) lets you choose from thousands of these public APIs for use in your projects. You can explore thousands of these on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and select one for your next project.
+
+Today, we will be building a web application that is about music. We will see how we can implement features provided by the likes of Shazam in our own music app. Let's build it.
+
+## Stack
+
+The stack for our app is going to be as follows. I am going to use [Next.js](https://nextjs.org/) for the client-side of our app and [TailwindCSS](https://tailwindcss.com/) for styling it.
+
+Even if you don’t know about Next.js, being familiar with React will be enough for this guide. Tailwind is a CSS framework that provides utility classes to use directly in the markup, saving time during the development process.
+
+## Choosing The API
+
+Let’s find an API that provides Shazam-like features. Go to [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and [create an account](https://RapidAPI.com/auth/sign-up?referral=/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) if you haven’t already. Then, search for "Shazam" in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+You will see that we have a lot of options for Shazam-related APIs. For our app, I am going to use the most popular one, [Shazam API](https://rapidapi.com/apidojo/api/shazam/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel).
+
+To use this API, you need to subscribe to it first. You can do this by clicking on the **Subscribe to Test** button.
+
+
+
+Once you click the button, you will be redirected to the pricing page, which will show the subscription packages for the API. The free plan allows up to 500 requests per month. We are going to subscribe to the free plan for this guide.
+
+Once subscribed, you will be back on the **Endpoints** page. In the central section, you should see a field named `x-rapidapi-key`. Save its value. We will need it later to call the API.
+
+## Building The UI
+
+We can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your terminal.
+
+```sh
+npx create-next-app -e with-tailwindcss music-app
+```
+
+It will take some time to install the packages. After generating the boilerplate, you will see a folder with the name `music-app` has been created. Open this folder in your preferred code editor.
+
+### Project Files
+
+In our project folder, we will have the following folders and files. I will briefly break them down for you:
+
+- `pages` directory: It has the `index.js` file, which is the entry point of our app, basically the home page. It also has`_app.js` and another directory named `api` where we will store the requests to our API.
+- `public` directory: It holds assets. You can place your static files here to load later in the application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+
+I will be using a particular set of colors for this app. You can use colors of your preference, but if you are interested in mine, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/music-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are Tailwind configurations for the colors I will be using.
+
+With all that set, it's time to code the app. Let's jump right into it.
+
+### → STEP #1
+
+Open the `pages/index.js` file and remove all the existing code. Let's add the layout.
+
+```js
+export default function Home() {
+ return (
+
+
+ Music App
+
+
+ Discover music using the Shazam API from RapidAPI Hub.
+
+
+ );
+}
+```
+
+### → STEP #2
+
+We want to add the functionality of searching for any music or artists using Shazam. So we will need an input field where the query will go. The query will be submitted by clicking a button, so let's add both of these.
+
+```js
+export default function Home() {
+ return (
+
+
+ Music App
+
+
+ Discover music using the Shazam API from RapidAPI Hub.
+
+
+
+
+
+
+
+
+
+ );
+}
+```
+
+This code is going to create the search field and the submit button. I have also styled and made them responsive using [TailwindCSS](<(https://tailwindcss.com/)>).
+
+### → STEP #3
+
+Let’s create two states, `term` to store the user input and `response` to hold the response from the API.
+
+```js
+import {useState} from 'react';
+
+export default function Home() {
+ const [term, setTerm] = useState(null);
+ const [response, setResponse] = useState(null);
+
+ return (
+
+
+ Music App
+
+
+ Discover music using the Shazam API from RapidAPI Hub.
+
+
+
+ setTerm(e.target.value)} // Updating the state with input field value.
+ />
+
+
+
+
+
+
+ );
+}
+```
+
+I am using the `setTerm(e.target.value)` to save the value of the input field in the state we just created, using the `onChange` event handler.
+
+### → STEP #4
+
+Let’s integrate the API now. For this, first, create a `.env.local` file in the root directory of your project and paste the following into it:
+
+```sh
+NEXT_PUBLIC_RAPIDAPI_KEY=YOUR-RAPIDAPI-KEY
+```
+
+Remember the `x-rapidapi-key` I asked you to save earlier? You need to replace `YOUR-RAPIDAPI-KEY` with its value. You get the key after subscribing to the [Shazam API](https://rapidapi.com/apidojo/api/shazam/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel).
+
+Now download and add `axios` to your project. For this, run the following command in the terminal:
+
+```sh
+npm install axios
+```
+
+And import `axios` in `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+### → STEP #5
+
+The [Shazam API](https://rapidapi.com/apidojo/api/shazam/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides a bunch of very useful endpoints like list recommendations, song detection and global charts. You can see these endpoints on the left pane. For this guide, we are going to use the `search` endpoint.
+
+
+
+We will send a GET request to search for songs and artists that match the input term. For easy integration, [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) automatically generates snippets in multiple languages and options. We are going to copy the `(JavaScript) Axios` one as you can see above.
+
+Next, I am going to create a file named `search.js` in the `pages/api` directory and use the code snippet as follows:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ const options = {
+ method: 'GET',
+ url: 'https://shazam.p.rapidapi.com/search',
+ params: {
+ term: req.query.term,
+ locale: 'en-US',
+ offset: '0',
+ limit: '10'
+ }, // Parameters
+ headers: {
+ 'x-rapidapi-host': 'shazam.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY // Our API Key
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ });
+}
+```
+
+We have specified the parameters. Our API call is ready. Now we need to create a function in the `pages/index.js` file to send the request from the client-side to our API at `http://localhost:3000/api/search`. You can just copy and replace the following code in `pages/index.js` file:
+
+```js
+import axios from 'axios';
+import {useState} from 'react';
+
+export default function Home() {
+ const [term, setTerm] = useState(null);
+ const [response, setResponse] = useState(null);
+
+ /**
+ * Fetches search results for the input term
+ */
+ const getSearchResults = async () => {
+ try {
+ const res = await axios.get('api/search/', {
+ params: {term}
+ });
+ const {data} = res; // Destructuring response to extract data
+ setResponse(data.tracks.hits); // Setting the response state
+ } catch (error) {
+ console.log(error);
+ }
+ };
+
+ return (
+
+
+ Codestin Search App
+
+
+
+
+
+ Music App
+
+
+ Discover music using the Shazam API from RapidAPI Hub.
+
+
+
+ setTerm(e.target.value)}
+ />
+
+
+
+
+
+
+ );
+}
+```
+
+See the `getSearchResults` function I have created to get the response. It sends the `term` state holding our text input as the parameter. After receiving the response, it is stored in the `response` state. We are binding this function to the button we created, using the `onClick` event handler.
+
+### → FINAL STEP
+
+In the final step, we will display the results. The API returns an object having a number of songs that match our query. `data.tracks.hits` represents an array of objects, one object for each song. Each object has all the information you will need about the given song from its name to cover images.
+
+We are going to use a map function to iterate through this array of objects. I will be displaying the title, subtitle, Shazam URL, and cover image of each song. For the design, I used a grid to organize cards for each song. Our final code looks like this:
+
+```js
+import axios from 'axios';
+import {useState} from 'react';
+
+export default function Home() {
+ const [term, setTerm] = useState(null);
+ const [response, setResponse] = useState(null);
+
+ const getSearchResults = async () => {
+ try {
+ const res = await axios.get('api/search/', {
+ params: {term}
+ });
+ const {data} = res;
+ setResponse(data.tracks.hits);
+ } catch (error) {
+ console.log(error);
+ }
+ };
+
+ return (
+
+
+ Music App
+
+
+ Discover music using the Shazam API from RapidAPI Hub.
+
+ );
+}
+```
+
+This is what our app looks like:
+
+
+
+## Wrap Up
+
+All done. Our [music app](https://rapidapi-example-music-app.vercel.app/) is ready. Just like this, you can utilize the remaining endpoints to create a full-fledged music application. Find the code of this web app [here](https://github.com/RapidAPI/DevRel-Examples-External/tree/main/music-app).
diff --git a/guides/posts/build-news-app/images/javascript-axios.jpg b/guides/posts/build-news-app/images/javascript-axios.jpg
new file mode 100644
index 00000000..6f1bdcc2
Binary files /dev/null and b/guides/posts/build-news-app/images/javascript-axios.jpg differ
diff --git a/guides/posts/build-news-app/images/news-app.png b/guides/posts/build-news-app/images/news-app.png
new file mode 100644
index 00000000..63491411
Binary files /dev/null and b/guides/posts/build-news-app/images/news-app.png differ
diff --git a/guides/posts/build-news-app/images/subscribe.jpg b/guides/posts/build-news-app/images/subscribe.jpg
new file mode 100644
index 00000000..7f8c5859
Binary files /dev/null and b/guides/posts/build-news-app/images/subscribe.jpg differ
diff --git a/guides/posts/build-news-app/post.md b/guides/posts/build-news-app/post.md
new file mode 100644
index 00000000..53c4e752
--- /dev/null
+++ b/guides/posts/build-news-app/post.md
@@ -0,0 +1,245 @@
+---
+title: How to build a News app using Next.js and News API?
+description: There are a lot of APIs out there that you can use for your projects. But finding these APIs often becomes a hassle.
+publishedDate: 2021-10-21T16:18:42.178Z
+lastModifiedDate: 2021-10-21T16:18:42.178Z
+authors:
+ - saad
+category: apps
+tags:
+ - rapidapi
+ - news-app
+coverImage: ''
+---
+
+
+
+There are a lot of APIs out there that you can use for your projects. But finding these APIs often becomes a hassle. [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) is the world’s largest API hub and it can provide you with all the APIs you need. Anyone can look up any API they need in seconds and also monetize their APIs.
+
+
+
+Today, I have decided to use one of the APIs from [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and develop a small application using it. I am going to build a news application using an API from Microsoft.
+
+## Stack
+
+We need to choose a stack first to build this application. Since the application consumes an API and does not need a backend, let’s go with the [Jamstack](https://jamstack.org/).
+
+I am going to use [Next.js](https://nextjs.org/) for the client-side and [TailwindCSS](https://tailwindcss.com/) for the styling.
+
+If you don’t know about Next.js, it is a JavaScript framework built on top of React and provides features like server-side rendering, static site generation, etc. Tailwind is a CSS framework that provides utility classes to speed up the development process.
+
+## Choosing The API
+
+Let’s decide which API we are going to use. Go to [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and [create an account](https://RapidAPI.com/auth/sign-up?referral=/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) if you haven’t already and then search for "news" in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+I am going to use the [Bing News Search API](https://RapidAPI.com/microsoft-azure-org-microsoft-cognitive-services/api/bing-news-search1/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) by Microsoft Azure.
+
+To use this API, you need to subscribe to it first. You can do this by clicking on **Subscribe to Test** button.
+
+
+
+Once you click the button, you will be redirected to another page where different available subscription packages will be shown. Let’s go with the free one for now.
+
+After all this, you will be redirected back to the original page. Here you will have a key `x-rapidapi-key`. Save it. It will be used later in the application.
+
+## Building The UI
+
+You can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your terminal. So let’s do that.
+
+```sh
+npx create-next-app -e with-tailwindcss news-app
+```
+
+This command is going to take a minute to set everything up. After it is finished generating the boilerplate, you will see a folder with the name `news-app` has been created. Open this folder in your preferred code editor. I am going to use [VSCode](https://code.visualstudio.com/) for the project.
+
+### Project Files
+
+When you open the project in your code editor, you will see the following directories and files in the root directory:
+
+- `pages` directory: Inside it, you will have files `index.js`, `_app.js`, and another directory called `api`. You only need to know about the `index.js` file that is the main entry point in your project.
+- `public` directory: This directory contains icons. You place your static files here to load later in the application.
+- `node_modules`: It’s another directory that contains all the node modules you are using in your application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+
+Before we move on to writing the code, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/news-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are some TailwindCSS configurations I have done specifically for this project. I have added some colors that you do not have by default with TailwindCSS and also have set some screen sizes.
+
+Now let’s start writing the code. I am going to do it in steps so you can follow along.
+
+### → STEP #1
+
+Open the`pages/index.js` file and remove all the existing code. After this, copy-paste the following code there:
+
+```js
+export default function Home() {
+ return (
+
+
+
+ News Application
+
+
+
+
+ Get Top News Quickly
+
+
+
+ );
+}
+```
+
+It is going to create two headings for you with the text "News Application" and "Get Top News Quickly". You can change it to anything you prefer.
+
+### → STEP #2
+
+Let’s integrate the API now. For this, first create a `.env.local` file and paste the following in it:
+
+```sh
+NEXT_PUBLIC_BING_NEWS_API_KEY=YOUR-RAPIDAPI-KEY
+```
+
+You need to replace `YOUR-RAPIDAPI-KEY` here with the API key you got when you subscribed to the [Bing News Search](https://RapidAPI.com/microsoft-azure-org-microsoft-cognitive-services/api/bing-news-search1/) API. It is the value of `x-rapidapi-key` that you saved earlier.
+
+Now download and add `axios` in your project. For this, run the following command in the terminal:
+
+```sh
+npm install axios
+```
+
+Now import `axios` at the top of the `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+
+ RapidAPI Hub provides you with code snippets in different languages for
+ integrating the API.
+
+
+I am going to use the [(JavaScript) Axios](https://www.npmjs.com/package/axios) one.
+
+
+
+Now create a file with the name `news` inside the `pages/api` directory. This is going to create a REST API endpoint for you. The endpoint point will look like this:
+
+```sh
+http://localhost:3000/api/news
+```
+
+Now copy the following code from this file:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ if (req.method === 'GET') {
+ var options = {
+ method: 'GET',
+ url: 'https://bing-news-search1.p.rapidapi.com/news',
+ params: {safeSearch: 'Off', textFormat: 'Raw'},
+ headers: {
+ 'x-bingapis-sdk': 'true',
+ 'x-rapidapi-host': 'bing-news-search1.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_BING_NEWS_API_KEY
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ const {data} = response;
+ const {value} = data;
+
+ res.status(200).json(value);
+ })
+ .catch(function (error) {
+ console.error(error);
+ });
+ } else {
+ res.status(400);
+ }
+}
+```
+
+This code is making an API call to the Bing News API on the server and returns the results to the user. It is going to execute when the user makes an API call to the `user` endpoint I have mentioned above.
+
+Once you are done, copy the following code in the `pages/index.js` file:
+
+```js
+import Link from 'next/link';
+import axios from 'axios';
+
+export default function Home({value}) {
+ return (
+
+
+
+ News Application
+
+
+
+
+ Get Top News Quickly
+
+ {value.map(news => {
+ return (
+
+
+
{news.name}
+
+
+ );
+ })}
+
+
+ );
+}
+
+export async function getServerSideProps() {
+ const res = await axios.get('https://localhost:3000/api/news');
+ const {data: value} = res;
+
+ if (!value) {
+ return {
+ notFound: true
+ };
+ }
+
+ return {
+ props: {
+ value
+ }
+ };
+}
+```
+
+I am using the Next.js `getServerSideProps` function to fetch the data from the server. It is going to make my application server-side, and the user will never see a loading state.
+
+
+
+You can also use `getStaticProps` instead of `getServerSideProps` and the application will then fetch the data at build time.
+
+
+
+Once the data is fetched, I am converting the response to JSON and then using object destructuring to extract the property `value`.
+
+This `value` property is passed to my component as props. Since it is an array, I have mapped it to show all the data with a few lines of code. You will also see that the `div` that I am returning from the `map` function has a `Link` component. This component links different news containers to their news URLs.
+
+## Wrap Up
+
+This is it. We have successfully built a [news application](https://RapidAPI-example-news-app.vercel.app/) using the [Bing News Search](https://RapidAPI.com/microsoft-azure-org-microsoft-cognitive-services/api/bing-news-search1/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) API. You can find the code of this web app [here](https://github.com/RapidAPI/DevRel-Examples-External/tree/main/news-app). It will look something like this:
+
+
diff --git a/guides/posts/build-paraphrase-app/images/code-snippet.png b/guides/posts/build-paraphrase-app/images/code-snippet.png
new file mode 100644
index 00000000..e5d3e447
Binary files /dev/null and b/guides/posts/build-paraphrase-app/images/code-snippet.png differ
diff --git a/guides/posts/build-paraphrase-app/images/cover.png b/guides/posts/build-paraphrase-app/images/cover.png
new file mode 100644
index 00000000..bc8a485f
Binary files /dev/null and b/guides/posts/build-paraphrase-app/images/cover.png differ
diff --git a/guides/posts/build-paraphrase-app/images/subscribe.png b/guides/posts/build-paraphrase-app/images/subscribe.png
new file mode 100644
index 00000000..7cab0bef
Binary files /dev/null and b/guides/posts/build-paraphrase-app/images/subscribe.png differ
diff --git a/guides/posts/build-paraphrase-app/post.md b/guides/posts/build-paraphrase-app/post.md
new file mode 100644
index 00000000..b78346de
--- /dev/null
+++ b/guides/posts/build-paraphrase-app/post.md
@@ -0,0 +1,328 @@
+---
+title: How to build a Paraphrase App using Next.js and Paraphrase API?
+description: 'Every now and then we need to paraphrase some piece of content. There are a bunch of applications on the internet for this that you can use. You can also build your own application using any paraphrasing APIs.'
+publishedDate: 2021-11-08T18:18:51.569Z
+lastModifiedDate: 2021-11-08T18:18:51.569Z
+authors:
+ - saad
+category: apps
+tags:
+ - rapidapi
+ - paraphrase-app
+coverImage: ''
+---
+
+
+
+Every now and then we need to paraphrase some piece of content. There are a bunch of applications on the internet for this that you can use. You can also build your own application using any paraphrasing APIs. Instead of googling the appropriate API to use, you can look it up on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel).
+
+
+
+[RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides you with thousands of these public APIs that you can use in your apps. Many APIs on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) have free versions available, but you can also buy a premium version if the free version does not satisfy your need.
+
+Today, I am building a web application that will paraphrase a piece of content provided to it. So without any further ado, let’s jump in.
+
+## Stack
+
+We need to choose a stack first to build this application. I have decided to go with the [Jamstack](https://jamstack.org/).
+
+I am going to use [Next.js](https://nextjs.org/) for the client-side and [TailwindCSS](https://tailwindcss.com/) for the styling.
+
+If you don’t know about Next.js, it is a JavaScript framework built on top of React and provides features like server-side rendering, static site generation, etc. Tailwind is a CSS framework that provides utility classes to speed up the development process.
+
+## Choosing The API
+
+Let’s find an API that we can use to paraphrase some content. Go to [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and [create an account](https://RapidAPI.com/auth/sign-up?referral=/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) if you haven’t already and then search for “paraphrase” in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+You will see different search results related to all the available movie APIs. For this piece, I am using [Rewriter/Paraphraser/Text Changer (Multi-Language) API](https://rapidapi.com/smodin/api/rewriter-paraphraser-text-changer-multi-language?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel). To use this API, you need to subscribe to it first. You can do this by clicking on **Subscribe to Test** button.
+
+
+
+Once you click the button, you will be redirected to another page where different available subscription packages will be shown. Let’s go with the free one for now.
+
+After all this, you will be redirected back to the original page. Here you will have a key `x-rapidapi-key`. Save it. It will be used later in the application.
+
+## Building The UI
+
+You can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your terminal. So let’s do that.
+
+```sh
+npx create-next-app -e with-tailwindcss paraphrase-app
+```
+
+This command is going to take a minute to set everything up. After generating the boilerplate, you will see a folder with the name `paraphrase-app` has been created. Open this folder in your preferred code editor. I am going to use [VSCode](https://code.visualstudio.com/) for the project.
+
+### Project Files
+
+When you open the project in your code editor, you will see the following directories and files in the root directory:
+
+- `pages` directory: Inside it, you will have files `index.js`, `_app.js`, and another directory called `api`. You only need to know about the - - - `index.js` file that is the main entry point in your project.
+- `public` directory: This directory contains icons. You place your static files here to load later in the application.
+- `node_modules`: It’s another directory that contains all the node modules you are using in your application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+
+Before we move on to writing the code, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/paraphrase-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are some TailwindCSS configurations I have done specifically for this project. I have added some colors that you do not have by default with TailwindCSS and set some screen sizes.
+
+Now let’s start writing the code. I am going to do it in steps so you can follow along.
+
+### → STEP #1
+
+Open the `pages/index.js` file and remove all the existing code. After this, copy-paste the following code there:
+
+```js
+export default function Home() {
+ return (
+
+
+ Paraphrase App
+
+
+ Paraphrase any piece of content easily
+
+
+ );
+}
+```
+
+It will create two headings for you with the text “Paraphrase App” and “Paraphrase any piece of content easily”. You can change it to anything you prefer.
+
+### → STEP #2
+
+Now let’s create two text areas, one for user content and the other for paraphrased content, and the paraphrase button. For this, copy the following code and paste it in `pages/index.js`:
+
+```js
+export default function Home() {
+ return (
+
+
+ Paraphrase App
+
+
+ Paraphrase any piece of content easily
+
+
+
+
+
+
+
+
+
+ );
+}
+```
+
+This code is going to create two text areas and a button. I have also styled them a little bit using [TailwindCSS](<(https://tailwindcss.com/)>).
+
+### → STEP #3
+
+Let’s create some states to store the user content and the paraphrased content that we will receive from the API. For this, copy-paste the following code in `pages/index.js`.
+
+```js
+import {useState} from 'react';
+
+export default function Home() {
+ const [content, setContent] = useState(null);
+ const [paraphrased, setParaphrased] = useState('');
+
+ return (
+
+
+ Paraphrase App
+
+
+ Paraphrase any piece of content easily
+
+
+
+
+ );
+}
+```
+
+You can see that I have added an `onChange` event handler to set the state value as soon as the user writes something in the input field. I am also setting the value of the text area that will show paraphrase content to the state variable `paraphrased`. It is going to show the paraphrased content when this state variable will update.
+
+### → STEP #4
+
+Let’s integrate the API now. For this, first, create a `.env.local` file and paste the following in it:
+
+```sh
+NEXT_PUBLIC_RAPIDAPI_KEY=YOUR-RAPIDAPI-KEY
+```
+
+You need to replace `YOUR-RAPIDAPI-KEY` here with the API key you got when you subscribed to the [Rewriter/Paraphraser/Text Changer (Multi-Language) API](https://rapidapi.com/smodin/api/rewriter-paraphraser-text-changer-multi-language?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel). It is the value of `x-rapidapi-key` that you saved earlier.
+
+Now download and add `axios` to your project. For this, run the following command in the terminal:
+
+```sh
+npm install axios
+```
+
+Now import `axios` at the top of the `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+### → STEP #5
+
+We are going to use the `Rewriter Endpoint` endpoint of the [Rewriter/Paraphraser/Text Changer (Multi-Language) API](https://rapidapi.com/smodin/api/rewriter-paraphraser-text-changer-multi-language?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel) to get the paraphrased content.
+
+I am also going to use the code snippet of `(JavaScript) Axios` that [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides us.
+
+
+
+Create a file called `paraphrase.js` in the `pages/api` directory and copy-paste the following code there:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ if (req.method === 'GET') {
+ const options = {
+ method: 'POST',
+ url: 'https://rewriter-paraphraser-text-changer-multi-language.p.rapidapi.com/rewrite',
+ headers: {
+ 'content-type': 'application/json',
+ 'x-rapidapi-host':
+ 'rewriter-paraphraser-text-changer-multi-language.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY
+ },
+ data: {language: 'en', strength: 3, text: req.query.content}
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ res.status(response.status);
+ });
+ } else {
+ res.status(400);
+ }
+}
+```
+
+Now let’s create a function in the `pages/index.js` file to request the `/api/paraphrase` to get the paraphrased content. You can just copy and replace the following code in `pages/index.js` file:
+
+```js
+import {useState} from 'react';
+import axios from 'axios';
+
+export default function Home() {
+ const [content, setContent] = useState(null);
+ const [paraphrased, setParaphrased] = useState('');
+
+ /**
+ *
+ *
+ * Fetch the paraphrased content
+ */
+ const fetchParaPhrasedText = async () => {
+ try {
+ setParaphrased(`Generating paraphrased article...`);
+ const res = await axios.get(`/api/paraphrase`, {
+ params: {content}
+ });
+ const {data} = res;
+ setParaphrased(data.rewrite);
+ } catch (err) {
+ setParaphrased(`Couldn't generate paraphrased content.`);
+ console.log(err);
+ }
+ };
+
+ return (
+
+ );
+}
+```
+
+You can see that I have created a function, `fetchParaPhrasedText`, for getting paraphrased content. It will fetch the content from the API and then show it to the user in the paraphrased text area.
+
+## Wrap Up
+
+That’s it. We have successfully built a [Paraphrase App](https://rapidapi-example-paraphrase-app.vercel.app/) using [Rewriter/Paraphraser/Text Changer (Multi-Language) API](https://rapidapi.com/smodin/api/rewriter-paraphraser-text-changer-multi-language?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel). You can find the source code [here](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/paraphrase-app) of this web app.
+
+In the end, it will look something like this:
+
+
diff --git a/guides/posts/build-qrcode-app/images/code-snippet.png b/guides/posts/build-qrcode-app/images/code-snippet.png
new file mode 100644
index 00000000..ebae42f9
Binary files /dev/null and b/guides/posts/build-qrcode-app/images/code-snippet.png differ
diff --git a/guides/posts/build-qrcode-app/images/qrcode-generator-app.png b/guides/posts/build-qrcode-app/images/qrcode-generator-app.png
new file mode 100644
index 00000000..ec60e253
Binary files /dev/null and b/guides/posts/build-qrcode-app/images/qrcode-generator-app.png differ
diff --git a/guides/posts/build-qrcode-app/images/subscribe.png b/guides/posts/build-qrcode-app/images/subscribe.png
new file mode 100644
index 00000000..24c2fc87
Binary files /dev/null and b/guides/posts/build-qrcode-app/images/subscribe.png differ
diff --git a/guides/posts/build-qrcode-app/post.md b/guides/posts/build-qrcode-app/post.md
new file mode 100644
index 00000000..7bbb32d8
--- /dev/null
+++ b/guides/posts/build-qrcode-app/post.md
@@ -0,0 +1,373 @@
+---
+title: How to build a QR Code Generator app using Next.js and a QR Code API?
+description: Let's build an app that will generate a QR code for a given input.
+publishedDate: 2021-11-04T15:57:17.709Z
+lastModifiedDate: 2021-11-04T15:57:17.709Z
+authors:
+ - ahmadBilal
+category: apps
+tags:
+ - rapidapi
+ - qrcode
+ - app
+coverImage: ''
+---
+
+
+
+Today, public APIs provide a fast and convenient way to develop an application. Whether a small tool-based application or a big eCommerce portal, these APIs can be very serviceable.
+
+
+
+[RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) lets you choose from thousands of these public APIs for use in your projects. You can explore thousands of these on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and select one for your next project.
+
+In this guide, we will be building an application that generates QR Codes for any text input. QR codes allow you to share information quickly and seamlessly. They are used everywhere, from payment portals to social apps like Snapchat and WhatsApp. Let's build our own today.
+
+## Stack
+
+Let's decide the stack for our app. I am going to use [Next.js](https://nextjs.org/) for the client-side of our app and [TailwindCSS](https://tailwindcss.com/) for styling it.
+
+Even if you don’t know about Next.js, being familiar with React will be enough for this guide. Tailwind is a CSS framework that provides utility classes to use directly in the markup, saving time during the development process.
+
+## Choosing The API
+
+Let’s find an API that we can send input to and get a QR Code as a response. Go to [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and [create an account](https://RapidAPI.com/auth/sign-up?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) if you haven’t already. Then, search for "QR Code" in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+You will see that we have a lot of options for QR Code related APIs. For our app, I am going to use [qrcode utils API](https://rapidapi.com/digicatech/api/qrcodeutils/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel).
+
+To use this API, you need to subscribe to it first. You can do this by clicking on **Subscribe to Test** button.
+
+
+
+Once you click the button, you will be redirected to the pricing page to see the subscription packages for the API. We are going to subscribe to the free plan for this guide.
+
+Once subscribed, you will be back on the **Endpoints** page. In the central section, you should see a field named `x-rapidapi-key`. Save its value. We will need it later to call the API.
+
+## Building The UI
+
+We can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your terminal.
+
+```sh
+npx create-next-app -e with-tailwindcss qrcode-generator-app
+```
+
+It will take some time to install the packages. After generating the boilerplate, you will see a folder with the name `qrcode-generator-app` has been created. Open this folder in your preferred code editor.
+
+### Project Files
+
+In our project folder, we will have the following folders and files. I will briefly break them down for you:
+
+- `pages` directory: It has the `index.js` file, which is the entry point of our app, basically the home page. It also has`_app.js` and another directory named `api` where we will store the requests to our API.
+- `public` directory: It holds assets. You can place your static files here to load later in the application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+
+I will be using a particular set of colors for this app. You can use colors of your preference, but if you are interested in mine, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/qrcode-generator-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are Tailwind configurations for the colors I will be using.
+
+With all that set, it's time to code the app. Let's jump right into it.
+
+### → STEP #1
+
+Open the `pages/index.js` file and remove all the existing code. Let's add the layout.
+
+```js
+export default function Home() {
+ return (
+
+
+ QR Code Generator
+
+
+ Generate a QR Code for sharing your content.
+
+
+ );
+}
+```
+
+### → STEP #2
+
+The next thing we need is an input field where the text will go. There should also be a button to generate the QR Code. Let's add these.
+
+```js
+export default function Home() {
+ return (
+
+
+ QR Code Generator
+
+
+ Generate a QR Code for sharing your content.
+
+
+
+
+ );
+}
+```
+
+This code is going to create an input field and a button. I have also styled them a little bit using [TailwindCSS](<(https://tailwindcss.com/)>).
+
+### → STEP #3
+
+Let’s create some states to store the user input and the response from the API.
+
+```js
+import {useState} from 'react';
+
+export default function Home() {
+ // States
+ const [input, setInput] = useState(null);
+ const [response, setResponse] = useState(null);
+ return (
+
+
+ QR Code Generator
+
+
+ Generate a QR Code for sharing your content.
+
+ setInput(e.target.value)}
+ >
+
+
+ );
+}
+```
+
+Also, I am using the `setInput(e.target.value)` to save the value of the input field in the state we just created, using the `onChange` event handler.
+
+### → STEP #4
+
+Let’s integrate the API now. For this, first, create a `.env.local` file and paste the following in it:
+
+```sh
+NEXT_PUBLIC_RAPIDAPI_KEY=YOUR-RAPIDAPI-KEY
+```
+
+Remember the `x-rapidapi-key` I asked you to save earlier? You need to replace `YOUR-RAPIDAPI-KEY` with its value. You get the key after subscribing to the [qrcode utils API](https://rapidapi.com/digicatech/api/qrcodeutils/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel).
+
+Now download and add `axios` to your project. For this, run the following command in the terminal:
+
+```sh
+npm install axios
+```
+
+And import `axios` in `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+### → STEP #5
+
+We are going to send a GET request to get the QR Code for our input. For easy integration, [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) automatically generates snippets in multiple languages and options. We are going to use the `(JavaScript) Axios` one.
+
+
+
+Next, I am going to create a file named `qrcode.js` in the `pages/api` directory and use the code snippet there as follows:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ if (req.method === 'GET') {
+ const options = {
+ method: 'GET',
+ url: 'https://qrcodeutils.p.rapidapi.com/qrcodefree',
+ params: {
+ text: req.query.input,
+ validate: 'true',
+ size: '150',
+ type: 'svg', // type: svg, png etc
+ level: 'M' // level of validation
+ },
+ headers: {
+ 'x-rapidapi-host': 'qrcodeutils.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ });
+ } else {
+ res.status(400);
+ }
+}
+```
+
+We have also specified the parameters. Our API call is ready. Let’s create a function in the `pages/index.js` file to send the request from the client-side to our API at `http://localhost:3000/api/qrcode` for the QR code. You can just copy and replace the following code in `pages/index.js` file:
+
+```js
+import axios from 'axios';
+import {useState} from 'react';
+
+export default function Home() {
+ const [input, setInput] = useState(null);
+ const [response, setResponse] = useState(null);
+
+ /**
+ * Fetches QR Code of the text input
+ */
+ const getQrcode = async () => {
+ try {
+ const res = await axios.get('api/qrcode/', {
+ params: {input}
+ });
+ setResponse(res.data);
+ } catch (error) {
+ console.log(error);
+ }
+ };
+
+ return (
+
+
+ Codestin Search App
+
+
+
+
+ QR Code Generator
+
+
+ Generate a QR Code for sharing your content.
+
+ setInput(e.target.value)}
+ >
+
+
+ );
+}
+```
+
+See the `getQrcode` function I have created to get the response. It sends the `input` state holding our text input as the parameter. After receiving the response, it is stored in the `response` state. It is time for the final step, where we will display the QR Code.
+
+### → FINAL STEP
+
+The API returns the QR Code in SVG format. To display it directly, install a library `react-inlinesvg` by running the command:
+
+```sh
+npm install react-inlinesvg
+```
+
+and import it:
+
+```js
+import SVG from 'react-inlinesvg';
+```
+
+Finally, we can render the QR Code SVG by checking the `response` state.
+
+```js
+import axios from 'axios';
+import {useState} from 'react';
+import SVG from 'react-inlinesvg';
+
+export default function Home() {
+ const [input, setInput] = useState(null);
+ const [response, setResponse] = useState(null);
+
+ const getQrcode = async () => {
+ try {
+ const res = await axios.get('api/qrcode/', {
+ params: {input}
+ });
+
+ setResponse(res.data);
+ } catch (error) {
+ console.log(error);
+ }
+ };
+ // Standard snippet to download the QR Code svg
+ const downloadQrcode = () => {
+ const url = window.URL.createObjectURL(new Blob([response]));
+ const urlObject = document.createElement('a');
+ urlObject.href = url;
+ urlObject.setAttribute('download', 'file.svg');
+ document.body.appendChild(urlObject);
+ urlObject.click();
+ };
+
+ return (
+
+ );
+}
+```
+
+The library takes the response and renders the SVG for us. I also used a snippet in the `downloadQrcode` function, which does what it says, allows users to download the QR Code.
+
+## Wrap Up
+
+All done. We have successfully built a QR Code Generator app. You can find the code of this web app [here](https://github.com/RapidAPI/DevRel-Examples-External/tree/main/qrcode-generator-app). This is what it looks like:
+
+
diff --git a/guides/posts/build-spell-checker-app/images/cover.png b/guides/posts/build-spell-checker-app/images/cover.png
new file mode 100644
index 00000000..3857c690
Binary files /dev/null and b/guides/posts/build-spell-checker-app/images/cover.png differ
diff --git a/guides/posts/build-spell-checker-app/images/subscribe.png b/guides/posts/build-spell-checker-app/images/subscribe.png
new file mode 100644
index 00000000..b2e1dcb5
Binary files /dev/null and b/guides/posts/build-spell-checker-app/images/subscribe.png differ
diff --git a/guides/posts/build-spell-checker-app/post.md b/guides/posts/build-spell-checker-app/post.md
new file mode 100644
index 00000000..ce40143a
--- /dev/null
+++ b/guides/posts/build-spell-checker-app/post.md
@@ -0,0 +1,356 @@
+---
+title: How to build a Spell Checker App Using Next.js and JSpell Checker API?
+description: 'You often have to write detailed documents at work. They can be proposals, guides, some documentation, etc. You need to ensure that you are not making any spelling errors in such important documents.'
+publishedDate: 2021-11-08T18:18:51.569Z
+lastModifiedDate: 2021-11-08T18:18:51.569Z
+authors:
+ - saad
+category: apps
+tags:
+ - rapidapi
+ - spell-checker-app
+coverImage: ''
+---
+
+
+
+You often have to write detailed documents at work. They can be proposals, guides, some documentation, etc. You need to ensure that you are not making any spelling errors in such important documents. If you are a developer like me, you can create your own web application for this task using any API from the Internet.
+
+
+
+[RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides you with thousands of these public APIs that you can use in your apps. Many APIs on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) have free versions available, but you can also buy a premium version if the free version does not satisfy your need.
+
+Today, I am building a spell checker application that will take some content and show you if you have made any spelling mistakes or not. So without any further ado, let’s jump in!
+
+## Stack
+
+We need to choose a stack first to build this application. I have decided to go with the [Jamstack](https://jamstack.org/).
+
+I am going to use [Next.js](https://nextjs.org/) for the client-side and [TailwindCSS](https://tailwindcss.com/) for the styling.
+
+If you don’t know about Next.js, it is a JavaScript framework built on top of React and provides features like server-side rendering, static site generation, etc. Tailwind is a CSS framework that provides utility classes to speed up the development process.
+
+## Choosing The API
+
+Let’s find an API that we can use to get the spelling information. Go to [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and [create an account](https://RapidAPI.com/auth/sign-up?referral=/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) if you haven’t already and then search for “spell checker” in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+You will see different search results related to all the available spell check APIs. For this piece, I am using [JSpell Checker API](https://rapidapi.com/page-scholar-inc-page-scholar-inc-default/api/jspell-checker/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel).
+
+To use this API, you need to subscribe to it first. You can do this by clicking on **Subscribe to Test** button.
+
+
+
+Once you click the button, you will be redirected to another page where different available subscription packages will be shown. Let’s go with the free one for now.
+
+After all this, you will be redirected back to the original page. Here you will have a key `x-rapidapi-key`. Save it. It will be used later in the application.
+
+## Building The UI
+
+You can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your terminal. So let’s do that.
+
+```sh
+npx create-next-app -e with-tailwindcss spell-checker-app
+```
+
+This command is going to take a minute to set everything up. After generating the boilerplate, you will see a folder with the name `spell-checker-app` has been created. Open this folder in your preferred code editor. I am going to use [VSCode](https://code.visualstudio.com/) for the project.
+
+### Project Files
+
+When you open the project in your code editor, you will see the following directories and files in the root directory:
+
+- `pages` directory: Inside it, you will have files `index.js`, `_app.js`, and another directory called `api`. You only need to know about the - - - `index.js` file that is the main entry point in your project.
+- `public` directory: This directory contains icons. You place your static files here to load later in the application.
+- `node_modules`: It’s another directory that contains all the node modules you are using in your application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+
+Before we move on to writing the code, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/spell-checker-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are some TailwindCSS configurations I have done specifically for this project. I have added some colors that you do not have by default with TailwindCSS and set some screen sizes.
+
+Now let’s start writing the code. I am going to do it in steps so you can follow along.
+
+### → STEP #1
+
+Open the `pages/index.js` file and remove all the existing code. After this, copy-paste the following code there:
+
+```js
+export default function Home() {
+ return (
+
+
+ Spell Checker App
+
+
+ Quickly See All Your Spelling Errors
+
+
+ );
+}
+```
+
+It will create two headings for you with the text “Spell Checker App” and “Quickly See All Your Spelling Errors”. You can change it to anything you prefer.
+
+### → STEP #2
+
+Now let’s create a text area field and check the button. The text area will be the place where the user will paste or write content. The check button will allow the user to see if they have made any spelling mistakes or not.
+
+For this, copy the following code and paste it in `pages/index.js`:
+
+```js
+export default function Home() {
+ return (
+
+
+ Spell Checker App
+
+
+ Quickly See All Your Spelling Errors
+
+
+
+
+
+
+
+
+ );
+}
+```
+
+This code is going to create an input field and button. I have also styled them a little bit using [TailwindCSS](<(https://tailwindcss.com/)>).
+
+### → STEP #3
+
+Let’s create some states to store the user input and the spelling error information that we will receive from the API. We also need to create a flag as a state variable that will be set to true if there is a spelling mistake and false if there is not.
+
+For this, copy-paste the following code in `pages/index.js`.
+
+```js
+import {useState} from 'react';
+
+export default function Home() {
+ const [content, setContent] = useState('');
+ const [spellCheckData, setSpellCheckData] = useState([]);
+ const [spellErr, setSpellErr] = useState(true);
+
+ return (
+
+
+ Spell Checker App
+
+
+ Quickly See All Your Spelling Errors
+
+
+
+
+
+
+
+
+ );
+}
+```
+
+You can see that I have added an `onChange` event handler to set the state value as soon as the user writes something in the input field.
+
+### → STEP #4
+
+Let’s integrate the API now. For this, first, create a `.env.local` file and paste the following in it:
+
+```sh
+NEXT_PUBLIC_RAPIDAPI_KEY=YOUR-RAPIDAPI-KEY
+```
+
+You need to replace `YOUR-RAPIDAPI-KEY` here with the API key you got when you subscribed to the [JSpell Checker API](https://rapidapi.com/page-scholar-inc-page-scholar-inc-default/api/jspell-checker/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel). It is the value of `x-rapidapi-key` that you saved earlier.
+
+Now download and add `axios` to your project. For this, run the following command in the terminal:
+
+```sh
+npm install axios
+```
+
+Now import `axios` at the top of the `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+### → STEP #5
+
+We are going to use the `check` endpoint of the [JSpell Checker API](https://rapidapi.com/page-scholar-inc-page-scholar-inc-default/api/jspell-checker/?utm_source=guides.rapidapi.com&utm_medium=DevRel&utm_campaign=DevRel) to get the spell check information.
+
+Create a file called `check` in the `pages/api` directory and copy-paste the following code there:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ if (req.method === 'POST') {
+ var options = {
+ method: 'POST',
+ url: 'https://jspell-checker.p.rapidapi.com/check',
+ headers: {
+ 'x-rapidapi-host': 'jspell-checker.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY
+ },
+ data: {
+ language: 'enUS',
+ fieldvalues: req.body.content,
+ config: {
+ forceUpperCase: false,
+ ignoreIrregularCaps: false,
+ ignoreFirstCaps: true,
+ ignoreNumbers: true,
+ ignoreUpper: false,
+ ignoreDouble: false,
+ ignoreWordsWithNumbers: true
+ }
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ res.status(response.status);
+ });
+ } else {
+ res.status(400);
+ }
+}
+```
+
+Now let’s create a function in the `pages/index.js` file to request the `/api/check` to get spell check details. You can just copy and replace the following code in `pages/index.js` file:
+
+```js
+import {useState} from 'react';
+import axios from 'axios';
+
+export default function Home() {
+ const [content, setContent] = useState('');
+ const [spellCheckData, setSpellCheckData] = useState([]);
+ const [spellErr, setSpellErr] = useState(true);
+
+ /**
+ *
+ *
+ * Fetch Spell Errors and Suggestions
+ */
+ const fetchSpellErrSugg = async () => {
+ try {
+ const res = await axios.post(`/api/check`, {
+ content
+ });
+ const {data} = res;
+
+ if (data.spellingErrorCount === 0) {
+ setSpellErr(false);
+ }
+ {
+ const {elements} = data;
+ setSpellCheckData(elements[0].errors);
+ setSpellErr(true);
+ }
+ } catch (err) {
+ console.log(err);
+ }
+ };
+
+ return (
+
+ );
+}
+```
+
+You can see that I have created a function, `fetchSpellErrSugg`, for getting spell check details. I have also created a piece of UI that is conditionally rendering on the screen. A table will be shown on the screen by default. If there is no spelling mistake, the user will see a message that there is no spelling error.
+
+## Wrap Up
+
+That’s it. We have successfully built a [Spell Checker App](https://rapidapi-example-spell-checker.vercel.app/) using [JSpell Checker API](https://rapidapi.com/page-scholar-inc-page-scholar-inc-default/api/jspell-checker/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel). You can find the source code [here](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/spell-checker-app) of this web app.
+
+In the end, it will look something like this:
+
+
diff --git a/guides/posts/build-superhero-app/images/code-snippet.png b/guides/posts/build-superhero-app/images/code-snippet.png
new file mode 100644
index 00000000..4001a231
Binary files /dev/null and b/guides/posts/build-superhero-app/images/code-snippet.png differ
diff --git a/guides/posts/build-superhero-app/images/cover.png b/guides/posts/build-superhero-app/images/cover.png
new file mode 100644
index 00000000..26105507
Binary files /dev/null and b/guides/posts/build-superhero-app/images/cover.png differ
diff --git a/guides/posts/build-superhero-app/images/subscribe.png b/guides/posts/build-superhero-app/images/subscribe.png
new file mode 100644
index 00000000..94ff31dd
Binary files /dev/null and b/guides/posts/build-superhero-app/images/subscribe.png differ
diff --git a/guides/posts/build-superhero-app/post.md b/guides/posts/build-superhero-app/post.md
new file mode 100644
index 00000000..20730e5c
--- /dev/null
+++ b/guides/posts/build-superhero-app/post.md
@@ -0,0 +1,376 @@
+---
+title: How to build a Superhero App using Next.js and SuperHero Search API?
+description: Are you a Marvel enthusiast or a DC lover? Are you also a developer who likes superheroes? Let’s build an app together using an API where people can search for their favorite heroes.
+publishedDate: 2021-11-15T13:36:22.391Z
+lastModifiedDate: 2021-11-15T13:36:22.391Z
+authors:
+ - saad
+category: apps
+tags:
+ - rapidapi
+ - superhero-app
+coverImage: ''
+---
+
+
+
+Are you a Marvel enthusiast or a DC lover? Are you also a developer who likes superheroes? Let’s build an app together using an API where people can search for their favorite heroes. Also, instead of combing through the Internet, we can use [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) to search for the API.
+
+
+
+[RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides you with thousands of these public APIs that you can use in your apps. Many APIs on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) have free versions available, but you can also buy a premium version if the free version does not satisfy your need.
+
+Today, I am building a superhero application where users can search for their favorite superhero’s real name and other abilities, etc.
+
+## Stack
+
+We need to choose a stack first to build this application. I have decided to go with the [Jamstack](https://jamstack.org/).
+
+I am going to use [Next.js](https://nextjs.org/) for the client-side and [TailwindCSS](https://tailwindcss.com/) for the styling.
+
+If you don’t know about Next.js, it is a JavaScript framework built on top of React and provides features like server-side rendering, static site generation, etc. Tailwind is a CSS framework that provides utility classes to speed up the development process.
+
+## Choosing The API
+
+Let’s find an API that we can use to fetch the superhero information. Go to [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and [create an account](https://RapidAPI.com/auth/sign-up?referral=/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) if you haven’t already and then search for “superhero” in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+You will see different search results related to all the available superhero APIs. For this piece, I am using [SuperHero Search API](https://rapidapi.com/jakash1997/api/superhero-search/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel).
+
+To use this API, you need to subscribe to it first. You can do this by clicking on **Subscribe to Test** button.
+
+
+
+Once you click the button, you will be redirected to another page where different available subscription packages will be shown. Let’s go with the free one for now.
+
+After all this, you will be redirected back to the original page. Here you will have a key `x-rapidapi-key`. Save it. It will be used later in the application.
+
+## Building The UI
+
+You can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your terminal. So let’s do that.
+
+```sh
+npx create-next-app -e with-tailwindcss superhero-app
+```
+
+This command is going to take a minute to set everything up. After generating the boilerplate, you will see a folder with the name `superhero-app` has been created. Open this folder in your preferred code editor. I will use [VSCode](https://code.visualstudio.com/) for this project.
+
+### Project Files
+
+When you open the project in your code editor, you will see the following directories and files in the root directory:
+
+- `pages` directory: Inside it, you will have files `index.js`, `_app.js`, and another directory called `api`. You only need to know about the `index.js` file that is the main entry point in your project.
+- `public` directory: This directory contains icons. You place your static files here to load later in the application.
+- `node_modules`: It’s another directory that contains all the node modules you are using in your application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+
+Before we move on to writing the code, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/superhero-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are some TailwindCSS configurations I have done specifically for this project. I have added some colors that you do not have by default with TailwindCSS and set some screen sizes.
+
+Now create a file called `next.config.js` and paste all the content from [here](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/superhero-app/next.config.js) to this file. We are doing this because the API will provide us with the image URLs. We will use the Next.js Image component to render the image, and this component needs a domain property in the `next.config.js` file to render an image from a URL.
+
+Now let’s start writing the code. I am going to do it in steps so you can follow along.
+
+### → STEP #1
+
+Open the `pages/index.js` file and remove all the existing code. After this, copy-paste the following code there:
+
+```js
+export default function Home() {
+ return (
+
+
+ Superhero App
+
+
+ Search for your favorite superhero
+
+
+ );
+}
+```
+
+It will create two headings for you with the text “Superhero App” and “Search for your favorite superhero”. You can change it to anything you prefer.
+
+### → STEP #2
+
+Now let’s create an input field and a search button. The user will be able to type in the input field and use the search button to get the superhero details.
+
+For this, copy the following code and paste it in `pages/index.js`:
+
+```js
+export default function Home() {
+ return (
+
+
+ Superhero App
+
+
+ Search for your favorite superhero
+
+
+
+
+
+ );
+}
+```
+
+This code is going to create an input field and button. I have also styled them a little bit using [TailwindCSS](<(https://tailwindcss.com/)>).
+
+### → STEP #3
+
+Let’s create some states to store the user input and the superhero information we will receive from the API. For this, copy-paste the following code in `pages/index.js`.
+
+```js
+import {useState} from 'react';
+
+export default function Home() {
+ const [name, setName] = useState('');
+ const [superheroInfo, setSuperheroInfo] = useState(null);
+
+ return (
+
+
+ Superhero App
+
+
+ Search for your favorite superhero
+
+
+
+
+
+ );
+}
+```
+
+You can see that I have added an `onChange` event handler to set the state value as soon as the user writes something in the input field.
+
+### → STEP #4
+
+Let’s integrate the API now. For this, first, create a `.env.local` file and paste the following in it:
+
+```sh
+NEXT_PUBLIC_RAPIDAPI_KEY=YOUR-RAPIDAPI-KEY
+```
+
+You need to replace `YOUR-RAPIDAPI-KEY` here with the API key you got when you subscribed to the [SuperHero Search API](https://rapidapi.com/jakash1997/api/superhero-search/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel). It is the value of `x-rapidapi-key` that you saved earlier.
+
+Now download and add `axios` to your project. For this, run the following command in the terminal:
+
+```sh
+npm install axios
+```
+
+Now import `axios` at the top of the `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+### → STEP #5
+
+We are using the `Search` endpoint of the [SuperHero Search API](https://rapidapi.com/jakash1997/api/superhero-search/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel) to search for superheroes and fetch their details.
+
+I am also going to use the code snippet of `(JavaScript) Axios` that [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides us.
+
+
+
+Create a file called `superhero.js` in the `pages/api` directory and copy-paste the following code there:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ if (req.method === 'GET') {
+ const options = {
+ method: 'GET',
+ url: 'https://superhero-search.p.rapidapi.com/api/',
+ params: {hero: req.query.name},
+ headers: {
+ 'x-rapidapi-host': 'superhero-search.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ });
+ } else {
+ res.status(400);
+ }
+}
+```
+
+Now let’s create a function in the `pages/index.js` file to request the `/api/superhero` for the word meaning. You can just copy and replace the following code in `pages/index.js` file:
+
+```js
+import {useState} from 'react';
+import Image from 'next/image';
+import axios from 'axios';
+
+export default function Home() {
+ const [name, setName] = useState('');
+ const [superheroInfo, setSuperheroInfo] = useState(null);
+
+ /**
+ *
+ *
+ * Fetch superhero info
+ */
+ const fetchSuperheroInfo = async e => {
+ e.preventDefault();
+ try {
+ const res = await axios.get(`/api/superhero`, {
+ params: {name}
+ });
+ const {data} = res;
+ setSuperheroInfo(data);
+ } catch (err) {
+ console.log(err);
+ }
+ };
+
+ return (
+
+ );
+}
+```
+
+You can see that I have created a function, `fetchSuperheroInfo`, to request the API. I have also created a piece of UI that is conditionally rendering on the screen based on the `superheroInfo` state variable’ value.
+
+## Wrap Up
+
+That’s it. We have successfully built a [Superhero App](https://rapidapi-example-superhero-app.vercel.app/) using [SuperHero Search API](https://rapidapi.com/jakash1997/api/superhero-search/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel). You can find the source code of this web app[here](https://github.com/RapidAPI/DevRel-Examples-External/tree/main/superhero-app).
+
+In the end, it will look something like this:
+
+
diff --git a/guides/posts/build-text-extraction-app/images/code-snippet.png b/guides/posts/build-text-extraction-app/images/code-snippet.png
new file mode 100644
index 00000000..89f91e67
Binary files /dev/null and b/guides/posts/build-text-extraction-app/images/code-snippet.png differ
diff --git a/guides/posts/build-text-extraction-app/images/cover.png b/guides/posts/build-text-extraction-app/images/cover.png
new file mode 100644
index 00000000..ad978296
Binary files /dev/null and b/guides/posts/build-text-extraction-app/images/cover.png differ
diff --git a/guides/posts/build-text-extraction-app/images/subscribe.png b/guides/posts/build-text-extraction-app/images/subscribe.png
new file mode 100644
index 00000000..fb1af7bf
Binary files /dev/null and b/guides/posts/build-text-extraction-app/images/subscribe.png differ
diff --git a/guides/posts/build-text-extraction-app/post.md b/guides/posts/build-text-extraction-app/post.md
new file mode 100644
index 00000000..12fcce9f
--- /dev/null
+++ b/guides/posts/build-text-extraction-app/post.md
@@ -0,0 +1,325 @@
+---
+title: How to build a Text Extraction App using Next.js and TextAPI?
+description: Sometimes you only want to see the content of a particular website. Maybe you are reading, and you don’t want to get distracted by ads or other parts of the website.
+publishedDate: 2021-11-11T15:59:08.034Z
+lastModifiedDate: 2021-11-11T15:59:08.034Z
+authors:
+ - saad
+category: apps
+tags:
+ - rapidapi
+ - text-extraction-api
+coverImage: ''
+---
+
+
+
+Sometimes you only want to see the content of a particular website. Maybe you are reading, and you don’t want to get distracted by ads or other parts of the website. There are multiple APIs on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) that you can use to build something similar.
+
+
+
+[RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides you with thousands of these public APIs that you can use in your apps. Many APIs on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) have free versions available, but you can also buy a premium version if the free version does not satisfy your need.
+
+Today, I am building a text extraction application that will take a URL to some article, extracts it, and then show the user the extracted article. So without any further ado, let’s jump in.
+
+## Stack
+
+We need to choose a stack first to build this application. I have decided to go with the [Jamstack](https://jamstack.org/).
+
+I am going to use [Next.js](https://nextjs.org/) for the client-side and [TailwindCSS](https://tailwindcss.com/) for the styling.
+
+If you don’t know about Next.js, it is a JavaScript framework built on top of React and provides features like server-side rendering, static site generation, etc. Tailwind is a CSS framework that provides utility classes to speed up the development process.
+
+## Choosing The API
+
+Let’s find an API that we can use to extract text from a webpage. Go to [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and [create an account](https://RapidAPI.com/auth/sign-up?referral=/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) if you haven’t already and then search for “text extraction” in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+You will see different search results related to all the available text extraction APIs. For this piece, I am using [TextAPI](https://rapidapi.com/textapi/api/textapi/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel).
+
+To use this API, you need to subscribe to it first. You can do this by clicking on **Subscribe to Test** button.
+
+
+
+Once you click the button, you will be redirected to another page where different available subscription packages will be shown. Let’s go with the free one for now.
+
+After all this, you will be redirected back to the original page. Here you will have a key `x-rapidapi-key`. Save it. It will be used later in the application.
+
+## Building The UI
+
+You can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your terminal. So let’s do that.
+
+```sh
+npx create-next-app -e with-tailwindcss text-extraction-app
+```
+
+This command is going to take a minute to set everything up. After generating the boilerplate, you will see a folder with the name `text-extraction-app` has been created. Open this folder in your preferred code editor. I am going to use [VSCode](https://code.visualstudio.com/) for the project.
+
+### Project Files
+
+When you open the project in your code editor, you will see the following directories and files in the root directory:
+
+- `pages` directory: Inside it, you will have files `index.js`, `_app.js`, and another directory called `api`. You only need to know about the `index.js` file that is the main entry point in your project.
+- `public` directory: This directory contains icons. You place your static files here to load later in the application.
+- `node_modules`: It’s another directory that contains all the node modules you are using in your application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+
+Before we move on to writing the code, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/text-extraction-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are some TailwindCSS configurations I have done specifically for this project. I have added some colors that you do not have by default with TailwindCSS and set some screen sizes.
+
+Now let’s start writing the code. I am going to do it in steps so you can follow along.
+
+### → STEP #1
+
+Open the `pages/index.js` file and remove all the existing code. After this, copy-paste the following code there:
+
+```js
+export default function Home() {
+ return (
+
+
+ Text Extraction App
+
+
+ Quickly Extract Text of Any Webpage
+
+
+ );
+}
+```
+
+It will create two headings for you with the text “Text Extraction App” and “Quickly Extract Text of Any Webpage”. You can change it to anything you prefer.
+
+### → STEP #2
+
+Now let’s create an input field and extract button. The user will use the input field to provide the URL of an article. The extract button will send the URL to the API and get the extracted article.
+
+For this, copy the following code and paste it in `pages/index.js`:
+
+```js
+export default function Home() {
+ return (
+
+
+ Text Extraction App
+
+
+ Quickly Extract Text of Any Webpage
+
+
+
+
+
+
+
+
+ );
+}
+```
+
+This code is going to create an input field and button. I have also styled them a little bit using [TailwindCSS](<(https://tailwindcss.com/)>).
+
+### → STEP #3
+
+Let’s create some states to store the user input and the extracted article that we will receive from the API. For this, copy-paste the following code in `pages/index.js`.
+
+```js
+import {useState} from 'react';
+
+export default function Home() {
+ const [url, setUrl] = useState('');
+ const [extractedText, setExtractedText] = useState(null);
+
+ return (
+
+
+ Text Extraction App
+
+
+ Quickly Extract Text of Any Webpage
+
+
+
+ setUrl(e.target.value)}
+ />
+
+
+
+
+ );
+}
+```
+
+You can see that I have added an `onChange` event handler to set the state value as soon as the user writes something in the input field.
+
+### → STEP #4
+
+Let’s integrate the API now. For this, first, create a `.env.local` file and paste the following in it:
+
+```sh
+NEXT_PUBLIC_RAPIDAPI_KEY=YOUR-RAPIDAPI-KEY
+```
+
+You need to replace `YOUR-RAPIDAPI-KEY` here with the API key you got when you subscribed to the [TextAPI](https://rapidapi.com/textapi/api/textapi/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel). It is the value of `x-rapidapi-key` that you saved earlier.
+
+Now download and add `axios` to your project. For this, run the following command in the terminal:
+
+```sh
+npm install axios
+```
+
+Now import `axios` at the top of the `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+### → STEP #5
+
+We are going to use the `Extract Text [From Webpage]` endpoint of the [TextAPI](https://rapidapi.com/textapi/api/textapi/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) to get the extracted article.
+
+I am also going to use the code snippet of `(JavaScript) Axios` that [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) provides us.
+
+
+
+Create a file called `extract` in the `pages/api` directory and copy-paste the following code there:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ if (req.method === 'GET') {
+ const options = {
+ method: 'GET',
+ url: 'https://textapis.p.rapidapi.com/text',
+ params: {
+ url: req.query.url
+ },
+ headers: {
+ 'x-rapidapi-host': 'textapis.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ res.status(response.status);
+ });
+ } else {
+ res.status(400);
+ }
+}
+```
+
+Now let’s create a function in the `pages/index.js` file to request the `/api/extract` to get spell check details. You can just copy and replace the following code in `pages/index.js` file:
+
+```js
+import {useState} from 'react';
+import axios from 'axios';
+
+export default function Home() {
+ const [url, setUrl] = useState('');
+ const [extractedText, setExtractedText] = useState(null);
+
+ /**
+ *
+ *
+ * Fetch extracted content from the url
+ */
+ const fetchExtractedContent = async () => {
+ try {
+ const res = await axios.get(`/api/extract`, {
+ params: {url}
+ });
+ const {data} = res;
+ const {text} = data;
+
+ setExtractedText(text);
+ } catch (err) {
+ console.log(err);
+ }
+ };
+
+ return (
+
+ );
+}
+```
+
+You can see that I have created a function, `fetchExtractedContent`, for fetching the article from the webpage. I have also created a piece of UI that is conditionally rendering on the screen based on the value of `extractedText` state variable.
+
+## Wrap Up
+
+That’s it. We have successfully built a [Text Extraction App](https://rapidapi-example-text-extraction-app.vercel.app/) using TextAPI](https://rapidapi.com/textapi/api/textapi/?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel). You can find the source code [here](https://github.com/RapidAPI/DevRel-Examples-External/tree/main/text-extraction-app) of this web app.
+
+In the end, it will look something like this:
+
+
diff --git a/guides/posts/build-text-sentiment-analysis-app/images/code-snippet.png b/guides/posts/build-text-sentiment-analysis-app/images/code-snippet.png
new file mode 100644
index 00000000..8c38dd11
Binary files /dev/null and b/guides/posts/build-text-sentiment-analysis-app/images/code-snippet.png differ
diff --git a/guides/posts/build-text-sentiment-analysis-app/images/cover.png b/guides/posts/build-text-sentiment-analysis-app/images/cover.png
new file mode 100644
index 00000000..6641ddb5
Binary files /dev/null and b/guides/posts/build-text-sentiment-analysis-app/images/cover.png differ
diff --git a/guides/posts/build-text-sentiment-analysis-app/post.md b/guides/posts/build-text-sentiment-analysis-app/post.md
new file mode 100644
index 00000000..ba6e5c4c
--- /dev/null
+++ b/guides/posts/build-text-sentiment-analysis-app/post.md
@@ -0,0 +1,349 @@
+---
+title: How to build a Text Sentiment Analysis App using Next.js and Text Sentiment Analysis API?
+description: 'Sometimes you want to analyze how the content you are writing sounds like. If you are a developer like me, you can build an application for this.'
+publishedDate: 2021-11-21T16:52:44.523Z
+lastModifiedDate: 2021-11-21T16:52:44.523Z
+authors:
+ - saad
+category: apps
+tags:
+ - rapidapi
+ - text-sentiment-analysis-api
+coverImage: ''
+---
+
+
+
+Sometimes you want to analyze how the content you are writing sounds like. If you are a developer like me, you can build an application for this. There are multiple APIs available on [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) that you can use for this purpose.
+
+
+
+Today, I am building a Text Sentiment Analysis application that will let the user know how their text sounds. Is it positive, negative, or neutral? So without any further ado, let’s jump in.
+
+## Stack
+
+We need to choose a stack first to build this application. I have decided to go with the [Jamstack](https://jamstack.org/).
+
+I am going to use [Next.js](https://nextjs.org/) for the client-side and [TailwindCSS](https://tailwindcss.com/) for the styling.
+
+If you don’t know about Next.js, it is a JavaScript framework built on top of React and provides features like server-side rendering, static site generation, etc. Tailwind is a CSS framework that provides utility classes to speed up the development process.
+
+## Choosing The API
+
+Let’s find an API that we can use to get the sentiment analysis. Go to [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and [create an account](https://RapidAPI.com/auth/sign-up?referral=/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) if you haven’t already and then search for “text” in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+You will see different search results related to text APIs. For this piece, I am using [Text Analysis API](https://rapidapi.com/gaurmanojkumar530/api/text-analysis12/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel).
+
+It is a free API, so you do not need to subscribe to it. However, you will need your RapidAPI key. Go ahead and save the `x-rapidapi-key` so you can use it later.
+
+## Building The UI
+
+You can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your terminal. So let’s do that.
+
+```sh
+npx create-next-app -e with-tailwindcss text-sentiment-analysis-app
+```
+
+This command is going to take a minute to set everything up. After generating the boilerplate, you will see a folder with the name `text-sentiment-analysis-app` has been created. Open this folder in your preferred code editor. I will use [VSCode](https://code.visualstudio.com/) for this project.
+
+### Project Files
+
+When you open the project in your code editor, you will see the following directories and files in the root directory:
+
+- `pages` directory: Inside it, you will have files `index.js`, `_app.js`, and another directory called `api`. You only need to know about the `index.js` file that is the main entry point in your project.
+- `public` directory: This directory contains icons. You place your static files here to load later in the application.
+- `node_modules`: It’s another directory that contains all the node modules you are using in your application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+ `readme.md`: It’s a markdown file for documentation.
+
+Before we move on to writing the code, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/text-sentiment-analysis-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are some TailwindCSS configurations I have done specifically for this project. I have added some colors that you do not have by default with TailwindCSS and set some screen sizes.
+
+Now let’s start writing the code. I am going to do it in steps so you can follow along.
+
+### → STEP #1
+
+Open the `pages/index.js` file and remove all the existing code. After this, copy-paste the following code there:
+
+```js
+export default function Home() {
+ return (
+
+
+ Text Sentiment Analysis
+ App
+
+
+ Check how your text sounds
+
+
+ );
+}
+```
+
+It will create two headings for you with the text “Text Sentiment Analysis App” and “Check how your text sounds”. You can change it to anything you prefer.
+
+### → STEP #2
+
+Now let’s create some text areas where users will be able to write the content and a button that will request the API to analyze our content.
+
+For this, copy the following code and paste it in `pages/index.js`:
+
+```js
+export default function Home() {
+ return (
+
+
+ Text Sentiment Analysis
+ App
+
+
+ Check how your text sounds
+
+
+
+
+
+
+
+
+
+ );
+}
+```
+
+This code is going to create an input field and button. I have also styled them a little bit using [TailwindCSS](<(https://tailwindcss.com/)>).
+
+### → STEP #3
+
+Let’s create some states to store the content and analysis that we will receive from the API. For this, copy-paste the following code in `pages/index.js`.
+
+```js
+import {useState} from 'react';
+import axios from 'axios';
+
+export default function Home() {
+ const [content, setContent] = useState('');
+ const [analysis, setAnalysis] = useState('');
+
+ return (
+
+
+ Text Sentiment Analysis
+ App
+
+
+ Check how your text sounds
+
+
+
setContent(e.target.value)}
+ />
+
+
+
+
+
+
+ );
+}
+```
+
+You can see that I have added an `onChange` event handler to set the state value as soon as the user writes something in the text area field.
+
+### → STEP #4
+
+Let’s integrate the API now. For this, first, create a `.env.local` file and paste the following in it:
+
+```sh
+NEXT_PUBLIC_RAPIDAPI_KEY=YOUR_RAPID_API_KEY
+```
+
+You need to replace `YOUR-RAPIDAPI-KEY` here with the API key that I told you to save earlier. It is the value of `x-rapidapi-key` that you saved earlier.
+
+Now download and add `axios` to your project. For this, run the following command in the terminal:
+
+```sh
+npm install axios
+```
+
+Now import `axios` at the top of the `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+### → STEP #5
+
+We are using the `summarize-text` endpoint of the [Text Analysis API](https://rapidapi.com/gaurmanojkumar530/api/text-analysis12/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel) to analyze the text.
+
+Create a file called `superhero.js` in the `pages/api` directory and copy-paste the following code there:
+
+RapidAPI Hub provides you with code snippets in different languages for integrating the API. I am going to use the `(JavaScript) Axios` one.
+
+
+
+Now create a file with the name `analyse.js` inside the `pages/api` directory. It is going to create a REST API endpoint for you. The endpoint point will look like this:
+
+```sh
+http://localhost:3000/api/analyse
+```
+
+Now copy the following code in this file:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ if (req.method === 'POST') {
+ const options = {
+ method: 'POST',
+ url: 'https://text-analysis12.p.rapidapi.com/sentiment-analysis/api/v1.1',
+ headers: {
+ 'content-type': 'application/json',
+ 'x-rapidapi-host': 'text-analysis12.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY
+ },
+ data: {language: 'english', text: req.body.content}
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ });
+ } else {
+ res.status(400);
+ }
+}
+```
+
+This code is making an API call to the [Text Analysis API](https://rapidapi.com/gaurmanojkumar530/api/text-analysis12/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel) on the server and returns the results to the user. It is going to execute when the user makes an API call to the `analyse` endpoint I have mentioned above.
+
+Once you are done, copy the following code in the `pages/index.js` file:
+
+```js
+import {useState} from 'react';
+import axios from 'axios';
+
+export default function Home() {
+ const [content, setContent] = useState('');
+ const [analysis, setAnalysis] = useState('');
+
+ /**
+ *
+ *
+ * Fetch Analysis of the content
+ */
+ const fetchAnalysis = async () => {
+ try {
+ setAnalysis(`Analysing content...`);
+ const res = await axios.post(`/api/analyse`, {
+ content
+ });
+ const {data} = res;
+
+ const msg = `Your text sounds ${
+ data.sentiment
+ }. It has ${Math.floor(
+ data.aggregate_sentiment.pos * 100
+ )}% positivity, and ${Math.floor(
+ data.aggregate_sentiment.neg * 100
+ )}% negativity. It has a neutral level of ${Math.floor(
+ data.aggregate_sentiment.neu * 100
+ )}%.`;
+ setAnalysis(msg);
+ } catch (err) {
+ setAnalysis(`Couldn't analyse the content.`);
+ console.log(err);
+ }
+ };
+
+ return (
+
+ );
+}
+```
+
+You can see that I have created a function, `fetchAnalysis`, to request the API. The API response I receive is between 0 and 1. So I am multiplying the response by 100 to get the percentage, and then I am showing the results to the user.
+
+## Wrap Up
+
+That’s it. We have successfully built a [Text Sentiment Analysis App](https://rapidapi-text-sentiment-analysis-app.vercel.app/) using [Text Analysis API](https://rapidapi.com/gaurmanojkumar530/api/text-analysis12/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel). You can find the source code of this web app [here](https://github.com/RapidAPI/DevRel-Examples-External/tree/main/text-sentiment-analysis-app).
+
+In the end, it will look something like this:
+
+
diff --git a/guides/posts/build-time-app/images/code-snippet.png b/guides/posts/build-time-app/images/code-snippet.png
new file mode 100644
index 00000000..0e26ca9b
Binary files /dev/null and b/guides/posts/build-time-app/images/code-snippet.png differ
diff --git a/guides/posts/build-time-app/images/cover.png b/guides/posts/build-time-app/images/cover.png
new file mode 100644
index 00000000..37982c16
Binary files /dev/null and b/guides/posts/build-time-app/images/cover.png differ
diff --git a/guides/posts/build-time-app/post.md b/guides/posts/build-time-app/post.md
new file mode 100644
index 00000000..a936b4fa
--- /dev/null
+++ b/guides/posts/build-time-app/post.md
@@ -0,0 +1,399 @@
+---
+title: How to build a Time app using Next.js and World Time API?
+description: When working remotely, we often need to know from which timezone someone is working. And if you have a global team, you often find yourself looking up different timezones to schedule a meeting.
+publishedDate: 2021-11-21T16:52:44.523Z
+lastModifiedDate: 2021-11-21T16:52:44.523Z
+authors:
+ - saad
+category: apps
+tags:
+ - rapidapi
+ - utc-time-api
+coverImage: ''
+---
+
+
+
+When working remotely, we often need to know from which timezone someone is working. And if you have a global team, you often find yourself looking up different timezones to schedule a meeting. This is one of the many examples where we need to know the date and time of a particular time zone.
+
+
+
+Today, I am building a UTC app that will provide your timezone according to an area. So without any further ado, let’s jump in.
+
+## Stack
+
+We need to choose a stack first to build this application. I have decided to go with the [Jamstack](https://jamstack.org/).
+
+I am going to use [Next.js](https://nextjs.org/) for the client-side and [TailwindCSS](https://tailwindcss.com/) for the styling.
+
+If you don’t know about Next.js, it is a JavaScript framework built on top of React and provides features like server-side rendering, static site generation, etc. Tailwind is a CSS framework that provides utility classes to speed up the development process.
+
+## Choosing The API
+
+Let’s find an API that we can use to get the UTC timezone information. Go to [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and [create an account](https://RapidAPI.com/auth/sign-up?referral=/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) if you haven’t already and then search for “utc time” in the search section.
+
+
+ Learn more about how to use RapidAPI Hub.
+
+
+You will see different search results related to all the available APIs that provide information related to timezones. For this piece, I am using [World Time API](https://rapidapi.com/brianiswu/api/world-time2/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel).
+
+It is a free API, so you do not need to subscribe to it. However, you will need your RapidAPI key. Go ahead and save the `x-rapidapi-key` so you can use it later.
+
+## Building The UI
+
+You can create a Next.js boilerplate with TailwindCSS integrated by running the following command in your terminal. So let’s do that.
+
+```sh
+npx create-next-app -e with-tailwindcss time-app
+```
+
+This command is going to take a minute to set everything up. After generating the boilerplate, you will see a folder with the name `time-app` has been created. Open this folder in your preferred code editor. I will use [VSCode](https://code.visualstudio.com/) for this project.
+
+### Project Files
+
+When you open the project in your code editor, you will see the following directories and files in the root directory:
+
+- `pages` directory: Inside it, you will have files `index.js`, `_app.js`, and another directory called `api`. You only need to know about the `index.js` file that is the main entry point in your project.
+- `public` directory: This directory contains icons. You place your static files here to load later in the application.
+- `node_modules`: It’s another directory that contains all the node modules you are using in your application.
+- `package.json`: This file contains the metadata of your project.
+- `package-lock.json`: This file is responsible for tracking the exact version of every installed package.
+- `postcss.config.js`: This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js`: It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md`: It’s a markdown file for documentation.
+
+Before we move on to writing the code, open [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/time-app/tailwind.config.js) file, and copy all of its content, then paste it inside the `tailwind.config.js` file in your project. These are some TailwindCSS configurations I have done specifically for this project. I have added some colors that you do not have by default with TailwindCSS and set some screen sizes.
+
+Now let’s start writing the code. I am going to do it in steps so you can follow along.
+
+### → STEP #1
+
+Open the `pages/index.js` file and remove all the existing code. After this, copy-paste the following code there:
+
+```js
+export default function Home() {
+ return (
+
+
+ Time App
+
+
+ Get Time-related information according to an area
+
+
+ );
+}
+```
+
+It will create two headings for you with the text “Time App” and “Get Time-related information according to an area”. You can change it to anything you prefer.
+
+### → STEP #2
+
+Now let’s create a dropdown list and a search button. The user will be able to select the timezone of their choice from the list and use the search button to get all the details
+
+For this, create a new folder called `components`. Inside this folder, create a file called `Timezone.js`. Copy and paste what you will find in [this](https://github.com/RapidAPI/DevRel-Examples-External/blob/main/time-app/components/Timezone.js) file in your `Timezone.js`.
+
+Now copy the following code and paste it in `pages/index.js`:
+
+```js
+import Timezone from '../components/Timezone';
+
+export default function Home({value}) {
+ return (
+
+
+ Time App
+
+
+ Get Time-related information according to your area
+
+
+
+
+
+
+ );
+}
+```
+
+This code is going to create an input field and button. I have also styled them a little bit using [TailwindCSS](<(https://tailwindcss.com/)>).
+
+### → STEP #3
+
+Let’s create some states to store the UTC time and date that we will receive from the API. For this, copy-paste the following code in `pages/index.js`.
+
+```js
+import {useState} from 'react';
+import Timezone from '../components/Timezone';
+
+export default function Home({value}) {
+ const [res, setRes] = useState(value);
+ const [utcTime, setUtcTime] = useState(null);
+ const [utcDate, setUtcDate] = useState(null);
+ const [timezone, setTimezone] = useState('Africa/Abidjan');
+
+ return (
+
+
+ Time App
+
+
+ Get Time-related information according to your area
+
+
+
+
+
+
+ );
+}
+```
+
+You can see that I am sending `setTimezone` function to the Timezone component as a prop.
+
+### → STEP #4
+
+Let’s integrate the API now. For this, first, create a `.env.local` file and paste the following in it:
+
+```sh
+NEXT_PUBLIC_RAPIDAPI_KEY=YOUR_RAPID_API_KEY
+```
+
+You need to replace `YOUR-RAPIDAPI-KEY` here with the API key that I told you to save earlier. It is the value of `x-rapidapi-key` that you saved earlier.
+
+Now download and add `axios` to your project. For this, run the following command in the terminal:
+
+```sh
+npm install axios
+```
+
+Now import `axios` at the top of the `pages/index.js`.
+
+```js
+import axios from ‘axios’;
+```
+
+### → STEP #5
+
+We are using the `Timezone for Location` endpoint of the [World Time API](https://rapidapi.com/brianiswu/api/world-time2/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel) to get the UTC information.
+
+RapidAPI Hub provides you with code snippets in different languages for integrating the API. I am going to use the `(JavaScript) Axios` one.
+
+
+
+Now create a file with the name `time.js` inside the `pages/api` directory. It is going to create a REST API endpoint for you. The endpoint point will look like this:
+
+```sh
+http://localhost:3000/api/time
+```
+
+Now copy the following code in this file:
+
+```js
+import axios from 'axios';
+
+export default async function handler(req, res) {
+ if (req.method === 'GET') {
+ if (req.query.timezone) {
+ const newTimezone = req.query.timezone.split('/');
+ const options = {
+ method: 'GET',
+ url: `https://world-time2.p.rapidapi.com/timezone/${newTimezone[0]}/${newTimezone[1]}`,
+ headers: {
+ 'x-rapidapi-host': 'world-time2.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ });
+ } else {
+ var options = {
+ method: 'GET',
+ url: 'https://world-time2.p.rapidapi.com/timezone/Africa/Abidjan',
+ headers: {
+ 'x-rapidapi-host': 'world-time2.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_RAPIDAPI_KEY
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ res.status(200).json(response.data);
+ })
+ .catch(function (error) {
+ console.error(error);
+ });
+ }
+ } else {
+ res.status(400);
+ }
+}
+```
+
+This code is making an API call to the [World Time API](https://rapidapi.com/brianiswu/api/world-time2/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel) on the server and returns the results to the user. It is going to execute when the user makes an API call to the `time` endpoint I have mentioned above.
+
+I have added a condition in the code that will differentiate whether the API call is made before the website is loaded or afterward.
+
+Once you are done, copy the following code in the `pages/index.js` file:
+
+```js
+import {useState, useEffect} from 'react';
+import Timezone from '../components/Timezone';
+import axios from 'axios';
+
+export default function Home({value}) {
+ const [res, setRes] = useState(value);
+ const [utcTime, setUtcTime] = useState(null);
+ const [utcDate, setUtcDate] = useState(null);
+ const [timezone, setTimezone] = useState('Africa/Abidjan');
+
+ useEffect(() => {
+ splitDataTime();
+ }, []);
+
+ /**
+ *
+ *
+ * split data and time.
+ */
+ const splitDataTime = () => {
+ const date = value.utc_datetime.slice(0, 10);
+ const time = value.utc_datetime.slice(11, 16);
+
+ setUtcDate(date);
+ setUtcTime(time);
+ };
+
+ /**
+ *
+ *
+ * fetch time information
+ */
+ const fetchTimeInfo = async () => {
+ try {
+ const res = await axios.get(`/api/time`, {
+ params: {timezone}
+ });
+
+ splitDataTime();
+ setRes(res.data);
+ } catch (err) {
+ console.log(err);
+ }
+ };
+
+ return (
+
+
+ Time App
+
+
+ Get Time-related information according to an area
+
+ );
+}
+
+export async function getServerSideProps() {
+ const res = await axios.get('http://localhost:3000/api/time');
+ const {data: value} = res;
+
+ if (!value) {
+ return {
+ notFound: true
+ };
+ }
+
+ return {
+ props: {
+ value
+ }
+ };
+}
+```
+
+I am using the Next.js `getServerSideProps` function to fetch the data from the server. It will make my application server-side, and the user will never see a loading state. You can also use `getStaticProps` instead of `getServerSideProps` and the application will then fetch the data at build time.
+
+If you look at the code, you will notice two things. First, I am using React’s `useEffect` hook to manipulate the data that I am receiving from the API. For this, I am calling `splitDataTime` function in `useEffect`. It is because the UTC date and time in the API response is a single string. But since these are two separate fields in our app, I am slicing the string to get the desired results. Afterward, I am updating the state variable.
+
+The second thing you will see is that I have added a table to display the values that our application will fetch from the API.
+
+## Wrap Up
+
+This is it. We have successfully built a [UTC Time application](https://rapidapi-example-time-app.vercel.app/) using the [World Time API](https://rapidapi.com/brianiswu/api/world-time2/?utm_source=RapidAPI.com%2Fguides&utm_medium=DevRel&utm_campaign=DevRel) API. You can find the code of this web app [here](https://github.com/RapidAPI/DevRel-Examples-External/tree/main/time-app). It will look something like this:
+
+
diff --git a/guides/posts/build-weather-app/images/app.png b/guides/posts/build-weather-app/images/app.png
new file mode 100644
index 00000000..c0ad4985
Binary files /dev/null and b/guides/posts/build-weather-app/images/app.png differ
diff --git a/guides/posts/build-weather-app/images/code-snippet.jpg b/guides/posts/build-weather-app/images/code-snippet.jpg
new file mode 100644
index 00000000..ae3f45b5
Binary files /dev/null and b/guides/posts/build-weather-app/images/code-snippet.jpg differ
diff --git a/guides/posts/build-weather-app/images/weather-api.jpg b/guides/posts/build-weather-app/images/weather-api.jpg
new file mode 100644
index 00000000..2cdc5743
Binary files /dev/null and b/guides/posts/build-weather-app/images/weather-api.jpg differ
diff --git a/guides/posts/build-weather-app/post.md b/guides/posts/build-weather-app/post.md
new file mode 100644
index 00000000..9f21a2c6
--- /dev/null
+++ b/guides/posts/build-weather-app/post.md
@@ -0,0 +1,322 @@
+---
+title: How to build a weather app using Next.js and WeatherAPI?
+description: RapidAPI Hub is the world’s largest API hub with more than 35,000 APIs available. Let's build an application using one of the APIs from RapidAPI.
+publishedDate: 2021-10-11T20:53:04.094Z
+lastModifiedDate: 2021-10-11T20:53:04.094Z
+authors:
+ - saad
+category: apps
+tags:
+ - rapidapi
+ - weather-app
+coverImage: ''
+---
+
+
+ RapidAPI Hub is the world’s largest API hub with more than 35,000 APIs
+ available. Anyone can build an API and monetize it on RapidAPI. The
+ developers use these APIs in their applications. They can try the API for
+ free, and if they like it, they can purchase them.
+
+
+Today, I have decided to use one of the APIs from [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and build a small application from it. Let’s build this application together.
+
+## Stack
+
+Let’s start by choosing the web stack. I am a huge fan of Jamstack (JavaScript, API, and Markdown). So, let’s go with it in this example.
+
+I am using [Next.js](https://nextjs.org/) for the framework and [Tailwind CSS](https://tailwindcss.com/) for the styling.
+
+If you don’t know about Next.js, it is a JavaScript framework built on top of React and provides features like server-side rendering, static site generation, etc. Tailwind is a CSS framework that provides utility classes to speed up the development process.
+
+## Finding The API
+
+The next thing we have to do is find the API we will be using. For this, head over to the [RapidAPI Hub](https://RapidAPI.com/hub?utm_source=RapidAPI.com/guides&utm_medium=DevRel&utm_campaign=DevRel) and create an account. Once you do that, search for a "weather" API.
+
+I have decided to go with the first result, i.e., [Open Weather Map](https://RapidAPI.com/community/api/open-weather-map/) API. It has a popularity of 9.9 out of 10. Its latency is 367ms and provides a 100% service level.
+
+To use the API, you need to subscribe to it first. For this, all you need to do is click on the Subscribe button, and you will be directed to another page.
+
+
+
+Here you will be asked to choose any of the available packages. Let’s go with the free package that has a hard limit of 500 requests per month. Subscribe to it.
+
+You will be directed back to the endpoint section now. Your API key is written here in front of the label `X-RapidAPI-Key`. You will need it later in the application.
+
+## Setting Up The UI
+
+Now let’s create a Next.js app that has Tailwind CSS integrated inside of it. For this, open your terminal and type the following there:
+
+```sh
+npx create-next-app -e with-tailwindcss weather-app
+```
+
+This command is going to take a minute to set everything up. After it is finished generating the boilerplate, you will see a folder with the name `weather-app` has been created. Open this folder in your preferred code editor. I am going to use [VSCode](https://code.visualstudio.com/) for the project.
+
+### Project Files
+
+When you will open the project in your code editor, you will see the following directories and files in the root directory:
+
+- `pages` directory — Inside it, you will have files `index.js`, `_app.js`, and another directory called `api`. You only need to know about the `index.js` file that is the main entry point in your project.
+- `public` directory — This directory contains icons. You place your static files here to load later in the application.
+- `node_modules` — It’s another directory that contains all the node modules you are using in your application.
+- `package.json` — This file contains the metadata of your project.
+- `package-lock.json` — This file is responsible for tracking the exact version of every package that is installed.
+- `postcss.config.js` — This file contains [PostCSS](https://github.com/postcss/postcss) configurations.
+- `tailwind.config.js` — It contains [TailwindCSS](https://tailwindcss.com/) configurations.
+- `readme.md` — It’s a markdown file for documentation.
+
+Now let’s create the user interface of our application. I am going to do it in steps.
+
+### → STEP #1
+
+Open the `pages/index.js` file and remove all the boilerplate code. You can copy-paste the following code in your `index.js` file.
+
+```js
+export default function Home() {
+ return (
+
+
+
+ Weather App
+
+
+
+ );
+}
+```
+
+You can see I have created a div that has another div inside of it that contains an h2 heading.
+
+### → STEP #2
+
+Let’s create a search box and a button now. You can build it however you like. I am going with the minimal design. So I am putting the input box and the button side by side.
+
+Here is the code so far till this step:
+
+```js
+export default function Home() {
+ return (
+
+
+
+ Weather App
+
+
+
+
+
+
+
+ );
+}
+```
+
+### → STEP #3
+
+We need to show the temperature now. The template for this will be conditionally rendered on the screen. So to do that, we need to create states. Based on the data inside the states, we can then conditionally render the template on the screen.
+
+We also need to do error handling in case the API responds with status code 404.
+
+Here is the code till this point:
+
+```js
+import {useState} from 'react';
+import axios from 'axios';
+
+export default function Home() {
+ const [temp, setTemp] = useState(null);
+ const [minTemp, setMinTemp] = useState('');
+ const [maxTemp, setMaxTemp] = useState('');
+ const [err, setErr] = useState(false);
+
+ return (
+
+
+
+ Weather App
+
+
+
+ setCity(e.target.value)}
+ />
+
+
+ {temp && (
+
+
+
Temperature:
+
{temp} ° C
+
+
+
Temperature Min:
+
{minTemp}° C
+
+
+
Temperature Max:
+
{maxTemp}° C
+
+
+ )}
+ {err && (
+
+
Couldn't fetch weather results.
+
+ )}
+
+ );
+}
+```
+
+## Integrating the API
+
+It’s time to integrate the API now. For this, create a `.env.local` file in the root directory. You need to place your API key here that you received when you subscribed to the API.
+
+Copy the following in the `.env.local` and replace the `Your-RapidAPI-Key` with the API key.
+
+```sh
+NEXT_PUBLIC_OPEN_WEATHER_API_KEY=Your-Rapid-Key
+```
+
+You can use the fetch API for making the API call but I am going to use `axios` instead. Open your terminal and type the following there:
+
+```sh
+npm install axios
+```
+
+Once installed, import `axios` at the top. You can do this like this:
+
+```js
+import axios from ‘axios’;
+```
+
+RapidAPI Hub provides you with code snippets in different languages for integrating the API. I am going to use the (JavaScript) Axios one.
+
+
+
+Now I need to save the user input in the state variable ‘city`so it can be sent through the API later. For this, I am setting the`onChange`event in the`input`tag. I am also writing a`getWeather` function that will make the API call when the search button is clicked. Once the API provides a response, the data will be saved in the state variables.
+
+Here is the code so far:
+
+```js
+import {useState} from 'react';
+import axios from 'axios';
+
+export default function Home() {
+ const [city, setCity] = useState('');
+ const [temp, setTemp] = useState(null);
+ const [minTemp, setMinTemp] = useState('');
+ const [maxTemp, setMaxTemp] = useState('');
+ const [err, setErr] = useState(false);
+
+ /**
+ *
+ * fetch weather information of the given city
+ */
+ const getWeather = () => {
+ // resetting states
+ setErr(false);
+ setTemp(null);
+
+ const options = {
+ method: 'GET',
+ url: 'https://community-open-weather-map.p.rapidapi.com/weather',
+ params: {q: `${city}`, units: 'metric'},
+ headers: {
+ 'x-rapidapi-host': 'community-open-weather-map.p.rapidapi.com',
+ 'x-rapidapi-key': process.env.NEXT_PUBLIC_OPEN_WEATHER_API_KEY
+ }
+ };
+
+ axios
+ .request(options)
+ .then(function (response) {
+ console.log(response.data);
+ const {data} = response;
+ const newTemp = Math.ceil(data.main.temp);
+ const newMinTemp = Math.ceil(data.main.temp_min);
+ const newMaxTemp = Math.ceil(data.main.temp_max);
+
+ setTemp(newTemp);
+ setMinTemp(newMinTemp);
+ setMaxTemp(newMaxTemp);
+ })
+ .catch(function (error) {
+ console.error(error);
+ setErr(true);
+ });
+ };
+
+ return (
+
+
+
+ Weather App
+
+
+
+ setCity(e.target.value)}
+ />
+
+
+ {temp && (
+
+
+
Temperature:
+
{temp} ° C
+
+
+
Temperature Min:
+
{minTemp}° C
+
+
+
Temperature Max:
+
{maxTemp}° C
+
+
+ )}
+ {err && (
+
+
Couldn't fetch weather results.
+
+ )}
+
+ );
+}
+```
+
+If you take a look at the `getWeather` function, you will see I have copy-pasted the code snippet that RapidAPI Hub provided me earlier.
+
+## Wrap Up
+
+This is it. We have successfully built a weather application using the Open Weather Map API. It will look something like this:
+
+[](https://rapidapi-example-weather-app.vercel.app/)
+
+If you want to take a look at the code, you can find it [here](https://github.com/RapidAPI/DevRel-Examples-External/tree/main/weather-app). I have also deployed it on Vercel. Here is the live [link](https://rapidapi-example-weather-app.vercel.app/) to it.
diff --git a/guides/posts/canvas-api/post.md b/guides/posts/canvas-api/post.md
new file mode 100644
index 00000000..8e510723
--- /dev/null
+++ b/guides/posts/canvas-api/post.md
@@ -0,0 +1,85 @@
+---
+title: Introduction to Canvas API
+description: You can draw graphics using JavaScript and the HTML canvas element.
+publishedDate: 2021-11-03T16:27:05.876Z
+lastModifiedDate: 2021-11-03T16:27:05.876Z
+authors:
+ - saad
+category: webApis
+tags:
+ - canvas-api
+coverImage: ''
+---
+
+
+
+There are multiple browser APIs available for developers to use in their web applications and browser extensions. These APIs provide the developers with browser data and perform complex operations without dealing with sophisticated lower-level code. Let’s take a look at one of the most common browser APIs that are used.
+
+
+
+## Canvas API
+
+You can draw graphics using JavaScript and the HTML canvas element. It provides you the means to produce animations, game graphics, data visualization, photo manipulation, and real-time video processing. The primary component of the Canvas API is the HTML `