Short, practical writing on scheduling, billing, and the small habits that keep a care team out of the weeds.
Operations
A tiny change to how you confirm appointments does more for attendance than any reminder blast.
Elena Rourke · May 8
Billing
Automating the boring parts of billing frees your evenings and lifts your collection rate at the same time.
Marcus Vale · Apr 24
Teams
When everyone reads from the same file, handoffs stop being the place work quietly goes to die.
Priya Anand · Apr 11
A blog listing with an eyebrow over a hairline rule, a two-column heading, and three linked article cards with a hover-zoom image, a category label, a title, an excerpt, and byline.
A blog listing section that stacks an optional eyebrow badge over a hairline top rule, a two-column band pairing a large light-weight heading on the left with a right-aligned muted description, and a three-column grid of linked article cards, each rendering a hover-zoom cover image, an uppercase category label, a title, an excerpt, and an author-and-date byline.
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.
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
npx shadcn add "https://ui.beste.co/r/blog43?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/blog43?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/blog43.tsx, plus the badge23 beste component it uses to render the eyebrow badge.
The installed file exports blog43Demo alongside the block: the exact props behind the preview above. Spread it to get a working article grid in one line.
import { Blog43, blog43Demo } from "@/components/beste/block/blog43";
export default function Page() {
return <Blog43 {...blog43Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Blog43 } from "@/components/beste/block/blog43";
export default function Page() {
return (
<Blog43
badge={{ label: "Field notes" }}
heading="Ideas for running a calmer practice"
description="Short, practical writing on scheduling and billing."
items={[
{
image: { src: "/blog/no-shows.jpg", alt: "A tidy reception desk" },
category: "Operations",
title: "The five-minute habit that kills no-shows",
excerpt: "A tiny change to how you confirm appointments does more than any reminder blast.",
author: "Elena Rourke",
date: "May 8",
href: "/blog/no-shows",
},
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Eyebrow badge rendered above the rule via Badge23; omitted entirely when absent |
heading | string | – | Left-column section heading |
description | string | – | Right-aligned muted supporting paragraph |
items | Article[] | [] | Article cards rendered in the grid |
className | string | – | Extra classes merged onto the outer <section> |
type Article = {
image: { src: string; alt: string };
category: string;
title: string;
excerpt: string;
author: string;
date: string;
href: string;
};Link pointing at item.href, so navigation is real routing with no click handler or onClick callback to intercept; the whole card is the target.Badge23 component and passes only item.label through; no variant or tone control is exposed.heading and title are rendered as plain text, not dangerouslySetInnerHTML, so inline <strong> or other markup is not interpreted.index rather than href or an id, so reordering items remounts rather than reorders them.aspect-video clip and scales to scale-105 on hover, guarded by motion-safe: so it is skipped for users who prefer reduced motion; the title also shifts to text-primary on the same group hover.md:grid-cols-3 regardless of how many items are passed, so fewer than three articles leave trailing empty columns and more than three wrap to new rows.author and date with a middot (author · date); both strings are required on every item and are printed verbatim with no date formatting.blog48
A newsroom listing with a square eyebrow, a two-column heading band over a hairline rule, and four equally weighted stories as bordered cards, each linking through a hover-zoom image, a category kicker, a bold headline, a summary, and a byline pinned to the card foot.
blog3
Three-column responsive grid of blog cards featuring author avatars, tag badges, and hover zoom effects. Clean card design with date and read time metadata.
blog60
A blog section pairing one linked feature with a hover-zoom image, category label, and byline against a hairline list of five recent posts stamped with their date.
blog4
Large featured article with side-by-side image and content, followed by a three-column grid of secondary posts. Read more buttons and author details included.