Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
35a558db20 | ||
|
|
5a6cb51333 | ||
|
|
dc200099ba | ||
|
|
0a55d5d0fe | ||
|
|
97dc728a4c | ||
|
|
87f38f1c0b | ||
|
|
8dab39ee83 | ||
|
|
32b6655a1e | ||
|
|
395aceb6f2 | ||
|
|
e76dbbf63d | ||
|
|
e0ebae4817 |
@@ -23,3 +23,4 @@ Thumbs.db
|
|||||||
# Database
|
# Database
|
||||||
*.sqlite3
|
*.sqlite3
|
||||||
*.db
|
*.db
|
||||||
|
frontend/public/images/originals/
|
||||||
|
|||||||
@@ -72,3 +72,14 @@ npm run dev # http://localhost:5173
|
|||||||
- فایل `.env` هرگز commit نمیشود (در `.gitignore` است)
|
- فایل `.env` هرگز commit نمیشود (در `.gitignore` است)
|
||||||
- رمز عبور ادمین با bcrypt هش میشود
|
- رمز عبور ادمین با bcrypt هش میشود
|
||||||
- توکنهای JWT امضا دارند و مدت اعتبارشان قابل تنظیم است
|
- توکنهای JWT امضا دارند و مدت اعتبارشان قابل تنظیم است
|
||||||
|
|
||||||
|
## تغییرات اخیر
|
||||||
|
|
||||||
|
### بهبود سرعت (کامیت e0ebae4)
|
||||||
|
- **حذف کامل وابستگیهای خارجی**: همه عکسهای سایت بهصورت محلی در `frontend/public/images/` قرار گرفتند (بدون وابستگی به سرورهای خارجی مثل postimg و housedesign)
|
||||||
|
- **حذف فونتهای خارجی** (Google Fonts و fontcdn که رندر صفحه را قفل میکردند) — استفاده از فونت سیستمی سریع
|
||||||
|
- **favicon واقعی** اضافه شد (قبلاً خراب بود)
|
||||||
|
- **کش ۳۰ روزه** برای تصاویر و فایلهای استاتیک در nginx
|
||||||
|
- نتیجه: صفحهها در چند میلیثانیه لود میشوند و سایت هیچ درخواست خارجی ندارد
|
||||||
|
|
||||||
|
> اگر نسخه قبلی سایت را اجرا کردهاید، برای دریافت نسخه جدید یک بار `docker compose down -v` و سپس `docker compose up --build -d` را اجرا کنید.
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
BRAND = {
|
BRAND = {
|
||||||
"name": "گروه ساختمانی آرامش",
|
"name": "گروه ساختمانی آرامش",
|
||||||
"logo": "https://i.postimg.cc/XYNrsHsM/Chat-GPT-Image-Aug-6-2026-04-34-46-PM.png",
|
"logo": "/images/logo.png",
|
||||||
"hero": "https://i.postimg.cc/J0bKgQVg/Gemini-Generated-Image-mdh969mdh969mdh9.png",
|
"hero": "/images/hero.png",
|
||||||
"contact_bg": "https://i.postimg.cc/BbccNQHr/Gemini-Generated-Image-dafc2hdafc2hdafc.png",
|
"contact_bg": "/images/contact.png",
|
||||||
"phone": "۰۲۱ ۸۸ ۷۴ ۲۲ ۱۰",
|
"phone": "۰۲۱ ۸۸ ۷۴ ۲۲ ۱۰",
|
||||||
"phone_href": "tel:+982188742210",
|
"phone_href": "tel:+982188742210",
|
||||||
"email": "info@arameshbuildinggroup.com",
|
"email": "info@arameshbuildinggroup.com",
|
||||||
@@ -12,11 +12,11 @@ BRAND = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
IMAGES = [
|
IMAGES = [
|
||||||
"https://i.postimg.cc/wTQ0QFkG/Gemini-Generated-Image-1tjszd1tjszd1tjs.png",
|
"/images/img1.png",
|
||||||
"https://i.postimg.cc/1zfBPS1G/Gemini-Generated-Image-at69yhat69yhat69.png",
|
"/images/img2.png",
|
||||||
"https://i.postimg.cc/BbccNQHr/Gemini-Generated-Image-dafc2hdafc2hdafc.png",
|
"/images/contact.png",
|
||||||
"https://i.postimg.cc/4xFvW0HX/Gemini-Generated-Image-n7mhonn7mhonn7mh.png",
|
"/images/img4.png",
|
||||||
"https://i.postimg.cc/N036cr4s/Gemini-Generated-Image-ytbhvvytbhvvytbh.png",
|
"/images/img5.png",
|
||||||
]
|
]
|
||||||
|
|
||||||
SERVICES = [
|
SERVICES = [
|
||||||
@@ -154,8 +154,8 @@ PROJECTS = [
|
|||||||
BEFORE_AFTER = {
|
BEFORE_AFTER = {
|
||||||
"title": "از کانسپت تا خلق واقعیت",
|
"title": "از کانسپت تا خلق واقعیت",
|
||||||
"lead": "دستگیره را بکشید و ببینید نمای ساختمانی چگونه از حالت اولیه به فرم مدرن تبدیل میشود.",
|
"lead": "دستگیره را بکشید و ببینید نمای ساختمانی چگونه از حالت اولیه به فرم مدرن تبدیل میشود.",
|
||||||
"before": "https://cdn.housedesign.ai/se/housedesign/assets/housedesign-home/compare/1_before.webp",
|
"before": "/images/before.webp",
|
||||||
"after": "https://cdn.housedesign.ai/se/housedesign/assets/housedesign-home/compare/1_after.webp",
|
"after": "/images/after.webp",
|
||||||
"before_label": "کانسپت اولیه",
|
"before_label": "کانسپت اولیه",
|
||||||
"after_label": "پروژه تکمیلشده",
|
"after_label": "پروژه تکمیلشده",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
<link rel="icon" type="image/png" href="/images/logo.png" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Aramesh Building Group Luxury Website</title>
|
<title>Aramesh Building Group Luxury Website</title>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -19,8 +19,14 @@ server {
|
|||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# تصاویر: بدون کش طولانی — تا تغییرات سریع دیده شوند
|
||||||
|
location ~* ^/images/ {
|
||||||
|
add_header Cache-Control "no-cache";
|
||||||
|
try_files $uri =404;
|
||||||
|
}
|
||||||
|
|
||||||
# کش استاتیک
|
# کش استاتیک
|
||||||
location ~* \.(js|css|png|jpg|jpeg|gif|svg|woff2?)$ {
|
location ~* \.(js|css|png|jpg|jpeg|gif|svg|webp|ico|woff2?)$ {
|
||||||
expires 30d;
|
expires 30d;
|
||||||
add_header Cache-Control "public, immutable";
|
add_header Cache-Control "public, immutable";
|
||||||
try_files $uri =404;
|
try_files $uri =404;
|
||||||
|
|||||||
|
After Width: | Height: | Size: 302 KiB |
|
After Width: | Height: | Size: 283 KiB |
|
After Width: | Height: | Size: 583 KiB |
|
After Width: | Height: | Size: 481 KiB |
|
After Width: | Height: | Size: 505 KiB |
|
After Width: | Height: | Size: 500 KiB |
|
After Width: | Height: | Size: 199 KiB |
|
After Width: | Height: | Size: 490 KiB |
|
After Width: | Height: | Size: 228 KiB |
@@ -1,8 +1,8 @@
|
|||||||
export const BRAND = {
|
export const BRAND = {
|
||||||
name: 'گروه ساختمانی آرامش',
|
name: 'گروه ساختمانی آرامش',
|
||||||
logo: 'https://i.postimg.cc/XYNrsHsM/Chat-GPT-Image-Aug-6-2026-04-34-46-PM.png',
|
logo: '/images/logo.png',
|
||||||
hero: 'https://i.postimg.cc/J0bKgQVg/Gemini-Generated-Image-mdh969mdh969mdh9.png',
|
hero: '/images/hero.png',
|
||||||
contactBg: 'https://i.postimg.cc/BbccNQHr/Gemini-Generated-Image-dafc2hdafc2hdafc.png',
|
contactBg: '/images/contact.png',
|
||||||
phone: '۰۲۱ ۸۸ ۷۴ ۲۲ ۱۰',
|
phone: '۰۲۱ ۸۸ ۷۴ ۲۲ ۱۰',
|
||||||
phoneHref: 'tel:+982188742210',
|
phoneHref: 'tel:+982188742210',
|
||||||
email: 'info@arameshbuildinggroup.com',
|
email: 'info@arameshbuildinggroup.com',
|
||||||
@@ -10,11 +10,11 @@ export const BRAND = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const IMAGES = [
|
export const IMAGES = [
|
||||||
'https://i.postimg.cc/wTQ0QFkG/Gemini-Generated-Image-1tjszd1tjszd1tjs.png',
|
'/images/img1.png',
|
||||||
'https://i.postimg.cc/1zfBPS1G/Gemini-Generated-Image-at69yhat69yhat69.png',
|
'/images/img2.png',
|
||||||
'https://i.postimg.cc/BbccNQHr/Gemini-Generated-Image-dafc2hdafc2hdafc.png',
|
'/images/contact.png',
|
||||||
'https://i.postimg.cc/4xFvW0HX/Gemini-Generated-Image-n7mhonn7mhonn7mh.png',
|
'/images/img4.png',
|
||||||
'https://i.postimg.cc/N036cr4s/Gemini-Generated-Image-ytbhvvytbhvvytbh.png'
|
'/images/img5.png'
|
||||||
];
|
];
|
||||||
|
|
||||||
export const NAV = [
|
export const NAV = [
|
||||||
@@ -87,8 +87,8 @@ export const PROJECTS: Project[] = [
|
|||||||
export const BEFORE_AFTER = {
|
export const BEFORE_AFTER = {
|
||||||
title: 'از کانسپت تا خلق واقعیت',
|
title: 'از کانسپت تا خلق واقعیت',
|
||||||
lead: 'دستگیره را بکشید و ببینید نمای ساختمانی چگونه از حالت اولیه به فرم مدرن تبدیل میشود.',
|
lead: 'دستگیره را بکشید و ببینید نمای ساختمانی چگونه از حالت اولیه به فرم مدرن تبدیل میشود.',
|
||||||
before: 'https://cdn.housedesign.ai/se/housedesign/assets/housedesign-home/compare/1_before.webp',
|
before: '/images/before.webp',
|
||||||
after: 'https://cdn.housedesign.ai/se/housedesign/assets/housedesign-home/compare/1_after.webp',
|
after: '/images/after.webp',
|
||||||
beforeLabel: 'کانسپت اولیه',
|
beforeLabel: 'کانسپت اولیه',
|
||||||
afterLabel: 'پروژه تکمیلشده',
|
afterLabel: 'پروژه تکمیلشده',
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
/* @import url() FONT IMPORTS MUST ALWAYS BE AT THE VERY TOP OF THIS FILE, ABOVE THE TAILWIND IMPORTS — DO NOT DELETE THIS COMMENT */
|
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Vazirmatn:wght@100..900&display=swap');
|
|
||||||
|
|
||||||
/* CRITICAL: THE FOLLOWING TAILWIND IMPORTS MUST NEVER BE DELETED OR REORDERED — DO NOT DELETE THIS COMMENT */
|
/* CRITICAL: THE FOLLOWING TAILWIND IMPORTS MUST NEVER BE DELETED OR REORDERED — DO NOT DELETE THIS COMMENT */
|
||||||
@import 'tailwindcss/base';
|
@import 'tailwindcss/base';
|
||||||
@import 'tailwindcss/components';
|
@import 'tailwindcss/components';
|
||||||
@@ -8,27 +5,13 @@
|
|||||||
|
|
||||||
/* END TAILWIND IMPORTS — ALL OTHER CSS MUST GO BELOW THIS LINE */
|
/* END TAILWIND IMPORTS — ALL OTHER CSS MUST GO BELOW THIS LINE */
|
||||||
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Pinar';
|
|
||||||
src: url('https://cdn.fontcdn.ir/Font/Persian/Pinar/Pinar.woff2') format('woff2'),
|
|
||||||
url('https://cdn.fontcdn.ir/Font/Persian/Pinar/Pinar.woff') format('woff');
|
|
||||||
font-weight: 400;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Pinar';
|
|
||||||
src: url('https://cdn.fontcdn.ir/Font/Persian/Pinar/Pinar-Bold.woff2') format('woff2'),
|
|
||||||
url('https://cdn.fontcdn.ir/Font/Persian/Pinar/Pinar-Bold.woff') format('woff');
|
|
||||||
font-weight: 700;
|
|
||||||
font-display: swap;
|
|
||||||
}
|
|
||||||
html {
|
html {
|
||||||
scroll-behavior: smooth;
|
scroll-behavior: smooth;
|
||||||
}
|
}
|
||||||
body {
|
body {
|
||||||
background-color: #27221c;
|
background-color: #27221c;
|
||||||
color: #f5f3ef;
|
color: #f5f3ef;
|
||||||
font-family: 'Pinar', 'Vazirmatn', Tahoma, sans-serif;
|
font-family: Tahoma, 'Segoe UI', sans-serif;
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
}
|
}
|
||||||
::selection {
|
::selection {
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "magic-patterns-project",
|
|
||||||
"private": true,
|
|
||||||
"dependencies": {
|
|
||||||
"react": "18.3.1",
|
|
||||||
"react-dom": "18.3.1",
|
|
||||||
"react-router-dom": "6.30.2",
|
|
||||||
"lucide-react": "0.577.0",
|
|
||||||
"framer-motion": "11.18.2",
|
|
||||||
"@radix-ui/react-icons": "1.3.2",
|
|
||||||
"date-fns": "4.1.0",
|
|
||||||
"tailwind-merge": "2.6.1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -9,7 +9,7 @@ export default {
|
|||||||
ivory: '#F5F3EF',
|
ivory: '#F5F3EF',
|
||||||
},
|
},
|
||||||
fontFamily: {
|
fontFamily: {
|
||||||
pinar: ['Pinar', 'Vazirmatn', 'Tahoma', 'sans-serif'],
|
pinar: ['Tahoma', 'Segoe UI', 'sans-serif'],
|
||||||
},
|
},
|
||||||
transitionTimingFunction: {
|
transitionTimingFunction: {
|
||||||
lux: 'cubic-bezier(0.23, 1, 0.32, 1)',
|
lux: 'cubic-bezier(0.23, 1, 0.32, 1)',
|
||||||
|
|||||||