gg
Deploy Iddaai Frontend / build-and-deploy (push) Failing after 34s

This commit is contained in:
2026-05-10 22:59:27 +03:00
parent 6dadc5f613
commit 5c8619b282
161 changed files with 6708 additions and 3435 deletions
+5 -5
View File
@@ -1,12 +1,12 @@
'use client';
"use client";
import Footer from '@/components/layout/footer/footer';
import { Box, Flex } from '@chakra-ui/react';
import Footer from "@/components/layout/footer/footer";
import { Box, Flex } from "@chakra-ui/react";
function AuthLayout({ children }: { children: React.ReactNode }) {
return (
<Flex minH='100vh' direction='column'>
<Box as='main'>{children}</Box>
<Flex minH="100vh" direction="column">
<Box as="main">{children}</Box>
<Footer />
</Flex>
);
+1 -1
View File
@@ -1,4 +1,4 @@
import { notFound } from 'next/navigation';
import { notFound } from "next/navigation";
export default function CatchAllPage() {
notFound();
+6 -4
View File
@@ -1,15 +1,17 @@
import React from 'react';
import React from "react";
import { getTranslations } from "next-intl/server";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "about";
+5 -3
View File
@@ -7,13 +7,15 @@ import { notFound } from "next/navigation";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "admin";
+5 -3
View File
@@ -3,13 +3,15 @@ import AnalysisContent from "@/components/analysis/analysis-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "analysis";
@@ -3,13 +3,15 @@ import CouponBuilderContent from "@/components/coupons/coupon-builder-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "coupon-builder";
@@ -3,13 +3,15 @@ import CouponHistoryContent from "@/components/coupons/coupon-history-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "coupon-history";
+5 -3
View File
@@ -3,13 +3,15 @@ import DashboardContent from "@/components/dashboard/dashboard-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "dashboard";
+5 -3
View File
@@ -3,13 +3,15 @@ import H2HContent from "@/components/h2h/h2h-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "h2h";
+5 -3
View File
@@ -3,13 +3,15 @@ import HomeContent from "@/components/home/home-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "home";
+7 -7
View File
@@ -1,15 +1,15 @@
'use client';
"use client";
import { Container, Flex } from '@chakra-ui/react';
import Header from '@/components/layout/header/header';
import Footer from '@/components/layout/footer/footer';
import BackToTop from '@/components/ui/back-to-top';
import { Container, Flex } from "@chakra-ui/react";
import Header from "@/components/layout/header/header";
import Footer from "@/components/layout/footer/footer";
import BackToTop from "@/components/ui/back-to-top";
function MainLayout({ children }: { children: React.ReactNode }) {
return (
<Flex minH='100vh' direction='column'>
<Flex minH="100vh" direction="column">
<Header />
<Container as='main' maxW='8xl' flex='1' py={4}>
<Container as="main" maxW="8xl" flex="1" py={4}>
{children}
</Container>
<BackToTop />
@@ -3,12 +3,14 @@ import LeagueDetailContent from "@/components/leagues/league-detail-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string; id: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string; id: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale, id } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
const pathSegment = `leagues/${id}`;
return {
@@ -24,7 +26,9 @@ export async function generateMetadata(props: { params: Promise<{ locale: string
};
}
export default async function LeagueDetailPage(props: { params: Promise<{ id: string }> }) {
export default async function LeagueDetailPage(props: {
params: Promise<{ id: string }>;
}) {
const { id } = await props.params;
return <LeagueDetailContent leagueId={id} />;
}
+5 -3
View File
@@ -3,13 +3,15 @@ import LeaguesContent from "@/components/leagues/leagues-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "leagues";
@@ -3,13 +3,15 @@ import MatchDetailContent from "@/components/matches/match-detail-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "matches/[id]";
+5 -3
View File
@@ -3,13 +3,15 @@ import MatchesContent from "@/components/matches/matches-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "matches";
+5 -3
View File
@@ -3,13 +3,15 @@ import PredictionsContent from "@/components/predictions/predictions-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "predictions";
+29
View File
@@ -0,0 +1,29 @@
import { getTranslations } from "next-intl/server";
import type { Metadata } from "next";
import PricingContent from "@/components/pricing/pricing-content";
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
const pathSegment = "pricing";
return {
title: t("pricing.title"),
description: t("pricing.description"),
alternates: {
canonical: `${siteUrl}/${locale}/${pathSegment}`,
languages: {
en: `${siteUrl}/en/${pathSegment}`,
tr: `${siteUrl}/tr/${pathSegment}`,
},
},
};
}
export default function PricingPage() {
return <PricingContent />;
}
+5 -3
View File
@@ -3,13 +3,15 @@ import ProfileContent from "@/components/profile/profile-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "profile";
+5 -3
View File
@@ -3,13 +3,15 @@ import SporTotoContent from "@/components/spor-toto/spor-toto-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "spor-toto";
+5 -3
View File
@@ -3,13 +3,15 @@ import TeamDetailContent from "@/components/teams/team-detail-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "teams/[id]";
+5 -3
View File
@@ -3,13 +3,15 @@ import TeamsContent from "@/components/teams/teams-content";
import { Metadata } from "next";
export async function generateMetadata(props: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata(props: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const params = await props.params;
const { locale } = params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// Next.js parses route variables automatically, but for canonical we'll just use a clean relative base if available,
// or let next.js construct it implicitly from metadataBase if not explicitly specified.
// We'll set alternates just for languages based on current path segment as a best effort
const pathSegment = "teams";
+14 -10
View File
@@ -8,7 +8,11 @@ import { Metadata } from "next";
import { getTranslations } from "next-intl/server";
import "./global.css";
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise<Metadata> {
export async function generateMetadata({
params,
}: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "seo" });
const siteUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
@@ -57,21 +61,21 @@ export default async function RootLayout({
const jsonLd = {
"@context": "https://schema.org",
"@type": "WebSite",
"name": "iddaai.com",
"url": siteUrl,
"potentialAction": {
name: "iddaai.com",
url: siteUrl,
potentialAction: {
"@type": "SearchAction",
"target": `${siteUrl}/search?q={search_term_string}`,
"query-input": "required name=search_term_string"
}
target: `${siteUrl}/search?q={search_term_string}`,
"query-input": "required name=search_term_string",
},
};
const orgJsonLd = {
"@context": "https://schema.org",
"@type": "Organization",
"name": "iddaai.com",
"url": siteUrl,
"logo": `${siteUrl}/favicon/android-chrome-512x512.png`,
name: "iddaai.com",
url: siteUrl,
logo: `${siteUrl}/favicon/android-chrome-512x512.png`,
};
return (
+23 -14
View File
@@ -1,27 +1,36 @@
import { Link } from '@/i18n/navigation';
import { Flex, Text, Button, VStack, Heading } from '@chakra-ui/react';
import { getTranslations } from 'next-intl/server';
import { Link } from "@/i18n/navigation";
import { Flex, Text, Button, VStack, Heading } from "@chakra-ui/react";
import { getTranslations } from "next-intl/server";
export default async function NotFoundPage() {
const t = await getTranslations();
return (
<Flex h='100vh' alignItems='center' justifyContent='center' textAlign='center' px={6}>
<Flex
h="100vh"
alignItems="center"
justifyContent="center"
textAlign="center"
px={6}
>
<VStack spaceY={6}>
<Heading
as='h1'
fontSize={{ base: '5xl', md: '6xl' }}
fontWeight='bold'
color={{ base: 'primary.600', _dark: 'primary.400' }}
as="h1"
fontSize={{ base: "5xl", md: "6xl" }}
fontWeight="bold"
color={{ base: "primary.600", _dark: "primary.400" }}
>
{t('error.404')}
{t("error.404")}
</Heading>
<Text fontSize={{ base: 'md', md: 'lg' }} color={{ base: 'fg.muted', _dark: 'white' }}>
{t('error.not-found')}
<Text
fontSize={{ base: "md", md: "lg" }}
color={{ base: "fg.muted", _dark: "white" }}
>
{t("error.not-found")}
</Text>
<Link href='/home' passHref>
<Button size={{ base: 'md', md: 'lg' }} rounded='md'>
{t('error.back-to-home')}
<Link href="/home" passHref>
<Button size={{ base: "md", md: "lg" }} rounded="md">
{t("error.back-to-home")}
</Button>
</Link>
</VStack>
+2 -2
View File
@@ -1,5 +1,5 @@
import { redirect } from 'next/navigation';
import { redirect } from "next/navigation";
export default async function Page() {
redirect('/home');
redirect("/home");
}
+5 -5
View File
@@ -1,12 +1,12 @@
import { MetadataRoute } from 'next';
import { MetadataRoute } from "next";
export default function robots(): MetadataRoute.Robots {
const baseUrl = process.env.NEXT_PUBLIC_APP_URL || 'https://iddaai.com';
const baseUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
return {
rules: {
userAgent: '*',
allow: '/',
disallow: ['/admin', '/*/dashboard', '/*/profile', '/*/coupon-history'],
userAgent: "*",
allow: "/",
disallow: ["/admin", "/*/dashboard", "/*/profile", "/*/coupon-history"],
},
sitemap: `${baseUrl}/sitemap.xml`,
};
+16 -16
View File
@@ -1,20 +1,20 @@
import { MetadataRoute } from 'next';
import { routing } from '@/i18n/routing';
import { MetadataRoute } from "next";
import { routing } from "@/i18n/routing";
const baseUrl = process.env.NEXT_PUBLIC_APP_URL || 'https://iddaai.com';
const baseUrl = process.env.NEXT_PUBLIC_APP_URL || "https://iddaai.com";
const staticPages = [
'',
'/home',
'/about',
'/analysis',
'/leagues',
'/matches',
'/teams',
'/predictions',
'/spor-toto',
'/coupon-builder',
'/h2h'
"",
"/home",
"/about",
"/analysis",
"/leagues",
"/matches",
"/teams",
"/predictions",
"/spor-toto",
"/coupon-builder",
"/h2h",
];
export default function sitemap(): MetadataRoute.Sitemap {
@@ -25,8 +25,8 @@ export default function sitemap(): MetadataRoute.Sitemap {
sitemapEntries.push({
url: `${baseUrl}/${locale}${page}`,
lastModified: new Date(),
changeFrequency: 'daily',
priority: page === '' || page === '/home' ? 1.0 : 0.8,
changeFrequency: "daily",
priority: page === "" || page === "/home" ? 1.0 : 0.8,
});
});
});