feat: whyrating brand identity + landing page content

Replace boilerplate branding with WhyRating visual identity:
- Inter + Nunito fonts, blue theme, light mode
- Inline SVG logo component (whyrating.com wordmark)
- Swap logos in header, footer, auth layout
- Generate favicon/icons from brand SVG
- Full landing page: hero, how-it-works, features, testimonials, FAQ
- EN/ES translations for all sections
- Report fan (abanico) component with 3 PDF page previews

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Alejandro Gutiérrez
2026-02-21 19:48:21 +00:00
parent 5cdc07cd39
commit a5aceec46a
23 changed files with 596 additions and 2159 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

View File

@@ -1,42 +1,20 @@
"use client"; import { Banner } from "~/modules/marketing/home/banner";
import { Faq } from "~/modules/marketing/home/faq";
import { useTranslation } from "@turbostarter/i18n"; import { Features } from "~/modules/marketing/home/features";
import { buttonVariants } from "@turbostarter/ui-web/button"; import { Hero } from "~/modules/marketing/home/hero";
import { Icons } from "@turbostarter/ui-web/icons"; import { HowItWorks } from "~/modules/marketing/home/how-it-works";
import { Testimonials } from "~/modules/marketing/home/testimonials";
import { pathsConfig } from "~/config/paths";
import { TurboLink } from "~/modules/common/turbo-link";
const HomePage = () => { const HomePage = () => {
const { t } = useTranslation("common");
return ( return (
<main className="flex min-h-[calc(100vh-4rem)] flex-col items-center justify-center px-4"> <>
<div className="mx-auto max-w-3xl text-center"> <Hero />
<h1 className="text-4xl font-bold tracking-tight sm:text-6xl"> <HowItWorks />
{t("home.title", { defaultValue: "Welcome to TurboStarter" })} <Features />
</h1> <Testimonials />
<p className="mt-6 text-lg leading-8 text-muted-foreground"> <Faq />
{t("home.description", { defaultValue: "The fastest way to build your next SaaS. Authentication, billing, database, and UI components — all pre-configured and ready to go." })} <Banner />
</p> </>
<div className="mt-10 flex items-center justify-center gap-x-6">
<TurboLink
href={pathsConfig.auth.login}
className={buttonVariants({ size: "lg" })}
>
{t("home.getStarted", { defaultValue: "Get Started" })}
<Icons.ArrowRight className="ml-2 size-4" />
</TurboLink>
<TurboLink
href="https://turbostarter.dev/docs"
className={buttonVariants({ variant: "outline", size: "lg" })}
target="_blank"
>
{t("home.documentation", { defaultValue: "Documentation" })}
</TurboLink>
</div>
</div>
</main>
); );
}; };

View File

