diff --git a/app/confirmation/page.tsx b/app/confirmation/page.tsx index d014d44..e0f93ae 100644 --- a/app/confirmation/page.tsx +++ b/app/confirmation/page.tsx @@ -1,6 +1,8 @@ 'use client'; + import { CardDescription } from '@components/Card'; import CustomCard from '@components/CustomCard'; +import Schema from '@components/SchemaOrg'; import { ResponseType } from '@utils/validationSchemas'; import { useRouter, useSearchParams } from 'next/navigation'; import { Suspense, useEffect, useState } from 'react'; @@ -54,7 +56,7 @@ function ConfirmationPage() { fetchData(); }, [code, router]); - function render() { + const renderContent = () => { if (!loading) { return ( {message} @@ -62,22 +64,33 @@ function ConfirmationPage() { } return 'Just a second...'; - } + }; return ( ); } export default function Confirmation() { + const schema = { + '@context': 'https://schema.org', + '@type': 'WebSite', + name: 'HackerNews Newsletter', + title: 'Subscription Confirmation', + url: `${process.env.HOME_URL}/confirmation` + }; + return ( - Loading...}> - - + <> + + Loading...}> + + + ); } diff --git a/app/page.tsx b/app/page.tsx index a867d38..06d2612 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,4 +1,5 @@ 'use client'; + import { Button } from '@components/Button'; import { CardDescription } from '@components/Card'; import CustomCard from '@components/CustomCard'; @@ -6,6 +7,7 @@ import ErrorMessage from '@components/ErrorMessage'; import { FormControl } from '@components/form/FormControl'; import { FormMessage } from '@components/form/FormMessage'; import { Input } from '@components/Input'; +import Schema from '@components/SchemaOrg'; import { FormField } from '@contexts/FormField/FormFieldProvider'; import { FormItem } from '@contexts/FormItem/FormItemProvider'; import { zodResolver } from '@hookform/resolvers/zod'; @@ -22,6 +24,14 @@ export default function Home() { const [message, setMessage] = useState(''); const [error, setError] = useState(false); + const schema = { + '@context': 'https://schema.org', + '@type': 'WebSite', + name: 'HackerNews Newsletter', + title: 'Home', + url: process.env.HOME_URL + }; + const form = useForm({ resolver: zodResolver(SubscribeFormSchema), defaultValues: { @@ -58,7 +68,7 @@ export default function Home() { } } - function render() { + const renderContent = () => { if (error) { return ErrorMessage(); } @@ -105,14 +115,17 @@ export default function Home() {

); - } + }; return ( - + <> + + + ); } diff --git a/app/privacy/page.tsx b/app/privacy/page.tsx index 89166f2..b7631b7 100644 --- a/app/privacy/page.tsx +++ b/app/privacy/page.tsx @@ -1,9 +1,18 @@ 'use client'; import CustomCard from '@components/CustomCard'; +import Schema from '@components/SchemaOrg'; import Link from 'next/link'; export default function Privacy() { + const schema = { + '@context': 'https://schema.org', + '@type': 'WebSite', + name: 'HackerNews Newsletter', + title: 'Privacy Policy', + url: `${process.env.HOME_URL}/privacy` + }; + const body = (

@@ -439,11 +448,14 @@ export default function Privacy() { ); return ( - + <> + + + ); } diff --git a/app/unsubscribe/page.tsx b/app/unsubscribe/page.tsx index a249d17..3f23c15 100644 --- a/app/unsubscribe/page.tsx +++ b/app/unsubscribe/page.tsx @@ -1,4 +1,5 @@ 'use client'; + import { Button } from '@components/Button'; import { CardDescription } from '@components/Card'; import CustomCard from '@components/CustomCard'; @@ -6,6 +7,7 @@ import ErrorMessage from '@components/ErrorMessage'; import { FormControl } from '@components/form/FormControl'; import { FormMessage } from '@components/form/FormMessage'; import { Input } from '@components/Input'; +import Schema from '@components/SchemaOrg'; import { FormField } from '@contexts/FormField/FormFieldProvider'; import { FormItem } from '@contexts/FormItem/FormItemProvider'; import { zodResolver } from '@hookform/resolvers/zod'; @@ -23,6 +25,14 @@ export default function Unsubscribe() { const [error, setError] = useState(false); const ref = useRef(null); + const schema = { + '@context': 'https://schema.org', + '@type': 'WebSite', + name: 'HackerNews Newsletter', + title: 'Unsubscribe', + url: `${process.env.HOME_URL}/unsubscribe` + }; + const form = useForm({ resolver: zodResolver(UnsubscribeFormSchema), defaultValues: { @@ -65,7 +75,7 @@ export default function Unsubscribe() { } } - function render() { + const renderContent = () => { if (error) { return ErrorMessage(); } @@ -108,14 +118,17 @@ export default function Unsubscribe() {

); - } + }; return ( - + <> + + + ); } diff --git a/components/SchemaOrg.tsx b/components/SchemaOrg.tsx new file mode 100644 index 0000000..33187d9 --- /dev/null +++ b/components/SchemaOrg.tsx @@ -0,0 +1,13 @@ +import Head from 'next/head'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const SchemaOrg = ({ schema }: Record) => ( + +