22 Commits

Author SHA1 Message Date
1ba2908279 Merge version_19_1781563648361 into main
Merge version_19_1781563648361 into main
2026-06-15 22:47:46 +00:00
040a7fd535 Update src/pages/HomePage/sections/Hero.tsx 2026-06-15 22:47:42 +00:00
15c6856558 Merge version_18_1781563623180 into main
Merge version_18_1781563623180 into main
2026-06-15 22:47:10 +00:00
9fb1e00c11 Update theme colors 2026-06-15 22:47:03 +00:00
e32e760e99 Merge version_17_1781563616874 into main
Merge version_17_1781563616874 into main
2026-06-15 22:47:00 +00:00
8b201cbe6c Update theme colors 2026-06-15 22:46:57 +00:00
283adff54f Merge version_16_1781519540042 into main
Merge version_16_1781519540042 into main
2026-06-15 10:53:42 +00:00
c49e96a7c3 Add analytics tracking script 2026-06-15 10:53:39 +00:00
8a3d08ed7f Merge version_16_1781519540042 into main
Merge version_16_1781519540042 into main
2026-06-15 10:34:36 +00:00
kudinDmitriyUp
4bd9d5f39b Bob AI: Populate src/pages/BlogPage.tsx (snippet builder, 2 sections) 2026-06-15 10:33:53 +00:00
kudinDmitriyUp
c4d2a0b52d Bob AI: Add blog page 2026-06-15 10:33:03 +00:00
21f2c691bb Merge version_15_1781419601769 into main
Merge version_15_1781419601769 into main
2026-06-15 10:29:46 +00:00
d4ad543155 Update src/components/Layout.tsx 2026-06-15 10:29:36 +00:00
061ef09376 Merge version_15_1781419601769 into main
Merge version_15_1781419601769 into main
2026-06-15 10:29:30 +00:00
558ac5ef57 Update src/App.tsx 2026-06-15 10:29:21 +00:00
8c930d8c2c Merge version_15_1781419601769 into main
Merge version_15_1781419601769 into main
2026-06-14 21:14:25 +00:00
51817f8b8a Add public/favicon.png 2026-06-14 21:14:13 +00:00
900e502413 Update index.html 2026-06-14 21:14:13 +00:00
0c0da7d82f Merge version_15_1781419601769 into main
Merge version_15_1781419601769 into main
2026-06-14 06:50:00 +00:00
kudinDmitriyUp
54ebac3115 Bob AI: Added a fourth carousel of testimonial cards to the testimon 2026-06-14 06:49:18 +00:00
354cdc7a53 Merge version_14_1781418721165 into main
Merge version_14_1781418721165 into main
2026-06-14 06:32:18 +00:00
79bc470c0f Merge version_13_1781412111677 into main
Merge version_13_1781412111677 into main
2026-06-14 04:44:21 +00:00
9 changed files with 71 additions and 11 deletions

View File

@@ -5,7 +5,7 @@
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Inter+Tight:ital,wght@0,100..900;1,100..900&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap" rel="stylesheet">
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Studio Madrid | Luxury Interior Design</title>
<meta property="og:title" content="Studio Madrid | Luxury Interior Design" />
@@ -13,9 +13,13 @@
<meta name="description" content="Studio Madrid specializes in high-end interior design for luxury residences, flats, and villas throughout Madrid. Transform your home today." />
<meta property="og:description" content="Studio Madrid specializes in high-end interior design for luxury residences, flats, and villas throughout Madrid. Transform your home today." />
<meta name="twitter:description" content="Studio Madrid specializes in high-end interior design for luxury residences, flats, and villas throughout Madrid. Transform your home today." />
<meta property="og:image" content="https://storage.googleapis.com/webild/users/user_3AFDRpptPx4buwNV34xBpWy9jNG/uploaded-1781471648940-wopf0ep1.png" />
<meta name="twitter:image" content="https://storage.googleapis.com/webild/users/user_3AFDRpptPx4buwNV34xBpWy9jNG/uploaded-1781471648940-wopf0ep1.png" />
<link rel="icon" type="image/png" href="/favicon.png" />
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
<script defer src="https://analytics.webild.io/wb" data-website-id="118223fc-0bc0-49da-a4b4-fc8388d2274c" data-webild-analytics></script>
</body>
</html>

BIN
public/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 KiB

View File

