Hero issue fixes and visual changes

This commit is contained in:
2026-10-01 11:21:08 +03:30
parent c33a757af4
commit 5147c661f0
20 changed files with 678 additions and 117 deletions
+182
View File
@@ -0,0 +1,182 @@
/**
* Lightweight local mock API for UI preview when Postgres isn't configured.
* Serves the same shape as Nest public endpoints from seed defaults.
*/
import http from "node:http";
const sections = {
hero: {
eyebrow: "گروه توسعه نرم‌افزار",
location: "[ تأسیس ۱۴۰۰ — تهران / دورکاری ]",
loaderTitle: "هوش‌افزار منتک",
lines: [
"در هوش‌افزار منتک",
"بهترین نرم‌افزارها و خدمات",
"متناسب با کسب‌وکار شما پیشنهاد می‌شود",
],
highlightWord: "هوش‌افزار منتک",
highlightWords: ["هوش‌افزار منتک"],
body: "منتک یک تیم مهندسی ارشد است که پلتفرم‌های وب، اپلیکیشن موبایل و زیرساخت ابری را برای کسب‌وکارهایی می‌سازد که نمی‌خواهند معمولی باشند.",
cta: "مشاهده نمونه‌کارها",
badge: "مهندسی منتک • از ۱۴۰۰ •",
coords: "تهران، ایران",
projectsLabel: "بیش از ۱۲۰ پروژه تحویل‌شده",
},
marquee: {
items: [
"آبشده همکار",
"آبشده خانگی",
"فروشگاه آنلاین",
"سامانه بد و بس",
"سامانه فوری سند",
"مدیریت ارتباط با مشتری CRM",
"هوش مصنوعی",
],
},
manifesto: {
tag: "ما که هستیم",
words: [
{ text: "ما" },
{ text: "نرم‌افزاری" },
{ text: "می‌سازیم", volt: true },
{ text: "که" },
{ text: "تفاوت" },
{ text: "ایجاد" },
{ text: "کند." },
{ text: "منتک", volt: true },
],
body: "استراتژی، طراحی و مهندسی زیر یک سقف — با دقت وسواس‌گونه نسبت به کیفیت و عملکرد.",
},
services: {
tag: "چه می‌کنیم",
items: [
{ n: "۰۱", title: "استراتژی محصول", desc: "ایده‌های مبهم را به نقشه راه معتبر تبدیل می‌کنیم.", tags: ["کشف محصول", "پژوهش کاربر", "نقشه راه", "MVP"] },
{ n: "۰۲", title: "مهندسی وب", desc: "پلتفرم‌های وب سریع و مقیاس‌پذیر.", tags: ["Nuxt", "NestJS", "Node.js", "React"] },
{ n: "۰۳", title: "اپلیکیشن موبایل", desc: "تجربهٔ بومی‌گونه روی iOS و Android.", tags: ["React Native", "Flutter"] },
{ n: "۰۴", title: "ابرو DevOps", desc: "استقرار خودکار، امنیت و مانیتورینگ.", tags: ["AWS / GCP", "کوبرنتیز", "CI/CD"] },
{ n: "۰۵", title: "هوش مصنوعی و داده", desc: "هوش مصنوعی کاربردی و خطوط لوله داده.", tags: ["LLM", "اتوماسیون"] },
],
},
work: {
tag: "نمونه کارها",
items: [
{ n: "۰۱", title: "پالس‌بورد", cat: "پلتفرم تحلیلی فین‌تک", year: "۱۴۰۳" },
{ n: "۰۲", title: "ایرو‌لوپ", cat: "نرم‌افزار لجستیک", year: "۱۴۰۳" },
{ n: "۰۳", title: "مد‌سینک", cat: "پلتفرم هلث‌تک", year: "۱۴۰۲" },
{ n: "۰۴", title: "نوواپی", cat: "زیرساخت پرداخت", year: "۱۴۰۲" },
],
},
process: {
tag: "چگونه کار می‌کنیم",
steps: [
{ n: "۰۱", title: "کشف", desc: "کارگاه، پژوهش و هم‌راستایی روی نتایج." },
{ n: "۰۲", title: "طراحی", desc: "سیستم‌ها، جریان‌ها و رابط‌های ساده." },
{ n: "۰۳", title: "توسعه", desc: "مهندسان ارشد و نرم‌افزار آمادهٔ تولید." },
{ n: "۰۴", title: "استقرار و مقیاس", desc: "CI/CD، مانیتورینگ و رشد پایدار." },
],
},
stats: {
items: [
{ value: 120, suffix: "+", label: "پروژه تحویل‌شده" },
{ value: 40, suffix: "+", label: "مشتری" },
{ value: 15, suffix: "", label: "مهندس و طراح" },
{ value: 98, suffix: "%", label: "ماندگاری مشتری" },
],
},
team: {
tag: "تیم",
headline: "با جمع ما آشنا شوید",
body: "تیمی جمع‌وجور از متخصصان محصول، طراحی و مهندسی.",
members: [
{ name: "علی رضایی", role: "مدیرعامل و هم‌بنیان‌گذار" },
{ name: "سارا محمدی", role: "مدیر فنی و هم‌بنیان‌گذار" },
{ name: "مریم حسینی", role: "سرپرست طراحی" },
{ name: "رضا کریمی", role: "مهندس ارشد" },
],
},
footer: {
tag: "تماس",
marquee: ["پروژه‌ای در ذهن دارید؟", "سلام کنید", "با هم کار کنیم"],
cta: "شروع همکاری",
},
};
const site = {
settings: {
brandName: "منتک",
tagline: "گروه توسعه نرم‌افزار",
email: "hello@montech.ir",
phone: "+98 21 0000 0000",
address: "تهران، ایران",
timezone: "Asia/Tehran",
logoUrl: null,
socials: [
{ label: "لینکدین", url: "https://linkedin.com" },
{ label: "گیت‌هاب", url: "https://github.com" },
],
},
sections,
pages: [
{
key: "home",
title: "خانه",
seo: {
title: "منتک — گروه توسعه نرم‌افزار",
description: "منتک پلتفرم‌های وب، اپلیکیشن موبایل و زیرساخت ابری می‌سازد.",
canonical: "http://localhost:3000/",
},
},
],
};
const blog = [
{
id: "1",
slug: "welcome-to-montech",
title: "به منتک خوش آمدید",
excerpt: "ما نرم‌افزاری می‌سازیم که واقعاً کار می‌کند.",
publishedAt: new Date().toISOString(),
},
];
const port = Number(process.env.PORT || 3050);
const server = http.createServer((req, res) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "GET,OPTIONS");
res.setHeader("Access-Control-Allow-Headers", "Content-Type");
if (req.method === "OPTIONS") {
res.writeHead(204);
res.end();
return;
}
const url = req.url || "/";
const json = (data, code = 200) => {
res.writeHead(code, { "Content-Type": "application/json; charset=utf-8" });
res.end(JSON.stringify(data));
};
if (url === "/api/health") return json({ ok: true, mock: true });
if (url === "/api/public/site") return json(site);
if (url === "/api/public/blog") return json(blog);
if (url.startsWith("/api/public/blog/")) {
const slug = decodeURIComponent(url.split("/").pop() || "");
const post = blog.find((p) => p.slug === slug);
return post
? json({ ...post, content: "محتوای نمونه برای پیش‌نمایش لوکال." })
: json({ message: "Not found" }, 404);
}
if (url === "/api/public/gallery") return json([]);
if (url.startsWith("/api/public/pages/")) {
const key = decodeURIComponent(url.split("/").pop() || "");
const page = site.pages.find((p) => p.key === key);
return page ? json(page) : json({ message: "Not found" }, 404);
}
json({ message: `Mock API — no route for ${url}` }, 404);
});
server.listen(port, "127.0.0.1", () => {
console.log(`[mock-api] http://127.0.0.1:${port}`);
});