This commit is contained in:
payacom
2026-07-23 15:58:15 +03:30
parent af5b27b610
commit a1d7db5e7e
445 changed files with 23456 additions and 8865 deletions

3
src/config/googleAuth.ts Normal file
View File

@@ -0,0 +1,3 @@
/** OAuth Web Client ID — public; same value as modstagram-back GOOGLE_CLIENT_ID */
export const GOOGLE_OAUTH_CLIENT_ID =
"91028483292-vba2ktgbvus1p5ce18ir04h1b5c50gnn.apps.googleusercontent.com";

View File

@@ -1,104 +1,41 @@
export const SITE_URL = "https://modstagram.com";
export const SITE_NAME = "مدستاگرام";
import { DEFAULT_LANGUAGE } from "@/lib/i18n/registry";
import { getSiteSeoMeta, getSeoPage, type SeoPageKey } from "@/lib/i18n/seo";
import type { PageSeoEntry } from "./pageSeo.types";
export type PageSeoEntry = {
title: string;
description: string;
path: string;
keywords?: string[];
};
export { SITE_URL } from "./site";
/** متادیتای صفحات اصلی — منبع واحد برای title / description */
export const pageSeo = {
home: {
title: "مدستاگرام | پلتفرم تخصصی پیدا کردن مدل، عکاس و آرایشگر",
description:
"مدستاگرام، شبکه اجتماعی تخصصی حوزه زیبایی برای پیدا کردن مدل، عکاس و آرایشگر حرفه‌ای، مشاهده پست‌ها، ارتباط مستقیم و همکاری در پروژه‌های زیبایی و مد.",
path: "/",
keywords: [
"مدستاگرام",
"مدل",
"عکاس",
"آرایشگر",
"مدلینگ",
"شبکه اجتماعی زیبایی",
"استخدام مدل",
],
},
academy: {
title: "آموزشها و محل یادگیری فعالان زیبایی | مدستاگرام",
description:
"فقط محل همکاری نیست؛ مدستاگرام یک مسیر رشد و یادگیری برای فعالان زیبایی هم هست.",
path: "/academy",
keywords: [
"آموزشگاه مدستاگرام",
"آموزش میکاپ",
"آموزش مدلینگ",
"آموزش عکاسی",
"پکیج آموزشی زیبایی",
],
},
projects: {
title: "پروژه ها و فرصتهای همکاری در دنیای زیبایی | مدستاگرام",
description:
"پروژه‌های فعال در حوزه زیبایی را ببینید، درخواست همکاری بدهید یا پروژه جدیدی برای مدل‌ها، عکاس‌ها و آرایشگرها منتشر کنید.",
path: "/projects",
keywords: [
"پروژه مدلینگ",
"پروژه زیبایی",
"همکاری مدل",
"درخواست همکاری",
"پروژه عکاسی",
],
},
billboards: {
title: "بیلبورد مدستاگرام | تبلیغات هدفمند کسب‌وکارهای حوزه زیبایی",
description:
"بیلبورد مدستاگرام، فضای ویژه تبلیغات کسب‌وکارهای حوزه زیبایی، سالن‌های آرایش، برندهای آرایشی و خدمات تخصصی برای دیده‌شدن بیشتر و جذب مشتری.",
path: "/billboards",
keywords: [
"بیلبورد مدستاگرام",
"تبلیغات زیبایی",
"تبلیغ سالن آرایش",
"تبلیغات مد و زیبایی",
],
},
explore: {
title: "اکسپلور مدستاگرام | کشف پست‌ها و محتوای حوزه زیبایی",
description:
"در اکسپلور مدستاگرام، جدیدترین پست‌ها، ریل‌ها و محتوای تخصصی حوزه مد، زیبایی، میکاپ و عکاسی را کشف کنید.",
path: "/explore",
keywords: ["اکسپلور", "پست زیبایی", "ریل مد", "محتوای مدلینگ"],
},
search: {
title: "جستجو در مدستاگرام | پیدا کردن مدل، عکاس، آرایشگر و بیلبورد",
description:
"جستجوی تخصصی در مدستاگرام برای یافتن مدل، عکاس، آرایشگر، بیلبورد و کسب‌وکارهای حوزه زیبایی.",
path: "/search",
keywords: ["جستجوی مدل", "جستجوی آرایشگر", "جستجوی بیلبورد"],
},
about: {
title: "درباره مدستاگرام | پلتفرم تخصصی حوزه زیبایی و مد",
description:
"درباره مدستاگرام، پلتفرم تخصصی شبکه اجتماعی و همکاری در حوزه زیبایی، مدلینگ، عکاسی و آرایشگری.",
path: "/about-us",
keywords: ["درباره مدستاگرام", "تماس مدستاگرام"],
},
} as const satisfies Record<string, PageSeoEntry>;
const LEGACY_PAGE_KEYS = [
"home",
"academy",
"projects",
"billboards",
"explore",
"search",
"about",
] as const satisfies readonly SeoPageKey[];
export const siteKeywords = [
"مدستاگرام",
"مدل",
"عکاس",
"آرایشگر",
"مدلینگ",
"زیبایی",
"میکاپ",
"عکاسی",
"پروژه مد",
"بیلبورد زیبایی",
"آموزش میکاپ",
"شبکه اجتماعی زیبایی",
"استخدام مدل",
"همکاری مدلینگ",
];
const faSite = getSiteSeoMeta(DEFAULT_LANGUAGE);
/** @deprecated Use getSiteSeoMeta(lang).name */
export const SITE_NAME = faSite.name;
/** @deprecated Use getSiteSeoMeta(lang).keywords */
export const siteKeywords = faSite.keywords;
/** Persian-only legacy map — prefer getSeoPage(key, lang) for locale-aware SEO */
export const pageSeo = Object.fromEntries(
LEGACY_PAGE_KEYS.map((key) => {
const page = getSeoPage(key, DEFAULT_LANGUAGE);
return [
key,
{
title: page.title,
description: page.description,
path: page.path,
keywords: page.keywords,
} satisfies PageSeoEntry,
];
})
) as Record<(typeof LEGACY_PAGE_KEYS)[number], PageSeoEntry>;
export type { PageSeoEntry };

