diff --git a/docker-compose.yml b/docker-compose.yml index 6b93d3f..ceb7466 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,7 +12,8 @@ services: - --providers.docker.exposedbydefault=false - --entrypoints.web.address=:80 ports: - - "${TRAEFIK_HTTP_PORT:-5173}:80" + # پورت به 8080 تغییر کرد تا با پورت 5173 سرور لوکال Vite تداخل نکند + - "${TRAEFIK_HTTP_PORT:-8080}:80" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro @@ -46,7 +47,8 @@ services: timeout: 5s retries: 12 ports: - - "9001:9001" # کنسول MinIO — در محیط واقعی با فایروال ببندید + - "9001:9001" # کنسول MinIO + - "9000:9000" # دسترسی لوکال به تصاویر و مدیا labels: - traefik.enable=true - traefik.http.routers.media.rule=PathPrefix(`/media`) @@ -79,6 +81,8 @@ services: backend: build: ./backend restart: unless-stopped + ports: + - "8000:8000" # اتصال مستقیم بک‌اند به ویندوز برای فرانت‌اند لوکال environment: DATABASE_URL: postgresql+psycopg://aramesh:${POSTGRES_PASSWORD}@db:5432/arameshplaza SECRET_KEY: ${SECRET_KEY:?SECRET_KEY را در .env تنظیم کنید} @@ -151,4 +155,4 @@ services: volumes: db_data: - minio_data: + minio_data: \ No newline at end of file diff --git a/frontend/src/components/ArticleCard.tsx b/frontend/src/components/ArticleCard.tsx index 3d6d2ce..8d35481 100644 --- a/frontend/src/components/ArticleCard.tsx +++ b/frontend/src/components/ArticleCard.tsx @@ -7,39 +7,43 @@ export function ArticleCard({ article }: { article: Article }) { return ( -
+
{`تصویر + {/* برچسب دسته‌بندی کپسولی شیشه‌ای روی تصویر */} +
+ {article.category} +
-
-

{article.category}

- -

+
+

{article.title}

-

+

{article.excerpt}

-
- +
+ {article.date} - + {article.read} - + + {/* دکمه کپسولی ادامه مطلب با افکت شیشه‌ای */} + ادامه مطلب - +
diff --git a/frontend/src/components/Button.tsx b/frontend/src/components/Button.tsx index 52bba6a..b80958d 100644 --- a/frontend/src/components/Button.tsx +++ b/frontend/src/components/Button.tsx @@ -9,26 +9,33 @@ type BaseProps = { className?: string } -const STYLES: Record = { +// استایل‌های فوق‌لوکس شیشه‌ای (Glassmorphic) با رنگ‌های اختصاصی پروژه +const STYLES: Record = { copper: { - base: 'bg-copper text-char', - fill: 'bg-char', - text: 'group-hover:text-ivory', + // دکمه اصلی: شیشه دودی تیره با خط نوری مسی، هاله بازتاب و حاشیه کریستالی + base: 'bg-char/75 backdrop-blur-xl text-ivory border border-copper/50 shadow-[inset_0_1px_1px_rgba(255,255,255,0.25),0_8px_20px_rgba(0,0,0,0.4)]', + fill: 'bg-gradient-to-r from-copper via-[#d89f6e] to-copper', + text: 'group-hover:text-char font-semibold', + glow: 'hover:border-copper hover:shadow-[0_0_30px_rgba(197,143,92,0.5)]', }, outline: { - base: 'border border-ivory/30 text-ivory', - fill: 'bg-copper', - text: 'group-hover:text-char', + // دکمه ثانویه: شیشه دودی کاملاً مات (Frosted Smoked Glass) با بازتاب لبه‌ها + base: 'bg-white/[0.04] backdrop-blur-xl border border-white/20 text-ivory shadow-[inset_0_1px_1px_rgba(255,255,255,0.15),0_8px_20px_rgba(0,0,0,0.3)]', + fill: 'bg-white/10', + text: 'group-hover:text-copper', + glow: 'hover:border-copper/70 hover:bg-white/[0.08] hover:shadow-[0_0_25px_rgba(197,143,92,0.25)]', }, dark: { - base: 'bg-char text-ivory', + base: 'bg-ink/85 backdrop-blur-xl text-ivory border border-white/10 shadow-[inset_0_1px_1px_rgba(255,255,255,0.1)]', fill: 'bg-copper', text: 'group-hover:text-char', + glow: 'hover:border-copper/50 hover:shadow-[0_0_20px_rgba(197,143,92,0.3)]', }, 'dark-ivory': { - base: 'bg-char text-ivory', + base: 'bg-ink/85 backdrop-blur-xl text-ivory border border-white/10 shadow-[inset_0_1px_1px_rgba(255,255,255,0.1)]', fill: 'bg-ivory', text: 'group-hover:text-char', + glow: 'hover:shadow-[0_0_20px_rgba(255,255,255,0.2)]', }, } @@ -36,12 +43,18 @@ function Inner({ children, variant = 'copper' }: { children: React.ReactNode; va const style = STYLES[variant] return ( <> + {/* خط انعکاس نوری شیشه در بالای دکمه */} + + + {/* انیمیشن پر شدن موجی و نرم */}