diff --git a/docs/public/background.png b/docs/public/background.png new file mode 100644 index 0000000..229ba14 Binary files /dev/null and b/docs/public/background.png differ diff --git a/docs/public/bgstyle.png b/docs/public/bgstyle.png new file mode 100644 index 0000000..3797226 Binary files /dev/null and b/docs/public/bgstyle.png differ diff --git a/docs/public/logo_circle.png b/docs/public/logo_circle.png new file mode 100644 index 0000000..3959dc9 Binary files /dev/null and b/docs/public/logo_circle.png differ diff --git a/docs/src/app/(doc-session)/documentation/js/layout.tsx b/docs/src/app/(doc-session)/documentation/js/layout.tsx new file mode 100644 index 0000000..bea29ee --- /dev/null +++ b/docs/src/app/(doc-session)/documentation/js/layout.tsx @@ -0,0 +1,13 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Javascript", +}; + +export default function JavascriptDocumentationLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return <>{children}; +} diff --git a/docs/src/app/(doc-session)/documentation/py/layout.tsx b/docs/src/app/(doc-session)/documentation/py/layout.tsx new file mode 100644 index 0000000..c71e276 --- /dev/null +++ b/docs/src/app/(doc-session)/documentation/py/layout.tsx @@ -0,0 +1,13 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Python", +}; + +export default function PythonDocumentationLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return <>{children}; +} diff --git a/docs/src/app/(doc-session)/layout.tsx b/docs/src/app/(doc-session)/layout.tsx index 2a42144..1d230fe 100644 --- a/docs/src/app/(doc-session)/layout.tsx +++ b/docs/src/app/(doc-session)/layout.tsx @@ -8,7 +8,10 @@ const t = (text: string) => translation({ text, subject: "DocumentationLayout" }); export const metadata: Metadata = { - title: t("Documentation"), + title: { + template: `${t("Documentation")} | %s`, + default: t("Documentation"), + }, description: t("Documentation for the Multiform Validator library."), }; diff --git a/docs/src/app/about/page.tsx b/docs/src/app/about/page.tsx index f6ac208..b1b6323 100644 --- a/docs/src/app/about/page.tsx +++ b/docs/src/app/about/page.tsx @@ -1,7 +1,18 @@ import "@/css/infos.css"; +import { Metadata } from "next"; + import translation, { getBrowserLang } from "@/components/Internationalization"; import MainBg from "@/components/MainBg"; +export function generateMetadata(): Metadata { + const t = (text: string) => translation({ text, subject: "About" }); + + return { + title: t("About_Page"), + description: t("About_Page_Description"), + }; +} + export default function AboutPage() { const browserLang = getBrowserLang(); diff --git a/docs/src/app/favicon.ico b/docs/src/app/favicon.ico index 739170a..a7cd379 100644 Binary files a/docs/src/app/favicon.ico and b/docs/src/app/favicon.ico differ diff --git a/docs/src/app/info/page.tsx b/docs/src/app/info/page.tsx index 5a2029d..8af829c 100644 --- a/docs/src/app/info/page.tsx +++ b/docs/src/app/info/page.tsx @@ -1,7 +1,18 @@ import "@/css/infos.css"; +import { Metadata } from "next"; + import translation from "@/components/Internationalization"; import MainBg from "@/components/MainBg"; +export function generateMetadata(): Metadata { + const t = (text: string) => translation({ text, subject: "Info" }); + + return { + title: t("Info_Page"), + description: t("info_title"), + }; +} + export default function InfoPage() { const t = (text: string) => translation({ text, subject: "Info" }); diff --git a/docs/src/app/layout.tsx b/docs/src/app/layout.tsx index 1e8c837..ab33a2f 100644 --- a/docs/src/app/layout.tsx +++ b/docs/src/app/layout.tsx @@ -13,11 +13,32 @@ const inter = Inter({ subsets: ["latin"] }); const t = (text: string) => translation({ text, subject: "HomeLayout" }); export const metadata: Metadata = { - title: t("Multiform Validator"), + metadataBase: new URL( + process.env.NEXT_PUBLIC_WEBSITE_URL || + "https://multiform-validator.3utilities.com", + ), + + title: { + template: `${t("Multiform Validator")} | %s`, + default: t("Multiform Validator"), + }, + description: t("Description"), + authors: { name: "Gabriel Logan", url: "https://github.com/gabriel-logan" }, classification: t("Classification"), - generator: "Gabriel Logan", + generator: "Next.js", + publisher: "Gabriel Logan", + creator: "Gabriel Logan", + + openGraph: { + title: t("Multiform Validator"), + description: t("Description"), + url: process.env.NEXT_PUBLIC_WEBSITE_URL, + siteName: t("Multiform Validator"), + type: "website", + }, + keywords: [ "validation", "form", @@ -45,16 +66,21 @@ export const metadata: Metadata = { "Validator", "validate", ], + verification: { google: process.env.NEXT_PUBLIC_GOOGLE_SEARCH_CONSOLE_API_KEY, }, + appleWebApp: { title: t("Multiform Validator"), capable: true, statusBarStyle: "black-translucent", }, - applicationName: t("Multiform Validator"), + manifest: "/manifest.webmanifest", + + category: "technology", + icons: [ { rel: "android-chrome-192x192", diff --git a/docs/src/app/manifest.ts b/docs/src/app/manifest.ts index 77a1dd6..a6204e2 100644 --- a/docs/src/app/manifest.ts +++ b/docs/src/app/manifest.ts @@ -46,7 +46,7 @@ export default function manifest(): MetadataRoute.Manifest { icons: [ { src: "/favicon.ico", - sizes: "48x48", + sizes: "256x256", type: "image/x-icon", }, { @@ -83,6 +83,10 @@ export default function manifest(): MetadataRoute.Manifest { src: "/safari-pinned-tab.svg", type: "image/svg+xml", }, + { + src: "/opengraph-image.png", + type: "image/png", + }, ], }; } diff --git a/docs/src/app/opengraph-image.png b/docs/src/app/opengraph-image.png new file mode 100644 index 0000000..3797226 Binary files /dev/null and b/docs/src/app/opengraph-image.png differ diff --git a/docs/src/app/privacity-polices/page.tsx b/docs/src/app/privacity-polices/page.tsx index 2649d7f..6c8ddac 100644 --- a/docs/src/app/privacity-polices/page.tsx +++ b/docs/src/app/privacity-polices/page.tsx @@ -1,8 +1,19 @@ import "@/css/infos.css"; +import { Metadata } from "next"; + import translation from "@/components/Internationalization"; import MainBg from "@/components/MainBg"; +export function generateMetadata(): Metadata { + const t = (text: string) => translation({ text, subject: "PrivacyPolices" }); + + return { + title: t("Privacy Policy"), + description: t("privacy_title"), + }; +} + export default function PrivacityPolicesPage() { const t = (text: string) => translation({ text, subject: "PrivacyPolices" }); diff --git a/docs/src/app/robots.ts b/docs/src/app/robots.ts index 071aeef..4132a8e 100644 --- a/docs/src/app/robots.ts +++ b/docs/src/app/robots.ts @@ -8,6 +8,8 @@ export default function robots(): MetadataRoute.Robots { return { rules: { userAgent: "*", + allow: "/", + disallow: ["/_next", "/api"], }, sitemap: `${hostUrl}/sitemap.xml`, }; diff --git a/docs/src/app/terms/page.tsx b/docs/src/app/terms/page.tsx index 14248c6..e21dbc2 100644 --- a/docs/src/app/terms/page.tsx +++ b/docs/src/app/terms/page.tsx @@ -1,8 +1,19 @@ import "@/css/infos.css"; +import { Metadata } from "next"; + import translation from "@/components/Internationalization"; import MainBg from "@/components/MainBg"; +export function generateMetadata(): Metadata { + const t = (text: string) => translation({ text, subject: "Terms" }); + + return { + title: t("Terms and Conditions"), + description: t("Terms and Conditions of Multiform Validator library"), + }; +} + export default function TermsPage() { const t = (text: string) => translation({ text, subject: "Terms" }); diff --git a/docs/src/locales/en/en.json b/docs/src/locales/en/en.json index 80fbc41..39ec026 100644 --- a/docs/src/locales/en/en.json +++ b/docs/src/locales/en/en.json @@ -36,6 +36,8 @@ "Support me on Buy me a coffee": "Support me on Buy me a coffee!" }, "About": { + "About_Page": "About Page", + "About_Page_Description": "Get to know Gabriel Logan, the creator of the multiform-validator library, and learn about his passion for web development, innovative solutions, and dedication to user experience.", "about_title": "Hello, I'm Gabriel Logan", "about_intro": "I consider myself a versatile programmer with a passion for both front-end and back-end development. Crafting exceptional web experiences is what drives me, and I take immense pride in the work I produce.", "about_frontend": "As a front-end developer, I have a keen eye for user experience and interface design. I love transforming creative concepts into visually captivating and interactive web applications using React and Nextjs with typescript. From seamless navigation to smooth animations, I pay attention to every detail to ensure that my front-end projects exude elegance and functionality.", @@ -46,6 +48,7 @@ "about_conclusion": "In conclusion, I am Gabriel Logan, a passionate programmer who seamlessly weaves front-end and back-end skills to create exceptional web experiences. My innovative mindset, attention to detail, and dedication to efficiency have led me to develop a groundbreaking page that I believe will make a significant impact on the world of form validation. As the digital landscape continues to evolve, I stand at the forefront, ready to embrace new challenges and make a difference through my exceptional work in web development." }, "Info": { + "Info_Page": "Information Page", "info_title": "multiform-validator - Multi Library for Form Field Validation", "info_intro": "Introducing multiform-validator, a powerful Multi Library developed by Gabriel Logan. This versatile library is designed to validate numerous form fields, including email addresses, phone numbers, passwords, CPF (Brazilian individual taxpayer registry numbers), credit card numbers, and more.", "info_ensure": "With multiform-validator, you can ensure that the data submitted through your forms is accurate and secure. Whether you're building a registration form, checkout process, or any data input system, this library has got you covered.", @@ -56,6 +59,7 @@ "info_conclusion": "So, if you're seeking a comprehensive solution for form field validation, look no further than multiform-validator. Embrace the power of this library, and rest assured that your data collection process will be streamlined, accurate, and secure." }, "PrivacyPolices": { + "Privacy Policy": "Privacy Policy", "privacy_title": "Privacy Policies - Your Data is Safe with Us", "privacy_intro": "At Gabriel Logan Web Services, we take your privacy seriously. We want to assure you that we do not collect any data on our website, and we do not use any data through the \"multiform-validator\" library. Your information remains entirely confidential, and your privacy is paramount to us.", "privacy_no_personal_data": "When you visit our website, rest assured that no personal data, such as your name, email address, or contact information, is gathered or stored. We believe in providing you with a safe and anonymous browsing experience.", @@ -73,7 +77,8 @@ "We do not collect any personal data through this website, and your privacy is important to us.": "We do not collect any personal data through this website, and your privacy is important to us.", "Unauthorized use of this website is strictly prohibited.": "Unauthorized use of this website is strictly prohibited.", "Your use of this website and any disputes arising are subject to the laws of [Your Country/Region].": "Your use of this website and any disputes arising are subject to the laws of [Your Country/Region].", - "Thank you for visiting our website and using our services. If you have any questions or concerns, please don’t hesitate to contact us.": "Thank you for visiting our website and using our services. If you have any questions or concerns, please don’t hesitate to contact us." + "Thank you for visiting our website and using our services. If you have any questions or concerns, please don’t hesitate to contact us.": "Thank you for visiting our website and using our services. If you have any questions or concerns, please don’t hesitate to contact us.", + "Terms and Conditions of Multiform Validator library": "Terms and Conditions of Multiform Validator library" }, "Manifest": { "Name": "Multiform Validator - Your Multilingual Validation Library",