Around the Cove Strip

Around the cove

Whatwedoonourdaysoff.

The island is small enough to know well. These are the places we send friends, and the front desk will happily arrange any of them.

About this block

Around the Cove StripPRO

A local guide strip for a hotel: portrait experience cards that start in line with the heading and bleed off the right edge, snap as you swipe or step with arrow buttons, lean in on hover under a small category pill, and carry a serif title, a short note and how far it is, with a hairline that fills as you scroll.

Hotel16: Around the Cove Strip

A horizontal strip of portrait experience cards that starts in line with the heading and bleeds off the right edge, snaps card by card as you swipe or press the arrow buttons, and fills a hairline progress bar underneath as it scrolls; each card leans in on hover under a category pill.

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/hotel16?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/hotel16.tsx plus the text1 word stagger it uses for the heading.

Quick start

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

tsx
import { Hotel16, hotel16Demo } from "@/components/beste/block/hotel16";

export default function Page() {
  return <Hotel16 {...hotel16Demo} />;
}

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

tsx
import { Hotel16 } from "@/components/beste/block/hotel16";

export default function Page() {
  return (
    <Hotel16
      eyebrow="Around the cove"
      heading="What we do on our days off."
      description="These are the places we send friends on Paros."
      experiences={[
        {
          kind: "Swim",
          title: "The rocks before breakfast",
          description: "Clear water off smooth stone, ten minutes along the coast path.",
          distance: "10 min on foot",
          href: "/around/rocks",
          image: { src: "https://oud.pics/b/hotel/ostria-swimmer.webp", alt: "A woman stepping from pale rocks into clear water" },
        },
        {
          kind: "Village",
          title: "Coffee at the harbor",
          description: "Watch the fishing boats come back in the morning.",
          distance: "6 min on foot",
          href: "/around/harbor",
          image: { src: "https://oud.pics/b/hotel/ostria-harbour.webp", alt: "Fishing boats moored at a stone quay" },
        },
      ]}
      labels={{ previous: "Previous", next: "Next" }}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstring–Uppercase line above the heading
headingstring–Serif heading, through Text1
descriptionstring–Paragraph above the arrow buttons
experiencesExperience[][]The cards in the strip, each one a link
labelsLabels{}Accessible names for the arrow buttons
classNamestring–Extra classes for the outer <section>
ts
type Experience = {
  kind: string;
  title: string;
  description: string;
  distance: string;
  href: string;
  image: { src: string; alt: string };
};

type Labels = {
  previous?: string;
  next?: string;
};

Behavior notes

  • The strip's left and right padding (and scroll padding) are measured from the header container's left edge on mount and on resize, so the first card lines up with the heading at any viewport width.
  • The arrow buttons scroll by one card width plus the 24px gap, smoothly unless reduced motion is on. Each one is disabled when the strip is within 8px of that end.
  • Cards are snap-start with mandatory snapping; they are 78vw wide on phones, 22rem from sm and 24rem from large screens. The scrollbar is hidden.
  • The hairline under the strip draws in once, then its dark fill follows the strip's horizontal scroll progress.
  • Hovering a card scales its photograph to 105% and nudges the arrow; photographs fade in from a 24px blur after they load.
  • The strip slides in 60px from the right on first view; reduced motion turns that and the other entrances off.

More Hotel blocks

View all Hotel
PRO

hotel11

Seasonal Stay Offers

PRO

hotel29

At a Glance Glyph Cards

PRO

hotel15

Getting Here Aerial Map

Get Pro