@@ -1,7 +1,5 @@
import { getTranslation } from "@turbostarter/i18n/server";
import { Icons } from "@turbostarter/ui-web/icons";
import { pathsConfig } from "~/config/paths"; import { pathsConfig } from "~/config/paths";
import { WhyRatingLogo } from "~/modules/common/whyrating-logo";
import { TurboLink } from "~/modules/common/turbo-link"; import { TurboLink } from "~/modules/common/turbo-link";
export default async function AuthLayout({ export default async function AuthLayout({
@@ -9,8 +7,6 @@ export default async function AuthLayout({
}: { }: {
children: React.ReactNode; children: React.ReactNode;
}) { }) {
const { t } = await getTranslation({ ns: "common" });
return ( return (
<main className="grid h-full w-full flex-1 lg:grid-cols-2"> <main className="grid h-full w-full flex-1 lg:grid-cols-2">
<section className="flex h-full flex-col items-center justify-center p-6 lg:p-10"> <section className="flex h-full flex-col items-center justify-center p-6 lg:p-10">
@@ -18,10 +14,9 @@ export default async function AuthLayout({
<TurboLink <TurboLink
href={pathsConfig.index} href={pathsConfig.index}
className="flex shrink-0 items-center gap-3" className="flex shrink-0 items-center gap-3"
aria-label={t("home")} aria-label="whyrating.com"
> >
<Icons.Logo className="text-primary h-8" /> <WhyRatingLogo />
<Icons.LogoText className="text-foreground h-4" />
</TurboLink> </TurboLink>
</header> </header>
<div className="mt-16 mb-auto flex w-full max-w-md flex-col gap-6 pb-16"> <div className="mt-16 mb-auto flex w-full max-w-md flex-col gap-6 pb-16">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -1,15 +1,22 @@
import { Geist_Mono, Geist } from "next/font/google"; import { Geist_Mono, Inter, Nunito } from "next/font/google";
import { cn } from "@turbostarter/ui"; import { cn } from "@turbostarter/ui";
import { appConfig } from "~/config/app"; import { appConfig } from "~/config/app";
const sans = Geist({ const sans = Inter({
subsets: ["latin"], subsets: ["latin"],
display: "swap", display: "swap",
variable: "--font-sans", variable: "--font-sans",
}); });
const wordmark = Nunito({
subsets: ["latin"],
display: "swap",
variable: "--font-wordmark",
weight: ["700"],
});
const mono = Geist_Mono({ const mono = Geist_Mono({
subsets: ["latin"], subsets: ["latin"],
display: "swap", display: "swap",
@@ -24,7 +31,7 @@ interface BaseLayoutProps {
export const BaseLayout = ({ children, locale }: BaseLayoutProps) => { export const BaseLayout = ({ children, locale }: BaseLayoutProps) => {
return ( return (
<html lang={locale} className={cn(sans.variable, mono.variable)}> <html lang={locale} className={cn(sans.variable, wordmark.variable, mono.variable)}>
<body <body
suppressHydrationWarning suppressHydrationWarning
className="bg-background text-foreground flex min-h-screen flex-col items-center justify-center font-sans antialiased" className="bg-background text-foreground flex min-h-screen flex-col items-center justify-center font-sans antialiased"

View File

@@ -0,0 +1,92 @@
import { cn } from "@turbostarter/ui";
interface WhyRatingLogoProps {
className?: string;
iconClassName?: string;
showWordmark?: boolean;
}
export function WhyRatingLogo({
className,
iconClassName,
showWordmark = true,
}: WhyRatingLogoProps) {
return (
<div className={cn("flex items-center gap-2", className)}>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 120 120"
className={cn("h-8 w-8", iconClassName)}
>
<defs>
<clipPath id="whyrating-clip">
<circle cx="60" cy="62" r="21" />
</clipPath>
</defs>
<polygon
points="60,15 71.5,42 101,46 79.5,66 85,95 60,82 35,95 40.5,66 19,46 48.5,42"
fill="#FBBC05"
stroke="#FBBC05"
strokeWidth="6"
strokeLinejoin="round"
/>
<g>
<line
x1="83"
y1="81"
x2="95"
y2="91"
stroke="#1E293B"
strokeWidth="9"
strokeLinecap="round"
/>
<circle cx="60" cy="62" r="27" fill="#1E293B" />
<circle cx="60" cy="62" r="21" fill="#FEF3C7" />
<g clipPath="url(#whyrating-clip)">
<rect
x="42"
y="58"
width="11"
height="35"
rx="1.5"
ry="1.5"
fill="#86EFAC"
/>
<rect
x="55"
y="51"
width="11"
height="42"
rx="1.5"
ry="1.5"
fill="#22C55E"
/>
<rect
x="68"
y="44"
width="11"
height="49"
rx="1.5"
ry="1.5"
fill="#15803D"
/>
</g>
<rect
x="68"
y="44"
width="11"
height="18"
rx="1.5"
ry="1.5"
fill="#15803D"
/>
</g>
</svg>
{showWordmark && (
<span className="font-wordmark font-bold text-foreground text-xl">
whyrating.com
</span>
)}
</div>
);
}

View File

@@ -20,32 +20,32 @@ import {
const questions = [ const questions = [
{ {
question: "faq.question.whatDoesOurPlatformDo.question", question: "faq.question.whatReviewsAnalyzed.question",
answer: "faq.question.whatDoesOurPlatformDo.answer", answer: "faq.question.whatReviewsAnalyzed.answer",
}, },
{ {
question: "faq.question.howWillThisBenefitMyBusiness.question", question: "faq.question.howScoringWorks.question",
answer: "faq.question.howWillThisBenefitMyBusiness.answer", answer: "faq.question.howScoringWorks.answer",
}, },
{ {
question: "faq.question.isMyDataSafe.question", question: "faq.question.deliveryTime.question",
answer: "faq.question.isMyDataSafe.answer", answer: "faq.question.deliveryTime.answer",
}, },
{ {
question: "faq.question.whatKindOfIntegrationsAreAvailable.question", question: "faq.question.whatBusinessTypes.question",
answer: "faq.question.whatKindOfIntegrationsAreAvailable.answer", answer: "faq.question.whatBusinessTypes.answer",
}, },
{ {
question: "faq.question.howEasyIsItToOnboardMyTeam.question", question: "faq.question.dataPrivacy.question",
answer: "faq.question.howEasyIsItToOnboardMyTeam.answer", answer: "faq.question.dataPrivacy.answer",
}, },
{ {
question: "faq.question.whatTypesOfBusinessesCanUseThis.question", question: "faq.question.howManyReviews.question",
answer: "faq.question.whatTypesOfBusinessesCanUseThis.answer", answer: "faq.question.howManyReviews.answer",
}, },
{ {
question: "faq.question.canICustomizeThisToFitMyBusinessNeeds.question", question: "faq.question.reportContents.question",
answer: "faq.question.canICustomizeThisToFitMyBusinessNeeds.answer", answer: "faq.question.reportContents.answer",
}, },
] as const; ] as const;

File diff suppressed because one or more lines are too long

View File

@@ -1,36 +1,34 @@
import { getTranslation } from "@turbostarter/i18n/server"; import { getTranslation } from "@turbostarter/i18n/server";
import { buttonVariants } from "@turbostarter/ui-web/button"; import { buttonVariants } from "@turbostarter/ui-web/button";
import { Icons } from "@turbostarter/ui-web/icons";
import { Marquee } from "@turbostarter/ui-web/marquee";
import { pathsConfig } from "~/config/paths"; import { pathsConfig } from "~/config/paths";
import { ThemedImage } from "~/modules/common/themed-image";
import { TurboLink } from "~/modules/common/turbo-link"; import { TurboLink } from "~/modules/common/turbo-link";
import { CtaButton } from "~/modules/marketing/layout/cta-button"; import { CtaButton } from "~/modules/marketing/layout/cta-button";
import { Section, SectionBadge } from "~/modules/marketing/layout/section"; import { Section, SectionBadge } from "~/modules/marketing/layout/section";
import { ReportFan } from "~/modules/marketing/home/report-fan";
export const Hero = async () => { export const Hero = async () => {
const { t } = await getTranslation(); const { t } = await getTranslation();
return ( return (
<Section id="hero" className="gap-6 sm:gap-6 md:gap-6 lg:gap-6"> <Section id="hero" className="gap-6 sm:gap-6 md:gap-6 lg:gap-6">
<TurboLink href="#" className="animate-fade-in -translate-y-4 opacity-0"> <div className="animate-fade-in -translate-y-4 opacity-0">
<SectionBadge> <SectionBadge>
<div className="w-fit py-0.5 text-center text-xs sm:text-sm">🎉</div> <div className="w-fit py-0.5 text-center text-xs sm:text-sm">
</div>
<div <div
data-orientation="vertical" data-orientation="vertical"
role="none" role="none"
className="bg-border mx-2 h-full w-px shrink-0" className="bg-border mx-2 h-full w-px shrink-0"
></div> ></div>
{t("announcement")} {t("announcement")}
<Icons.ChevronRight className="text-foreground ml-1.5 size-3 shrink-0 transition-transform group-hover:translate-x-0.5" />
</SectionBadge> </SectionBadge>
</TurboLink> </div>
<h1 className="animate-fade-in mt-4 -translate-y-4 text-center text-5xl leading-[0.95] font-semibold tracking-tighter text-balance opacity-0 [--animation-delay:200ms] sm:text-6xl md:text-7xl lg:text-[5.5rem]"> <h1 className="animate-fade-in mt-4 -translate-y-4 text-center text-5xl leading-[0.95] font-semibold tracking-tighter text-balance opacity-0 [--animation-delay:200ms] sm:text-6xl md:text-7xl lg:text-[5.5rem]">
{t("product.title")} {t("product.title")}
</h1> </h1>
<p className="animate-fade-in text-muted-foreground mx-auto mb-3 max-w-[560px] -translate-y-4 text-center text-lg leading-[26px] text-balance opacity-0 [--animation-delay:400ms] sm:text-xl"> <p className="animate-fade-in text-muted-foreground mx-auto mb-3 max-w-[640px] -translate-y-4 text-center text-lg leading-[26px] text-balance opacity-0 [--animation-delay:400ms] sm:text-xl">
{t("product.description")} {t("product.description")}
</p> </p>
<div className="animate-fade-in mx-auto flex w-full -translate-y-4 flex-col gap-2 opacity-0 ease-in-out [--animation-delay:600ms] sm:w-auto sm:flex-row sm:gap-3"> <div className="animate-fade-in mx-auto flex w-full -translate-y-4 flex-col gap-2 opacity-0 ease-in-out [--animation-delay:600ms] sm:w-auto sm:flex-row sm:gap-3">
@@ -43,189 +41,7 @@ export const Hero = async () => {
{t("contact.cta")} {t("contact.cta")}
</TurboLink> </TurboLink>
</div> </div>
<div className="animate-fade-up relative mt-4 -mb-10 opacity-0 [--animation-delay:400ms] [perspective:2000px] after:absolute after:inset-0 after:z-50 after:[background:linear-gradient(to_top,var(--background)_10%,transparent)] sm:mt-8 md:mt-12 lg:mt-16"> <ReportFan />
<div className="bg-opacity-[0.01] before:animate-image-glow rounded-md before:absolute before:top-0 before:bottom-1/2 before:left-0 before:h-full before:w-full before:[background-image:linear-gradient(to_bottom,var(--primary),var(--secondary),transparent_40%)] before:opacity-0 before:[filter:blur(180px)] md:rounded-lg lg:rounded-xl">
<ThemedImage
light="/images/hero/light.webp"
dark="/images/hero/dark.webp"
alt="Hero Image"
className="relative h-full w-full rounded-[inherit] border object-contain"
width={2626}
height={1894}
priority
fetchPriority="high"
/>
</div>
</div>
<div className="md:gap8 flex w-full min-w-0 flex-col items-center justify-center gap-6 lg:gap-10">
<span className="text-muted-foreground mt-4 text-sm font-medium uppercase sm:text-base md:mt-6 lg:mt-10 lg:text-lg">
{t("shippedWith")}
</span>
<div className="relative -mx-6 flex w-[calc(100%+3rem)] flex-col items-center justify-center overflow-hidden">
<Marquee
pauseOnHover
className="[--duration:60s] [--gap:1.5rem] md:[--gap:2rem] lg:[--gap:3rem] xl:[--gap:3.5rem]"
>
<svg
viewBox="0 0 128 26"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="h-5 md:h-6 lg:h-8"
>
<path
d="M107.386 0.01075V4.12575H98.5415V25.775H94.119V4.126H85.0905V0.01075H107.386ZM108.38 23.3207C108.691 23.3207 108.964 23.4327 109.195 23.6572C109.429 23.8815 109.545 24.1502 109.549 24.4632C109.548 24.6686 109.491 24.8698 109.383 25.045C109.278 25.2177 109.131 25.3608 108.955 25.4613C108.781 25.5653 108.582 25.6195 108.38 25.6178C108.056 25.6178 107.781 25.5055 107.55 25.2812C107.319 25.0567 107.205 24.785 107.208 24.4632C107.205 24.1502 107.319 23.8816 107.55 23.6572C107.781 23.4327 108.056 23.3207 108.38 23.3207ZM20.729 25.775L4.4225 5.507V25.7645H0V0H5.52775L26.1292 25.5823L26.1295 4.126L26.1278 0.01075H48.4227V4.12575H30.5518V10.7458H44.9238V14.861H30.5518V21.66H48.423V25.775H20.729ZM62.5962 14.8217L65.4945 18.425L59.5558 25.8055H53.752L62.5962 14.8217ZM59.5558 0.0215L67.0383 9.314L74.4973 0.05L80.2848 0.04125L69.9358 12.9125L80.3015 25.7857H74.4973L53.7685 0.0215H59.5558ZM115.928 14.764H117.887V22.314C117.885 23.0077 117.734 23.601 117.441 24.1003C117.144 24.599 116.733 24.98 116.206 25.2488C115.682 25.5143 115.068 25.6502 114.369 25.6502C113.731 25.6502 113.159 25.5352 112.65 25.3107C112.14 25.0862 111.736 24.7497 111.439 24.3067C111.139 23.864 110.993 23.3117 110.993 22.6505H112.955C112.958 22.9397 113.024 23.1905 113.15 23.4005C113.274 23.6078 113.455 23.7749 113.672 23.8815C113.896 23.994 114.154 24.0502 114.444 24.05C114.759 24.05 115.029 23.985 115.247 23.852C115.466 23.722 115.634 23.5272 115.751 23.2675C115.865 23.0105 115.925 22.6917 115.928 22.3137V14.764ZM125.95 17.7165C125.903 17.259 125.693 16.9015 125.327 16.6478C124.958 16.3908 124.482 16.264 123.898 16.264C123.488 16.264 123.134 16.326 122.84 16.447C122.547 16.571 122.319 16.7362 122.163 16.946C122.008 17.1555 121.929 17.3947 121.923 17.6635C121.923 17.8877 121.977 18.0828 122.082 18.245C122.191 18.4152 122.337 18.5578 122.51 18.6615C122.699 18.7798 122.9 18.8758 123.11 18.9478C123.332 19.0244 123.553 19.0894 123.775 19.1427L124.797 19.3937C125.208 19.4882 125.606 19.615 125.987 19.7775C126.367 19.937 126.711 20.1407 127.014 20.3857C127.317 20.6307 127.557 20.926 127.733 21.2715C127.91 21.617 128 22.0215 128 22.488C128 23.1168 127.838 23.669 127.511 24.1472C127.185 24.6227 126.715 24.9948 126.097 25.2635C125.483 25.5293 124.74 25.665 123.865 25.665C123.02 25.665 122.283 25.535 121.662 25.2752C121.039 25.0185 120.554 24.6403 120.203 24.1443C119.852 23.6483 119.664 23.043 119.637 22.3315H121.579C121.606 22.7035 121.726 23.0135 121.929 23.2645C122.136 23.5125 122.406 23.6955 122.735 23.8195C123.068 23.9407 123.439 24.0028 123.85 24.0028C124.278 24.0028 124.656 23.9377 124.982 23.8107C125.306 23.6837 125.561 23.5068 125.744 23.2763C125.93 23.0488 126.022 22.7802 126.025 22.4732C126.022 22.1927 125.938 21.9595 125.776 21.7763C125.612 21.5933 125.384 21.4398 125.093 21.3158C124.8 21.1918 124.458 21.0795 124.069 20.9823L122.828 20.6693C121.932 20.4418 121.222 20.0965 120.704 19.6327C120.183 19.1692 119.925 18.5553 119.925 17.7845C119.925 17.1528 120.098 16.5975 120.449 16.122C120.797 15.647 121.273 15.2778 121.876 15.015C122.481 14.7493 123.164 14.6193 123.925 14.6193C124.698 14.6193 125.375 14.7493 125.96 15.015C126.544 15.2778 127.002 15.6438 127.335 16.1103C127.667 16.577 127.841 17.1112 127.85 17.7165H125.95Z"
fill="var(--foreground)"
/>
</svg>
<svg
viewBox="0 0 512 145"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="h-6 md:h-8 lg:h-11"
>
<path
d="M66.678 46.541C67.829 44.845 69.088 44.629 70.111 44.629C71.134 44.629 72.835 44.845 73.986 46.541C83.056 59.001 98.029 83.818 109.074 102.126C116.276 114.065 121.808 123.234 122.943 124.401C127.203 128.782 133.047 126.051 136.442 121.083C139.785 116.191 140.712 112.756 140.712 109.091C140.712 106.595 92.285 16.529 87.408 9.032C82.718 1.822 81.19 0 73.162 0H67.155C59.152 0 57.995 1.821 53.305 9.032C48.428 16.53 0 106.595 0 109.092C0 112.756 0.928 116.191 4.27 121.082C7.666 126.052 13.51 128.782 17.77 124.402C18.905 123.234 24.437 114.065 31.64 102.126C42.683 83.818 57.607 59 66.677 46.54M387.842 39.395C407.788 39.395 423.649 57.402 423.649 79.674C423.649 101.946 407.788 120.111 387.842 120.111C377.162 120.111 368.839 115.688 363.499 107.632V144.12H341.355V40.974H363.5V51.874C368.84 43.818 377.164 39.394 387.843 39.394M471.953 39.394C494.567 39.395 512 56.77 512 79.832C512 102.894 494.566 120.111 471.953 120.111C449.179 120.111 431.903 102.893 431.903 79.831C431.903 56.77 449.179 39.394 471.953 39.394ZM241.753 7.96V30.39H197.622V50.293H236.885V72.723H197.62V96.1H241.751V118.53H174.377V7.961L241.753 7.96ZM277.786 40.973L290.506 59.296L303.385 40.973H329.77L303.7 78.409L331.654 118.53H304.955L290.35 97.523L275.744 118.531H249.36L277.157 78.568L251.087 40.974L277.786 40.973ZM382.818 60.56C371.981 60.56 363.5 68.932 363.5 79.673C363.5 90.572 371.98 98.786 382.818 98.786C393.497 98.786 402.135 90.414 402.135 79.673C402.135 69.09 393.497 60.56 382.818 60.56ZM471.954 60.718C461.428 60.718 453.578 68.774 453.578 79.831C453.578 90.571 461.428 98.786 471.954 98.786C482.317 98.786 490.329 90.572 490.329 79.831C490.329 68.774 482.317 60.718 471.954 60.718Z"
fill="var(--foreground)"
/>
</svg>
<svg
viewBox="0 0 512 116"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="h-6 md:h-8 lg:h-10"
>
<g clipPath="url(#clip0_4002_15928)">
<path
d="M255.42 28.976C235.427 28.976 221.012 42.015 221.012 61.573C221.012 81.132 237.238 94.171 257.232 94.171C269.311 94.171 279.959 89.39 286.552 81.331L272.697 73.327C269.039 77.329 263.479 79.665 257.231 79.665C248.557 79.665 241.186 75.138 238.451 67.894H289.195C289.594 65.865 289.829 63.764 289.829 61.555C289.829 42.015 275.414 28.976 255.42 28.976ZM238.29 55.235C240.553 48.009 246.747 43.463 255.403 43.463C264.078 43.463 270.272 48.009 272.517 55.235H238.29ZM450.428 28.975C430.435 28.975 416.019 42.015 416.019 61.573C416.019 81.132 432.245 94.171 452.239 94.171C464.318 94.171 474.966 89.39 481.559 81.331L467.704 73.327C464.046 77.329 458.487 79.665 452.239 79.665C443.564 79.665 436.193 75.138 433.459 67.894H484.2C484.599 65.865 484.834 63.764 484.834 61.555C484.834 42.015 470.419 28.975 450.426 28.975M433.312 55.235C435.576 48.009 441.769 43.463 450.426 43.463C459.1 43.463 465.294 48.009 467.539 55.235H433.312ZM362.629 61.573C362.629 72.439 369.729 79.683 380.739 79.683C388.2 79.683 393.796 76.297 396.676 70.773L410.584 78.796C404.825 88.394 394.032 94.171 380.739 94.171C360.728 94.171 346.331 81.131 346.331 61.573C346.331 42.015 360.746 28.976 380.739 28.976C394.032 28.976 404.807 34.753 410.584 44.351L396.676 52.374C393.796 46.85 388.2 43.464 380.739 43.464C369.747 43.464 362.629 50.706 362.629 61.573ZM512 9.055V92.36H495.701V9.055H512ZM66.916 0L133.831 115.903H0L66.916 0ZM234.214 9.055L184.032 95.982L133.849 9.055H152.666L184.032 63.385L215.398 9.055H234.214ZM340.899 30.787V48.335C339.088 47.81 337.169 47.448 335.104 47.448C324.582 47.448 316.994 54.692 316.994 65.558V92.36H300.695V30.787H316.994V47.447C316.994 38.247 327.697 30.787 340.899 30.787Z"
fill="var(--foreground)"
/>
</g>
<defs>
<clipPath id="clip0_4002_15928">
<rect width="512" height="116" fill="white" />
</clipPath>
</defs>
</svg>
<svg
viewBox="0 0 450 165"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="h-7 md:h-9 lg:h-12"
>
<path
opacity="0.993"
d="M67.0645 0.0144212C67.5029 -0.0422455 67.8894 0.0680878 68.224 0.345421C80.5358 15.3702 92.1437 30.9581 103.011 47.0589C111.058 59.1743 117.905 71.9846 123.552 85.4899C132.57 109.544 127.877 130.471 109.472 148.272C93.3672 161.882 74.8142 167.183 53.8125 164.174C28.7085 159.056 11.6464 144.534 2.62605 120.608C0.276714 112.819 -0.496286 104.868 0.307047 96.7549C1.64505 82.7896 4.95805 69.3166 10.246 56.3359C12.4494 51.0399 15.3207 46.1809 18.86 41.7589C21.7445 45.1944 24.5071 48.7304 27.1425 52.3604C28.3625 53.6354 29.6325 54.8503 30.9525 56.0049C41.0302 36.0059 53.0677 17.3424 67.065 0.0144212"
fill="#FF5B11"
/>
<path
d="M64.7445 26.8501C76.9012 40.9501 87.8895 55.9691 97.7095 71.9071C100.782 77.1678 103.334 82.7157 105.33 88.4721C109.499 104.874 105.026 118.402 91.9115 129.057C79.2282 137.981 65.3135 140.632 50.1675 137.008C33.8345 131.939 24.3924 120.951 21.841 104.043C21.222 98.7121 21.7744 93.5218 23.498 88.4721C25.9436 82.2554 28.937 76.2685 32.443 70.5821L42.382 56.0046C49.9011 46.3361 57.3556 36.6175 64.745 26.8496"
fill="#FF9758"
/>
<path
d="M185.088 129V49.9485H201.05V81.0622H232.325V49.9485H248.287V129H232.325V94.4352H201.05V129H185.088ZM257.915 99.5579C257.915 94.5251 259.155 89.654 261.636 84.9447C264.116 80.2354 267.621 76.6405 272.151 74.1601C276.716 71.6796 281.803 70.4394 287.411 70.4394C296.075 70.4394 303.175 73.2614 308.711 78.9053C314.247 84.5133 317.015 91.6132 317.015 100.205C317.015 108.869 314.211 116.058 308.603 121.774C303.031 127.454 296.003 130.294 287.519 130.294C282.27 130.294 277.256 129.108 272.474 126.735C267.729 124.363 264.116 120.894 261.636 116.328C259.155 111.727 257.915 106.137 257.915 99.5579ZM273.445 100.367C273.445 106.047 274.793 110.396 277.489 113.416C280.185 116.436 283.511 117.946 287.465 117.946C291.419 117.946 294.727 116.436 297.387 113.416C300.083 110.396 301.431 106.011 301.431 100.259C301.431 94.6509 300.083 90.337 297.387 87.3173C294.727 84.2976 291.419 82.7878 287.465 82.7878C283.511 82.7878 280.185 84.2976 277.489 87.3173C274.793 90.337 273.445 94.6868 273.445 100.367ZM377.709 129H362.556V99.7736C362.556 93.5904 362.233 89.6001 361.586 87.8026C360.939 85.9693 359.878 84.5493 358.404 83.5427C356.966 82.5361 355.223 82.0329 353.174 82.0329C350.549 82.0329 348.195 82.7518 346.11 84.1898C344.025 85.6277 342.587 87.533 341.796 89.9057C341.041 92.2783 340.663 96.664 340.663 103.063V129H325.511V71.7335H339.585V80.1455C344.582 73.6748 350.873 70.4394 358.458 70.4394C361.801 70.4394 364.857 71.0505 367.625 72.2728C370.393 73.4591 372.478 74.9869 373.88 76.8562C375.318 78.7256 376.307 80.8466 376.846 83.2192C377.421 85.5918 377.709 88.989 377.709 93.4107V129ZM386.313 99.5579C386.313 94.5251 387.553 89.654 390.033 84.9447C392.514 80.2354 396.019 76.6405 400.548 74.1601C405.114 71.6796 410.201 70.4394 415.809 70.4394C424.472 70.4394 431.572 73.2614 437.108 78.9053C442.645 84.5133 445.413 91.6132 445.413 100.205C445.413 108.869 442.609 116.058 437.001 121.774C431.429 127.454 424.401 130.294 415.917 130.294C410.668 130.294 405.653 129.108 400.872 126.735C396.127 124.363 392.514 120.894 390.033 116.328C387.553 111.727 386.313 106.137 386.313 99.5579ZM401.843 100.367C401.843 106.047 403.191 110.396 405.887 113.416C408.583 116.436 411.908 117.946 415.863 117.946C419.817 117.946 423.124 116.436 425.785 113.416C428.481 110.396 429.829 106.011 429.829 100.259C429.829 94.6509 428.481 90.337 425.785 87.3173C423.124 84.2976 419.817 82.7878 415.863 82.7878C411.908 82.7878 408.583 84.2976 405.887 87.3173C403.191 90.337 401.843 94.6868 401.843 100.367Z"
fill="var(--foreground)"
/>
</svg>
<svg
className="h-7 md:h-9 lg:h-11"
viewBox="0 0 473 76"
fill="none"
>
<path
d="M130.998 30.6565V22.3773H91.0977V30.6565H106.16V58.1875H115.935V30.6565H130.998Z"
fill="var(--foreground)"
></path>
<path
d="M153.542 58.7362C165.811 58.7362 172.544 52.5018 172.544 42.2275V22.3773H162.768V41.2799C162.768 47.0155 159.776 50.2574 153.542 50.2574C147.307 50.2574 144.315 47.0155 144.315 41.2799V22.3773H134.539V42.2275C134.539 52.5018 141.272 58.7362 153.542 58.7362Z"
fill="var(--foreground)"
></path>
<path
d="M187.508 46.3173H197.234L204.914 58.1875H216.136L207.458 45.2699C212.346 43.5243 215.338 39.634 215.338 34.3473C215.338 26.6665 209.603 22.3773 200.874 22.3773H177.732V58.1875H187.508V46.3173ZM187.508 38.5867V30.5568H200.376C203.817 30.5568 205.712 32.053 205.712 34.5967C205.712 36.9907 203.817 38.5867 200.376 38.5867H187.508Z"
fill="var(--foreground)"
></path>
<path
d="M219.887 58.1875H245.472C253.452 58.1875 258.041 54.397 258.041 48.0629C258.041 43.8235 255.348 40.9308 252.156 39.634C254.35 38.5867 257.043 36.0929 257.043 32.1528C257.043 25.8187 252.555 22.3773 244.625 22.3773H219.887V58.1875ZM229.263 36.3922V30.3074H243.627C246.32 30.3074 247.817 31.3548 247.817 33.3498C247.817 35.3448 246.32 36.3922 243.627 36.3922H229.263ZM229.263 43.7238H244.525C247.168 43.7238 248.615 45.0205 248.615 46.9657C248.615 48.9108 247.168 50.2075 244.525 50.2075H229.263V43.7238Z"
fill="var(--foreground)"
></path>
<path
d="M281.942 21.7788C269.423 21.7788 260.396 29.6092 260.396 40.2824C260.396 50.9557 269.423 58.786 281.942 58.786C294.461 58.786 303.438 50.9557 303.438 40.2824C303.438 29.6092 294.461 21.7788 281.942 21.7788ZM281.942 30.2575C288.525 30.2575 293.463 34.1478 293.463 40.2824C293.463 46.417 288.525 50.3073 281.942 50.3073C275.359 50.3073 270.421 46.417 270.421 40.2824C270.421 34.1478 275.359 30.2575 281.942 30.2575Z"
fill="var(--foreground)"
></path>
<path
d="M317.526 46.3173H327.251L334.932 58.1875H346.154L337.476 45.2699C342.364 43.5243 345.356 39.634 345.356 34.3473C345.356 26.6665 339.62 22.3773 330.892 22.3773H307.75V58.1875H317.526V46.3173ZM317.526 38.5867V30.5568H330.394C333.835 30.5568 335.73 32.053 335.73 34.5967C335.73 36.9907 333.835 38.5867 330.394 38.5867H317.526Z"
fill="var(--foreground)"
></path>
<path
d="M349.904 22.3773V58.1875H384.717V49.9083H359.48V44.0729H381.874V35.9932H359.48V30.6565H384.717V22.3773H349.904Z"
fill="var(--foreground)"
></path>
<path
d="M399.204 46.7662H412.221C420.95 46.7662 426.685 42.5767 426.685 34.5967C426.685 26.5668 420.95 22.3773 412.221 22.3773H389.428V58.1875H399.204V46.7662ZM399.204 38.6365V30.5568H411.673C415.164 30.5568 417.059 32.053 417.059 34.5967C417.059 37.0904 415.164 38.6365 411.673 38.6365H399.204Z"
fill="var(--foreground)"
></path>
<path
d="M450.948 21.7788C438.43 21.7788 429.402 29.6092 429.402 40.2824C429.402 50.9557 438.43 58.786 450.948 58.786C463.467 58.786 472.444 50.9557 472.444 40.2824C472.444 29.6092 463.467 21.7788 450.948 21.7788ZM450.948 30.2575C457.532 30.2575 462.469 34.1478 462.469 40.2824C462.469 46.417 457.532 50.3073 450.948 50.3073C444.365 50.3073 439.427 46.417 439.427 40.2824C439.427 34.1478 444.365 30.2575 450.948 30.2575Z"
fill="var(--foreground)"
></path>
<path
d="M38.5017 18.0956C27.2499 18.0956 18.0957 27.2498 18.0957 38.5016C18.0957 49.7534 27.2499 58.9076 38.5017 58.9076C49.7535 58.9076 58.9077 49.7534 58.9077 38.5016C58.9077 27.2498 49.7535 18.0956 38.5017 18.0956ZM38.5017 49.0618C32.6687 49.0618 27.9415 44.3346 27.9415 38.5016C27.9415 32.6686 32.6687 27.9414 38.5017 27.9414C44.3347 27.9414 49.0619 32.6686 49.0619 38.5016C49.0619 44.3346 44.3347 49.0618 38.5017 49.0618Z"
fill="var(--foreground)"
></path>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M40.2115 14.744V7.125C56.7719 8.0104 69.9275 21.7208 69.9275 38.5016C69.9275 55.2824 56.7719 68.989 40.2115 69.8782V62.2592C52.5539 61.3776 62.3275 51.0644 62.3275 38.5016C62.3275 25.9388 52.5539 15.6256 40.2115 14.744ZM20.5048 54.0815C17.233 50.3043 15.124 45.4935 14.7478 40.2115H7.125C7.5202 47.6025 10.4766 54.3095 15.1088 59.4737L20.501 54.0815H20.5048ZM36.7916 69.8782V62.2592C31.5058 61.883 26.695 59.7778 22.9178 56.5022L17.5256 61.8944C22.6936 66.5304 29.4006 69.483 36.7878 69.8782H36.7916Z"
fill="url(#paint0_linear_2028_252)"
></path>
<defs>
<linearGradient
id="paint0_linear_2028_252"
x1="41.443"
y1="11.5372"
x2="10.5567"
y2="42.4236"
gradientUnits="userSpaceOnUse"
>
<stop stopColor="#0096FF"></stop>
<stop offset="1" stopColor="#FF1E56"></stop>
</linearGradient>
</defs>
</svg>
<svg
viewBox="0 0 407 139"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className="h-6 md:h-8 lg:h-10"
>
<path
d="M54.0447 105.252H45.0427V137.633H69.6851V129.783H54.0447V105.252ZM96.4651 104.562C86.4812 104.562 78.9784 112.123 78.9784 121.413V121.528C78.9784 130.821 86.3666 138.265 96.3506 138.265C106.335 138.265 113.837 130.703 113.837 121.413V121.299C113.837 112.005 106.449 104.562 96.4651 104.562ZM104.717 121.528C104.717 126.202 101.428 130.186 96.4651 130.186C91.5583 130.186 88.2128 126.147 88.2128 121.472V121.358C88.2128 116.683 91.5026 112.699 96.4095 112.699C101.372 112.699 104.721 116.739 104.721 121.413L104.717 121.528ZM145.868 123.492C145.868 127.993 143.501 130.13 139.923 130.13C136.345 130.13 133.979 127.937 133.979 123.263V105.255H124.859V123.436C124.859 133.594 130.63 138.212 139.805 138.212C149.04 138.212 154.984 133.653 154.984 123.207V105.259H145.865L145.868 123.492ZM181.192 105.252H168.726V137.63H181.018C192.678 137.63 199.487 130.703 199.487 121.354V121.24C199.487 111.891 192.734 105.252 181.192 105.252ZM190.308 121.472C190.308 126.723 186.73 129.669 181.362 129.669V129.61H177.725V113.161H181.362C186.73 113.161 190.308 116.163 190.308 121.358V121.472ZM212.528 137.633H221.474V126.088H236.827V118.644H221.474V113.102H238.444V105.252H212.528V137.633ZM259.856 105.252H250.909V137.633H275.555V129.783H259.856V105.252ZM298.986 105.023L285.251 137.633H294.659L296.966 131.862H309.432L311.798 137.633H321.435L307.641 105.023H298.986ZM299.677 124.876L303.314 115.701L306.892 124.876H299.677ZM361.722 116.451V116.336C361.722 113.105 360.74 110.624 358.834 108.774C356.641 106.522 353.237 105.252 348.271 105.252H332.978V137.689H341.98V127.878H345.904L352.425 137.689H362.815L355.08 126.376C359.067 124.703 361.722 121.413 361.722 116.451ZM352.661 116.971C352.661 119.279 350.929 120.781 347.872 120.781H341.927V113.046H347.813C350.815 113.046 352.661 114.316 352.661 116.857V116.971ZM383.536 130.013V124.876H399.062V117.776H383.536V112.873H400.679V105.252H374.648V137.633H400.908V130.013H383.536ZM17.9747 112.699C21.6671 112.699 24.4953 114.951 25.6509 118.068H35.1177C33.6184 110.333 26.8064 104.62 18.0336 104.62C8.04959 104.62 0.546875 112.182 0.546875 121.472V121.587C0.546875 130.88 7.93502 138.324 17.919 138.324C26.4594 138.324 33.1569 132.782 34.8885 125.397L25.425 125.338C24.1549 128.166 21.5001 130.186 18.0369 130.186C13.13 130.186 9.78452 126.088 9.78452 121.472V121.358C9.77797 116.68 13.0678 112.699 17.9747 112.699Z"
fill="var(--foreground)"
/>
<path
d="M390.081 53.605L365.32 39.4048L361.048 37.5586L259.762 38.2526V89.675H390.081V53.605Z"
fill="var(--background)"
/>
<path
d="M344.99 84.9333C346.201 80.7793 345.74 76.969 343.72 74.1408C341.874 71.5449 338.757 70.0424 335.006 69.8689L263.959 68.9458C263.743 68.9478 263.53 68.8962 263.339 68.7957C263.147 68.6951 262.984 68.5488 262.863 68.3697C262.75 68.1806 262.676 67.9706 262.646 67.7524C262.617 67.5341 262.631 67.3121 262.689 67.0996C262.819 66.7513 263.045 66.447 263.342 66.2222C263.638 65.9974 263.992 65.8612 264.362 65.8295L336.044 64.9064C344.528 64.5038 353.763 57.6328 356.994 49.207L361.092 38.5291C361.273 38.0905 361.313 37.6067 361.207 37.1444C358.9 26.7904 353.13 17.533 344.851 10.9011C336.571 4.26925 326.278 0.659642 315.67 0.668473C295.122 0.668473 277.695 13.9423 271.462 32.3553C267.236 29.2087 261.989 27.7477 256.745 28.257C251.939 28.751 247.449 30.8858 244.033 34.3022C240.617 37.7185 238.482 42.2077 237.988 47.0138C237.748 49.4688 237.924 51.9466 238.508 54.343C230.744 54.5638 223.373 57.8052 217.962 63.3774C212.551 68.9497 209.528 76.4133 209.535 84.1804C209.535 85.624 209.65 87.0676 209.823 88.5079C209.938 89.2019 210.517 89.7191 211.208 89.7191H342.335C342.713 89.7115 343.078 89.5845 343.378 89.3563C343.679 89.128 343.899 88.8104 344.008 88.449L344.99 84.9333Z"
fill="#F38020"
/>
<path
d="M367.599 39.2847C366.964 39.2847 366.27 39.2847 365.638 39.3436C365.176 39.3436 364.774 39.6906 364.6 40.1521L361.831 49.7891C360.62 53.9431 361.081 57.7534 363.101 60.5817C364.947 63.1775 368.063 64.68 371.815 64.8535L386.935 65.7766C387.396 65.7766 387.799 66.009 388.031 66.3527C388.144 66.5419 388.218 66.7518 388.248 66.9701C388.278 67.1883 388.263 67.4103 388.205 67.6228C388.075 67.9711 387.849 68.2754 387.553 68.5002C387.257 68.7251 386.903 68.8612 386.532 68.8929L370.777 69.816C362.237 70.2187 353.058 77.0896 349.827 85.5154L348.672 88.4582C348.439 89.0344 348.845 89.6138 349.48 89.6138H403.616C404.251 89.6138 404.827 89.2111 405.001 88.5761C405.924 85.2274 406.445 81.7084 406.445 78.0716C406.441 56.7157 389.01 39.2847 367.599 39.2847Z"
fill="#FAAE40"
/>
</svg>
</Marquee>
<div className="from-background pointer-events-none absolute inset-y-0 left-0 w-1/6 bg-gradient-to-r sm:w-1/5"></div>
<div className="from-background pointer-events-none absolute inset-y-0 right-0 w-1/6 bg-gradient-to-l sm:w-1/5"></div>
</div>
</div>
</Section> </Section>
); );
}; };

View File

@@ -0,0 +1,75 @@
import { getTranslation } from "@turbostarter/i18n/server";
import { cn } from "@turbostarter/ui";
import { Icons } from "@turbostarter/ui-web/icons";
import {
Section,
SectionBadge,
SectionDescription,
SectionHeader,
SectionTitle,
} from "~/modules/marketing/layout/section";
const steps = [
{
key: "share",
icon: Icons.Link,
number: "1",
},
{
key: "analyze",
icon: Icons.Search,
number: "2",
},
{
key: "receive",
icon: Icons.FileText,
number: "3",
},
] as const;
export const HowItWorks = async () => {
const { t } = await getTranslation({ ns: "marketing" });
return (
<Section id="how-it-works">
<SectionHeader>
<SectionBadge>{t("howItWorks.label")}</SectionBadge>
<SectionTitle>{t("howItWorks.title")}</SectionTitle>
<SectionDescription>{t("howItWorks.description")}</SectionDescription>
</SectionHeader>
<div className="grid w-full max-w-5xl grid-cols-1 gap-8 md:grid-cols-3 md:gap-4 lg:gap-8">
{steps.map((step, index) => (
<div key={step.key} className="relative flex flex-col items-center text-center">
{index < steps.length - 1 && (
<div className="text-muted-foreground/30 absolute top-10 right-0 hidden translate-x-1/2 md:block">
<Icons.ChevronRight className="size-6" />
</div>
)}
<div
className={cn(
"bg-primary/10 text-primary mb-4 flex size-20 items-center justify-center rounded-2xl",
)}
>
<step.icon className="size-8" />
</div>
<span className="text-muted-foreground mb-2 text-sm font-medium">
Step {step.number}
</span>
<h3 className="mb-2 text-lg font-semibold">
{t(`howItWorks.steps.${step.key}.title` as const)}
</h3>
<p className="text-muted-foreground text-sm text-balance">
{t(`howItWorks.steps.${step.key}.description` as const)}
</p>
</div>
))}
</div>
</Section>
);
};

View File

@@ -0,0 +1,43 @@
import Image from "next/image";
export const ReportFan = () => {
return (
<div className="animate-fade-in relative mx-auto mt-8 -translate-y-4 opacity-0 [--animation-delay:800ms]">
<div className="relative flex h-[320px] w-[500px] items-end justify-center sm:h-[400px] sm:w-[600px] md:h-[480px] md:w-[720px]">
{/* Left page - peeking from behind */}
<div className="absolute bottom-0 left-0 z-0 w-[45%] origin-bottom-center -rotate-6 drop-shadow-xl">
<Image
src="/images/report/page-2.png"
alt="Report table of contents"
width={1653}
height={2339}
className="rounded-lg"
/>
</div>
{/* Right page - peeking from behind */}
<div className="absolute right-0 bottom-0 z-0 w-[45%] origin-bottom-center rotate-6 drop-shadow-xl">
<Image
src="/images/report/page-3.png"
alt="Report reading guide"
width={1653}
height={2339}
className="rounded-lg"
/>
</div>
{/* Center page - full cover */}
<div className="relative z-10 w-[50%] drop-shadow-2xl">
<Image
src="/images/report/page-1.png"
alt="Reputation Blueprint cover"
width={1653}
height={2339}
className="rounded-lg"
priority
/>
</div>
</div>
</div>
);
};

View File

@@ -13,42 +13,42 @@ import { Marquee } from "@turbostarter/ui-web/marquee";
import { import {
Section, Section,
SectionBadge,
SectionDescription, SectionDescription,
SectionHeader, SectionHeader,
SectionTitle,
} from "~/modules/marketing/layout/section"; } from "~/modules/marketing/layout/section";
import { SectionBadge } from "~/modules/marketing/layout/section";
import { SectionTitle } from "~/modules/marketing/layout/section";
const reviews = [ const reviews = [
{ {
name: "testimonials.reviews.jack.name", name: "testimonials.reviews.maria.name",
body: "testimonials.reviews.jack.body", body: "testimonials.reviews.maria.body",
img: "https://avatar.vercel.sh/jack", img: "https://avatar.vercel.sh/maria",
position: "testimonials.reviews.jack.position", position: "testimonials.reviews.maria.position",
}, },
{ {
name: "testimonials.reviews.jill.name", name: "testimonials.reviews.carlos.name",
body: "testimonials.reviews.jill.body", body: "testimonials.reviews.carlos.body",
img: "https://avatar.vercel.sh/jill", img: "https://avatar.vercel.sh/carlos",
position: "testimonials.reviews.jill.position", position: "testimonials.reviews.carlos.position",
}, },
{ {
name: "testimonials.reviews.john.name", name: "testimonials.reviews.elena.name",
body: "testimonials.reviews.john.body", body: "testimonials.reviews.elena.body",
img: "https://avatar.vercel.sh/john", img: "https://avatar.vercel.sh/elena",
position: "testimonials.reviews.john.position", position: "testimonials.reviews.elena.position",
}, },
{ {
name: "testimonials.reviews.sarah.name", name: "testimonials.reviews.david.name",
body: "testimonials.reviews.sarah.body", body: "testimonials.reviews.david.body",
img: "https://avatar.vercel.sh/sarah", img: "https://avatar.vercel.sh/david",
position: "testimonials.reviews.sarah.position", position: "testimonials.reviews.david.position",
}, },
{ {
name: "testimonials.reviews.mike.name", name: "testimonials.reviews.sofia.name",
body: "testimonials.reviews.mike.body", body: "testimonials.reviews.sofia.body",
img: "https://avatar.vercel.sh/mike", img: "https://avatar.vercel.sh/sofia",
position: "testimonials.reviews.mike.position", position: "testimonials.reviews.sofia.position",
}, },
] as const; ] as const;

View File

@@ -6,55 +6,22 @@ import { Icons } from "@turbostarter/ui-web/icons";
import { appConfig } from "~/config/app"; import { appConfig } from "~/config/app";
import { pathsConfig } from "~/config/paths"; import { pathsConfig } from "~/config/paths";
import { I18nControls } from "~/modules/common/i18n/controls"; import { I18nControls } from "~/modules/common/i18n/controls";
import { WhyRatingLogo } from "~/modules/common/whyrating-logo";
import { TurboLink } from "~/modules/common/turbo-link"; import { TurboLink } from "~/modules/common/turbo-link";
const socials = [ const socials: { id: string; href: string; icon: typeof Icons.Twitter }[] = [];
{
id: "x",
href: "https://x.com/turbostarter_",
icon: Icons.Twitter,
},
{
id: "github",
href: "https://github.com/turbostarter",
icon: Icons.Github,
},
{
id: "facebook",
href: "#",
icon: Icons.Facebook,
},
{
id: "linkedin",
href: "#",
icon: Icons.Linkedin,
},
];
const links = [ const links = [
{ {
label: "common:product", label: "common:product",
items: [ items: [
{ {
title: "marketing:product.mobile.ios.title", title: "marketing:howItWorks.label",
href: "https://turbostarter.dev", href: "/#how-it-works",
}, },
{ {
title: "marketing:product.mobile.android.title", title: "billing:pricing.label",
href: "https://turbostarter.dev", href: pathsConfig.marketing.pricing,
},
{
title: "marketing:product.extension.chrome.title",
href: "https://chromewebstore.google.com/detail/bcjmonmlfbnngpkllpnpmnjajaciaboo",
},
{
title: "marketing:product.extension.firefox.title",
href: "https://addons.mozilla.org/addon/turbostarter_",
},
{
title: "marketing:product.extension.edge.title",
href: "https://microsoftedge.microsoft.com/addons/detail/turbostarter/ianbflanmmoeleokihabnmmcahhfijig",
}, },
], ],
}, },
@@ -65,27 +32,6 @@ const links = [
title: "marketing:contact.label", title: "marketing:contact.label",
href: pathsConfig.marketing.contact, href: pathsConfig.marketing.contact,
}, },
{
title: "marketing:roadmap.title",
href: "https://github.com/orgs/turbostarter/projects/1",
},
{
title: "marketing:docs.title",
href: "https://turbostarter.dev/docs/web",
},
{
title: "marketing:api.title",
href: "#",
},
],
},
{
label: "about",
items: [
{
title: "billing:pricing.label",
href: pathsConfig.marketing.pricing,
},
{ {
title: "marketing:blog.label", title: "marketing:blog.label",
href: pathsConfig.marketing.blog.index, href: pathsConfig.marketing.blog.index,
@@ -120,10 +66,9 @@ export const Footer = async () => {
<TurboLink <TurboLink
href={pathsConfig.index} href={pathsConfig.index}
className="flex shrink-0 items-center gap-3" className="flex shrink-0 items-center gap-3"
aria-label={t("home")} aria-label="whyrating.com"
> >
<Icons.Logo className="text-primary h-8" /> <WhyRatingLogo />
<Icons.LogoText className="text-foreground h-4" />
</TurboLink> </TurboLink>
<p className="text-muted-foreground text-sm text-pretty"> <p className="text-muted-foreground text-sm text-pretty">

View File

@@ -1,10 +1,7 @@
"use client"; "use client";
import { useTranslation } from "@turbostarter/i18n";
import { Icons } from "@turbostarter/ui-web/icons";
import { pathsConfig } from "~/config/paths"; import { pathsConfig } from "~/config/paths";
import { ThemeControls } from "~/modules/common/theme"; import { WhyRatingLogo } from "~/modules/common/whyrating-logo";
import { TurboLink } from "~/modules/common/turbo-link"; import { TurboLink } from "~/modules/common/turbo-link";
import { CtaButton } from "~/modules/marketing/layout/cta-button"; import { CtaButton } from "~/modules/marketing/layout/cta-button";
@@ -13,73 +10,17 @@ import { Navigation } from "./navigation/navigation";
const links = [ const links = [
{ {
label: "product", label: "marketing:howItWorks.label",
items: [ href: "/#how-it-works",
{
title: "marketing:product.mobile.ios.title",
description: "marketing:product.mobile.ios.description",
href: "https://apps.apple.com/app/id6754278899",
icon: Icons.AppleStroke,
},
{
title: "marketing:product.mobile.android.title",
description: "marketing:product.mobile.android.description",
href: "https://play.google.com/store/apps/details?id=com.turbostarter.core",
icon: Icons.AndroidStroke,
},
{
title: "marketing:product.extension.chrome.title",
description: "marketing:product.extension.chrome.description",
href: "https://chromewebstore.google.com/detail/bcjmonmlfbnngpkllpnpmnjajaciaboo",
icon: Icons.ChromeStroke,
},
{
title: "marketing:product.extension.firefox.title",
description: "marketing:product.extension.firefox.description",
href: "https://addons.mozilla.org/addon/turbostarter_",
icon: Icons.FirefoxStroke,
},
{
title: "marketing:product.extension.edge.title",
description: "marketing:product.extension.edge.description",
href: "https://microsoftedge.microsoft.com/addons/detail/turbostarter/ianbflanmmoeleokihabnmmcahhfijig",
icon: Icons.EdgeStroke,
},
],
},
{
label: "resources",
items: [
{
title: "marketing:contact.label",
description: "marketing:contact.description",
href: pathsConfig.marketing.contact,
icon: Icons.SendHorizontal,
},
{
title: "marketing:roadmap.title",
description: "marketing:roadmap.description",
href: "https://github.com/orgs/turbostarter/projects/1",
icon: Icons.ChartNoAxesGantt,
},
{
title: "marketing:docs.title",
description: "marketing:docs.description",
href: "https://turbostarter.dev/docs/web",
icon: Icons.BookOpen,
},
{
title: "marketing:api.title",
description: "marketing:api.description",
href: "#",
icon: Icons.Webhook,
},
],
}, },
{ {
label: "billing:pricing.label", label: "billing:pricing.label",
href: pathsConfig.marketing.pricing, href: pathsConfig.marketing.pricing,
}, },
{
label: "marketing:contact.label",
href: pathsConfig.marketing.contact,
},
{ {
label: "marketing:blog.label", label: "marketing:blog.label",
href: pathsConfig.marketing.blog.index, href: pathsConfig.marketing.blog.index,
@@ -87,23 +28,20 @@ const links = [
] as const; ] as const;
export const Header = () => { export const Header = () => {
const { t } = useTranslation("common");
return ( return (
<header className="bg-background/80 sticky inset-0 top-[var(--banner-height)] z-40 w-full py-3 backdrop-blur-sm"> <header className="bg-background/80 sticky inset-0 top-[var(--banner-height)] z-40 w-full py-3 backdrop-blur-sm">
<div className="flex items-center justify-between px-6 pr-4 sm:container"> <div className="flex items-center justify-between px-6 pr-4 sm:container">
<TurboLink <TurboLink
href={pathsConfig.index} href={pathsConfig.index}
className="flex shrink-0 items-center gap-3" className="flex shrink-0 items-center gap-3"
aria-label={t("home")} aria-label="whyrating.com"
> >
<Icons.Logo className="text-primary h-8" /> <WhyRatingLogo />
<Icons.LogoText className="text-foreground h-4" />
</TurboLink> </TurboLink>
<Navigation links={links} /> <Navigation links={links} />
<div className="flex items-center justify-center lg:gap-2"> <div className="flex items-center justify-center lg:gap-2">
<ThemeControls />
<CtaButton className="hidden lg:inline-flex" /> <CtaButton className="hidden lg:inline-flex" />
<MobileNavigation links={links} /> <MobileNavigation links={links} />
</div> </div>

View File

@@ -2,8 +2,8 @@
"currency": "usd", "currency": "usd",
"pricing": { "pricing": {
"label": "Pricing", "label": "Pricing",
"title": "Simple plans for everyone", "title": "One report. Complete clarity.",
"description": "Choose the plan that suits your needs and start your journey to success." "description": "Choose the right option for your business. No subscriptions, no recurring fees."
}, },
"manage": { "manage": {
"plan": { "plan": {
@@ -17,7 +17,7 @@
}, },
"description": "Manage your billing and subscription." "description": "Manage your billing and subscription."
}, },
"subscribe": "Subscribe now", "subscribe": "Get your report",
"updatePlan": "Update plan", "updatePlan": "Update plan",
"getLifetimeAccess": "Get lifetime access", "getLifetimeAccess": "Get lifetime access",
"interval": { "interval": {
@@ -36,41 +36,40 @@
}, },
"plan": { "plan": {
"starter": { "starter": {
"name": "Starter", "name": "Sample Report",
"description": "For small projects just getting started", "description": "See what WhyRating can do with a free preview",
"features": { "features": {
"sync": "Seamless sync", "overviewScore": "Overview score",
"basicSupport": "Basic support", "topStrengths": "Top 3 strengths",
"limitedStorage": "Limited storage", "topIssues": "Top 3 issues",
"emailNotifications": "Email notifications", "limitedInsights": "Limited insights"
"basicReports": "Basic reports"
} }
}, },
"premium": { "premium": {
"name": "Premium", "name": "Reputation Blueprint",
"description": "Perfect for growing teams with advanced features", "description": "The full picture of your online reputation",
"badge": "Bestseller", "badge": "Most popular",
"features": { "features": {
"advancedSync": "Advanced sync", "fullScore": "Full 0-100 score",
"prioritySupport": "Priority support", "domainDeepDive": "6 domain deep dive",
"moreStorage": "More storage", "primitivesAnalyzed": "37 primitives analyzed",
"teamCollaboration": "Team collaboration", "staffLeaderboard": "Staff leaderboard",
"smsNotifications": "SMS notifications", "trendAnalysis": "Trend analysis",
"advancedReports": "Advanced reports" "actionPlan": "Prioritized action plan"
} }
}, },
"enterprise": { "enterprise": {
"name": "Enterprise", "name": "Fleet Intelligence",
"description": "Designed for organizations and big teams", "description": "Multi-location analysis for growing businesses",
"features": { "features": {
"unlimitedStorage": "Unlimited storage", "everythingInBlueprint": "Everything in Blueprint",
"customBranding": "Custom branding", "multipleLocations": "Multiple locations",
"dedicatedSupport": "Dedicated support", "crossLocationComparison": "Cross-location comparison",
"dedicatedAnalyst": "Dedicated analyst",
"customReporting": "Custom reporting",
"priorityDelivery": "Priority delivery",
"apiAccess": "API access", "apiAccess": "API access",
"userRoles": "User roles management", "quarterlyUpdates": "Quarterly updates"
"auditLogs": "Audit logs",
"singleSignOn": "Single sign-on",
"advancedAnalytics": "Advanced analytics"
} }
} }
}, },

View File

@@ -1,44 +1,20 @@
{ {
"product": { "product": {
"title": "This could be your very own $1M startup", "title": "See exactly what's driving your Google rating",
"description": "A fully customizable TurboStarter application. Swap in your content and launch your product faster than ever.", "description": "WhyRating analyzes every review and shows you what customers love, what frustrates them, and what to fix first. Enterprise-grade insights. Small business price. No subscription."
"mobile": {
"ios": {
"title": "iOS App",
"description": "Native experience on iPhone and iPad"
},
"android": {
"title": "Android App",
"description": "Optimized for Android phones"
}
},
"extension": {
"chrome": {
"title": "Chrome Extension",
"description": "Integration with Chrome browser"
},
"firefox": {
"title": "Firefox Add-on",
"description": "Enhanced browsing for Firefox users"
},
"edge": {
"title": "Edge Add-on",
"description": "Powerful tools for Microsoft Edge"
}
}
}, },
"announcement": "Your feature announcement goes here", "announcement": "Reputation Blueprint — now available",
"shippedWith": "Shipped with production-ready tools",
"cta": { "cta": {
"question": "Ready to start?", "question": "Ready to understand your reviews?",
"button": "Start for free", "button": "Analyze my reviews",
"secondary": "See a sample report",
"buy": { "buy": {
"question": "Ready to start?", "question": "Ready to understand your reviews?",
"description": "Purchase to unlock full access to the codebase and start shipping your product today. On all platforms.", "description": "Get your Reputation Blueprint and discover the story behind your stars. One-time purchase, instant delivery.",
"button": "Get access", "button": "Get your Blueprint",
"join": { "join": {
"description": "Join other founders customizing TurboStarter, share launch tactics, and stay close to new drops.", "description": "Join business owners who turned review insights into real improvement.",
"button": "Join the community" "button": "See how it works"
} }
} }
}, },
@@ -47,106 +23,125 @@
"title": "We're working on it!", "title": "We're working on it!",
"description": "{{feature}} is currently not available. We're working on it and it will be available soon." "description": "{{feature}} is currently not available. We're working on it and it will be available soon."
}, },
"howItWorks": {
"label": "How It Works",
"title": "From reviews to action plan in 3 steps",
"description": "No setup. No learning curve. Just share your business and get your report.",
"steps": {
"share": {
"title": "Share your business",
"description": "Paste your Google Business link or tell us your business name and location."
},
"analyze": {
"title": "AI analyzes every review",
"description": "We read every review and score your business across 37 dimensions in 6 key domains."
},
"receive": {
"title": "Get your Blueprint",
"description": "Receive a clear, actionable Reputation Blueprint with scores, trends, and a prioritized fix list."
}
}
},
"features": { "features": {
"label": "Features", "label": "What You Get",
"title": "Turn visitors into customers", "title": "Everything hidden in your reviews, revealed",
"description": "Everything you need to build, deploy, and scale your applications with confidence.", "description": "Your Reputation Blueprint gives you the full picture — not just stars, but the story behind them.",
"feature": { "feature": {
"core": { "score": {
"title": "Core foundation", "title": "Reputation Score 0100",
"description": "Authentication, database, and API already wired up so you can focus on customer value." "description": "One number that captures your overall reputation health, benchmarked against your industry."
}, },
"ai": { "domains": {
"title": "AI-powered capabilities", "title": "6 Domain Analysis",
"description": "Intelligent features with smart recommendations and automated workflows powered by AI." "description": "Deep dive into Service, Product, Atmosphere, Value, Cleanliness, and Management — each scored independently."
}, },
"mobile": { "plan": {
"title": "Native mobile experience", "title": "Prioritized Action Plan",
"description": "Fully-featured mobile app with seamless synchronization across all your devices." "description": "Know exactly what to fix first. We rank issues by impact so you spend time where it matters most."
}, },
"extension": { "insights": {
"title": "Browser extension", "title": "Staff & Trend Insights",
"description": "Keep users engaged in their browser with customizable shortcuts to your product." "description": "See which team members customers mention by name, and track how your reputation changes over time."
} }
} }
}, },
"testimonials": { "testimonials": {
"label": "Testimonials", "label": "What Owners Say",
"title": "Teams ship faster with us", "title": "Business owners trust their Blueprint",
"description": "Hear from founders and developers who customized the starter to launch sooner and convert better.", "description": "Real results from businesses that used their Reputation Blueprint to improve.",
"rating": "{{rating}} from {{count}}+ reviews", "rating": "{{rating}} from {{count}}+ reports delivered",
"reviews": { "reviews": {
"jack": { "maria": {
"name": "Jack", "name": "Maria G.",
"position": "Full Stack Developer", "position": "Restaurant Owner",
"body": "The starter freed our team from boilerplate work. We swapped in our copy over a weekend and focused on features customers actually wanted." "body": "I thought I knew my reviews. The Blueprint showed me three service patterns I'd completely missed — we fixed them and our rating went from 4.1 to 4.6 in two months."
}, },
"jill": { "carlos": {
"name": "Jill", "name": "Carlos R.",
"position": "Startup Founder", "position": "Auto Dealer Manager",
"body": "We launched our MVP in two weeks. Everything from marketing pages to auth was ready—we just rewrote the copy for our audience." "body": "The staff leaderboard was eye-opening. Two of our advisors were getting mentioned by name in nearly every positive review. Now we know exactly who to learn from."
}, },
"john": { "elena": {
"name": "John", "name": "Elena M.",
"position": "Senior Developer", "position": "Hotel Manager",
"body": "The DX is unmatched. The stack works out of the box and stays flexible enough to shape around our product narrative." "body": "We spent months guessing what guests cared about. The report showed us cleanliness was our #1 issue — not location, not breakfast. Saved us from a costly renovation."
}, },
"sarah": { "david": {
"name": "Sarah", "name": "David S.",
"position": "Product Manager", "position": "Dental Practice Owner",
"body": "We scaled from prototype to thousands of users without drama. Analytics, billing, and marketing flows were ready to customize." "body": "As a dentist, I can't read 300 reviews looking for patterns. The Reputation Blueprint did it in minutes and gave me a clear action list. Worth every penny."
}, },
"mike": { "sofia": {
"name": "Mike", "name": "Sofia L.",
"position": "Engineering Lead", "position": "Bakery Owner",
"body": "The community is stellar. Fast answers, launch feedback, and constant improvements keep our team moving." "body": "I was nervous about what the analysis would reveal. Turns out customers love our products — they just want faster service at peak hours. Simple fix, big impact."
} }
} }
}, },
"faq": { "faq": {
"label": "FAQ", "label": "FAQ",
"title": "Have a question? We got answers", "title": "Questions? We have answers",
"description": "Find answers to frequently asked questions about features, pricing, implementation, and getting started with our platform.", "description": "Everything you need to know about WhyRating and your Reputation Blueprint.",
"cta": "Contact us", "cta": "Still have questions? Contact us",
"question": { "question": {
"whatDoesOurPlatformDo": { "whatReviewsAnalyzed": {
"question": "What does our platform do?", "question": "What reviews does WhyRating analyze?",
"answer": "TurboStarter gives you a full-stack SaaS foundation—marketing site, web app, mobile apps, and extensions—so you can focus on your unique customer experience." "answer": "We analyze all your public Google reviews — every single one. Our AI reads the full text of each review to identify patterns, sentiment, and specific topics that affect your rating."
}, },
"howWillThisBenefitMyBusiness": { "howScoringWorks": {
"question": "How will this benefit my business?", "question": "How does the 0100 scoring work?",
"answer": "You launch faster, ship features sooner, and convert more leads because the core product, analytics, and billing flows are already in place." "answer": "Your Reputation Score combines sentiment analysis, topic frequency, trend direction, and response patterns across 37 primitives. A score of 70+ indicates strong reputation health. We also break it down across 6 domains so you can see exactly where you stand."
}, },
"isMyDataSafe": { "deliveryTime": {
"question": "Is my data safe?", "question": "How long does it take to get my report?",
"answer": "Yes. We follow enterprise-grade security practices and provide guardrails so you can adapt policies to your industry requirements." "answer": "Most reports are delivered within 24 hours. For businesses with more than 500 reviews, it may take up to 48 hours to ensure thoroughness."
}, },
"whatKindOfIntegrationsAreAvailable": { "whatBusinessTypes": {
"question": "What kind of integrations are available?",
"answer": "TurboStarter ships with popular SaaS integrations out of the box, and the modular architecture makes adding your stack straightforward."
},
"howEasyIsItToOnboardMyTeam": {
"question": "How easy is it to onboard my team?",
"answer": "Your team can dive in quickly with clear docs, TypeScript-first patterns, and examples that show exactly where to customize."
},
"whatTypesOfBusinessesCanUseThis": {
"question": "What types of businesses can use this?", "question": "What types of businesses can use this?",
"answer": "From solo founders to enterprise innovation teams, TurboStarter adapts to any SaaS use case that needs a head start." "answer": "Any business with Google reviews — restaurants, hotels, dental practices, auto dealers, salons, retail stores, and more. If customers review you on Google, we can analyze it."
}, },
"canICustomizeThisToFitMyBusinessNeeds": { "dataPrivacy": {
"question": "Can I customize this to fit my business needs?", "question": "Is my review data private?",
"answer": "Absolutely. Every module is designed for quick customization—update copy, swap components, and extend logic without fighting the framework." "answer": "We only analyze publicly available Google reviews. We don't access your Google account, store your login credentials, or share your report with anyone. Your Blueprint is yours alone."
},
"howManyReviews": {
"question": "How many reviews do you need to generate a report?",
"answer": "We recommend at least 20 reviews for meaningful insights. Businesses with 50+ reviews get the richest analysis, including reliable trend data and staff-level insights."
},
"reportContents": {
"question": "What's included in the Reputation Blueprint?",
"answer": "Your Blueprint includes: a 0100 Reputation Score, scores across 6 domains (37 primitives), a staff mention leaderboard, sentiment trends over time, a prioritized action plan, and specific review quotes that illustrate each finding."
} }
} }
}, },
"contact": { "contact": {
"label": "Contact", "label": "Contact",
"title": "Get in touch with us today for support", "title": "Get in touch",
"cta": "Talk to sales", "cta": "Talk to us",
"description": "Reach us for assistance or feedback", "description": "Questions about your report or need a custom analysis? We're here to help.",
"form": { "form": {
"name": { "name": {
"placeholder": "John Doe" "placeholder": "Your name"
}, },
"email": { "email": {
"placeholder": "your@email.com" "placeholder": "your@email.com"
@@ -167,8 +162,8 @@
}, },
"blog": { "blog": {
"label": "Blog", "label": "Blog",
"title": "News and updates about the platform", "title": "Insights for local business owners",
"description": "Stay up to date with the latest news, insights, and updates from our platform. Discover new features, best practices, and industry trends.", "description": "Tips, strategies, and stories about managing your online reputation and turning reviews into growth.",
"timeToRead": "{{time}} min read", "timeToRead": "{{time}} min read",
"tag": { "tag": {
"learning": "learning", "learning": "learning",
@@ -190,7 +185,7 @@
}, },
"docs": { "docs": {
"title": "Docs", "title": "Docs",
"description": "Learn how to use TurboStarter" "description": "Learn how WhyRating works"
}, },
"ai": { "ai": {
"description": "Unlock productivity and innovation with TurboStarter's AI assistant. Get instant answers, automate tasks, and boost your workflow using advanced artificial intelligence—secure, reliable, and designed for modern teams.", "description": "Unlock productivity and innovation with TurboStarter's AI assistant. Get instant answers, automate tasks, and boost your workflow using advanced artificial intelligence—secure, reliable, and designed for modern teams.",

View File

@@ -2,8 +2,8 @@
"currency": "eur", "currency": "eur",
"pricing": { "pricing": {
"label": "Precios", "label": "Precios",
"title": "Planes simples para todos", "title": "Un informe. Claridad total.",
"description": "Elige el plan que se adapte a tus necesidades y comienza tu camino hacia el éxito." "description": "Elige la opción ideal para tu negocio. Sin suscripciones, sin cargos recurrentes."
}, },
"manage": { "manage": {
"plan": { "plan": {
@@ -17,7 +17,7 @@
}, },
"description": "Gestiona tu facturación y suscripción." "description": "Gestiona tu facturación y suscripción."
}, },
"subscribe": "Suscribirse ahora", "subscribe": "Obtén tu informe",
"updatePlan": "Actualizar plan", "updatePlan": "Actualizar plan",
"getLifetimeAccess": "Obtener acceso de por vida", "getLifetimeAccess": "Obtener acceso de por vida",
"interval": { "interval": {
@@ -36,41 +36,40 @@
}, },
"plan": { "plan": {
"starter": { "starter": {
"name": "Inicial", "name": "Informe de Muestra",
"description": "Para pequeños proyectos que están comenzando", "description": "Descubre lo que WhyRating puede hacer con una vista previa gratuita",
"features": { "features": {
"sync": "Sincronización perfecta", "overviewScore": "Puntuación general",
"basicSupport": "Soporte básico", "topStrengths": "Top 3 fortalezas",
"limitedStorage": "Almacenamiento limitado", "topIssues": "Top 3 problemas",
"emailNotifications": "Notificaciones por correo", "limitedInsights": "Insights limitados"
"basicReports": "Informes básicos"
} }
}, },
"premium": { "premium": {
"name": "Premium", "name": "Radiografía de Reputación",
"description": "Perfecto para equipos en crecimiento con funciones avanzadas", "description": "La imagen completa de tu reputación online",
"badge": "Más vendido", "badge": "Más popular",
"features": { "features": {
"advancedSync": "Sincronización avanzada", "fullScore": "Puntuación completa 0-100",
"prioritySupport": "Soporte prioritario", "domainDeepDive": "Análisis profundo de 6 dominios",
"moreStorage": "Más almacenamiento", "primitivesAnalyzed": "37 primitivas analizadas",
"teamCollaboration": "Colaboración en equipo", "staffLeaderboard": "Ranking de personal",
"smsNotifications": "Notificaciones SMS", "trendAnalysis": "Análisis de tendencias",
"advancedReports": "Informes avanzados" "actionPlan": "Plan de acción priorizado"
} }
}, },
"enterprise": { "enterprise": {
"name": "Empresarial", "name": "Inteligencia de Flota",
"description": "Diseñado para organizaciones y grandes equipos", "description": "Análisis multi-local para negocios en crecimiento",
"features": { "features": {
"unlimitedStorage": "Almacenamiento ilimitado", "everythingInBlueprint": "Todo lo incluido en Radiografía",
"customBranding": "Marca personalizada", "multipleLocations": "Múltiples ubicaciones",
"dedicatedSupport": "Soporte dedicado", "crossLocationComparison": "Comparativa entre ubicaciones",
"dedicatedAnalyst": "Analista dedicado",
"customReporting": "Reportes personalizados",
"priorityDelivery": "Entrega prioritaria",
"apiAccess": "Acceso a API", "apiAccess": "Acceso a API",
"userRoles": "Gestión de roles de usuario", "quarterlyUpdates": "Actualizaciones trimestrales"
"auditLogs": "Registros de auditoría",
"singleSignOn": "Inicio de sesión único",
"advancedAnalytics": "Análisis avanzado"
} }
} }
}, },

View File

@@ -1,45 +1,20 @@
{ {
"product": { "product": {
"title": "Esta podría ser tu propia startup de 1 millón de dólares", "title": "Descubre qué está impulsando tu calificación en Google",
"description": "Una aplicación TurboStarter totalmente personalizable. Sustituye tu contenido y lanza tu producto más rápido que nunca.", "description": "WhyRating analiza cada reseña y te muestra qué les encanta a tus clientes, qué les frustra y qué deberías corregir primero. Análisis de nivel empresarial. Precio para pequeños negocios. Sin suscripción."
"mobile": {
"ios": {
"title": "App para iOS",
"description": "Experiencia nativa en iPhone y iPad"
},
"android": {
"title": "App para Android",
"description": "Optimizada para teléfonos Android"
}
},
"extension": {
"chrome": {
"title": "Extensión de Chrome",
"description": "Integración con el navegador Chrome"
},
"firefox": {
"title": "Complemento de Firefox",
"description": "Navegación mejorada para usuarios de Firefox"
},
"edge": {
"title": "Complemento de Edge",
"description": "Herramientas potentes para Microsoft Edge"
}
}
}, },
"announcement": "Radiografía de Reputación — ya disponible",
"announcement": "Aquí va el anuncio de tu próxima función",
"shippedWith": "Incluye herramientas listas para producción",
"cta": { "cta": {
"question": "¿Listo para empezar?", "question": "¿Listo para entender tus reseñas?",
"button": "Empieza gratis", "button": "Analiza mis reseñas",
"secondary": "Ver un informe de ejemplo",
"buy": { "buy": {
"question": "¿Listo para empezar?", "question": "¿Listo para entender tus reseñas?",
"description": "Compra para desbloquear el acceso completo a la base de código y empieza a lanzar tu producto hoy mismo. En todas las plataformas.", "description": "Obtén tu Radiografía de Reputación y descubre la historia detrás de tus estrellas. Pago único, entrega inmediata.",
"button": "Obtén acceso", "button": "Obtén tu Radiografía",
"join": { "join": {
"description": "Únete a otros fundadores que personalizan TurboStarter, comparte tácticas de lanzamiento y mantente al tanto de las novedades.", "description": "Únete a dueños de negocio que convirtieron sus reseñas en mejoras reales.",
"button": "Únete a la comunidad" "button": "Descubre cómo funciona"
} }
} }
}, },
@@ -48,110 +23,125 @@
"title": "¡Estamos trabajando en ello!", "title": "¡Estamos trabajando en ello!",
"description": "Actualmente {{feature}} no está disponible. Estamos trabajando en ello y estará disponible pronto." "description": "Actualmente {{feature}} no está disponible. Estamos trabajando en ello y estará disponible pronto."
}, },
"howItWorks": {
"label": "Cómo Funciona",
"title": "De reseñas a plan de acción en 3 pasos",
"description": "Sin configuración. Sin curva de aprendizaje. Solo comparte tu negocio y recibe tu informe.",
"steps": {
"share": {
"title": "Comparte tu negocio",
"description": "Pega el enlace de tu perfil de Google Business o dinos el nombre y ubicación de tu negocio."
},
"analyze": {
"title": "La IA analiza cada reseña",
"description": "Leemos cada reseña y evaluamos tu negocio en 37 dimensiones dentro de 6 dominios clave."
},
"receive": {
"title": "Recibe tu Radiografía",
"description": "Recibe una Radiografía de Reputación clara y accionable con puntuaciones, tendencias y una lista priorizada de mejoras."
}
}
},
"features": { "features": {
"label": "Características", "label": "Lo Que Recibes",
"title": "Convierte a los visitantes en clientes", "title": "Todo lo que esconden tus reseñas, al descubierto",
"description": "Todo lo que necesitas para crear, desplegar y escalar tus aplicaciones con confianza.", "description": "Tu Radiografía de Reputación te da el panorama completo — no solo estrellas, sino la historia detrás de ellas.",
"feature": { "feature": {
"core": { "score": {
"title": "Base fundamental", "title": "Puntuación de Reputación 0100",
"description": "Autenticación, base de datos y API ya conectadas para que puedas enfocarte en aportar valor a tus clientes." "description": "Un solo número que refleja la salud de tu reputación, comparado con tu industria."
}, },
"ai": { "domains": {
"title": "Capacidades impulsadas por IA", "title": "Análisis en 6 Dominios",
"description": "Funciones inteligentes con recomendaciones y flujos de trabajo automatizados impulsados por IA." "description": "Análisis profundo de Servicio, Producto, Ambiente, Valor, Limpieza y Gestión — cada uno evaluado de forma independiente."
}, },
"mobile": { "plan": {
"title": "Experiencia móvil nativa", "title": "Plan de Acción Priorizado",
"description": "Aplicación móvil completamente equipada con sincronización perfecta en todos tus dispositivos." "description": "Sabe exactamente qué corregir primero. Clasificamos los problemas por impacto para que inviertas tu tiempo donde más importa."
}, },
"extension": { "insights": {
"title": "Extensión de navegador", "title": "Tendencias y Datos del Equipo",
"description": "Mantén a los usuarios comprometidos en su navegador con accesos directos personalizables a tu producto." "description": "Descubre qué miembros de tu equipo mencionan los clientes por nombre y sigue cómo evoluciona tu reputación a lo largo del tiempo."
} }
} }
}, },
"testimonials": { "testimonials": {
"label": "Testimonios", "label": "Lo Que Dicen Los Dueños",
"title": "Los equipos lanzan más rápido con nosotros", "title": "Dueños de negocio confían en su Radiografía",
"description": "Conoce a fundadores y desarrolladores que personalizaron el starter para lanzar antes y convertir mejor.", "description": "Resultados reales de negocios que usaron su Radiografía de Reputación para mejorar.",
"rating": "{{rating}} de {{count}}+ reseñas", "rating": "{{rating}} de más de {{count}} informes entregados",
"reviews": { "reviews": {
"jack": { "maria": {
"name": "Jack", "name": "María G.",
"position": "Desarrollador Full Stack", "position": "Dueña de Restaurante",
"body": "El starter liberó a nuestro equipo del trabajo repetitivo. Sustituimos el copy en un fin de semana y nos concentramos en las funciones que los clientes realmente querían." "body": "Creía que conocía mis reseñas. La Radiografía me mostró tres patrones de servicio que había pasado por alto — los corregimos y nuestra calificación subió de 4.1 a 4.6 en dos meses."
}, },
"jill": { "carlos": {
"name": "Jill", "name": "Carlos R.",
"position": "Fundadora de startup", "position": "Gerente de Concesionario",
"body": "Lanzamos nuestro MVP en dos semanas. Todo, desde las páginas de marketing hasta la autenticación, estaba listo; solo reescribimos el copy para nuestra audiencia." "body": "El ranking del equipo fue revelador. Dos de nuestros asesores aparecían por nombre en casi todas las reseñas positivas. Ahora sabemos exactamente de quién aprender."
}, },
"john": { "elena": {
"name": "John", "name": "Elena M.",
"position": "Desarrollador senior", "position": "Gerente de Hotel",
"body": "La experiencia de desarrollador es incomparable. El stack funciona desde el primer momento y se mantiene lo suficientemente flexible como para adaptarse a la narrativa de nuestro producto." "body": "Pasamos meses adivinando qué les importaba a los huéspedes. El informe nos mostró que la limpieza era nuestro problema #1 — no la ubicación, no el desayuno. Nos ahorró una renovación costosa."
}, },
"sarah": { "david": {
"name": "Sarah", "name": "David S.",
"position": "Product Manager", "position": "Dueño de Consultorio Dental",
"body": "Escalamos del prototipo a miles de usuarios sin complicaciones. La analítica, la facturación y los flujos de marketing estaban listos para personalizar." "body": "Como dentista, no puedo leer 300 reseñas buscando patrones. La Radiografía de Reputación lo hizo en minutos y me dio una lista de acción clara. Vale cada centavo."
}, },
"mike": { "sofia": {
"name": "Mike", "name": "Sofía L.",
"position": "Líder de ingeniería", "position": "Dueña de Panadería",
"body": "La comunidad es excelente. Respuestas rápidas, feedback para los lanzamientos y mejoras constantes mantienen a nuestro equipo avanzando." "body": "Me preocupaba lo que el análisis revelaría. Resulta que a los clientes les encantan nuestros productos — solo quieren un servicio más rápido en horas pico. Solución sencilla, gran impacto."
} }
} }
}, },
"faq": { "faq": {
"label": "Preguntas frecuentes", "label": "Preguntas Frecuentes",
"title": "¿Tienes una pregunta? Tenemos respuestas", "title": "¿Tienes preguntas? Tenemos respuestas",
"description": "Encuentra respuestas a preguntas frecuentes sobre funciones, precios, implementación y cómo empezar con nuestra plataforma.", "description": "Todo lo que necesitas saber sobre WhyRating y tu Radiografía de Reputación.",
"cta": "Contáctanos", "cta": "¿Aún tienes preguntas? Contáctanos",
"question": { "question": {
"whatDoesOurPlatformDo": { "whatReviewsAnalyzed": {
"question": "¿Qué hace nuestra plataforma?", "question": "¿Qué reseñas analiza WhyRating?",
"answer": "TurboStarter te ofrece una base SaaS full-stack: sitio de marketing, aplicación web, apps móviles y extensiones, para que puedas enfocarte en la experiencia única de tus clientes." "answer": "Analizamos todas tus reseñas públicas de Google — cada una. Nuestra IA lee el texto completo de cada reseña para identificar patrones, sentimiento y temas específicos que afectan tu calificación."
}, },
"howWillThisBenefitMyBusiness": { "howScoringWorks": {
"question": "¿Cómo beneficiará esto a mi negocio?", "question": "¿Cómo funciona la puntuación de 0 a 100?",
"answer": "Lanzas más rápido, entregas funciones antes y conviertes más leads porque el producto base, la analítica y los flujos de facturación ya están listos." "answer": "Tu Puntuación de Reputación combina análisis de sentimiento, frecuencia de temas, dirección de tendencias y patrones de respuesta en 37 primitivas. Una puntuación de 70+ indica una reputación saludable. También la desglosamos en 6 dominios para que veas exactamente dónde te encuentras."
}, },
"isMyDataSafe": { "deliveryTime": {
"question": "¿Mis datos están seguros?", "question": "¿Cuánto tiempo tarda en llegar mi informe?",
"answer": "Sí. Seguimos prácticas de seguridad de nivel empresarial y ofrecemos salvaguardas para que adaptes las políticas a los requisitos de tu industria." "answer": "La mayoría de los informes se entregan en 24 horas. Para negocios con más de 500 reseñas, puede tomar hasta 48 horas para garantizar un análisis completo."
}, },
"whatKindOfIntegrationsAreAvailable": { "whatBusinessTypes": {
"question": "¿Qué tipo de integraciones están disponibles?", "question": "¿Qué tipos de negocios pueden usar esto?",
"answer": "TurboStarter incluye desde el inicio integraciones SaaS populares, y su arquitectura modular facilita añadir tu propio stack." "answer": "Cualquier negocio con reseñas en Google — restaurantes, hoteles, consultorios dentales, concesionarios, salones de belleza, tiendas y más. Si tus clientes te reseñan en Google, podemos analizarlo."
}, },
"howEasyIsItToOnboardMyTeam": { "dataPrivacy": {
"question": "¿Qué tan fácil es incorporar a mi equipo?", "question": "¿Mis datos de reseñas son privados?",
"answer": "Tu equipo puede incorporarse rápidamente con documentación clara, patrones TypeScript-first y ejemplos que muestran exactamente dónde personalizar." "answer": "Solo analizamos reseñas de Google disponibles públicamente. No accedemos a tu cuenta de Google, no almacenamos tus credenciales ni compartimos tu informe con nadie. Tu Radiografía es solo tuya."
}, },
"whatTypesOfBusinessesCanUseThis": { "howManyReviews": {
"question": "¿Qué tipos de empresas pueden usar esto?", "question": "¿Cuántas resas se necesitan para generar un informe?",
"answer": "Desde fundadores individuales hasta equipos de innovación empresarial, TurboStarter se adapta a cualquier caso de uso SaaS que necesite una ventaja inicial." "answer": "Recomendamos al menos 20 reseñas para obtener información significativa. Negocios con más de 50 reseñas obtienen el análisis más completo, incluyendo datos fiables de tendencias e información a nivel de equipo."
}, },
"canICustomizeThisToFitMyBusinessNeeds": { "reportContents": {
"question": "¿Puedo personalizar esto para adaptarlo a las necesidades de mi negocio?", "question": "¿Qué incluye la Radiografía de Reputación?",
"answer": "Por supuesto. Cada módulo está diseñado para personalizarse rápidamente: actualiza el copy, cambia componentes y amplía la lógica sin pelearte con el framework." "answer": "Tu Radiografía incluye: una Puntuación de Reputación de 0 a 100, puntuaciones en 6 dominios (37 primitivas), un ranking de menciones del equipo, tendencias de sentimiento a lo largo del tiempo, un plan de acción priorizado y citas de reseñas específicas que ilustran cada hallazgo."
} }
} }
}, },
"contact": { "contact": {
"label": "Contacto", "label": "Contacto",
"title": "Ponte en contacto con nosotros hoy para soporte", "title": "Ponte en contacto",
"cta": "Hablar con ventas", "cta": "Escríbenos",
"description": "Contáctanos para recibir ayuda o compartir comentarios", "description": "¿Preguntas sobre tu informe o necesitas un análisis personalizado? Estamos para ayudarte.",
"form": { "form": {
"name": { "name": {
"placeholder": "Juan Pérez" "placeholder": "Tu nombre"
}, },
"email": { "email": {
"placeholder": "tu@correo.com" "placeholder": "tu@correo.com"
@@ -170,11 +160,10 @@
"body": "Nuevo envío del formulario de contacto" "body": "Nuevo envío del formulario de contacto"
} }
}, },
"blog": { "blog": {
"label": "Blog", "label": "Blog",
"title": "Noticias y actualizaciones sobre la plataforma", "title": "Información para dueños de negocios locales",
"description": "Mantente al día con las últimas noticias, ideas y actualizaciones de nuestra plataforma. Descubre nuevas funciones, buenas prácticas y tendencias del sector.", "description": "Consejos, estrategias e historias sobre cómo gestionar tu reputación online y convertir las reseñas en crecimiento.",
"timeToRead": "{{time}} min de lectura", "timeToRead": "{{time}} min de lectura",
"tag": { "tag": {
"learning": "aprendizaje", "learning": "aprendizaje",
@@ -186,20 +175,17 @@
"launch": "lanzamiento" "launch": "lanzamiento"
} }
}, },
"api": { "api": {
"title": "Referencia de API", "title": "Referencia de API",
"description": "Crea integraciones con nuestra API" "description": "Crea integraciones con nuestra API"
}, },
"roadmap": { "roadmap": {
"title": "Hoja de ruta", "title": "Hoja de Ruta",
"description": "Descubre lo que viene después" "description": "Descubre lo que viene"
}, },
"docs": { "docs": {
"title": "Documentación", "title": "Documentación",
"description": "Aprende a usar TurboStarter" "description": "Aprende cómo funciona WhyRating"
}, },
"ai": { "ai": {
"description": "Libera productividad e innovación con el asistente de IA de TurboStarter. Obtén respuestas al instante, automatiza tareas y potencia tu flujo de trabajo con inteligencia artificial avanzada, segura, confiable y diseñada para equipos modernos.", "description": "Libera productividad e innovación con el asistente de IA de TurboStarter. Obtén respuestas al instante, automatiza tareas y potencia tu flujo de trabajo con inteligencia artificial avanzada, segura, confiable y diseñada para equipos modernos.",
@@ -229,7 +215,7 @@
}, },
"skip": { "skip": {
"title": "Este es un paso que puedes omitir", "title": "Este es un paso que puedes omitir",
"description": "Puedes omitir este paso y proceder al siguiente paso" "description": "Puedes omitir este paso y proceder al siguiente"
}, },
"final": { "final": {
"title": "Este es el paso final", "title": "Este es el paso final",
@@ -240,12 +226,12 @@
}, },
"update": { "update": {
"available": { "available": {
"title": "Nueva actualización disponible!", "title": "¡Nueva actualización disponible!",
"description": "Una nueva actualización está lista para ser instalada. Haz clic abajo para instalarla o descarta para más tarde." "description": "Una nueva actualización está lista para instalarse. Haz clic abajo para instalarla o descarta para más tarde."
}, },
"installing": { "installing": {
"title": "Instalando actualización...", "title": "Instalando actualización...",
"description": "La actualización está siendo instalada. Por favor, espera un momento." "description": "La actualización se está instalando. Por favor, espera un momento."
} }
} }
} }