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

View File

@@ -1,42 +1,20 @@
"use client";
import { useTranslation } from "@turbostarter/i18n";
import { buttonVariants } from "@turbostarter/ui-web/button";
import { Icons } from "@turbostarter/ui-web/icons";
import { pathsConfig } from "~/config/paths";
import { TurboLink } from "~/modules/common/turbo-link";
import { Banner } from "~/modules/marketing/home/banner";
import { Faq } from "~/modules/marketing/home/faq";
import { Features } from "~/modules/marketing/home/features";
import { Hero } from "~/modules/marketing/home/hero";
import { HowItWorks } from "~/modules/marketing/home/how-it-works";
import { Testimonials } from "~/modules/marketing/home/testimonials";
const HomePage = () => {
const { t } = useTranslation("common");
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">
<h1 className="text-4xl font-bold tracking-tight sm:text-6xl">
{t("home.title", { defaultValue: "Welcome to TurboStarter" })}
</h1>
<p className="mt-6 text-lg leading-8 text-muted-foreground">
{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." })}
</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>
<>
<Hero />
<HowItWorks />
<Features />
<Testimonials />
<Faq />
<Banner />
</>
);
};

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 { WhyRatingLogo } from "~/modules/common/whyrating-logo";
import { TurboLink } from "~/modules/common/turbo-link";
export default async function AuthLayout({
@@ -9,8 +7,6 @@ export default async function AuthLayout({
}: {
children: React.ReactNode;
}) {
const { t } = await getTranslation({ ns: "common" });
return (
<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">
@@ -18,10 +14,9 @@ export default async function AuthLayout({
<TurboLink
href={pathsConfig.index}
className="flex shrink-0 items-center gap-3"
aria-label={t("home")}
aria-label="whyrating.com"
>
<Icons.Logo className="text-primary h-8" />
<Icons.LogoText className="text-foreground h-4" />
<WhyRatingLogo />
</TurboLink>
</header>
<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