38 Commits

Author SHA1 Message Date
6ffa3b8b96 Update src/app/page.tsx 2026-05-08 09:05:54 +00:00
88219a007e Merge version_17 into main
Merge version_17 into main
2026-05-08 09:03:54 +00:00
3185ad8bf6 Update src/app/page.tsx 2026-05-08 09:03:48 +00:00
da6243a14b Merge version_13 into main
Merge version_13 into main
2026-05-08 08:59:31 +00:00
e548dee610 Update theme fonts 2026-05-08 08:59:25 +00:00
5beb7133f6 Update theme fonts 2026-05-08 08:59:25 +00:00
78da337411 Merge version_13 into main
Merge version_13 into main
2026-05-08 08:59:03 +00:00
0e78549726 Update theme fonts 2026-05-08 08:59:00 +00:00
c2981e0577 Update theme fonts 2026-05-08 08:59:00 +00:00
937a454f03 Switch to version 13: modified src/app/quiz-and-reviews/page.tsx 2026-05-08 08:56:45 +00:00
18a73d6f09 Switch to version 13: modified src/app/page.tsx 2026-05-08 08:56:45 +00:00
09e41b453e Switch to version 14: modified src/app/page.tsx 2026-05-08 08:56:42 +00:00
c7a2288dce Switch to version 15: modified src/app/quiz-and-reviews/page.tsx 2026-05-08 08:56:39 +00:00
f0a4b81552 Switch to version 15: modified src/app/page.tsx 2026-05-08 08:56:39 +00:00
d563b80a73 Switch to version 15: modified src/app/hotel-contact/page.tsx 2026-05-08 08:56:38 +00:00
8a72f0c37e Merge version_16 into main
Merge version_16 into main
2026-05-08 08:55:31 +00:00
76fdec8303 Update src/app/quiz-and-reviews/page.tsx 2026-05-08 08:55:28 +00:00
01ca22159f Update src/app/page.tsx 2026-05-08 08:55:28 +00:00
ca249abe89 Update src/app/hotel-contact/page.tsx 2026-05-08 08:55:27 +00:00
d18e0c0a96 Merge version_15 into main
Merge version_15 into main
2026-05-08 08:52:57 +00:00
961ef9069e Update src/app/page.tsx 2026-05-08 08:52:51 +00:00
8bc32d5d73 Merge version_15 into main
Merge version_15 into main
2026-05-08 08:52:19 +00:00
085c519ca8 Update src/app/page.tsx 2026-05-08 08:52:16 +00:00
2f08a75972 Merge version_14 into main
Merge version_14 into main
2026-05-08 08:48:32 +00:00
3406d437f0 Update src/app/quiz-and-reviews/page.tsx 2026-05-08 08:48:29 +00:00
8c63301dbf Update src/app/page.tsx 2026-05-08 08:48:29 +00:00
43291d921b Merge version_13 into main
Merge version_13 into main
2026-05-08 08:43:30 +00:00
b185d7fadc Update src/app/page.tsx 2026-05-08 08:43:24 +00:00
ca57f873b8 Merge version_13 into main
Merge version_13 into main
2026-05-08 08:42:59 +00:00
c2dfa95670 Update src/app/quiz-and-reviews/page.tsx 2026-05-08 08:42:56 +00:00
38640265f8 Update src/app/page.tsx 2026-05-08 08:42:55 +00:00
74149546e8 Update src/app/hotel-contact/page.tsx 2026-05-08 08:42:55 +00:00
91e0c7aec3 Merge version_12 into main
Merge version_12 into main
2026-04-17 09:31:39 +00:00
93045f5214 Update src/app/hotel-contact/page.tsx 2026-04-17 09:31:36 +00:00
bdb090dd26 Merge version_12 into main
Merge version_12 into main
2026-04-17 09:31:14 +00:00
e7bf62cce7 Update src/app/page.tsx 2026-04-17 09:31:11 +00:00
f265175d20 Add src/app/hotel-contact/page.tsx 2026-04-17 09:31:10 +00:00
cc43a1a60d Merge version_11 into main
Merge version_11 into main
2026-04-17 09:24:45 +00:00
5 changed files with 115 additions and 118 deletions

