From bb7f1e33787ebca79e623653631630a120ee943f Mon Sep 17 00:00:00 2001 From: "s.esmaeili" Date: Wed, 7 Oct 2026 00:45:51 +0330 Subject: [PATCH] feat: update Dockerfile, add category pages, fonts and product images Rebuild Docker setup with simplified nginx-only Dockerfile (build runs on host). Add category detail pages, IRANSans font files, product images, and update all landing sections. Co-Authored-By: Claude Opus 4.6 --- .dockerignore | 6 +- .gitignore | 2 +- Dockerfile | 6 +- app/assets/css/main.css | 68 +++- app/components/layout/Footer.vue | 43 +- app/components/layout/Header.vue | 18 +- app/components/layout/Preloader.vue | 2 +- app/components/sections/About.vue | 6 +- app/components/sections/Contact.vue | 4 +- app/components/sections/Hero.vue | 10 +- app/components/sections/Industries.vue | 2 +- app/components/sections/Products.vue | 172 ++++---- app/components/sections/Services.vue | 4 +- app/components/sections/Standards.vue | 2 +- app/components/sections/Stats.vue | 2 +- app/components/sections/Testimonials.vue | 2 +- app/components/ui/ImagePlaceholder.vue | 23 ++ app/components/ui/Logo.vue | 19 +- app/pages/categories/[slug].vue | 192 +++++++++ nuxt.config.ts | 19 +- public/fonts/IRANSansWeb.woff2 | Bin 0 -> 31320 bytes public/fonts/IRANSansWeb_Bold.woff2 | Bin 0 -> 29688 bytes public/fonts/IRANSansWeb_Light.woff2 | Bin 0 -> 32420 bytes public/fonts/IRANSansWeb_Medium.woff2 | Bin 0 -> 28916 bytes public/fonts/IRANSansWeb_UltraLight.woff2 | Bin 0 -> 29840 bytes public/images/logo.png | Bin 0 -> 285305 bytes public/images/products/hearing.jpg | Bin 0 -> 103388 bytes public/images/products/respiratory.jpg | Bin 0 -> 126322 bytes public/images/products/traffic.jpg | Bin 0 -> 118521 bytes server/routes/sitemap.xml.ts | 13 +- shared/config/site.ts | 12 +- shared/data/categories.ts | 458 ++++++++++++++++++++++ shared/seo/schema.ts | 31 ++ 33 files changed, 920 insertions(+), 196 deletions(-) create mode 100644 app/components/ui/ImagePlaceholder.vue create mode 100644 app/pages/categories/[slug].vue create mode 100644 public/fonts/IRANSansWeb.woff2 create mode 100644 public/fonts/IRANSansWeb_Bold.woff2 create mode 100644 public/fonts/IRANSansWeb_Light.woff2 create mode 100644 public/fonts/IRANSansWeb_Medium.woff2 create mode 100644 public/fonts/IRANSansWeb_UltraLight.woff2 create mode 100644 public/images/logo.png create mode 100644 public/images/products/hearing.jpg create mode 100644 public/images/products/respiratory.jpg create mode 100644 public/images/products/traffic.jpg create mode 100644 shared/data/categories.ts diff --git a/.dockerignore b/.dockerignore index 6e5e4ef..70a68db 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,12 +2,8 @@ node_modules .nuxt .output .git -.gitignore -app -server -shared -public *.md _dev.log .env* npm-debug.log* +logo.png diff --git a/.gitignore b/.gitignore index 747c121..2184146 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,7 @@ node_modules/ .output/ .data/ dist -# out/ عمداً در git نگه داشته می‌شود (بیلد محلی → دیپلوی با Docker) +out/ # misc .DS_Store diff --git a/Dockerfile b/Dockerfile index f0cebb8..c43b092 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,8 @@ -FROM docker.arvancloud.ir/nginx:latest +# Static export is built on the host (`npm run build` → ./out) +# This image only serves the pre-built files via nginx. +FROM docker.arvancloud.ir/nginx:alpine -# خروجی static export (npm run build → پوشه out) COPY out /usr/share/nginx/html - COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 diff --git a/app/assets/css/main.css b/app/assets/css/main.css index 18b7384..d9f4489 100644 --- a/app/assets/css/main.css +++ b/app/assets/css/main.css @@ -1,20 +1,46 @@ @import "tailwindcss"; -/* ---- local fonts (replaces next/font/local) ---- - Same family names, fallback faces and metric overrides that next/font generated, so text - (including Persian glyphs inside font-mono, which fall back to the size-adjusted Arial face) - renders exactly as before. */ +/* ---- local fonts ---- */ @font-face { - font-family: "vazirmatn"; - src: url("/fonts/Vazirmatn-Variable.woff2") format("woff2"); - font-weight: 100 900; + font-family: "IRANSans"; + src: url("/fonts/IRANSansWeb_UltraLight.woff2") format("woff2"); + font-weight: 200; + font-style: normal; font-display: swap; } @font-face { - font-family: "vazirmatn Fallback"; + font-family: "IRANSans"; + src: url("/fonts/IRANSansWeb_Light.woff2") format("woff2"); + font-weight: 300; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "IRANSans"; + src: url("/fonts/IRANSansWeb.woff2") format("woff2"); + font-weight: 400; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "IRANSans"; + src: url("/fonts/IRANSansWeb_Medium.woff2") format("woff2"); + font-weight: 500; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "IRANSans"; + src: url("/fonts/IRANSansWeb_Bold.woff2") format("woff2"); + font-weight: 700; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "IRANSans Fallback"; src: local("Arial"); - ascent-override: 102.54%; - descent-override: 53.71%; + ascent-override: 100%; + descent-override: 35%; line-gap-override: 0%; size-adjust: 100%; } @@ -49,23 +75,23 @@ } :root { - --font-vazirmatn: "vazirmatn", "vazirmatn Fallback", Tahoma, system-ui, sans-serif; + --font-iransans: "IRANSans", "IRANSans Fallback", Tahoma, system-ui, sans-serif; --font-ibm-plex-mono: "ibmPlexMono", "ibmPlexMono Fallback", ui-monospace, monospace; } @theme { - --font-sans: var(--font-vazirmatn), ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif; /* font variables defined in :root above */ - --font-mono: var(--font-ibm-plex-mono), "Vazirmatn", ui-monospace, monospace; /* font variables defined in :root above */ + --font-sans: var(--font-iransans), ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif; + --font-mono: var(--font-ibm-plex-mono), "IRANSans", ui-monospace, monospace; - --color-bg: #0a0a0c; - --color-panel: #121216; - --color-panel-2: #17171c; + --color-bg: #0b1224; + --color-panel: #101a32; + --color-panel-2: #152040; --color-ink: #edede6; - --color-muted: #8e8e96; + --color-muted: #8e9ab0; --color-accent: #ff5a00; --color-accent-soft: #ff7a2a; --color-hazard: #ffb800; - --color-line: #232329; + --color-line: #1e2d4d; --animate-marquee: marquee 32s linear infinite; --animate-spin-slow: spin-slow 18s linear infinite; @@ -162,7 +188,7 @@ body { background: var(--color-bg); } ::-webkit-scrollbar-thumb { - background: #2c2c33; + background: #253558; border-radius: 8px; border: 2px solid var(--color-bg); } @@ -175,7 +201,7 @@ body { background-image: repeating-linear-gradient( -45deg, #ffb800 0 14px, - #0a0a0c 14px 28px + #0b1224 14px 28px ); } @@ -214,6 +240,6 @@ body { background-image: repeating-linear-gradient( 45deg, #ffb800 0 10px, - #0a0a0c 10px 20px + #0b1224 10px 20px ); } diff --git a/app/components/layout/Footer.vue b/app/components/layout/Footer.vue index d53f38a..d077692 100644 --- a/app/components/layout/Footer.vue +++ b/app/components/layout/Footer.vue @@ -1,24 +1,21 @@