diff --git a/README.md b/README.md index 183efcc..3b375ad 100644 --- a/README.md +++ b/README.md @@ -110,12 +110,12 @@ src/ ## صفحه «درباره ما» -ظاهر این صفحه الهام‌گرفته از [omniyat.com/omniyat-atelier](https://www.omniyat.com/omniyat-atelier) +ظاهر این صفحه بر پایه زبان بصری جدید وب‌سایت رئوفی طراحی شده است. است، اما **تمام محتوا از صفحه درباره ما سایت رئوفی** برداشته شده است. سیستم چیدمانِ برگرفته از مرجع: -| ویژگی | مرجع (Omniyat) | پیاده‌سازی | +| ویژگی | طراحی هدف | پیاده‌سازی | | --- | --- | --- | | ریتم عمودی بلوک متن | `192px 48px` | `192px 48px` (موبایل: `96px 24px`) | | کپشن بالای تیتر | ۱۴px، `letter-spacing: 1.4px` | همان — فقط روی بخش لاتین | @@ -137,7 +137,7 @@ src/ ## صفحه «خدمات ما» -همان سیستم چیدمان صفحه درباره ما (الهام‌گرفته از Omniyat Atelier). +همان سیستم چیدمان صفحه درباره ما و زبان بصری جدید وب‌سایت. **نکته‌ی مهم درباره‌ی محتوا:** صفحه‌ی خدمات سایت فعلی فقط شامل شش عنوان خدمت و تیتر «با خدمات ما بیشتر آشنا شوید...» است — هیچ توضیحی برای خدمات ندارد و لینک همه‌ی diff --git a/public/omniyat-reference/about/cta-desktop.mp4 b/public/raoofi-media/about/cta-desktop.mp4 similarity index 100% rename from public/omniyat-reference/about/cta-desktop.mp4 rename to public/raoofi-media/about/cta-desktop.mp4 diff --git a/public/omniyat-reference/about/cta-mobile.mp4 b/public/raoofi-media/about/cta-mobile.mp4 similarity index 100% rename from public/omniyat-reference/about/cta-mobile.mp4 rename to public/raoofi-media/about/cta-mobile.mp4 diff --git a/public/omniyat-reference/about/founder-desktop.jpg b/public/raoofi-media/about/founder-desktop.jpg similarity index 100% rename from public/omniyat-reference/about/founder-desktop.jpg rename to public/raoofi-media/about/founder-desktop.jpg diff --git a/public/omniyat-reference/about/founder-mobile.jpg b/public/raoofi-media/about/founder-mobile.jpg similarity index 100% rename from public/omniyat-reference/about/founder-mobile.jpg rename to public/raoofi-media/about/founder-mobile.jpg diff --git a/public/omniyat-reference/about/hero-desktop.mp4 b/public/raoofi-media/about/hero-desktop.mp4 similarity index 100% rename from public/omniyat-reference/about/hero-desktop.mp4 rename to public/raoofi-media/about/hero-desktop.mp4 diff --git a/public/omniyat-reference/about/hero-mobile.mp4 b/public/raoofi-media/about/hero-mobile.mp4 similarity index 100% rename from public/omniyat-reference/about/hero-mobile.mp4 rename to public/raoofi-media/about/hero-mobile.mp4 diff --git a/public/omniyat-reference/about/pillar-1.webp b/public/raoofi-media/about/pillar-1.webp similarity index 100% rename from public/omniyat-reference/about/pillar-1.webp rename to public/raoofi-media/about/pillar-1.webp diff --git a/public/omniyat-reference/about/pillar-2.webp b/public/raoofi-media/about/pillar-2.webp similarity index 100% rename from public/omniyat-reference/about/pillar-2.webp rename to public/raoofi-media/about/pillar-2.webp diff --git a/public/omniyat-reference/about/pillar-3.webp b/public/raoofi-media/about/pillar-3.webp similarity index 100% rename from public/omniyat-reference/about/pillar-3.webp rename to public/raoofi-media/about/pillar-3.webp diff --git a/public/omniyat-reference/about/pillar-4.webp b/public/raoofi-media/about/pillar-4.webp similarity index 100% rename from public/omniyat-reference/about/pillar-4.webp rename to public/raoofi-media/about/pillar-4.webp diff --git a/public/omniyat-reference/about/timeline-1.webp b/public/raoofi-media/about/timeline-1.webp similarity index 100% rename from public/omniyat-reference/about/timeline-1.webp rename to public/raoofi-media/about/timeline-1.webp diff --git a/public/omniyat-reference/about/timeline-2.webp b/public/raoofi-media/about/timeline-2.webp similarity index 100% rename from public/omniyat-reference/about/timeline-2.webp rename to public/raoofi-media/about/timeline-2.webp diff --git a/public/omniyat-reference/about/timeline-3.webp b/public/raoofi-media/about/timeline-3.webp similarity index 100% rename from public/omniyat-reference/about/timeline-3.webp rename to public/raoofi-media/about/timeline-3.webp diff --git a/public/omniyat-reference/about/timeline-4.webp b/public/raoofi-media/about/timeline-4.webp similarity index 100% rename from public/omniyat-reference/about/timeline-4.webp rename to public/raoofi-media/about/timeline-4.webp diff --git a/public/omniyat-reference/atelier.png b/public/raoofi-media/atelier.png similarity index 100% rename from public/omniyat-reference/atelier.png rename to public/raoofi-media/atelier.png diff --git a/public/raoofi-media/atelier/collection-1.webp b/public/raoofi-media/atelier/collection-1.webp new file mode 100644 index 0000000..5caed24 Binary files /dev/null and b/public/raoofi-media/atelier/collection-1.webp differ diff --git a/public/raoofi-media/atelier/collection-2.webp b/public/raoofi-media/atelier/collection-2.webp new file mode 100644 index 0000000..820541f Binary files /dev/null and b/public/raoofi-media/atelier/collection-2.webp differ diff --git a/public/raoofi-media/atelier/collection-3.webp b/public/raoofi-media/atelier/collection-3.webp new file mode 100644 index 0000000..d34d7ac Binary files /dev/null and b/public/raoofi-media/atelier/collection-3.webp differ diff --git a/public/raoofi-media/atelier/hero-desktop.mp4 b/public/raoofi-media/atelier/hero-desktop.mp4 new file mode 100644 index 0000000..d0cdea0 Binary files /dev/null and b/public/raoofi-media/atelier/hero-desktop.mp4 differ diff --git a/public/raoofi-media/atelier/hero-mobile.mp4 b/public/raoofi-media/atelier/hero-mobile.mp4 new file mode 100644 index 0000000..8417c8e Binary files /dev/null and b/public/raoofi-media/atelier/hero-mobile.mp4 differ diff --git a/public/raoofi-media/atelier/hero-poster.jpg b/public/raoofi-media/atelier/hero-poster.jpg new file mode 100644 index 0000000..0fa0551 Binary files /dev/null and b/public/raoofi-media/atelier/hero-poster.jpg differ diff --git a/public/raoofi-media/atelier/story-1.webp b/public/raoofi-media/atelier/story-1.webp new file mode 100644 index 0000000..f57a461 Binary files /dev/null and b/public/raoofi-media/atelier/story-1.webp differ diff --git a/public/raoofi-media/atelier/story-2.webp b/public/raoofi-media/atelier/story-2.webp new file mode 100644 index 0000000..b10d9f0 Binary files /dev/null and b/public/raoofi-media/atelier/story-2.webp differ diff --git a/public/raoofi-media/atelier/story-3.jpg b/public/raoofi-media/atelier/story-3.jpg new file mode 100644 index 0000000..2086e30 Binary files /dev/null and b/public/raoofi-media/atelier/story-3.jpg differ diff --git a/public/raoofi-media/atelier/story-4.webp b/public/raoofi-media/atelier/story-4.webp new file mode 100644 index 0000000..f52dd92 Binary files /dev/null and b/public/raoofi-media/atelier/story-4.webp differ diff --git a/public/raoofi-media/atelier/textured-background.webp b/public/raoofi-media/atelier/textured-background.webp new file mode 100644 index 0000000..0fcac01 Binary files /dev/null and b/public/raoofi-media/atelier/textured-background.webp differ diff --git a/public/omniyat-reference/hero-video-mobile.mp4 b/public/raoofi-media/hero-video-mobile.mp4 similarity index 100% rename from public/omniyat-reference/hero-video-mobile.mp4 rename to public/raoofi-media/hero-video-mobile.mp4 diff --git a/public/omniyat-reference/hero-video.mp4 b/public/raoofi-media/hero-video.mp4 similarity index 100% rename from public/omniyat-reference/hero-video.mp4 rename to public/raoofi-media/hero-video.mp4 diff --git a/public/omniyat-reference/hero.jpg b/public/raoofi-media/hero.jpg similarity index 100% rename from public/omniyat-reference/hero.jpg rename to public/raoofi-media/hero.jpg diff --git a/public/omniyat-reference/news-1.jpg b/public/raoofi-media/news-1.jpg similarity index 100% rename from public/omniyat-reference/news-1.jpg rename to public/raoofi-media/news-1.jpg diff --git a/public/omniyat-reference/news-2.jpg b/public/raoofi-media/news-2.jpg similarity index 100% rename from public/omniyat-reference/news-2.jpg rename to public/raoofi-media/news-2.jpg diff --git a/public/omniyat-reference/news-3.jpg b/public/raoofi-media/news-3.jpg similarity index 100% rename from public/omniyat-reference/news-3.jpg rename to public/raoofi-media/news-3.jpg diff --git a/public/omniyat-reference/partner-dorchester.webp b/public/raoofi-media/partner-dorchester.webp similarity index 100% rename from public/omniyat-reference/partner-dorchester.webp rename to public/raoofi-media/partner-dorchester.webp diff --git a/public/omniyat-reference/partner-foster.webp b/public/raoofi-media/partner-foster.webp similarity index 100% rename from public/omniyat-reference/partner-foster.webp rename to public/raoofi-media/partner-foster.webp diff --git a/public/omniyat-reference/partner-gilles.webp b/public/raoofi-media/partner-gilles.webp similarity index 100% rename from public/omniyat-reference/partner-gilles.webp rename to public/raoofi-media/partner-gilles.webp diff --git a/public/omniyat-reference/partner-vladimir.webp b/public/raoofi-media/partner-vladimir.webp similarity index 100% rename from public/omniyat-reference/partner-vladimir.webp rename to public/raoofi-media/partner-vladimir.webp diff --git a/public/omniyat-reference/partner-yodezeen.jpg b/public/raoofi-media/partner-yodezeen.jpg similarity index 100% rename from public/omniyat-reference/partner-yodezeen.jpg rename to public/raoofi-media/partner-yodezeen.jpg diff --git a/public/omniyat-reference/partner-zaha.webp b/public/raoofi-media/partner-zaha.webp similarity index 100% rename from public/omniyat-reference/partner-zaha.webp rename to public/raoofi-media/partner-zaha.webp diff --git a/public/omniyat-reference/project-1.webp b/public/raoofi-media/project-1.webp similarity index 100% rename from public/omniyat-reference/project-1.webp rename to public/raoofi-media/project-1.webp diff --git a/public/omniyat-reference/project-2.webp b/public/raoofi-media/project-2.webp similarity index 100% rename from public/omniyat-reference/project-2.webp rename to public/raoofi-media/project-2.webp diff --git a/public/omniyat-reference/project-3.webp b/public/raoofi-media/project-3.webp similarity index 100% rename from public/omniyat-reference/project-3.webp rename to public/raoofi-media/project-3.webp diff --git a/public/omniyat-reference/project-4.webp b/public/raoofi-media/project-4.webp similarity index 100% rename from public/omniyat-reference/project-4.webp rename to public/raoofi-media/project-4.webp diff --git a/public/raoofi-media/services/hero-desktop.mp4 b/public/raoofi-media/services/hero-desktop.mp4 new file mode 100644 index 0000000..0ad8709 Binary files /dev/null and b/public/raoofi-media/services/hero-desktop.mp4 differ diff --git a/public/raoofi-media/services/hero-mobile.mp4 b/public/raoofi-media/services/hero-mobile.mp4 new file mode 100644 index 0000000..ad2aedb Binary files /dev/null and b/public/raoofi-media/services/hero-mobile.mp4 differ diff --git a/public/raoofi-media/services/overview-1.webp b/public/raoofi-media/services/overview-1.webp new file mode 100644 index 0000000..3743a9b Binary files /dev/null and b/public/raoofi-media/services/overview-1.webp differ diff --git a/public/raoofi-media/services/overview-2.jpg b/public/raoofi-media/services/overview-2.jpg new file mode 100644 index 0000000..e89a7d6 Binary files /dev/null and b/public/raoofi-media/services/overview-2.jpg differ diff --git a/public/raoofi-media/services/portfolio-1.webp b/public/raoofi-media/services/portfolio-1.webp new file mode 100644 index 0000000..b10d9f0 Binary files /dev/null and b/public/raoofi-media/services/portfolio-1.webp differ diff --git a/public/raoofi-media/services/portfolio-2.webp b/public/raoofi-media/services/portfolio-2.webp new file mode 100644 index 0000000..f57a461 Binary files /dev/null and b/public/raoofi-media/services/portfolio-2.webp differ diff --git a/public/raoofi-media/services/portfolio-3.webp b/public/raoofi-media/services/portfolio-3.webp new file mode 100644 index 0000000..f52dd92 Binary files /dev/null and b/public/raoofi-media/services/portfolio-3.webp differ diff --git a/public/raoofi-media/services/portfolio-4.jpg b/public/raoofi-media/services/portfolio-4.jpg new file mode 100644 index 0000000..2086e30 Binary files /dev/null and b/public/raoofi-media/services/portfolio-4.jpg differ diff --git a/public/raoofi-media/services/portfolio-5.jpg b/public/raoofi-media/services/portfolio-5.jpg new file mode 100644 index 0000000..137afaa Binary files /dev/null and b/public/raoofi-media/services/portfolio-5.jpg differ diff --git a/public/raoofi-media/services/portfolio-6.webp b/public/raoofi-media/services/portfolio-6.webp new file mode 100644 index 0000000..af1d057 Binary files /dev/null and b/public/raoofi-media/services/portfolio-6.webp differ diff --git a/public/raoofi-media/services/portfolio-7.webp b/public/raoofi-media/services/portfolio-7.webp new file mode 100644 index 0000000..c9b72e9 Binary files /dev/null and b/public/raoofi-media/services/portfolio-7.webp differ diff --git a/public/raoofi-media/services/service-1.jpg b/public/raoofi-media/services/service-1.jpg new file mode 100644 index 0000000..23be4ab Binary files /dev/null and b/public/raoofi-media/services/service-1.jpg differ diff --git a/public/raoofi-media/services/service-2.jpg b/public/raoofi-media/services/service-2.jpg new file mode 100644 index 0000000..4a7ae25 Binary files /dev/null and b/public/raoofi-media/services/service-2.jpg differ diff --git a/public/raoofi-media/services/service-3.jpg b/public/raoofi-media/services/service-3.jpg new file mode 100644 index 0000000..1cee0e3 Binary files /dev/null and b/public/raoofi-media/services/service-3.jpg differ diff --git a/public/raoofi-media/services/service-4.jpg b/public/raoofi-media/services/service-4.jpg new file mode 100644 index 0000000..5d26665 Binary files /dev/null and b/public/raoofi-media/services/service-4.jpg differ diff --git a/public/raoofi-media/services/service-5.jpg b/public/raoofi-media/services/service-5.jpg new file mode 100644 index 0000000..f65042d Binary files /dev/null and b/public/raoofi-media/services/service-5.jpg differ diff --git a/src/app/aboutus/page.tsx b/src/app/aboutus/page.tsx index afd28b1..56f2537 100644 --- a/src/app/aboutus/page.tsx +++ b/src/app/aboutus/page.tsx @@ -1,6 +1,6 @@ import type { Metadata } from "next"; -import { OmniyatAbout } from "@/components/about/OmniyatAbout"; +import { RaoofiAbout } from "@/components/about/RaoofiAbout"; import { SiteFooter } from "@/components/SiteFooter"; import { SiteHeader } from "@/components/SiteHeader"; import { getRecentPortfolios, toDisplayProject } from "@/lib/api"; @@ -19,7 +19,7 @@ export default async function AboutPage() { return ( <> - + ); diff --git a/src/app/api/contact/route.ts b/src/app/api/contact/route.ts new file mode 100644 index 0000000..d416df7 --- /dev/null +++ b/src/app/api/contact/route.ts @@ -0,0 +1,72 @@ +import { NextResponse } from "next/server"; + +const CONTACT_ENDPOINT = + "https://api.meshkee.com/api/v1/tenants/raoofigroup.com/contact-submissions"; +const REQUEST_TIMEOUT_MS = 10_000; + +type ContactRequest = { + name?: unknown; + phone?: unknown; + email?: unknown; + message?: unknown; +}; + +function clean(value: unknown, maxLength: number) { + return typeof value === "string" ? value.trim().slice(0, maxLength) : ""; +} + +export async function POST(request: Request) { + let body: ContactRequest; + + try { + body = (await request.json()) as ContactRequest; + } catch { + return NextResponse.json({ message: "اطلاعات فرم معتبر نیست." }, { status: 400 }); + } + + const name = clean(body.name, 120); + const cellNumber = clean(body.phone, 16); + const email = clean(body.email, 254); + const text = clean(body.message, 4_000); + + if (!name || !text || !/^\+989\d{9}$/.test(cellNumber)) { + return NextResponse.json({ message: "لطفاً اطلاعات فرم را به‌درستی وارد کنید." }, { status: 400 }); + } + + if (email && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) { + return NextResponse.json({ message: "نشانی ایمیل معتبر نیست." }, { status: 400 }); + } + + try { + const response = await fetch(CONTACT_ENDPOINT, { + method: "POST", + headers: { + Accept: "application/json", + "Content-Type": "application/json", + }, + body: JSON.stringify({ + title: "درخواست تماس از وب‌سایت رئوفی", + name, + cellNumber, + text, + ...(email ? { email } : {}), + }), + cache: "no-store", + signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS), + }); + + if (!response.ok) { + return NextResponse.json( + { message: "ارسال پیام با خطا روبه‌رو شد. لطفاً دوباره تلاش کنید." }, + { status: response.status >= 500 ? 502 : 400 }, + ); + } + + return NextResponse.json({ message: "پیام شما با موفقیت ارسال شد." }, { status: 201 }); + } catch { + return NextResponse.json( + { message: "در حال حاضر ارتباط با سرویس پیام برقرار نیست. لطفاً کمی بعد دوباره تلاش کنید." }, + { status: 503 }, + ); + } +} diff --git a/src/app/atelier/page.tsx b/src/app/atelier/page.tsx new file mode 100644 index 0000000..544067d --- /dev/null +++ b/src/app/atelier/page.tsx @@ -0,0 +1,20 @@ +import type { Metadata } from "next"; + +import { RaoofiAtelier } from "@/components/atelier/RaoofiAtelier"; +import { SiteFooter } from "@/components/SiteFooter"; +import { SiteHeader } from "@/components/SiteHeader"; + +export const metadata: Metadata = { + title: "آتلیه رئوفی", + description: "آتلیه رئوفی؛ خلق فضاهای شخصی، کمیاب و ماندگار با طراحی و اجرای یکپارچه.", +}; + +export default function AtelierPage() { + return ( + <> + + + + + ); +} diff --git a/src/app/blog/page.tsx b/src/app/blog/page.tsx index 94b20ff..98107cc 100644 --- a/src/app/blog/page.tsx +++ b/src/app/blog/page.tsx @@ -50,7 +50,7 @@ export default async function BlogListPage({ /> -
+
-
-
+
+
{/* Contact info + map */} - + @@ -58,14 +59,14 @@ export default function ContactPage() {
  • -

    {contact.address}

    +

    {contact.address}

  • {contact.phones.map((phone, i) => (
  • {phone} @@ -76,7 +77,7 @@ export default function ContactPage() {
  • {contact.email} @@ -86,7 +87,7 @@ export default function ContactPage() {
  • {contact.instagram} @@ -94,21 +95,21 @@ export default function ContactPage() {
-
+