diff --git a/public/assets/images/about/privacy-policy-banner.jpg b/public/assets/images/about/privacy-policy-banner.jpg new file mode 100644 index 0000000..ffa0849 Binary files /dev/null and b/public/assets/images/about/privacy-policy-banner.jpg differ diff --git a/public/assets/images/about/terms-banner.jpg b/public/assets/images/about/terms-banner.jpg new file mode 100644 index 0000000..00f2ac4 Binary files /dev/null and b/public/assets/images/about/terms-banner.jpg differ diff --git a/public/assets/images/projects/residential-real-estate.jpg b/public/assets/images/projects/residential-real-estate.jpg new file mode 100644 index 0000000..b38bfe0 Binary files /dev/null and b/public/assets/images/projects/residential-real-estate.jpg differ diff --git a/public/sitemap.xml b/public/sitemap.xml index f4ad4ac..a5209ad 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -1 +1 @@ -https://skyandsoil.metatronnest.com/https://skyandsoil.metatronnest.com/about/https://skyandsoil.metatronnest.com/projects/https://skyandsoil.metatronnest.com/lifestyle/https://skyandsoil.metatronnest.com/contact/https://skyandsoil.metatronnest.com/compare/https://skyandsoil.metatronnest.com/properties/1/https://skyandsoil.metatronnest.com/properties/2/https://skyandsoil.metatronnest.com/properties/3/https://skyandsoil.metatronnest.com/properties/4/https://skyandsoil.metatronnest.com/properties/5/ \ No newline at end of file +https://skyandsoil.metatronnest.com/https://skyandsoil.metatronnest.com/about/https://skyandsoil.metatronnest.com/projects/https://skyandsoil.metatronnest.com/residential-real-estate/https://skyandsoil.metatronnest.com/lifestyle/https://skyandsoil.metatronnest.com/contact/https://skyandsoil.metatronnest.com/compare/https://skyandsoil.metatronnest.com/privacy-policy/https://skyandsoil.metatronnest.com/terms-of-service/https://skyandsoil.metatronnest.com/residential-real-estate/barca-at-godrej-msr-city/https://skyandsoil.metatronnest.com/residential-real-estate/godrej-woods/https://skyandsoil.metatronnest.com/residential-real-estate/godrej-hoskote/https://skyandsoil.metatronnest.com/residential-real-estate/godrej-lakeside-orchard/https://skyandsoil.metatronnest.com/residential-real-estate/godrej-tiara/ \ No newline at end of file diff --git a/script/generate-sitemap.cjs b/script/generate-sitemap.cjs index a2d2834..eb1f703 100644 --- a/script/generate-sitemap.cjs +++ b/script/generate-sitemap.cjs @@ -23,16 +23,26 @@ const staticLinks = [ { url: "/" }, { url: "/about/" }, { url: "/projects/" }, + { url: "/residential-real-estate/" }, { url: "/lifestyle/" }, { url: "/contact/" }, { url: "/compare/" }, + { url: "/privacy-policy/" }, + { url: "/terms-of-service/" }, ]; -// ✅ Dynamic properties (IDs from src/data/properties.ts) -const propertyIds = [1, 2, 3, 4, 5]; -const propertyLinks = propertyIds.map(id => ({ url: `/properties/${id}/` })); +// ✅ Dynamic property pages (manual slugs) +const propertyPages = [ + { slug: "/residential-real-estate/barca-at-godrej-msr-city/" }, + { slug: "/residential-real-estate/godrej-woods/" }, + { slug: "/residential-real-estate/godrej-hoskote/" }, + { slug: "/residential-real-estate/godrej-lakeside-orchard/" }, + { slug: "/residential-real-estate/godrej-tiara/" }, +]; -// Combine static + dynamic links +const propertyLinks = propertyPages.map(page => ({ url: page.slug })); + +// Combine static + property links const allLinks = [...staticLinks, ...propertyLinks].map(link => ({ url: formatUrl(link.url), })); diff --git a/src/app/privacy-policy/page.tsx b/src/app/privacy-policy/page.tsx new file mode 100644 index 0000000..f38f33f --- /dev/null +++ b/src/app/privacy-policy/page.tsx @@ -0,0 +1,160 @@ +import Link from "next/link"; +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; +import InnerBanner from "@/components/InnerBanner"; + +export default function PrivacyPolicy() { + return ( +
+ {/* Header */} +
+ + {/* Inner Banner */} + + + {/* Page Content */} +
+

