Create Saman Andish industrial website

Build a responsive Persian Next.js experience with product discovery and dedicated company contact pages.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-24 10:01:50 +03:30
co-authored by Cursor
commit 8e376560cd
15 changed files with 10774 additions and 0 deletions
+15
View File
@@ -0,0 +1,15 @@
# dependencies
/node_modules
# Next.js build output
/.next
/out
# local files
.DS_Store
*.log
.env*
# TypeScript
*.tsbuildinfo
next-env.d.ts
+9
View File
@@ -0,0 +1,9 @@
<!-- BEGIN:nextjs-agent-rules -->
# This is NOT the Next.js you know
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` (resolved from this file's directory; in monorepos the `next` package may not be visible from the repo root) before writing any code. Heed deprecation notices.
This block is written and re-added by `next dev` — verify at `node_modules/next/dist/server/lib/generate-agent-files.js`. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean.
<!-- END:nextjs-agent-rules -->
+16
View File
@@ -0,0 +1,16 @@
Create a website from this website
https://www.samanandish.co/
Website is about heavy machinery seller and company, mainly in wire and cable industry
Website is not ssl but its ok to pass it
You can use content and images
Lang:fa
Directions: rtl
Use next js
Design only homepage
Use the same font for Persian font and cool industrial en font
Sections are the same
search is very important for this website
I will connect product to backend later
+1
View File
@@ -0,0 +1 @@
@AGENTS.md
+211
View File
@@ -0,0 +1,211 @@
import type { Metadata } from "next";
import {
ArrowLeft,
Award,
CheckCircle2,
Factory,
Gauge,
Globe2,
Handshake,
Target,
Users,
} from "lucide-react";
import Link from "next/link";
import { InteriorFooter, InteriorHeader } from "../components/InteriorShell";
const assetBase =
"https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/SamanAndish_OcHaRXRqAo/assets/files";
export const metadata: Metadata = {
title: "درباره سامان اندیش | تجربه تخصصی صنعت سیم و کابل",
description:
"با تاریخچه، ارزش‌ها و توانمندی‌های تخصصی شرکت سامان اندیش در تأمین ماشین‌آلات صنعت سیم و کابل آشنا شوید.",
};
export default function AboutUsPage() {
return (
<main>
<InteriorHeader active="about" />
<section
className="inner-hero"
style={{ backgroundImage: `url("${assetBase}/s9zJRbKrhE.jpg")` }}
>
<div className="inner-hero__shade" />
<div className="container inner-hero__content">
<span>ABOUT SAMAN ANDISH</span>
<h1>درباره سامان اندیش</h1>
<p>
بیش از دو دهه تجربه در پیوند فناوری جهانی با صنعت سیم و کابل ایران
</p>
<div>
<Link href="/">صفحه اصلی</Link>
<i>/</i>
<strong>درباره ما</strong>
</div>
</div>
</section>
<section className="about-intro">
<div className="container about-intro__grid">
<div className="about-intro__visual">
<img
src={`${assetBase}/trEfzlNgmz.jpg`}
alt="ماشین‌آلات صنعت سیم و کابل"
/>
<div>
<strong dir="ltr">25+</strong>
<span>سال تجربه تخصصی</span>
</div>
</div>
<div className="about-intro__copy">
<span className="inner-eyebrow">WHO WE ARE</span>
<h2>همراه صنعت، از انتخاب تا بهره‌برداری</h2>
<p className="lead">
سامان اندیش یک مجموعه مهندسی و بازرگانی تخصصی در حوزه ماشین‌آلات،
مواد اولیه و خدمات فنی صنعت سیم و کابل است.
</p>
<p>
ما با شناخت عمیق از فرآیندهای تولید و همکاری با سازندگان معتبر
بین‌المللی، به کارخانه‌ها کمک می‌کنیم مناسب‌ترین راهکار را بر اساس
ظرفیت تولید، بودجه و برنامه توسعه خود انتخاب کنند. همکاری ما با
فروش دستگاه پایان نمی‌یابد؛ ارزیابی فنی، حمل، نصب، راه‌اندازی و
پشتیبانی، بخش جدایی‌ناپذیر تعهد ماست.
</p>
<div className="about-checks">
{[
"ارزیابی فنی پیش از خرید",
"شبکه تأمین بین‌المللی",
"نصب و راه‌اندازی تخصصی",
"پشتیبانی بلندمدت",
].map((item) => (
<span key={item}>
<CheckCircle2 />
{item}
</span>
))}
</div>
</div>
</div>
</section>
<section className="about-stats">
<div className="container about-stats__grid">
{[
["۲۵+", "سال تجربه"],
["۱۲۰+", "ماشین‌آلات تأمین‌شده"],
["۴۰+", "برند بین‌المللی"],
["۸۰+", "مشتری صنعتی"],
].map(([number, label]) => (
<div key={label}>
<strong>{number}</strong>
<span>{label}</span>
</div>
))}
</div>
</section>
<section className="mission">
<div className="container">
<div className="inner-section-title">
<span>OUR PURPOSE</span>
<h2>آنچه مسیر ما را می‌سازد</h2>
</div>
<div className="mission__grid">
<article>
<span>
<Target />
</span>
<small>01</small>
<h3>ماموریت ما</h3>
<p>
ارائه راهکارهای صنعتی قابل اتکا که بهره‌وری، کیفیت و پایداری
خطوط تولید مشتریان را افزایش دهد.
</p>
</article>
<article>
<span>
<Globe2 />
</span>
<small>02</small>
<h3>چشم‌انداز ما</h3>
<p>
تبدیل شدن به مرجع نخست تأمین و مهندسی ماشین‌آلات سیم و کابل در
بازار ایران و منطقه.
</p>
</article>
<article>
<span>
<Handshake />
</span>
<small>03</small>
<h3>تعهد ما</h3>
<p>
ساختن همکاری شفاف و بلندمدت؛ از نخستین مشاوره تا سال‌ها پس از
بهره‌برداری تجهیزات.
</p>
</article>
</div>
</div>
</section>
<section className="why-us">
<div className="container why-us__grid">
<div className="why-us__copy">
<span className="inner-eyebrow">WHY SAMAN ANDISH</span>
<h2>تخصصی که به تصمیم بهتر تبدیل می‌شود</h2>
<p>
هر پروژه را با شناخت دقیق نیاز تولید آغاز می‌کنیم و با ترکیب دانش
فنی، تجربه بازار و دسترسی به تأمین‌کنندگان جهانی، ریسک انتخاب و
خرید را کاهش می‌دهیم.
</p>
<div>
{[
[Factory, "شناخت فرآیند تولید", "تحلیل دقیق نیاز هر خط"],
[Gauge, "تمرکز بر بهره‌وری", "انتخاب اقتصادی و پایدار"],
[Award, "کیفیت قابل ارزیابی", "بازرسی و مستندسازی فنی"],
[Users, "تیم همراه", "پاسخ‌گویی در تمام مراحل"],
].map(([Icon, title, text]) => {
const FeatureIcon = Icon as typeof Factory;
return (
<article key={title as string}>
<FeatureIcon />
<span>
<strong>{title as string}</strong>
<small>{text as string}</small>
</span>
</article>
);
})}
</div>
</div>
<div className="why-us__image">
<img
src={`${assetBase}/rhipZeVqzD.jpg`}
alt="خدمات مهندسی سامان اندیش"
/>
<div>
<strong>راهکار مناسب،</strong>
<span>برای خط تولید شما</span>
</div>
</div>
</div>
</section>
<section className="inner-cta">
<div className="container">
<div>
<span>شروع یک همکاری مطمئن</span>
<h2>برای توسعه خط تولید خود با ما گفتگو کنید.</h2>
</div>
<Link className="button button--white" href="/contact-us">
تماس با کارشناسان
<ArrowLeft size={18} />
</Link>
</div>
</section>
<InteriorFooter />
</main>
);
}
+187
View File
@@ -0,0 +1,187 @@
"use client";
import {
ArrowUpLeft,
Camera,
ChevronLeft,
CircleUserRound,
Link as LinkIcon,
Mail,
MapPin,
Menu,
MessageCircle,
Phone,
Search,
Sparkles,
X,
} from "lucide-react";
import Link from "next/link";
import { useState } from "react";
const assetBase =
"https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/SamanAndish_OcHaRXRqAo/assets/files";
const navItems = [
{ label: "صفحه اصلی", href: "/" },
{ label: "محصولات", href: "/#products" },
{ label: "خدمات", href: "/#services" },
{ label: "اخبار", href: "/#news" },
{ label: "درباره ما", href: "/about-us", key: "about" },
{ label: "تماس با ما", href: "/contact-us", key: "contact" },
];
export function InteriorHeader({
active,
}: {
active?: "about" | "contact";
}) {
const [mobileOpen, setMobileOpen] = useState(false);
return (
<>
<div className="topbar">
<div className="container topbar__inner">
<p>
<Sparkles size={14} />
شریک تخصصی صنعت سیم و کابل ایران
</p>
<div>
<a href="mailto:info@samanandish.com">
<Mail size={14} />
info@samanandish.com
</a>
<span />
<a href="tel:+982188530256" dir="ltr">
<Phone size={14} />
+98 21 8853 0256
</a>
</div>
</div>
</div>
<header className="header">
<div className="container header__inner">
<Link className="logo" href="/" aria-label="سامان اندیش">
<img src={`${assetBase}/KN83Drb6oI.png`} alt="سامان اندیش" />
</Link>
<nav className="desktop-nav" aria-label="ناوبری اصلی">
{navItems.map((item) => (
<Link
className={item.key === active ? "active" : ""}
href={item.href}
key={item.label}
>
{item.label}
</Link>
))}
</nav>
<div className="header__actions">
<Link className="icon-button" href="/#smart-search" aria-label="جستجو">
<Search size={22} />
</Link>
<button className="icon-button user-button" aria-label="حساب کاربری">
<CircleUserRound size={22} />
</button>
<Link className="header__cta" href="/contact-us">
درخواست مشاوره
<ArrowUpLeft size={17} />
</Link>
<button
className="mobile-toggle"
onClick={() => setMobileOpen((open) => !open)}
aria-label="منو"
>
{mobileOpen ? <X /> : <Menu />}
</button>
</div>
</div>
{mobileOpen && (
<nav className="mobile-nav">
{navItems.map((item) => (
<Link
href={item.href}
key={item.label}
onClick={() => setMobileOpen(false)}
>
{item.label}
<ChevronLeft size={17} />
</Link>
))}
</nav>
)}
</header>
</>
);
}
export function InteriorFooter() {
return (
<footer className="footer">
<div className="footer__pattern" />
<div className="container footer__grid">
<div className="footer__brand">
<img src={`${assetBase}/4eEq8S7FxV.png`} alt="سامان اندیش" />
<p>
تأمین‌کننده تخصصی ماشین‌آلات و راهکارهای فنی صنعت سیم و کابل، با
تمرکز بر کیفیت، بهره‌وری و همکاری بلندمدت.
</p>
<div>
<a href="#" aria-label="اینستاگرام">
<Camera />
</a>
<a href="#" aria-label="لینکدین">
<LinkIcon />
</a>
<a href="#" aria-label="تلگرام">
<MessageCircle />
</a>
</div>
</div>
<div className="footer__links">
<h3>دسترسی سریع</h3>
<Link href="/">صفحه اصلی</Link>
<Link href="/#products">ماشین‌آلات</Link>
<Link href="/about-us">درباره ما</Link>
<Link href="/contact-us">تماس با ما</Link>
</div>
<div className="footer__links">
<h3>خدمات ما</h3>
<Link href="/#services">تأمین ماشین‌آلات</Link>
<Link href="/#services">خدمات فنی و مهندسی</Link>
<Link href="/#services">مواد اولیه</Link>
<Link href="/contact-us">مشاوره خرید</Link>
</div>
<div className="footer__contact">
<h3>با ما در ارتباط باشید</h3>
<a href="tel:+982188530256">
<span>
<Phone />
</span>
<div>
<small>شماره تماس</small>
<strong dir="ltr">021 8853 0256</strong>
</div>
</a>
<a href="mailto:info@samanandish.com">
<span>
<Mail />
</span>
<div>
<small>ایمیل</small>
<strong>info@samanandish.com</strong>
</div>
</a>
<div className="address">
<span>
<MapPin />
</span>
<p>تهران، خیابان مطهری، خیابان ترکمنستان</p>
</div>
</div>
</div>
<div className="container footer__bottom">
<p>© ۱۴۰۵ سامان اندیش — تمامی حقوق محفوظ است.</p>
<span dir="ltr">ENGINEERED FOR INDUSTRY</span>
</div>
</footer>
);
}
+86
View File
@@ -0,0 +1,86 @@
"use client";
import { ArrowLeft, CheckCircle2 } from "lucide-react";
import type { FormEvent } from "react";
import { useState } from "react";
export default function ContactForm() {
const [submitted, setSubmitted] = useState(false);
const submit = (event: FormEvent<HTMLFormElement>) => {
event.preventDefault();
setSubmitted(true);
};
if (submitted) {
return (
<div className="contact-success">
<CheckCircle2 />
<h3>پیام شما ثبت شد</h3>
<p>کارشناسان سامان اندیش در اولین فرصت با شما تماس خواهند گرفت.</p>
<button onClick={() => setSubmitted(false)}>ارسال پیام دیگر</button>
</div>
);
}
return (
<form className="contact-form" onSubmit={submit}>
<div className="form-row">
<label>
نام و نام خانوادگی
<input name="name" placeholder="نام شما" required />
</label>
<label>
شماره تماس
<input
name="phone"
inputMode="tel"
placeholder="09xx xxx xxxx"
dir="ltr"
required
/>
</label>
</div>
<div className="form-row">
<label>
ایمیل
<input
name="email"
type="email"
placeholder="name@company.com"
dir="ltr"
/>
</label>
<label>
موضوع درخواست
<select name="subject" defaultValue="">
<option value="" disabled>
انتخاب کنید
</option>
<option>خرید ماشین‌آلات</option>
<option>خدمات فنی و مهندسی</option>
<option>تأمین مواد اولیه</option>
<option>همکاری تجاری</option>
<option>سایر موارد</option>
</select>
</label>
</div>
<label>
پیام شما
<textarea
name="message"
rows={6}
placeholder="درباره دستگاه، برند، ظرفیت تولید یا خدمات مورد نیاز توضیح دهید..."
required
/>
</label>
<button type="submit">
ارسال درخواست
<ArrowLeft size={18} />
</button>
<small>
با ارسال فرم، کارشناسان ما برای تکمیل اطلاعات با شما تماس می‌گیرند.
</small>
</form>
);
}
+158
View File
@@ -0,0 +1,158 @@
import type { Metadata } from "next";
import {
Clock3,
ExternalLink,
Mail,
MapPin,
MessageCircle,
Phone,
} from "lucide-react";
import Link from "next/link";
import { InteriorFooter, InteriorHeader } from "../components/InteriorShell";
import ContactForm from "./ContactForm";
const assetBase =
"https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/SamanAndish_OcHaRXRqAo/assets/files";
export const metadata: Metadata = {
title: "تماس با سامان اندیش | مشاوره ماشین‌آلات صنعتی",
description:
"برای مشاوره خرید ماشین‌آلات، خدمات فنی و تأمین مواد اولیه صنعت سیم و کابل با کارشناسان سامان اندیش تماس بگیرید.",
};
export default function ContactUsPage() {
return (
<main>
<InteriorHeader active="contact" />
<section
className="inner-hero inner-hero--contact"
style={{ backgroundImage: `url("${assetBase}/ZLxH2tZ4dR.jpg")` }}
>
<div className="inner-hero__shade" />
<div className="container inner-hero__content">
<span>GET IN TOUCH</span>
<h1>تماس با ما</h1>
<p>برای انتخاب بهترین راهکار صنعتی، کنار شما هستیم</p>
<div>
<Link href="/">صفحه اصلی</Link>
<i>/</i>
<strong>تماس با ما</strong>
</div>
</div>
</section>
<section className="contact-info">
<div className="container contact-info__grid">
<a href="tel:+982188530256">
<span>
<Phone />
</span>
<div>
<small>تماس مستقیم</small>
<strong dir="ltr">021 8853 0256</strong>
<p>پاسخ‌گویی شنبه تا چهارشنبه</p>
</div>
</a>
<a href="mailto:info@samanandish.com">
<span>
<Mail />
</span>
<div>
<small>ایمیل سازمانی</small>
<strong>info@samanandish.com</strong>
<p>برای ارسال مشخصات فنی و پیشنهادات</p>
</div>
</a>
<div>
<span>
<MapPin />
</span>
<div>
<small>دفتر مرکزی</small>
<strong>تهران، خیابان مطهری</strong>
<p>خیابان ترکمنستان، دفتر سامان اندیش</p>
</div>
</div>
</div>
</section>
<section className="contact-main">
<div className="container contact-main__grid">
<div className="contact-main__copy">
<span className="inner-eyebrow">SEND A MESSAGE</span>
<h2>درخواست خود را با ما در میان بگذارید</h2>
<p>
برای استعلام ماشین‌آلات، دریافت مشاوره فنی یا شروع همکاری، فرم را
تکمیل کنید. اطلاعات شما مستقیماً به تیم مرتبط ارجاع می‌شود.
</p>
<ContactForm />
</div>
<aside className="contact-aside">
<div className="contact-aside__image">
<img src={`${assetBase}/rf3fNjazCx.png`} alt="موقعیت سامان اندیش" />
<a
href="https://www.google.com/maps/place/Saman+Andish/@35.7424283,51.4396725,17z"
target="_blank"
rel="noreferrer"
>
مشاهده در نقشه
<ExternalLink size={16} />
</a>
</div>
<div className="office-hours">
<h3>
<Clock3 />
ساعت کاری
</h3>
<div>
<span>شنبه تا چهارشنبه</span>
<strong>۸:۳۰ تا ۱۷:۰۰</strong>
</div>
<div>
<span>پنج‌شنبه</span>
<strong>با هماهنگی قبلی</strong>
</div>
<div>
<span>جمعه</span>
<strong>تعطیل</strong>
</div>
</div>
<a className="quick-contact" href="tel:+982188530256">
<MessageCircle />
<span>
<small>نیاز به پاسخ سریع دارید؟</small>
<strong>همین حالا تماس بگیرید</strong>
</span>
</a>
</aside>
</div>
</section>
<section className="contact-departments">
<div className="container">
<div className="inner-section-title">
<span>DIRECT CONTACT</span>
<h2>ارتباط با واحدهای تخصصی</h2>
</div>
<div>
{[
["فروش ماشین‌آلات", "machinery@samanandish.com", "داخلی ۱۰۱"],
["خدمات فنی", "service@samanandish.com", "داخلی ۱۰۲"],
["همکاری تجاری", "commerce@samanandish.com", "داخلی ۱۰۳"],
].map(([title, email, extension]) => (
<article key={title}>
<small>{extension}</small>
<h3>{title}</h3>
<a href={`mailto:${email}`}>{email}</a>
</article>
))}
</div>
</div>
</section>
<InteriorFooter />
</main>
);
}
+3038
View File
File diff suppressed because it is too large Load Diff
+20
View File
@@ -0,0 +1,20 @@
import type { Metadata } from "next";
import "./globals.css";
export const metadata: Metadata = {
title: "سامان اندیش | ماشین‌آلات صنعت سیم و کابل",
description:
"تامین ماشین‌آلات، مواد اولیه و خدمات فنی مهندسی صنعت سیم و کابل",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="fa" dir="rtl">
<body>{children}</body>
</html>
);
}
+701
View File
@@ -0,0 +1,701 @@
"use client";
import {
ArrowLeft,
ArrowUpLeft,
BriefcaseBusiness,
Camera,
ChevronDown,
ChevronLeft,
ChevronRight,
CircleUserRound,
FlaskConical,
Gauge,
Globe2,
Link,
Mail,
MapPin,
Menu,
MessageCircle,
Phone,
Search,
Settings,
ShieldCheck,
SlidersHorizontal,
Sparkles,
X,
} from "lucide-react";
import type { FormEvent } from "react";
import { useEffect, useMemo, useRef, useState } from "react";
const assetBase =
"https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/SamanAndish_OcHaRXRqAo/assets/files";
const heroSlides = [
{
image: `${assetBase}/i8SsUDDMLv.jpg`,
eyebrow: "WIRE & CABLE MACHINERY",
title: "تجربه‌ای مطمئن در تأمین ماشین‌آلات صنعتی",
text: "راهکارهای تخصصی برای خطوط تولید سیم و کابل؛ از انتخاب و خرید تا نصب و راه‌اندازی.",
},
{
image: `${assetBase}/s9zJRbKrhE.jpg`,
eyebrow: "ENGINEERING THE FUTURE",
title: "مهندسی دقیق، عملکرد ماندگار",
text: "دسترسی به برندهای معتبر جهانی و مشاوره فنی متناسب با نیاز خط تولید شما.",
},
{
image: `${assetBase}/ZLxH2tZ4dR.jpg`,
eyebrow: "SAMAN ANDISH CO.",
title: "یک مسیر کوتاه‌تر تا خط تولید بهتر",
text: "ماشین‌آلات نو و کارکرده، مواد اولیه و خدمات مهندسی در یک مجموعه تخصصی.",
},
];
const categories = [
{
title: "ماشین‌آلات",
en: "MACHINERY",
image: `${assetBase}/MDJVsqMgHe.jpg`,
count: "+۱۲۰ دستگاه",
},
{
title: "خدمات فنی و مهندسی",
en: "TECHNICAL SERVICES",
image: `${assetBase}/68atRerNly.jpg`,
count: "از طراحی تا اجرا",
},
{
title: "مواد اولیه",
en: "RAW MATERIALS",
image: `${assetBase}/yxEFuyUDrT.jpg`,
count: "تأمین تخصصی",
},
];
const products = [
{
id: 1,
title: "دستگاه کوادینگ ۶۰۰ میلی‌متر",
en: "600mm Quadding Machine | QUA-21 | LESMO",
category: "دستگاه تابنده",
image:
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/b597976c3ce6012f3a07e9f5c71a3c8c/conversions/WhatsApp-Image-2021-11-13-at-16.48.24-thumbnail.jpg",
code: "LESMO / QUA-21",
},
{
id: 2,
title: "بریدر ۱۶ کریر",
en: "16 Carriers Braider | 16N4 | SPIRKA",
category: "دستگاه بافنده",
image:
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/24128c84241513596a1be1534a791c3b/conversions/IMG_20210911_125416-thumbnail.jpg",
code: "SPIRKA / 16N4",
},
{
id: 3,
title: "خط کشش ۰.۵–۰.۱۵ میلی‌متر",
en: "0.15–0.5 SQmm Drawing Line | TRB3 | SAMP",
category: "دستگاه کشش",
image:
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/74e48c1a38cb4022d50c45dbd3be1f9a/conversions/WhatsApp-Image-2021-11-13-at-13.48.57-thumbnail.jpg",
code: "SAMP / TRB3",
},
{
id: 4,
title: "پی‌آف ۶۰۰ میلی‌متر",
en: "600mm Pay Off | TAP D-0800 | KDM",
category: "دستگاه پی‌آف",
image:
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/86a2ebc1d9ebc0d693437b61502e03ce/conversions/Picture1-thumbnail.jpg",
code: "KDM / TAP D-0800",
},
];
const news = [
{
title: "شرکت مهندسی، مشاوره و بازرگانی HService",
date: "۰۸ خرداد ۱۴۰۲",
image:
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/2f19d9aa2413f3265b58d130ca4865ea/conversions/SATV---Weblog-Cover-thumbnail.jpg",
tag: "همکاری تجاری",
},
{
title: "نمایشگاه‌های تجاری پیشرو Wire و Tube",
date: "۲۴ اردیبهشت ۱۴۰۲",
image:
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/2434bffa9a1ba2b3f857680a8fbb5b4f/conversions/SATV---Blog-Cover---Wire-&-Tube-2022-thumbnail.jpg",
tag: "رویداد",
},
{
title: "انرژی پاک و بازار گواهی انرژی تجدیدپذیر",
date: "۱۲ اردیبهشت ۱۴۰۲",
image:
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/862690c612c4c41a2ddceb9bf7a5c848/conversions/SATV---Blog-Cover---Green-Energy-thumbnail.jpg",
tag: "دانش فنی",
},
];
const customerLogos = [
"JkHpH80NQA.png",
"StBGKS3FHm.png",
"GAQiN0WIK5.png",
"lRkE9W3Pi0.png",
"mTdHxPHztj.png",
"JcGMFJ8Tv5.png",
"WIvmqxoUPv.png",
"XhaGH9MU5o.png",
"PypItIBoI0.png",
"0Y6asKSTsI.png",
];
function SectionTitle({
eyebrow,
title,
light = false,
}: {
eyebrow: string;
title: string;
light?: boolean;
}) {
return (
<div className={`section-title ${light ? "section-title--light" : ""}`}>
<span>{eyebrow}</span>
<h2>{title}</h2>
<i />
</div>
);
}
export default function Home() {
const [mobileOpen, setMobileOpen] = useState(false);
const [activeSlide, setActiveSlide] = useState(0);
const [query, setQuery] = useState("");
const [searchOpen, setSearchOpen] = useState(false);
const searchInput = useRef<HTMLInputElement>(null);
useEffect(() => {
const timer = window.setInterval(
() => setActiveSlide((current) => (current + 1) % heroSlides.length),
6500,
);
return () => window.clearInterval(timer);
}, []);
const results = useMemo(() => {
const normalized = query.trim().toLowerCase();
if (!normalized) return products.slice(0, 3);
return products.filter((product) =>
[product.title, product.en, product.category, product.code]
.join(" ")
.toLowerCase()
.includes(normalized),
);
}, [query]);
const focusSearch = () => {
document.getElementById("smart-search")?.scrollIntoView({
behavior: "smooth",
block: "center",
});
window.setTimeout(() => {
searchInput.current?.focus();
setSearchOpen(true);
}, 500);
};
const submitSearch = (event: FormEvent<HTMLFormElement>) => {
event.preventDefault();
setSearchOpen(true);
};
return (
<main>
<div className="topbar">
<div className="container topbar__inner">
<p>
<Sparkles size={14} />
شریک تخصصی صنعت سیم و کابل ایران
</p>
<div>
<a href="mailto:info@samanandish.com">
<Mail size={14} />
info@samanandish.com
</a>
<span />
<a href="tel:+982188530256" dir="ltr">
<Phone size={14} />
+98 21 8853 0256
</a>
</div>
</div>
</div>
<header className="header">
<div className="container header__inner">
<a className="logo" href="#" aria-label="سامان اندیش">
<img src={`${assetBase}/KN83Drb6oI.png`} alt="سامان اندیش" />
</a>
<nav className="desktop-nav" aria-label="ناوبری اصلی">
<a className="active" href="#">
صفحه اصلی
</a>
<a href="#products">
محصولات
<ChevronDown size={14} />
</a>
<a href="#services">خدمات</a>
<a href="#news">اخبار</a>
<a href="/about-us">درباره ما</a>
<a href="/contact-us">تماس با ما</a>
</nav>
<div className="header__actions">
<button className="icon-button" onClick={focusSearch} aria-label="جستجو">
<Search size={22} />
</button>
<button className="icon-button user-button" aria-label="حساب کاربری">
<CircleUserRound size={22} />
</button>
<a className="header__cta" href="/contact-us">
درخواست مشاوره
<ArrowUpLeft size={17} />
</a>
<button
className="mobile-toggle"
onClick={() => setMobileOpen((open) => !open)}
aria-label="منو"
>
{mobileOpen ? <X /> : <Menu />}
</button>
</div>
</div>
{mobileOpen && (
<nav className="mobile-nav">
{[
["صفحه اصلی", "#"],
["محصولات", "#products"],
["خدمات", "#services"],
["اخبار", "#news"],
["درباره ما", "/about-us"],
["تماس با ما", "/contact-us"],
].map(([label, href]) => (
<a key={label} href={href} onClick={() => setMobileOpen(false)}>
{label}
<ChevronLeft size={17} />
</a>
))}
</nav>
)}
</header>
<section className="hero">
{heroSlides.map((slide, index) => (
<div
className={`hero__slide ${index === activeSlide ? "is-active" : ""}`}
key={slide.image}
style={{ backgroundImage: `url("${slide.image}")` }}
/>
))}
<div className="hero__overlay" />
<div className="hero__pattern" />
<div className="container hero__content">
<div className="hero__copy">
<p className="eyebrow">{heroSlides[activeSlide].eyebrow}</p>
<h1>{heroSlides[activeSlide].title}</h1>
<p className="hero__description">{heroSlides[activeSlide].text}</p>
<div className="hero__buttons">
<a className="button button--red" href="#products">
مشاهده محصولات
<ArrowLeft size={19} />
</a>
<a className="button button--glass" href="/about-us">
درباره سامان اندیش
</a>
</div>
</div>
<div className="hero__stats" dir="ltr">
<div>
<strong>25+</strong>
<span>YEARS EXPERIENCE</span>
</div>
<i />
<div>
<strong>120+</strong>
<span>INDUSTRIAL MACHINES</span>
</div>
</div>
</div>
<div className="hero__controls">
<button
onClick={() =>
setActiveSlide(
(activeSlide - 1 + heroSlides.length) % heroSlides.length,
)
}
aria-label="اسلاید قبلی"
>
<ChevronRight />
</button>
<div>
{heroSlides.map((slide, index) => (
<button
className={index === activeSlide ? "active" : ""}
key={slide.image}
onClick={() => setActiveSlide(index)}
aria-label={`اسلاید ${index + 1}`}
/>
))}
</div>
<button
onClick={() => setActiveSlide((activeSlide + 1) % heroSlides.length)}
aria-label="اسلاید بعدی"
>
<ChevronLeft />
</button>
</div>
</section>
<section className="search-panel" id="smart-search">
<div className="container">
<div className="search-card">
<div className="search-card__title">
<span>
<Search size={26} />
</span>
<div>
<strong>دنبال چه دستگاهی هستید؟</strong>
<small>نام، مدل، برند یا دسته‌بندی را وارد کنید</small>
</div>
</div>
<form onSubmit={submitSearch}>
<input
ref={searchInput}
type="search"
value={query}
onChange={(event) => {
setQuery(event.target.value);
setSearchOpen(true);
}}
onFocus={() => setSearchOpen(true)}
placeholder="مثلاً اکسترودر، دستگاه کشش یا Maillefer..."
/>
<button type="submit">
جستجوی محصولات
<Search size={18} />
</button>
</form>
<div className="quick-search">
<span>جستجوی سریع:</span>
{["اکسترودر", "دستگاه کشش", "تیک‌آپ", "پی‌آف"].map((item) => (
<button
key={item}
onClick={() => {
setQuery(item);
setSearchOpen(true);
}}
>
{item}
</button>
))}
</div>
{searchOpen && (
<div className="search-results">
<div className="search-results__head">
<span>{results.length} نتیجه پیشنهادی</span>
<button onClick={() => setSearchOpen(false)} aria-label="بستن">
<X size={17} />
</button>
</div>
{results.length ? (
results.map((product) => (
<a href="#products" key={product.id}>
<img src={product.image} alt="" />
<div>
<strong>{product.title}</strong>
<small dir="ltr">{product.en}</small>
</div>
<span>{product.category}</span>
<ChevronLeft size={18} />
</a>
))
) : (
<div className="empty-result">
دستگاهی با این مشخصات پیدا نشد؛ برای راهنمایی با ما تماس بگیرید.
</div>
)}
</div>
)}
</div>
</div>
</section>
<section className="categories" id="services">
<div className="container">
<SectionTitle
eyebrow="OUR EXPERTISE"
title="سه مسیر، یک راهکار کامل صنعتی"
/>
<div className="category-grid">
{categories.map((category, index) => (
<a className="category-card" href="#" key={category.title}>
<img src={category.image} alt={category.title} />
<div className="category-card__shade" />
<span className="category-card__number">0{index + 1}</span>
<div className="category-card__content">
<small>{category.en}</small>
<h3>{category.title}</h3>
<p>{category.count}</p>
</div>
<i>
<ArrowUpLeft />
</i>
</a>
))}
</div>
</div>
</section>
<section className="products section-gray" id="products">
<div className="container">
<div className="section-heading-row">
<SectionTitle eyebrow="SPECIAL MACHINERY" title="ماشین‌آلات منتخب" />
<a className="text-link" href="#">
مشاهده همه محصولات
<ArrowLeft size={18} />
</a>
</div>
<div className="product-grid">
{products.map((product) => (
<article className="product-card" key={product.id}>
<a className="product-card__image" href="#">
<img src={product.image} alt={product.title} />
<span>فروش ویژه</span>
<i>
<ArrowUpLeft />
</i>
</a>
<div className="product-card__body">
<small>{product.category}</small>
<h3>{product.title}</h3>
<p dir="ltr">{product.en}</p>
<div>
<code>{product.code}</code>
<a href="tel:+982188530256">
استعلام قیمت
<Phone size={15} />
</a>
</div>
</div>
</article>
))}
</div>
</div>
</section>
<section className="about" id="about">
<div className="container about__grid">
<div className="about__visual">
<img src={`${assetBase}/trEfzlNgmz.jpg`} alt="تجهیزات صنعتی سامان اندیش" />
<div className="about__small-image">
<img src={`${assetBase}/rhipZeVqzD.jpg`} alt="ماشین‌آلات صنعت کابل" />
</div>
<div className="experience-badge">
<strong>۲۵</strong>
<span>سال تجربه تخصصی</span>
</div>
</div>
<div className="about__content">
<SectionTitle eyebrow="ABOUT SAMAN ANDISH" title="فراتر از تأمین‌کننده ماشین‌آلات" />
<p className="about__lead">
سامان اندیش، همراه فنی و تجاری تولیدکنندگان سیم و کابل در انتخاب
هوشمندانه تجهیزات و توسعه خطوط تولید است.
</p>
<p>
با تکیه بر تجربه اجرایی، شبکه بین‌المللی و شناخت دقیق فرآیندهای
تولید، راهکاری متناسب با ظرفیت، بودجه و اهداف هر کارخانه ارائه
می‌کنیم.
</p>
<div className="about__features">
<div>
<ShieldCheck />
<span>
<strong>تضمین اصالت</strong>
ارزیابی فنی پیش از خرید
</span>
</div>
<div>
<Settings />
<span>
<strong>پشتیبانی اجرایی</strong>
نصب، راه‌اندازی و آموزش
</span>
</div>
</div>
<a className="button button--navy" href="/about-us">
بیشتر درباره ما
<ArrowLeft size={18} />
</a>
</div>
</div>
</section>
<section className="values">
<div className="container values__grid">
{[
[Globe2, "رقابت در بازار جهانی", "GLOBAL COMPETITION"],
[Gauge, "کیفیت استاندارد", "STANDARD QUALITY"],
[BriefcaseBusiness, "مهندسی نوآورانه", "SMART ENGINEERING"],
[FlaskConical, "تکنولوژی پیشرفته", "ADVANCED TECHNOLOGY"],
].map(([Icon, title, en], index) => {
const ValueIcon = Icon as typeof Globe2;
return (
<div className="value-card" key={title as string}>
<span>0{index + 1}</span>
<ValueIcon />
<h3>{title as string}</h3>
<p>{en as string}</p>
</div>
);
})}
</div>
</section>
<section className="news" id="news">
<div className="container">
<div className="section-heading-row">
<SectionTitle eyebrow="INSIGHTS & NEWS" title="دانش روز صنعت" />
<a className="text-link" href="#">
مشاهده همه اخبار
<ArrowLeft size={18} />
</a>
</div>
<div className="news-grid">
{news.map((item, index) => (
<article className={`news-card ${index === 0 ? "news-card--featured" : ""}`} key={item.title}>
<a className="news-card__image" href="#">
<img src={item.image} alt={item.title} />
</a>
<div className="news-card__body">
<div>
<span>{item.tag}</span>
<time>{item.date}</time>
</div>
<h3>{item.title}</h3>
<p>
تازه‌ترین تحولات، فناوری‌ها و رویدادهای تخصصی صنعت سیم و
کابل را با تحلیل کارشناسان سامان اندیش دنبال کنید.
</p>
<a href="#">
ادامه مطلب
<ArrowLeft size={17} />
</a>
</div>
</article>
))}
</div>
</div>
</section>
<section className="customers">
<div className="container">
<SectionTitle eyebrow="TRUSTED BY INDUSTRY" title="مشتریان ما" />
<div className="logo-marquee">
<div>
{[...customerLogos, ...customerLogos].map((logo, index) => (
<span key={`${logo}-${index}`}>
<img src={`${assetBase}/${logo}`} alt="نشان مشتری سامان اندیش" />
</span>
))}
</div>
</div>
</div>
</section>
<section className="cta-strip">
<div className="container cta-strip__inner">
<div>
<SlidersHorizontal />
<span>
<small>برای ارتقای خط تولید آماده‌اید؟</small>
<strong>ماشین مناسب را با کمک متخصصان ما پیدا کنید.</strong>
</span>
</div>
<a className="button button--white" href="/contact-us">
شروع گفتگو
<ArrowLeft size={18} />
</a>
</div>
</section>
<footer className="footer" id="contact">
<div className="footer__pattern" />
<div className="container footer__grid">
<div className="footer__brand">
<img src={`${assetBase}/4eEq8S7FxV.png`} alt="سامان اندیش" />
<p>
تأمین‌کننده تخصصی ماشین‌آلات و راهکارهای فنی صنعت سیم و کابل، با
تمرکز بر کیفیت، بهره‌وری و همکاری بلندمدت.
</p>
<div>
<a href="#" aria-label="اینستاگرام">
<Camera />
</a>
<a href="#" aria-label="لینکدین">
<Link />
</a>
<a href="#" aria-label="تلگرام">
<MessageCircle />
</a>
</div>
</div>
<div className="footer__links">
<h3>دسترسی سریع</h3>
<a href="#">صفحه اصلی</a>
<a href="#products">ماشین‌آلات</a>
<a href="#news">اخبار و مقالات</a>
<a href="/about-us">درباره ما</a>
<a href="/contact-us">تماس با ما</a>
</div>
<div className="footer__links">
<h3>خدمات ما</h3>
<a href="#">تأمین ماشین‌آلات</a>
<a href="#">خدمات فنی و مهندسی</a>
<a href="#">مواد اولیه</a>
<a href="/contact-us">مشاوره خرید</a>
</div>
<div className="footer__contact">
<h3>با ما در ارتباط باشید</h3>
<a href="tel:+982188530256">
<span>
<Phone />
</span>
<div>
<small>شماره تماس</small>
<strong dir="ltr">021 8853 0256</strong>
</div>
</a>
<a href="mailto:info@samanandish.com">
<span>
<Mail />
</span>
<div>
<small>ایمیل</small>
<strong>info@samanandish.com</strong>
</div>
</a>
<div className="address">
<span>
<MapPin />
</span>
<p>تهران، خیابان مطهری، خیابان ترکمنستان</p>
</div>
</div>
</div>
<div className="container footer__bottom">
<p>© ۱۴۰۵ سامان اندیش — تمامی حقوق محفوظ است.</p>
<span dir="ltr">ENGINEERED FOR INDUSTRY</span>
</div>
</footer>
</main>
);
}
+14
View File
@@ -0,0 +1,14 @@
import { defineConfig, globalIgnores } from "eslint/config";
import nextVitals from "eslint-config-next/core-web-vitals";
import nextTypescript from "eslint-config-next/typescript";
export default defineConfig([
...nextVitals,
...nextTypescript,
{
rules: {
"@next/next/no-img-element": "off",
},
},
globalIgnores([".next/**", "node_modules/**"]),
]);
+6259
View File
File diff suppressed because it is too large Load Diff
+30
View File
@@ -0,0 +1,30 @@
{
"name": "saman-andish",
"version": "1.0.0",
"private": true,
"description": "Saman Andish industrial machinery homepage",
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "eslint ."
},
"keywords": [
"nextjs",
"industrial-machinery"
],
"dependencies": {
"lucide-react": "^1.33.0",
"next": "^16.3.2",
"react": "^19.2.8",
"react-dom": "^19.2.8"
},
"devDependencies": {
"@types/node": "^26.2.0",
"@types/react": "^19.2.18",
"@types/react-dom": "^19.2.5",
"eslint": "^9.39.5",
"eslint-config-next": "^16.3.2",
"typescript": "^6.0.3"
}
}
+29
View File
@@ -0,0 +1,29 @@
{
"compilerOptions": {
"target": "ES2017",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": false,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "react-jsx",
"incremental": true,
"plugins": [{ "name": "next" }],
"paths": {
"@/*": ["./*"]
}
},
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
".next/types/**/*.ts",
".next/dev/types/**/*.ts"
],
"exclude": ["node_modules"]
}