diff --git a/src/app/docs/layout.tsx b/src/app/docs/layout.tsx
new file mode 100644
index 000000000..426c075db
--- /dev/null
+++ b/src/app/docs/layout.tsx
@@ -0,0 +1,14 @@
+import { PropsWithChildren } from 'react';
+
+import { DocsLayout } from '@/app/docs/components/docs-layout/docs-layout';
+import { fetchMenu } from '@/app/docs/utils/fetch-menu';
+
+export default async function RootLayout({ children }: PropsWithChildren) {
+ const menu = await fetchMenu('en');
+
+ return (
+
+ {children}
+
+ );
+}
diff --git a/src/app/docs/og.png/route.ts b/src/app/docs/og.png/route.ts
new file mode 100644
index 000000000..991ad759b
--- /dev/null
+++ b/src/app/docs/og.png/route.ts
@@ -0,0 +1,15 @@
+import { PAGE_TYPE, pageStore, resolvePageLocale } from '@/entities/page';
+import { createPageTree } from '@/shared/og/view/pages-tree/generate-pages-tree';
+
+export { DYNAMIC as dynamic } from '@/shared/constants';
+
+export async function GET() {
+ const locale = resolvePageLocale();
+ const { seoOgImageTitle: title, seoOgImageDescription: description } =
+ await pageStore.loadPage(PAGE_TYPE.DOCS, locale);
+
+ return createPageTree({
+ title,
+ description,
+ });
+}
diff --git a/src/app/docs/page.tsx b/src/app/docs/page.tsx
new file mode 100644
index 000000000..21784bdc3
--- /dev/null
+++ b/src/app/docs/page.tsx
@@ -0,0 +1,29 @@
+import { DocsContent } from '@/app/docs/components/docs-content/docs-content';
+import { fetchMarkdownContent } from '@/app/docs/utils/fetch-markdown-content';
+import { PAGE_TYPE, pageStore, resolvePageLocale } from '@/entities/page';
+import { docsLangMetadata } from '@/metadata/docs';
+import { generatePageMetadata } from '@/shared/helpers/generate-page-metadata';
+
+export async function generateMetadata() {
+ const locale = resolvePageLocale();
+ const { title, seoDescription: description, seoKeywords: keywords } =
+ await pageStore.loadPage(PAGE_TYPE.DOCS, locale);
+ const { canonical, robots } = docsLangMetadata;
+
+ const metadata = generatePageMetadata({
+ title,
+ description,
+ imagePath: `/docs/og.png`,
+ keywords,
+ alternates: { canonical },
+ robots,
+ });
+
+ return metadata;
+}
+
+export default async function DocsIndex() {
+ const indexContent = await fetchMarkdownContent('en');
+
+ return
;
+}
diff --git a/src/app/docs/utils/fetch-menu.ts b/src/app/docs/utils/fetch-menu.ts
index ad0749243..ade65a225 100644
--- a/src/app/docs/utils/fetch-menu.ts
+++ b/src/app/docs/utils/fetch-menu.ts
@@ -1,7 +1,6 @@
import { Menu } from '../types';
-import { Language } from '@/shared/types';
-export const fetchMenu = async (lang: Language): Promise