+ Privacy Policy +

+ +
+

+ Last updated: {new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' })} +

+ +
+

1. Introduction

+

+ Welcome to Sky and Soil. We respect your privacy and are committed to protecting your personal data. + This privacy policy will inform you about how we look after your personal data when you visit our website + and tell you about your privacy rights and how the law protects you. +

+
+ +
+

2. Information We Collect

+

+ We may collect, use, store and transfer different kinds of personal data about you which we have grouped together as follows: +

+
    +
  • Identity Data: includes first name, last name, username or similar identifier.
  • +
  • Contact Data: includes email address, telephone numbers, and mailing address.
  • +
  • Technical Data: includes internet protocol (IP) address, browser type and version, time zone setting and location, browser plug-in types and versions, operating system and platform.
  • +
  • Usage Data: includes information about how you use our website and services.
  • +
  • Marketing and Communications Data: includes your preferences in receiving marketing from us and your communication preferences.
  • +
+
+ +
+

3. How We Use Your Information

+

+ We will only use your personal data when the law allows us to. Most commonly, we will use your personal data in the following circumstances: +

+
    +
  • To provide and maintain our services
  • +
  • To notify you about changes to our services
  • +
  • To provide customer support
  • +
  • To gather analysis or valuable information so that we can improve our services
  • +
  • To monitor the usage of our services
  • +
  • To detect, prevent and address technical issues
  • +
  • To provide you with news, special offers and general information about other goods, services and events which we offer
  • +
+
+ +
+

4. Data Security

+

+ We have put in place appropriate security measures to prevent your personal data from being accidentally lost, + used or accessed in an unauthorized way, altered or disclosed. In addition, we limit access to your personal data + to those employees, agents, contractors and other third parties who have a business need to know. +

+
+ +
+

5. Data Retention

+

+ We will only retain your personal data for as long as necessary to fulfil the purposes we collected it for, + including for the purposes of satisfying any legal, accounting, or reporting requirements. +

+
+ +
+

6. Your Legal Rights

+

+ Under certain circumstances, you have rights under data protection laws in relation to your personal data, including the right to: +

+
    +
  • Request access to your personal data
  • +
  • Request correction of your personal data
  • +
  • Request erasure of your personal data
  • +
  • Object to processing of your personal data
  • +
  • Request restriction of processing your personal data
  • +
  • Request transfer of your personal data
  • +
  • Right to withdraw consent
  • +
+
+ +
+

7. Cookies

+

+ Our website uses cookies to distinguish you from other users of our website. This helps us to provide you + with a good experience when you browse our website and also allows us to improve our site. +

+
+ +
+

8. Third-Party Links

+

+ Our website may include links to third-party websites, plug-ins and applications. Clicking on those links + or enabling those connections may allow third parties to collect or share data about you. We do not control + these third-party websites and are not responsible for their privacy statements. +

+
+ +
+

9. Contact Us

+

+ If you have any questions about this Privacy Policy, please contact us: +

+
    +
  • Email: hello@skyandsoil.com
  • +
  • Phone: +91 80 1234 5678
  • +
  • Address: Bangalore, Karnataka
  • +
+
+
+ +
+ + + + + Back to Home + +
+
+ + {/* Footer */} +
+ ); +} diff --git a/src/app/projects/page.tsx b/src/app/projects/page.tsx index 93e7f16..d862f31 100644 --- a/src/app/projects/page.tsx +++ b/src/app/projects/page.tsx @@ -1,11 +1,93 @@ -import PropertiesClient from "@/components/PropertiesClient"; -import { Metadata } from "next"; +import Link from "next/link"; +import Image from "next/image"; +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; +import InnerBanner from "@/components/InnerBanner"; -export const metadata: Metadata = { - title: "Our Properties | Sky and Soil Real Estate", - description: "Browse our exclusive collection of premium apartments, villas, and plots in North Bengaluru. Find your perfect home with Sky and Soil.", -}; +export default function ProjectsPage() { + const categories = [ + { + id: 1, + title: "Residential Real Estate", + description: "Discover our premium residential properties featuring modern architecture, luxury amenities, and prime locations. From spacious apartments to exclusive villas, find your dream home with world-class facilities and exceptional living experiences.", + image: "/assets/images/projects/residential-real-estate.jpg", + href: "/residential-real-estate", + properties: "Residential Real Estate" + } + ]; -export default function PropertiesPage() { - return ; + return ( +
+
+ + + +
+
+

+ Project Categories +

+

+ Browse through our carefully curated collection of properties +

+
+ +
+ {categories.map((category) => ( +
+
+ {/* Image Section - Left */} +
+ {category.title} +
+ + {/* Badge */} +
+ {category.properties} +
+
+ + {/* Content Section - Right */} +
+

+ {category.title} +

+

+ {category.description} +

+ + + View More + + + + +
+
+
+ ))} +
+
+ +
+
+ ); } diff --git a/src/app/properties/[slug]/layout.tsx b/src/app/properties/[slug]/layout.tsx deleted file mode 100644 index d6c21a7..0000000 --- a/src/app/properties/[slug]/layout.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Metadata } from "next"; -import { properties } from "@/data/properties"; - -// Required for static site generation with dynamic routes -export function generateStaticParams() { - return properties.map((property) => ({ - id: property.id.toString(), - })); -} - -export async function generateMetadata({ params }: { params: Promise<{ id: string }> }): Promise { - const resolvedParams = await params; - const property = properties.find(p => p.id === parseInt(resolvedParams.id)); - - if (!property) { - return { - title: "Property Not Found | Sky and Soil", - description: "The requested property could not be found." - }; - } - - return { - title: `${property.title} | Sky and Soil`, - description: `Explore ${property.title} in ${property.location}. ${property.overview.bhk} ${property.category} starting at ${property.price}.`, - }; -} - -export default function PropertyLayout({ - children, -}: { - children: React.ReactNode; -}) { - return <>{children}; -} diff --git a/src/app/properties/[slug]/metadata.ts b/src/app/properties/[slug]/metadata.ts deleted file mode 100644 index 5d3da8a..0000000 --- a/src/app/properties/[slug]/metadata.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Metadata } from "next"; -import { properties } from "@/data/properties"; - -// Required for static site generation with dynamic routes -export function generateStaticParams() { - return properties.map((property) => ({ - id: property.id.toString(), - })); -} - -export async function generateMetadata({ params }: { params: Promise<{ id: string }> }): Promise { - const resolvedParams = await params; - const property = properties.find(p => p.id === parseInt(resolvedParams.id)); - - if (!property) { - return { - title: "Property Not Found | Sky and Soil", - description: "The requested property could not be found." - }; - } - - return { - title: `${property.title} | Sky and Soil`, - description: `Explore ${property.title} in ${property.location}. ${property.overview.bhk} ${property.category} starting at ${property.price}.`, - }; -} diff --git a/src/app/properties/[slug]/page.tsx b/src/app/properties/[slug]/page.tsx deleted file mode 100644 index f061b7d..0000000 --- a/src/app/properties/[slug]/page.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { properties } from "@/data/properties"; -import { notFound } from "next/navigation"; -import PropertyDetailClient from "@/components/PropertyDetailClient"; - -export async function generateStaticParams() { - return properties.map((property) => ({ - slug: property.slug, - })); -} - -export default async function PropertyDetailPage({ params }: { params: Promise<{ slug: string }> }) { - const { slug } = await params; - const property = properties.find(p => p.slug === slug); - - if (!property) { - notFound(); - } - - return ; -} diff --git a/src/app/residential-real-estate/[slug]/page.tsx b/src/app/residential-real-estate/[slug]/page.tsx new file mode 100644 index 0000000..643a5bc --- /dev/null +++ b/src/app/residential-real-estate/[slug]/page.tsx @@ -0,0 +1,39 @@ +import { notFound } from "next/navigation"; +import PropertyDetailClient from "@/components/PropertyDetailClient"; +import { properties } from "@/data/properties"; +import { Metadata } from "next"; + +// Generate static params for all properties +export async function generateStaticParams() { + return properties.map((property) => ({ + slug: property.slug, + })); +} + +// Generate metadata for SEO +export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise { + const { slug } = await params; + const property = properties.find((p) => p.slug === slug); + + if (!property) { + return { + title: "Property Not Found", + }; + } + + return { + title: `${property.title} | Sky and Soil`, + description: property.description, + }; +} + +export default async function PropertyDetailPage({ params }: { params: Promise<{ slug: string }> }) { + const { slug } = await params; + const property = properties.find((p) => p.slug === slug); + + if (!property) { + notFound(); + } + + return ; +} diff --git a/src/app/residential-real-estate/page.tsx b/src/app/residential-real-estate/page.tsx new file mode 100644 index 0000000..111f5cf --- /dev/null +++ b/src/app/residential-real-estate/page.tsx @@ -0,0 +1,11 @@ +import PropertiesClient from "@/components/PropertiesClient"; +import { Metadata } from "next"; + +export const metadata: Metadata = { + title: "Residential Real Estate | Sky and Soil", + description: "Browse our exclusive collection of premium apartments, villas, and plots in North Bengaluru.", +}; + +export default function ResidentialRealEstatePage() { + return ; +} diff --git a/src/app/terms-of-service/page.tsx b/src/app/terms-of-service/page.tsx new file mode 100644 index 0000000..1cc03d3 --- /dev/null +++ b/src/app/terms-of-service/page.tsx @@ -0,0 +1,169 @@ +import Link from "next/link"; +import Header from "@/components/Header"; +import Footer from "@/components/Footer"; +import InnerBanner from "@/components/InnerBanner"; + +export default function TermsOfService() { + return ( +
+
+ + + +
+

