Skip to content

Features & services

Services Alternate

A row per service: a panel with the description, tools and a link beside a large photo, sides alternating; rows fill on hover.

Layout and motion from the Kalme template — see it in context

Installation

$ npx shadcn@latest add https://framebrick.co/r/blocks/services-alternate.json

Usage

import { ServicesAlternate } from "@/components/services-alternate";

<ServicesAlternate
  title="Everything a brand needs to grow"
  services={[
    {
      title: "Social media",
      href: "/services/social-media",
      description: "Channels that sound like you…",
      tools: ["Meta Business Suite", "Later"],
      image: "/services/social.jpg",
    },
  ]}
/>

Props

PropTypeDefaultDescription
label / title / leadstring—Muted line, heading (h2) and the lead beside it from 768px.
services{ title, href, description, tools?, image }[]4 servicesOne row each; titles are h3; the photo is decorative and links to the service too.
labels{ tools, more }Tools, More detailsText inside the panel.
classNamestring—Classes for the <section>.
  • Below 768px the photo (280px) sits above the panel; from 768px the panel (400px) comes first; from 1024px the panel is 342px and every second row puts the photo first.
  • From 1024px hovering a row fills it with the panel's surface and settles the photo from 105% to 100% (zoom-card). The link's arrow flips (arrow-flip-link) and its circle turns to the theme's primary; Kalme's red stays with the template.

AI prompt

Paste into v0, Lovable, Bolt or Claude to rebuild this block in your own project.

Create a React + Tailwind CSS block called ServicesAlternate (Next.js).
- <section className="py-(--section-y)">, container mx-auto max-w-(--container) px-(--gutter), column gap-16 / 20 / 24.
- Split title: a small muted label and an h2 (font-heading text-h2 semibold); beside it from 768px (items-end) a muted lead up to 400px.
- A list of rows (gap-12). Row (group, rounded-xl, gap-2.5): photo above the panel on phones (flex-col-reverse); from 768px panel (400px) then
  photo (flex-1); from 1024px panel 342px and every second row reversed; lg:hover:bg-muted (400ms).
- Panel (rounded-xl bg-muted, p-5 / md:px-5 md:py-7.5 / lg:p-7.5, gap-12): an h3 (text-lg semibold) and description (text-foreground/65), a
  "Tools" list with check icons, then a "More details" link with a 18px round arrow that flips out to the top right on hover.
- Photo: an aria-hidden link (tabIndex -1), rounded-xl, 280px tall on phones; the image at scale 1.05 settles to 1 while the row is hovered.
- Only shadcn variables and block tokens (secondary text on bg-muted is text-foreground/65: muted-foreground
  falls under 4.5:1 there); plain <img>.

Be the first to know

Get new templates and components first

One short email when we release a template or a free component. No spam — unsubscribe anytime.

We use your email only for Framebrick updates. Privacy policy