Skip to content

Commit 0afb18e

Browse files
authored
Feat: add SearchPoint landing page (#191)
Adds the SearchPoint landing page and localized route, including SEO metadata (canonical/hreflang + OG/Twitter) and supporting images. Co-authored-by: Nico Prananta <311343+nicnocquee@users.noreply.github.com>
1 parent c2bccb9 commit 0afb18e

12 files changed

Lines changed: 1159 additions & 0 deletions

File tree

app/[lang]/searchpoint/page.tsx

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import type { Metadata } from "next";
2+
3+
import { SearchpointPage } from "@/app/searchpoint/searchpoint-page";
4+
import { supportedLanguages } from "@/locales/.generated/types";
5+
import data from "@/data.json";
6+
7+
const { url } = data;
8+
9+
const TITLE =
10+
"SearchPoint | Unified search for PC files, OneDrive, and SharePoint";
11+
const DESCRIPTION =
12+
"Stop switching apps to find documents. SearchPoint searches local files, OneDrive, and SharePoint in one place. On-premise deployment; permissions respected; raw files stay in your environment.";
13+
14+
const OG_IMAGE = `${url}/images/searchpoint/feature-sp-1-trimmed.webp`;
15+
16+
export const metadata: Metadata = {
17+
title: TITLE,
18+
description: DESCRIPTION,
19+
alternates: {
20+
canonical: `${url}/${supportedLanguages[0]}/searchpoint`,
21+
languages: supportedLanguages.reduce(
22+
(acc, l) => {
23+
acc[l] = `${url}/${l}/searchpoint`;
24+
return acc;
25+
},
26+
{} as Record<string, string>
27+
)
28+
},
29+
openGraph: {
30+
title: TITLE,
31+
description: DESCRIPTION,
32+
url: `${url}/${supportedLanguages[0]}/searchpoint`,
33+
type: "website",
34+
images: [
35+
{
36+
url: OG_IMAGE,
37+
alt: "SearchPoint unified search across local files and Microsoft 365."
38+
}
39+
]
40+
},
41+
twitter: {
42+
card: "summary_large_image",
43+
title: TITLE,
44+
description: DESCRIPTION,
45+
images: [OG_IMAGE]
46+
}
47+
};
48+
49+
export async function generateStaticParams() {
50+
return supportedLanguages.map((lang) => ({ lang }));
51+
}
52+
53+
export default function Page() {
54+
const jsonLd = {
55+
"@context": "https://schema.org",
56+
"@type": "SoftwareApplication",
57+
name: "SearchPoint",
58+
applicationCategory: "BusinessApplication",
59+
description: DESCRIPTION,
60+
url: `${url}/${supportedLanguages[0]}/searchpoint`,
61+
publisher: {
62+
"@type": "Organization",
63+
name: "Hyperjump Technology",
64+
url
65+
}
66+
};
67+
68+
return (
69+
<>
70+
<script
71+
type="application/ld+json"
72+
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
73+
/>
74+
<SearchpointPage />
75+
</>
76+
);
77+
}

app/searchpoint/page.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { redirect } from "next/navigation";
2+
import type { Metadata } from "next";
3+
4+
import { supportedLanguages } from "@/locales/.generated/types";
5+
import data from "@/data.json";
6+
7+
const { url } = data;
8+
9+
export const metadata: Metadata = {
10+
robots: {
11+
index: false,
12+
follow: true
13+
},
14+
alternates: {
15+
canonical: `${url}/${supportedLanguages[0]}/searchpoint`
16+
}
17+
};
18+
19+
export default function Page() {
20+
redirect(`/${supportedLanguages[0]}/searchpoint`);
21+
}

0 commit comments

Comments
 (0)