From 2a3f542e982ecd56f450213505cf7505f4059ebc Mon Sep 17 00:00:00 2001 From: FernandoJVideira <03.pleaser-minster@icloud.com> Date: Sat, 12 Sep 2026 13:09:17 +0100 Subject: [PATCH] redesigned app for cleaner ux --- .claude/launch.json | 11 + package-lock.json | 45 +++ package.json | 1 + src/Components/Card.tsx | 41 ++- src/Components/Footer/Footer.tsx | 61 ++-- src/Components/Loading.tsx | 16 +- src/Components/Navbar/MenuContent.tsx | 49 ++++ src/Components/Navbar/MobileMenu.tsx | 85 ++++++ src/Components/Navbar/Navbar.tsx | 261 ++++++++++++------ src/Components/Navbar/langFlag.ts | 11 + src/Components/Pages/Contact/ContactForm.tsx | 118 ++++++-- src/Components/Pages/Contact/ContactPage.tsx | 34 ++- .../Pages/Contact/PhoneCodeSelect.tsx | 106 +++++++ src/Components/Pages/Hero/Hero.tsx | 75 +++-- src/Components/Pages/Hero/HeroVisual.tsx | 79 ++++++ .../Pages/Optimization/CardContainer.tsx | 5 +- .../Pages/Optimization/Optimization.tsx | 33 ++- .../Pages/Results/CardContainer.tsx | 6 +- src/Components/Pages/Results/ResultsPage.tsx | 17 +- src/Components/Pages/Services/Buttons.tsx | 6 +- src/Components/Pages/Services/CameraCards.tsx | 14 +- src/Components/Pages/Services/CardBtn.tsx | 26 +- src/Components/Pages/Services/CardGroup.tsx | 26 +- .../Pages/Services/MarketingCards.tsx | 14 +- src/Components/Pages/Services/ServiceCard.tsx | 53 ++-- .../Pages/Services/ServiceCardContainer.tsx | 2 +- src/Components/Pages/Services/Services.tsx | 24 +- src/Components/Pages/Services/SocialMedia.tsx | 14 +- src/Components/Pages/Services/WesiteCards.tsx | 14 +- src/index.css | 156 +++++++++-- src/routes/PP.tsx | 190 +++++++++---- src/routes/TOS.tsx | 148 +++++++--- tailwind.config.js | 12 +- 33 files changed, 1379 insertions(+), 374 deletions(-) create mode 100644 .claude/launch.json create mode 100644 src/Components/Navbar/MenuContent.tsx create mode 100644 src/Components/Navbar/MobileMenu.tsx create mode 100644 src/Components/Navbar/langFlag.ts create mode 100644 src/Components/Pages/Contact/PhoneCodeSelect.tsx create mode 100644 src/Components/Pages/Hero/HeroVisual.tsx diff --git a/.claude/launch.json b/.claude/launch.json new file mode 100644 index 0000000..8b30f3b --- /dev/null +++ b/.claude/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.0.1", + "configurations": [ + { + "name": "dev", + "runtimeExecutable": "npm", + "runtimeArgs": ["run", "dev"], + "port": 5173 + } + ] +} diff --git a/package-lock.json b/package-lock.json index 005d2ce..27887a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@emailjs/browser": "^4.3.3", "@headlessui/react": "^1.7.18", "@heroicons/react": "^2.1.3", + "framer-motion": "^13.2.0", "i18next": "^23.11.5", "i18next-browser-languagedetector": "^8.0.0", "i18next-http-backend": "^2.5.2", @@ -2595,6 +2596,29 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/framer-motion": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-13.2.0.tgz", + "integrity": "sha512-9E33ebgMaO33w1nN/jEdW8z3/GO483fMi4rqbMG9rt83XgW9QLKRe4NcmJ8s+fQ3O34++UHrIQwlIWGIWTITjA==", + "license": "MIT", + "dependencies": { + "motion-dom": "^13.2.0", + "motion-utils": "^13.0.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3158,6 +3182,21 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/motion-dom": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-13.2.0.tgz", + "integrity": "sha512-N6gdSoWRDk0Rh/fVtlqUtLs+fEN3ELFZI3cn3IQE9Mnf3E+Mh8wjO6MstzCOPFh4Yf0L1as5m2eUyYWj8ylVSQ==", + "license": "MIT", + "dependencies": { + "motion-utils": "^13.0.0" + } + }, + "node_modules/motion-utils": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-13.0.0.tgz", + "integrity": "sha512-7DnN7TmbLcYXcG4RVadXIihWlyuM9afoUww8Y5Agg431kGKiuL2/OMyP4mJ5wLz+pvN3t5ySClLOaVXJ+wekRQ==", + "license": "MIT" + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -4238,6 +4277,12 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index 0662684..6b8b5df 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@emailjs/browser": "^4.3.3", "@headlessui/react": "^1.7.18", "@heroicons/react": "^2.1.3", + "framer-motion": "^13.2.0", "i18next": "^23.11.5", "i18next-browser-languagedetector": "^8.0.0", "i18next-http-backend": "^2.5.2", diff --git a/src/Components/Card.tsx b/src/Components/Card.tsx index 6d7efaf..180fefe 100644 --- a/src/Components/Card.tsx +++ b/src/Components/Card.tsx @@ -1,28 +1,49 @@ +import { motion, useReducedMotion } from "framer-motion"; + interface IProps { title: string; description: string; image: string; + index?: number; } -const Card = ({ title, description, image }: IProps) => { - const defaultImgClasses = `w-full h-20 mt-5`; - const imgClasses = image ? defaultImgClasses : `${defaultImgClasses} hidden`; +const Card = ({ title, description, image, index = 0 }: IProps) => { + const prefersReducedMotion = useReducedMotion(); return ( -
{description.split("\n").map((line, i) => (
{line}
))}
-
+