From 26e78edf5c2d84b9f08a79f0c55de0e6a747b800 Mon Sep 17 00:00:00 2001
From: "diana.dolgolyova"
Date: Tue, 10 Mar 2026 13:25:53 +0300
Subject: [PATCH] feat: about stats cards, pricing popular badge, back-to-top
button
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- About: add 3 stat cards (13 trainers, 6 styles, 2 locations)
- Pricing: highlight first plan with gold "Популярный" badge
- BackToTop: floating gold button appears after 600px scroll
Co-Authored-By: Claude Opus 4.6
---
src/app/page.tsx | 2 ++
src/components/sections/About.tsx | 29 ++++++++++++++++
src/components/sections/Pricing.tsx | 52 +++++++++++++++++------------
src/components/ui/BackToTop.tsx | 28 ++++++++++++++++
4 files changed, 90 insertions(+), 21 deletions(-)
create mode 100644 src/components/ui/BackToTop.tsx
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 0fd937a..c69df1e 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -5,6 +5,7 @@ import { Classes } from "@/components/sections/Classes";
import { Pricing } from "@/components/sections/Pricing";
import { FAQ } from "@/components/sections/FAQ";
import { Contact } from "@/components/sections/Contact";
+import { BackToTop } from "@/components/ui/BackToTop";
export default function HomePage() {
return (
@@ -16,6 +17,7 @@ export default function HomePage() {
+
>
);
}
diff --git a/src/components/sections/About.tsx b/src/components/sections/About.tsx
index 7e2f847..8c84fc4 100644
--- a/src/components/sections/About.tsx
+++ b/src/components/sections/About.tsx
@@ -1,7 +1,14 @@
+import { Users, Layers, MapPin } from "lucide-react";
import { siteContent } from "@/data/content";
import { SectionHeading } from "@/components/ui/SectionHeading";
import { Reveal } from "@/components/ui/Reveal";
+const stats = [
+ { icon: , value: "13", label: "тренеров" },
+ { icon: , value: "6", label: "направлений" },
+ { icon: , value: "2", label: "зала в Минске" },
+];
+
export function About() {
const { about } = siteContent;
@@ -22,6 +29,28 @@ export function About() {
))}
+
+ {/* Stats */}
+
+
+ {stats.map((stat, i) => (
+
+
+ {stat.icon}
+
+
+ {stat.value}
+
+
+ {stat.label}
+
+
+ ))}
+
+
);
diff --git a/src/components/sections/Pricing.tsx b/src/components/sections/Pricing.tsx
index 3aafd59..fb85d32 100644
--- a/src/components/sections/Pricing.tsx
+++ b/src/components/sections/Pricing.tsx
@@ -54,28 +54,38 @@ export function Pricing() {
{pricing.subtitle}
- {pricing.items.map((item, i) => (
-
0 ? "border-t border-neutral-100 dark:border-white/[0.04]" : ""
- }`}
- >
-
-
- {item.name}
-
- {item.note && (
-
- {item.note}
-
- )}
+ {pricing.items.map((item, i) => {
+ const isPopular = i === 0;
+ return (
+
0 ? "border-t border-neutral-100 dark:border-white/[0.04]" : ""
+ } ${isPopular ? "bg-[#c9a96e]/[0.04] dark:bg-[#c9a96e]/[0.03]" : ""}`}
+ >
+
+
+
+ {item.name}
+
+ {isPopular && (
+
+ Популярный
+
+ )}
+
+ {item.note && (
+
+ {item.note}
+
+ )}
+
+
+ {item.price}
+
-
- {item.price}
-
-
- ))}
+ );
+ })}
diff --git a/src/components/ui/BackToTop.tsx b/src/components/ui/BackToTop.tsx
new file mode 100644
index 0000000..6834312
--- /dev/null
+++ b/src/components/ui/BackToTop.tsx
@@ -0,0 +1,28 @@
+"use client";
+
+import { useState, useEffect } from "react";
+import { ChevronUp } from "lucide-react";
+
+export function BackToTop() {
+ const [visible, setVisible] = useState(false);
+
+ useEffect(() => {
+ function handleScroll() {
+ setVisible(window.scrollY > 600);
+ }
+ window.addEventListener("scroll", handleScroll, { passive: true });
+ return () => window.removeEventListener("scroll", handleScroll);
+ }, []);
+
+ return (
+
+ );
+}