Host website assets locally

Remove runtime dependency on external image and font CDNs so deployments remain stable and self-contained.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-26 18:10:15 +03:30
co-authored by Cursor
parent 85e61537e2
commit e664acb854
42 changed files with 90 additions and 33 deletions
+1 -2
View File
@@ -13,8 +13,7 @@ import {
import Link from "next/link"; import Link from "next/link";
import { InteriorFooter, InteriorHeader } from "../components/InteriorShell"; import { InteriorFooter, InteriorHeader } from "../components/InteriorShell";
const assetBase = const assetBase = "/assets";
"https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/SamanAndish_OcHaRXRqAo/assets/files";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "درباره سامان اندیش | تجربه تخصصی صنعت سیم و کابل", title: "درباره سامان اندیش | تجربه تخصصی صنعت سیم و کابل",
+1 -2
View File
@@ -18,8 +18,7 @@ import {
import Link from "next/link"; import Link from "next/link";
import { useState } from "react"; import { useState } from "react";
const assetBase = const assetBase = "/assets";
"https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/SamanAndish_OcHaRXRqAo/assets/files";
const navItems = [ const navItems = [
{ label: "صفحه اصلی", href: "/" }, { label: "صفحه اصلی", href: "/" },
+1 -2
View File
@@ -11,8 +11,7 @@ import Link from "next/link";
import { InteriorFooter, InteriorHeader } from "../components/InteriorShell"; import { InteriorFooter, InteriorHeader } from "../components/InteriorShell";
import ContactForm from "./ContactForm"; import ContactForm from "./ContactForm";
const assetBase = const assetBase = "/assets";
"https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/SamanAndish_OcHaRXRqAo/assets/files";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "تماس با سامان اندیش | مشاوره ماشین‌آلات صنعتی", title: "تماس با سامان اندیش | مشاوره ماشین‌آلات صنعتی",
+79 -11
View File
@@ -1,6 +1,74 @@
@import url("https://cdn.meshkee.com/web-builder/fonts/ravi/ravi.css"); @font-face {
@import url("https://cdn.meshkee.com/web-builder/fonts/montserrat/montserrat.css"); font-family: "Monoton";
@import url("https://cdn.meshkee.com/web-builder/fonts/monoton/monoton.css"); font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/fonts/webfont-01.ttf") format("truetype");
}
@font-face {
font-family: "Montserrat";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/fonts/webfont-02.ttf") format("truetype");
}
@font-face {
font-family: "Montserrat";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/fonts/webfont-03.ttf") format("truetype");
}
@font-face {
font-family: "Montserrat";
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/fonts/webfont-04.ttf") format("truetype");
}
@font-face {
font-family: "Montserrat";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/fonts/webfont-05.ttf") format("truetype");
}
@font-face {
font-family: "Vazirmatn";
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("/fonts/webfont-06.ttf") format("truetype");
}
@font-face {
font-family: "Vazirmatn";
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("/fonts/webfont-07.ttf") format("truetype");
}
@font-face {
font-family: "Vazirmatn";
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("/fonts/webfont-08.ttf") format("truetype");
}
@font-face {
font-family: "Vazirmatn";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url("/fonts/webfont-09.ttf") format("truetype");
}
:root { :root {
--navy: #082a4e; --navy: #082a4e;
@@ -28,7 +96,7 @@ body {
margin: 0; margin: 0;
color: var(--ink); color: var(--ink);
background: var(--white); background: var(--white);
font-family: ravi, "Tahoma", sans-serif; font-family: Vazirmatn, "Tahoma", sans-serif;
line-height: 1.8; line-height: 1.8;
overflow-x: hidden; overflow-x: hidden;
} }
@@ -65,7 +133,7 @@ button {
.topbar { .topbar {
color: rgba(255, 255, 255, 0.76); color: rgba(255, 255, 255, 0.76);
background: var(--navy-deep); background: var(--navy-deep);
font-family: montserrat, ravi, sans-serif; font-family: Montserrat, Vazirmatn, sans-serif;
font-size: 11px; font-size: 11px;
letter-spacing: 0.25px; letter-spacing: 0.25px;
} }
@@ -87,7 +155,7 @@ button {
.topbar p { .topbar p {
margin: 0; margin: 0;
gap: 7px; gap: 7px;
font-family: ravi, sans-serif; font-family: Vazirmatn, sans-serif;
} }
.topbar p svg { .topbar p svg {
@@ -1141,7 +1209,7 @@ button {
color: var(--white); color: var(--white);
background: background:
linear-gradient(rgba(3, 25, 47, 0.93), rgba(3, 25, 47, 0.93)), linear-gradient(rgba(3, 25, 47, 0.93), rgba(3, 25, 47, 0.93)),
url("https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/SamanAndish_OcHaRXRqAo/assets/files/ZLxH2tZ4dR.jpg") url("/assets/ZLxH2tZ4dR.jpg")
center/cover fixed; center/cover fixed;
} }
@@ -1561,7 +1629,7 @@ button {
.footer__contact strong { .footer__contact strong {
color: var(--white); color: var(--white);
font-family: montserrat, ravi, sans-serif; font-family: Montserrat, Vazirmatn, sans-serif;
font-size: 11px; font-size: 11px;
font-weight: 500; font-weight: 500;
} }
@@ -2287,7 +2355,7 @@ button {
.about-stats strong { .about-stats strong {
color: #ff8a9a; color: #ff8a9a;
font-family: montserrat, ravi, sans-serif; font-family: Montserrat, Vazirmatn, sans-serif;
font-size: 38px; font-size: 38px;
line-height: 1.2; line-height: 1.2;
} }
@@ -2486,7 +2554,7 @@ button {
color: var(--white); color: var(--white);
background: background:
linear-gradient(90deg, rgba(226, 36, 61, 0.96), rgba(188, 23, 45, 0.94)), linear-gradient(90deg, rgba(226, 36, 61, 0.96), rgba(188, 23, 45, 0.94)),
url("https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/SamanAndish_OcHaRXRqAo/assets/files/i8SsUDDMLv.jpg") url("/assets/i8SsUDDMLv.jpg")
center/cover; center/cover;
} }
@@ -2570,7 +2638,7 @@ button {
.contact-info__grid strong { .contact-info__grid strong {
color: var(--navy); color: var(--navy);
font-family: montserrat, ravi, sans-serif; font-family: Montserrat, Vazirmatn, sans-serif;
font-size: 14px; font-size: 14px;
} }
+8 -16
View File
@@ -28,8 +28,7 @@ import {
import type { FormEvent } from "react"; import type { FormEvent } from "react";
import { useEffect, useMemo, useRef, useState } from "react"; import { useEffect, useMemo, useRef, useState } from "react";
const assetBase = const assetBase = "/assets";
"https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/SamanAndish_OcHaRXRqAo/assets/files";
const heroSlides = [ const heroSlides = [
{ {
@@ -79,8 +78,7 @@ const products = [
title: "دستگاه کوادینگ ۶۰۰ میلی‌متر", title: "دستگاه کوادینگ ۶۰۰ میلی‌متر",
en: "600mm Quadding Machine | QUA-21 | LESMO", en: "600mm Quadding Machine | QUA-21 | LESMO",
category: "دستگاه تابنده", category: "دستگاه تابنده",
image: image: `${assetBase}/product-quadding.jpg`,
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/b597976c3ce6012f3a07e9f5c71a3c8c/conversions/WhatsApp-Image-2021-11-13-at-16.48.24-thumbnail.jpg",
code: "LESMO / QUA-21", code: "LESMO / QUA-21",
}, },
{ {
@@ -88,8 +86,7 @@ const products = [
title: "بریدر ۱۶ کریر", title: "بریدر ۱۶ کریر",
en: "16 Carriers Braider | 16N4 | SPIRKA", en: "16 Carriers Braider | 16N4 | SPIRKA",
category: "دستگاه بافنده", category: "دستگاه بافنده",
image: image: `${assetBase}/product-braider.jpg`,
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/24128c84241513596a1be1534a791c3b/conversions/IMG_20210911_125416-thumbnail.jpg",
code: "SPIRKA / 16N4", code: "SPIRKA / 16N4",
}, },
{ {
@@ -97,8 +94,7 @@ const products = [
title: "خط کشش ۰.۵–۰.۱۵ میلی‌متر", title: "خط کشش ۰.۵–۰.۱۵ میلی‌متر",
en: "0.15–0.5 SQmm Drawing Line | TRB3 | SAMP", en: "0.15–0.5 SQmm Drawing Line | TRB3 | SAMP",
category: "دستگاه کشش", category: "دستگاه کشش",
image: image: `${assetBase}/product-drawing-line.jpg`,
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/74e48c1a38cb4022d50c45dbd3be1f9a/conversions/WhatsApp-Image-2021-11-13-at-13.48.57-thumbnail.jpg",
code: "SAMP / TRB3", code: "SAMP / TRB3",
}, },
{ {
@@ -106,8 +102,7 @@ const products = [
title: "پی‌آف ۶۰۰ میلی‌متر", title: "پی‌آف ۶۰۰ میلی‌متر",
en: "600mm Pay Off | TAP D-0800 | KDM", en: "600mm Pay Off | TAP D-0800 | KDM",
category: "دستگاه پی‌آف", category: "دستگاه پی‌آف",
image: image: `${assetBase}/product-payoff.jpg`,
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/86a2ebc1d9ebc0d693437b61502e03ce/conversions/Picture1-thumbnail.jpg",
code: "KDM / TAP D-0800", code: "KDM / TAP D-0800",
}, },
]; ];
@@ -116,22 +111,19 @@ const news = [
{ {
title: "شرکت مهندسی، مشاوره و بازرگانی HService", title: "شرکت مهندسی، مشاوره و بازرگانی HService",
date: "۰۸ خرداد ۱۴۰۲", date: "۰۸ خرداد ۱۴۰۲",
image: image: `${assetBase}/news-hservice.jpg`,
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/2f19d9aa2413f3265b58d130ca4865ea/conversions/SATV---Weblog-Cover-thumbnail.jpg",
tag: "همکاری تجاری", tag: "همکاری تجاری",
}, },
{ {
title: "نمایشگاه‌های تجاری پیشرو Wire و Tube", title: "نمایشگاه‌های تجاری پیشرو Wire و Tube",
date: "۲۴ اردیبهشت ۱۴۰۲", date: "۲۴ اردیبهشت ۱۴۰۲",
image: image: `${assetBase}/news-wire-tube.jpg`,
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/2434bffa9a1ba2b3f857680a8fbb5b4f/conversions/SATV---Blog-Cover---Wire-&-Tube-2022-thumbnail.jpg",
tag: "رویداد", tag: "رویداد",
}, },
{ {
title: "انرژی پاک و بازار گواهی انرژی تجدیدپذیر", title: "انرژی پاک و بازار گواهی انرژی تجدیدپذیر",
date: "۱۲ اردیبهشت ۱۴۰۲", date: "۱۲ اردیبهشت ۱۴۰۲",
image: image: `${assetBase}/news-green-energy.jpg`,
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/862690c612c4c41a2ddceb9bf7a5c848/conversions/SATV---Blog-Cover---Green-Energy-thumbnail.jpg",
tag: "دانش فنی", tag: "دانش فنی",
}, },
]; ];
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1014 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.