From 158ff127e1757b74fbb2d8dd8180005e92d93e5d Mon Sep 17 00:00:00 2001 From: Yevhenii Datsenko Date: Fri, 13 Feb 2026 17:37:55 +0200 Subject: [PATCH 1/6] refactor(home): rename hero sections and add complete i18n support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename LegacyHeroSection → WelcomeHeroSection - Rename HeroSection → FeaturesHeroSection - Add welcomeDescription translation key to eliminate duplication - Translate all hardcoded text (headings, badges, CTAs) - Improve Ukrainian/Polish translations for better readability - Remove unused legacy components and images --- frontend/app/[locale]/page.tsx | 7 +- frontend/app/globals.css | 13 + frontend/components/home/CodeCard.tsx | 39 -- .../components/home/FeaturesHeroSection.tsx | 92 +++++ frontend/components/home/FlipCardQA.tsx | 390 ++++++++++++++++++ frontend/components/home/FloatingCode.tsx | 196 +++++++++ frontend/components/home/HeroCodeCards.tsx | 56 --- frontend/components/home/HeroSection.tsx | 53 --- .../components/home/InteractiveCTAButton.tsx | 237 +++++------ .../home/InteractiveConstellation.tsx | 333 +++++++++++++++ ...ckground.tsx => WelcomeHeroBackground.tsx} | 8 +- .../components/home/WelcomeHeroSection.tsx | 70 ++++ frontend/components/ui/particle-canvas.tsx | 2 +- frontend/messages/en.json | 14 + frontend/messages/pl.json | 14 + frontend/messages/uk.json | 14 + frontend/public/apparel.jpg | Bin 234651 -> 0 bytes frontend/public/collectibles.jpg | Bin 105407 -> 0 bytes frontend/public/icons/code.svg | 3 + frontend/public/icons/heart.svg | 3 + frontend/public/icons/palette.svg | 3 + frontend/public/lifestyle.jpg | Bin 192992 -> 0 bytes 22 files changed, 1261 insertions(+), 286 deletions(-) delete mode 100644 frontend/components/home/CodeCard.tsx create mode 100644 frontend/components/home/FeaturesHeroSection.tsx create mode 100644 frontend/components/home/FlipCardQA.tsx create mode 100644 frontend/components/home/FloatingCode.tsx delete mode 100644 frontend/components/home/HeroCodeCards.tsx delete mode 100644 frontend/components/home/HeroSection.tsx create mode 100644 frontend/components/home/InteractiveConstellation.tsx rename frontend/components/home/{HeroBackground.tsx => WelcomeHeroBackground.tsx} (76%) create mode 100644 frontend/components/home/WelcomeHeroSection.tsx delete mode 100644 frontend/public/apparel.jpg delete mode 100644 frontend/public/collectibles.jpg create mode 100644 frontend/public/icons/code.svg create mode 100644 frontend/public/icons/heart.svg create mode 100644 frontend/public/icons/palette.svg delete mode 100644 frontend/public/lifestyle.jpg diff --git a/frontend/app/[locale]/page.tsx b/frontend/app/[locale]/page.tsx index 06fa98a6..add4b1d4 100644 --- a/frontend/app/[locale]/page.tsx +++ b/frontend/app/[locale]/page.tsx @@ -1,6 +1,6 @@ import { getTranslations } from 'next-intl/server'; -import HeroSection from '@/components/home/HeroSection'; +import FeaturesHeroSection from '@/components/home/FeaturesHeroSection'; export async function generateMetadata({ params, @@ -16,10 +16,13 @@ export async function generateMetadata({ }; } +import WelcomeHeroSection from '@/components/home/WelcomeHeroSection'; + export default function Home() { return ( <> - + + ); } diff --git a/frontend/app/globals.css b/frontend/app/globals.css index 7ab59b5f..7d97ed10 100644 --- a/frontend/app/globals.css +++ b/frontend/app/globals.css @@ -277,6 +277,19 @@ .animate-dash-flow { animation: dash-flow 2s linear infinite; } + + /* 3D Flip Card */ + .perspective-1000 { + perspective: 1000px; + } + + .preserve-3d { + transform-style: preserve-3d; + } + + .backface-hidden { + backface-visibility: hidden; + } } @keyframes float { diff --git a/frontend/components/home/CodeCard.tsx b/frontend/components/home/CodeCard.tsx deleted file mode 100644 index 0f658566..00000000 --- a/frontend/components/home/CodeCard.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import type { ReactNode } from 'react'; - -interface CodeCardProps { - fileName: string; - snippet: ReactNode; - className?: string; -} - -export function CodeCard({ fileName, snippet, className }: CodeCardProps) { - return ( -