opensourceui
GitHubTwitter/X
  1. Home
  2. Components
  3. Gallery
  4. Slow Living Polaroid
Back to Gallery

Components / Gallery

Slow Living Polaroid

Free Gallery React component — SlowLivingPolaroidCard. MIT licensed, copy-paste ready for Next.js and Tailwind CSS.

Dark editorial layout with a taped, tilted polaroid and lowercase lifestyle copy. Slow living, coffee brands, quiet product launches.

Preview

LIFESTYLE / 01 — slow living —

JAN 2026

Slow morning portrait

daily ritual

The beauty of a slow morning.

Fresh coffee, soft light, and a moment to just breathe before the day starts.

stay grounded

Setup

How to use

Free for personal and commercial use. No UI attribution required. Include the MIT copyright notice when copying component source into your project. Read the MIT license.

  1. 1

    Run in your terminal:

    $npm install clsx tailwind-merge lucide-react
  2. 2

    Copy lib/cn.ts below. Skip if you already have cn().

  3. 3

    Copy the code below and create components/gallery/slow-living-polaroid-card.tsx in your project.

  4. 4

    Import and render:

    Example

    import { SlowLivingPolaroidCard } from "@/components/gallery/slow-living-polaroid-card";

    <SlowLivingPolaroidCard />

lib/cn.ts

1
2
3
4
5
6
import { type ClassValue, clsx } from "clsx";
import { twMerge } from "tailwind-merge";
 
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}

components/gallery/slow-living-polaroid-card.tsx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import { forwardRef, type ComponentPropsWithoutRef } from "react";
import Image from "next/image";
 
import { cn } from "@/lib/cn";
 
export type SlowLivingPolaroidCardProps = Readonly<
{
image?: string;
imageAlt?: string;
category?: string;
issue?: string;
topic?: string;
date?: string;
ritual?: string;
headline?: string;
body?: string;
footer?: string;
} & ComponentPropsWithoutRef<"div">
>;
 
// Production-ready Slow Living Polaroid component — styled with Tailwind CSS.
export const SlowLivingPolaroidCard = forwardRef<
HTMLDivElement,
SlowLivingPolaroidCardProps
>(
(
{
className,
image = "/wallpaper-15.png",
imageAlt = "Slow morning portrait",
category = "LIFESTYLE",
issue = "01",
topic = "slow living",
date = "JAN 2026",
ritual = "daily ritual",
headline = "The beauty of a slow morning.",
body = "Fresh coffee, soft light, and a moment to just breathe before the day starts.",
footer = "stay grounded",
...props
},
ref,
) => (
<div
ref={ref}
data-slot="slow-living-polaroid-card"
className={cn(
"relative h-88 w-72 overflow-hidden bg-[#4a2525] font-sans shadow-lg",
className,
)}
{...props}
>
<div className="absolute top-5 right-5 z-30 text-right font-mono text-[8px] leading-[1.6] tracking-[0.14em] text-[#efe6dc] uppercase">
<p>
{category} / {issue} — {topic} —
</p>
<p>{date}</p>
</div>
 
<div className="absolute top-15 left-[54%] z-10 w-35 -translate-x-1/2 rotate-6">
<div
className="absolute -top-1.5 -left-2.5 z-20 h-6 w-12 rotate-[-14deg] bg-[#d9c9a3] shadow-sm [clip-path:polygon(4%_18%,12%_2%,88%_8%,96%_22%,92%_88%,84%_98%,14%_94%,2%_78%)]"
aria-hidden
/>
 
<div className="bg-white p-2 pb-8 shadow-[0_14px_28px_rgba(0,0,0,0.32)]">
<div className="relative aspect-square w-full overflow-hidden bg-neutral-300">
<Image
src={image}
alt={imageAlt}
fill
sizes="168px"
className="object-cover"
/>
</div>
</div>
</div>
 
<div className="absolute inset-x-4 top-[56%] bottom-4 z-30 flex flex-col justify-end font-mono text-[9px] leading-[1.7] text-[#e8ddd4] lowercase">
<p className="text-[#f3ebe3]">{ritual}</p>
<p className="mt-1.5 text-[#faf5ef]">{headline}</p>
<p className="mt-1.5">{body}</p>
<p className="mt-2 text-[#d9cfc4]">{footer}</p>
</div>
</div>
),
);
 
SlowLivingPolaroidCard.displayName = "SlowLivingPolaroidCard";
PreviousNext

On this

page

Jump to a section on this page.

  • lib/cn.ts
  • components/gallery/slow-living-polaroid-card.tsx

Sponsor spot · demo preview

Logo

Your brand name

Your tagline or category

A short pitch about your product or service goes here. This is a preview of how sponsor cards will look in this sidebar.

Your call to action

This slot is available. Sponsor Opensource UI and reach developers browsing components every day.