diff --git a/messages/en.json b/messages/en.json
index 8d8324d..355bd23 100644
--- a/messages/en.json
+++ b/messages/en.json
@@ -22,7 +22,16 @@
},
"ChangelogPage": {
"title": "Changelog",
- "subtitle": "Stay up to date with the latest changes in our product."
+ "subtitle": "Stay up to date with the latest changes in our product"
+ },
+ "ContactPage": {
+ "title": "Contact",
+ "subtitle": "We'll help you find the right plan for your business",
+ "formDescription": "If you have any questions or feedback, please reach out to our team",
+ "name": "Name",
+ "email": "Email",
+ "message": "Message",
+ "submit": "Submit"
},
"AuthPage": {
"login": {
diff --git a/messages/zh.json b/messages/zh.json
index 26f2389..b3ea0b2 100644
--- a/messages/zh.json
+++ b/messages/zh.json
@@ -21,6 +21,15 @@
"title": "更新日志",
"subtitle": "查看我们产品的最新动态"
},
+ "ContactPage": {
+ "title": "联系我们",
+ "subtitle": "我们帮助您找到合适的计划",
+ "formDescription": "如果您有任何问题或反馈,欢迎联系我们的团队",
+ "name": "姓名",
+ "email": "邮箱",
+ "message": "消息",
+ "submit": "提交"
+ },
"AuthPage": {
"login": {
"title": "登录",
diff --git a/src/app/[locale]/(marketing)/(pages)/contact/page.tsx b/src/app/[locale]/(marketing)/(pages)/contact/page.tsx
new file mode 100644
index 0000000..5aa72c8
--- /dev/null
+++ b/src/app/[locale]/(marketing)/(pages)/contact/page.tsx
@@ -0,0 +1,65 @@
+"use client";
+
+import { Button } from '@/components/ui/button';
+import { Card } from '@/components/ui/card';
+import { Input } from '@/components/ui/input';
+import { Label } from '@/components/ui/label';
+import { Textarea } from '@/components/ui/textarea';
+import { useTranslations } from 'next-intl';
+
+/**
+ * https://nsui.irung.me/contact
+ */
+export default function ContactPage() {
+ const t = useTranslations('ContactPage');
+
+ return (
+
+ {/* Header */}
+
+
+ {t('title')}
+
+
+ {t('subtitle')}
+
+
+
+ {/* Form */}
+
+
+
+ {t('formDescription')}
+
+
+
+
+
+
+ )
+}
diff --git a/src/app/[locale]/(marketing)/(pages)/layout.tsx b/src/app/[locale]/(marketing)/(pages)/layout.tsx
index 3ebaeb8..ed49539 100644
--- a/src/app/[locale]/(marketing)/(pages)/layout.tsx
+++ b/src/app/[locale]/(marketing)/(pages)/layout.tsx
@@ -3,7 +3,7 @@ import { PropsWithChildren } from 'react';
export default function LegalLayout({ children }: PropsWithChildren) {
return (
-
+
{children}
diff --git a/src/components/page/custom-page.tsx b/src/components/page/custom-page.tsx
index 0372ed6..13f32ec 100644
--- a/src/components/page/custom-page.tsx
+++ b/src/components/page/custom-page.tsx
@@ -1,6 +1,9 @@
import { Mdx } from '@/components/shared/mdx-component';
import { getLocaleDate } from '@/lib/utils';
-import { CalendarIcon } from 'lucide-react';
+import { Separator } from '@radix-ui/react-separator';
+import { Badge, CalendarIcon, TagIcon } from 'lucide-react';
+import { version } from 'os';
+import { Card, CardHeader, CardContent } from '../ui/card';
interface CustomPageProps {
title: string;
@@ -29,9 +32,13 @@ export function CustomPage({ title, description, date, content }: CustomPageProp
{/* Content */}
-
-
-
+
+
+
+
+
+
+
);
}
\ No newline at end of file
diff --git a/src/components/ui/textarea.tsx b/src/components/ui/textarea.tsx
new file mode 100644
index 0000000..4d858bb
--- /dev/null
+++ b/src/components/ui/textarea.tsx
@@ -0,0 +1,22 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+const Textarea = React.forwardRef<
+ HTMLTextAreaElement,
+ React.ComponentProps<"textarea">
+>(({ className, ...props }, ref) => {
+ return (
+
+ )
+})
+Textarea.displayName = "Textarea"
+
+export { Textarea }
diff --git a/src/config/marketing.tsx b/src/config/marketing.tsx
index 0f2fb1a..2b67d10 100644
--- a/src/config/marketing.tsx
+++ b/src/config/marketing.tsx
@@ -132,13 +132,6 @@ export function getMenuLinks(t: TranslationFunction): NestedMenuItem[] {
href: Routes.Waitlist,
external: false
},
- {
- title: t('Marketing.navbar.pages.items.changelog.title'),
- description: t('Marketing.navbar.pages.items.changelog.description'),
- icon: ,
- href: Routes.Changelog,
- external: false
- },
{
title: t('Marketing.navbar.pages.items.roadmap.title'),
description: t('Marketing.navbar.pages.items.roadmap.description'),
@@ -146,6 +139,13 @@ export function getMenuLinks(t: TranslationFunction): NestedMenuItem[] {
href: Routes.Roadmap,
external: true
},
+ {
+ title: t('Marketing.navbar.pages.items.changelog.title'),
+ description: t('Marketing.navbar.pages.items.changelog.description'),
+ icon: ,
+ href: Routes.Changelog,
+ external: false
+ },
{
title: t('Marketing.navbar.pages.items.cookiePolicy.title'),
description: t('Marketing.navbar.pages.items.cookiePolicy.description'),