소스 검색

paginate folder structure

AykutSarac 2 년 전
부모
커밋
bd596c995c
6개의 변경된 파일525개의 추가작업 그리고 510개의 파일을 삭제
  1. 1 1
      next.config.js
  2. 219 0
      src/containers/Home/index.tsx
  3. 299 0
      src/containers/Home/styles.tsx
  4. 0 0
      src/pages/Editor/index.tsx
  5. 2 3
      src/pages/_app.tsx
  6. 4 506
      src/pages/index.tsx

+ 1 - 1
next.config.js

@@ -7,7 +7,7 @@ const nextConfig = {
   reactStrictMode: true,
   exportPathMap: () => ({
     "/": { page: "/" },
-    "/editor": { page: "/editor" },
+    "/editor": { page: "/Editor" },
   }),
   compiler: {
     styledComponents: true,

+ 219 - 0
src/containers/Home/index.tsx

@@ -0,0 +1,219 @@
+import React from "react";
+import Head from "next/head";
+import Link from "next/link";
+import { useRouter } from "next/router";
+import { TwitterTweetEmbed } from "react-twitter-embed";
+import { FaGithub, FaLinkedin, FaTwitter } from "react-icons/fa";
+import {
+  HiCursorClick,
+  HiLightningBolt,
+  HiOutlineDownload,
+  HiOutlineSearchCircle,
+} from "react-icons/hi";
+import { Producthunt } from "src/components/Producthunt";
+import { CarbonAds } from "src/components/CarbonAds";
+import pkg from "../../../package.json";
+import * as Styles from "./styles";
+
+const Home: React.FC = () => {
+  const { push } = useRouter();
+  const [isMobile, setIsMobile] = React.useState(false);
+
+  React.useLayoutEffect(() => {
+    setIsMobile(window.screen.width <= 768);
+  }, []);
+
+  return (
+    <Styles.StyledHome>
+      <Head>
+        <title>JSON Visio - Directly onto graphs</title>
+      </Head>
+      <Styles.StyledNavbar>
+        <Styles.StyledNavLink href="/editor">Editor</Styles.StyledNavLink>
+        <Link href="#features" passHref>
+          <Styles.StyledNavLink>Features</Styles.StyledNavLink>
+        </Link>
+        <Link href="#sponsor" passHref>
+          <Styles.StyledNavLink>Sponsor</Styles.StyledNavLink>
+        </Link>
+        <Styles.StyledNavLink
+          href="https://github.com/AykutSarac/jsonvisio.com"
+          target="_blank"
+          rel="external"
+        >
+          GitHub
+        </Styles.StyledNavLink>
+      </Styles.StyledNavbar>
+
+      <Styles.StyledHeroSection id="main">
+        <Styles.StyledTitle>
+          <Styles.StyledGradientText>JSON</Styles.StyledGradientText> Visio
+        </Styles.StyledTitle>
+        <Styles.StyledSubTitle>
+          Seamlessly visualize your JSON data
+          <Styles.StyledHighlightedText>instantly</Styles.StyledHighlightedText>
+          into graphs.
+        </Styles.StyledSubTitle>
+        <Styles.StyledMinorTitle>
+          Paste - Import - Fetch!
+        </Styles.StyledMinorTitle>
+        <Styles.StyledButton
+          onClick={() => window.location.replace("/editor")}
+          disabled={isMobile}
+        >
+          {isMobile ? "Incompatible Device" : "GO TO EDITOR"}
+        </Styles.StyledButton>
+      </Styles.StyledHeroSection>
+
+      <Styles.StyledPreviewSection>
+        <Styles.StyledImage
+          width="1200"
+          height="auto"
+          src="/jsonvisio-screenshot.png"
+          alt="preview"
+        />
+      </Styles.StyledPreviewSection>
+
+      <Styles.StyledFeaturesSection id="features">
+        <Styles.StyledSectionCard>
+          <Styles.StyledCardIcon>
+            <HiCursorClick size={50} color="#3BA55D" />
+          </Styles.StyledCardIcon>
+          <Styles.StyledCardTitle>EASY-TO-USE</Styles.StyledCardTitle>
+          <Styles.StyledCardDescription>
+            Don&apos;t even bother to update your schema to view your JSON into
+            graphs; directly paste, import or fetch! JSON Visio helps you to
+            visualize without any additional values and save your time.
+          </Styles.StyledCardDescription>
+        </Styles.StyledSectionCard>
+
+        <Styles.StyledSectionCard>
+          <Styles.StyledCardIcon>
+            <HiOutlineSearchCircle size={50} color="#5865F2" />
+          </Styles.StyledCardIcon>
+          <Styles.StyledCardTitle>SEARCH</Styles.StyledCardTitle>
+          <Styles.StyledCardDescription>
+            Have a huge file of values, keys or arrays? Worry no more, type in
+            the keyword you are looking for into search input and it will take
+            you to each node with matching result highlighting the line to
+            understand better!
+          </Styles.StyledCardDescription>
+        </Styles.StyledSectionCard>
+
+        <Styles.StyledSectionCard>
+          <Styles.StyledCardIcon>
+            <HiOutlineDownload size={50} color="#DA2877" />
+          </Styles.StyledCardIcon>
+          <Styles.StyledCardTitle>DOWNLOAD</Styles.StyledCardTitle>
+          <Styles.StyledCardDescription>
+            Download the graph to your local machine and use it wherever you
+            want, to your blogs, website or make it a poster and paste to the
+            wall. Who wouldn&apos;t want to see a JSON Visio graph onto their
+            wall, eh?
+          </Styles.StyledCardDescription>
+        </Styles.StyledSectionCard>
+
+        <Styles.StyledSectionCard>
+          <Styles.StyledCardIcon>
+            <HiLightningBolt size={50} color="#F5E027" />
+          </Styles.StyledCardIcon>
+          <Styles.StyledCardTitle>LIVE</Styles.StyledCardTitle>
+          <Styles.StyledCardDescription>
+            With Microsoft&apos;s Monaco Editor which is also used by VS Code,
+            easily edit your JSON and directly view through the graphs. Also
+            there&apos;s a JSON validator above of it to make sure there is no
+            type error.
+          </Styles.StyledCardDescription>
+        </Styles.StyledSectionCard>
+      </Styles.StyledFeaturesSection>
+
+      <Styles.StyledGitHubSection id="github">
+        <TwitterTweetEmbed
+          tweetId="1519363257794015233"
+          options={{
+            width: "600",
+            align: "center",
+          }}
+        />
+        <Styles.StyledSectionArea>
+          <Styles.StyledSubTitle>Open Source Community</Styles.StyledSubTitle>
+          <Styles.StyledMinorTitle>
+            Join the Open Source Community by suggesting new ideas, support by
+            contributing; implementing new features, fixing bugs and doing
+            changes minor to major!
+          </Styles.StyledMinorTitle>
+          <Styles.StyledButton
+            onClick={() => push("https://github.com/AykutSarac/jsonvisio.com")}
+            status="SECONDARY"
+          >
+            STAR ON GITHUB
+          </Styles.StyledButton>
+        </Styles.StyledSectionArea>
+      </Styles.StyledGitHubSection>
+
+      <Styles.StyledPaidSection>
+        <Styles.StyledProducthunt>
+          <Styles.StyledSubTitle>
+            Support JSON Visio at
+            <br />
+            <Styles.StyledHighlightedText>
+              Product Hunt
+            </Styles.StyledHighlightedText>
+          </Styles.StyledSubTitle>
+          <Producthunt />
+        </Styles.StyledProducthunt>
+        <Styles.StyledAffiliate>
+          <Styles.StyledSubTitle>Affiliate</Styles.StyledSubTitle>
+          <CarbonAds />
+        </Styles.StyledAffiliate>
+      </Styles.StyledPaidSection>
+
+      <Styles.StyledSponsorSection id="sponsor">
+        <Styles.StyledSubTitle>Sponsors</Styles.StyledSubTitle>
+        <Styles.StyledMinorTitle>
+          Your supports make JSON Visio possible to continue and accessible for
+          everyone!
+        </Styles.StyledMinorTitle>
+        <Styles.StyledButton
+          status="SUCCESS"
+          onClick={() => push("https://www.patreon.com/aykutsarac")}
+        >
+          Become A Sponsor!
+        </Styles.StyledButton>
+      </Styles.StyledSponsorSection>
+
+      <Styles.StyledFooter>
+        <Styles.StyledFooterText>
+          © 2022 JSON Visio - {pkg.version}
+        </Styles.StyledFooterText>
+        <Styles.StyledIconLinks>
+          <Styles.StyledNavLink
+            href="https://github.com/AykutSarac/jsonvisio.com"
+            target="_blank"
+            aria-label="github"
+          >
+            <FaGithub size={26} />
+          </Styles.StyledNavLink>
+
+          <Styles.StyledNavLink
+            href="https://www.linkedin.com/in/aykutsarac/"
+            target="_blank"
+            aria-label="linkedin"
+          >
+            <FaLinkedin size={26} />
+          </Styles.StyledNavLink>
+
+          <Styles.StyledNavLink
+            href="https://twitter.com/aykutsarach"
+            target="_blank"
+            aria-label="twitter"
+          >
+            <FaTwitter size={26} />
+          </Styles.StyledNavLink>
+        </Styles.StyledIconLinks>
+      </Styles.StyledFooter>
+    </Styles.StyledHome>
+  );
+};
+
+export default Home;

+ 299 - 0
src/containers/Home/styles.tsx

@@ -0,0 +1,299 @@
+import { Button } from "src/components/Button";
+import styled from "styled-components";
+
+export const StyledHome = styled.div`
+  display: flex;
+  flex-direction: column;
+  gap: 8em;
+  font-family: "Roboto", sans-serif;
+
+  * {
+    box-sizing: border-box;
+  }
+
+  @media only screen and (max-width: 768px) {
+    gap: 3em;
+  }
+`;
+
+export const StyledGradientText = styled.span`
+  background: #ffb76b;
+  background: linear-gradient(
+    to right,
+    #ffb76b 0%,
+    #ffa73d 30%,
+    #ff7c00 60%,
+    #ff7f04 100%
+  );
+  background-clip: text;
+  -webkit-background-clip: text;
+  -webkit-text-fill-color: transparent;
+`;
+
+export const StyledNavbar = styled.nav`
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  width: 100%;
+  padding: 16px 16px;
+  gap: 20px;
+
+  @media only screen and (max-width: 768px) {
+    a:first-of-type {
+      display: none;
+    }
+  }
+`;
+
+export const StyledHeroSection = styled.section`
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  gap: 1.5em;
+  min-height: 45vh;
+  padding: 0 3%;
+`;
+
+export const StyledNavLink = styled.a`
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  font-size: 1rem;
+  cursor: pointer;
+  transition: color 0.2s;
+
+  &:hover {
+    font-weight: 500;
+    color: ${({ theme }) => theme.ORANGE};
+  }
+`;
+
+export const StyledTitle = styled.h1`
+  font-size: 5rem;
+  font-weight: 900;
+  margin: 0;
+
+  @media only screen and (max-width: 768px) {
+    font-size: 3rem;
+  }
+`;
+
+export const StyledSubTitle = styled.h2`
+  color: #dedede;
+  text-align: center;
+  font-size: 2.5rem;
+  max-width: 40rem;
+  margin: 0;
+
+  @media only screen and (max-width: 768px) {
+    font-size: 1.75rem;
+  }
+`;
+
+export const StyledMinorTitle = styled.p`
+  color: #b4b4b4;
+  text-align: center;
+  font-size: 1.25rem;
+  margin: 0;
+  letter-spacing: 1.2px;
+
+  @media only screen and (max-width: 992px) {
+    font-size: 1rem;
+  }
+`;
+
+export const StyledButton = styled(Button)`
+  background: ${({ status }) => !status && "#a13cc2"};
+  padding: 12px 24px;
+
+  div {
+    font-family: "Roboto", sans-serif;
+    font-weight: 700;
+    font-size: 16px;
+  }
+`;
+
+export const StyledFeaturesSection = styled.section`
+  display: flex;
+  max-width: 85%;
+  margin: 0 auto;
+  gap: 2rem;
+  padding: 60px 3%;
+
+  @media only screen and (max-width: 768px) {
+    flex-direction: column;
+    max-width: 80%;
+  }
+`;
+
+export const StyledSectionCard = styled.div`
+  text-align: center;
+  flex: 1;
+`;
+
+export const StyledCardTitle = styled.div`
+  font-weight: 700;
+  font-size: 1.5rem;
+  padding: 1.5rem 0 0.5rem;
+  letter-spacing: 1px;
+`;
+
+export const StyledCardIcon = styled.div``;
+
+export const StyledCardDescription = styled.p`
+  color: #e0e0e0;
+  text-align: left;
+  line-height: 1.5rem;
+  font-size: 0.875rem;
+`;
+
+export const StyledGitHubSection = styled.section`
+  display: flex;
+  flex-direction: row;
+  justify-content: space-between;
+  max-width: 85%;
+  margin: 0 auto;
+  gap: 4rem;
+  line-height: 1.5;
+  padding: 60px 3%;
+
+  & > div {
+    width: 100%;
+  }
+
+  @media only screen and (max-width: 768px) {
+    flex-direction: column-reverse;
+    max-width: 80%;
+  }
+`;
+
+export const StyledSectionArea = styled.div`
+  display: flex;
+  flex-direction: column;
+  gap: 2rem;
+  width: 40%;
+  margin-top: 3rem;
+
+  h2,
+  p {
+    text-align: left;
+    letter-spacing: unset;
+  }
+
+  @media only screen and (max-width: 768px) {
+    width: 100%;
+
+    h2,
+    p {
+      text-align: center;
+    }
+
+    button {
+      align-self: center;
+    }
+  }
+`;
+
+export const StyledSponsorSection = styled.section`
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  max-width: 85%;
+  margin: 0 auto;
+  gap: 2rem;
+  line-height: 1.5;
+  padding: 60px 3%;
+
+  @media only screen and (max-width: 768px) {
+    max-width: 80%;
+  }
+`;
+
+export const StyledPreviewSection = styled.section`
+  display: flex;
+  flex-direction: row;
+  justify-content: space-between;
+  max-width: 85%;
+  margin: 0 auto;
+  padding: 0 3%;
+
+  @media only screen and (max-width: 768px) {
+    display: none;
+    max-width: 80%;
+  }
+`;
+
+export const StyledImage = styled.img`
+  max-width: 100%;
+  filter: drop-shadow(0px 0px 12px rgba(255, 255, 255, 0.6));
+`;
+
+export const StyledFooter = styled.footer`
+  display: flex;
+  flex-direction: row;
+  justify-content: space-between;
+  width: 80%;
+  margin: 0 auto;
+  padding: 30px 3%;
+  border-top: 1px solid #b4b4b4;
+  opacity: 0.7;
+`;
+
+export const StyledFooterText = styled.p`
+  color: #b4b4b4;
+`;
+
+export const StyledIconLinks = styled.div`
+  display: flex;
+  gap: 20px;
+
+  ${StyledNavLink} {
+    color: unset;
+  }
+`;
+
+export const StyledHighlightedText = styled.span`
+  text-decoration: underline;
+  text-decoration-style: dashed;
+  text-decoration-color: #eab308;
+`;
+
+export const StyledProducthunt = styled.div`
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  align-items: center;
+  gap: 3rem;
+  border-right: 1px solid white;
+  padding-right: 3rem;
+
+  @media only screen and (max-width: 768px) {
+    border-right: none;
+    border-bottom: 1px solid white;
+    padding-bottom: 3rem;
+    padding-right: 0;
+  }
+`;
+
+export const StyledPaidSection = styled.section`
+  display: flex;
+  max-width: 85%;
+  margin: 0 auto;
+  gap: 2rem;
+  padding: 60px 3%;
+
+  @media only screen and (max-width: 768px) {
+    flex-direction: column;
+    max-width: 80%;
+  }
+`;
+
+export const StyledAffiliate = styled.div`
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  align-items: center;
+  gap: 3rem;
+`;

+ 0 - 0
src/pages/editor.tsx → src/pages/Editor/index.tsx


+ 2 - 3
src/pages/_app.tsx

@@ -2,16 +2,15 @@ import React from "react";
 import type { AppProps } from "next/app";
 import { Toaster } from "react-hot-toast";
 import { ThemeProvider } from "styled-components";
-import * as Sentry from "@sentry/nextjs";
+import { init } from "@sentry/nextjs";
 
 import GlobalStyle from "src/constants/globalStyle";
 import { darkTheme, lightTheme } from "src/constants/theme";
 import { useConfig, withConfig } from "src/hocs/config";
 import { GoogleAnalytics } from "src/components/GoogleAnalytics";
-import Script from "next/script";
 
 if (process.env.NODE_ENV !== "development") {
-  Sentry.init({
+  init({
     dsn: "https://[email protected]/6495191",
     tracesSampleRate: 0.5,
   });

+ 4 - 506
src/pages/index.tsx

@@ -1,510 +1,8 @@
 import React from "react";
-import Head from "next/head";
-import Link from "next/link";
-import { useRouter } from "next/router";
-import { FaGithub, FaLinkedin, FaTwitter } from "react-icons/fa";
-import {
-  HiCursorClick,
-  HiLightningBolt,
-  HiOutlineDownload,
-  HiOutlineSearchCircle,
-} from "react-icons/hi";
-import { TwitterTweetEmbed } from "react-twitter-embed";
-import { Button } from "src/components/Button";
-import { Producthunt } from "src/components/Producthunt";
-import { CarbonAds } from "src/components/CarbonAds";
-import styled from "styled-components";
-import pkg from "../../package.json";
+import Home from "src/containers/Home";
 
-const StyledHome = styled.div`
-  display: flex;
-  flex-direction: column;
-  gap: 8em;
-  font-family: "Roboto", sans-serif;
-
-  * {
-    box-sizing: border-box;
-  }
-
-  @media only screen and (max-width: 768px) {
-    gap: 3em;
-  }
-`;
-
-const StyledGradientText = styled.span`
-  background: #ffb76b;
-  background: linear-gradient(
-    to right,
-    #ffb76b 0%,
-    #ffa73d 30%,
-    #ff7c00 60%,
-    #ff7f04 100%
-  );
-  background-clip: text;
-  -webkit-background-clip: text;
-  -webkit-text-fill-color: transparent;
-`;
-
-const StyledNavbar = styled.nav`
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  width: 100%;
-  padding: 16px 16px;
-  gap: 20px;
-
-  @media only screen and (max-width: 768px) {
-    a:first-of-type {
-      display: none;
-    }
-  }
-`;
-
-const StyledHeroSection = styled.section`
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  gap: 1.5em;
-  min-height: 45vh;
-  padding: 0 3%;
-`;
-
-const StyledNavLink = styled.a`
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  font-size: 1rem;
-  cursor: pointer;
-  transition: color 0.2s;
-
-  &:hover {
-    font-weight: 500;
-    color: ${({ theme }) => theme.ORANGE};
-  }
-`;
-
-const StyledTitle = styled.h1`
-  font-size: 5rem;
-  font-weight: 900;
-  margin: 0;
-
-  @media only screen and (max-width: 768px) {
-    font-size: 3rem;
-  }
-`;
-
-const StyledSubTitle = styled.h2`
-  color: #dedede;
-  text-align: center;
-  font-size: 2.5rem;
-  max-width: 40rem;
-  margin: 0;
-
-  @media only screen and (max-width: 768px) {
-    font-size: 1.75rem;
-  }
-`;
-
-const StyledMinorTitle = styled.p`
-  color: #b4b4b4;
-  text-align: center;
-  font-size: 1.25rem;
-  margin: 0;
-  letter-spacing: 1.2px;
-
-  @media only screen and (max-width: 992px) {
-    font-size: 1rem;
-  }
-`;
-
-const StyledButton = styled(Button)`
-  background: ${({ status }) => !status && "#a13cc2"};
-  padding: 12px 24px;
-
-  div {
-    font-family: "Roboto", sans-serif;
-    font-weight: 700;
-    font-size: 16px;
-  }
-`;
-
-const StyledFeaturesSection = styled.section`
-  display: flex;
-  max-width: 85%;
-  margin: 0 auto;
-  gap: 2rem;
-  padding: 60px 3%;
-
-  @media only screen and (max-width: 768px) {
-    flex-direction: column;
-    max-width: 80%;
-  }
-`;
-
-const StyledSectionCard = styled.div`
-  text-align: center;
-  flex: 1;
-`;
-
-const StyledCardTitle = styled.div`
-  font-weight: 700;
-  font-size: 1.5rem;
-  padding: 1.5rem 0 0.5rem;
-  letter-spacing: 1px;
-`;
-
-const StyledCardIcon = styled.div``;
-
-const StyledCardDescription = styled.p`
-  color: #e0e0e0;
-  text-align: left;
-  line-height: 1.5rem;
-  font-size: 0.875rem;
-`;
-
-const StyledGitHubSection = styled.section`
-  display: flex;
-  flex-direction: row;
-  justify-content: space-between;
-  max-width: 85%;
-  margin: 0 auto;
-  gap: 4rem;
-  line-height: 1.5;
-  padding: 60px 3%;
-
-  & > div {
-    width: 100%;
-  }
-
-  @media only screen and (max-width: 768px) {
-    flex-direction: column-reverse;
-    max-width: 80%;
-  }
-`;
-
-const StyledSectionArea = styled.div`
-  display: flex;
-  flex-direction: column;
-  gap: 2rem;
-  width: 40%;
-  margin-top: 3rem;
-
-  h2,
-  p {
-    text-align: left;
-    letter-spacing: unset;
-  }
-
-  @media only screen and (max-width: 768px) {
-    width: 100%;
-
-    h2,
-    p {
-      text-align: center;
-    }
-
-    button {
-      align-self: center;
-    }
-  }
-`;
-
-const StyledSponsorSection = styled.section`
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  max-width: 85%;
-  margin: 0 auto;
-  gap: 2rem;
-  line-height: 1.5;
-  padding: 60px 3%;
-
-  @media only screen and (max-width: 768px) {
-    max-width: 80%;
-  }
-`;
-
-const StyledPreviewSection = styled.section`
-  display: flex;
-  flex-direction: row;
-  justify-content: space-between;
-  max-width: 85%;
-  margin: 0 auto;
-  padding: 0 3%;
-
-  @media only screen and (max-width: 768px) {
-    display: none;
-    max-width: 80%;
-  }
-`;
-
-const StyledImage = styled.img`
-  max-width: 100%;
-  filter: drop-shadow(0px 0px 12px rgba(255, 255, 255, 0.6));
-`;
-
-const StyledFooter = styled.footer`
-  display: flex;
-  flex-direction: row;
-  justify-content: space-between;
-  width: 80%;
-  margin: 0 auto;
-  padding: 30px 3%;
-  border-top: 1px solid #b4b4b4;
-  opacity: 0.7;
-`;
-
-const StyledFooterText = styled.p`
-  color: #b4b4b4;
-`;
-
-const StyledIconLinks = styled.div`
-  display: flex;
-  gap: 20px;
-
-  ${StyledNavLink} {
-    color: unset;
-  }
-`;
-
-const StyledHighlightedText = styled.span`
-  text-decoration: underline;
-  text-decoration-style: dashed;
-  text-decoration-color: #eab308;
-`;
-
-const StyledProducthunt = styled.div`
-  display: flex;
-  flex-direction: column;
-  justify-content: space-between;
-  align-items: center;
-  gap: 3rem;
-  border-right: 1px solid white;
-  padding-right: 3rem;
-
-  @media only screen and (max-width: 768px) {
-    border-right: none;
-    border-bottom: 1px solid white;
-    padding-bottom: 3rem;
-    padding-right: 0;
-  }
-`;
-
-const StyledPaidSection = styled.section`
-  display: flex;
-  max-width: 85%;
-  margin: 0 auto;
-  gap: 2rem;
-  padding: 60px 3%;
-
-  @media only screen and (max-width: 768px) {
-    flex-direction: column;
-    max-width: 80%;
-  }
-`;
-
-const StyledAffiliate = styled.div`
-  display: flex;
-  flex-direction: column;
-  justify-content: space-between;
-  align-items: center;
-  gap: 3rem;
-`;
-
-const Home: React.FC = () => {
-  const { push } = useRouter();
-  const [isMobile, setIsMobile] = React.useState(false);
-
-  React.useEffect(() => {
-    setIsMobile(window.screen.width <= 768);
-  }, []);
-
-  return (
-    <StyledHome>
-      <Head>
-        <title>JSON Visio - Directly onto graphs</title>
-      </Head>
-      <StyledNavbar>
-        <StyledNavLink href="/editor">Editor</StyledNavLink>
-        <Link href="#features" passHref>
-          <StyledNavLink>Features</StyledNavLink>
-        </Link>
-        <Link href="#sponsor" passHref>
-          <StyledNavLink>Sponsor</StyledNavLink>
-        </Link>
-        <StyledNavLink
-          href="https://github.com/AykutSarac/jsonvisio.com"
-          target="_blank"
-          rel="external"
-        >
-          GitHub
-        </StyledNavLink>
-      </StyledNavbar>
-
-      <StyledHeroSection id="main">
-        <StyledTitle>
-          <StyledGradientText>JSON</StyledGradientText> Visio
-        </StyledTitle>
-        <StyledSubTitle>
-          Seamlessly visualize your JSON data{" "}
-          <StyledHighlightedText>instantly</StyledHighlightedText> into graphs.
-        </StyledSubTitle>
-        <StyledMinorTitle>Paste - Import - Fetch!</StyledMinorTitle>
-        <StyledButton
-          onClick={() => window.location.replace("/editor")}
-          disabled={isMobile}
-        >
-          {isMobile ? "Incompatible Device" : "GO TO EDITOR"}
-        </StyledButton>
-      </StyledHeroSection>
-
-      <StyledPreviewSection>
-        <StyledImage
-          width="1200"
-          height="auto"
-          src="/jsonvisio-screenshot.png"
-          alt="preview"
-        />
-      </StyledPreviewSection>
-
-      <StyledFeaturesSection id="features">
-        <StyledSectionCard>
-          <StyledCardIcon>
-            <HiCursorClick size={50} color="#3BA55D" />
-          </StyledCardIcon>
-          <StyledCardTitle>EASY-TO-USE</StyledCardTitle>
-          <StyledCardDescription>
-            Don&apos;t even bother to update your schema to view your JSON into
-            graphs; directly paste, import or fetch! JSON Visio helps you to
-            visualize without any additional values and save your time.
-          </StyledCardDescription>
-        </StyledSectionCard>
-
-        <StyledSectionCard>
-          <StyledCardIcon>
-            <HiOutlineSearchCircle size={50} color="#5865F2" />
-          </StyledCardIcon>
-          <StyledCardTitle>SEARCH</StyledCardTitle>
-          <StyledCardDescription>
-            Have a huge file of values, keys or arrays? Worry no more, type in
-            the keyword you are looking for into search input and it will take
-            you to each node with matching result highlighting the line to
-            understand better!
-          </StyledCardDescription>
-        </StyledSectionCard>
-
-        <StyledSectionCard>
-          <StyledCardIcon>
-            <HiOutlineDownload size={50} color="#DA2877" />
-          </StyledCardIcon>
-          <StyledCardTitle>DOWNLOAD</StyledCardTitle>
-          <StyledCardDescription>
-            Download the graph to your local machine and use it wherever you
-            want, to your blogs, website or make it a poster and paste to the
-            wall. Who wouldn&apos;t want to see a JSON Visio graph onto their
-            wall, eh?
-          </StyledCardDescription>
-        </StyledSectionCard>
-
-        <StyledSectionCard>
-          <StyledCardIcon>
-            <HiLightningBolt size={50} color="#F5E027" />
-          </StyledCardIcon>
-          <StyledCardTitle>LIVE</StyledCardTitle>
-          <StyledCardDescription>
-            With Microsoft&apos;s Monaco Editor which is also used by VS Code,
-            easily edit your JSON and directly view through the graphs. Also
-            there&apos;s a JSON validator above of it to make sure there is no
-            type error.
-          </StyledCardDescription>
-        </StyledSectionCard>
-      </StyledFeaturesSection>
-
-      <StyledGitHubSection id="github">
-        <TwitterTweetEmbed
-          tweetId="1519363257794015233"
-          options={{
-            width: "600",
-            align: "center",
-          }}
-        />
-        <StyledSectionArea>
-          <StyledSubTitle>Open Source Community</StyledSubTitle>
-          <StyledMinorTitle>
-            Join the Open Source Community by suggesting new ideas, support by
-            contributing; implementing new features, fixing bugs and doing
-            changes minor to major!
-          </StyledMinorTitle>
-          <StyledButton
-            onClick={() => push("https://github.com/AykutSarac/jsonvisio.com")}
-            status="SECONDARY"
-          >
-            STAR ON GITHUB
-          </StyledButton>
-        </StyledSectionArea>
-      </StyledGitHubSection>
-
-      <StyledPaidSection>
-        <StyledProducthunt>
-          <StyledSubTitle>
-            Support JSON Visio at
-            <br />
-            <StyledHighlightedText>Product Hunt</StyledHighlightedText>
-          </StyledSubTitle>
-          <Producthunt />
-        </StyledProducthunt>
-        <StyledAffiliate>
-          <StyledSubTitle>Affiliate</StyledSubTitle>
-          <CarbonAds />
-        </StyledAffiliate>
-      </StyledPaidSection>
-
-      <StyledSponsorSection id="sponsor">
-        <StyledSubTitle>Sponsors</StyledSubTitle>
-        <StyledMinorTitle>
-          Your supports make JSON Visio possible to continue and accessible for
-          everyone!
-        </StyledMinorTitle>
-        <StyledButton
-          status="SUCCESS"
-          onClick={() => push("https://www.patreon.com/aykutsarac")}
-        >
-          Become A Sponsor!
-        </StyledButton>
-      </StyledSponsorSection>
-
-      <StyledFooter>
-        <StyledFooterText>© 2022 JSON Visio - {pkg.version}</StyledFooterText>
-        <StyledIconLinks>
-          <StyledNavLink
-            href="https://github.com/AykutSarac/jsonvisio.com"
-            target="_blank"
-            aria-label="github"
-          >
-            <FaGithub size={26} />
-          </StyledNavLink>
-
-          <StyledNavLink
-            href="https://www.linkedin.com/in/aykutsarac/"
-            target="_blank"
-            aria-label="linkedin"
-          >
-            <FaLinkedin size={26} />
-          </StyledNavLink>
-
-          <StyledNavLink
-            href="https://twitter.com/aykutsarach"
-            target="_blank"
-            aria-label="twitter"
-          >
-            <FaTwitter size={26} />
-          </StyledNavLink>
-        </StyledIconLinks>
-      </StyledFooter>
-    </StyledHome>
-  );
+const LandingPage: React.FC = () => {
+  return <Home />;
 };
 
-export default Home;
+export default LandingPage;