From 0de7e93a0fa134caf321415014de62204aba014c Mon Sep 17 00:00:00 2001 From: oliver Date: Fri, 7 Feb 2025 13:15:33 +0330 Subject: [PATCH 01/14] feat: add Hero component --- src/app/components/Hero/Hero.tsx | 12 ++++++++++++ src/app/page.tsx | 2 ++ 2 files changed, 14 insertions(+) create mode 100644 src/app/components/Hero/Hero.tsx diff --git a/src/app/components/Hero/Hero.tsx b/src/app/components/Hero/Hero.tsx new file mode 100644 index 0000000..80c1717 --- /dev/null +++ b/src/app/components/Hero/Hero.tsx @@ -0,0 +1,12 @@ +import { Section } from "@/components/ui/section"; +import React from "react"; + +const Hero = () => { + return ( +
+
Hero
+
+ ); +}; + +export default Hero; diff --git a/src/app/page.tsx b/src/app/page.tsx index 1db9eba..e6745bf 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,8 +1,10 @@ +import Hero from "./components/Hero/Hero"; import FAQ from "@/app/components/FAQ/FAQ"; export default function Home() { return ( <> + ); From 941ad686babe3ff3f128bfc6aabea837a3fa9fc3 Mon Sep 17 00:00:00 2001 From: oliver Date: Wed, 12 Feb 2025 00:02:31 +0330 Subject: [PATCH 02/14] feat: implement Hero component with new layout and SVG elements --- src/app/components/Hero/Hero.tsx | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/app/components/Hero/Hero.tsx b/src/app/components/Hero/Hero.tsx index 80c1717..2f3a39e 100644 --- a/src/app/components/Hero/Hero.tsx +++ b/src/app/components/Hero/Hero.tsx @@ -1,11 +1,22 @@ -import { Section } from "@/components/ui/section"; +import HeroContent from "./HeroContent"; +import HeroSVG from "./HeroSVG"; +import { HeroLeftTech, HeroRightTech } from "./HeroTechSVG"; import React from "react"; const Hero = () => { return ( -
-
Hero
-
+
+ +
+ +
+
+ +
+
+ +
+
); }; From c75bc74de8af0af94df85387ef2a6dd26527829e Mon Sep 17 00:00:00 2001 From: oliver Date: Wed, 12 Feb 2025 00:03:40 +0330 Subject: [PATCH 03/14] feat: add HeroContent component with layout and interactive elements --- src/app/components/Hero/HeroContent.tsx | 55 +++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/app/components/Hero/HeroContent.tsx diff --git a/src/app/components/Hero/HeroContent.tsx b/src/app/components/Hero/HeroContent.tsx new file mode 100644 index 0000000..c1ba317 --- /dev/null +++ b/src/app/components/Hero/HeroContent.tsx @@ -0,0 +1,55 @@ +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { ArrowLeftIcon, TicketIcon } from "lucide-react"; +import Link from "next/link"; +import React from "react"; + +const HeroContent = () => { + return ( +
+ +
+ عنوان بج بالای صفحه +
+
+

+ همایش فرانت چپتر ۱۴۰۳{" "} +

+ +

+ بزرگترین همایش فرانت‌اند ایران +

+

+ همایش فرانت چپتر محلی برای گردهمایی و به اشتراک‌گذاری تجربیات +
برنامه‌نویسان، متخصصین و علاقه‌مندان + حوزه فرانت‌اند +

+
+ +
+ +
+
+
+ ); +}; + +export default HeroContent; From d0a7b4f123950c0e72e1f8a707162ea2338a4563 Mon Sep 17 00:00:00 2001 From: oliver Date: Wed, 12 Feb 2025 00:04:38 +0330 Subject: [PATCH 04/14] feat: add bg SVGs to hero section --- src/app/components/Hero/HeroSVG.tsx | 271 +++++ src/app/components/Hero/HeroTechSVG.tsx | 1213 +++++++++++++++++++++++ 2 files changed, 1484 insertions(+) create mode 100644 src/app/components/Hero/HeroSVG.tsx create mode 100644 src/app/components/Hero/HeroTechSVG.tsx diff --git a/src/app/components/Hero/HeroSVG.tsx b/src/app/components/Hero/HeroSVG.tsx new file mode 100644 index 0000000..0a24bfc --- /dev/null +++ b/src/app/components/Hero/HeroSVG.tsx @@ -0,0 +1,271 @@ +import React from "react"; + +const HeroSVG: React.FC = () => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default HeroSVG; diff --git a/src/app/components/Hero/HeroTechSVG.tsx b/src/app/components/Hero/HeroTechSVG.tsx new file mode 100644 index 0000000..b660587 --- /dev/null +++ b/src/app/components/Hero/HeroTechSVG.tsx @@ -0,0 +1,1213 @@ +import React from "react"; + +export const HeroLeftTech: React.FC = () => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export const HeroRightTech: React.FC = () => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; From 8d81f1e5d819a94d7f3e2fe5b8cf8897df601148 Mon Sep 17 00:00:00 2001 From: oliver Date: Wed, 12 Feb 2025 00:05:47 +0330 Subject: [PATCH 05/14] build: install @radix-ui/react-slot for button component --- package.json | 1 + pnpm-lock.yaml | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ffeb1a3..a7f37c6 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "dependencies": { "@radix-ui/react-accordion": "^1.2.2", "@radix-ui/react-icons": "^1.3.2", + "@radix-ui/react-slot": "^1.1.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.474.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dfe7a12..1281ece 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: '@radix-ui/react-icons': specifier: ^1.3.2 version: 1.3.2(react@19.0.0) + '@radix-ui/react-slot': + specifier: ^1.1.2 + version: 1.1.2(@types/react@19.0.8)(react@19.0.0) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -529,6 +532,15 @@ packages: '@types/react': optional: true + '@radix-ui/react-slot@1.1.2': + resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@radix-ui/react-use-callback-ref@1.1.0': resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} peerDependencies: @@ -3112,6 +3124,13 @@ snapshots: optionalDependencies: '@types/react': 19.0.8 + '@radix-ui/react-slot@1.1.2(@types/react@19.0.8)(react@19.0.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.8)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.8 + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.8)(react@19.0.0)': dependencies: react: 19.0.0 @@ -3910,7 +3929,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.21.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@1.21.7)))(eslint@9.19.0(jiti@1.21.7)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.21.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.19.0(jiti@1.21.7)): dependencies: debug: 3.2.7 optionalDependencies: @@ -3932,7 +3951,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.19.0(jiti@1.21.7) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.21.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.19.0(jiti@1.21.7)))(eslint@9.19.0(jiti@1.21.7)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.21.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.19.0(jiti@1.21.7)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 From 3605da3d30f8d9fd0b1b3975662fdb364a05b51a Mon Sep 17 00:00:00 2001 From: oliver Date: Wed, 12 Feb 2025 00:06:15 +0330 Subject: [PATCH 06/14] feat: add badge & button components --- src/components/ui/badge.tsx | 36 ++++++++++++++++++++++ src/components/ui/button.tsx | 58 ++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 src/components/ui/badge.tsx create mode 100644 src/components/ui/button.tsx diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx new file mode 100644 index 0000000..528b31c --- /dev/null +++ b/src/components/ui/badge.tsx @@ -0,0 +1,36 @@ +import * as React from "react"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "@/lib/utils"; + +const badgeVariants = cva( + "inline-flex items-center rounded-full border border-border/100 dark:border-border/20 px-2.5 py-1 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 gap-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-foreground dark:shadow hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground dark:shadow hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +); + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ( +
+ ); +} + +export { Badge, badgeVariants }; diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx new file mode 100644 index 0000000..f6df77d --- /dev/null +++ b/src/components/ui/button.tsx @@ -0,0 +1,58 @@ +import { cn } from "@/lib/utils"; +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; +import * as React from "react"; + +const buttonVariants = cva( + "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: + "text-primary-foreground shadow dark:hover:from-primary/80 hover:from-primary/70 dark:hover:to-primary/70 hover:to-primary/90 bg-gradient-to-b from-primary/60 to-primary/100 dark:from-primary/100 dark:to-primary/70 border-t-primary", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + glow: "glass-4 hover:glass-5 shadow-md", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-foreground underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2", + xs: "h-7 rounded-md px-2", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-md px-5", + icon: "h-9 w-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +); + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean; +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button"; + return ( + + ); + }, +); +Button.displayName = "Button"; + +export { Button, buttonVariants }; From a4f218ecea583c5e832b31a15a00038d809d2cc2 Mon Sep 17 00:00:00 2001 From: oliver Date: Wed, 12 Feb 2025 00:06:49 +0330 Subject: [PATCH 07/14] feat: add border-gradient css for hero btn --- src/app/globals.css | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/app/globals.css b/src/app/globals.css index bc828b7..0530387 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -10,3 +10,19 @@ @apply bg-background text-foreground dark:bg-background-dark dark:text-foreground-dark; } } +.border-gradient { + border-width: 1px; + border-style: solid; + border-image-source: linear-gradient( + 180deg, + rgba(250, 250, 250, 0.2) 0%, + rgba(250, 250, 250, 0.05) 16%, + rgba(250, 250, 250, 0.05) 86%, + rgba(255, 255, 255, 0) 100% + ); + + border-image-slice: 8; + border-radius: 6px; + -webkit-mask: linear-gradient(white, white); + mask: linear-gradient(white, white); +} From a4f47828e45d27b0f9afe2f7047467d312616bc2 Mon Sep 17 00:00:00 2001 From: oliver Date: Sat, 15 Feb 2025 18:24:59 +0330 Subject: [PATCH 08/14] fix: make half circle(HeroSVG) full width for large devices --- src/app/components/Hero/Hero.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/components/Hero/Hero.tsx b/src/app/components/Hero/Hero.tsx index 2f3a39e..013c9d9 100644 --- a/src/app/components/Hero/Hero.tsx +++ b/src/app/components/Hero/Hero.tsx @@ -5,7 +5,7 @@ import React from "react"; const Hero = () => { return ( -
+
@@ -13,7 +13,7 @@ const Hero = () => {
-
+
From c3e84829ad769b61957498ce90a98971776554a5 Mon Sep 17 00:00:00 2001 From: oliver Date: Sat, 15 Feb 2025 18:26:02 +0330 Subject: [PATCH 09/14] fix: make HeroSVG full width for large devices --- src/app/components/Hero/HeroSVG.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/components/Hero/HeroSVG.tsx b/src/app/components/Hero/HeroSVG.tsx index 0a24bfc..2b5c5f7 100644 --- a/src/app/components/Hero/HeroSVG.tsx +++ b/src/app/components/Hero/HeroSVG.tsx @@ -3,7 +3,7 @@ import React from "react"; const HeroSVG: React.FC = () => { return ( Date: Sat, 15 Feb 2025 18:26:46 +0330 Subject: [PATCH 10/14] fix: make hero buttons as link and smaller like figma design --- src/app/components/Hero/HeroContent.tsx | 30 ++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/app/components/Hero/HeroContent.tsx b/src/app/components/Hero/HeroContent.tsx index c1ba317..25366fb 100644 --- a/src/app/components/Hero/HeroContent.tsx +++ b/src/app/components/Hero/HeroContent.tsx @@ -28,24 +28,24 @@ const HeroContent = () => { حوزه فرانت‌اند

- -
+ + +
+ + +
From a983b82535bd3b96d59c288316fd9f1d782a9d9f Mon Sep 17 00:00:00 2001 From: oliver Date: Sat, 15 Feb 2025 18:35:08 +0330 Subject: [PATCH 11/14] feat(ui): update global styles and button component from dev --- src/app/globals.css | 37 ++++++++++++++++++++---------------- src/components/ui/button.tsx | 6 +++--- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/app/globals.css b/src/app/globals.css index 0530387..5ddc566 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -6,23 +6,28 @@ * { @apply border-border; } + body { @apply bg-background text-foreground dark:bg-background-dark dark:text-foreground-dark; } } -.border-gradient { - border-width: 1px; - border-style: solid; - border-image-source: linear-gradient( - 180deg, - rgba(250, 250, 250, 0.2) 0%, - rgba(250, 250, 250, 0.05) 16%, - rgba(250, 250, 250, 0.05) 86%, - rgba(255, 255, 255, 0) 100% - ); - - border-image-slice: 8; - border-radius: 6px; - -webkit-mask: linear-gradient(white, white); - mask: linear-gradient(white, white); -} + +@layer components { + + .glass-1 { + @apply border border-border/20 border-b-border/5 bg-gradient-to-b from-[#09090B]/5 to-[#09090B]/20 dark:border-b-0 dark:border-border/5 dark:border-t-border/20 dark:from-white/5 dark:to-white/20; + } + + .glass-2 { + @apply border border-border/20 border-b-border/5 bg-gradient-to-b from-[#09090B]/20 to-[#09090B]/5 dark:border-b-0 dark:border-border/5 dark:border-t-border/20 dark:from-white/20 dark:to-white/5; + } + + + .dark-glass-1 { + @apply border border-border/80 border-b-input/90 bg-gradient-to-b from-[#27272A]/60 to-[#27272A]/20 dark:border-b-0 dark:border-border/5 dark:border-t-border/20 dark:from-white/10 dark:to-white/5; + } + + .dark-glass-2 { + @apply border border-border/100 border-b-input bg-gradient-to-b from-[#27272A]/100 to-[#27272A]/20 dark:border-b-0 dark:border-border/5 dark:border-t-border/20 dark:from-white/15 dark:to-white/5; + } +} \ No newline at end of file diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index f6df77d..224f9f7 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -9,12 +9,12 @@ const buttonVariants = cva( variants: { variant: { default: - "text-primary-foreground shadow dark:hover:from-primary/80 hover:from-primary/70 dark:hover:to-primary/70 hover:to-primary/90 bg-gradient-to-b from-primary/60 to-primary/100 dark:from-primary/100 dark:to-primary/70 border-t-primary", + "text-white -foreground shadow dark:hover:from-white/80 hover:from-white/70 dark:hover:to-white/70 hover:to-white/90 bg-gradient-to-b from-white/60 to-white/100 dark:from-white/100 dark:to-white/70 border-t-white", destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", outline: - "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", - glow: "glass-4 hover:glass-5 shadow-md", + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent", + glow: "glass-1 dark:dark-glass-1 hover:glass-2 dark:hover:dark-glass-2 shadow-md", secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", ghost: "hover:bg-accent hover:text-accent-foreground", From ccb171ef568b3eca5088d29f2f80223d02a9cc1d Mon Sep 17 00:00:00 2001 From: oliver Date: Sat, 15 Feb 2025 19:23:33 +0330 Subject: [PATCH 12/14] fix(hero-section): improve responsiveness of left and right SVGs in hero for large screens --- src/app/components/Hero/Hero.tsx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/app/components/Hero/Hero.tsx b/src/app/components/Hero/Hero.tsx index 013c9d9..e2b16bf 100644 --- a/src/app/components/Hero/Hero.tsx +++ b/src/app/components/Hero/Hero.tsx @@ -5,14 +5,18 @@ import React from "react"; const Hero = () => { return ( -
+
-
- -
-
- +
+
+ +
+ +
+ +
+
From 8468c9a78c850e424a631ad73c4956a298cc9717 Mon Sep 17 00:00:00 2001 From: Amir Hossein Karimi Date: Sun, 16 Feb 2025 15:20:50 +0330 Subject: [PATCH 13/14] feat: improve HeroContent badge --- src/app/components/Hero/HeroContent.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/components/Hero/HeroContent.tsx b/src/app/components/Hero/HeroContent.tsx index 25366fb..c29ba0f 100644 --- a/src/app/components/Hero/HeroContent.tsx +++ b/src/app/components/Hero/HeroContent.tsx @@ -1,8 +1,7 @@ import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; -import { ArrowLeftIcon, TicketIcon } from "lucide-react"; +import { CarrotIcon, TicketIcon } from "lucide-react"; import Link from "next/link"; -import React from "react"; const HeroContent = () => { return ( @@ -11,8 +10,9 @@ const HeroContent = () => { variant="outline" className="mx-auto mt-20 w-fit animate-appear opacity-0" > -
- عنوان بج بالای صفحه +
+ + فرانت چپتر پخت و پز می‌کند

From 8f0d94484781cec5d2dc08c6f342e0ff84f14583 Mon Sep 17 00:00:00 2001 From: Amir Hossein Karimi Date: Sun, 16 Feb 2025 15:36:39 +0330 Subject: [PATCH 14/14] feat: update links --- src/app/components/Hero/HeroContent.tsx | 5 +++-- src/configs/links.ts | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 src/configs/links.ts diff --git a/src/app/components/Hero/HeroContent.tsx b/src/app/components/Hero/HeroContent.tsx index c29ba0f..c0467d1 100644 --- a/src/app/components/Hero/HeroContent.tsx +++ b/src/app/components/Hero/HeroContent.tsx @@ -1,5 +1,6 @@ import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; +import { linksConfig } from "@/configs/links"; import { CarrotIcon, TicketIcon } from "lucide-react"; import Link from "next/link"; @@ -28,7 +29,7 @@ const HeroContent = () => { حوزه فرانت‌اند

- +
- + diff --git a/src/configs/links.ts b/src/configs/links.ts new file mode 100644 index 0000000..231656b --- /dev/null +++ b/src/configs/links.ts @@ -0,0 +1,4 @@ +export const linksConfig = { + buyTicket: "https://frontchapter.ir/product/conf1403/", + support: "https://t.me/FrontChapterSupport", +};