Author SHA1 Message Date
Behrad 35a558db20 پاکسازی تصاویر موقت و به‌روزرسانی مراجع قبل/بعد در فرانت 2026-09-02 23:00:57 +03:30
Behrad 5a6cb51333 عکس‌های اصلی سایت — بخش ۴ (قبل/بعد + مراجع) 2026-09-02 23:00:09 +03:30
Behrad dc200099ba عکس‌های اصلی سایت — بخش ۳ (تصاویر ۱، ۲، ۵) 2026-09-02 22:59:19 +03:30
Behrad 0a55d5d0fe عکس‌های اصلی سایت — بخش ۲ (تماس و تصویر ۴) 2026-09-02 22:59:08 +03:30
Behrad 97dc728a4c عکس‌های اصلی سایت — بخش ۱ (لوگو و هیرو) 2026-09-02 22:58:17 +03:30
Behrad 87f38f1c0b تصاویر بدون کش طولانی — نمایش فوری تغییرات 2026-09-02 19:03:36 +03:30
Behrad 8dab39ee83 بازطراحی تصاویر محلی با رنگ‌های قابل‌دیدن (مسی/طلایی) 2026-09-02 18:56:02 +03:30
Behrad 32b6655a1e رفع باگ: بازگردانی Tailwind imports در CSS (حذف اشتباه در بهینه‌سازی) 2026-09-02 18:47:33 +03:30
Behrad 395aceb6f2 اضافه کردن گزارش بهینه‌سازی سرعت (PDF) 2026-09-02 12:22:10 +03:30
Behrad e76dbbf63d مستندسازی بهبود سرعت در README 2026-09-02 12:20:52 +03:30
Behrad e0ebae4817 بهبود سرعت: حذف کامل وابستگی‌های خارجی
- همه ۹ عکس سایت به‌صورت محلی (frontend/public/images) — بدون postimg/housedesign
- حذف فونت‌های خارجی (Google Fonts + fontcdn) — فونت سیستمی سریع
- favicon واقعی + کش nginx برای webp/ico
2026-09-01 23:04:57 +03:30
19 changed files with 42 additions and 55 deletions
+1
View File
@@ -23,3 +23,4 @@ Thumbs.db
# Database # Database
*.sqlite3 *.sqlite3
*.db *.db
frontend/public/images/originals/
+11
View File
@@ -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` را اجرا کنید.
+10 -10
View File
@@ -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": "پروژه تکمیل‌شده",
} }
Binary file not shown.
+1 -1
View File
@@ -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>
+7 -1
View File
@@ -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;
Binary file not shown.

After

Width:  |  Height:  |  Size: 302 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 481 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 490 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

+10 -10
View File
@@ -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 -18
View File
@@ -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 {
-14
View File
@@ -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"
}
}
+1 -1
View File
@@ -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)',