Ink Flow Hero

Paper, ink and patience

A quiet hand, a line that keeps moving.

An atelier for handmade paper and brush lettering. Every sheet is pressed by hand and every stroke is left the way it fell.

About this block

Ink Flow HeroPRO

A calm paper-toned hero built on the ink-flow background component: a generative Canvas 2D flow field draws ink strokes that slowly fade and redraw, gathering into heavier brush lines around the cursor. An eyebrow, a large serif headline, an intro and an underline arrow link sit on the quiet side. Every ink setting passes through the ink prop; ink and paper follow the theme tokens and it holds a still drawing for reduced motion.

Hero198: Ink Flow Hero

A paper-toned full-height hero with an InkFlow Canvas 2D flow field drawing and fading ink strokes behind it, a soft gradient keeping the left side quiet for an eyebrow, a large serif headline, an intro and an underline arrow link that rise in on mount.

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://ui.beste.co/r/hero198?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/hero198.tsx plus the ink-flow background and the button2 link it uses.

Quick start

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

tsx
import { Hero198, hero198Demo } from "@/components/beste/block/hero198";

export default function Page() {
  return <Hero198 {...hero198Demo} />;
}

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

tsx
import { Hero198 } from "@/components/beste/block/hero198";

export default function Page() {
  return (
    <Hero198
      eyebrow="Paper, ink and patience"
      heading="A quiet hand, a line that keeps moving."
      description="An atelier for handmade paper and brush lettering."
      button={{ label: "Visit the atelier", href: "https://beste.co" }}
      ink={{
        inkColor: "var(--foreground)",
        paperColor: "var(--background)",
        density: 0.5,
        gather: "right",
        brush: 0.5,
      }}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstring–Small line above the headline
headingstring–Serif headline, rendered as the page h1
descriptionstring–Intro paragraph under the headline
buttonActionButton–Underline arrow link (Button2) under the intro
inkOmit<InkFlowProps, "className" | "children">–Forwards InkFlow props: inkColor, paperColor, density, speed, swirl, trail, weight, opacity, gather, interactive, brush, paused
classNamestring–Extra classes for the outer <section>
ts
type ActionButton = {
  label: string;
  href: string;
};

Behavior notes

  • The section is at least 640px tall and otherwise fills the viewport minus 78px for the navbar. Text sits at the bottom left through mt-auto.
  • InkFlow fills the section as absolute inset-0. A gradient from bg-background to transparent covers the full width on phones and the left 60% from md, so the strokes never fight the text.
  • With the demo's gather: "right", the ink collects on the side away from the text; "left", "center" and "none" move or spread it. Heavier strokes gather around the cursor unless interactive is off.
  • Ink and paper colors take CSS colors, theme tokens included, so the demo's var(--foreground) and var(--background) follow light and dark mode.
  • Text rises in on mount with slow, staggered delays from 0.1s to 1s. With reduced motion the text appears in place and the ink holds a still drawing.
  • Every prop is optional; missing text parts are skipped without leaving gaps.

More Hero blocks

View all Hero
PRO

hero217

Ink Fluid Hero

PRO

hero206

Watercolor Scroll Hero

PRO

hero196

Liquid Chrome Hero

Get Pro access