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 { InteriorFooter, InteriorHeader } from "../components/InteriorShell";
const assetBase =
"https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/SamanAndish_OcHaRXRqAo/assets/files";
const assetBase = "/assets";
export const metadata: Metadata = {
title: "درباره سامان اندیش | تجربه تخصصی صنعت سیم و کابل",
+1 -2
View File
@@ -18,8 +18,7 @@ import {
import Link from "next/link";
import { useState } from "react";
const assetBase =
"https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/SamanAndish_OcHaRXRqAo/assets/files";
const assetBase = "/assets";
const navItems = [
{ label: "صفحه اصلی", href: "/" },
+1 -2
View File
@@ -11,8 +11,7 @@ import Link from "next/link";
import { InteriorFooter, InteriorHeader } from "../components/InteriorShell";
import ContactForm from "./ContactForm";
const assetBase =
"https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/SamanAndish_OcHaRXRqAo/assets/files";
const assetBase = "/assets";
export const metadata: Metadata = {
title: "تماس با سامان اندیش | مشاوره ماشین‌آلات صنعتی",
+79 -11
View File
@@ -1,6 +1,74 @@
@import url("https://cdn.meshkee.com/web-builder/fonts/ravi/ravi.css");
@import url("https://cdn.meshkee.com/web-builder/fonts/montserrat/montserrat.css");
@import url("https://cdn.meshkee.com/web-builder/fonts/monoton/monoton.css");
@font-face {
font-family: "Monoton";
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 {
--navy: #082a4e;
@@ -28,7 +96,7 @@ body {
margin: 0;
color: var(--ink);
background: var(--white);
font-family: ravi, "Tahoma", sans-serif;
font-family: Vazirmatn, "Tahoma", sans-serif;
line-height: 1.8;
overflow-x: hidden;
}
@@ -65,7 +133,7 @@ button {
.topbar {
color: rgba(255, 255, 255, 0.76);
background: var(--navy-deep);
font-family: montserrat, ravi, sans-serif;
font-family: Montserrat, Vazirmatn, sans-serif;
font-size: 11px;
letter-spacing: 0.25px;
}
@@ -87,7 +155,7 @@ button {
.topbar p {
margin: 0;
gap: 7px;
font-family: ravi, sans-serif;
font-family: Vazirmatn, sans-serif;
}
.topbar p svg {
@@ -1141,7 +1209,7 @@ button {
color: var(--white);
background:
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;
}
@@ -1561,7 +1629,7 @@ button {
.footer__contact strong {
color: var(--white);
font-family: montserrat, ravi, sans-serif;
font-family: Montserrat, Vazirmatn, sans-serif;
font-size: 11px;
font-weight: 500;
}
@@ -2287,7 +2355,7 @@ button {
.about-stats strong {
color: #ff8a9a;
font-family: montserrat, ravi, sans-serif;
font-family: Montserrat, Vazirmatn, sans-serif;
font-size: 38px;
line-height: 1.2;
}
@@ -2486,7 +2554,7 @@ button {
color: var(--white);
background:
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;
}
@@ -2570,7 +2638,7 @@ button {
.contact-info__grid strong {
color: var(--navy);
font-family: montserrat, ravi, sans-serif;
font-family: Montserrat, Vazirmatn, sans-serif;
font-size: 14px;
}
+8 -16
View File
@@ -28,8 +28,7 @@ import {
import type { FormEvent } from "react";
import { useEffect, useMemo, useRef, useState } from "react";
const assetBase =
"https://meshkee-templates.sas.amin.parminstorage.ir/sites/user_themes/SamanAndish_OcHaRXRqAo/assets/files";
const assetBase = "/assets";
const heroSlides = [
{
@@ -79,8 +78,7 @@ const products = [
title: "دستگاه کوادینگ ۶۰۰ میلی‌متر",
en: "600mm Quadding Machine | QUA-21 | LESMO",
category: "دستگاه تابنده",
image:
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/b597976c3ce6012f3a07e9f5c71a3c8c/conversions/WhatsApp-Image-2021-11-13-at-16.48.24-thumbnail.jpg",
image: `${assetBase}/product-quadding.jpg`,
code: "LESMO / QUA-21",
},
{
@@ -88,8 +86,7 @@ const products = [
title: "بریدر ۱۶ کریر",
en: "16 Carriers Braider | 16N4 | SPIRKA",
category: "دستگاه بافنده",
image:
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/24128c84241513596a1be1534a791c3b/conversions/IMG_20210911_125416-thumbnail.jpg",
image: `${assetBase}/product-braider.jpg`,
code: "SPIRKA / 16N4",
},
{
@@ -97,8 +94,7 @@ const products = [
title: "خط کشش ۰.۵–۰.۱۵ میلی‌متر",
en: "0.15–0.5 SQmm Drawing Line | TRB3 | SAMP",
category: "دستگاه کشش",
image:
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/74e48c1a38cb4022d50c45dbd3be1f9a/conversions/WhatsApp-Image-2021-11-13-at-13.48.57-thumbnail.jpg",
image: `${assetBase}/product-drawing-line.jpg`,
code: "SAMP / TRB3",
},
{
@@ -106,8 +102,7 @@ const products = [
title: "پی‌آف ۶۰۰ میلی‌متر",
en: "600mm Pay Off | TAP D-0800 | KDM",
category: "دستگاه پی‌آف",
image:
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/86a2ebc1d9ebc0d693437b61502e03ce/conversions/Picture1-thumbnail.jpg",
image: `${assetBase}/product-payoff.jpg`,
code: "KDM / TAP D-0800",
},
];
@@ -116,22 +111,19 @@ const news = [
{
title: "شرکت مهندسی، مشاوره و بازرگانی HService",
date: "۰۸ خرداد ۱۴۰۲",
image:
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/2f19d9aa2413f3265b58d130ca4865ea/conversions/SATV---Weblog-Cover-thumbnail.jpg",
image: `${assetBase}/news-hservice.jpg`,
tag: "همکاری تجاری",
},
{
title: "نمایشگاه‌های تجاری پیشرو Wire و Tube",
date: "۲۴ اردیبهشت ۱۴۰۲",
image:
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/2434bffa9a1ba2b3f857680a8fbb5b4f/conversions/SATV---Blog-Cover---Wire-&-Tube-2022-thumbnail.jpg",
image: `${assetBase}/news-wire-tube.jpg`,
tag: "رویداد",
},
{
title: "انرژی پاک و بازار گواهی انرژی تجدیدپذیر",
date: "۱۲ اردیبهشت ۱۴۰۲",
image:
"https://meshkee-storage.sas.amin.parminstorage.ir/saman_andish_2474/862690c612c4c41a2ddceb9bf7a5c848/conversions/SATV---Blog-Cover---Green-Energy-thumbnail.jpg",
image: `${assetBase}/news-green-energy.jpg`,
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.