@@ -2,6 +2,8 @@ import { Routes, Route } from 'react-router-dom';
import Layout from './components/Layout';
import HomePage from './pages/HomePage';
import BlogPage from './pages/blog/BlogPage';
import BlogPostPage from './pages/blog/BlogPostPage';
import ProjectsPage from "@/pages/ProjectsPage";
import BarrioDeSalamancaPenthousePage from "@/pages/BarrioDeSalamancaPenthousePage";
export default function App() {
@@ -11,6 +13,8 @@ export default function App() {
<Route path="/" element={<HomePage />} />
<Route path="/projects" element={<ProjectsPage />} />
<Route path="/barrio-de-salamanca-penthouse" element={<BarrioDeSalamancaPenthousePage />} />
<Route path="/blog" element={<BlogPage />} />
<Route path="/blog/:slug" element={<BlogPostPage />} />
</Route>
</Routes>
);

View File

@@ -14,6 +14,8 @@ export default function Layout() {
{ name: "Testimonials", href: "/#testimonials" },
{ name: "Contact", href: "/#contact" },
{ name: "Barrio De Salamanca Penthouse", href: "/barrio-de-salamanca-penthouse" },
{ name: "Blog", href: "/blog" },
];

View File

@@ -5,15 +5,15 @@
:root {
/* @colorThemes/lightTheme/grayNavyBlue */
--background: #f6f0e9;
--card: #efe7dd;
--foreground: #2b180a;
--primary-cta: #2b180a;
--primary-cta-text: #f6f0e9;
--secondary-cta: #efe7dd;
--secondary-cta-text: #2b180a;
--accent: #94877c;
--background-accent: #afa094;
--background: #f5faff;
--card: #ffffff;
--foreground: #001122;
--primary-cta: #15479c;
--primary-cta-text: #f5faff;
--secondary-cta: #ffffff;
--secondary-cta-text: #001122;
--accent: #a8cce8;
--background-accent: #7ba3cf;
/* @layout/border-radius/rounded */
--radius: 1rem;

19
src/pages/BlogPage.tsx Normal file
View File

@@ -0,0 +1,19 @@
import Button from "@/components/ui/Button";
import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot";
import TextAnimation from "@/components/ui/TextAnimation";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import ScrollReveal from "@/components/ui/ScrollReveal";
import AvatarGroup from "@/components/ui/AvatarGroup";
import { ArrowUpRight, Loader2 } from "lucide-react";
import GridOrCarousel from "@/components/ui/GridOrCarousel";
import { useButtonClick } from "@/hooks/useButtonClick";
import useBlogPosts from "@/hooks/useBlogPosts";
export default function BlogPage() {
return (
<>
<div data-webild-section="HeroBillboard"><section aria-label="Hero section" className="relative pt-25 pb-20 md:pt-30"><HeroBackgroundSlot /><div className="flex flex-col gap-12 md:gap-15 w-content-width mx-auto"><div className="flex flex-col items-center gap-3 text-center"><div className="px-3 py-1 mb-1 text-sm card rounded w-fit"><p>Design Journal</p></div><TextAnimation text="Stories of Space and Light" variant="fade-blur" gradientText={true} tag="h1" className="md:max-w-8/10 text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-center text-balance" /><TextAnimation text="Explore our latest thoughts on bespoke interiors, architectural trends, and the art of curating spaces that reflect your personal essence." variant="fade-blur" gradientText={false} tag="p" className="md:max-w-7/10 text-lg md:text-xl leading-snug text-balance" /><div className="flex flex-wrap justify-center gap-3 mt-2 md:mt-3"><Button text="Read Latest" href="#latest" variant="primary" /><Button text="Explore Topics" href="#topics" variant="secondary" animationDelay={0.1} /></div></div><ScrollReveal variant="fade-blur" delay={0.2} className="w-full p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden"><ImageOrVideo imageSrc="https://picsum.photos/seed/2089910226/1200/800" className="aspect-4/5 md:aspect-video" /></ScrollReveal></div></section></div>
<div data-webild-section="BlogMediaCards"><section aria-label="Blog section" className="py-20"><div className="w-content-width mx-auto flex justify-center"><Loader2 className="size-8 animate-spin text-foreground" strokeWidth={1.5} /></div></section></div>
</>
);
}

View File

@@ -36,7 +36,7 @@ export default function HeroSection(): React.JSX.Element {
"Bilbao",
"Malaga",
]}
imageSrc="https://images.pexels.com/photos/5325768/pexels-photo-5325768.jpeg?auto=compress&cs=tinysrgb&h=650&w=940&id=5325768"
imageSrc="https://images.pexels.com/photos/28484958/pexels-photo-28484958.jpeg?auto=compress&cs=tinysrgb&h=650&w=940&id=28484958"
/>
</SectionErrorBoundary>
</div>

View File

@@ -309,6 +309,36 @@ const TestimonialsInline = () => {
</div>
</div>
</ScrollReveal>
<ScrollReveal variant="fade-blur" delay={0.4}>
<div className="relative w-full overflow-hidden flex group mt-5">
<div className="flex animate-marquee group-hover:[animation-play-state:paused]">
{[...testimonials, ...testimonials].map((testimonial, index) => (
<div key={`fourth-${index}`} className="flex flex-col justify-between gap-4 xl:gap-5 2xl:gap-6 shrink-0 w-72 md:w-80 mr-5 p-6 xl:p-7 2xl:p-8 rounded card">
<p className="text-lg leading-snug line-clamp-3">{testimonial.quote}</p>
<div className="flex flex-col gap-4">
<div className="flex items-center gap-3">
<ImageOrVideo
imageSrc={testimonial.imageSrc}
videoSrc={testimonial.videoSrc}
className="size-10 md:size-11 2xl:size-12 rounded-full object-cover"
/>
<div className="flex flex-col min-w-0">
<div className="flex items-center gap-1">
<span className="text-base text-foreground font-semibold leading-snug truncate">{testimonial.name}</span>
<BadgeCheck className="size-4 text-blue-500 shrink-0" />
</div>
<span className="text-base text-foreground/75 leading-snug truncate">{testimonial.role}</span>
</div>
</div>
<Button text="Contact" variant="secondary" className="w-full py-2 text-sm" />
</div>
</div>
))}
</div>
</div>
</ScrollReveal>
</div>
</section>
);

View File

@@ -8,4 +8,5 @@ export const routes: Route[] = [
{ path: '/', label: 'Home', pageFile: 'HomePage' },
{ path: '/projects', label: 'Projects', pageFile: 'ProjectsPage' },
{ path: '/barrio-de-salamanca-penthouse', label: 'Barrio De Salamanca Penthouse', pageFile: 'BarrioDeSalamancaPenthousePage' },
{ path: '/blog', label: 'Blog', pageFile: 'BlogPage' },
];