4 Commits

Author SHA1 Message Date
6f561d8f50 Merge version_3 into main
Merge version_3 into main
2026-03-12 13:43:13 +00:00
b41daa976c Update src/app/page.tsx 2026-03-12 13:43:09 +00:00
c4917ffd79 Merge version_2 into main
Merge version_2 into main
2026-03-12 13:26:23 +00:00
b38cdfe1f4 Merge version_2 into main
Merge version_2 into main
2026-03-12 13:25:58 +00:00

View File

@@ -10,6 +10,7 @@ import ContactText from "@/components/sections/contact/ContactText";
import TestimonialAboutCard from "@/components/sections/about/TestimonialAboutCard"; import TestimonialAboutCard from "@/components/sections/about/TestimonialAboutCard";
import PricingCardTwo from "@/components/sections/pricing/PricingCardTwo"; import PricingCardTwo from "@/components/sections/pricing/PricingCardTwo";
import FooterSimple from "@/components/sections/footer/FooterSimple"; import FooterSimple from "@/components/sections/footer/FooterSimple";
import RadialGradientBackground from "@/components/background/RadialGradientBackground";
import { Database, Globe, Shield, Sparkles, Zap, ArrowRight, Check } from "lucide-react"; import { Database, Globe, Shield, Sparkles, Zap, ArrowRight, Check } from "lucide-react";
export default function LandingPage() { export default function LandingPage() {
@@ -39,161 +40,225 @@ export default function LandingPage() {
</div> </div>
<div id="hero" data-section="hero"> <div id="hero" data-section="hero">
<HeroBillboardRotatedCarousel <div className="relative">
title="The investment analysis platform Europe's property market deserves." <RadialGradientBackground
description="Paste any European property listing URL. Get a full investment report in 60 seconds — net yield, tax breakdown, risk score, three scenarios." centerColor="var(--background)"
tag="Private beta · 847 investors waiting" edgeColor="var(--color-background-accent)"
tagIcon={Zap} size="130% 130%"
background={{ variant: "radial-gradient" }} position="50% 15%"
buttons={[{ text: "Get early access →", href: "#waitlist" }]} />
carouselItems={[ <HeroBillboardRotatedCarousel
{ title="The investment analysis platform Europe's property market deserves."
id: "1", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-68ywkcgf.jpg?_wi=1", imageAlt: "Investment analysis dashboard showing metrics" description="Paste any European property listing URL. Get a full investment report in 60 seconds — net yield, tax breakdown, risk score, three scenarios."
}, tag="Private beta · 847 investors waiting"
{ tagIcon={Zap}
id: "2", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-qj0y48af.jpg?_wi=1", imageAlt: "Property investment report interface" background={{ variant: "radial-gradient" }}
}, buttons={[{ text: "Get early access →", href: "#waitlist" }]}
{ carouselItems={[
id: "3", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-rn2r740d.jpg?_wi=1", imageAlt: "Real estate market analysis dashboard" {
}, id: "1", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-68ywkcgf.jpg?_wi=1", imageAlt: "Investment analysis dashboard showing metrics"
{ },
id: "4", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-yb3ch9ok.png?_wi=1", imageAlt: "Investment scenario comparison view" {
}, id: "2", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-qj0y48af.jpg?_wi=1", imageAlt: "Property investment report interface"
{ },
id: "5", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-68ywkcgf.jpg?_wi=2", imageAlt: "Tax breakdown and yield calculation" {
}, id: "3", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-rn2r740d.jpg?_wi=1", imageAlt: "Real estate market analysis dashboard"
{ },
id: "6", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-qj0y48af.jpg?_wi=2", imageAlt: "Risk assessment and scoring interface" {
} id: "4", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-yb3ch9ok.png?_wi=1", imageAlt: "Investment scenario comparison view"
]} },
autoPlay={true} {
autoPlayInterval={5000} id: "5", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-68ywkcgf.jpg?_wi=2", imageAlt: "Tax breakdown and yield calculation"
/> },
{
id: "6", imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-qj0y48af.jpg?_wi=2", imageAlt: "Risk assessment and scoring interface"
}
]}
autoPlay={true}
autoPlayInterval={5000}
/>
</div>
</div> </div>
<div id="social-proof" data-section="social-proof"> <div id="social-proof" data-section="social-proof">
<SocialProofOne <div className="relative">
title="Trusted by investors across Europe" <RadialGradientBackground
description="Join hundreds of property investors already using Terrivio" centerColor="var(--background)"
textboxLayout="default" edgeColor="var(--color-background-accent)"
useInvertedBackground={false} size="140% 140%"
names={[ position="50% 20%"
"Dutch Investors", "German Analysts", "French Partners", "Spanish Funds", "Italian Groups", "Swiss Wealth", "Belgian Teams" />
]} <SocialProofOne
speed={40} title="Trusted by investors across Europe"
showCard={true} description="Join hundreds of property investors already using Terrivio"
/> textboxLayout="default"
useInvertedBackground={false}
names={[
"Dutch Investors", "German Analysts", "French Partners", "Spanish Funds", "Italian Groups", "Swiss Wealth", "Belgian Teams"
]}
speed={40}
showCard={true}
/>
</div>
</div> </div>
<div id="metrics" data-section="metrics"> <div id="metrics" data-section="metrics">
<MetricCardThree <div className="relative">
title="Why Terrivio Stands Out" <RadialGradientBackground
description="Powerful metrics that drive investor confidence" centerColor="var(--background)"
textboxLayout="default" edgeColor="var(--color-background-accent)"
useInvertedBackground={false} size="135% 135%"
animationType="slide-up" position="50% 25%"
metrics={[ />
{ id: "1", icon: Globe, title: "European Markets", value: "13" }, <MetricCardThree
{ id: "2", icon: Database, title: "Data Sources", value: "8" }, title="Why Terrivio Stands Out"
{ id: "3", icon: Zap, title: "Report Time", value: "~60s" }, description="Powerful metrics that drive investor confidence"
{ id: "4", icon: Shield, title: "Gross Margin", value: "96%" } textboxLayout="default"
]} useInvertedBackground={false}
/> animationType="slide-up"
metrics={[
{ id: "1", icon: Globe, title: "European Markets", value: "13" },
{ id: "2", icon: Database, title: "Data Sources", value: "8" },
{ id: "3", icon: Zap, title: "Report Time", value: "~60s" },
{ id: "4", icon: Shield, title: "Gross Margin", value: "96%" }
]}
/>
</div>
</div> </div>
<div id="features" data-section="features"> <div id="features" data-section="features">
<FeatureCardTwentyOne <div className="relative">
title="From URL to investment decision." <RadialGradientBackground
description="No account needed. No spreadsheets. No guesswork." centerColor="var(--background)"
tag="HOW IT WORKS" edgeColor="var(--color-background-accent)"
imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-rn2r740d.jpg?_wi=2" size="130% 130%"
imageAlt="Three-step process visualization" position="50% 30%"
mediaAnimation="slide-up" />
useInvertedBackground={false} <FeatureCardTwentyOne
mediaPosition="right" title="From URL to investment decision."
accordionItems={[ description="No account needed. No spreadsheets. No guesswork."
{ tag="HOW IT WORKS"
id: "1", title: "Paste a property URL", content: "Copy any listing from Idealista, Funda, Green-Acres, Immobiliare, or 10+ platforms. Terrivio fetches all data automatically." imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-rn2r740d.jpg?_wi=2"
}, imageAlt="Three-step process visualization"
{ mediaAnimation="slide-up"
id: "2", title: "AI analyzes everything", content: "Our engine extracts specs, calculates gross and net yield, scores location risk, and models three investment scenarios in seconds." useInvertedBackground={false}
}, mediaPosition="right"
{ accordionItems={[
id: "3", title: "Make your decision", content: "Net yield, risk score, tax breakdown per country, break-even occupancy and DSCR — everything you need to invest with confidence." {
} id: "1", title: "Paste a property URL", content: "Copy any listing from Idealista, Funda, Green-Acres, Immobiliare, or 10+ platforms. Terrivio fetches all data automatically."
]} },
/> {
id: "2", title: "AI analyzes everything", content: "Our engine extracts specs, calculates gross and net yield, scores location risk, and models three investment scenarios in seconds."
},
{
id: "3", title: "Make your decision", content: "Net yield, risk score, tax breakdown per country, break-even occupancy and DSCR — everything you need to invest with confidence."
}
]}
/>
</div>
</div> </div>
<div id="demo" data-section="demo"> <div id="demo" data-section="demo">
<ContactText <div className="relative">
text="Try it yourself. Paste any real listing URL. No account needed." <RadialGradientBackground
animationType="reveal-blur" centerColor="var(--background)"
background={{ variant: "radial-gradient" }} edgeColor="var(--color-background-accent)"
useInvertedBackground={false} size="125% 125%"
buttons={[{ text: "Analyze →", href: "#analyze" }]} position="50% 35%"
/> />
<ContactText
text="Try it yourself. Paste any real listing URL. No account needed."
animationType="reveal-blur"
background={{ variant: "radial-gradient" }}
useInvertedBackground={false}
buttons={[{ text: "Analyze →", href: "#analyze" }]}
/>
</div>
</div> </div>
<div id="markets" data-section="markets"> <div id="markets" data-section="markets">
<TestimonialAboutCard <div className="relative">
tag="COVERAGE" <RadialGradientBackground
title="13 European markets." centerColor="var(--background)"
description="Local expertise in every region" edgeColor="var(--color-background-accent)"
subdescription="Local tax rules, STR regulations, rental yield data and price history — built in for every market." size="140% 140%"
icon={Globe} position="50% 40%"
imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-yb3ch9ok.png?_wi=2" />
imageAlt="European market map coverage" <TestimonialAboutCard
mediaAnimation="slide-up" tag="COVERAGE"
useInvertedBackground={false} title="13 European markets."
/> description="Local expertise in every region"
subdescription="Local tax rules, STR regulations, rental yield data and price history — built in for every market."
icon={Globe}
imageSrc="https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AqVgQeR7OoU3XeDyP8qH8ouFzg/uploaded-1773321908022-yb3ch9ok.png?_wi=2"
imageAlt="European market map coverage"
mediaAnimation="slide-up"
useInvertedBackground={false}
/>
</div>
</div> </div>
<div id="pricing" data-section="pricing"> <div id="pricing" data-section="pricing">
<PricingCardTwo <div className="relative">
title="Simple, transparent pricing." <RadialGradientBackground
description="Founding Member pricing locked in at signup. Price increases after launch." centerColor="var(--background)"
textboxLayout="default" edgeColor="var(--color-background-accent)"
animationType="slide-up" size="135% 135%"
useInvertedBackground={false} position="50% 45%"
plans={[ />
{ <PricingCardTwo
id: "1", badge: "Pay per report", price: "€3,20", subtitle: "per analysis", buttons: [{ text: "Join waitlist", href: "#waitlist" }], title="Simple, transparent pricing."
features: [ description="Founding Member pricing locked in at signup. Price increases after launch."
"No subscription", "Buy when you need it", "Cancel anytime", "Instant access" textboxLayout="default"
] animationType="slide-up"
}, useInvertedBackground={false}
{ plans={[
id: "2", badge: "Lite", price: "€29", subtitle: "/month", buttons: [{ text: "Join waitlist", href: "#waitlist" }], {
features: [ id: "1", badge: "Pay per report", price: "€3,20", subtitle: "per analysis", buttons: [{ text: "Join waitlist", href: "#waitlist" }],
"50 analyses per month", "All market data", "Email support", "Founding pricing" features: [
] "No subscription", "Buy when you need it", "Cancel anytime", "Instant access"
}, ]
{ },
id: "3", badge: "Pro", badgeIcon: Sparkles, {
price: "€59", subtitle: "/month", buttons: [ id: "2", badge: "Lite", price: "€29", subtitle: "/month", buttons: [{ text: "Join waitlist", href: "#waitlist" }],
{ text: "Get early access", href: "#waitlist" }, features: [
{ text: "Contact sales", href: "#contact" } "50 analyses per month", "All market data", "Email support", "Founding pricing"
], ]
features: [ },
"200 analyses per month", "All features included", "Priority support", "Custom integrations", "Locked founding price" {
] id: "3", badge: "Pro", badgeIcon: Sparkles,
} price: "€59", subtitle: "/month", buttons: [
]} { text: "Get early access", href: "#waitlist" },
/> { text: "Contact sales", href: "#contact" }
],
features: [
"200 analyses per month", "All features included", "Priority support", "Custom integrations", "Locked founding price"
]
}
]}
/>
</div>
</div> </div>
<div id="final-cta" data-section="final-cta"> <div id="final-cta" data-section="final-cta">
<ContactText <div className="relative">
text="847 investors are already waiting. Join them. Founding Member pricing is limited." <RadialGradientBackground
animationType="entrance-slide" centerColor="var(--background)"
background={{ variant: "animated-grid" }} edgeColor="var(--color-background-accent)"
useInvertedBackground={true} size="130% 130%"
buttons={[ position="50% 50%"
{ text: "Join waitlist", href: "#waitlist" }, />
{ text: "Learn more", href: "#features" } <ContactText
]} text="847 investors are already waiting. Join them. Founding Member pricing is limited."
/> animationType="entrance-slide"
background={{ variant: "animated-grid" }}
useInvertedBackground={true}
buttons={[
{ text: "Join waitlist", href: "#waitlist" },
{ text: "Learn more", href: "#features" }
]}
/>
</div>
</div> </div>
<div id="footer" data-section="footer"> <div id="footer" data-section="footer">