View File

@@ -0,0 +1,57 @@
"use client";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleApple";
import ContactCTA from "@/components/sections/contact/ContactCTA";
import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal";
export default function HotelContactPage() {
return (
<ThemeProvider
defaultButtonVariant="icon-arrow"
defaultTextAnimation="entrance-slide"
borderRadius="rounded"
contentWidth="compact"
sizing="mediumLargeSizeMediumTitles"
background="circleGradient"
cardStyle="layered-gradient"
primaryButtonStyle="flat"
secondaryButtonStyle="solid"
headingFontWeight="medium"
>
<div id="nav" data-section="nav">
<NavbarStyleApple
brandName="TravelBook"
navItems={[
{ name: "Meklēt", id: "/" },
{ name: "Galamērķi", id: "/#destinations" },
{ name: "Atsauksmes", id: "/#features" },
{ name: "Kontakti", id: "/hotel-contact" }
]}
/>
</div>
<div id="contact" data-section="contact">
<ContactCTA
title="Kontakti"
description="Ja jums ir jautājumi, nepieciešama palīdzība ar rezervācijām vai vēlaties uzzināt vairāk par ceļojumiem, sazinieties ar mums! Mūsu komanda ar prieku palīdzēs."
tag="📞 Sazinies ar mums"
background={{ variant: "plain" }}
useInvertedBackground={false}
buttons={[
{ text: "Zvanīt: +371 20 121 744", href: "tel:+37120121744" },
{ text: "Rakstīt: TravelBook@gmail.com", href: "mailto:TravelBook@gmail.com" }
]}
/>
</div>
<div id="footer" data-section="footer">
<FooterLogoReveal
logoText="TravelBook"
leftLink={{ text: "Privātuma politika", href: "#" }}
rightLink={{ text: "Noteikumi un nosacījumi", href: "#" }}
/>
</div>
</ThemeProvider>
);
}

View File

