Getting Here Aerial Map

Getting here

Easytoreach,hardtoleave.

Fly to the island or take the ferry from Piraeus. Tell us when you land and someone from the house will be waiting with cold water and the car.

An aerial view of a turquoise cove, a whitewashed village and a small harbor among olive terraces
Ostria

Address

Ostria CoveParos 844 00, Greece

37.0853° N, 25.1518° E

Open in maps

From the house

  • The village harborOn foot, down the old stone path
    6 min
  • Ferry portTransfer by car, included when you book here
    20 min
  • Island airportDaily flights from Athens, 40 minutes in the air
    25 min
  • Sandy beachBy car, or by boat on calm mornings
    12 min
About this block

Getting Here Aerial MapPRO

A location section for a hotel: an aerial photograph that settles from a slight zoom as you scroll, marked with the hotel's name and pins for nearby places, beside the serif address with coordinates, an open-in-maps pill and a ruled list of travel times. Hovering a pin or a row lights up its partner.

Hotel15: Getting Here Aerial Map

A location section built on an aerial photograph that settles from a 112% zoom as you scroll, marked with a pulsing label for the hotel and pins for nearby places, followed by the serif address with coordinates, an open-in-maps pill and a ruled list of travel times whose rows light up together with their pins.

Upgrade to Pro

Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.

Upgrade Now

Installation

Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.

Radix flavor

bash
npx shadcn add "https://beste.dev/r/hotel15?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://beste.dev/r-base/hotel15?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/hotel15.tsx plus the button22 sliding-marker pill for the maps link and the text1 word stagger for the heading.

Quick start

The installed file exports hotel15Demo alongside the block: the exact props behind the preview above. Spread it to get a working section in one line.

tsx
import { Hotel15, hotel15Demo } from "@/components/beste/block/hotel15";

export default function Page() {
  return <Hotel15 {...hotel15Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Hotel15 } from "@/components/beste/block/hotel15";
import { Footprints, Plane, Ship } from "lucide-react";

export default function Page() {
  return (
    <Hotel15
      eyebrow="Getting here"
      heading="Easy to reach, hard to leave."
      description="Fly to the island or take the ferry from Piraeus."
      image={{ src: "https://oud.pics/b/hotel/ostria-aerial-cove.webp", alt: "An aerial view of a turquoise cove and a small harbor" }}
      home={{ label: "Ostria", x: 78, y: 40 }}
      places={[
        { name: "The village harbor", time: "6 min", detail: "On foot, down the old stone path", icon: Footprints, pin: { x: 44, y: 47 } },
        { name: "Ferry port", time: "20 min", detail: "Transfer by car", icon: Ship, pin: { x: 20, y: 47 } },
        { name: "Island airport", time: "25 min", detail: "Daily flights from Athens", icon: Plane },
      ]}
      address={{ lines: ["Ostria Cove", "Paros 844 00, Greece"], coordinates: "37.0853° N, 25.1518° E" }}
      button={{ label: "Open in maps", href: "https://maps.google.com", tone: "dark" }}
      labels={{ address: "Address", distances: "From the house" }}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstring–Uppercase line above the heading
headingstring–Serif heading, through Text1
descriptionstring–Paragraph in the right column of the header
imageImage–Aerial photograph; the map, pins and home label render only with it
homeHome–Hotel label, placed by percentage of the photo's width and height
placesPlace[][]Travel list rows, optionally pinned on the photo
addressAddress–Address lines and optional coordinates
buttonActionButton–Button22 pill under the address
labelsLabels{}Small titles above the address and the travel list
classNamestring–Extra classes for the outer <section>
ts
type Image = {
  src: string;
  alt: string;
};

type Home = {
  label: string;
  x: number;
  y: number;
};

type Place = {
  name: string;
  time: string;
  detail: string;
  icon: LucideIcon;
  pin?: { x: number; y: number };
};

type Address = {
  lines: string[];
  coordinates?: string;
};

type ActionButton = {
  label: string;
  href: string;
  tone?: "primary" | "light" | "dark" | "outline";
};

type Labels = {
  address?: string;
  distances?: string;
};

Behavior notes

  • Pin and home coordinates are percentages of the photo frame, so they stay on their spot as the frame changes from 4:3 on phones to 16:9 from the medium breakpoint.
  • A place without pin still gets a row in the list but no marker on the photo.
  • Hovering or focusing a pin, or hovering a list row, sets one shared active index: the pin dot grows to 150% and shows its name, the row's icon circle fills and the other rows mute. Leaving clears it.
  • The photograph scales from 112% to 100% as the frame crosses the viewport and fades in from a 24px blur once loaded. Pins pop in one after another (0.12s apart) after the home label.
  • The home dot pulses with animate-ping; reduced motion removes the pulse, the zoom and the entrance motion.
  • The address block renders when address or button is set, the travel list only when places has entries; the button tone falls back to dark.

More Hotel blocks

View all Hotel
PRO

hotel30

Bay Location Map

PRO

hotel31

Memory Line and Photo Wave

PRO

hotel47

Getting Here Ways

Get Pro