diff --git a/frontend/public/preview.png b/frontend/public/preview.png
new file mode 100644
index 00000000..6affc062
Binary files /dev/null and b/frontend/public/preview.png differ
diff --git a/frontend/src/app/faqs/page.tsx b/frontend/src/app/faqs/page.tsx
new file mode 100644
index 00000000..6eca277a
--- /dev/null
+++ b/frontend/src/app/faqs/page.tsx
@@ -0,0 +1,22 @@
+'use client';
+
+import localFont from 'next/font/local';
+import Footer from '../../components/Footer';
+import { FAQ } from '../../components/FAQ';
+
+const geistSans = localFont({
+ src: '../fonts/GeistMonoVF.woff',
+ variable: '--font-geist-sans',
+ weight: '100 900',
+});
+
+export default function App() {
+ return (
+
+
+
+
+ );
+}
diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx
index af5cdd24..3e401992 100644
--- a/frontend/src/app/page.tsx
+++ b/frontend/src/app/page.tsx
@@ -1,75 +1,12 @@
-'use client';
-
-import { LoaderCircle } from 'lucide-react';
-import { type LiteralUnion, signIn } from 'next-auth/react';
-import { useCallback, useMemo, useState } from 'react';
-import { GoogleIcon } from '../components/common/GoogleIcon';
-import { DiscordIcon } from '../components/common/DiscordIcon';
-import type { BuiltInProviderType } from 'next-auth/providers/index';
+import { Metadata } from 'next';
+import { Home } from '../views/Home';
export default function App() {
- const [isLoading, setIsLoading] = useState(false);
-
- const handleAuth = useCallback(
- (provider: LiteralUnion) => () => {
- setIsLoading(true);
- signIn(provider);
- },
- [],
- );
-
- const handleGoogleAuth = useMemo(() => handleAuth('google'), [handleAuth]);
- const handleDiscordAuth = useMemo(() => handleAuth('discord'), [handleAuth]);
-
- return (
-
-
-
- Welcome to Auto-Drive
-
-
- Sign in with your Google account to start using our decentralized
- storage service
-
-
-
-
-
-
-
- );
+ return ;
}
+
+export const metadata: Metadata = {
+ title: 'Auto-Drive',
+ description:
+ 'Store, share, and download your files securely with autonomys decentralized permanent storage.',
+};
diff --git a/frontend/src/components/FAQ/index.tsx b/frontend/src/components/FAQ/index.tsx
new file mode 100644
index 00000000..29e7bee9
--- /dev/null
+++ b/frontend/src/components/FAQ/index.tsx
@@ -0,0 +1,45 @@
+'use client';
+
+import { FC, useCallback, useState } from 'react';
+import { LandingHeader } from '../common/LandingHeader';
+import { faqs } from '../../constants/faqs';
+
+export const FAQ: FC = () => {
+ const [openIndex, setOpenIndex] = useState(null);
+ const toggleFAQ = useCallback(
+ (index: number) => setOpenIndex(openIndex === index ? null : index),
+ [openIndex],
+ );
+
+ return (
+
+
+
+
+ {faqs.map((question, index) => (
+
+
+ {openIndex === index && (
+
+
+ {question.answer}
+
+
+ )}
+
+ ))}
+
+
+
+ );
+};
diff --git a/frontend/src/components/Footer/index.tsx b/frontend/src/components/Footer/index.tsx
new file mode 100644
index 00000000..b949920c
--- /dev/null
+++ b/frontend/src/components/Footer/index.tsx
@@ -0,0 +1,162 @@
+import { EXTERNAL_ROUTES } from '../../constants/routes';
+import type { FC } from 'react';
+import { currentYear } from '../../utils/time';
+import { LogoIcon } from '../common/LogoIcon';
+
+const Footer: FC = () => {
+ return (
+
+ );
+};
+
+export default Footer;
diff --git a/frontend/src/components/common/DiscordIcon.tsx b/frontend/src/components/common/DiscordIcon.tsx
index 6101d9de..ded60603 100644
--- a/frontend/src/components/common/DiscordIcon.tsx
+++ b/frontend/src/components/common/DiscordIcon.tsx
@@ -1,4 +1,8 @@
-export const DiscordIcon = () => {
+export const DiscordIcon = ({
+ fillColor = '#5865F2',
+}: {
+ fillColor?: string;
+}) => {
return (