{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "blog-2",
  "title": "Divider Separated Post List",
  "description": "Blog post list of five articles as divider-separated rows with category badge, date, title, excerpt, and author, with no cover images.",
  "dependencies": [
    "@base-ui/react"
  ],
  "registryDependencies": [
    "avatar",
    "badge",
    "button",
    "separator"
  ],
  "files": [
    {
      "path": "registry/blocks/blog/2/blog-block.tsx",
      "content": "import { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { Button } from \"@/components/ui/button\"\nimport { Separator } from \"@/components/ui/separator\"\nimport { IconPlaceholder } from \"@/components/icons/icon-placeholder\"\n\nconst posts = [\n  {\n    category: \"Engineering\",\n    title: \"Migrating 40 million rows to a new schema without downtime\",\n    excerpt:\n      \"Zero-downtime migrations sound impossible at scale, until you break them into reversible, backfill-first steps. Here is the playbook we used to move our largest table live in production.\",\n    author: {\n      name: \"James Okafor\",\n      initials: \"JO\",\n      avatar: \"https://i.pravatar.cc/150?u=james-okafor\",\n    },\n    date: \"Jun 12, 2026\",\n    readTime: \"9 Min Read\",\n    featured: true,\n  },\n  {\n    category: \"Design\",\n    title: \"Why we ditched our icon font and never looked back\",\n    excerpt:\n      \"Icon fonts were convenient in 2014. Today they introduce accessibility gaps, inconsistent rendering, and painful bundle overhead. We switched to inline SVGs and measured every tradeoff.\",\n    author: {\n      name: \"Priya Nair\",\n      initials: \"PN\",\n      avatar: \"https://i.pravatar.cc/150?u=priya-nair\",\n    },\n    date: \"May 30, 2026\",\n    readTime: \"6 Min Read\",\n    featured: false,\n  },\n  {\n    category: \"Security\",\n    title: \"How we responded to a third-party supply-chain incident\",\n    excerpt:\n      \"When a dependency we trusted was compromised upstream, we had 90 minutes to assess impact, isolate affected services, and communicate clearly with customers. A candid post-mortem.\",\n    author: {\n      name: \"Tobias Schulz\",\n      initials: \"TS\",\n      avatar: \"https://i.pravatar.cc/150?u=tobias-schulz\",\n    },\n    date: \"May 19, 2026\",\n    readTime: \"11 Min Read\",\n    featured: false,\n  },\n  {\n    category: \"Culture\",\n    title: \"Async-first does not mean no meetings, it means intentional ones\",\n    excerpt:\n      \"We went fully async two years ago and learned that the hard problems were never about time zones. They were about trust, decision ownership, and knowing when synchronous is worth the cost.\",\n    author: {\n      name: \"Amara Diallo\",\n      initials: \"AD\",\n      avatar: \"https://i.pravatar.cc/150?u=amara-diallo\",\n    },\n    date: \"May 5, 2026\",\n    readTime: \"7 Min Read\",\n    featured: false,\n  },\n  {\n    category: \"Product\",\n    title: \"Shipping a feature in three languages on day one\",\n    excerpt:\n      \"Internationalisation is usually treated as a phase-two concern. We made it a launch requirement and restructured how designers, engineers, and translators collaborate from the very first sprint.\",\n    author: {\n      name: \"Cleo Martinez\",\n      initials: \"CM\",\n      avatar: \"https://i.pravatar.cc/150?u=cleo-martinez\",\n    },\n    date: \"Apr 22, 2026\",\n    readTime: \"8 Min Read\",\n    featured: false,\n  },\n]\n\nconst [featuredPost, ...restPosts] = posts\n\nexport default function BlogBlock() {\n  return (\n    <section className=\"flex w-full items-center justify-center bg-background px-6 py-16 text-foreground\">\n      <div className=\"mx-auto w-full max-w-2xl\">\n        <div className=\"flex items-end justify-between gap-4\">\n          <div className=\"flex flex-col gap-1\">\n            <p className=\"text-[10px] font-semibold tracking-[0.2em] text-muted-foreground uppercase\">\n              Acme Blog\n            </p>\n            <h1 className=\"font-heading text-2xl font-bold tracking-tight\">\n              Latest articles\n            </h1>\n          </div>\n          <span className=\"text-xs text-muted-foreground tabular-nums\">\n            {posts.length} Articles\n          </span>\n        </div>\n\n        <Separator className=\"mt-5 mb-8\" />\n\n        <a\n          href=\"#\"\n          className=\"group block rounded-xl border border-border bg-card p-6 transition-colors hover:bg-muted/40 focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none\"\n        >\n          <div className=\"flex flex-col gap-4\">\n            <div className=\"aspect-[16/7] w-full overflow-hidden rounded-lg border border-border bg-muted\">\n              <img\n                src=\"https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1200&q=80\"\n                alt={featuredPost.title}\n                className=\"size-full object-cover opacity-80 grayscale transition-opacity group-hover:opacity-100\"\n              />\n            </div>\n\n            <div className=\"flex flex-col gap-3\">\n              <div className=\"flex flex-wrap items-center gap-2\">\n                <Badge\n                  variant=\"secondary\"\n                  className=\"text-[10px] tracking-wide uppercase\"\n                >\n                  {featuredPost.category}\n                </Badge>\n                <span className=\"text-xs text-muted-foreground\">\n                  {featuredPost.date}\n                </span>\n                <span className=\"ml-auto text-xs text-muted-foreground\">\n                  {featuredPost.readTime}\n                </span>\n              </div>\n\n              <h2 className=\"font-heading text-lg leading-snug font-bold tracking-tight transition-colors group-hover:text-foreground/80\">\n                {featuredPost.title}\n              </h2>\n\n              <p className=\"text-sm leading-relaxed text-muted-foreground\">\n                {featuredPost.excerpt}\n              </p>\n\n              <div className=\"flex items-center justify-between gap-4 pt-1\">\n                <div className=\"flex items-center gap-2\">\n                  <Avatar size=\"sm\">\n                    <AvatarImage\n                      src={featuredPost.author.avatar}\n                      alt={featuredPost.author.name}\n                      className=\"grayscale\"\n                    />\n                    <AvatarFallback>\n                      {featuredPost.author.initials}\n                    </AvatarFallback>\n                  </Avatar>\n                  <span className=\"text-xs font-medium\">\n                    {featuredPost.author.name}\n                  </span>\n                </div>\n                <span className=\"flex items-center gap-1 text-xs font-medium text-foreground/60 transition-colors group-hover:text-foreground\">\n                  Read Article\n                  <IconPlaceholder\n                    lucide=\"ArrowRight\"\n                    tabler=\"IconArrowRight\"\n                    hugeicons=\"ArrowRightIcon\"\n                    phosphor=\"ArrowRight\"\n                    remixicon=\"RiArrowRightLine\"\n                    className=\"size-3.5 transition-transform group-hover:translate-x-0.5\"\n                  />\n                </span>\n              </div>\n            </div>\n          </div>\n        </a>\n\n        <div className=\"mt-8 flex flex-col gap-0\">\n          {restPosts.map((post, index) => (\n            <div key={post.title}>\n              <a\n                href=\"#\"\n                className=\"group flex flex-col gap-2.5 py-5 transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none\"\n              >\n                <div className=\"flex flex-wrap items-center gap-2\">\n                  <Badge\n                    variant=\"outline\"\n                    className=\"border-border text-[10px] tracking-wide uppercase\"\n                  >\n                    {post.category}\n                  </Badge>\n                  <span className=\"text-xs text-muted-foreground\">\n                    {post.date}\n                  </span>\n                  <span className=\"ml-auto text-xs text-muted-foreground\">\n                    {post.readTime}\n                  </span>\n                </div>\n\n                <h2 className=\"font-heading text-sm leading-snug font-semibold tracking-tight text-foreground transition-colors group-hover:text-foreground/70\">\n                  {post.title}\n                </h2>\n\n                <p className=\"line-clamp-2 text-sm leading-relaxed text-muted-foreground\">\n                  {post.excerpt}\n                </p>\n\n                <div className=\"flex items-center justify-between gap-4 pt-0.5\">\n                  <div className=\"flex items-center gap-2\">\n                    <Avatar size=\"sm\">\n                      <AvatarImage\n                        src={post.author.avatar}\n                        alt={post.author.name}\n                        className=\"grayscale\"\n                      />\n                      <AvatarFallback>{post.author.initials}</AvatarFallback>\n                    </Avatar>\n                    <span className=\"text-xs font-medium text-foreground/70\">\n                      {post.author.name}\n                    </span>\n                  </div>\n                  <span className=\"flex items-center gap-1 text-xs text-muted-foreground transition-colors group-hover:text-foreground\">\n                    Read\n                    <IconPlaceholder\n                      lucide=\"ArrowRight\"\n                      tabler=\"IconArrowRight\"\n                      hugeicons=\"ArrowRightIcon\"\n                      phosphor=\"ArrowRight\"\n                      remixicon=\"RiArrowRightLine\"\n                      className=\"size-3 transition-transform group-hover:translate-x-0.5\"\n                    />\n                  </span>\n                </div>\n              </a>\n              {index < restPosts.length - 1 && <Separator />}\n            </div>\n          ))}\n        </div>\n\n        <Separator className=\"mt-8 mb-6\" />\n\n        <div className=\"flex justify-center\">\n          <Button\n            variant=\"outline\"\n            render={<a href=\"#\" />}\n            nativeButton={false}\n          >\n            View All Articles\n            <IconPlaceholder\n              lucide=\"ArrowRight\"\n              tabler=\"IconArrowRight\"\n              hugeicons=\"ArrowRightIcon\"\n              phosphor=\"ArrowRight\"\n              remixicon=\"RiArrowRightLine\"\n              data-icon=\"inline-end\"\n            />\n          </Button>\n        </div>\n      </div>\n    </section>\n  )\n}\n",
      "type": "registry:component"
    }
  ],
  "meta": {
    "height": "1579px",
    "tier": "free"
  },
  "docs": "Requires a `base-*` style in components.json (the `shadcn init` default). Legacy `new-york`/`radix-*` styles install Radix primitives, which reject the `render` prop this block uses.",
  "categories": [
    "blog"
  ],
  "type": "registry:block"
}