mirror of
https://github.com/hanzoai/agency.git
synced 2026-09-30 20:39:59 +00:00
Refactor project
This commit is contained in:
Generated
+31
-6
@@ -36,6 +36,7 @@
|
||||
"@radix-ui/react-toggle": "^1.1.0",
|
||||
"@radix-ui/react-toggle-group": "^1.1.0",
|
||||
"@radix-ui/react-tooltip": "^1.1.4",
|
||||
"@rollup/rollup-darwin-x64": "^4.37.0",
|
||||
"@tanstack/react-query": "^5.56.2",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
@@ -52,6 +53,7 @@
|
||||
"react-resizable-panels": "^2.1.3",
|
||||
"react-router-dom": "^6.26.2",
|
||||
"recharts": "^2.12.7",
|
||||
"simple-icons": "^14.11.1",
|
||||
"sonner": "^1.5.0",
|
||||
"tailwind-merge": "^2.5.2",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
@@ -2361,15 +2363,12 @@
|
||||
]
|
||||
},
|
||||
"node_modules/@rollup/rollup-darwin-x64": {
|
||||
"version": "4.24.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz",
|
||||
"integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==",
|
||||
"version": "4.37.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.37.0.tgz",
|
||||
"integrity": "sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
]
|
||||
@@ -6334,6 +6333,19 @@
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/rollup/node_modules/@rollup/rollup-darwin-x64": {
|
||||
"version": "4.24.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz",
|
||||
"integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
]
|
||||
},
|
||||
"node_modules/run-parallel": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
|
||||
@@ -6412,6 +6424,19 @@
|
||||
"url": "https://github.com/sponsors/isaacs"
|
||||
}
|
||||
},
|
||||
"node_modules/simple-icons": {
|
||||
"version": "14.11.1",
|
||||
"resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-14.11.1.tgz",
|
||||
"integrity": "sha512-x4YmyosK22r+m+VK2ilRlrhJNtuIOgCHvVhUglJAvGIa18PlmQrGDIYGqDzYrqmgWB3yKz8Z1ZMSx/kZQSbLow==",
|
||||
"license": "CC0-1.0",
|
||||
"engines": {
|
||||
"node": ">=0.12.18"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/simple-icons"
|
||||
}
|
||||
},
|
||||
"node_modules/sonner": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/sonner/-/sonner-1.5.0.tgz",
|
||||
|
||||
+58
-56
@@ -11,73 +11,75 @@
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"@hookform/resolvers": "^3.9.0",
|
||||
"@radix-ui/react-accordion": "^1.2.0",
|
||||
"@radix-ui/react-alert-dialog": "^1.1.1",
|
||||
"@radix-ui/react-aspect-ratio": "^1.1.0",
|
||||
"@radix-ui/react-avatar": "^1.1.0",
|
||||
"@radix-ui/react-checkbox": "^1.1.1",
|
||||
"@radix-ui/react-collapsible": "^1.1.0",
|
||||
"@radix-ui/react-context-menu": "^2.2.1",
|
||||
"@radix-ui/react-dialog": "^1.1.2",
|
||||
"@radix-ui/react-dropdown-menu": "^2.1.1",
|
||||
"@radix-ui/react-hover-card": "^1.1.1",
|
||||
"@radix-ui/react-label": "^2.1.0",
|
||||
"@radix-ui/react-menubar": "^1.1.1",
|
||||
"@radix-ui/react-navigation-menu": "^1.2.0",
|
||||
"@radix-ui/react-popover": "^1.1.1",
|
||||
"@radix-ui/react-progress": "^1.1.0",
|
||||
"@radix-ui/react-radio-group": "^1.2.0",
|
||||
"@radix-ui/react-scroll-area": "^1.1.0",
|
||||
"@radix-ui/react-select": "^2.1.1",
|
||||
"@radix-ui/react-separator": "^1.1.0",
|
||||
"@radix-ui/react-slider": "^1.2.0",
|
||||
"@radix-ui/react-slot": "^1.1.0",
|
||||
"@radix-ui/react-switch": "^1.1.0",
|
||||
"@radix-ui/react-tabs": "^1.1.0",
|
||||
"@radix-ui/react-toast": "^1.2.1",
|
||||
"@radix-ui/react-toggle": "^1.1.0",
|
||||
"@radix-ui/react-toggle-group": "^1.1.0",
|
||||
"@radix-ui/react-tooltip": "^1.1.4",
|
||||
"@tanstack/react-query": "^5.56.2",
|
||||
"@hookform/resolvers": "^3.10.0",
|
||||
"@radix-ui/react-accordion": "^1.2.3",
|
||||
"@radix-ui/react-alert-dialog": "^1.1.6",
|
||||
"@radix-ui/react-aspect-ratio": "^1.1.2",
|
||||
"@radix-ui/react-avatar": "^1.1.3",
|
||||
"@radix-ui/react-checkbox": "^1.1.4",
|
||||
"@radix-ui/react-collapsible": "^1.1.3",
|
||||
"@radix-ui/react-context-menu": "^2.2.6",
|
||||
"@radix-ui/react-dialog": "^1.1.6",
|
||||
"@radix-ui/react-dropdown-menu": "^2.1.6",
|
||||
"@radix-ui/react-hover-card": "^1.1.6",
|
||||
"@radix-ui/react-label": "^2.1.2",
|
||||
"@radix-ui/react-menubar": "^1.1.6",
|
||||
"@radix-ui/react-navigation-menu": "^1.2.5",
|
||||
"@radix-ui/react-popover": "^1.1.6",
|
||||
"@radix-ui/react-progress": "^1.1.2",
|
||||
"@radix-ui/react-radio-group": "^1.2.3",
|
||||
"@radix-ui/react-scroll-area": "^1.2.3",
|
||||
"@radix-ui/react-select": "^2.1.6",
|
||||
"@radix-ui/react-separator": "^1.1.2",
|
||||
"@radix-ui/react-slider": "^1.2.3",
|
||||
"@radix-ui/react-slot": "^1.1.2",
|
||||
"@radix-ui/react-switch": "^1.1.3",
|
||||
"@radix-ui/react-tabs": "^1.1.3",
|
||||
"@radix-ui/react-toast": "^1.2.6",
|
||||
"@radix-ui/react-toggle": "^1.1.2",
|
||||
"@radix-ui/react-toggle-group": "^1.1.2",
|
||||
"@radix-ui/react-tooltip": "^1.1.8",
|
||||
"@rollup/rollup-darwin-x64": "^4.37.0",
|
||||
"@tanstack/react-query": "^5.69.0",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
"cmdk": "^1.0.0",
|
||||
"cmdk": "^1.1.1",
|
||||
"date-fns": "^3.6.0",
|
||||
"embla-carousel-react": "^8.3.0",
|
||||
"input-otp": "^1.2.4",
|
||||
"embla-carousel-react": "^8.5.2",
|
||||
"input-otp": "^1.4.2",
|
||||
"lucide-react": "^0.462.0",
|
||||
"next-themes": "^0.3.0",
|
||||
"react": "^18.3.1",
|
||||
"react-day-picker": "^8.10.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-hook-form": "^7.53.0",
|
||||
"react-resizable-panels": "^2.1.3",
|
||||
"react-router-dom": "^6.26.2",
|
||||
"recharts": "^2.12.7",
|
||||
"sonner": "^1.5.0",
|
||||
"tailwind-merge": "^2.5.2",
|
||||
"react-hook-form": "^7.54.2",
|
||||
"react-resizable-panels": "^2.1.7",
|
||||
"react-router-dom": "^6.30.0",
|
||||
"recharts": "^2.15.1",
|
||||
"simple-icons": "^14.11.1",
|
||||
"sonner": "^1.7.4",
|
||||
"tailwind-merge": "^2.6.0",
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
"vaul": "^0.9.3",
|
||||
"zod": "^3.23.8"
|
||||
"vaul": "^0.9.9",
|
||||
"zod": "^3.24.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.9.0",
|
||||
"@tailwindcss/typography": "^0.5.15",
|
||||
"@types/node": "^22.5.5",
|
||||
"@types/react": "^18.3.3",
|
||||
"@types/react-dom": "^18.3.0",
|
||||
"@vitejs/plugin-react-swc": "^3.5.0",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"eslint": "^9.9.0",
|
||||
"eslint-plugin-react-hooks": "^5.1.0-rc.0",
|
||||
"eslint-plugin-react-refresh": "^0.4.9",
|
||||
"globals": "^15.9.0",
|
||||
"@eslint/js": "^9.23.0",
|
||||
"@tailwindcss/typography": "^0.5.16",
|
||||
"@types/node": "^22.13.13",
|
||||
"@types/react": "^18.3.20",
|
||||
"@types/react-dom": "^18.3.5",
|
||||
"@vitejs/plugin-react-swc": "^3.8.1",
|
||||
"autoprefixer": "^10.4.21",
|
||||
"eslint": "^9.23.0",
|
||||
"eslint-plugin-react-hooks": "^5.2.0",
|
||||
"eslint-plugin-react-refresh": "^0.4.19",
|
||||
"globals": "^15.15.0",
|
||||
"component-tagger": "^1.1.7",
|
||||
"postcss": "^8.4.47",
|
||||
"tailwindcss": "^3.4.11",
|
||||
"typescript": "^5.5.3",
|
||||
"typescript-eslint": "^8.0.1",
|
||||
"vite": "^5.4.1"
|
||||
"postcss": "^8.5.3",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"typescript": "^5.8.2",
|
||||
"typescript-eslint": "^8.28.0",
|
||||
"vite": "^5.4.15"
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+69
-59
@@ -9,91 +9,94 @@ importers:
|
||||
.:
|
||||
dependencies:
|
||||
'@hookform/resolvers':
|
||||
specifier: ^3.9.0
|
||||
specifier: ^3.10.0
|
||||
version: 3.10.0([email protected]([email protected]))
|
||||
'@radix-ui/react-accordion':
|
||||
specifier: ^1.2.0
|
||||
specifier: ^1.2.3
|
||||
version: 1.2.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-alert-dialog':
|
||||
specifier: ^1.1.1
|
||||
specifier: ^1.1.6
|
||||
version: 1.1.6(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-aspect-ratio':
|
||||
specifier: ^1.1.0
|
||||
specifier: ^1.1.2
|
||||
version: 1.1.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-avatar':
|
||||
specifier: ^1.1.0
|
||||
specifier: ^1.1.3
|
||||
version: 1.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-checkbox':
|
||||
specifier: ^1.1.1
|
||||
specifier: ^1.1.4
|
||||
version: 1.1.4(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-collapsible':
|
||||
specifier: ^1.1.0
|
||||
specifier: ^1.1.3
|
||||
version: 1.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-context-menu':
|
||||
specifier: ^2.2.1
|
||||
specifier: ^2.2.6
|
||||
version: 2.2.6(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-dialog':
|
||||
specifier: ^1.1.2
|
||||
specifier: ^1.1.6
|
||||
version: 1.1.6(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-dropdown-menu':
|
||||
specifier: ^2.1.1
|
||||
specifier: ^2.1.6
|
||||
version: 2.1.6(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-hover-card':
|
||||
specifier: ^1.1.1
|
||||
specifier: ^1.1.6
|
||||
version: 1.1.6(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-label':
|
||||
specifier: ^2.1.0
|
||||
specifier: ^2.1.2
|
||||
version: 2.1.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-menubar':
|
||||
specifier: ^1.1.1
|
||||
specifier: ^1.1.6
|
||||
version: 1.1.6(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-navigation-menu':
|
||||
specifier: ^1.2.0
|
||||
specifier: ^1.2.5
|
||||
version: 1.2.5(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-popover':
|
||||
specifier: ^1.1.1
|
||||
specifier: ^1.1.6
|
||||
version: 1.1.6(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-progress':
|
||||
specifier: ^1.1.0
|
||||
specifier: ^1.1.2
|
||||
version: 1.1.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-radio-group':
|
||||
specifier: ^1.2.0
|
||||
specifier: ^1.2.3
|
||||
version: 1.2.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-scroll-area':
|
||||
specifier: ^1.1.0
|
||||
specifier: ^1.2.3
|
||||
version: 1.2.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-select':
|
||||
specifier: ^2.1.1
|
||||
specifier: ^2.1.6
|
||||
version: 2.1.6(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-separator':
|
||||
specifier: ^1.1.0
|
||||
specifier: ^1.1.2
|
||||
version: 1.1.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-slider':
|
||||
specifier: ^1.2.0
|
||||
specifier: ^1.2.3
|
||||
version: 1.2.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-slot':
|
||||
specifier: ^1.1.0
|
||||
specifier: ^1.1.2
|
||||
version: 1.1.2(@types/[email protected])([email protected])
|
||||
'@radix-ui/react-switch':
|
||||
specifier: ^1.1.0
|
||||
specifier: ^1.1.3
|
||||
version: 1.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-tabs':
|
||||
specifier: ^1.1.0
|
||||
specifier: ^1.1.3
|
||||
version: 1.1.3(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-toast':
|
||||
specifier: ^1.2.1
|
||||
specifier: ^1.2.6
|
||||
version: 1.2.6(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-toggle':
|
||||
specifier: ^1.1.0
|
||||
specifier: ^1.1.2
|
||||
version: 1.1.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-toggle-group':
|
||||
specifier: ^1.1.0
|
||||
specifier: ^1.1.2
|
||||
version: 1.1.2(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@radix-ui/react-tooltip':
|
||||
specifier: ^1.1.4
|
||||
specifier: ^1.1.8
|
||||
version: 1.1.8(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
'@rollup/rollup-darwin-x64':
|
||||
specifier: ^4.37.0
|
||||
version: 4.37.0
|
||||
'@tanstack/react-query':
|
||||
specifier: ^5.56.2
|
||||
specifier: ^5.69.0
|
||||
version: 5.69.0([email protected])
|
||||
class-variance-authority:
|
||||
specifier: ^0.7.1
|
||||
@@ -102,16 +105,16 @@ importers:
|
||||
specifier: ^2.1.1
|
||||
version: 2.1.1
|
||||
cmdk:
|
||||
specifier: ^1.0.0
|
||||
specifier: ^1.1.1
|
||||
version: 1.1.1(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
date-fns:
|
||||
specifier: ^3.6.0
|
||||
version: 3.6.0
|
||||
embla-carousel-react:
|
||||
specifier: ^8.3.0
|
||||
specifier: ^8.5.2
|
||||
version: 8.5.2([email protected])
|
||||
input-otp:
|
||||
specifier: ^1.2.4
|
||||
specifier: ^1.4.2
|
||||
version: 1.4.2([email protected]([email protected]))([email protected])
|
||||
lucide-react:
|
||||
specifier: ^0.462.0
|
||||
@@ -129,83 +132,86 @@ importers:
|
||||
specifier: ^18.3.1
|
||||
version: 18.3.1([email protected])
|
||||
react-hook-form:
|
||||
specifier: ^7.53.0
|
||||
specifier: ^7.54.2
|
||||
version: 7.54.2([email protected])
|
||||
react-resizable-panels:
|
||||
specifier: ^2.1.3
|
||||
specifier: ^2.1.7
|
||||
version: 2.1.7([email protected]([email protected]))([email protected])
|
||||
react-router-dom:
|
||||
specifier: ^6.26.2
|
||||
specifier: ^6.30.0
|
||||
version: 6.30.0([email protected]([email protected]))([email protected])
|
||||
recharts:
|
||||
specifier: ^2.12.7
|
||||
specifier: ^2.15.1
|
||||
version: 2.15.1([email protected]([email protected]))([email protected])
|
||||
simple-icons:
|
||||
specifier: ^14.11.1
|
||||
version: 14.11.1
|
||||
sonner:
|
||||
specifier: ^1.5.0
|
||||
specifier: ^1.7.4
|
||||
version: 1.7.4([email protected]([email protected]))([email protected])
|
||||
tailwind-merge:
|
||||
specifier: ^2.5.2
|
||||
specifier: ^2.6.0
|
||||
version: 2.6.0
|
||||
tailwindcss-animate:
|
||||
specifier: ^1.0.7
|
||||
version: 1.0.7([email protected])
|
||||
vaul:
|
||||
specifier: ^0.9.3
|
||||
specifier: ^0.9.9
|
||||
version: 0.9.9(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
|
||||
zod:
|
||||
specifier: ^3.23.8
|
||||
specifier: ^3.24.2
|
||||
version: 3.24.2
|
||||
devDependencies:
|
||||
'@eslint/js':
|
||||
specifier: ^9.9.0
|
||||
specifier: ^9.23.0
|
||||
version: 9.23.0
|
||||
'@tailwindcss/typography':
|
||||
specifier: ^0.5.15
|
||||
specifier: ^0.5.16
|
||||
version: 0.5.16([email protected])
|
||||
'@types/node':
|
||||
specifier: ^22.5.5
|
||||
specifier: ^22.13.13
|
||||
version: 22.13.13
|
||||
'@types/react':
|
||||
specifier: ^18.3.3
|
||||
specifier: ^18.3.20
|
||||
version: 18.3.20
|
||||
'@types/react-dom':
|
||||
specifier: ^18.3.0
|
||||
specifier: ^18.3.5
|
||||
version: 18.3.5(@types/[email protected])
|
||||
'@vitejs/plugin-react-swc':
|
||||
specifier: ^3.5.0
|
||||
specifier: ^3.8.1
|
||||
version: 3.8.1([email protected](@types/[email protected]))
|
||||
autoprefixer:
|
||||
specifier: ^10.4.20
|
||||
specifier: ^10.4.21
|
||||
version: 10.4.21([email protected])
|
||||
eslint:
|
||||
specifier: ^9.9.0
|
||||
specifier: ^9.23.0
|
||||
version: 9.23.0([email protected])
|
||||
eslint-plugin-react-hooks:
|
||||
specifier: ^5.1.0-rc.0
|
||||
specifier: ^5.2.0
|
||||
version: 5.2.0([email protected]([email protected]))
|
||||
eslint-plugin-react-refresh:
|
||||
specifier: ^0.4.9
|
||||
specifier: ^0.4.19
|
||||
version: 0.4.19([email protected]([email protected]))
|
||||
globals:
|
||||
specifier: ^15.9.0
|
||||
specifier: ^15.15.0
|
||||
version: 15.15.0
|
||||
component-tagger:
|
||||
specifier: ^1.1.7
|
||||
version: 1.1.7([email protected](@types/[email protected]))
|
||||
postcss:
|
||||
specifier: ^8.4.47
|
||||
specifier: ^8.5.3
|
||||
version: 8.5.3
|
||||
tailwindcss:
|
||||
specifier: ^3.4.11
|
||||
specifier: ^3.4.17
|
||||
version: 3.4.17
|
||||
typescript:
|
||||
specifier: ^5.5.3
|
||||
specifier: ^5.8.2
|
||||
version: 5.8.2
|
||||
typescript-eslint:
|
||||
specifier: ^8.0.1
|
||||
specifier: ^8.28.0
|
||||
version: 8.28.0([email protected]([email protected]))([email protected])
|
||||
vite:
|
||||
specifier: ^5.4.1
|
||||
specifier: ^5.4.15
|
||||
version: 5.4.15(@types/[email protected])
|
||||
|
||||
packages:
|
||||
@@ -1267,7 +1273,6 @@ packages:
|
||||
|
||||
'@rollup/[email protected]':
|
||||
resolution: {integrity: sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@rollup/[email protected]':
|
||||
@@ -2375,6 +2380,10 @@ packages:
|
||||
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
|
||||
engines: {node: '>=14'}
|
||||
|
||||
[email protected]:
|
||||
resolution: {integrity: sha512-x4YmyosK22r+m+VK2ilRlrhJNtuIOgCHvVhUglJAvGIa18PlmQrGDIYGqDzYrqmgWB3yKz8Z1ZMSx/kZQSbLow==}
|
||||
engines: {node: '>=0.12.18'}
|
||||
|
||||
[email protected]:
|
||||
resolution: {integrity: sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==}
|
||||
peerDependencies:
|
||||
@@ -3529,8 +3538,7 @@ snapshots:
|
||||
'@rollup/[email protected]':
|
||||
optional: true
|
||||
|
||||
'@rollup/[email protected]':
|
||||
optional: true
|
||||
'@rollup/[email protected]': {}
|
||||
|
||||
'@rollup/[email protected]':
|
||||
optional: true
|
||||
@@ -4624,6 +4632,8 @@ snapshots:
|
||||
|
||||
[email protected]: {}
|
||||
|
||||
[email protected]: {}
|
||||
|
||||
[email protected]([email protected]([email protected]))([email protected]):
|
||||
dependencies:
|
||||
react: 18.3.1
|
||||
|
||||
+14
-11
@@ -1,4 +1,4 @@
|
||||
import { ArrowUpRight, Instagram, Facebook, Twitter, Linkedin } from 'lucide-react';
|
||||
import { ArrowUpRight, Instagram, Facebook, Twitter, Github, MessageSquare } from 'lucide-react';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
const Footer = () => {
|
||||
@@ -11,13 +11,13 @@ const Footer = () => {
|
||||
<div className="space-y-3 mb-8">
|
||||
<p className="text-primary/80">
|
||||
Hanzo Industries, Inc.<br/>
|
||||
500 Market Street, Suite 800<br/>
|
||||
San Francisco, CA 94105<br/>
|
||||
1828 Golden Gate Ave<br/>
|
||||
San Francisco, CA 94115<br/>
|
||||
United States
|
||||
</p>
|
||||
<p className="text-primary/80">
|
||||
hello.verywell@gmail.com<br/>
|
||||
(+65) 13370-9976
|
||||
hi@hanzo.agency<br/>
|
||||
+1 415 3732496
|
||||
</p>
|
||||
</div>
|
||||
<a href="https://calendar.app.google/z1YsZQrqR4s6jQqD8" className="lets-talk-btn bg-gray-700 hover:bg-gray-800 text-white font-medium rounded-full px-6 py-2 transition-all duration-300 inline-flex items-center">
|
||||
@@ -26,18 +26,21 @@ const Footer = () => {
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-4 gap-4">
|
||||
<a href="#" className="geometric-circle border border-black/20 aspect-square flex items-center justify-center hover:bg-accent/20 transition-colors">
|
||||
<div className="grid grid-cols-5 gap-4">
|
||||
<a href="https://instagram.com/hanzoai" target="_blank" rel="noopener noreferrer" className="geometric-circle border border-black/20 aspect-square flex items-center justify-center hover:bg-accent/20 transition-colors">
|
||||
<Instagram size={24} />
|
||||
</a>
|
||||
<a href="#" className="geometric-circle border border-black/20 aspect-square flex items-center justify-center hover:bg-accent/20 transition-colors">
|
||||
<a href="https://facebook.com/hanzo-inc" target="_blank" rel="noopener noreferrer" className="geometric-circle border border-black/20 aspect-square flex items-center justify-center hover:bg-accent/20 transition-colors">
|
||||
<Facebook size={24} />
|
||||
</a>
|
||||
<a href="#" className="geometric-circle border border-black/20 aspect-square flex items-center justify-center hover:bg-accent/20 transition-colors">
|
||||
<a href="https://x.com/hanzoai" target="_blank" rel="noopener noreferrer" className="geometric-circle border border-black/20 aspect-square flex items-center justify-center hover:bg-accent/20 transition-colors">
|
||||
<Twitter size={24} />
|
||||
</a>
|
||||
<a href="#" className="geometric-circle border border-black/20 aspect-square flex items-center justify-center hover:bg-accent/20 transition-colors">
|
||||
<Linkedin size={24} />
|
||||
<a href="https://github.com/hanzoai" target="_blank" rel="noopener noreferrer" className="geometric-circle border border-black/20 aspect-square flex items-center justify-center hover:bg-accent/20 transition-colors">
|
||||
<Github size={24} />
|
||||
</a>
|
||||
<a href="https://discord.com/invite/Xxxxxxx" target="_blank" rel="noopener noreferrer" className="geometric-circle border border-black/20 aspect-square flex items-center justify-center hover:bg-accent/20 transition-colors">
|
||||
<MessageSquare size={24} />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<a
|
||||
href="https://calendly.com/your-link"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="text-primary hover:text-primary-dark"
|
||||
>
|
||||
Let's talk
|
||||
</a>
|
||||
@@ -0,0 +1,105 @@
|
||||
import React from 'react';
|
||||
import { Globe, Linkedin, Instagram, Facebook, Twitter, Youtube, MessageCircle, Hash } from 'lucide-react';
|
||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
|
||||
|
||||
export interface SocialLink {
|
||||
platform: string;
|
||||
url: string;
|
||||
followers?: number;
|
||||
}
|
||||
|
||||
interface SocialLinksProps {
|
||||
links: SocialLink[];
|
||||
className?: string;
|
||||
showLabels?: boolean;
|
||||
totalFollowers?: number;
|
||||
}
|
||||
|
||||
const SocialLinks: React.FC<SocialLinksProps> = ({
|
||||
links,
|
||||
className = '',
|
||||
showLabels = false,
|
||||
totalFollowers
|
||||
}) => {
|
||||
// Debug
|
||||
console.log('SocialLinks component rendering with:', { links, totalFollowers, showLabels });
|
||||
|
||||
// Function to render the appropriate icon based on platform
|
||||
const renderIcon = (platform: string) => {
|
||||
const iconSize = 20;
|
||||
|
||||
switch (platform.toLowerCase()) {
|
||||
case 'website':
|
||||
return <Globe size={iconSize} />;
|
||||
case 'linkedin':
|
||||
return <Linkedin size={iconSize} />;
|
||||
case 'instagram':
|
||||
return <Instagram size={iconSize} />;
|
||||
case 'facebook':
|
||||
return <Facebook size={iconSize} />;
|
||||
case 'twitter':
|
||||
return <Twitter size={iconSize} />;
|
||||
case 'youtube':
|
||||
return <Youtube size={iconSize} />;
|
||||
case 'tiktok':
|
||||
return <Hash size={iconSize} />; // Using Hash as a TikTok alternative icon
|
||||
case 'telegram':
|
||||
return <MessageCircle size={iconSize} />;
|
||||
case 'discord':
|
||||
return <Hash size={iconSize} />; // Using Hash as a Discord alternative icon
|
||||
case 'reddit':
|
||||
return <Hash size={iconSize} />; // Using Hash as a Reddit alternative icon
|
||||
default:
|
||||
return <Globe size={iconSize} />;
|
||||
}
|
||||
};
|
||||
|
||||
// Format follower count to be more readable
|
||||
const formatFollowers = (count: number): string => {
|
||||
if (count >= 1000000) {
|
||||
return `${(count / 1000000).toFixed(1)}M`;
|
||||
} else if (count >= 1000) {
|
||||
return `${(count / 1000).toFixed(1)}K`;
|
||||
}
|
||||
return count.toString();
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={`flex flex-col space-y-4 ${className}`}>
|
||||
{totalFollowers && (
|
||||
<div className="bg-accent/10 p-4 rounded-xl mb-4">
|
||||
<div className="text-3xl font-bold text-accent mb-1">{formatFollowers(totalFollowers)}+</div>
|
||||
<div className="text-white/70 text-sm">Total followers across platforms</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="flex flex-wrap gap-3">
|
||||
<TooltipProvider>
|
||||
{links.map((link, index) => (
|
||||
<Tooltip key={index}>
|
||||
<TooltipTrigger asChild>
|
||||
<a
|
||||
href={link.url}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="flex items-center justify-center p-3 bg-white/10 hover:bg-accent/20 rounded-lg transition-colors"
|
||||
aria-label={link.platform}
|
||||
>
|
||||
{renderIcon(link.platform)}
|
||||
{showLabels && (
|
||||
<span className="ml-2 font-medium">{link.platform}</span>
|
||||
)}
|
||||
</a>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>
|
||||
<p>{link.platform}</p>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
))}
|
||||
</TooltipProvider>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default SocialLinks;
|
||||
@@ -1,14 +0,0 @@
|
||||
|
||||
const CTASection = () => {
|
||||
return (
|
||||
<div className="mt-16 text-center reveal-slide-up" id="book-call">
|
||||
<h3 className="text-2xl md:text-3xl font-bold mb-6">Ready to achieve similar results?</h3>
|
||||
<p className="text-primary/80 max-w-2xl mx-auto mb-8">
|
||||
Contact Hanzo today to leverage AI-driven marketing solutions and unlock massive user growth for your platform or event.
|
||||
</p>
|
||||
<a href="#book-call" className="btn-primary px-8 py-4">Book a Strategy Call</a>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default CTASection;
|
||||
@@ -1,108 +0,0 @@
|
||||
|
||||
import { Target, TrendingUp, Activity, CheckCircle } from 'lucide-react';
|
||||
|
||||
const CaseStudyContent = () => {
|
||||
return (
|
||||
<div className="prose prose-lg max-w-none mb-10 reveal">
|
||||
<div className="flex items-start mb-6">
|
||||
<div className="w-10 h-10 bg-accent/10 rounded-full flex items-center justify-center text-accent shrink-0 mt-1 mr-4">
|
||||
<Target size={20} />
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="text-2xl md:text-3xl font-bold mt-0 mb-4">Introduction</h2>
|
||||
<p className="text-primary/80">
|
||||
At the peak of the COVID-19 pandemic, Triller, an AI-driven social music app,
|
||||
partnered with Hanzo in its first-ever paid marketing campaign. The objective
|
||||
was to rapidly expand Triller's global user base and increase platform engagement.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex items-start mb-6">
|
||||
<div className="w-10 h-10 bg-accent/10 rounded-full flex items-center justify-center text-accent shrink-0 mt-1 mr-4">
|
||||
<TrendingUp size={20} />
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="text-2xl md:text-3xl font-bold mt-0 mb-4">Key Objectives</h2>
|
||||
<ul className="space-y-3 pl-0">
|
||||
<li className="flex items-start">
|
||||
<CheckCircle size={20} className="text-accent shrink-0 mt-1 mr-3" />
|
||||
<span><strong>Acquire new users:</strong> Target new app downloads during the event and convert participants into active users.</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<CheckCircle size={20} className="text-accent shrink-0 mt-1 mr-3" />
|
||||
<span><strong>Drive Contest Participation:</strong> Increase user participation in app contests and build user-generated content.</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<CheckCircle size={20} className="text-accent shrink-0 mt-1 mr-3" />
|
||||
<span><strong>Maximize Viewership:</strong> Generate record-breaking viewership for performances and contest entries.</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<CheckCircle size={20} className="text-accent shrink-0 mt-1 mr-3" />
|
||||
<span><strong>Enhance Long-Term Retention:</strong> Create conversion funnels that drive sustained user activity beyond the festival.</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex items-start mb-6">
|
||||
<div className="w-10 h-10 bg-accent/10 rounded-full flex items-center justify-center text-accent shrink-0 mt-1 mr-4">
|
||||
<Activity size={20} />
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="text-2xl md:text-3xl font-bold mt-0 mb-4">Hanzo's Strategic Approach</h2>
|
||||
|
||||
<h3 className="text-xl font-bold mt-6 mb-3">AI-Driven Marketing Stack Development</h3>
|
||||
<p className="text-primary/80">
|
||||
Hanzo developed AI-powered marketing campaigns to maximize app installs,
|
||||
manage ad spend efficiently, and optimize audience targeting. These ads
|
||||
adapted in real-time, ensuring the highest return on ad spend (ROAS).
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-bold mt-6 mb-3">Targeted Digital Campaigns</h3>
|
||||
<p className="text-primary/80">
|
||||
Digital ads were tailored for platforms like Instagram, Facebook, and Google.
|
||||
Key demographics were targeted, including hip-hop and performance artists,
|
||||
TikTok power users, and music fans.
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-bold mt-6 mb-3">Creative Direction and Asset Production</h3>
|
||||
<p className="text-primary/80">
|
||||
Hanzo's creative team produced visually appealing assets such as social media banners
|
||||
and video announcements. These promoted exclusive access to TrillerFest and generated
|
||||
excitement around the event.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex items-start">
|
||||
<div className="w-10 h-10 bg-accent/10 rounded-full flex items-center justify-center text-accent shrink-0 mt-1 mr-4">
|
||||
<CheckCircle size={20} />
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="text-2xl md:text-3xl font-bold mt-0 mb-4">Key Results</h2>
|
||||
<ul className="space-y-3 pl-0">
|
||||
<li className="flex items-start">
|
||||
<CheckCircle size={20} className="text-accent shrink-0 mt-1 mr-3" />
|
||||
<span>Reached 169 million people with an ad spend of less than $60,000</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<CheckCircle size={20} className="text-accent shrink-0 mt-1 mr-3" />
|
||||
<span>Identified India as the top growth market, leading to Triller becoming the number one app on Apple and Android in India</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<CheckCircle size={20} className="text-accent shrink-0 mt-1 mr-3" />
|
||||
<span>Gained 100,000 YouTube subscribers in just five days</span>
|
||||
</li>
|
||||
<li className="flex items-start">
|
||||
<CheckCircle size={20} className="text-accent shrink-0 mt-1 mr-3" />
|
||||
<span>Monthly active users (MAU) grew from around 50 million to over 82 million</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default CaseStudyContent;
|
||||
@@ -1,48 +0,0 @@
|
||||
|
||||
import { ArrowLeft } from 'lucide-react';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
const HeroSection = () => {
|
||||
return (
|
||||
<div className="bg-primary text-white py-20 md:py-32 relative overflow-hidden">
|
||||
<div className="absolute inset-0 opacity-10">
|
||||
<img src="/img/6f11fa66-23b1-4967-aab8-1fa841066ef6.png" alt="TrillerFest Background" className="absolute inset-0 w-full h-full object-cover opacity-20" />
|
||||
<div className="absolute inset-0 bg-gradient-to-r from-black via-black/90 to-black/80"></div>
|
||||
</div>
|
||||
<div className="container-custom relative z-10">
|
||||
<Link to="/" className="inline-flex items-center text-white/80 hover:text-white mb-8 transition-colors">
|
||||
<ArrowLeft size={20} className="mr-2" />
|
||||
Back to Home
|
||||
</Link>
|
||||
|
||||
<div className="max-w-4xl reveal">
|
||||
<div className="inline-block px-4 py-1 rounded-full text-accent-light text-sm font-medium mb-6 bg-neutral-50">
|
||||
Case Study
|
||||
</div>
|
||||
<h1 className="text-4xl md:text-5xl lg:text-6xl font-bold mb-6">
|
||||
TrillerFest: Largest Virtual Music Festival in History
|
||||
</h1>
|
||||
<p className="text-xl text-white/80 mb-8">
|
||||
How Hanzo helped Triller reach 169 million users and become the #1 app in India with less than $60,000 in ad spend
|
||||
</p>
|
||||
<div className="flex flex-wrap gap-4">
|
||||
<span className="inline-flex items-center px-3 py-1 bg-white/10 rounded-full text-sm">
|
||||
<span className="w-2 h-2 bg-accent rounded-full mr-2"></span>
|
||||
Music & Social Media
|
||||
</span>
|
||||
<span className="inline-flex items-center px-3 py-1 bg-white/10 rounded-full text-sm">
|
||||
<span className="w-2 h-2 bg-accent rounded-full mr-2"></span>
|
||||
AI-Driven Marketing
|
||||
</span>
|
||||
<span className="inline-flex items-center px-3 py-1 bg-white/10 rounded-full text-sm">
|
||||
<span className="w-2 h-2 bg-accent rounded-full mr-2"></span>
|
||||
Viral Growth
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default HeroSection;
|
||||
@@ -1,70 +0,0 @@
|
||||
|
||||
import { Users, DollarSign, Youtube, Activity } from 'lucide-react';
|
||||
|
||||
const KeyMetrics = () => {
|
||||
return (
|
||||
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-6 mb-16 reveal-slide-up">
|
||||
<div className="bg-white p-8 rounded-2xl shadow-sm border border-gray-100 transition-transform hover:scale-[1.02] hover:shadow-md">
|
||||
<div className="flex items-center mb-4">
|
||||
<div className="w-12 h-12 bg-accent/10 rounded-full flex items-center justify-center text-accent mr-4">
|
||||
<Users size={24} />
|
||||
</div>
|
||||
<div>
|
||||
<div className="text-3xl font-bold text-primary mb-1">169M</div>
|
||||
<div className="text-primary/70 text-sm">Users Reached</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="h-2 w-full bg-beige-100 rounded-full overflow-hidden">
|
||||
<div className="h-full bg-accent rounded-full" style={{ width: '95%' }}></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="bg-white p-8 rounded-2xl shadow-sm border border-gray-100 transition-transform hover:scale-[1.02] hover:shadow-md">
|
||||
<div className="flex items-center mb-4">
|
||||
<div className="w-12 h-12 bg-accent/10 rounded-full flex items-center justify-center text-accent mr-4">
|
||||
<DollarSign size={24} />
|
||||
</div>
|
||||
<div>
|
||||
<div className="text-3xl font-bold text-primary mb-1">$60K</div>
|
||||
<div className="text-primary/70 text-sm">Ad Spend</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="h-2 w-full bg-beige-100 rounded-full overflow-hidden">
|
||||
<div className="h-full bg-accent rounded-full" style={{ width: '40%' }}></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="bg-white p-8 rounded-2xl shadow-sm border border-gray-100 transition-transform hover:scale-[1.02] hover:shadow-md">
|
||||
<div className="flex items-center mb-4">
|
||||
<div className="w-12 h-12 bg-accent/10 rounded-full flex items-center justify-center text-accent mr-4">
|
||||
<Youtube size={24} />
|
||||
</div>
|
||||
<div>
|
||||
<div className="text-3xl font-bold text-primary mb-1">100K</div>
|
||||
<div className="text-primary/70 text-sm">YouTube Subs in 5 Days</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="h-2 w-full bg-beige-100 rounded-full overflow-hidden">
|
||||
<div className="h-full bg-accent rounded-full" style={{ width: '65%' }}></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="bg-white p-8 rounded-2xl shadow-sm border border-gray-100 transition-transform hover:scale-[1.02] hover:shadow-md">
|
||||
<div className="flex items-center mb-4">
|
||||
<div className="w-12 h-12 bg-accent/10 rounded-full flex items-center justify-center text-accent mr-4">
|
||||
<Activity size={24} />
|
||||
</div>
|
||||
<div>
|
||||
<div className="text-3xl font-bold text-primary mb-1">82M</div>
|
||||
<div className="text-primary/70 text-sm">Monthly Active Users</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="h-2 w-full bg-beige-100 rounded-full overflow-hidden">
|
||||
<div className="h-full bg-accent rounded-full" style={{ width: '80%' }}></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default KeyMetrics;
|
||||
@@ -1,48 +0,0 @@
|
||||
|
||||
import { ChevronRight } from 'lucide-react';
|
||||
|
||||
const SidebarContent = () => {
|
||||
return (
|
||||
<div className="sticky top-8">
|
||||
<div className="bg-white rounded-2xl shadow-sm border border-gray-100 p-6 mb-6 reveal">
|
||||
<h3 className="text-lg font-bold mb-4">Table of Contents</h3>
|
||||
<ul className="space-y-2">
|
||||
<li>
|
||||
<a href="#introduction" className="flex items-center text-primary/80 hover:text-accent transition-colors">
|
||||
<ChevronRight size={16} className="mr-2" />
|
||||
Introduction
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#key-objectives" className="flex items-center text-primary/80 hover:text-accent transition-colors">
|
||||
<ChevronRight size={16} className="mr-2" />
|
||||
Key Objectives
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#strategic-approach" className="flex items-center text-primary/80 hover:text-accent transition-colors">
|
||||
<ChevronRight size={16} className="mr-2" />
|
||||
Strategic Approach
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#key-results" className="flex items-center text-primary/80 hover:text-accent transition-colors">
|
||||
<ChevronRight size={16} className="mr-2" />
|
||||
Key Results
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div className="bg-accent/10 rounded-2xl p-6 reveal">
|
||||
<h3 className="text-lg font-bold mb-4">Want similar results?</h3>
|
||||
<p className="text-primary/80 mb-4">
|
||||
Learn how Hanzo can help your business achieve unprecedented growth with AI-driven marketing strategies.
|
||||
</p>
|
||||
<a href="#book-call" className="btn-primary w-full">Book a Call Today</a>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default SidebarContent;
|
||||
@@ -1,22 +0,0 @@
|
||||
|
||||
const TestimonialSection = () => {
|
||||
return (
|
||||
<div className="my-16 bg-beige-100 rounded-2xl p-10 relative overflow-hidden reveal">
|
||||
<div className="absolute top-0 right-0 text-[150px] leading-none font-bold text-beige-200 -mt-10 -mr-5">"</div>
|
||||
<div className="relative z-10 max-w-3xl mx-auto text-center">
|
||||
<p className="text-xl md:text-2xl italic text-primary mb-6">
|
||||
"TrillerFest transformed our user acquisition strategy. Hanzo's AI-driven approach helped us reach millions of users at a fraction of what we would have spent with traditional marketing."
|
||||
</p>
|
||||
<div className="flex items-center justify-center">
|
||||
<div className="w-12 h-12 bg-white rounded-full mr-4"></div>
|
||||
<div className="text-left">
|
||||
<div className="font-bold">Mike Lu</div>
|
||||
<div className="text-primary/70">CEO at Triller</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default TestimonialSection;
|
||||
@@ -0,0 +1,79 @@
|
||||
import { SocialLink } from '@/components/SocialLinks';
|
||||
|
||||
interface CompanySocialData {
|
||||
companyName: string;
|
||||
links: SocialLink[];
|
||||
totalFollowers?: number;
|
||||
}
|
||||
|
||||
export const socialLinksData: Record<string, CompanySocialData> = {
|
||||
'cover-build': {
|
||||
companyName: 'Cover Build',
|
||||
links: [
|
||||
{ platform: 'Website', url: 'https://www.cover.build' },
|
||||
{ platform: 'LinkedIn', url: 'https://www.linkedin.com/company/coverbuild' },
|
||||
{ platform: 'Instagram', url: 'https://www.instagram.com/coverbuild' },
|
||||
{ platform: 'Facebook', url: 'https://www.facebook.com/coverbuild' },
|
||||
{ platform: 'Twitter', url: 'https://twitter.com/coverbuild' }
|
||||
]
|
||||
},
|
||||
'bellabeat': {
|
||||
companyName: 'Bellabeat',
|
||||
links: [
|
||||
{ platform: 'Website', url: 'https://www.bellabeat.com' },
|
||||
{ platform: 'LinkedIn', url: 'https://www.linkedin.com/company/bellabeat' },
|
||||
{ platform: 'Instagram', url: 'https://www.instagram.com/bellabeat' },
|
||||
{ platform: 'Facebook', url: 'https://www.facebook.com/bellabeat' },
|
||||
{ platform: 'Twitter', url: 'https://twitter.com/bellabeat' },
|
||||
{ platform: 'Youtube', url: 'https://www.youtube.com/channel/UCX8u0w3VwZQk0jG5vH1V9zQ' }
|
||||
],
|
||||
totalFollowers: 114000
|
||||
},
|
||||
'trillerfest': {
|
||||
companyName: 'Triller',
|
||||
links: [
|
||||
{ platform: 'Website', url: 'https://www.triller.co' },
|
||||
{ platform: 'LinkedIn', url: 'https://www.linkedin.com/company/triller' },
|
||||
{ platform: 'Instagram', url: 'https://www.instagram.com/triller' },
|
||||
{ platform: 'Facebook', url: 'https://www.facebook.com/triller' },
|
||||
{ platform: 'Twitter', url: 'https://twitter.com/triller' },
|
||||
{ platform: 'Youtube', url: 'https://www.youtube.com/channel/UCX8u0w3VwZQk0jG5vH1V9zQ' },
|
||||
{ platform: 'TikTok', url: 'https://www.tiktok.com/@triller' }
|
||||
],
|
||||
totalFollowers: 7204000
|
||||
},
|
||||
'unikoin-gold': {
|
||||
companyName: 'Unikoin Gold',
|
||||
links: [
|
||||
{ platform: 'Website', url: 'https://www.unikoingold.com' },
|
||||
{ platform: 'LinkedIn', url: 'https://www.linkedin.com/company/unikoingold' },
|
||||
{ platform: 'Twitter', url: 'https://twitter.com/unikoingold' },
|
||||
{ platform: 'Facebook', url: 'https://www.facebook.com/unikoingold' }
|
||||
]
|
||||
},
|
||||
'casper-blockchain': {
|
||||
companyName: 'Casper Blockchain',
|
||||
links: [
|
||||
{ platform: 'Website', url: 'https://www.casperlabs.io' },
|
||||
{ platform: 'LinkedIn', url: 'https://www.linkedin.com/company/casperlabs' },
|
||||
{ platform: 'Twitter', url: 'https://twitter.com/casper_network' },
|
||||
{ platform: 'Telegram', url: 'https://t.me/casperlabs' },
|
||||
{ platform: 'Discord', url: 'https://discord.gg/casper' },
|
||||
{ platform: 'Reddit', url: 'https://www.reddit.com/r/CasperNetwork' }
|
||||
],
|
||||
totalFollowers: 153000
|
||||
},
|
||||
// Myle Tap social links removed as requested
|
||||
|
||||
'damon': {
|
||||
companyName: 'Damon Motorcycles',
|
||||
links: [
|
||||
{ platform: 'Website', url: 'https://www.damon.com' },
|
||||
{ platform: 'LinkedIn', url: 'https://www.linkedin.com/company/damonmotorcycles' },
|
||||
{ platform: 'Instagram', url: 'https://www.instagram.com/damonmotorcycles' },
|
||||
{ platform: 'Facebook', url: 'https://www.facebook.com/damonmotorcycles' },
|
||||
{ platform: 'Twitter', url: 'https://twitter.com/damonmotorcycles' },
|
||||
{ platform: 'Youtube', url: 'https://www.youtube.com/channel/UCX8u0w3VwZQk0jG5vH1V9zQ' }
|
||||
]
|
||||
}
|
||||
};
|
||||
@@ -1,196 +0,0 @@
|
||||
import React, { useEffect } from 'react';
|
||||
import Navbar from '@/components/Navbar';
|
||||
import Footer from '@/components/Footer';
|
||||
import ScrollReveal from '@/utils/ScrollReveal';
|
||||
import GlobalMuteButton from '@/components/GlobalMuteButton';
|
||||
import VideoMuteButton from '@/components/VideoMuteButton';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { ArrowLeft, ArrowUpRight } from 'lucide-react';
|
||||
|
||||
const CaseStudyBellabeat = () => {
|
||||
useEffect(() => {
|
||||
// Set the body to dark theme
|
||||
document.body.classList.add('dark');
|
||||
|
||||
return () => {
|
||||
document.body.classList.remove('dark');
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<ScrollReveal>
|
||||
<div className="min-h-screen flex flex-col bg-black text-white">
|
||||
<Navbar />
|
||||
<GlobalMuteButton />
|
||||
|
||||
<main className="flex-grow pt-36">
|
||||
<div className="container-custom">
|
||||
<Link to="/case-studies" className="inline-flex items-center text-white/70 hover:text-white mb-8 transition-colors">
|
||||
<ArrowLeft className="mr-2 h-4 w-4" />
|
||||
Back to all projects
|
||||
</Link>
|
||||
|
||||
<h1 className="text-4xl md:text-6xl font-bold mb-6">Bellabeat</h1>
|
||||
<p className="text-xl md:text-2xl text-white/80 mb-12">WOMEN'S HEALTH WEARABLE TECH PLATFORM</p>
|
||||
<div className="inline-block px-4 py-1 rounded-full text-accent-light text-sm font-medium mb-6 bg-neutral-50">
|
||||
Success Story
|
||||
</div>
|
||||
|
||||
{/* Hero Image */}
|
||||
<div className="w-full aspect-video bg-gray-800 mb-16 overflow-hidden rounded-lg relative">
|
||||
<iframe
|
||||
className="w-full h-full object-cover"
|
||||
src="https://www.youtube.com/embed/rsda3VIuRxM?autoplay=1&mute=1&loop=1&playlist=rsda3VIuRxM&controls=1&showinfo=0&rel=0&modestbranding=1&iv_load_policy=3"
|
||||
title="Bellabeat - Women's Health Wearable Tech"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
frameBorder="0"
|
||||
></iframe>
|
||||
<VideoMuteButton videoId="bellabeat-hero" />
|
||||
</div>
|
||||
|
||||
{/* Overview Section */}
|
||||
<div className="grid md:grid-cols-2 gap-12 mb-16">
|
||||
<div>
|
||||
<h2 className="text-2xl font-bold mb-4">Overview</h2>
|
||||
<p className="text-lg text-white/80">
|
||||
Bellabeat, established in 2014 by Urška Sršen and Sandro Mur, is a pioneering fem-tech company dedicated to women's health and wellness. The company specializes in wearable technology that enables women to monitor their health metrics, including menstrual cycles, sleep patterns, and stress levels. Hanzo AI was engaged to serve as an outsourced Chief Marketing Officer (CMO) and Chief Technology Officer (CTO), helping Bellabeat enhance their market position and technical infrastructure.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h2 className="text-2xl font-bold mb-4">Technologies</h2>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{['AI Algorithms', 'Data Analytics', 'Wearable Tech', 'Health Metrics', 'Cloud Infrastructure', 'Marketing Automation', 'User Experience', 'Data Visualization'].map(tech => (
|
||||
<span key={tech} className="bg-white/10 px-3 py-1 rounded-full text-sm">
|
||||
{tech}
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Three Column Section */}
|
||||
<div className="grid md:grid-cols-3 gap-8 mb-16">
|
||||
<div className="bg-white/5 p-6 rounded-lg">
|
||||
<h2 className="text-xl font-bold mb-3">Challenge</h2>
|
||||
<p className="text-white/80">
|
||||
In its early years, Bellabeat faced significant challenges in scaling its operations and reaching a broader audience. The competitive landscape of health tech demanded innovative marketing strategies and robust technological infrastructure to support growth. Data management and personalization at scale were key obstacles to overcome.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="bg-white/5 p-6 rounded-lg">
|
||||
<h2 className="text-xl font-bold mb-3">Solution</h2>
|
||||
<p className="text-white/80">
|
||||
Hanzo AI implemented advanced AI algorithms to analyze consumer behavior and preferences, enabling Bellabeat to tailor its marketing campaigns effectively. On the technological front, we overhauled Bellabeat's data management systems, introducing scalable solutions that could handle increased user data volumes and support the integration of new features. Our team created personalized data visualization tools that improved user engagement with health metrics.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="bg-white/5 p-6 rounded-lg">
|
||||
<h2 className="text-xl font-bold mb-3">Results</h2>
|
||||
<p className="text-white/80">
|
||||
The strategic partnership between Bellabeat and Hanzo AI yielded substantial results. Bellabeat experienced a significant surge in sales, with revenue estimates reaching up to $35 million by May 2024. User retention increased by 45%, and overall engagement with the platform improved by 67%. This growth underscored the effectiveness of Hanzo AI's integrated marketing and technological strategies.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Detailed Sections */}
|
||||
<div className="mb-16">
|
||||
<h2 className="text-2xl font-bold mb-6">Marketing Innovations</h2>
|
||||
<p className="text-lg text-white/80 mb-8">
|
||||
Hanzo AI implemented advanced AI algorithms to analyze consumer behavior and preferences, enabling Bellabeat to tailor its marketing campaigns effectively. This data-driven approach facilitated personalized content delivery, resonating with the target audience and boosting engagement. Our team developed segmented marketing strategies that addressed different user profiles, from fitness enthusiasts to those focused on reproductive health tracking.
|
||||
</p>
|
||||
|
||||
<h2 className="text-2xl font-bold mb-6">Technological Enhancements</h2>
|
||||
<p className="text-lg text-white/80 mb-8">
|
||||
On the technological front, Hanzo AI overhauled Bellabeat's data management systems, introducing scalable solutions that could handle increased user data volumes. This upgrade ensured seamless user experiences and supported the integration of new features into Bellabeat's product offerings. We implemented cloud-based analytics that provided real-time insights while maintaining strict privacy standards essential for health data.
|
||||
</p>
|
||||
|
||||
<h2 className="text-2xl font-bold mb-6">Key Achievements</h2>
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 mb-8">
|
||||
<div className="bg-white/5 p-6 rounded-lg text-center">
|
||||
<div className="text-3xl font-bold text-accent mb-2">67%</div>
|
||||
<p className="text-white/80">Increase in user engagement</p>
|
||||
</div>
|
||||
<div className="bg-white/5 p-6 rounded-lg text-center">
|
||||
<div className="text-3xl font-bold text-accent mb-2">45%</div>
|
||||
<p className="text-white/80">Improvement in user retention</p>
|
||||
</div>
|
||||
<div className="bg-white/5 p-6 rounded-lg text-center">
|
||||
<div className="text-3xl font-bold text-accent mb-2">$35M</div>
|
||||
<p className="text-white/80">Revenue estimation by 2024</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 className="text-2xl font-bold mb-6">Conclusion</h2>
|
||||
<p className="text-lg text-white/80">
|
||||
Hanzo AI's role as an outsourced CMO and CTO was instrumental in propelling Bellabeat's growth. By harnessing AI-driven marketing techniques and enhancing technological infrastructure, Bellabeat solidified its position in the fem-tech industry, achieving remarkable sales milestones. Our partnership demonstrates how strategic technological implementation combined with targeted marketing can transform business outcomes in the competitive health technology sector.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Testimonial Section */}
|
||||
<div className="my-16 bg-accent/10 rounded-2xl p-10 relative overflow-hidden">
|
||||
<div className="absolute top-0 right-0 text-[150px] leading-none font-bold text-accent/5 -mt-10 -mr-5">"</div>
|
||||
<div className="relative z-10 max-w-3xl mx-auto text-center">
|
||||
<p className="text-xl md:text-2xl italic text-white mb-6">
|
||||
"Hanzo AI transformed our approach to both marketing and technology. Their data-driven strategies helped us connect with our users on a deeper level while building the robust infrastructure we needed to scale. The results speak for themselves."
|
||||
</p>
|
||||
<div className="flex items-center justify-center">
|
||||
<div className="w-12 h-12 bg-accent/20 rounded-full mr-4"></div>
|
||||
<div className="text-left">
|
||||
<div className="font-bold">Urška Sršen</div>
|
||||
<div className="text-white/70">Co-founder & CPO at Bellabeat</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Related Projects Section */}
|
||||
<div className="mb-16">
|
||||
<h2 className="text-2xl font-bold mb-8">Related Case Studies</h2>
|
||||
<div className="grid md:grid-cols-2 gap-6">
|
||||
{/* First Related Project */}
|
||||
<div className="relative aspect-[4/3] overflow-hidden group rounded-lg">
|
||||
<img
|
||||
src="/img/7269bbbd-37f4-4f9e-af2b-4e6a47122f10.png"
|
||||
alt="Damon Motorcycles"
|
||||
className="w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
||||
/>
|
||||
<div className="absolute inset-0 bg-gradient-to-t from-black/80 to-transparent flex flex-col justify-end p-6">
|
||||
<h3 className="text-xl font-bold text-white uppercase">DAMON MOTORCYCLES</h3>
|
||||
<p className="text-white/80 mt-1 text-sm uppercase font-medium">HIGHLY CONVERTING 500X ROI CAMPAIGN</p>
|
||||
<Link to="/project/damon" className="mt-4 lets-talk-btn w-fit">
|
||||
Explore
|
||||
<ArrowUpRight size={16} className="ml-1" />
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Second Related Project */}
|
||||
<div className="relative aspect-[4/3] overflow-hidden group rounded-lg">
|
||||
<img
|
||||
src="/img/919bfa95-912a-489f-a859-7a42e0d7d435.png"
|
||||
alt="TrillerFest Music Festival"
|
||||
className="w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
||||
/>
|
||||
<div className="absolute inset-0 bg-gradient-to-t from-black/80 to-transparent flex flex-col justify-end p-6">
|
||||
<h3 className="text-xl font-bold text-white uppercase">TRILLERFEST</h3>
|
||||
<p className="text-white/80 mt-1 text-sm uppercase font-medium">LARGEST VIRTUAL MUSIC FESTIVAL IN HISTORY</p>
|
||||
<Link to="/project/triller" className="mt-4 lets-talk-btn w-fit">
|
||||
Explore
|
||||
<ArrowUpRight size={16} className="ml-1" />
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<Footer />
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
);
|
||||
};
|
||||
|
||||
export default CaseStudyBellabeat;
|
||||
@@ -1,218 +0,0 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { ArrowUpRight, ArrowLeft } from 'lucide-react';
|
||||
import { Link } from 'react-router-dom';
|
||||
import Navbar from '@/components/Navbar';
|
||||
import Footer from '@/components/Footer';
|
||||
import ScrollReveal from '@/utils/ScrollReveal';
|
||||
import GlobalMuteButton from '@/components/GlobalMuteButton';
|
||||
import VideoMuteButton from '@/components/VideoMuteButton';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { Dialog, DialogContent, DialogTrigger } from '@/components/ui/dialog';
|
||||
import { AspectRatio } from '@/components/ui/aspect-ratio';
|
||||
|
||||
const CaseStudyDamonMotorcycles = () => {
|
||||
const [isBannerVisible, setIsBannerVisible] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
// Check banner visibility on mount
|
||||
const checkBannerVisible = () => {
|
||||
const bannerShown = localStorage.getItem('bannerShown');
|
||||
const bannerExpiry = localStorage.getItem('bannerExpiry');
|
||||
const discountUsed = localStorage.getItem('discountUsed');
|
||||
|
||||
if (discountUsed === 'true') {
|
||||
setIsBannerVisible(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (bannerShown === 'true' && bannerExpiry) {
|
||||
const expiryTime = parseInt(bannerExpiry, 10);
|
||||
const currentTime = new Date().getTime();
|
||||
|
||||
setIsBannerVisible(expiryTime > currentTime);
|
||||
} else {
|
||||
setIsBannerVisible(false);
|
||||
}
|
||||
};
|
||||
|
||||
// Listen for banner visibility changes
|
||||
const handleBannerVisibilityChanged = (e: Event) => {
|
||||
const customEvent = e as CustomEvent;
|
||||
setIsBannerVisible(customEvent.detail.visible);
|
||||
};
|
||||
|
||||
window.addEventListener('bannerVisibilityChanged', handleBannerVisibilityChanged);
|
||||
checkBannerVisible();
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('bannerVisibilityChanged', handleBannerVisibilityChanged);
|
||||
};
|
||||
}, []);
|
||||
|
||||
return <ScrollReveal>
|
||||
<div className="min-h-screen flex flex-col bg-beige-50 text-white">
|
||||
<Navbar />
|
||||
<GlobalMuteButton />
|
||||
|
||||
<main className={`flex-grow ${isBannerVisible ? 'mt-32' : 'mt-24'}`}>
|
||||
<div className="container-custom">
|
||||
{/* All Case Studies link with improved positioning */}
|
||||
<div className={`sticky ${isBannerVisible ? 'top-28' : 'top-20'} z-10 mb-8 w-full`}>
|
||||
<Link to="/case-studies" className="inline-flex items-center text-sm font-medium hover:underline text-white bg-black/50 px-4 py-2 rounded-full backdrop-blur-sm">
|
||||
<ArrowLeft size={16} className="mr-2" />
|
||||
All Case Studies
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
{/* Hero section */}
|
||||
<div className="mb-16">
|
||||
<h1 className="text-6xl md:text-9xl font-black tracking-tighter uppercase leading-none mb-6 text-white">
|
||||
DAMON<br />MOTORCYCLES
|
||||
</h1>
|
||||
<div className="flex flex-col md:flex-row gap-6 md:gap-12 mt-8">
|
||||
<div className="md:w-1/3">
|
||||
<h3 className="text-xl font-bold mb-2">CLIENT</h3>
|
||||
<p>Damon Motorcycles</p>
|
||||
</div>
|
||||
<div className="md:w-1/3">
|
||||
<h3 className="text-xl font-bold mb-2">SERVICES</h3>
|
||||
<p>Digital Marketing, Brand Strategy, Content Production, Web Design and Development</p>
|
||||
</div>
|
||||
<div className="md:w-1/3">
|
||||
<h3 className="text-xl font-bold mb-2">RESULTS</h3>
|
||||
<p>500x ROI on marketing spend</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Featured image */}
|
||||
<div className="mb-16 reveal">
|
||||
<img src="/img/7269bbbd-37f4-4f9e-af2b-4e6a47122f10.png" alt="Damon Motorcycles" className="w-full h-auto aspect-video object-cover rounded-lg" />
|
||||
</div>
|
||||
|
||||
{/* Project overview */}
|
||||
<div className="grid md:grid-cols-2 gap-12 mb-16 reveal">
|
||||
<div>
|
||||
<h2 className="text-3xl font-bold mb-6">PROJECT OVERVIEW</h2>
|
||||
<p className="text-lg mb-4">
|
||||
Damon Motorcycles came to us with a challenge: create a high-converting marketing campaign that would generate significant ROI for their innovative electric motorcycles.
|
||||
</p>
|
||||
<p className="text-lg mb-4">
|
||||
Through a comprehensive digital strategy focusing on targeted audience segments, we were able to create a campaign that resonated with motorcycle enthusiasts and eco-conscious consumers alike.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="text-3xl font-bold mb-6">CHALLENGE</h2>
|
||||
<p className="text-lg mb-4">
|
||||
The electric motorcycle market was growing, but Damon needed to stand out in a space dominated by traditional combustion engine bikes and establish credibility for their revolutionary technology.
|
||||
</p>
|
||||
<p className="text-lg mb-4">
|
||||
We needed to communicate complex technological advantages while creating an emotional connection with potential customers.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Solution & Results */}
|
||||
<div className="grid md:grid-cols-2 gap-12 mb-16 reveal">
|
||||
<div>
|
||||
<h2 className="text-3xl font-bold mb-6">SOLUTION</h2>
|
||||
<p className="text-lg mb-4">
|
||||
We developed a multi-channel digital campaign that highlighted Damon's revolutionary safety features and performance capabilities, using a mix of video content, interactive demonstrations, and targeted advertising.
|
||||
</p>
|
||||
<p className="text-lg mb-4">
|
||||
Our strategy incorporated influencer partnerships with respected motorcycle enthusiasts and sustainability advocates to build trust with multiple audience segments.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h2 className="text-3xl font-bold mb-6">RESULTS</h2>
|
||||
<ul className="text-lg space-y-4">
|
||||
<li>• 500x return on marketing investment</li>
|
||||
<li>• 230% increase in qualified leads</li>
|
||||
<li>• 65% conversion rate from lead to sale</li>
|
||||
<li>• 45% reduction in customer acquisition cost</li>
|
||||
<li>• Featured in top industry publications</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Additional images */}
|
||||
<div className="grid md:grid-cols-2 gap-6 mb-16 reveal">
|
||||
<div className="relative w-full aspect-square rounded-lg overflow-hidden">
|
||||
<Dialog>
|
||||
<DialogTrigger asChild>
|
||||
<div className="relative w-full h-full cursor-pointer group">
|
||||
<iframe
|
||||
src="https://www.youtube.com/embed/TVExxxHKqF8?autoplay=1&loop=1&playlist=TVExxxHKqF8&mute=1&controls=1&showinfo=0"
|
||||
title="Damon Motorcycles Video"
|
||||
className="w-full h-full object-cover"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
frameBorder="0"
|
||||
></iframe>
|
||||
<VideoMuteButton videoId="damon-thumbnail" className="bottom-12 right-12" />
|
||||
<div className="absolute inset-0 bg-black/20 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity">
|
||||
<span className="bg-white/90 text-black px-4 py-2 rounded-full font-medium">Watch Video</span>
|
||||
</div>
|
||||
</div>
|
||||
</DialogTrigger>
|
||||
<DialogContent className="max-w-4xl bg-black p-0 border-none">
|
||||
<AspectRatio ratio={16/9} className="bg-black relative">
|
||||
<iframe
|
||||
src="https://www.youtube.com/embed/TVExxxHKqF8?autoplay=1&loop=1&playlist=TVExxxHKqF8"
|
||||
title="Damon Motorcycles Video"
|
||||
className="w-full h-full"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
frameBorder="0"
|
||||
></iframe>
|
||||
<VideoMuteButton videoId="damon-modal" />
|
||||
</AspectRatio>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
</div>
|
||||
<img src="/img/3e0ed6d6-8d6d-4b77-a6c1-aa1c7df4f868.png" alt="Damon Motorcycles Result" className="w-full h-auto aspect-square object-cover rounded-lg" />
|
||||
</div>
|
||||
|
||||
{/* Testimonial */}
|
||||
<div className="mb-16 bg-black text-white p-8 md:p-12 rounded-lg reveal">
|
||||
<blockquote className="text-xl md:text-2xl italic mb-6">
|
||||
"The campaign Hanzo created for us exceeded all expectations. Not only did they help us reach new customers, but they truly understood our technology and brand values. The ROI speaks for itself."
|
||||
</blockquote>
|
||||
<p className="font-bold">- Jay Giraud, CEO at Damon Motorcycles</p>
|
||||
</div>
|
||||
|
||||
{/* CTA */}
|
||||
<div className="text-center mb-16 reveal">
|
||||
<h2 className="text-3xl md:text-4xl font-bold mb-6">Ready to achieve similar results?</h2>
|
||||
<Link to="/contact" className="lets-talk-btn inline-flex items-center">
|
||||
Let's Talk
|
||||
<ArrowUpRight size={16} className="ml-1" />
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
{/* Related case studies */}
|
||||
<div className="mb-16 reveal">
|
||||
<h2 className="text-2xl md:text-3xl font-bold mb-8">Related Case Studies</h2>
|
||||
<div className="grid md:grid-cols-2 gap-6">
|
||||
<div className="relative aspect-[4/3] overflow-hidden group">
|
||||
<img src="/img/919bfa95-912a-489f-a859-7a42e0d7d435.png" alt="TrillerFest Music Festival" className="w-full h-full object-cover" />
|
||||
<div className="absolute inset-0 bg-gradient-to-t from-black/80 to-transparent flex flex-col justify-end p-6">
|
||||
<h3 className="text-xl font-bold text-white uppercase">TRILLERFEST</h3>
|
||||
<p className="text-white/80 mt-1 text-sm uppercase font-medium">LARGEST VIRTUAL MUSIC FESTIVAL IN HISTORY</p>
|
||||
<Link to="/case-study-trillerfest" className="mt-4 lets-talk-btn w-fit">
|
||||
Explore
|
||||
<ArrowUpRight size={16} className="ml-1" />
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<Footer />
|
||||
</div>
|
||||
</ScrollReveal>;
|
||||
};
|
||||
|
||||
export default CaseStudyDamonMotorcycles;
|
||||
@@ -1,75 +0,0 @@
|
||||
|
||||
import { useEffect } from 'react';
|
||||
import ScrollReveal from '@/utils/ScrollReveal';
|
||||
import TrillerFestGallery from '@/components/TrillerFestGallery';
|
||||
import HeroSection from '@/components/case-studies/triller-fest/HeroSection';
|
||||
import KeyMetrics from '@/components/case-studies/triller-fest/KeyMetrics';
|
||||
import CaseStudyContent from '@/components/case-studies/triller-fest/CaseStudyContent';
|
||||
import SidebarContent from '@/components/case-studies/triller-fest/SidebarContent';
|
||||
import TestimonialSection from '@/components/case-studies/triller-fest/TestimonialSection';
|
||||
import CTASection from '@/components/case-studies/triller-fest/CTASection';
|
||||
import Navbar from '@/components/Navbar';
|
||||
import GlobalMuteButton from '@/components/GlobalMuteButton';
|
||||
import VideoMuteButton from '@/components/VideoMuteButton';
|
||||
|
||||
const CaseStudyTrillerFest = () => {
|
||||
useEffect(() => {
|
||||
window.scrollTo(0, 0);
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<ScrollReveal>
|
||||
<div className="min-h-screen bg-beige-50">
|
||||
<Navbar />
|
||||
<GlobalMuteButton />
|
||||
{/* Hero Section */}
|
||||
<HeroSection />
|
||||
|
||||
<div className="container-custom py-16 md:py-24">
|
||||
{/* Video Showcase */}
|
||||
<div className="mb-16 mt-8 max-w-4xl mx-auto relative">
|
||||
<h2 className="text-2xl font-bold mb-6 text-center">Campaign Video</h2>
|
||||
<div className="aspect-video w-full overflow-hidden rounded-lg relative">
|
||||
<iframe
|
||||
className="w-full h-full object-cover"
|
||||
src="https://www.youtube.com/embed/QEQpdYYYlhc?autoplay=1&mute=1&loop=1&playlist=QEQpdYYYlhc&controls=1&showinfo=0&rel=0&modestbranding=1&iv_load_policy=3"
|
||||
title="TrillerFest Campaign Video"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
frameBorder="0"
|
||||
></iframe>
|
||||
<VideoMuteButton videoId="trillerfest-main" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Image Gallery */}
|
||||
<TrillerFestGallery />
|
||||
|
||||
{/* Key Metrics */}
|
||||
<KeyMetrics />
|
||||
|
||||
{/* Main Content */}
|
||||
<div className="flex flex-col lg:flex-row gap-10">
|
||||
{/* Left Column - Main Content */}
|
||||
<div className="lg:w-2/3">
|
||||
<CaseStudyContent />
|
||||
</div>
|
||||
|
||||
{/* Right Column - Sticky Sidebar */}
|
||||
<div className="lg:w-1/3">
|
||||
<SidebarContent />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Testimonial Section */}
|
||||
<TestimonialSection />
|
||||
|
||||
{/* CTA Section */}
|
||||
<CTASection />
|
||||
</div>
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
);
|
||||
};
|
||||
|
||||
export default CaseStudyTrillerFest;
|
||||
@@ -1,219 +0,0 @@
|
||||
import React, { useEffect } from 'react';
|
||||
import Navbar from '@/components/Navbar';
|
||||
import Footer from '@/components/Footer';
|
||||
import ScrollReveal from '@/utils/ScrollReveal';
|
||||
import GlobalMuteButton from '@/components/GlobalMuteButton';
|
||||
import VideoMuteButton from '@/components/VideoMuteButton';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { ArrowLeft, ArrowUpRight } from 'lucide-react';
|
||||
|
||||
const CaseStudyUnikoinGold = () => {
|
||||
useEffect(() => {
|
||||
// Set the body to dark theme
|
||||
document.body.classList.add('dark');
|
||||
|
||||
return () => {
|
||||
document.body.classList.remove('dark');
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<ScrollReveal>
|
||||
<div className="min-h-screen flex flex-col bg-black text-white">
|
||||
<Navbar />
|
||||
<GlobalMuteButton />
|
||||
|
||||
<main className="flex-grow pt-36">
|
||||
<div className="container-custom">
|
||||
<Link to="/case-studies" className="inline-flex items-center text-white/70 hover:text-white mb-8 transition-colors">
|
||||
<ArrowLeft className="mr-2 h-4 w-4" />
|
||||
Back to all projects
|
||||
</Link>
|
||||
|
||||
<h1 className="text-4xl md:text-6xl font-bold mb-6">Unikoin Gold</h1>
|
||||
<p className="text-xl md:text-2xl text-white/80 mb-12">BLOCKCHAIN-BASED ESPORTS BETTING PLATFORM</p>
|
||||
<div className="inline-block px-4 py-1 rounded-full text-accent-light text-sm font-medium mb-6 bg-neutral-50">
|
||||
Blockchain Success
|
||||
</div>
|
||||
|
||||
{/* Hero Image */}
|
||||
<div className="w-full aspect-video bg-gray-800 mb-16 overflow-hidden rounded-lg relative">
|
||||
<iframe
|
||||
className="w-full h-full object-cover"
|
||||
src="https://www.youtube.com/embed/8TbWsxiyKUE?autoplay=1&mute=1&loop=1&playlist=8TbWsxiyKUE&controls=1&showinfo=0&rel=0&modestbranding=1&iv_load_policy=3"
|
||||
title="Unikoin Gold - Blockchain-based Esports Betting Platform"
|
||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
||||
allowFullScreen
|
||||
frameBorder="0"
|
||||
></iframe>
|
||||
<VideoMuteButton videoId="unikoingold-hero" />
|
||||
</div>
|
||||
|
||||
{/* Overview Section */}
|
||||
<div className="grid md:grid-cols-2 gap-12 mb-16">
|
||||
<div>
|
||||
<h2 className="text-2xl font-bold mb-4">Overview</h2>
|
||||
<p className="text-lg text-white/80">
|
||||
Unikrn, established in 2014, is a leading esports entertainment and betting platform. To enhance its offerings, Unikrn introduced UnikoinGold (UKG), an ERC20 token on the Ethereum blockchain, aiming to create a decentralized, community-driven virtual economy for esports enthusiasts. Hanzo AI partnered with Unikrn to address regulatory challenges, implement blockchain solutions, and enhance user engagement.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h2 className="text-2xl font-bold mb-4">Technologies</h2>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{['Blockchain', 'Ethereum', 'Smart Contracts', 'ERC20 Tokens', 'API Integration', 'AI Algorithms', 'Web3', 'Decentralized Finance'].map(tech => (
|
||||
<span key={tech} className="bg-white/10 px-3 py-1 rounded-full text-sm">
|
||||
{tech}
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Three Column Section */}
|
||||
<div className="grid md:grid-cols-3 gap-8 mb-16">
|
||||
<div className="bg-white/5 p-6 rounded-lg">
|
||||
<h2 className="text-xl font-bold mb-3">Challenge</h2>
|
||||
<p className="text-white/80">
|
||||
The integration of blockchain technology into Unikrn's platform presented several challenges including regulatory compliance across various jurisdictions, technological integration of blockchain systems, and developing features that would drive adoption of UnikoinGold among the esports community.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="bg-white/5 p-6 rounded-lg">
|
||||
<h2 className="text-xl font-bold mb-3">Solution</h2>
|
||||
<p className="text-white/80">
|
||||
Hanzo AI collaborated with Unikrn to develop a compliance framework, assisted in designing and implementing Ethereum smart contracts, and helped develop user-centric features such as tipping for esports participants and a new skill-based betting platform powered by UnikoinGold.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="bg-white/5 p-6 rounded-lg">
|
||||
<h2 className="text-xl font-bold mb-3">Results</h2>
|
||||
<p className="text-white/80">
|
||||
The collaboration led to enhanced compliance allowing Unikrn to operate within legal frameworks across jurisdictions, successful integration of blockchain technology establishing a transparent transaction system, and increased user engagement through new interactive features for the esports community.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Detailed Sections */}
|
||||
<div className="mb-16">
|
||||
<h2 className="text-2xl font-bold mb-6">Regulatory Strategy</h2>
|
||||
<p className="text-lg text-white/80 mb-8">
|
||||
Hanzo AI collaborated with Unikrn to develop a sophisticated compliance framework, distinguishing between Full Service Jurisdictions and Limited Jurisdictions. In Full Service Jurisdictions, UnikoinGold was utilized for legal and licensed betting on esports matches, tournaments, and related activities. In Limited Jurisdictions, its use was restricted to purchasing jackpot tickets and accessing exclusive rooms. This tailored approach enabled Unikrn to navigate the complex regulatory landscape of online betting while expanding their market reach.
|
||||
</p>
|
||||
|
||||
<h2 className="text-2xl font-bold mb-6">Blockchain Integration</h2>
|
||||
<p className="text-lg text-white/80 mb-8">
|
||||
Our team assisted in designing and implementing Ethereum smart contracts, ensuring that transactions were publicly accessible, open, and transparent. We created secure API endpoints to connect Unikrn's existing platform with the Ethereum blockchain, establishing a decentralized virtual economy. The implementation included wallet management systems, transaction monitoring tools, and automated compliance checks to ensure the platform's integrity.
|
||||
</p>
|
||||
|
||||
<h2 className="text-2xl font-bold mb-6">User-Centric Features</h2>
|
||||
<p className="text-lg text-white/80 mb-8">
|
||||
To enhance user engagement, Hanzo AI helped develop several innovative features for the platform. These included a tipping system for esports participants, players, and teams, allowing fans to directly support their favorites. We also introduced a skill-based betting platform powered by UnikoinGold, enabling users to wager on their own performance in popular games. Additionally, we implemented a rewards system that incentivized platform participation and token utilization.
|
||||
</p>
|
||||
|
||||
<h2 className="text-2xl font-bold mb-6">Key Achievements</h2>
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 mb-8">
|
||||
<div className="bg-white/5 p-6 rounded-lg text-center">
|
||||
<div className="text-3xl font-bold text-accent mb-2">15+</div>
|
||||
<p className="text-white/80">Jurisdictions supported</p>
|
||||
</div>
|
||||
<div className="bg-white/5 p-6 rounded-lg text-center">
|
||||
<div className="text-3xl font-bold text-accent mb-2">300%</div>
|
||||
<p className="text-white/80">Increase in platform engagement</p>
|
||||
</div>
|
||||
<div className="bg-white/5 p-6 rounded-lg text-center">
|
||||
<div className="text-3xl font-bold text-accent mb-2">$30M+</div>
|
||||
<p className="text-white/80">Token value within ecosystem</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2 className="text-2xl font-bold mb-6">ICO Success Story</h2>
|
||||
<div className="bg-white/5 p-6 rounded-lg mb-8">
|
||||
<h3 className="text-xl font-bold mb-4">Strategic Partnership</h3>
|
||||
<p className="text-lg text-white/80 mb-6">
|
||||
Hanzo AI was engaged as an outsourced Chief Marketing Officer (CMO) and Chief Technology Officer (CTO) to oversee the strategic development and execution of UnikoinGold's Initial Coin Offering (ICO). Our team developed comprehensive marketing strategies targeting both the esports community and cryptocurrency investors while simultaneously managing the technical aspects of the ICO, including token creation, smart contract development, and platform security.
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-bold mb-4">Remarkable Results</h3>
|
||||
<p className="text-lg text-white/80 mb-6">
|
||||
The ICO, launched in September 2017, was a remarkable success, raising over 120,000 Ether (approximately $34.9 million at the time). This achievement was bolstered by strategic partnerships with high-profile investors, including Ethereum co-founder Anthony Di Iorio and entrepreneur Mark Cuban, who had previously invested in Unikrn.
|
||||
</p>
|
||||
|
||||
<h3 className="text-xl font-bold mb-4">Token Innovation</h3>
|
||||
<p className="text-lg text-white/80">
|
||||
UnikoinGold was designed with innovative utility as a medium of exchange within the Unikrn platform, allowing users to bet on esports matches and participate in other platform activities. This practical application of blockchain technology created real value for users and contributed significantly to the token's adoption and success.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<h2 className="text-2xl font-bold mb-6">Conclusion</h2>
|
||||
<p className="text-lg text-white/80">
|
||||
Hanzo AI's strategic partnership with Unikrn was pivotal in the successful launch and integration of UnikoinGold. By addressing regulatory challenges, implementing advanced blockchain solutions, and enhancing user engagement, Hanzo AI contributed significantly to Unikrn's vision of creating a decentralized, community-driven virtual economy for esports enthusiasts. The project demonstrates how AI-driven strategic planning can help overcome the complex challenges of blockchain integration in regulated industries.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Testimonial Section */}
|
||||
<div className="my-16 bg-accent/10 rounded-2xl p-10 relative overflow-hidden">
|
||||
<div className="absolute top-0 right-0 text-[150px] leading-none font-bold text-accent/5 -mt-10 -mr-5">"</div>
|
||||
<div className="relative z-10 max-w-3xl mx-auto text-center">
|
||||
<p className="text-xl md:text-2xl italic text-white mb-6">
|
||||
"Hanzo AI's expertise in blockchain technology and regulatory compliance was instrumental in bringing UnikoinGold to market. Their strategic insights helped us navigate complex challenges while their technical implementation enabled us to create a truly decentralized ecosystem for our users."
|
||||
</p>
|
||||
<div className="flex items-center justify-center">
|
||||
<div className="w-12 h-12 bg-accent/20 rounded-full mr-4"></div>
|
||||
<div className="text-left">
|
||||
<div className="font-bold">Rahul Sood</div>
|
||||
<div className="text-white/70">CEO at Unikrn</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Related Projects Section */}
|
||||
<div className="mb-16">
|
||||
<h2 className="text-2xl font-bold mb-8">Related Case Studies</h2>
|
||||
<div className="grid md:grid-cols-2 gap-6">
|
||||
{/* First Related Project */}
|
||||
<div className="relative aspect-[4/3] overflow-hidden group rounded-lg">
|
||||
<img
|
||||
src="/img/919bfa95-912a-489f-a859-7a42e0d7d435.png"
|
||||
alt="Casper Blockchain"
|
||||
className="w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
||||
/>
|
||||
<div className="absolute inset-0 bg-gradient-to-t from-black/80 to-transparent flex flex-col justify-end p-6">
|
||||
<h3 className="text-xl font-bold text-white uppercase">CASPER BLOCKCHAIN</h3>
|
||||
<p className="text-white/80 mt-1 text-sm uppercase font-medium">ENTERPRISE-GRADE SECURE BLOCKCHAIN PLATFORM</p>
|
||||
<Link to="/project/casper-blockchain" className="mt-4 lets-talk-btn w-fit">
|
||||
Explore
|
||||
<ArrowUpRight size={16} className="ml-1" />
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Second Related Project */}
|
||||
<div className="relative aspect-[4/3] overflow-hidden group rounded-lg">
|
||||
<img
|
||||
src="/img/7269bbbd-37f4-4f9e-af2b-4e6a47122f10.png"
|
||||
alt="Bellabeat"
|
||||
className="w-full h-full object-cover transition-transform duration-300 group-hover:scale-105"
|
||||
/>
|
||||
<div className="absolute inset-0 bg-gradient-to-t from-black/80 to-transparent flex flex-col justify-end p-6">
|
||||
<h3 className="text-xl font-bold text-white uppercase">BELLABEAT</h3>
|
||||
<p className="text-white/80 mt-1 text-sm uppercase font-medium">WOMEN'S HEALTH WEARABLE TECH PLATFORM</p>
|
||||
<Link to="/project/bella-beat" className="mt-4 lets-talk-btn w-fit">
|
||||
Explore
|
||||
<ArrowUpRight size={16} className="ml-1" />
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<Footer />
|
||||
</div>
|
||||
</ScrollReveal>
|
||||
);
|
||||
};
|
||||
|
||||
export default CaseStudyUnikoinGold;
|
||||
@@ -0,0 +1,40 @@
|
||||
// Case Study data types
|
||||
export interface RelatedProject {
|
||||
id: string;
|
||||
title: string;
|
||||
subtitle: string;
|
||||
imageUrl: string;
|
||||
route: string;
|
||||
}
|
||||
|
||||
export interface SocialLink {
|
||||
platform: string;
|
||||
url: string;
|
||||
}
|
||||
|
||||
export interface CaseStudyData {
|
||||
id: string;
|
||||
title: string;
|
||||
subtitle: string;
|
||||
client: string;
|
||||
services: string[];
|
||||
results: string[];
|
||||
videoUrl?: string;
|
||||
videoId?: string;
|
||||
mainImageUrl?: string;
|
||||
overview: string[];
|
||||
challenge: string[];
|
||||
solution: string[];
|
||||
testimonial?: {
|
||||
quote: string;
|
||||
author: string;
|
||||
role: string;
|
||||
};
|
||||
images?: string[];
|
||||
socialLinks?: {
|
||||
links: SocialLink[];
|
||||
totalFollowers?: number;
|
||||
};
|
||||
relatedProjects: RelatedProject[];
|
||||
ctaTitle?: string;
|
||||
}
|
||||
Reference in New Issue
Block a user