diff --git a/apps/adm/src/views/BlogEditView.vue b/apps/adm/src/views/BlogEditView.vue
index 058a077..d5dcf7d 100644
--- a/apps/adm/src/views/BlogEditView.vue
+++ b/apps/adm/src/views/BlogEditView.vue
@@ -20,28 +20,28 @@
-
-
+
+
-
+
-
+
-
+
-
+
diff --git a/apps/adm/src/views/SectionEditView.vue b/apps/adm/src/views/SectionEditView.vue
index 2f4b5e9..be557c7 100644
--- a/apps/adm/src/views/SectionEditView.vue
+++ b/apps/adm/src/views/SectionEditView.vue
@@ -1,40 +1,253 @@
-
بخش: {{ key }}
+ {{ titleFa }}
بازگشت
-
+
+
+
+
diff --git a/apps/adm/src/views/SectionsView.vue b/apps/adm/src/views/SectionsView.vue
index aa7866a..bc94058 100644
--- a/apps/adm/src/views/SectionsView.vue
+++ b/apps/adm/src/views/SectionsView.vue
@@ -1,14 +1,14 @@
محتوای لندینگ
-
هر بخش JSON ساختیافته دارد.
+
متنها را مثل فرم معمولی ویرایش کنید — نیازی به کدنویسی نیست.
- | کلید | آخرین ویرایش | |
+ | بخش | آخرین ویرایش | |
- | {{ s.key }} |
+ {{ label(s.key) }} |
{{ new Date(s.updatedAt).toLocaleString("fa-IR") }} |
ویرایش |
@@ -21,7 +21,22 @@
import { onMounted, ref } from "vue";
import { api } from "../lib/api";
+const TITLES: Record = {
+ hero: "صفحه اول (هیرو)",
+ marquee: "نوار متحرک",
+ manifesto: "معرفی",
+ services: "خدمات",
+ work: "نمونه کارها",
+ process: "فرآیند کار",
+ stats: "آمار",
+ team: "تیم",
+ footer: "تماس و فوتر",
+};
+
const sections = ref([]);
+function label(key: string) {
+ return TITLES[key] || key;
+}
onMounted(async () => {
const { data } = await api.get("/admin/sections");
sections.value = data;
diff --git a/apps/api/prisma/seed.ts b/apps/api/prisma/seed.ts
index 1a434ac..b8abe2b 100644
--- a/apps/api/prisma/seed.ts
+++ b/apps/api/prisma/seed.ts
@@ -5,127 +5,127 @@ const prisma = new PrismaClient();
const defaultSections: Record = {
hero: {
- eyebrow: "SOFTWARE DEVELOPMENT GROUP",
- location: "[ EST. 2020 — TEHRAN / REMOTE ]",
- lines: ["We craft", "software that", "performs"],
- highlightWord: "software",
- body: "We are a senior engineering group shipping web platforms, mobile apps and cloud infrastructure for companies that refuse to blend in.",
- cta: "SEE OUR WORK",
- badge: "MONTECH ENGINEERING • SINCE 2020 •",
- coords: "35.6892° N / 51.3890° E",
- projectsLabel: "120+ PROJECTS SHIPPED",
+ eyebrow: "گروه توسعه نرمافزار",
+ location: "[ تأسیس ۱۴۰۰ — تهران / دورکاری ]",
+ lines: ["ما نرمافزار", "میسازیم که", "عمل میکند"],
+ highlightWord: "نرمافزار",
+ body: "مانتک یک تیم مهندسی ارشد است که پلتفرمهای وب، اپلیکیشن موبایل و زیرساخت ابری را برای کسبوکارهایی میسازد که نمیخواهند معمولی باشند.",
+ cta: "مشاهده نمونهکارها",
+ badge: "مهندسی مانتک • از ۱۴۰۰ •",
+ coords: "تهران، ایران",
+ projectsLabel: "بیش از ۱۲۰ پروژه تحویلشده",
},
marquee: {
items: [
- "WEB PLATFORMS",
- "MOBILE APPS",
- "CLOUD & DEVOPS",
- "AI SOLUTIONS",
- "DESIGN SYSTEMS",
- "API ARCHITECTURE",
+ "پلتفرم وب",
+ "اپلیکیشن موبایل",
+ "ابرو DevOps",
+ "هوش مصنوعی",
+ "سیستم طراحی",
+ "معماری API",
],
},
manifesto: {
- tag: "Who we are",
+ tag: "ما که هستیم",
words: [
- { text: "We", outline: false },
- { text: "build", outline: false },
- { text: "software", outline: true },
- { text: "that", outline: false },
- { text: "moves", outline: false },
- { text: "the", outline: false },
- { text: "needle.", outline: false },
- { text: "MONTECH", outline: false, volt: true },
+ { text: "ما" },
+ { text: "نرمافزاری" },
+ { text: "میسازیم", volt: true },
+ { text: "که" },
+ { text: "تفاوت" },
+ { text: "ایجاد" },
+ { text: "کند." },
+ { text: "مانتک", volt: true },
],
- body: "Strategy, design and engineering under one roof — shipped with obsessive attention to performance and craft.",
+ body: "استراتژی، طراحی و مهندسی زیر یک سقف — با دقت وسواسگونه نسبت به کیفیت و عملکرد.",
},
services: {
- tag: "What we do",
+ tag: "چه میکنیم",
items: [
{
- n: "01",
- title: "Product Strategy",
- desc: "We turn fuzzy ideas into validated roadmaps. Discovery sprints, user research and rapid prototyping de-risk your build before a single line of code is written.",
- tags: ["Discovery Sprints", "User Research", "Roadmapping", "MVP Scoping"],
+ n: "۰۱",
+ title: "استراتژی محصول",
+ desc: "ایدههای مبهم را به نقشه راه معتبر تبدیل میکنیم. اسپرینت کشف، پژوهش کاربر و نمونهسازی سریع قبل از نوشتن کد.",
+ tags: ["کشف محصول", "پژوهش کاربر", "نقشه راه", "MVP"],
},
{
- n: "02",
- title: "Web Engineering",
- desc: "Blazing-fast, scalable web platforms with modern stacks. From marketing sites to complex SaaS dashboards — engineered for performance, accessibility and conversion.",
- tags: ["React / Next.js", "Nuxt", "Node.js", "NestJS"],
+ n: "۰۲",
+ title: "مهندسی وب",
+ desc: "پلتفرمهای وب سریع و مقیاسپذیر — از سایتهای بازاریابی تا داشبوردهای پیچیده SaaS.",
+ tags: ["Nuxt", "NestJS", "Node.js", "React"],
},
{
- n: "03",
- title: "Mobile Applications",
- desc: "Native-quality iOS and Android experiences from a single codebase — or fully native when it matters.",
+ n: "۰۳",
+ title: "اپلیکیشن موبایل",
+ desc: "تجربهٔ بومیگونه روی iOS و Android از یک کدبیس مشترک — یا کاملاً نیتیو وقتی لازم باشد.",
tags: ["React Native", "Flutter", "Swift", "Kotlin"],
},
{
- n: "04",
- title: "Cloud & DevOps",
- desc: "Infrastructure that scales with your ambition. Resilient cloud systems, automated deployments, secure and observable platforms.",
- tags: ["AWS / GCP", "Kubernetes", "Terraform", "CI/CD"],
+ n: "۰۴",
+ title: "ابرو DevOps",
+ desc: "زیرساختی که با رشد شما مقیاس میشود؛ استقرار خودکار، امنیت و مانیتورینگ.",
+ tags: ["AWS / GCP", "کوبرنتیز", "CI/CD", "Terraform"],
},
{
- n: "05",
- title: "AI & Data",
- desc: "Practical AI, not science projects. LLM integrations, intelligent automation and data pipelines.",
- tags: ["LLM Integration", "ML Pipelines", "Data Engineering", "Analytics"],
+ n: "۰۵",
+ title: "هوش مصنوعی و داده",
+ desc: "هوش مصنوعی کاربردی؛ اتصال LLM، اتوماسیون هوشمند و خطوط لوله داده.",
+ tags: ["LLM", "اتوماسیون", "مهندسی داده", "تحلیل"],
},
],
},
work: {
- tag: "Selected work",
+ tag: "نمونه کارها",
items: [
- { n: "01", title: "PULSEBOARD", cat: "Fintech Analytics Platform", year: "2024" },
- { n: "02", title: "AEROLOOP", cat: "Logistics SaaS", year: "2024" },
- { n: "03", title: "MEDSYNC", cat: "HealthTech Platform", year: "2023" },
- { n: "04", title: "NOVAPAY", cat: "Payment Infrastructure", year: "2023" },
+ { n: "۰۱", title: "پالسبورد", cat: "پلتفرم تحلیلی فینتک", year: "۱۴۰۳" },
+ { n: "۰۲", title: "ایرولوپ", cat: "نرمافزار لجستیک", year: "۱۴۰۳" },
+ { n: "۰۳", title: "مدسینک", cat: "پلتفرم هلثتک", year: "۱۴۰۲" },
+ { n: "۰۴", title: "نوواپی", cat: "زیرساخت پرداخت", year: "۱۴۰۲" },
],
},
process: {
- tag: "How we ship",
+ tag: "چگونه کار میکنیم",
steps: [
- { n: "01", title: "DISCOVER", desc: "Workshops, research and alignment on outcomes that matter." },
- { n: "02", title: "DESIGN", desc: "Systems, flows and interfaces that feel inevitable." },
- { n: "03", title: "DEVELOP", desc: "Senior engineers shipping production-ready software." },
- { n: "04", title: "DEPLOY & SCALE", desc: "CI/CD, observability and infrastructure that grows with you." },
+ { n: "۰۱", title: "کشف", desc: "کارگاه، پژوهش و همراستایی روی نتایجی که واقعاً مهماند." },
+ { n: "۰۲", title: "طراحی", desc: "سیستمها، جریانها و رابطهایی که ساده و قابلاعتماد به نظر میرسند." },
+ { n: "۰۳", title: "توسعه", desc: "مهندسان ارشد که نرمافزار آمادهٔ تولید تحویل میدهند." },
+ { n: "۰۴", title: "استقرار و مقیاس", desc: "CI/CD، مانیتورینگ و زیرساختی که با شما رشد میکند." },
],
},
stats: {
items: [
- { value: 120, suffix: "+", label: "Projects shipped" },
- { value: 40, suffix: "+", label: "Clients worldwide" },
- { value: 15, suffix: "", label: "Engineers & designers" },
- { value: 98, suffix: "%", label: "Client retention" },
+ { value: 120, suffix: "+", label: "پروژه تحویلشده" },
+ { value: 40, suffix: "+", label: "مشتری" },
+ { value: 15, suffix: "", label: "مهندس و طراح" },
+ { value: 98, suffix: "%", label: "ماندگاری مشتری" },
],
},
team: {
- tag: "The collective",
- headline: "Meet the collective",
- body: "A tight crew of senior builders — product, design and engineering.",
+ tag: "تیم",
+ headline: "با جمع ما آشنا شوید",
+ body: "تیمی جمعوجور از متخصصان محصول، طراحی و مهندسی.",
members: [
- { name: "Alexandra Reyes", role: "CEO & CO-FOUNDER" },
- { name: "Marcus Chen", role: "CTO & CO-FOUNDER" },
- { name: "Sofia Laurent", role: "HEAD OF DESIGN" },
- { name: "David Okafor", role: "PRINCIPAL ENGINEER" },
+ { name: "علی رضایی", role: "مدیرعامل و همبنیانگذار" },
+ { name: "سارا محمدی", role: "مدیر فنی و همبنیانگذار" },
+ { name: "مریم حسینی", role: "سرپرست طراحی" },
+ { name: "رضا کریمی", role: "مهندس ارشد" },
],
},
footer: {
- tag: "Contact",
- marquee: ["GOT A PROJECT IN MIND", "SAY HELLO", "LET'S WORK TOGETHER"],
- cta: "Start a project",
+ tag: "تماس",
+ marquee: ["پروژهای در ذهن دارید؟", "سلام کنید", "با هم کار کنیم"],
+ cta: "شروع همکاری",
email: "hello@montech.ir",
phone: "+98 21 0000 0000",
- address: ["Tehran", "Iran"],
- socials: ["LinkedIn", "GitHub", "Dribbble"],
+ address: ["تهران", "ایران"],
+ socials: ["لینکدین", "گیتهاب", "اینستاگرام"],
},
};
async function main() {
const mobile = process.env.ADMIN_MOBILE || "09121234567";
const password = process.env.ADMIN_PASSWORD || "change-me-strong";
- const name = process.env.ADMIN_NAME || "Montech Admin";
+ const name = process.env.ADMIN_NAME || "مدیر مانتک";
const hash = await bcrypt.hash(password, 10);
await prisma.admin.upsert({
@@ -138,46 +138,50 @@ async function main() {
where: { id: "default" },
create: {
id: "default",
- brandName: "Montech",
- tagline: "Software Development Group",
+ brandName: "مانتک",
+ tagline: "گروه توسعه نرمافزار",
email: "hello@montech.ir",
phone: "+98 21 0000 0000",
- address: "Tehran, IR",
+ address: "تهران، ایران",
timezone: "Asia/Tehran",
socials: [
- { label: "LinkedIn", url: "https://linkedin.com" },
- { label: "GitHub", url: "https://github.com" },
+ { label: "لینکدین", url: "https://linkedin.com" },
+ { label: "گیتهاب", url: "https://github.com" },
],
},
- update: {},
+ update: {
+ brandName: "مانتک",
+ tagline: "گروه توسعه نرمافزار",
+ address: "تهران، ایران",
+ },
});
const pages = [
{
key: "home",
- title: "Home",
+ title: "خانه",
seo: {
- title: "Montech — Software Development Group",
+ title: "مانتک — گروه توسعه نرمافزار",
description:
- "Montech engineers high-performance web platforms, mobile apps and cloud infrastructure. Based in Tehran, shipping worldwide.",
+ "مانتک پلتفرمهای وب، اپلیکیشن موبایل و زیرساخت ابری با عملکرد بالا میسازد. مستقر در تهران، فعال در سراسر ایران.",
canonical: "https://montech.ir/",
},
},
{
key: "blog",
- title: "Blog",
+ title: "بلاگ",
seo: {
- title: "Blog — Montech",
- description: "Notes on product, engineering and shipping software.",
+ title: "بلاگ — مانتک",
+ description: "یادداشتهایی درباره محصول، مهندسی و ساخت نرمافزار.",
canonical: "https://montech.ir/blog",
},
},
{
key: "gallery",
- title: "Gallery",
+ title: "گالری",
seo: {
- title: "Gallery — Montech",
- description: "Selected visuals from Montech projects and studio life.",
+ title: "گالری — مانتک",
+ description: "تصاویر منتخب از پروژهها و فضای استودیو مانتک.",
canonical: "https://montech.ir/gallery",
},
},
@@ -204,22 +208,28 @@ async function main() {
});
}
- const existingPost = await prisma.blogPost.findUnique({ where: { slug: "welcome-to-montech" } });
- if (!existingPost) {
- await prisma.blogPost.create({
- data: {
- slug: "welcome-to-montech",
- title: "Welcome to Montech",
- excerpt: "We build software that performs — and this is where we write about it.",
- content:
- "Montech is a software development group shipping web platforms, mobile apps and cloud infrastructure.
This blog covers product craft, engineering practice and lessons from the studio.
",
- published: true,
- publishedAt: new Date(),
- seoTitle: "Welcome to Montech — Blog",
- seoDesc: "Introducing Montech and how we ship software.",
- },
- });
- }
+ await prisma.blogPost.upsert({
+ where: { slug: "welcome-to-montech" },
+ create: {
+ slug: "welcome-to-montech",
+ title: "به مانتک خوش آمدید",
+ excerpt: "ما نرمافزاری میسازیم که واقعاً کار میکند — و اینجا دربارهاش مینویسیم.",
+ content:
+ "مانتک یک گروه توسعه نرمافزار است که پلتفرم وب، اپلیکیشن موبایل و زیرساخت ابری میسازد.\n\nدر این بلاگ درباره ساخت محصول، مهندسی و درسآموختههای استودیو مینویسیم.",
+ published: true,
+ publishedAt: new Date(),
+ seoTitle: "به مانتک خوش آمدید — بلاگ",
+ seoDesc: "معرفی مانتک و نحوه ساخت نرمافزار در تیم ما.",
+ },
+ update: {
+ title: "به مانتک خوش آمدید",
+ excerpt: "ما نرمافزاری میسازیم که واقعاً کار میکند — و اینجا دربارهاش مینویسیم.",
+ content:
+ "مانتک یک گروه توسعه نرمافزار است که پلتفرم وب، اپلیکیشن موبایل و زیرساخت ابری میسازد.\n\nدر این بلاگ درباره ساخت محصول، مهندسی و درسآموختههای استودیو مینویسیم.",
+ seoTitle: "به مانتک خوش آمدید — بلاگ",
+ seoDesc: "معرفی مانتک و نحوه ساخت نرمافزار در تیم ما.",
+ },
+ });
console.log("Seed complete. Admin:", mobile);
}
diff --git a/apps/landing/assets/css/main.css b/apps/landing/assets/css/main.css
index c4eebac..5872846 100644
--- a/apps/landing/assets/css/main.css
+++ b/apps/landing/assets/css/main.css
@@ -8,10 +8,10 @@
--color-ash: #8b8b93;
--color-volt: #c8ff2e;
- --font-display: "Syne", ui-sans-serif, system-ui, sans-serif;
- --font-body: "Space Grotesk", ui-sans-serif, system-ui, sans-serif;
- --font-serif: "Instrument Serif", ui-serif, Georgia, serif;
- --font-mono: "JetBrains Mono", ui-monospace, monospace;
+ --font-display: "Vazirmatn", "Syne", ui-sans-serif, system-ui, sans-serif;
+ --font-body: "Vazirmatn", ui-sans-serif, system-ui, sans-serif;
+ --font-serif: "Vazirmatn", "Instrument Serif", ui-serif, Georgia, serif;
+ --font-mono: "Vazirmatn", ui-monospace, monospace;
}
html { background: var(--color-ink); }
diff --git a/apps/landing/components/HeroSection.vue b/apps/landing/components/HeroSection.vue
index f43d1a0..ba9d01a 100644
--- a/apps/landing/components/HeroSection.vue
+++ b/apps/landing/components/HeroSection.vue
@@ -16,36 +16,36 @@
-