View File

@@ -0,0 +1,6 @@
export type PageSeoEntry = {
title: string;
description: string;
path: string;
keywords?: string[];
};

View File

@@ -1,5 +1,9 @@
import { NextSeoProps } from "next-seo";
import { pageSeo, SITE_URL } from "@/config/pageSeo";
import { getSiteSeoMeta } from "@/lib/i18n/seo";
import { DEFAULT_LANGUAGE } from "@/lib/i18n/registry";
const defaultSite = getSiteSeoMeta(DEFAULT_LANGUAGE);
export const defaultSEOConfig: NextSeoProps = {
title: pageSeo.home.title,
@@ -9,7 +13,7 @@ export const defaultSEOConfig: NextSeoProps = {
type: "website",
locale: "fa_IR",
url: SITE_URL,
site_name: "مدستاگرام",
site_name: defaultSite.name,
title: pageSeo.home.title,
description: pageSeo.home.description,
images: [
@@ -17,7 +21,7 @@ export const defaultSEOConfig: NextSeoProps = {
url: `${SITE_URL}/images/icons/256x256.png`,
width: 1200,
height: 630,
alt: "مدستاگرام",
alt: defaultSite.name,
},
],
},
@@ -63,7 +67,7 @@ export const defaultSEOConfig: NextSeoProps = {
},
{
rel: "manifest",
href: "/manifest.json",
href: "/manifest.webmanifest",
},
],
};

1
src/config/site.ts Normal file
View File

@@ -0,0 +1 @@
export const SITE_URL = "https://modstagram.com";