diff --git a/env b/env deleted file mode 100644 index 1ec99f5..0000000 --- a/env +++ /dev/null @@ -1,17 +0,0 @@ -SERVICE_SUPABASESERVICE_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzdXBhYmFzZSIsImlhdCI6MTczODQ3MzA2MCwiZXhwIjo0ODk0MTQ2NjYwLCJyb2xlIjoic2VydmljZV9yb2xlIn0.nRpZfD6Uur9yzCT_BTgLH9DLWsCcCiAgWKenJ_qYu5M\ - -SERVICE_SUPABASEANON_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzdXBhYmFzZSIsImlhdCI6MTczODQ3MzA2MCwiZXhwIjo0ODk0MTQ2NjYwLCJyb2xlIjoiYW5vbiJ9.WXJvhzD1gD6Kxlq8PLFAcpaVFmh9h3xbJHh9oow2IFQ - -SUPABASE_URL=https://supabasekong-n00g8kwoos4skc0gw44k8sks.dev3vds1.link - -# payload - -DATABASE_URI=postgresql://postgres.jswmbraeandqttpcdfmj:qDY4C35XaRsmW6dW@aws-0-ap-southeast-1.pooler.supabase.com:5432/postgres -PAYLOAD_SECRET=1b7204f9ed5f7ab09706fc51 -S3_BUCKET=cochise-bucket -S3_ACCESS_KEY_ID=97394cd503ae9973efa25168ed980e51 -S3_SECRET_ACCESS_KEY=9b4e412850582aab32ffdadbe23bb7ea972b39aaf79c34da0c19d3fcafe11dd0 -S3_REGION=ap-southeast-1 -S3_ENDPOINT=https://jswmbraeandqttpcdfmj.supabase.co/storage/v1/s3 -NEXT_PUBLIC_PAYLOAD_URL=http://localhost:3000 -SITE_URL=http://localhost:3000 diff --git a/public/assets/css/demo-slick/demo-slick.css b/public/assets/css/demo-slick/demo-slick.css index 86f71f5..19b0fb9 100644 --- a/public/assets/css/demo-slick/demo-slick.css +++ b/public/assets/css/demo-slick/demo-slick.css @@ -11,7 +11,7 @@ --color-gray-1: #697582; --color-gray-2: #747f8c; --color-gray-3: #8a95a2; - --color-primary-1: #1872e8; + --color-primary-1: #00898b; --color-primary-1-a: #2b87ff; --color-primary-light-1: #e3effe; --color-primary-light-1-a: #bcd1f1; diff --git a/public/assets/css/style.css b/public/assets/css/style.css index c7d6213..16c8505 100644 --- a/public/assets/css/style.css +++ b/public/assets/css/style.css @@ -191,7 +191,7 @@ Primary use: Multipurpose Template --color-gray-light-6: #bbb; --color-dark-mode-gray-1: rgba(255, 255, 255, 0.7); --color-dark-mode-gray-2: rgba(255, 255, 255, 0.1275); - --color-primary-1: #4567ed; + --color-primary-1: #00898b; --color-primary-1-a: #375ae3; --color-primary-light-1: #e3effe; --color-primary-light-1-a: #bcd1f1; diff --git a/public/assets/images/logo-dark.webp b/public/assets/images/logo-dark.webp new file mode 100644 index 0000000..9676b0c Binary files /dev/null and b/public/assets/images/logo-dark.webp differ diff --git a/src/app/(main)/[slug]/page.tsx b/src/app/(main)/[slug]/page.tsx index 37e8955..77b7ac3 100644 --- a/src/app/(main)/[slug]/page.tsx +++ b/src/app/(main)/[slug]/page.tsx @@ -16,6 +16,7 @@ export async function generateMetadata({ params }: { params: Promise<{ slug: str let updatedAt = ""; let imgUrl = ""; let createdByName = ""; + let canonicalUrl = ""; const slug = (await params).slug; const blog = await fetchBlogDetail(slug); @@ -27,6 +28,9 @@ export async function generateMetadata({ params }: { params: Promise<{ slug: str imgUrl = blog.imgUrl; publishedAt = blog.data.createdAt; updatedAt = blog.data.updatedAt; + if (!!blog.data?.meta?.canonical_url) { + canonicalUrl = blog.data.meta.canonical_url; + } if (!!blog?.data?.createdBy && typeof blog.data.createdBy !== "number") { createdByName = blog.data.createdBy?.name ?? ""; } @@ -39,7 +43,9 @@ export async function generateMetadata({ params }: { params: Promise<{ slug: str imgUrl = page.heroImg?.url; publishedAt = page.createdAt; updatedAt = page.updatedAt; - + if (!!page.meta?.canonical_url) { + canonicalUrl = page.meta.canonical_url; + } if (!!page?.createdBy && typeof page.createdBy !== "number") { createdByName = page?.createdBy?.name ?? ""; } @@ -55,6 +61,9 @@ export async function generateMetadata({ params }: { params: Promise<{ slug: str defaultMetadata.openGraph.description = description; defaultMetadata.openGraph.images = !!imgUrl ? [imgUrl] : undefined; } + if (!!defaultMetadata.alternates && !!canonicalUrl) { + defaultMetadata.alternates.canonical = canonicalUrl; + } defaultMetadata.twitter = { card: "summary_large_image", title: title, diff --git a/src/app/(main)/category/[...path]/page.tsx b/src/app/(main)/category/[...path]/page.tsx new file mode 100644 index 0000000..5a6b0c5 --- /dev/null +++ b/src/app/(main)/category/[...path]/page.tsx @@ -0,0 +1,74 @@ +import { BeforeFooterBlock } from "@/components/Blocks/BeforeFooter"; +import { BlogCardItemSkeleton } from "@/components/Blogs/BlogCardItem"; +import Blogs from "@/components/Blogs/Blogs"; +import HeroOther from "@/components/HeroOther"; +import { getDefaultMetadata } from "@/utils/metadata"; +import { sanitizePageNumber } from "@/utils/sanitize"; +import { Metadata } from "next"; +// import { headers } from "next/headers"; +import { Suspense } from "react"; + +export async function generateMetadata(): Promise { + const metadata = await getDefaultMetadata(); + return metadata; +} + +export default async function CategoryPage({ + params, + searchParams, +}: { + params?: Promise<{ path: string[] }>; + searchParams?: Promise<{ page?: string; s?: string }>; +}) { + const path = (await params)?.path; + // const headersList = await headers(); + // const paramsCategory = path?.[0] ?? ""; + const paramsPage = path?.[2] ?? ""; + const paramsSearch = (await searchParams)?.s; + const page = sanitizePageNumber(paramsPage); + + return ( + <> + + +
+
+
+
+ +
+ +
+
+
+
+ + }> + + +
+ + + + ); +} + +function Loading() { + return ( +
+
+ + + +
+
+ ); +} diff --git a/src/app/(main)/page.tsx b/src/app/(main)/page.tsx index d0dd674..1d0d6a8 100644 --- a/src/app/(main)/page.tsx +++ b/src/app/(main)/page.tsx @@ -1,38 +1,139 @@ -import Parallax from "./home-bg-video/page"; import Homepage from "@/components/Homepage"; import { BeforeFooterBlock } from "@/components/Blocks/BeforeFooter"; +import { Metadata, Viewport } from "next"; +import { getDefaultMetadata } from "@/utils/metadata"; +import HomeBgVideo from "@/components/HomeBgVideo"; +import { headers } from "next/headers"; -export const metadata = { - title: "HomePage - Cochise Oncology", - description: "Cochise Oncology", - keywords: "Cochise Oncology, Oncology, Healthcare, Medical Services, Cancer Treatment", - author: "Cochise Oncology", - robots: "index, follow", - og: { - title: "HomePage - Cochise Oncology", - description: "Cochise Oncology", - type: "website", - url: "https://www.cochiseoncology.com", - image: "https://www.cochiseoncology.com/og-image.jpg", - }, - twitter: { - card: "summary_large_image", - site: "@CochiseOncology", - title: "HomePage - Cochise Oncology", - description: "Cochise Oncology", - image: "https://www.cochiseoncology.com/twitter-image.jpg", - }, -}; +export async function generateMetadata(): Promise { + const defaultMetadata = await getDefaultMetadata(); + defaultMetadata.title = `Homepage - ${defaultMetadata.openGraph?.siteName}`; + defaultMetadata.keywords = "Cochise Oncology, Oncology, Healthcare, Medical Services, Cancer Treatment"; -export const viewport = { + if (!!defaultMetadata?.openGraph) { + defaultMetadata.openGraph.images = ["/assets/images/cochise-welcome.png"]; + } + + return defaultMetadata; +} + +export const viewport: Viewport = { width: "device-width", initialScale: 1, }; -export default function Home() { +export default async function Home() { + const headersList = await headers(); + const fullUrl = headersList.get("x-full-url"); + const siteName = headersList.get("x-site-name"); + const metaDesc = headersList.get("x-meta-desc"); + + const jsonLd = { + "@context": "https://schema.org", + "@graph": [ + { + "@type": "WebPage", + "@id": fullUrl, + url: fullUrl, + name: `Homepage - ${siteName}`, + isPartOf: { + "@id": `${fullUrl}#website`, + }, + about: { + "@id": `${fullUrl}#organization`, + }, + primaryImageOfPage: { + "@id": `${fullUrl}#primaryimage`, + }, + image: { + "@id": `${fullUrl}#primaryimage`, + }, + thumbnailUrl: [`${fullUrl}assets/images/cochise-welcome.png`], + datePublished: "2024-07-18T16:29:29+00:00", + dateModified: "2025-02-24T21:01:50+00:00", + description: metaDesc, + breadcrumb: { + "@id": `${fullUrl}#breadcrumb`, + }, + inLanguage: "en-US", + potentialAction: [ + { + "@type": "ReadAction", + target: [fullUrl], + }, + ], + }, + { + "@type": "ImageObject", + inLanguage: "en-US", + "@id": `${fullUrl}#primaryimage`, + url: `${fullUrl}assets/images/cochise-welcome.png`, + contentUrl: `${fullUrl}assets/images/cochise-welcome.png`, + width: 940, + height: 788, + }, + { + "@type": "BreadcrumbList", + "@id": `${fullUrl}#breadcrumb`, + itemListElement: [ + { + "@type": "ListItem", + position: 1, + name: "Home", + }, + ], + }, + { + "@type": "WebSite", + "@id": `${fullUrl}#website`, + url: fullUrl, + name: siteName, + description: "", + publisher: { + "@id": `${fullUrl}#organization`, + }, + potentialAction: [ + { + "@type": "SearchAction", + target: { + "@type": "EntryPoint", + urlTemplate: `${fullUrl}?s={search_term_string}`, + }, + "query-input": { + "@type": "PropertyValueSpecification", + valueRequired: true, + valueName: "search_term_string", + }, + }, + ], + inLanguage: "en-US", + }, + { + "@type": "Organization", + "@id": `${fullUrl}#organization`, + name: "Cochise Oncology", + url: fullUrl, + logo: { + "@type": "ImageObject", + inLanguage: "en-US", + "@id": `${fullUrl}#/schema/logo/image/`, + url: `${fullUrl}assets/images/cochise-welcome.png`, + contentUrl: `${fullUrl}assets/images/cochise-welcome.png`, + width: 500, + height: 195, + caption: siteName, + }, + image: { + "@id": `${fullUrl}#/schema/logo/image/`, + }, + }, + ], + }; + return ( <> - +