diff --git a/src/components/Markdown.tsx b/src/components/Markdown.tsx
new file mode 100644
index 0000000..5c5e4b9
--- /dev/null
+++ b/src/components/Markdown.tsx
@@ -0,0 +1,69 @@
+import React from "react";
+
+/* -------------------------------------------------------------------------- */
+/*                                  MarkDown                                  */
+/* -------------------------------------------------------------------------- */
+import ReactMarkdown from "react-markdown";
+import remarkGfm from "remark-gfm";
+
+/* -------------------------------------------------------------------------- */
+/*                                 Components                                 */
+/* -------------------------------------------------------------------------- */
+import Typography from "./typography/Typography";
+import Heading from "./typography/Heading";
+import Link from "./Link";
+
+/* -------------------------------------------------------------------------- */
+/*                                    Code                                    */
+/* -------------------------------------------------------------------------- */
+import vsc from "react-syntax-highlighter/dist/esm/styles/prism/vsc-dark-plus";
+import { darcula } from "react-syntax-highlighter/dist/esm/styles/prism";
+import docco from "react-syntax-highlighter/dist/esm/styles/prism";
+import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
+
+export type Props = {
+  markdown: string;
+};
+
+const Markdown = ({ markdown }: Props) => {
+  return (
+    <ReactMarkdown
+      remarkPlugins={[remarkGfm]}
+      children={markdown}
+      components={{
+        h1: Heading,
+        h2: Typography,
+        a: (props) => {
+          return (
+            <Link
+              href={props.href}
+              className="text-sky-600 font-bold text-base"
+              {...props}
+            >
+              {props.children}
+            </Link>
+          );
+        },
+
+        code({ node, inline, className, children, ...props }) {
+          const match = /language-(\w+)/.exec(className || "");
+          return !inline && match ? (
+            <SyntaxHighlighter
+              children={String(children).replace(/\n$/, "")}
+              style={docco}
+              language={match[1]}
+              PreTag="div"
+              {...props}
+            />
+          ) : (
+            <code className={className} {...props}>
+              {children}
+            </code>
+          );
+        },
+      }}
+    />
+  );
+};
+
+export default Markdown;