diff --git a/inertia/mantine/components/home/feature.tsx b/inertia/mantine/components/home/feature.tsx
new file mode 100644
index 0000000..408af8b
--- /dev/null
+++ b/inertia/mantine/components/home/feature.tsx
@@ -0,0 +1,48 @@
+import { Text, ThemeIcon, rem } from '@mantine/core';
+import { useTranslation } from 'react-i18next';
+import { AiFillFolderOpen } from 'react-icons/ai';
+import { FaUser } from 'react-icons/fa';
+import { IoIosLink, IoIosSearch, IoIosShareAlt } from 'react-icons/io';
+import { IoExtensionPuzzleOutline } from 'react-icons/io5';
+import { featureList } from '~/mantine/components/home/feature_list';
+
+type FeatureName = (typeof featureList)[number];
+
+function getIcon(name: FeatureName) {
+ switch (name) {
+ case 'collection':
+ return AiFillFolderOpen;
+ case 'link':
+ return IoIosLink;
+ case 'search':
+ return IoIosSearch;
+ case 'extension':
+ return IoExtensionPuzzleOutline;
+ case 'share':
+ return IoIosShareAlt;
+ case 'contribute':
+ return FaUser;
+ }
+}
+
+interface FeatureProps {
+ name: FeatureName;
+}
+
+export function Feature({ name: featureName }: FeatureProps) {
+ const { t } = useTranslation('about');
+ const Icon = getIcon(featureName);
+ return (
+
+
+
+
+
+ {t(`${featureName}.title`)}
+
+
+ {t(`${featureName}.text`)}
+
+
+ );
+}
diff --git a/inertia/mantine/components/home/feature_list.tsx b/inertia/mantine/components/home/feature_list.tsx
new file mode 100644
index 0000000..3a5ec8e
--- /dev/null
+++ b/inertia/mantine/components/home/feature_list.tsx
@@ -0,0 +1,24 @@
+import { SimpleGrid } from '@mantine/core';
+import { Feature } from '~/mantine/components/home/feature';
+
+export const featureList = [
+ 'collection',
+ 'link',
+ 'search',
+ 'extension',
+ 'share',
+ 'contribute',
+] as const;
+
+export const FeatureList = () => (
+
+ {featureList.map((feature, index) => (
+
+ ))}
+
+);
diff --git a/inertia/components/layouts/mantine/_mantine_base_layout.tsx b/inertia/mantine/layouts/_mantine_base_layout.tsx
similarity index 97%
rename from inertia/components/layouts/mantine/_mantine_base_layout.tsx
rename to inertia/mantine/layouts/_mantine_base_layout.tsx
index 81146b6..d84304f 100644
--- a/inertia/components/layouts/mantine/_mantine_base_layout.tsx
+++ b/inertia/mantine/layouts/_mantine_base_layout.tsx
@@ -6,7 +6,7 @@ import { useTranslation } from 'react-i18next';
import '@mantine/core/styles.css';
import '@mantine/spotlight/styles.css';
-import '../../../styles/index.css';
+import '../../styles/index.css';
const theme = createTheme({});
const TRANSITION_IN_CLASS = '__transition_fadeIn';
diff --git a/inertia/components/layouts/mantine/mantine_content_layout.tsx b/inertia/mantine/layouts/mantine_content_layout.tsx
similarity index 90%
rename from inertia/components/layouts/mantine/mantine_content_layout.tsx
rename to inertia/mantine/layouts/mantine_content_layout.tsx
index 18c5bee..7d553f7 100644
--- a/inertia/components/layouts/mantine/mantine_content_layout.tsx
+++ b/inertia/mantine/layouts/mantine_content_layout.tsx
@@ -1,8 +1,8 @@
import { Container } from '@mantine/core';
import { PropsWithChildren } from 'react';
import { MantineFooter } from '~/components/footer/mantine_footer';
-import BaseLayout from '~/components/layouts/mantine/_mantine_base_layout';
import MantineNavbar from '~/components/navbar/mantine_navbar';
+import BaseLayout from '~/mantine/layouts/_mantine_base_layout';
const MantineContentLayout = ({ children }: PropsWithChildren) => (
-
-
-
-
- {t(`${featureName}.title`)}
-
-
- {t(`${featureName}.text`)}
-
-
- );
-}
-
function HomePage() {
const { t } = useTranslation('about');
return (
@@ -77,16 +17,7 @@ function HomePage() {
-
- {features.map((feature, index) => (
-
- ))}
-
+
);
}
diff --git a/inertia/pages/privacy.tsx b/inertia/pages/privacy.tsx
index 1165cfa..90f48b2 100644
--- a/inertia/pages/privacy.tsx
+++ b/inertia/pages/privacy.tsx
@@ -1,6 +1,6 @@
import { ReactNode } from 'react';
import { useTranslation } from 'react-i18next';
-import { MantineContentLayout } from '~/components/layouts/mantine/mantine_content_layout';
+import { MantineContentLayout } from '~/mantine/layouts/mantine_content_layout';
function PrivacyPage() {
const { t } = useTranslation('privacy');
diff --git a/inertia/pages/terms.tsx b/inertia/pages/terms.tsx
index e8dfd58..605f0f9 100644
--- a/inertia/pages/terms.tsx
+++ b/inertia/pages/terms.tsx
@@ -2,7 +2,7 @@ import { Link } from '@inertiajs/react';
import { route } from '@izzyjs/route/client';
import { ReactNode } from 'react';
import { Trans, useTranslation } from 'react-i18next';
-import { MantineContentLayout } from '~/components/layouts/mantine/mantine_content_layout';
+import { MantineContentLayout } from '~/mantine/layouts/mantine_content_layout';
function TermsPage() {
const { t } = useTranslation('terms');