Sakani

Content Sections

Testimonials, FAQ, team, careers, and a blog index — the sections a marketing site fills with real content.

Where the marketing sections are mostly layout, these are data-driven: each takes an array and renders the matching component per entry, so they map cleanly onto whatever your CMS returns.

We deleted three thousand lines of one-off CSS.

Amara Chen

Founder at Loopline

The Figma file and the code finally agree.

Daniel Osei

Engineering lead at Northwind

FAQ

defaultOpen on the first item saves the reader a click and shows the answers are short — worth doing unless the list is long enough that an open item hides the rest.

FAQ

Frequently asked questions

Yes. MIT licensed and free in commercial projects.
Yes — React 19 is the only peer dependency.

Team and careers

The item types extend the underlying component's own props — TeamSectionMember is TeamCard's props plus an id, and CareersJob is JobListing's minus layout. Anything you can pass the component, you can pass through the block.

Team

The people behind it

Amara Chen
Lagos, NG

Amara Chen

Head of Design

Daniel Osei
Remote

Daniel Osei

Engineering lead

Careers

Open roles

Senior Design Engineer

Own the component library end to end, from Figma to npm.

DesignFull-timeRemote

Technical Writer

Make 114 components genuinely learnable.

DocsContractLagos, NG

Blog index

Blog

Writing

Featured

A year of shipping from one Figma file

What we learned exporting 114 components 1:1, and the three places the approach nearly broke.

Engineering11 mins read

Why your design system drifts

Two artefacts maintained by hand will always diverge.

Amara Chen · Aug 12, 2026

Design6 mins read

Shipping dark mode from day one

Retrofitting a second theme is expensive.

Daniel Osei · Sep 2, 2026

Copy the source

Blocks are composition examples, not configurable components. Rather than adding props for a layout they don't support, copy the file into your own project and edit it: change the columns, swap the sample data, delete the parts you don't need. Nothing here introduces a primitive you can't already import on its own.