+ Terms of Service +

+ +
+

+ Last updated: {new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' })} +

+ +
+

1. Agreement to Terms

+

+ By accessing and using the Sky and Soil website, you accept and agree to be bound by the terms and + provision of this agreement. If you do not agree to abide by the above, please do not use this service. +

+
+ +
+

2. Use License

+

+ Permission is granted to temporarily access the materials (information or software) on Sky and Soil's + website for personal, non-commercial transitory viewing only. This is the grant of a license, not a + transfer of title, and under this license you may not: +

+
    +
  • Modify or copy the materials
  • +
  • Use the materials for any commercial purpose or for any public display (commercial or non-commercial)
  • +
  • Attempt to decompile or reverse engineer any software contained on Sky and Soil's website
  • +
  • Remove any copyright or other proprietary notations from the materials
  • +
  • Transfer the materials to another person or "mirror" the materials on any other server
  • +
+
+ +
+

3. Property Information Disclaimer

+

+ All property information, including but not limited to descriptions, photographs, floor plans, pricing, + and availability, is provided for informational purposes only and is subject to change without notice. + While we strive to ensure accuracy, we make no warranties or representations regarding the completeness + or accuracy of such information. +

+
+ +
+

4. User Responsibilities

+

+ As a user of this website, you agree to: +

+
    +
  • Provide accurate and complete information when submitting inquiries or contact forms
  • +
  • Not use the website for any unlawful purpose or to solicit others to perform unlawful acts
  • +
  • Not infringe on the intellectual property rights of others
  • +
  • Not transmit any viruses, malware, or other malicious code
  • +
  • Not attempt to gain unauthorized access to any portion of the website
  • +
+
+ +
+

5. Intellectual Property

+

+ The content, organization, graphics, design, compilation, magnetic translation, digital conversion, + and other matters related to the website are protected under applicable copyrights, trademarks, and + other proprietary rights. The copying, redistribution, use, or publication by you of any such matters + or any part of the website is strictly prohibited. +

+
+ +
+

6. Limitation of Liability

+

+ In no event shall Sky and Soil or its suppliers be liable for any damages (including, without limitation, + damages for loss of data or profit, or due to business interruption) arising out of the use or inability + to use the materials on Sky and Soil's website, even if Sky and Soil or a Sky and Soil authorized + representative has been notified orally or in writing of the possibility of such damage. +

+
+ +
+

7. Accuracy of Materials

+

+ The materials appearing on Sky and Soil's website could include technical, typographical, or photographic + errors. Sky and Soil does not warrant that any of the materials on its website are accurate, complete, or + current. Sky and Soil may make changes to the materials contained on its website at any time without notice. +

+
+ +
+

8. Links to Third-Party Sites

+

+ Sky and Soil has not reviewed all of the sites linked to its website and is not responsible for the + contents of any such linked site. The inclusion of any link does not imply endorsement by Sky and Soil + of the site. Use of any such linked website is at the user's own risk. +

+
+ +
+

9. Modifications to Terms

+

+ Sky and Soil may revise these terms of service for its website at any time without notice. By using + this website you are agreeing to be bound by the then current version of these terms of service. +

+
+ +
+

10. Governing Law

+

+ These terms and conditions are governed by and construed in accordance with the laws of India, and you + irrevocably submit to the exclusive jurisdiction of the courts in Bangalore, Karnataka. +

+
+ +
+

11. Contact Information

+

+ If you have any questions about these Terms of Service, please contact us: +

+
    +
  • Email: hello@skyandsoil.com
  • +
  • Phone: +91 80 1234 5678
  • +
  • Address: Bangalore, Karnataka
  • +
+
+
+ +
+ + + + + Back to Home + +
+
+ +
+
+ ); +} diff --git a/src/components/FAQ.tsx b/src/components/FAQ.tsx index fd3fdb8..35aef20 100644 --- a/src/components/FAQ.tsx +++ b/src/components/FAQ.tsx @@ -1,6 +1,6 @@ "use client"; -import { useState } from "react"; +import { useState, useEffect } from "react"; import Image from "next/image"; const faqs = [ @@ -37,121 +37,84 @@ export default function FAQ() { const [activeCard, setActiveCard] = useState(0); const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 }); const [isHovering, setIsHovering] = useState(false); - const [activeTab, setActiveTab] = useState("General"); + + // Derive activeTab from activeCard to ensure sync + const activeTab = carouselImages[activeCard].label; + + // Reset open FAQ when active card changes + useEffect(() => { + setOpenIndex(null); + }, [activeCard]); const faqs = [ - // General + // Building Exterior { - category: "General", - question: "What types of properties do you offer?", - answer: "We offer a wide range of properties including luxury apartments, premium villas, and sustainable eco-homes designed to blend with nature." + category: "Building Exterior", + question: "What materials are used for the exterior?", + answer: "We use high-grade, weather-resistant materials including natural stone cladding and premium texture paints to ensure durability and elegance." }, { - category: "General", - question: "Where are your projects located?", - answer: "Our projects are strategically located in prime areas of Bangalore, including North Bangalore, Sarjapur Road, and Whitefield, ensuring excellent connectivity and appreciation potential." + category: "Building Exterior", + question: "Is the building earthquake resistant?", + answer: "Yes, all our structures are RCC framed and designed to be earthquake resistant, adhering to the highest safety standards and seismic zones." }, { - category: "General", - question: "Do you offer customization options?", - answer: "Yes, for select premium villas and apartments, we offer customization options for interiors and layout modifications, subject to structural feasibility." + category: "Building Exterior", + question: "How is the exterior maintenance handled?", + answer: "The society association manages exterior maintenance, including regular cleaning and painting, ensuring the building retains its pristine look for years." }, { - category: "General", - question: "What is the starting price of your properties?", - answer: "Our properties start from ₹1.17 Cr for premium apartments and go up to ₹5 Cr+ for luxury villas, catering to a wide range of budgets." + category: "Building Exterior", + question: "Are there eco-friendly features in the design?", + answer: "Absolutely. We incorporate vertical gardens, solar reflective paints, and rainwater harvesting systems into the building's exterior design." }, - // Booking + // Luxury Amenities { - category: "Booking", - question: "How can I book a site visit?", - answer: "You can book a site visit by clicking the 'Book a Visit' button on our website or by contacting our sales team directly through the contact form." + category: "Luxury Amenities", + question: "What recreational facilities are available?", + answer: "Residents enjoy access to a fully equipped clubhouse, temperature-controlled swimming pool, indoor games room, and a dedicated yoga deck." }, { - category: "Booking", - question: "What is the booking amount?", - answer: "The booking amount varies by project but typically ranges from 5% to 10% of the total property value. Our sales team can provide specific details for your chosen unit." + category: "Luxury Amenities", + question: "Is there a gym within the premises?", + answer: "Yes, we provide a state-of-the-art gymnasium with modern cardio and strength training equipment, open 24/7 for residents." }, { - category: "Booking", - question: "What documents are required for booking?", - answer: "You will need KYC documents (Aadhar Card, PAN Card), passport-sized photographs, and a cheque/draft for the booking amount." + category: "Luxury Amenities", + question: "Are there play areas for children?", + answer: "We have safe, designated play zones for children of all ages, featuring modern play equipment and soft flooring for safety." }, { - category: "Booking", - question: "Can I cancel my booking?", - answer: "Yes, cancellation policies are outlined in the booking agreement. Generally, a cancellation fee may apply depending on the stage of the booking." + category: "Luxury Amenities", + question: "Do you offer concierge services?", + answer: "Yes, our premium properties feature a concierge desk to assist residents with daily tasks, guest management, and facility bookings." }, - // Finance + // Modern Architecture { - category: "Finance", - question: "Do you provide assistance with home loans?", - answer: "Yes, we have tie-ups with leading banks and financial institutions to help you secure the best home loan rates and assist with the documentation process." + category: "Modern Architecture", + question: "What is the architectural style of the project?", + answer: "Our projects feature contemporary architecture with clean lines, open floor plans, and large windows to maximize natural light and ventilation." }, { - category: "Finance", - question: "Which banks have approved your projects?", - answer: "Our projects are approved by major banks including SBI, HDFC, ICICI, Axis Bank, and others, ensuring a smooth loan approval process." + category: "Modern Architecture", + question: "Who are the architects behind the design?", + answer: "We collaborate with award-winning international architects who specialize in creating sustainable and aesthetically stunning living spaces." }, { - category: "Finance", - question: "What are the payment plans available?", - answer: "We offer flexible payment plans such as construction-linked plans (CLP) and down-payment plans to suit your financial planning." + category: "Modern Architecture", + question: "Are the homes Vastu compliant?", + answer: "Yes, the majority of our units are designed in accordance with Vastu Shastra principles to ensure harmony and positive energy flow." }, { - category: "Finance", - question: "Are there any hidden charges?", - answer: "We believe in complete transparency. All charges including GST, registration, and maintenance deposits are clearly communicated at the time of booking." - }, - - // Legal - { - category: "Legal", - question: "Are your projects RERA registered?", - answer: "Absolutely. All our projects are fully compliant with RERA regulations and we ensure complete transparency in all our dealings." - }, - { - category: "Legal", - question: "Is the land title clear?", - answer: "Yes, all our projects are built on land with clear and marketable titles. We provide legal opinion reports from reputed law firms upon request." - }, - { - category: "Legal", - question: "What legal documents will I receive?", - answer: "You will receive the Sale Agreement, Sale Deed, Occupancy Certificate (OC), and other relevant documents upon completion and registration." - }, - { - category: "Legal", - question: "Do you assist with property registration?", - answer: "Yes, our team will guide you through the entire registration process and assist with the necessary paperwork at the sub-registrar's office." - }, - - // Amenities - { - category: "Amenities", - question: "What amenities are included in your projects?", - answer: "Our projects feature world-class amenities such as swimming pools, clubhouses, landscaped gardens, 24/7 security, and dedicated fitness centers." - }, - { - category: "Amenities", - question: "Is there a dedicated play area for kids?", - answer: "Yes, all our projects include safe and well-equipped children's play areas, ensuring a fun environment for your little ones." - }, - { - category: "Amenities", - question: "Do you have power backup?", - answer: "We provide 100% power backup for common areas and elevators, and partial/full backup for individual apartments depending on the project." - }, - { - category: "Amenities", - question: "Is there a gym and swimming pool?", - answer: "Yes, a state-of-the-art gymnasium and a temperature-controlled swimming pool are standard amenities in most of our luxury projects." - }, + category: "Modern Architecture", + question: "How is privacy ensured in the design?", + answer: "The layout is thoughtfully designed to ensure no two apartments look into each other, providing maximum privacy for all residents." + } ]; - const categories = ["General", "Booking", "Finance", "Legal", "Amenities"]; + const categories = carouselImages.map(img => img.label); const filteredFaqs = faqs.filter(faq => faq.category === activeTab); const toggleFAQ = (index: number) => { @@ -266,8 +229,8 @@ export default function FAQ() { - - + + -
+ }`} + aria-label={isWishlisted ? "Remove from wishlist" : "Add to wishlist"} + > + + + + + + + + {/* Content Section */} +
+

+ {property.title} +

+ +
+ + + + + {property.location}
- {/* Content Section */} -
-

- {property.title} -

- -
- - - - - {property.location} +
+
+
{property.price}
+
{property.overview.size}
- -
-
-
{property.price}
-
{property.overview.size}
-
-
-
{property.overview.bhk}
-
Possession: {property.overview.possession}
-
+
+
{property.overview.bhk}
+
Possession: {property.overview.possession}
diff --git a/src/components/PropertyDetailClient.tsx b/src/components/PropertyDetailClient.tsx index 66e2b9a..2c1936a 100644 --- a/src/components/PropertyDetailClient.tsx +++ b/src/components/PropertyDetailClient.tsx @@ -129,7 +129,8 @@ export default function PropertyDetailClient({ property }: { property: Property subtitle={property.location} breadcrumbs={[ { label: "Home", href: "/" }, - { label: "Properties", href: "/projects" }, + { label: "Projects", href: "/projects" }, + { label: "Residential Real Estate", href: "/residential-real-estate" }, { label: property.title } ]} backgroundImage={property.image} diff --git a/src/components/PropertyFilters.tsx b/src/components/PropertyFilters.tsx index 7c2839f..070d598 100644 --- a/src/components/PropertyFilters.tsx +++ b/src/components/PropertyFilters.tsx @@ -50,7 +50,7 @@ export default function PropertyFilters({ onFilterChange }: PropertyFiltersProps return (
-
+
{/* Main Filter Bar */}
{/* Search */} diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 5c0fba7..4314671 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -1,7 +1,7 @@ "use client"; import Link from "next/link"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import Image from "next/image"; import { ThemeToggle } from "@/components/ThemeToggle"; @@ -11,6 +11,8 @@ interface SidebarProps { } export default function Sidebar({ isOpen, onClose }: SidebarProps) { + const [isProjectsOpen, setIsProjectsOpen] = useState(false); + // Prevent scrolling when sidebar is open useEffect(() => { if (isOpen) { @@ -76,13 +78,45 @@ export default function Sidebar({ isOpen, onClose }: SidebarProps) { > About - - Projects - +
+
+ + Projects + + +
+
+ + Residential Real Estate + +
+