footer added, some design changes, etc...
This commit is contained in:
parent
71a12f8c0e
commit
40041f2e14
@ -1,7 +1,6 @@
|
|||||||
// ngc/src/app/[locale]/about/page.tsx
|
|
||||||
import { unstable_setRequestLocale } from "next-intl/server";
|
import { unstable_setRequestLocale } from "next-intl/server";
|
||||||
import { getTranslations } from "next-intl/server";
|
import { getTranslations } from "next-intl/server";
|
||||||
import Image from "next/image";
|
// import Image from "next/image";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
params: { locale: string };
|
params: { locale: string };
|
||||||
@ -12,7 +11,7 @@ export default async function AboutPage({ params: { locale } }: Props) {
|
|||||||
const t = await getTranslations("about");
|
const t = await getTranslations("about");
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="py-12">
|
<div className="min-h-screen py-12 flex items-center justify-center">
|
||||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||||
<div className="lg:text-center">
|
<div className="lg:text-center">
|
||||||
<h2 className="text-base text-blue-600 font-semibold tracking-wide uppercase">
|
<h2 className="text-base text-blue-600 font-semibold tracking-wide uppercase">
|
||||||
@ -26,7 +25,7 @@ export default async function AboutPage({ params: { locale } }: Props) {
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="mt-16">
|
<div className="mt-28">
|
||||||
<div className="grid grid-cols-1 gap-12 lg:grid-cols-3">
|
<div className="grid grid-cols-1 gap-12 lg:grid-cols-3">
|
||||||
{[1, 2, 3].map((index) => (
|
{[1, 2, 3].map((index) => (
|
||||||
<div key={index} className="pt-6">
|
<div key={index} className="pt-6">
|
||||||
@ -62,35 +61,6 @@ export default async function AboutPage({ params: { locale } }: Props) {
|
|||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="mt-20">
|
|
||||||
<h3 className="text-2xl font-bold text-gray-900 dark:text-white mb-8 lg:text-center">
|
|
||||||
{t("teamTitle")}
|
|
||||||
</h3>
|
|
||||||
<div className="grid grid-cols-1 gap-12 sm:grid-cols-2 lg:grid-cols-4">
|
|
||||||
{[1, 2, 3, 4].map((index) => (
|
|
||||||
<div key={index} className="text-center">
|
|
||||||
<div className="relative mx-auto h-40 w-40 overflow-hidden rounded-full">
|
|
||||||
<Image
|
|
||||||
className="h-full w-full object-cover"
|
|
||||||
src={`/team-member-${index}.jpg`}
|
|
||||||
alt={t(`team.${index}.name`)}
|
|
||||||
width={160}
|
|
||||||
height={160}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="mt-4">
|
|
||||||
<h4 className="text-lg font-semibold">
|
|
||||||
{t(`team.${index}.name`)}
|
|
||||||
</h4>
|
|
||||||
<p className="text-sm text-gray-500 dark:text-gray-400">
|
|
||||||
{t(`team.${index}.role`)}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import { locales } from "@/i18n/config";
|
|||||||
import { ThemeProvider } from "@/components/theme-provider";
|
import { ThemeProvider } from "@/components/theme-provider";
|
||||||
import { Navbar } from "@/components/navbar";
|
import { Navbar } from "@/components/navbar";
|
||||||
import { unstable_setRequestLocale } from "next-intl/server";
|
import { unstable_setRequestLocale } from "next-intl/server";
|
||||||
|
import { Footer } from "@/components/footer";
|
||||||
|
|
||||||
const inter = Inter({
|
const inter = Inter({
|
||||||
subsets: ["latin"],
|
subsets: ["latin"],
|
||||||
@ -40,8 +41,9 @@ export default async function LocaleLayout({
|
|||||||
<body className={`${inter.variable} ${robotoMono.variable} antialiased`}>
|
<body className={`${inter.variable} ${robotoMono.variable} antialiased`}>
|
||||||
<ThemeProvider>
|
<ThemeProvider>
|
||||||
<Navbar />
|
<Navbar />
|
||||||
<main className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
<main className="">
|
||||||
{children}
|
{children}
|
||||||
|
<Footer />
|
||||||
</main>
|
</main>
|
||||||
</ThemeProvider>
|
</ThemeProvider>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@ -7,6 +7,7 @@ type Props = {
|
|||||||
|
|
||||||
export default async function Home({ params: { locale } }: Props) {
|
export default async function Home({ params: { locale } }: Props) {
|
||||||
unstable_setRequestLocale(locale);
|
unstable_setRequestLocale(locale);
|
||||||
|
// const t = await getTranslations(locale);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
73
src/components/footer.tsx
Normal file
73
src/components/footer.tsx
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
export async function Footer() {
|
||||||
|
return (
|
||||||
|
<footer className="w-full bg-white dark:bg-gray-900 border-t border-gray-200 dark:border-gray-800">
|
||||||
|
<div className="max-w-7xl mx-auto px-4 py-8">
|
||||||
|
<div className="flex flex-col md:flex-row justify-between items-center space-y-4 md:space-y-0">
|
||||||
|
<div className="flex items-center">
|
||||||
|
<p className="text-sm text-gray-600 dark:text-gray-400">
|
||||||
|
© {new Date().getFullYear()}{" "}
|
||||||
|
<span className="text-lg text-cyan-500">NGC</span> All rights
|
||||||
|
reserved.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Navigation Links */}
|
||||||
|
<div className="flex space-x-6">
|
||||||
|
<a
|
||||||
|
href="#"
|
||||||
|
className="text-sm text-gray-600 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-500 transition-colors"
|
||||||
|
>
|
||||||
|
About
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="#"
|
||||||
|
className="text-sm text-gray-600 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-500 transition-colors"
|
||||||
|
>
|
||||||
|
Privacy
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="#"
|
||||||
|
className="text-sm text-gray-600 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-500 transition-colors"
|
||||||
|
>
|
||||||
|
Terms
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Social Links */}
|
||||||
|
<div className="flex space-x-4">
|
||||||
|
<a
|
||||||
|
href="#"
|
||||||
|
className="text-gray-400 hover:text-blue-600 dark:hover:text-blue-500 transition-colors"
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
className="h-5 w-5"
|
||||||
|
fill="currentColor"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<path d="M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84" />
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="#"
|
||||||
|
className="text-gray-400 hover:text-blue-600 dark:hover:text-blue-500 transition-colors"
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
className="h-5 w-5"
|
||||||
|
fill="currentColor"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
fillRule="evenodd"
|
||||||
|
d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
|
||||||
|
clipRule="evenodd"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -62,7 +62,7 @@ export async function Hero() {
|
|||||||
<Button variant="secondary">{t("secondaryButton")}</Button>
|
<Button variant="secondary">{t("secondaryButton")}</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="mx-auto mt-16 flex max-w-2xl sm:mt-24 lg:ml-10 lg:mt-0 lg:mr-0 lg:max-w-none lg:flex-none xl:ml-32">
|
{/* <div className="mx-auto mt-16 flex max-w-2xl sm:mt-24 lg:ml-10 lg:mt-0 lg:mr-0 lg:max-w-none lg:flex-none xl:ml-32">
|
||||||
<div className="max-w-3xl flex-none sm:max-w-5xl lg:max-w-none">
|
<div className="max-w-3xl flex-none sm:max-w-5xl lg:max-w-none">
|
||||||
<Image
|
<Image
|
||||||
src="/hero-image.webp"
|
src="/hero-image.webp"
|
||||||
@ -72,7 +72,7 @@ export async function Hero() {
|
|||||||
className="w-[76rem] rounded-md bg-white/5 shadow-2xl ring-1 ring-white/10"
|
className="w-[76rem] rounded-md bg-white/5 shadow-2xl ring-1 ring-white/10"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> */}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
export const defaultLocale = "en";
|
export const defaultLocale = "mk";
|
||||||
export const locales = ["en", "mk", "sr"] as const;
|
export const locales = ["en", "mk", "sr"] as const;
|
||||||
export type Locale = (typeof locales)[number];
|
export type Locale = (typeof locales)[number];
|
||||||
|
|||||||
@ -2,24 +2,11 @@ import createMiddleware from "next-intl/middleware";
|
|||||||
import { locales, defaultLocale } from "./i18n/config";
|
import { locales, defaultLocale } from "./i18n/config";
|
||||||
|
|
||||||
export default createMiddleware({
|
export default createMiddleware({
|
||||||
// A list of all locales that are supported
|
|
||||||
locales,
|
locales,
|
||||||
// Used when no locale matches
|
|
||||||
defaultLocale,
|
defaultLocale,
|
||||||
// If this locale is matched, pathnames work without a prefix (e.g. `/about`)
|
|
||||||
localePrefix: "always",
|
localePrefix: "always",
|
||||||
});
|
});
|
||||||
|
|
||||||
// Apply middleware to all routes except static files and api routes
|
|
||||||
export const config = {
|
export const config = {
|
||||||
matcher: [
|
matcher: ["/", "/(mk|en|sr)/:path*", "/((?!api|_next|_vercel|.*\\..*).*)"],
|
||||||
// Enable a redirect to a matching locale at the root
|
|
||||||
"/",
|
|
||||||
// Set a cookie to remember the previous locale for
|
|
||||||
// all requests that have a locale prefix
|
|
||||||
"/(mk|en|sr)/:path*",
|
|
||||||
// Enable redirects that add missing locales
|
|
||||||
// (e.g. `/pathnames` -> `/en/pathnames`)
|
|
||||||
"/((?!api|_next|_vercel|.*\\..*).*)",
|
|
||||||
],
|
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user