diff --git a/apps/web/components/Body.tsx b/apps/web/components/Body.tsx
new file mode 100644
index 0000000..ff9a41b
--- /dev/null
+++ b/apps/web/components/Body.tsx
@@ -0,0 +1,20 @@
+import React from 'react';
+
+/**
+ * Body Component.
+ * @param {{children: JSX.Element}} param0 BodyComponent props.
+ * @return {JSX.Element}
+ */
+export const BodyComponent = ({
+ children,
+}: {
+ children: JSX.Element;
+}): JSX.Element => {
+ return (
+
+
+
+ );
+};
diff --git a/apps/web/components/FormInput.tsx b/apps/web/components/FormInput.tsx
new file mode 100644
index 0000000..b816a88
--- /dev/null
+++ b/apps/web/components/FormInput.tsx
@@ -0,0 +1,44 @@
+import React from 'react';
+
+/**
+ * FormInput Component.
+ * @return {JSX.Element}
+ */
+export const FormInputComponent = (): JSX.Element => {
+ const [url, setUrl] = React.useState('');
+
+ return (
+
+
+
+ Fill TikTok's Video URL below:
+
+
+
+
+ );
+};
+
+export default FormInputComponent;
diff --git a/apps/web/components/Header.tsx b/apps/web/components/Header.tsx
new file mode 100644
index 0000000..2243235
--- /dev/null
+++ b/apps/web/components/Header.tsx
@@ -0,0 +1,36 @@
+/**
+ * Next Head Component.
+ * @param {{title: string, children: JSX.Element }} param0 NextHeadComponent args.
+ * @return {JSX.Element}
+ */
+export const NextHeadComponent = ({
+ title,
+ children,
+}: {
+ title?: string;
+ children?: JSX.Element;
+}): JSX.Element => {
+ return (
+ <>
+
{title ?? 'TikTok Downloader'}
+
+
+
+
+
+ {children}
+ >
+ );
+};
diff --git a/apps/web/components/TabSelector.tsx b/apps/web/components/TabSelector.tsx
new file mode 100644
index 0000000..72e663e
--- /dev/null
+++ b/apps/web/components/TabSelector.tsx
@@ -0,0 +1,42 @@
+import React, {ComponentType} from 'react';
+
+type TabPage = {
+ name: string;
+ component: ComponentType;
+};
+
+/**
+ *
+ * @param {{tabs: TabPage[]}} param0 TabSelector props.
+ * @return {JSX.Element}
+ */
+export const TabSelectorComponent = ({
+ tabs,
+}: {
+ tabs: TabPage[];
+}): JSX.Element => {
+ const [tab, setTab] = React.useState();
+
+ return (
+ <>
+
+ {tab ? tab.component : <>>}
+ >
+ );
+};
diff --git a/apps/web/pages/_document.tsx b/apps/web/pages/_document.tsx
new file mode 100644
index 0000000..9870228
--- /dev/null
+++ b/apps/web/pages/_document.tsx
@@ -0,0 +1,28 @@
+import Document, {Head, Html, Main, NextScript} from 'next/document';
+import {BodyComponent} from '../components/Body';
+import {NextHeadComponent} from '../components/Header';
+
+/**
+ * @class TikTokDocument
+ */
+export default class TikTokDocument extends Document {
+ /**
+ * Render TikTokDocument
+ * @return {JSX.Element}
+ */
+ render(): JSX.Element {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/apps/web/pages/index.tsx b/apps/web/pages/index.tsx
index b0c334e..d743092 100644
--- a/apps/web/pages/index.tsx
+++ b/apps/web/pages/index.tsx
@@ -1,40 +1,34 @@
-import Head from 'next/head';
+import dynamic from 'next/dynamic';
+import {TabSelectorComponent} from '../components/TabSelector';
export default () => {
return (
- <>
-
- TikTok Downloader
-
- {/**
- Body
- */}
-
- {/** Header 1*/}
-
-
- TikTok Downloader
-
-
- Free, and open-source TikTok Video Downloader
-
-
+
+
+ TikTok-DL{' '}
+
+ Download TikTok Video without watermark and free ads.
+
+
- {/** Content */}
-
-
- >
+ import('../components/FormInput'),
+ {
+ loading: () => (
+
+ Wait a minute!
+
+ ),
+ ssr: false,
+ },
+ ),
+ },
+ ]}
+ />
+
);
};