diff --git a/public/blog1.png b/public/blog1.png new file mode 100644 index 0000000..f2ad3a7 Binary files /dev/null and b/public/blog1.png differ diff --git a/public/blog2.png b/public/blog2.png new file mode 100644 index 0000000..82a09af Binary files /dev/null and b/public/blog2.png differ diff --git a/src/components/blog/blog-list.tsx b/src/components/blog/blog-list.tsx index b08ccd3..535b7c6 100644 --- a/src/components/blog/blog-list.tsx +++ b/src/components/blog/blog-list.tsx @@ -3,7 +3,7 @@ import Link from "next/link"; import { useMemo, useState } from "react"; import { Select } from "@/components/ui/select"; -import { Telescope, Target } from "@/components/ui/illustrations"; +import Image from "next/image"; import { Reveal } from "@/components/ui/reveal"; import { categories, posts, type Post } from "@/data/posts"; @@ -25,10 +25,11 @@ function boundary({ y, m, d }: DateParts, end: boolean) { const dateFormat = new Intl.DateTimeFormat("en-US", { month: "short", day: "numeric", year: "numeric", timeZone: "UTC" }); -const themes = { - navy: "bg-[#11192d]", - blue: "bg-linear-to-br from-[#0160d4] to-[#0a8bff]", - orange: "bg-linear-to-br from-[#f3610c] to-[#ffb020]", +// The orange cover is the blue telescope image hue-shifted. +const covers = { + dart: { src: "/blog1.png", className: "" }, + telescope: { src: "/blog2.png", className: "" }, + "telescope-orange": { src: "/blog2.png", className: "hue-rotate-[188deg] saturate-125" }, }; function CalendarIcon() { @@ -41,12 +42,11 @@ function CalendarIcon() { } function PostCard({ post }: { post: Post }) { - const Art = post.art === "telescope" ? Telescope : Target; + const cover = covers[post.cover]; return (
-
-
- +
+

{post.title}

diff --git a/src/components/ui/illustrations.tsx b/src/components/ui/illustrations.tsx deleted file mode 100644 index d77997b..0000000 --- a/src/components/ui/illustrations.tsx +++ /dev/null @@ -1,45 +0,0 @@ -/** Placeholder 3D-style illustrations. Swap for the real artwork when available. */ - -function Defs() { - return ( - - - - - - - ); -} - -export function Telescope({ className = "" }: { className?: string }) { - return ( - - - - - - - - - - - - - ); -} - -export function Target({ className = "" }: { className?: string }) { - return ( - - - - - - - - - - - - ); -} diff --git a/src/data/posts.ts b/src/data/posts.ts index 2668a90..9750418 100644 --- a/src/data/posts.ts +++ b/src/data/posts.ts @@ -5,23 +5,22 @@ export type Post = { category: string; /** ISO date (YYYY-MM-DD) */ date: string; - theme: "navy" | "blue" | "orange"; - art: "telescope" | "target"; + cover: "dart" | "telescope" | "telescope-orange"; }; export const categories = ["Industry Insights", "Guides", "Product Updates", "Customer Stories"]; export const posts: Post[] = [ - { slug: "choosing-tour-booking-software", title: "How to choose the right tour booking software", excerpt: "A practical checklist for comparing booking platforms for tours, transfers and rentals.", category: "Guides", date: "2026-09-30", theme: "navy", art: "target" }, - { slug: "ai-in-tour-operations", title: "How AI is changing tour operations", excerpt: "From dynamic pricing to automated customer replies, where AI already saves operators time.", category: "Industry Insights", date: "2026-09-27", theme: "blue", art: "telescope" }, - { slug: "ota-connectivity-explained", title: "OTA connectivity explained", excerpt: "How to distribute inventory to marketplaces without double bookings or manual updates.", category: "Guides", date: "2026-09-21", theme: "orange", art: "telescope" }, - { slug: "voyager-fleet-management", title: "New: fleet and staff scheduling", excerpt: "Assign vehicles and drivers to departures in a few clicks, with conflicts flagged for you.", category: "Product Updates", date: "2026-09-14", theme: "navy", art: "target" }, - { slug: "direct-bookings-playbook", title: "A playbook for more direct bookings", excerpt: "Lower your OTA commissions by turning your own website into your best sales channel.", category: "Industry Insights", date: "2026-08-29", theme: "navy", art: "target" }, - { slug: "city-tours-case-study", title: "How a city tour operator doubled online sales", excerpt: "A look at the workflows and tools behind a year of steady growth.", category: "Customer Stories", date: "2026-08-17", theme: "blue", art: "telescope" }, - { slug: "pricing-your-tours", title: "Fixed vs. dynamic pricing for tours", excerpt: "When to keep prices simple and when demand-based pricing pays off.", category: "Guides", date: "2026-07-22", theme: "orange", art: "telescope" }, - { slug: "payments-update", title: "Faster payouts and simpler reconciliation", excerpt: "What changed in payments, and how it affects your month-end reporting.", category: "Product Updates", date: "2026-07-03", theme: "navy", art: "target" }, - { slug: "rental-business-growth", title: "Adding rentals to a tour business", excerpt: "Why many operators expand into vehicle and equipment rentals, and how to start.", category: "Industry Insights", date: "2026-06-12", theme: "navy", art: "target" }, - { slug: "transfer-company-story", title: "A transfer company goes paperless", excerpt: "Replacing spreadsheets and phone calls with one connected booking system.", category: "Customer Stories", date: "2026-05-20", theme: "blue", art: "telescope" }, - { slug: "crm-for-operators", title: "Why tour operators need a CRM", excerpt: "Keep every guest, enquiry and repeat booking in one place.", category: "Guides", date: "2026-04-08", theme: "orange", art: "telescope" }, - { slug: "api-and-integrations", title: "API and integrations: what is new", excerpt: "New endpoints and partner integrations for connecting Voyager to your stack.", category: "Product Updates", date: "2026-03-15", theme: "navy", art: "target" }, + { slug: "choosing-tour-booking-software", title: "How to choose the right tour booking software", excerpt: "A practical checklist for comparing booking platforms for tours, transfers and rentals.", category: "Guides", date: "2026-09-30", cover: "dart" }, + { slug: "ai-in-tour-operations", title: "How AI is changing tour operations", excerpt: "From dynamic pricing to automated customer replies, where AI already saves operators time.", category: "Industry Insights", date: "2026-09-27", cover: "telescope" }, + { slug: "ota-connectivity-explained", title: "OTA connectivity explained", excerpt: "How to distribute inventory to marketplaces without double bookings or manual updates.", category: "Guides", date: "2026-09-21", cover: "telescope-orange" }, + { slug: "voyager-fleet-management", title: "New: fleet and staff scheduling", excerpt: "Assign vehicles and drivers to departures in a few clicks, with conflicts flagged for you.", category: "Product Updates", date: "2026-09-14", cover: "dart" }, + { slug: "direct-bookings-playbook", title: "A playbook for more direct bookings", excerpt: "Lower your OTA commissions by turning your own website into your best sales channel.", category: "Industry Insights", date: "2026-08-29", cover: "dart" }, + { slug: "city-tours-case-study", title: "How a city tour operator doubled online sales", excerpt: "A look at the workflows and tools behind a year of steady growth.", category: "Customer Stories", date: "2026-08-17", cover: "telescope" }, + { slug: "pricing-your-tours", title: "Fixed vs. dynamic pricing for tours", excerpt: "When to keep prices simple and when demand-based pricing pays off.", category: "Guides", date: "2026-07-22", cover: "telescope-orange" }, + { slug: "payments-update", title: "Faster payouts and simpler reconciliation", excerpt: "What changed in payments, and how it affects your month-end reporting.", category: "Product Updates", date: "2026-07-03", cover: "dart" }, + { slug: "rental-business-growth", title: "Adding rentals to a tour business", excerpt: "Why many operators expand into vehicle and equipment rentals, and how to start.", category: "Industry Insights", date: "2026-06-12", cover: "dart" }, + { slug: "transfer-company-story", title: "A transfer company goes paperless", excerpt: "Replacing spreadsheets and phone calls with one connected booking system.", category: "Customer Stories", date: "2026-05-20", cover: "telescope" }, + { slug: "crm-for-operators", title: "Why tour operators need a CRM", excerpt: "Keep every guest, enquiry and repeat booking in one place.", category: "Guides", date: "2026-04-08", cover: "telescope-orange" }, + { slug: "api-and-integrations", title: "API and integrations: what is new", excerpt: "New endpoints and partner integrations for connecting Voyager to your stack.", category: "Product Updates", date: "2026-03-15", cover: "dart" }, ];