ComponentsSite blocks

Article layout

The single-post template: breadcrumb, category, h1, dek, byline with published/updated dates and reading time, cover, table of contents generated on the server from the body's h2s (hidden under three), the RichDoc body, share links as plain URLs (no SDKs), tags and an author box, then related posts. Heading anchors are locale-aware slugs (Çiroz → ciroz). Only “Copy link” is an island.

blocks/site/article-layout.tsx, blocks/site/shared/copy-link.tsx, blocks/site/registry-2.ts, styles/blocks.csstheme · material · accent · density · font

Kitchen

How we plan a menu around the morning boats

Twelve years of buying fish at Kumkapı before sunrise, and why the menu is only printed at four.

Deniz Arslan1 min read
A plate of grilled fish with herbs and lemon
Grilled bonito with charred lemon — the dish that sets the board most autumn nights.

We decide the evening’s menu at six in the morning, standing on the wet concrete of the Kumkapı market with a thermos of tea. Whatever came in on the boats sets the tone; the rest of the menu bends around it.

Six o’clock at Kumkapı

The first boats tie up around five. By six the best bonito is gone to the hotels, so we buy what the hotels don’t want: smaller fish, odd sizes, the mackerel nobody else looked at twice.

If you ask the fishmonger what’s good, he’ll tell you what’s expensive. Ask him what he’s eating tonight.

Hasan Usta, Kumkapı, 31 years at the market

What makes the cut

  • Anything still stiff, with clear eyes and red gills.

  • Fish we can serve three ways: grilled, cured, and in the pilaki.

  • Nothing farmed, unless the menu says so.

We price the board at two in the afternoon, once we know the yield. That’s why the fish section is the only part of the menu printed daily.

Curing for the winter

Autumn bonito is fat enough to cure. We salt it for three days, then press it under olive oil; by January it becomes the lakerda that carries the cold-meze table through the slow months.

Lakerda, per 5 kg bonito
  coarse sea salt   1.2 kg
  cure              72 h, 4 °C
  rinse, press      12 h
  olive oil         to cover

Come before eight if you want to see the board before it’s chalked up — and ask for the fish the kitchen is eating tonight.

Installation

$ pnpm add @vamos-ui/react

The whole kit as one package — get updates by bumping the version. Add the styles to globals.css: @import "@vamos-ui/react/styles.css";

Usage

import { ArticleLayout } from "@vamos-ui/react/blocks";

// app/journal/[slug]/page.tsx
<ArticleLayout
  post={{ title, dek, body /* RichDoc */, cover, author, publishedAt, updatedAt, category, tags, breadcrumb }}
  url={`https://kiyimeyhane.com/journal/${slug}`}
  related={related}
  share={["copy", "whatsapp", "linkedin", "email"]}
/>

The renderer's articleBlock emits BlogPosting JSON-LD (headline, dates, image, author).

Examples

Wide cover

Full-width 21:9 cover, title below, TOC as a row of links.

The dining room at dusk, candles on oak tables
The dining room on a Tuesday, before the first seating.

Kitchen

How we plan a menu around the morning boats

Twelve years of buying fish at Kumkapı before sunrise, and why the menu is only printed at four.

Deniz Arslan1 min read

We decide the evening’s menu at six in the morning, standing on the wet concrete of the Kumkapı market with a thermos of tea. Whatever came in on the boats sets the tone; the rest of the menu bends around it.

Six o’clock at Kumkapı

The first boats tie up around five. By six the best bonito is gone to the hotels, so we buy what the hotels don’t want: smaller fish, odd sizes, the mackerel nobody else looked at twice.

If you ask the fishmonger what’s good, he’ll tell you what’s expensive. Ask him what he’s eating tonight.

Hasan Usta, Kumkapı, 31 years at the market

What makes the cut

  • Anything still stiff, with clear eyes and red gills.

  • Fish we can serve three ways: grilled, cured, and in the pilaki.

  • Nothing farmed, unless the menu says so.

We price the board at two in the afternoon, once we know the yield. That’s why the fish section is the only part of the menu printed daily.

Curing for the winter

Autumn bonito is fat enough to cure. We salt it for three days, then press it under olive oil; by January it becomes the lakerda that carries the cold-meze table through the slow months.

Lakerda, per 5 kg bonito
  coarse sea salt   1.2 kg
  cure              72 h, 4 °C
  rinse, press      12 h
  olive oil         to cover

Come before eight if you want to see the board before it’s chalked up — and ask for the fish the kitchen is eating tonight.

Minimal + draft preview

No cover, mono date above a large title. draft adds a “Preview” strip — also set noindex in the page metadata.

PreviewDraft preview — not visible to visitors.

Closed 1–3 April for the holiday

We reopen Thursday at noon. Bookings for the weekend are open now.

1 min read

The whole team takes the Eid holiday off this year. The kitchen closes after service on Tuesday 31 March and we’re back on Thursday 2 April from 12:00.

Deposits for bookings in those days are refunded automatically. Questions? Message us on WhatsApp.

Share

Every body element (Turkish)

Headings, ordered and unordered lists, a quote with cite, highlight, a rule and a code block.

Rezervasyon kuralları

1 min read

Masalar iki saatliğine ayrılır; cuma ve cumartesi 20:30 seansı için kapora alınır.

Kapora ve iptal

  • Kişi başı ₺500, rezervasyonda iyzico ile.

  • 24 saat öncesine kadar ücretsiz iptal.

Özel günler

  1. Doğum günü pastası getirebilirsiniz.

  2. Üst kat 12 kişiye kadar özel kullanılır.

Geç kalacaksanız bir mesaj yeter; masanızı 20 dakika tutarız.

Servis ekibi

Çocuklar için

12 yaş altına yarım porsiyon; mama sandalyesi için önceden haber verin.


Kapora iadesi: rezervasyon_id → panel › Rezervasyonlar › İade

API

ArticleLayout

PropTypeDefault
variant
Layout.
"classic" | "wide-cover" | "minimal""classic"
post
{ title, dek?, body: RichDoc, cover?, coverCaption?, author?, publishedAt, updatedAt?, category?, tags?, breadcrumb?, readingMinutes? }
ArticlePost—
toc
Table of contents from h2s; hidden under three headings.
booleantrue
share
Share targets. Network links need url.
("copy" | "whatsapp" | "x" | "linkedin" | "email")[]["copy","whatsapp","linkedin","email"]
url
Absolute URL to share (copy falls back to location.href).
string—
related
Rendered as a compact Blog list after the article.
PostSummary[]—
cta
Any block after the article (newsletter, booking).
ReactNode—
draft
Preview strip on top.
booleanfalse
headingLevel
The title is the page's h1.
1 | 2 | 31
labels / locale
On this page, Share, Updated {date}, {count} min read…
Partial<Site2Labels> / string—
theme / anchor / id / className / components / editMode
Shared block props.
BlockBaseProps—

shareUrl(target, url, title)

PropTypeDefault
returns
wa.me / x.com intent / LinkedIn share-offsite / mailto URL.
string—