Merge version_1 into main #2
@@ -51,18 +51,19 @@ export default function LandingPage() {
|
||||
videoSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/slow-motion-close-up-of-an-elite-ifbb-pr-1773331038049-983718d4.png"
|
||||
videoAriaLabel="Elite bodybuilder preparing for deadlift – slow motion"
|
||||
mediaAnimation="opacity"
|
||||
background={{ variant: "plain" }}
|
||||
testimonials={[
|
||||
{
|
||||
name: "Marcus Elite", handle: "IFBB Pro • Dubai", testimonial: "In 60 days, I went from 150k followers to 850k. My rate is now $15k per coaching call.", rating: 5,
|
||||
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/portrait-photo-of-a-successful-fitness-c-1773331037695-1162569c.png?_wi=1"
|
||||
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/portrait-photo-of-a-successful-fitness-c-1773331037695-1162569c.png"
|
||||
},
|
||||
{
|
||||
name: "Sarah Strength", handle: "Head Coach • London", testimonial: "Stopped editing. Started selling. My coaching empire tripled without me touching a keyboard.", rating: 5,
|
||||
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/portrait-of-another-successful-fitness-p-1773331037822-4bff65d8.png?_wi=1"
|
||||
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/portrait-of-another-successful-fitness-p-1773331037822-4bff65d8.png"
|
||||
},
|
||||
{
|
||||
name: "James Titan", handle: "Elite Trainer • NYC", testimonial: "Brute Media made me the undisputed authority in my niche. Now other coaches pay to learn from me.", rating: 5,
|
||||
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/professional-headshot-of-an-ifbb-pro-or--1773331038373-c93cfb0a.png?_wi=1"
|
||||
imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/professional-headshot-of-an-ifbb-pro-or--1773331038373-c93cfb0a.png"
|
||||
}
|
||||
]}
|
||||
buttons={[{ text: "Apply for Partnership", href: "#contact" }]}
|
||||
@@ -105,13 +106,13 @@ export default function LandingPage() {
|
||||
buttonAnimation="slide-up"
|
||||
features={[
|
||||
{
|
||||
title: "Step 1: Data-Driven Scripts", description: "We hand you viral, algorithm-optimized scripts. No guessing. Just proven frameworks built for elite fitness content.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/sleek-cinematic-promotional-video-still--1773331038510-57fcee03.png?_wi=1", imageAlt: "Brute Media script and content framework"
|
||||
title: "Step 1: Data-Driven Scripts", description: "We hand you viral, algorithm-optimized scripts. No guessing. Just proven frameworks built for elite fitness content.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/sleek-cinematic-promotional-video-still--1773331038510-57fcee03.png", imageAlt: "Brute Media script and content framework"
|
||||
},
|
||||
{
|
||||
title: "Step 2: You Shoot Raw", description: "You spend 15 minutes between sets. One camera. One angle. We handle the magic in post.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/elite-fitness-coach-in-a-luxury-gym-sitt-1773331038029-ea2ccec1.png", imageAlt: "Coach shooting simple raw footage"
|
||||
},
|
||||
{
|
||||
title: "Step 3: We Deliver Cinema", description: "Professional color grading, dynamic b-roll, smooth transitions, distributed globally to all platforms.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/sleek-cinematic-promotional-video-still--1773331038510-57fcee03.png?_wi=2", imageAlt: "Final cinematic edited content on mobile"
|
||||
title: "Step 3: We Deliver Cinema", description: "Professional color grading, dynamic b-roll, smooth transitions, distributed globally to all platforms.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/sleek-cinematic-promotional-video-still--1773331038510-57fcee03.png", imageAlt: "Final cinematic edited content on mobile"
|
||||
}
|
||||
]}
|
||||
gridVariant="three-columns-all-equal-width"
|
||||
@@ -171,22 +172,22 @@ export default function LandingPage() {
|
||||
animationType="slide-up"
|
||||
testimonials={[
|
||||
{
|
||||
id: "1", name: "Marcus Elite", role: "IFBB Pro Bodybuilder", testimonial: "In 60 days, I went from 150k followers to 850k. My rate jumped to $15k per coaching call. Brute Media didn't just save me time—it made me a recognized authority in my field.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/portrait-photo-of-a-successful-fitness-c-1773331037695-1162569c.png?_wi=2"
|
||||
id: "1", name: "Marcus Elite", role: "IFBB Pro Bodybuilder", testimonial: "In 60 days, I went from 150k followers to 850k. My rate jumped to $15k per coaching call. Brute Media didn't just save me time—it made me a recognized authority in my field.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/portrait-photo-of-a-successful-fitness-c-1773331037695-1162569c.png"
|
||||
},
|
||||
{
|
||||
id: "2", name: "Sarah Strength", role: "Head Coach, London Training Academy", testimonial: "I stopped editing. I started selling. My coaching empire tripled without me ever touching a keyboard. The ROI is insane.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/portrait-of-another-successful-fitness-p-1773331037822-4bff65d8.png?_wi=2"
|
||||
id: "2", name: "Sarah Strength", role: "Head Coach, London Training Academy", testimonial: "I stopped editing. I started selling. My coaching empire tripled without me ever touching a keyboard. The ROI is insane.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/portrait-of-another-successful-fitness-p-1773331037822-4bff65d8.png"
|
||||
},
|
||||
{
|
||||
id: "3", name: "James Titan", role: "Elite Personal Trainer, NYC", testimonial: "Brute Media made me the undisputed authority in my niche. Now other coaches pay to learn from me. This is the move.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/professional-headshot-of-an-ifbb-pro-or--1773331038373-c93cfb0a.png?_wi=2"
|
||||
id: "3", name: "James Titan", role: "Elite Personal Trainer, NYC", testimonial: "Brute Media made me the undisputed authority in my niche. Now other coaches pay to learn from me. This is the move.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/professional-headshot-of-an-ifbb-pro-or--1773331038373-c93cfb0a.png"
|
||||
},
|
||||
{
|
||||
id: "4", name: "Coach Victoria", role: "Online Coaching CEO", testimonial: "Premium clients from the US, UK, and Dubai. They all found me because my content was cinematic. Brute Media is literally the cheat code.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/professional-portrait-of-a-female-or-alt-1773331038444-b21d194a.png"
|
||||
},
|
||||
{
|
||||
id: "5", name: "Alex Pro", role: "Fitness Influencer & Coach", testimonial: "20+ hours freed up every week. Instead of editing, I coach. Instead of guessing, I scale. This is what elite coaches have been waiting for.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/portrait-photo-of-a-successful-fitness-c-1773331037695-1162569c.png?_wi=3"
|
||||
id: "5", name: "Alex Pro", role: "Fitness Influencer & Coach", testimonial: "20+ hours freed up every week. Instead of editing, I coach. Instead of guessing, I scale. This is what elite coaches have been waiting for.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/portrait-photo-of-a-successful-fitness-c-1773331037695-1162569c.png"
|
||||
},
|
||||
{
|
||||
id: "6", name: "Nina Strength", role: "International Coaching Brand", testimonial: "Global distribution, consistent quality, viral performance. Brute Media is the only reason I'm not drowning in admin work.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/portrait-of-another-successful-fitness-p-1773331037822-4bff65d8.png?_wi=3"
|
||||
id: "6", name: "Nina Strength", role: "International Coaching Brand", testimonial: "Global distribution, consistent quality, viral performance. Brute Media is the only reason I'm not drowning in admin work.", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqrR0uZ2UEG8H6YNGyaykiKLGC/portrait-of-another-successful-fitness-p-1773331037822-4bff65d8.png"
|
||||
}
|
||||
]}
|
||||
useInvertedBackground={false}
|
||||
|
||||
@@ -1,51 +1,64 @@
|
||||
"use client";
|
||||
import React, { SVGProps } from 'react';
|
||||
|
||||
import { memo } from "react";
|
||||
import useSvgTextLogo from "./useSvgTextLogo";
|
||||
import { cls } from "@/lib/utils";
|
||||
|
||||
interface SvgTextLogoProps {
|
||||
logoText: string;
|
||||
adjustHeightFactor?: number;
|
||||
verticalAlign?: "top" | "center";
|
||||
className?: string;
|
||||
interface SvgTextLogoProps extends SVGProps<SVGSVGElement> {
|
||||
text?: string;
|
||||
fontSize?: number;
|
||||
fontFamily?: string;
|
||||
fontWeight?: string | number;
|
||||
fill?: string;
|
||||
stroke?: string;
|
||||
strokeWidth?: number;
|
||||
textAnchor?: 'start' | 'middle' | 'end';
|
||||
dominantBaseline?: 'auto' | 'middle' | 'hanging';
|
||||
}
|
||||
|
||||
const SvgTextLogo = memo<SvgTextLogoProps>(function SvgTextLogo({
|
||||
logoText,
|
||||
adjustHeightFactor,
|
||||
verticalAlign = "top",
|
||||
className = "",
|
||||
}) {
|
||||
const { svgRef, textRef, viewBox, aspectRatio } = useSvgTextLogo(logoText, false, adjustHeightFactor);
|
||||
|
||||
return (
|
||||
<svg
|
||||
ref={svgRef}
|
||||
viewBox={viewBox}
|
||||
className={cls("w-full", className)}
|
||||
style={{ aspectRatio: aspectRatio }}
|
||||
preserveAspectRatio="none"
|
||||
role="img"
|
||||
aria-label={`${logoText} logo`}
|
||||
>
|
||||
<text
|
||||
ref={textRef}
|
||||
x="0"
|
||||
y={verticalAlign === "center" ? "50%" : "0"}
|
||||
className="font-bold fill-current"
|
||||
style={{
|
||||
fontSize: "20px",
|
||||
letterSpacing: "-0.02em",
|
||||
dominantBaseline: verticalAlign === "center" ? "middle" : "text-before-edge"
|
||||
}}
|
||||
const SvgTextLogo = React.forwardRef<SVGSVGElement, SvgTextLogoProps>(
|
||||
(
|
||||
{
|
||||
text = 'Logo',
|
||||
fontSize = 24,
|
||||
fontFamily = 'Arial, sans-serif',
|
||||
fontWeight = 'bold',
|
||||
fill = 'currentColor',
|
||||
stroke = 'none',
|
||||
strokeWidth = 0,
|
||||
textAnchor = 'middle',
|
||||
dominantBaseline = 'middle',
|
||||
viewBox = '0 0 200 60',
|
||||
width = 200,
|
||||
height = 60,
|
||||
...props
|
||||
},
|
||||
ref
|
||||
) => {
|
||||
return (
|
||||
<svg
|
||||
ref={ref}
|
||||
viewBox={viewBox}
|
||||
width={width}
|
||||
height={height}
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
{...props}
|
||||
>
|
||||
{logoText}
|
||||
</text>
|
||||
</svg>
|
||||
);
|
||||
});
|
||||
<text
|
||||
x="50%"
|
||||
y="50%"
|
||||
fontSize={fontSize}
|
||||
fontFamily={fontFamily}
|
||||
fontWeight={fontWeight}
|
||||
fill={fill}
|
||||
stroke={stroke}
|
||||
strokeWidth={strokeWidth}
|
||||
textAnchor={textAnchor}
|
||||
dominantBaseline={dominantBaseline}
|
||||
>
|
||||
{text}
|
||||
</text>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
SvgTextLogo.displayName = "SvgTextLogo";
|
||||
SvgTextLogo.displayName = 'SvgTextLogo';
|
||||
|
||||
export default SvgTextLogo;
|
||||
|
||||
Reference in New Issue
Block a user