@@ -6,6 +6,8 @@ import { ServiceWrapper } from "@/components/ServiceWrapper";
import Tag from "@/tag/Tag";
import { getVisualEditScript } from "@/utils/visual-edit-script";
import { Mulish } from "next/font/google";
import { DM_Sans } from "next/font/google";
import { Inter_Tight } from "next/font/google";
@@ -14,8 +16,12 @@ export const metadata: Metadata = {
description: 'Atrodi un rezervē viesnīcas visā pasaulē uz labākajām cenām. Salīdzini, apskatīies atsauksmes un sazinies ar mūsu komandu.',
};
const mulish = Mulish({
variable: "--font-mulish", subsets: ["latin"],
const interTight = Inter_Tight({
variable: "--font-inter-tight",
subsets: ["latin"],
weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
});
export default function RootLayout({
@@ -26,7 +32,7 @@ export default function RootLayout({
return (
<html lang="en" suppressHydrationWarning>
<ServiceWrapper>
<body className={`${mulish.variable} antialiased`}>
<body className={`${interTight.variable} antialiased`}>
<Tag />
{children}
<script

View File

@@ -6,27 +6,12 @@ import HeroSplitKpi from "@/components/sections/hero/HeroSplitKpi";
import ProductCardOne from "@/components/sections/product/ProductCardOne";
import FeatureCardTen from "@/components/sections/feature/FeatureCardTen";
import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal";
import { CheckCircle, Filter, MapPin, Search, Star, ZoomIn, ZoomOut, Search as SearchIcon, Info } from "lucide-react";
import { useState, useMemo } from "react";
import { CheckCircle, Filter, MapPin, Search, Star, Search as SearchIcon } from "lucide-react";
import { useState, Suspense } from "react";
export default function LandingPage() {
const [selectedCity, setSelectedCity] = useState<string | null>(null);
const [searchQuery, setSearchQuery] = useState("");
const [priceRange, setPriceRange] = useState(200);
const [minRating, setMinRating] = useState(0);
const allHotels = [
{ id: "grand-city", name: "Grand City", price: 120, rating: 5, top: "33%", left: "25%", description: "Lieliska viesnīca pilsētas centrā ar skatu uz parku.", amenities: ["Wifi", "Pool"] },
{ id: "sunset-view", name: "Sunset View", price: 85, rating: 4, top: "75%", left: "66%", description: "Mājīga vieta pie jūras ar brīnišķīgiem saulrietiem.", amenities: ["Wifi", "Beach Access"] }
];
const filteredHotels = useMemo(() => {
return allHotels.filter(h =>
h.name.toLowerCase().includes(searchQuery.toLowerCase()) &&
h.price <= priceRange &&
h.rating >= minRating
);
}, [searchQuery, priceRange, minRating]);
return (
<ThemeProvider
@@ -48,7 +33,7 @@ export default function LandingPage() {
{ name: "Meklēt", id: "search" },
{ name: "Galamērķi", id: "destinations" },
{ name: "Atsauksmes", id: "features" },
{ name: "Kontakti", id: "footer" }
{ name: "Kontakti", id: "/hotel-contact" }
]}
/>
</div>
@@ -79,59 +64,38 @@ export default function LandingPage() {
/>
</div>
<div id="search" data-section="search" className="py-12 px-6">
<div className="max-w-7xl mx-auto flex flex-col lg:flex-row gap-8">
<div className="lg:w-80 space-y-6">
<div className="bg-white p-6 rounded-2xl shadow-sm border border-slate-100">
<h3 className="font-bold mb-4 flex items-center gap-2"><Filter className="w-4 h-4"/> Filtri</h3>
<div className="space-y-4">
<div>
<label className="text-sm block mb-1">Budžets: {priceRange}</label>
<input type="range" min="50" max="300" value={priceRange} onChange={(e) => setPriceRange(Number(e.target.value))} className="w-full"/>
</div>
<div>
<label className="text-sm block mb-1">Min. vērtējums</label>
<select className="w-full p-2 border rounded" onChange={(e) => setMinRating(Number(e.target.value))}>
<option value="0">Visi</option>
<option value="4">4+</option>
<option value="5">5</option>
</select>
</div>
</div>
</div>
<div className="bg-white p-4 rounded-2xl shadow-sm border border-slate-100 space-y-2 h-96 overflow-y-auto">
<h4 className="font-bold">Redzamās viesnīcas:</h4>
{filteredHotels.map(h => (
<div key={h.id} className="p-3 text-sm bg-slate-50 rounded-lg hover:bg-slate-100 transition">
{h.name} - {h.price}
</div>
))}
</div>
<section id="search" data-section="search" className="py-24 px-4 md:px-8 lg:px-16 bg-white">
<div className="max-w-7xl mx-auto">
<div className="mb-12 text-center">
<h2 className="text-4xl font-bold text-slate-900 mb-4">Atrodi savu galamērķi</h2>
<p className="text-slate-600">Izmanto izvērstos filtrus, lai atrastu tieši to, ko meklē.</p>
</div>
<div className="flex-grow h-[600px] bg-slate-100 rounded-2xl flex flex-col p-6 shadow-inner relative overflow-hidden">
<div className="flex items-center justify-between mb-4 bg-white p-3 rounded-lg shadow-sm border border-black/10">
<div className="flex items-center gap-2">
<SearchIcon className="w-5 h-5 text-muted-foreground" />
<input type="text" placeholder="Meklēt pilsētu..." className="outline-none" value={searchQuery} onChange={(e) => setSearchQuery(e.target.value)} />
<div className="grid grid-cols-1 lg:grid-cols-12 gap-8 items-start">
<aside className="lg:col-span-3 space-y-6">
<div className="bg-slate-50 p-6 rounded-3xl border border-slate-100 shadow-sm">
<h3 className="font-bold mb-6 flex items-center gap-2 text-lg"><Filter className="w-5 h-5 text-indigo-500"/> Filtri</h3>
<div className="space-y-6">
<div>
<label className="text-sm font-medium block mb-3 text-slate-600">Budžets: <span className="font-bold text-indigo-600">{priceRange}</span></label>
<input type="range" min="50" max="300" value={priceRange} onChange={(e) => setPriceRange(Number(e.target.value))} className="w-full accent-indigo-500 h-2 bg-slate-200 rounded-lg appearance-none cursor-pointer hover:accent-indigo-600 transition-all"/>
</div>
</div>
<div className="flex-grow flex items-center justify-center bg-slate-200 rounded-lg relative">
{filteredHotels.map((city) => (
<div
key={city.id}
className="absolute cursor-pointer flex flex-col items-center group"
style={{ top: city.top, left: city.left }}
onClick={() => setSelectedCity(selectedCity === city.id ? null : city.id)}
>
<div className={`p-2 rounded-full border-2 border-white shadow-lg ${selectedCity === city.id ? "bg-blue-600" : "bg-red-500"}`}>
<MapPin className="w-5 h-5 text-white" />
</div>
</div>
))}
</div>
</aside>
<div className="lg:col-span-9 h-[500px] md:h-[600px] bg-white rounded-3xl flex flex-col p-4 shadow-lg border border-slate-200 relative overflow-hidden">
<div className="flex items-center gap-3 mb-6 bg-slate-50 p-4 rounded-2xl border border-slate-100 focus-within:ring-2 focus-within:ring-indigo-100 transition-all">
<SearchIcon className="w-5 h-5 text-slate-400" />
<input type="text" placeholder="Meklēt pilsētu, valsti vai viesnīcu nosaukumu..." className="flex-grow outline-none bg-transparent text-slate-800 placeholder:text-slate-400 font-medium" value={searchQuery} onChange={(e) => setSearchQuery(e.target.value)} />
</div>
<Suspense fallback={<div className="flex-grow flex items-center justify-center bg-slate-50 rounded-2xl animate-pulse text-slate-400">Ielādē karti...</div>}>
<div className="flex-grow flex items-center justify-center bg-slate-100/50 rounded-2xl border border-dashed border-slate-200 text-slate-400">
<p className="font-medium">Interaktīvā karte tiks ielādēta dinamiskajā režīmā.</p>
</div>
</Suspense>
</div>
</div>
</div>
</div>
</section>
<div id="destinations" data-section="destinations">
<ProductCardOne
@@ -159,9 +123,9 @@ export default function LandingPage() {
animationType="slide-up"
useInvertedBackground={true}
features={[
{ id: "step1", title: "1. Izmanto karti", description: "Izpēti galamērķus uz kartes.", media: { imageSrc: "http://img.b2bpic.net/free-photo/shipping-logistic-delivery-freight-cargo-concept_53876-124951.jpg?_wi=2" }, items: [{ icon: Search, text: "Interaktīvā karte" }], reverse: false },
{ id: "step2", title: "2. Salīdzini", description: "Apskatīies cenas un vērtējumus.", media: { imageSrc: "http://img.b2bpic.net/free-photo/gothic-church-with-spire-brick-architecture-historic-temple_169016-68118.jpg?_wi=2" }, items: [{ icon: Star, text: "Reitingi" }], reverse: true },
{ id: "step3", title: "3. Rezervē", description: "Izvēlies savu ideālo viesnīcu.", media: { imageSrc: "http://img.b2bpic.net/free-photo/panoramic-view-big-ben-from-bridge-london_268835-1399.jpg?_wi=2" }, items: [{ icon: CheckCircle, text: "Tiešsaistes rezervēšana" }], reverse: false }
{ id: "f1", title: "1. Izmanto karti", description: "Izpēti galamērķus uz kartes.", media: { imageSrc: "http://img.b2bpic.net/free-photo/shipping-logistic-delivery-freight-cargo-concept_53876-124951.jpg?_wi=2" }, items: [{ icon: Search, text: "Interaktīvā karte" }], reverse: false },
{ id: "f2", title: "2. Salīdzini", description: "Apskatīies cenas un vērtējumus.", media: { imageSrc: "http://img.b2bpic.net/free-photo/gothic-church-with-spire-brick-architecture-historic-temple_169016-68118.jpg?_wi=2" }, items: [{ icon: Star, text: "Reitingi" }], reverse: true },
{ id: "f3", title: "3. Rezervē", description: "Izvēlies savu ideālo viesnīcu.", media: { imageSrc: "http://img.b2bpic.net/free-photo/panoramic-view-big-ben-from-bridge-london_268835-1399.jpg?_wi=2" }, items: [{ icon: CheckCircle, text: "Tiešsaistes rezervēšana" }], reverse: false }
]}
/>
</div>

View File

@@ -5,7 +5,6 @@ import NavbarStyleApple from "@/components/navbar/NavbarStyleApple/NavbarStyleAp
import TestimonialCardTwo from "@/components/sections/testimonial/TestimonialCardTwo";
import FaqSplitText from "@/components/sections/faq/FaqSplitText";
import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal";
import { Star } from "lucide-react";
export default function QuizAndReviewsPage() {
return (
@@ -25,10 +24,10 @@ export default function QuizAndReviewsPage() {
<NavbarStyleApple
brandName="TravelBook"
navItems={[
{ name: "Meklēt", id: "search" },
{ name: "Galamērķi", id: "destinations" },
{ name: "Atsauksmes", id: "reviews" },
{ name: "Kontakti", id: "contact" }
{ name: "Meklēt", id: "/#search" },
{ name: "Galamērķi", id: "/#destinations" },
{ name: "Atsauksmes", id: "/#features" },
{ name: "Kontakti", id: "/hotel-contact" }
]}
/>
</div>
@@ -42,25 +41,13 @@ export default function QuizAndReviewsPage() {
useInvertedBackground={false}
showCard={true}
faqs={[
{
id: "1", title: "Kāds ir tavs ideālais ceļojuma mērķis?", content: "Pilsētas ar vēsturi un kultūru, pludmales paradīzes, kalnu avantiūras vai klusos ciematus?"
},
{
id: "2", title: "Cik ilgu laiku vēlies ceļot?", content: "Īss brīvdienu skaits, nedēļa, divas nedēļas vai ilgāks ceļojums."
},
{
id: "3", title: "Kāds ir tavs budžets per naktī?", content: "Ekonomisks (līdz €50), vidējais (€50-€150) vai luksuozs (virs €150)."
},
{
id: "4", title: "Kāds ir tavs vēlamais izmitināšanas veids?", content: "Viesnīca, hostels, airbnb apartamenti vai luksusa kurorts."
},
{
id: "5", title: "Ar ko tu vēlies nodarbināties brīvdienās?", content: "Aktīvie sporta veidi, relaksācija spa, ēdiena degustācija vai kultūras iepazīšana."
}
]}
buttons={[
{ text: "Nākt uz ceļojumu", href: "/" }
{ id: "1", title: "Kāds ir tavs ideālais ceļojuma mērķis?", content: "Pilsētas ar vēsturi un kultūru, pludmales paradīzes, kalnu avantiūras vai klusos ciematus?" },
{ id: "2", title: "Cik ilgu laiku vēlies ceļot?", content: "Īss brīvdienu skaits, nedēļa, divas nedēļas vai ilgāks ceļojums." },
{ id: "3", title: "Kāds ir tavs budžets per naktī?", content: "Ekonomisks (līdz €50), vidējais (€50-€150) vai luksuozs (virs €150)." },
{ id: "4", title: "Kāds ir tavs vēlamais izmitināšanas veids?", content: "Viesnīca, hostels, airbnb apartamenti vai luksusa kurorts." },
{ id: "5", title: "Ar ko tu vēlies nodarbināties brīvdienās?", content: "Aktīvie sporta veidi, relaksācija spa, ēdiena degustācija vai kultūras iepazīšana." }
]}
buttons={[{ text: "Nākt uz ceļojumu", href: "/" }]}
buttonAnimation="slide-up"
/>
</div>
@@ -75,28 +62,11 @@ export default function QuizAndReviewsPage() {
animationType="scale-rotate"
useInvertedBackground={true}
testimonials={[
{
id: "1", name: "Māra Liepiņa", role: "Ceļotāja", testimonial: "Vienkāršs un ātrs meklēšanas process. Atradu perfektu viesnīcu Parīzē dažos minūtēs. Brīnišķigs serviss!", imageSrc: "http://img.b2bpic.net/free-photo/casual-man-portrait-with-moustache-hat_1122-571.jpg?_wi=2", imageAlt: "uzņēmēja profesionāla portretu attēls"
},
{
id: "2", name: "Jānis Ozols", role: "Ceļotājs", testimonial: "Lielisks atbalsts. Zvanīju uz viņiem jautājumiem par viesnīcu un viņi nekavējoties palīdzēja.", imageSrc: "http://img.b2bpic.net/free-photo/three-beautiful-smiling-women-happily-looking-camera-holding_574295-3816.jpg?_wi=2", imageAlt: "cilvēka portrets profesionāla foto"
},
{
id: "3", name: "Inese Bērziņa", role: "Ceļotāja", testimonial: "Labas cenas, labs meklēšanas rīks. Ieteiktu visiem, kas plāno ceļojumu.", imageSrc: "http://img.b2bpic.net/free-photo/handsome-young-man-with-flowers_23-2147744597.jpg?_wi=2", imageAlt: "sievietes portrets smaidīga profesionāla"
},
{
id: "4", name: "Andris Kalniņš", role: "Ceļotājs", testimonial: "Ērti un draudzīgi. Labākais ceļojuma portāls, ko esmu pazinis.", imageSrc: "http://img.b2bpic.net/free-photo/close-up-woman-posing_23-2148877801.jpg?_wi=2", imageAlt: "cilvēka portrets profesionāls"
},
{
id: "5", name: "Kristīne Vītoliņa", role: "Ceļotāja", testimonial: "Pēc šīs platformas atradu ideālo patvāļīgo viesnīcu Rīgā. Iespējams, labākais ceļojuma vidējais!", imageSrc: "http://img.b2bpic.net/free-photo/casual-man-portrait-with-moustache-hat_1122-571.jpg?_wi=3", imageAlt: "portrets sievietei profesionāls"
},
{
id: "6", name: "Roberts Liepa", role: "Ceļotājs", testimonial: "Iespējams, vislabāk dārgā viesnīca, ko esmu apmeklējis caur šo vietni. Paldies!", imageSrc: "http://img.b2bpic.net/free-photo/handsome-young-man-with-flowers_23-2147744597.jpg?_wi=3", imageAlt: "vīrieša portrets profesionāls"
}
]}
buttons={[
{ text: "Pievienoties tūkstošiem apmierinātiem ceļotājiem", href: "/" }
{ id: "1", name: "Māra Liepiņa", role: "Ceļotāja", testimonial: "Vienkāršs un ātrs meklēšanas process. Atradu perfektu viesnīcu Parīzē dažos minūtēs. Brīnišķigs serviss!", imageSrc: "http://img.b2bpic.net/free-photo/casual-man-portrait-with-moustache-hat_1122-571.jpg?_wi=2" },
{ id: "2", name: "Jānis Ozols", role: "Ceļotājs", testimonial: "Lielisks atbalsts. Zvanīju uz viņiem jautājumiem par viesnīcu un viņi nekavējoties palīdzēja.", imageSrc: "http://img.b2bpic.net/free-photo/three-beautiful-smiling-women-happily-looking-camera-holding_574295-3816.jpg?_wi=2" },
{ id: "3", name: "Inese Bērziņa", role: "Ceļotāja", testimonial: "Labas cenas, labs meklēšanas rīks. Ieteiktu visiem, kas plāno ceļojumu.", imageSrc: "http://img.b2bpic.net/free-photo/handsome-young-man-with-flowers_23-2147744597.jpg?_wi=2" }
]}
buttons={[{ text: "Pievienoties tūkstošiem apmierinātiem ceļotājiem", href: "/" }]}
buttonAnimation="slide-up"
/>
</div>
@@ -110,4 +80,4 @@ export default function QuizAndReviewsPage() {
</div>
</ThemeProvider>
);
}
}

View File

@@ -11,7 +11,7 @@ html {
body {
background-color: var(--background);
color: var(--foreground);
font-family: var(--font-mulish), sans-serif;
font-family: var(--font-inter-tight), sans-serif;
position: relative;
min-height: 100vh;
overscroll-behavior: none;
@@ -24,5 +24,5 @@ h3,
h4,
h5,
h6 {
font-family: var(--font-mulish), sans-serif;
font-family: var(--font-inter-tight), sans-serif;
}