@@ -198,7 +198,7 @@ export function SuccessStoriesSection() {
{/* CTA Button */}
-
+
See more
diff --git a/tailwind.config.js b/tailwind.config.js
index 8192fbf..06df008 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -5,6 +5,37 @@ module.exports = {
fontFamily: {
sans: ['QualyNeue', 'sans-serif'],
},
+ colors: {
+ 'background-light': '#f8f7fd',
+ accent: '#5F1CFC',
+ 'text-primary': '#140F23',
+ 'text-muted': '#828088',
+ 'border-primary': '#E5E5EA',
+ 'border-light': '#EBEBEE',
+ },
+ borderRadius: {
+ layout: '32px',
+ },
+ maxWidth: {
+ content: '1920px',
+ },
+ fontSize: {
+ 'size-9': '9px',
+ 'size-10': '10px',
+ 'size-16': '16px',
+ 'size-20': '20px',
+ 'size-26': '26px',
+ 'size-32': '32px',
+ 'size-40': '40px',
+ 'size-48': '48px',
+ 'size-50': '50px',
+ 'size-54': '54px',
+ 'size-56': '56px',
+ 'size-61': '61px',
+ 'size-64': '64px',
+ 'size-66': '66px',
+ 'size-72': '72px',
+ },
},
},
}
\ No newline at end of file
From 0fff90d027cb8037f7b9e4393ce1c1a008359487 Mon Sep 17 00:00:00 2001
From: Kevin DEJOUET <77232968+Azilone@users.noreply.github.com>
Date: Wed, 4 Jun 2025 19:55:06 +0200
Subject: [PATCH 3/3] centralize all asset paths
---
src/app/page.tsx | 11 ++--
src/components/ai-image-comparison.tsx | 9 +--
src/components/award-banner.tsx | 9 +--
src/components/benefits-section.tsx | 13 ++--
src/components/cta-section.tsx | 5 +-
src/components/footer.tsx | 21 +++----
src/components/how-it-works-section.tsx | 7 ++-
src/components/navbar.tsx | 3 +-
src/components/problems-section.tsx | 7 ++-
src/components/results-section.tsx | 11 ++--
src/components/services-section.tsx | 21 +++----
src/components/testimonials-marquee.tsx | 17 +++---
.../ui/demo-animated-testimonials.tsx | 3 +-
src/data/assets.json | 59 +++++++++++++++++++
14 files changed, 134 insertions(+), 62 deletions(-)
create mode 100644 src/data/assets.json
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 30b18d3..a1e5fdb 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -12,6 +12,7 @@ import { BenefitsSection } from "@/components/benefits-section";
import { AnimatedTestimonials } from "@/components/ui/animated-testimonials";
import HeroAwardBanner from "@/components/award-banner";
import { FoundersNote } from "@/components/founders-note";
+import assets from "@/data/assets.json";
export default function Home() {
@@ -36,35 +37,35 @@ export default function Home() {
"A fantastic picture of my fur babies! The quality and detail is brilliant! So so happy with my purchase!",
name: "Louise S.",
designation: "",
- src: "/images/customer/ac1.jpg",
+ src: assets.images.customers["1"],
},
{
quote:
"This is the 2nd canvas that we have done. The quality is A+, including the frames!! Great communication during the entire process, start to finish! We have a 3rd picture-canvas that will be in the works soon... We can't wait to work with you again!!",
name: "Christopher S.",
designation: "",
- src: "/images/customer/ac2.jpg",
+ src: assets.images.customers["2"],
},
{
quote:
"I'm so pleased with the portrait; it was a gift for my husband after our beloved lab passed away. The picture is absolutely perfect and captures his spirit beautifully.",
name: "Leah A.",
designation: "",
- src: "/images/customer/ac3.jpg",
+ src: assets.images.customers["3"],
},
{
quote:
"I'm sorry, not sorry, but I'm in love with this. Super easy to order. They sent a proof and the final photo is even better than expected because it has like a velvet feel to it almost like a vintage painting or art.",
name: "Betsy T.",
designation: "",
- src: "/images/customer/ac4.jpg",
+ src: assets.images.customers["4"],
},
{
quote:
"Amazing service, updated all the way and absolutely delighted with the portrait of our gorgeous dog. The quality is exceptional and the attention to detail is remarkable.",
name: "Lauraine Q.",
designation: "",
- src: "/images/customer/ac5.jpg",
+ src: assets.images.customers["5"],
},
]}
// autoplay={true}
diff --git a/src/components/ai-image-comparison.tsx b/src/components/ai-image-comparison.tsx
index 928305f..3731959 100644
--- a/src/components/ai-image-comparison.tsx
+++ b/src/components/ai-image-comparison.tsx
@@ -2,6 +2,7 @@
import React, { useState } from "react";
import clsx from 'clsx';
+import assets from "@/data/assets.json";
import { ImageComparison, ImageComparisonImage, ImageComparisonSlider } from '@/components/ui/image-comparison';
@@ -17,8 +18,8 @@ const comparisonData: Record<'memorable' | 'others', ImageComparisonData> = {
memorable: {
title: "GetPawtrait.com",
description: "Why GetPawtrait stands out for pet portraits",
- beforeImage: "/images/placeholder-image1.jpg",
- afterImage: "/images/placeholder-image2.webp",
+ beforeImage: assets.images.placeholders.comparison1,
+ afterImage: assets.images.placeholders.comparison2,
features: [
"Proprietary Pawtraits model V2 + optional designer retouching: sharp details, true-to-life colors",
"Instant HD preview before payment",
@@ -32,8 +33,8 @@ const comparisonData: Record<'memorable' | 'others', ImageComparisonData> = {
others: {
title: "Other Pet Portrait Services",
description: "How typical services compare",
- beforeImage: "/images/placeholder-image1.jpg",
- afterImage: "/images/placeholder-image2.webp",
+ beforeImage: assets.images.placeholders.comparison1,
+ afterImage: assets.images.placeholders.comparison2,
features: [
"Low-res or no preview, pay before you see",
"Fewer than 10 styles, often reused elsewhere",
diff --git a/src/components/award-banner.tsx b/src/components/award-banner.tsx
index ed4c0a8..94a254e 100644
--- a/src/components/award-banner.tsx
+++ b/src/components/award-banner.tsx
@@ -1,4 +1,5 @@
import React from "react";
+import assets from "@/data/assets.json";
export default function AwardBanner() {
return (
@@ -6,7 +7,7 @@ export default function AwardBanner() {
{/* Laurel left */}
{/* Laurel right */}
Seen on
{/* TikTok logo */}
&
{/* Instagram logo */}
{/* Decorative SVG - Top Right */}
{/* Decorative SVG - Bottom Left */}
-
+
GetPawtrait
French Support Team 🇫🇷 We're here to help!
@@ -53,23 +54,23 @@ export function Footer() {
Tracked Shipping Available
-
-
-
+
+
+
Secure Payment
-
-
-
-
-
+
+
+
+
+
-
+
Printed in USA
diff --git a/src/components/how-it-works-section.tsx b/src/components/how-it-works-section.tsx
index 0331cc2..170f03e 100644
--- a/src/components/how-it-works-section.tsx
+++ b/src/components/how-it-works-section.tsx
@@ -2,6 +2,7 @@
import React from "react";
import Image from "next/image"; // Import next/image
+import assets from "@/data/assets.json";
export function HowItWorksSection() {
return (
@@ -72,7 +73,7 @@ export function HowItWorksSection() {
{/* Replace with
component */}
{/* Replace with component */}
),
- lottieSrc: "/lotties/1.json",
+ lottieSrc: assets.lotties["1"],
},
{
id: 2,
@@ -85,7 +86,7 @@ const problemsData = [
),
- lottieSrc: "/lotties/2.json",
+ lottieSrc: assets.lotties["2"],
},
{
id: 3,
@@ -118,7 +119,7 @@ const problemsData = [
),
- lottieSrc: "/lotties/4.json",
+ lottieSrc: assets.lotties["4"],
},
];
diff --git a/src/components/results-section.tsx b/src/components/results-section.tsx
index 5d37465..e62a241 100644
--- a/src/components/results-section.tsx
+++ b/src/components/results-section.tsx
@@ -2,6 +2,7 @@
import React from "react";
import Image from "next/image";
+import assets from "@/data/assets.json";
import { motion } from "framer-motion"; // Import motion
import CTAButton from "./ui/CTAButton";
@@ -171,30 +172,30 @@ const serviceCards = [
title: "Posters & Canvas",
description:
"Transform your pet photos into stunning wall art. Premium quality prints delivered to your door in days.",
- imageSrc: "/images/customer/ac1.jpg",
+ imageSrc: assets.images.customers["1"],
},
{
title: "Mugs & Phone Cases",
description:
"Show off your furry friend everywhere you go. Durable, high-quality prints that last.",
- imageSrc: "/images/customer/ac2.jpg",
+ imageSrc: assets.images.customers["2"],
},
{
title: "Gift Sets",
description:
"Perfect for pet lovers. Mix and match products to create the ultimate personalized gift.",
- imageSrc: "/images/customer/ac3.jpg",
+ imageSrc: assets.images.customers["3"],
},
{
title: "Custom Styles",
description:
"Choose from our exclusive collection of pet-specific art styles. From classic to modern.",
- imageSrc: "/images/customer/ac4.jpg",
+ imageSrc: assets.images.customers["4"],
},
{
title: "Premium Quality",
description:
"Professional printing, worldwide shipping, and gift wrapping available. Satisfaction guaranteed.",
- imageSrc: "/images/customer/ac5.jpg",
+ imageSrc: assets.images.customers["5"],
},
];
\ No newline at end of file
diff --git a/src/components/services-section.tsx b/src/components/services-section.tsx
index ba1c163..6f07008 100644
--- a/src/components/services-section.tsx
+++ b/src/components/services-section.tsx
@@ -2,6 +2,7 @@
import React, { useState } from 'react'; // Assurez-vous que React et useState sont importés
import Image from "next/image";
+import assets from "@/data/assets.json";
import { ShimmerButton } from './magicui/shimmer-button';
// --- Données (inchangées par rapport à la version précédente) ---
@@ -22,7 +23,7 @@ const serviceNames = [
const showcaseDetailsData = [
{
serviceName: 'Custom Pet Portraits',
- imageSrc: "/images/product_placeholder.webp",
+ imageSrc: assets.images.placeholders.product,
imageAlt: "Custom Pet Portraits showcase",
clientName: "Pet Lover #1",
price: 49.99,
@@ -30,7 +31,7 @@ const showcaseDetailsData = [
},
{
serviceName: 'Personalized Mugs',
- imageSrc: "/images/product_placeholder.webp",
+ imageSrc: assets.images.placeholders.product,
imageAlt: "Personalized Mugs showcase",
clientName: "Coffee Addict",
price: 19.99,
@@ -38,7 +39,7 @@ const showcaseDetailsData = [
},
{
serviceName: 'Custom T-Shirts',
- imageSrc: "/images/product_placeholder.webp",
+ imageSrc: assets.images.placeholders.product,
imageAlt: "Custom T-Shirts showcase",
clientName: "Dog Dad",
price: 29.99,
@@ -46,7 +47,7 @@ const showcaseDetailsData = [
},
{
serviceName: 'Embroidered or Printed Sweatshirts/Hoodies',
- imageSrc: "/images/product_placeholder.webp",
+ imageSrc: assets.images.placeholders.product,
imageAlt: "Sweatshirts/Hoodies showcase",
clientName: "Cat Mom",
price: 59.99,
@@ -54,7 +55,7 @@ const showcaseDetailsData = [
},
{
serviceName: 'Custom Blankets',
- imageSrc: "/images/product_placeholder.webp",
+ imageSrc: assets.images.placeholders.product,
imageAlt: "Custom Blankets showcase",
clientName: "Gift Giver",
price: 39.99,
@@ -62,7 +63,7 @@ const showcaseDetailsData = [
},
{
serviceName: 'Personalized Pillows/Cushions',
- imageSrc: "/images/product_placeholder.webp",
+ imageSrc: assets.images.placeholders.product,
imageAlt: "Personalized Pillows/Cushions showcase",
clientName: "Home Decor Fan",
price: 24.99,
@@ -70,7 +71,7 @@ const showcaseDetailsData = [
},
{
serviceName: 'Custom Posters',
- imageSrc: "/images/product_placeholder.webp",
+ imageSrc: assets.images.placeholders.product,
imageAlt: "Custom Posters showcase",
clientName: "Art Collector",
price: 14.99,
@@ -78,7 +79,7 @@ const showcaseDetailsData = [
},
{
serviceName: 'Pet Bandanas',
- imageSrc: "/images/product_placeholder.webp",
+ imageSrc: assets.images.placeholders.product,
imageAlt: "Pet Bandanas showcase",
clientName: "Fashion Pet",
price: 12.99,
@@ -86,7 +87,7 @@ const showcaseDetailsData = [
},
{
serviceName: 'Custom Phone Cases',
- imageSrc: "/images/product_placeholder.webp",
+ imageSrc: assets.images.placeholders.product,
imageAlt: "Custom Phone Cases showcase",
clientName: "Pet Parent On-the-Go",
price: 21.99,
@@ -94,7 +95,7 @@ const showcaseDetailsData = [
},
{
serviceName: 'Pet Tags or Collars',
- imageSrc: "/images/product_placeholder.webp",
+ imageSrc: assets.images.placeholders.product,
imageAlt: "Pet Tags or Collars showcase",
clientName: "Safety First",
price: 9.99,
diff --git a/src/components/testimonials-marquee.tsx b/src/components/testimonials-marquee.tsx
index 922a59b..6d2cd33 100644
--- a/src/components/testimonials-marquee.tsx
+++ b/src/components/testimonials-marquee.tsx
@@ -3,32 +3,33 @@
import { cn } from "@/lib/utils";
import { Marquee } from "@/components/magicui/marquee"
import Image from "next/image";
+import assets from "@/data/assets.json";
import Link from "next/link";
import { ImageComparison, ImageComparisonImage, ImageComparisonSlider } from "@/components/ui/image-comparison";
const portfolioItems = [
{
title: "PHOTO > CADEAU",
- beforeImage: "/images/rabbit1.webp",
- afterImage: "/images/rabbit2.webp",
+ beforeImage: assets.images.rabbits.before,
+ afterImage: assets.images.rabbits.after,
href: "",
},
{
title: "PHOTO > CADEAU",
- beforeImage: "/images/rabbit1.webp",
- afterImage: "/images/rabbit2.webp",
+ beforeImage: assets.images.rabbits.before,
+ afterImage: assets.images.rabbits.after,
href: "",
},
{
title: "PHOTO > CADEAU",
- beforeImage: "/images/rabbit1.webp",
- afterImage: "/images/rabbit2.webp",
+ beforeImage: assets.images.rabbits.before,
+ afterImage: assets.images.rabbits.after,
href: "",
},
{
title: "PHOTO > CADEAU",
- beforeImage: "/images/rabbit1.webp",
- afterImage: "/images/rabbit2.webp",
+ beforeImage: assets.images.rabbits.before,
+ afterImage: assets.images.rabbits.after,
href: "",
},
];
diff --git a/src/components/ui/demo-animated-testimonials.tsx b/src/components/ui/demo-animated-testimonials.tsx
index f21728f..abf0ba6 100644
--- a/src/components/ui/demo-animated-testimonials.tsx
+++ b/src/components/ui/demo-animated-testimonials.tsx
@@ -1,4 +1,5 @@
import { AnimatedTestimonials } from "./animated-testimonials";
+import assets from "@/data/assets.json";
function AnimatedTestimonialsDemo() {
const testimonials = [
@@ -7,7 +8,7 @@ function AnimatedTestimonialsDemo() {
"Le souci du détail et les fonctionnalités innovantes ont complètement transformé notre workflow. C'est exactement ce que nous recherchions.",
name: "Sarah Chen",
designation: "Product Manager chez TechFlow",
- src: "/product-placeholder.webp", // Placeholder local
+ src: assets.images.placeholders.demo, // Placeholder local
},
{
quote:
diff --git a/src/data/assets.json b/src/data/assets.json
new file mode 100644
index 0000000..f966640
--- /dev/null
+++ b/src/data/assets.json
@@ -0,0 +1,59 @@
+{
+ "images": {
+ "logo": "/images/logo.webp",
+ "brand": {
+ "ups": "/images/brand/Logo UPS.svg",
+ "fedex": "/images/brand/FedEx Express.svg",
+ "usps": "/images/brand/Logo USPS.svg",
+ "visa": "/images/brand/Logo Visa Inc.svg",
+ "mastercard": "/images/brand/Logo Mastercard.svg",
+ "americanExpress": "/images/brand/American Express Icon.svg",
+ "paypal": "/images/brand/SVG Paypal.svg",
+ "applePay": "/images/brand/Logo Apple Pay.svg",
+ "usaFlag": "/images/brand/usa.svg"
+ },
+ "benefits": {
+ "1": "/images/benefits/1.webp",
+ "2": "/images/benefits/2.webp",
+ "3": "/images/benefits/3.webp",
+ "4": "/images/benefits/4.webp",
+ "5": "/images/benefits/5.webp",
+ "6": "/images/benefits/6.webp"
+ },
+ "placeholders": {
+ "product": "/images/product_placeholder.webp",
+ "comparison1": "/images/placeholder-image1.jpg",
+ "comparison2": "/images/placeholder-image2.webp",
+ "demo": "/product-placeholder.webp"
+ },
+ "customers": {
+ "1": "/images/customer/ac1.jpg",
+ "2": "/images/customer/ac2.jpg",
+ "3": "/images/customer/ac3.jpg",
+ "4": "/images/customer/ac4.jpg",
+ "5": "/images/customer/ac5.jpg"
+ },
+ "howItWorks": {
+ "1": "/images/hiw1.webp",
+ "2": "/images/hiw2.webp",
+ "3": "/images/hiw3.webp"
+ },
+ "rabbits": {
+ "before": "/images/rabbit1.webp",
+ "after": "/images/rabbit2.webp"
+ }
+ },
+ "svg": {
+ "cta1": "/svg/cta1.svg",
+ "cta2": "/svg/cta2.svg",
+ "laurierLeft": "/svg/laurier-gauche.svg",
+ "laurierRight": "/svg/laurier-droit.svg",
+ "tiktok": "/svg/TikTok.svg",
+ "instagram": "/svg/instagram.svg"
+ },
+ "lotties": {
+ "1": "/lotties/1.json",
+ "2": "/lotties/2.json",
+ "4": "/lotties/4.json"
+ }
+}