2026-09-30 18:42:28 +03:30
import { PrismaClient } from "@prisma/client" ;
import * as bcrypt from "bcryptjs" ;
const prisma = new PrismaClient ();
const defaultSections : Record < string , unknown > = {
hero : {
2026-09-30 20:33:37 +03:30
eyebrow : "گروه توسعه نرمافزار" ,
location : "[ تأسیس ۱۴۰۰ — تهران / دورکاری ]" ,
lines : [ "ما نرمافزار" , "میسازیم که" , "عمل میکند" ],
highlightWord : "نرمافزار" ,
2026-09-30 20:41:48 +03:30
body : "منتک یک تیم مهندسی ارشد است که پلتفرمهای وب، اپلیکیشن موبایل و زیرساخت ابری را برای کسبوکارهایی میسازد که نمیخواهند معمولی باشند." ,
2026-09-30 20:33:37 +03:30
cta : "مشاهده نمونهکارها" ,
2026-09-30 20:41:48 +03:30
badge : "مهندسی منتک • از ۱۴۰۰ •" ,
2026-09-30 20:33:37 +03:30
coords : "تهران، ایران" ,
projectsLabel : "بیش از ۱۲۰ پروژه تحویلشده" ,
2026-09-30 18:42:28 +03:30
},
marquee : {
items : [
2026-09-30 20:33:37 +03:30
"پلتفرم وب" ,
"اپلیکیشن موبایل" ,
"ابرو DevOps" ,
"هوش مصنوعی" ,
"سیستم طراحی" ,
"معماری API" ,
2026-09-30 18:42:28 +03:30
],
},
manifesto : {
2026-09-30 20:33:37 +03:30
tag : "ما که هستیم" ,
2026-09-30 18:42:28 +03:30
words : [
2026-09-30 20:33:37 +03:30
{ text : "ما" },
{ text : "نرمافزاری" },
{ text : "میسازیم" , volt : true },
{ text : "که" },
{ text : "تفاوت" },
{ text : "ایجاد" },
{ text : "کند." },
2026-09-30 20:41:48 +03:30
{ text : "منتک" , volt : true },
2026-09-30 18:42:28 +03:30
],
2026-09-30 20:33:37 +03:30
body : "استراتژی، طراحی و مهندسی زیر یک سقف — با دقت وسواسگونه نسبت به کیفیت و عملکرد." ,
2026-09-30 18:42:28 +03:30
},
services : {
2026-09-30 20:33:37 +03:30
tag : "چه میکنیم" ,
2026-09-30 18:42:28 +03:30
items : [
{
2026-09-30 20:33:37 +03:30
n : "۰۱" ,
title : "استراتژی محصول" ,
desc : "ایدههای مبهم را به نقشه راه معتبر تبدیل میکنیم. اسپرینت کشف، پژوهش کاربر و نمونهسازی سریع قبل از نوشتن کد." ,
tags : [ "کشف محصول" , "پژوهش کاربر" , "نقشه راه" , "MVP" ],
2026-09-30 18:42:28 +03:30
},
{
2026-09-30 20:33:37 +03:30
n : "۰۲" ,
title : "مهندسی وب" ,
desc : "پلتفرمهای وب سریع و مقیاسپذیر — از سایتهای بازاریابی تا داشبوردهای پیچیده SaaS." ,
tags : [ "Nuxt" , "NestJS" , "Node.js" , "React" ],
2026-09-30 18:42:28 +03:30
},
{
2026-09-30 20:33:37 +03:30
n : "۰۳" ,
title : "اپلیکیشن موبایل" ,
desc : "تجربهٔ بومیگونه روی iOS و Android از یک کدبیس مشترک — یا کاملاً نیتیو وقتی لازم باشد." ,
2026-09-30 18:42:28 +03:30
tags : [ "React Native" , "Flutter" , "Swift" , "Kotlin" ],
},
{
2026-09-30 20:33:37 +03:30
n : "۰۴" ,
title : "ابرو DevOps" ,
desc : "زیرساختی که با رشد شما مقیاس میشود؛ استقرار خودکار، امنیت و مانیتورینگ." ,
tags : [ "AWS / GCP" , "کوبرنتیز" , "CI/CD" , "Terraform" ],
2026-09-30 18:42:28 +03:30
},
{
2026-09-30 20:33:37 +03:30
n : "۰۵" ,
title : "هوش مصنوعی و داده" ,
desc : "هوش مصنوعی کاربردی؛ اتصال LLM، اتوماسیون هوشمند و خطوط لوله داده." ,
tags : [ "LLM" , "اتوماسیون" , "مهندسی داده" , "تحلیل" ],
2026-09-30 18:42:28 +03:30
},
],
},
work : {
2026-09-30 20:33:37 +03:30
tag : "نمونه کارها" ,
2026-09-30 18:42:28 +03:30
items : [
2026-09-30 20:33:37 +03:30
{ n : "۰۱" , title : "پالسبورد" , cat : "پلتفرم تحلیلی فینتک" , year : "۱۴۰۳" },
{ n : "۰۲" , title : "ایرولوپ" , cat : "نرمافزار لجستیک" , year : "۱۴۰۳" },
{ n : "۰۳" , title : "مدسینک" , cat : "پلتفرم هلثتک" , year : "۱۴۰۲" },
{ n : "۰۴" , title : "نوواپی" , cat : "زیرساخت پرداخت" , year : "۱۴۰۲" },
2026-09-30 18:42:28 +03:30
],
},
process : {
2026-09-30 20:33:37 +03:30
tag : "چگونه کار میکنیم" ,
2026-09-30 18:42:28 +03:30
steps : [
2026-09-30 20:33:37 +03:30
{ n : "۰۱" , title : "کشف" , desc : "کارگاه، پژوهش و همراستایی روی نتایجی که واقعاً مهماند." },
{ n : "۰۲" , title : "طراحی" , desc : "سیستمها، جریانها و رابطهایی که ساده و قابلاعتماد به نظر میرسند." },
{ n : "۰۳" , title : "توسعه" , desc : "مهندسان ارشد که نرمافزار آمادهٔ تولید تحویل میدهند." },
{ n : "۰۴" , title : "استقرار و مقیاس" , desc : "CI/CD، مانیتورینگ و زیرساختی که با شما رشد میکند." },
2026-09-30 18:42:28 +03:30
],
},
stats : {
items : [
2026-09-30 20:33:37 +03:30
{ value : 120 , suffix : "+" , label : "پروژه تحویلشده" },
{ value : 40 , suffix : "+" , label : "مشتری" },
{ value : 15 , suffix : "" , label : "مهندس و طراح" },
{ value : 98 , suffix : "%" , label : "ماندگاری مشتری" },
2026-09-30 18:42:28 +03:30
],
},
team : {
2026-09-30 20:33:37 +03:30
tag : "تیم" ,
headline : "با جمع ما آشنا شوید" ,
body : "تیمی جمعوجور از متخصصان محصول، طراحی و مهندسی." ,
2026-09-30 18:42:28 +03:30
members : [
2026-09-30 20:33:37 +03:30
{ name : "علی رضایی" , role : "مدیرعامل و همبنیانگذار" },
{ name : "سارا محمدی" , role : "مدیر فنی و همبنیانگذار" },
{ name : "مریم حسینی" , role : "سرپرست طراحی" },
{ name : "رضا کریمی" , role : "مهندس ارشد" },
2026-09-30 18:42:28 +03:30
],
},
footer : {
2026-09-30 20:33:37 +03:30
tag : "تماس" ,
marquee : [ "پروژهای در ذهن دارید؟" , "سلام کنید" , "با هم کار کنیم" ],
cta : "شروع همکاری" ,
2026-09-30 18:42:28 +03:30
email : "hello@montech.ir" ,
phone : "+98 21 0000 0000" ,
2026-09-30 20:33:37 +03:30
address : [ "تهران" , "ایران" ],
socials : [ "لینکدین" , "گیتهاب" , "اینستاگرام" ],
2026-09-30 18:42:28 +03:30
},
};
async function main() {
const mobile = process . env . ADMIN_MOBILE || "09121234567" ;
const password = process . env . ADMIN_PASSWORD || "change-me-strong" ;
2026-09-30 20:41:48 +03:30
const name = process . env . ADMIN_NAME || "مدیر منتک" ;
2026-09-30 18:42:28 +03:30
const hash = await bcrypt . hash ( password , 10 );
await prisma . admin . upsert ({
where : { mobile },
create : { mobile , passwordHash : hash , name , email : "admin@montech.ir" },
update : { passwordHash : hash , name },
});
await prisma . siteSettings . upsert ({
where : { id : "default" },
create : {
id : "default" ,
2026-09-30 20:41:48 +03:30
brandName : "منتک" ,
2026-09-30 20:33:37 +03:30
tagline : "گروه توسعه نرمافزار" ,
2026-09-30 18:42:28 +03:30
email : "hello@montech.ir" ,
phone : "+98 21 0000 0000" ,
2026-09-30 20:33:37 +03:30
address : "تهران، ایران" ,
2026-09-30 18:42:28 +03:30
timezone : "Asia/Tehran" ,
socials : [
2026-09-30 20:33:37 +03:30
{ label : "لینکدین" , url : "https://linkedin.com" },
{ label : "گیتهاب" , url : "https://github.com" },
2026-09-30 18:42:28 +03:30
],
},
2026-09-30 20:33:37 +03:30
update : {
2026-09-30 20:41:48 +03:30
brandName : "منتک" ,
2026-09-30 20:33:37 +03:30
tagline : "گروه توسعه نرمافزار" ,
address : "تهران، ایران" ,
},
2026-09-30 18:42:28 +03:30
});
const pages = [
{
key : "home" ,
2026-09-30 20:33:37 +03:30
title : "خانه" ,
2026-09-30 18:42:28 +03:30
seo : {
2026-09-30 20:41:48 +03:30
title : "منتک — گروه توسعه نرمافزار" ,
2026-09-30 18:42:28 +03:30
description :
2026-09-30 20:41:48 +03:30
"منتک پلتفرمهای وب، اپلیکیشن موبایل و زیرساخت ابری با عملکرد بالا میسازد. مستقر در تهران، فعال در سراسر ایران." ,
2026-09-30 18:42:28 +03:30
canonical : "https://montech.ir/" ,
},
},
{
key : "blog" ,
2026-09-30 20:33:37 +03:30
title : "بلاگ" ,
2026-09-30 18:42:28 +03:30
seo : {
2026-09-30 20:41:48 +03:30
title : "بلاگ — منتک" ,
2026-09-30 20:33:37 +03:30
description : "یادداشتهایی درباره محصول، مهندسی و ساخت نرمافزار." ,
2026-09-30 18:42:28 +03:30
canonical : "https://montech.ir/blog" ,
},
},
{
key : "gallery" ,
2026-09-30 20:33:37 +03:30
title : "گالری" ,
2026-09-30 18:42:28 +03:30
seo : {
2026-09-30 20:41:48 +03:30
title : "گالری — منتک" ,
description : "تصاویر منتخب از پروژهها و فضای استودیو منتک." ,
2026-09-30 18:42:28 +03:30
canonical : "https://montech.ir/gallery" ,
},
},
];
for ( const p of pages ) {
const page = await prisma . page . upsert ({
where : { key : p.key },
create : { key : p.key , title : p.title },
update : { title : p.title },
});
await prisma . pageSeo . upsert ({
where : { pageId : page.id },
create : { pageId : page.id , ... p . seo },
update : { ... p . seo },
});
}
for ( const [ key , data ] of Object . entries ( defaultSections )) {
await prisma . sectionContent . upsert ({
where : { key },
create : { key , data : data as object },
update : { data : data as object },
});
}
2026-09-30 20:33:37 +03:30
await prisma . blogPost . upsert ({
where : { slug : "welcome-to-montech" },
create : {
slug : "welcome-to-montech" ,
2026-09-30 20:41:48 +03:30
title : "به منتک خوش آمدید" ,
2026-09-30 20:33:37 +03:30
excerpt : "ما نرمافزاری میسازیم که واقعاً کار میکند — و اینجا دربارهاش مینویسیم." ,
content :
2026-09-30 20:41:48 +03:30
"منتک یک گروه توسعه نرمافزار است که پلتفرم وب، اپلیکیشن موبایل و زیرساخت ابری میسازد.\n\nدر این بلاگ درباره ساخت محصول، مهندسی و درسآموختههای استودیو مینویسیم." ,
2026-09-30 20:33:37 +03:30
published : true ,
publishedAt : new Date (),
2026-09-30 20:41:48 +03:30
seoTitle : "به منتک خوش آمدید — بلاگ" ,
seoDesc : "معرفی منتک و نحوه ساخت نرمافزار در تیم ما." ,
2026-09-30 20:33:37 +03:30
},
update : {
2026-09-30 20:41:48 +03:30
title : "به منتک خوش آمدید" ,
2026-09-30 20:33:37 +03:30
excerpt : "ما نرمافزاری میسازیم که واقعاً کار میکند — و اینجا دربارهاش مینویسیم." ,
content :
2026-09-30 20:41:48 +03:30
"منتک یک گروه توسعه نرمافزار است که پلتفرم وب، اپلیکیشن موبایل و زیرساخت ابری میسازد.\n\nدر این بلاگ درباره ساخت محصول، مهندسی و درسآموختههای استودیو مینویسیم." ,
seoTitle : "به منتک خوش آمدید — بلاگ" ,
seoDesc : "معرفی منتک و نحوه ساخت نرمافزار در تیم ما." ,
2026-09-30 20:33:37 +03:30
},
});
2026-09-30 18:42:28 +03:30
console . log ( "Seed complete. Admin:" , mobile );
}
main ()
. catch (( e ) => {
console . error ( e );
process . exit ( 1 );
})
. finally ( async () => {
await prisma . $disconnect ();
});