Nexberry Tasarım Rehberi

Platformda kullanılan tüm temel bileşenler. Yeni ekran yaparken önce buradan başla.

Renkler

Tek isimle erişim — bg-primary, text-primary-hover, border-border, bg-success-bg vb.

primary
primary-hover
primary-light
primary-50
success
warning
danger
info
surface
surface-secondary
surface-tertiary
border
ink
ink-secondary
ink-tertiary
dark-900

Tipografi

Panel default 12px (text-app). Başlık 24px (text-h2). Marketing display clamp(2.5–6rem).

text-tiny — 11px caption / chip

text-app — 12px panel body (DENSE)

text-xs — 12px caption

text-data — 13px table/list rows + emphasized counters

text-mono — 13px monospace inline

text-sm — 14px form label / eyebrow

text-base — 16px h3 / readable body

text-h2 — 24px section heading

text-h1 — clamp 30→48px (marketing h1)

text-display — clamp 40→96px (hero)

Buton

3 boyut × 5 varyant. Sayfa kendi class'ını yazmıyor — Button primitive'i kullan.

primary
ghost
danger
marketing-light

Note surface

Teslimat notu, ürün notu, müşteri açıklaması — uyarı değil, ek bilgi. Tek class: note-surface. bg-amber-50 yerine bunu kullan.

Not: Kat 3 daire 6, zile basmayın.
Not: Az acılı olsun, bonfile pişsin.

Data chip

Sipariş kartı / modal satırlarında kullanılan dar info etiketi. Pill primitive'i fazla büyük kalan yerlerde tercih et. Şekil utility'si — renk DS token'ı (bg-info-bg/text-info, bg-success-bg/text-success, bg-warning-bg/text-warning) ile gelir.

Kapıda NakitÖdendiDüşük stokİade

Pill — sipariş durumu

Kanonik isimler: Yeni · Hazırlanıyor · Hazır · Yolda · Teslim Edildi · İptal Edildi

YeniHazırlanıyorHazırYoldaTeslim Edildiİptal Edildi

Custom tone:

ManuelBotBeklemede

Badge

Küçük etiket, ikon destekler.

25AktifTamamlandıBeklemedeHataBilgi

Input

Panel ve marketing modu, prefix/suffix, helper/error text.

Müşterilerinize görünecek isim

+90

En az 8 karakter olmalı

Card

Surface + border + radius'a karar vermiyorsun. Variant seç.

Panel
Default kart

rounded-lg + p-4 + shadow-sm

#A124
Tuğçe Özkan
Hazırlanıyor
Restoran

WhatsApp üstünden sipariş.

Stat card

Tek metrik için karekök bileşen. Genel bakış / raporlar / sadakat panelinde kullan. tabular-nums + tutarlı tipografi baked in. tone = full bg tint, accent = top stripe.

size
Sipariş
42
Sipariş
42
Sipariş
42
tone
Toplam
1.663,00 TL
23 sipariş
Bu hafta
385
yeni müşteri
Aylık
11.170,00
ay başından beri
Beklemede
7
Hata
2
Churn
14
accent
Toplam gelir
11.170 TL
Bu ay
Toplam sipariş
219
Bu ay
Ort. tutar
51 TL
219 üzerinden
En iyi gün
2.450 TL
14 Nis
delta
Gönderilen
7.761+3444%
Geçen hafta 219
Başarısız
2.051+68267%
Geçen hafta 3
icon
Öneriler
12
3 tanesi uygulandı
Müşteriler
219
Bu ay

Metric grid

Anatomi spec'i baked in: 88px min-height, 22px/700 value, tabular-nums, divider lines. StatCard'dan farkı: gridded, divider line'lı dashboard summary için.

Bugünkü Sipariş
42+12%
UTIL-01
Hazırlanan
7
ACT-LIVE
Bugünkü Ciro
1.663,00TL+8%

Tabs

In-page navigation. Underline active state, font-medium, px-3 py-2. role=tablist + aria-selected. Sayfa içi panel değişimi için — filtre/toggle değil.

Yalın label

İkon + sayaç

Disabled item

Segmented control

Filtre/view toggle için — tab DEĞİL. Aynı panelde parametre değiştirir (tarih aralığı, daily/monthly). role=radiogroup.

Default

Small

İkon

Heroicons v2 outline, stroke-1.5, inline. Library install yok.

check
check-circle
x-mark
x-circle
plus
minus
chevron-up
chevron-down
chevron-left
chevron-right
arrow-right
arrow-left
arrow-up-right
arrow-trending-up
arrow-trending-down
information-circle
exclamation-triangle
bell
magnifying-glass
ellipsis-horizontal
user
users
shopping-bag
truck
cog
currency-dollar
clock
calendar

Radius

Aynı rolde aynı radius. Kart kanban → lg. Sektör kart → 2xl. CTA → pill.

sm
md
lg
xl
2xl
3xl
pill

Telefon mockup (WhatsApp)

Marketing sayfalarında ve template önizlemelerde tek kullanılması gereken bileşen. WhatsApp özel hex'leri sadece bu primitive'in içinde yaşıyor — sayfalarda bg-[#00a884] yazma.

15:28
L
Lezzet Durağı
çevrimiçi
Merhaba! 👋 Bugün ne sipariş etmek istersiniz?
19:42
🛒 Sepetiniz:
  • • Margerita Pizza x2
  • • Cola 1L x1
Toplam: 485,00 TL
✓ Devam Et
19:43
✓ Devam Et
19:43
Adres onayı

Bağdat Cd. No:128, Kadıköy

19:43
Mesaj yazın...

Checkbox

Form onay ve liste seçim. Tek başına input, ya da label/description ile etiketli row. Inline checkbox veya Input type="checkbox" yazma — bu primitive'i kullan.

standalone
label only
label + description

Wordmark

Nexberry brand wordmark — `/public/nexberry-logo.png` üzerinde Next/Image wrapper. 'primary' (default, beyaz on dark) veya 'inverted' (light surface). Min height 24px (sm), default 28-32px (md, marketing nav).

primary (default)
Nexberry
Nexberry
Nexberry
inverted (light)
Nexberry

SectorMark

Sektöre özel "nexberry [sektör]" mark — restoran, perakende, emlak, mobilya, home. Auth ekranları, sektör sayfaları için. <SectorAuthLogo> bunu wrap eder.

Nexberry RestoranNexberry PerakendeNexberry EmlakNexberry Mobilya

Alert

Sayfa-içi kalıcı bildirim bandı: 4 ton (info/success/warning/danger), opsiyonel title + dismiss + custom icon. Toast vs Alert: transient mi (Toast) yoksa kalıcı bağlam mı (Alert)? Inline `border-amber-200 bg-amber-50` boilerplate yazma.

Bilgilendirme: katalog senkronizasyonu 30 saniye sürebilir.
Kaydedildi
3 ürün başarıyla eklendi.
Şablon onaya gönderilemiyor
Henüz bir WhatsApp Business hesabı bağlı değil. Sol menüden bağlayın.
Compact + icon yok varyantı.

ListItem

Generic liste satırı: leading (avatar/icon) + title/subtitle + trailing (pill/buton). Selected/disabled state, klavye-erişilebilir (Enter/Space). Domain-rich satırlar (sohbet konuşma, kanban kart) için custom kalır — bu primitive option list / feature list / basit content row için.

A
Ayşe Yılmaz
Son sipariş: 30.04.2026
VIP
M
Mehmet Can
Son sipariş: 29.04.2026
Disabled satır
Hover ve click yok
Trailing yok
Sadece title + subtitle

SearchInput

Arama input'u: sol arama ikonu + Input + (value varsa) sağ X butonu. Inline `<svg + Input + clear button>` boilerplate yazma. 3 boyut (sm/md/lg).

Avatar

Daire avatar — name'den initial türetir veya src ile resim. 5 boyut (xs/sm/md/lg/xl), 2 ton (primary/neutral). className ile özel bg override edebilir.

boyutlar
AAAAA
tonlar
AMAP
fallback
#??

Table

Minimal tablo primitive'i: Head/Body/Row/HeadCell/Cell compound. Tutarlı tipografi (text-sm body, text-xs uppercase head), divider çizgileri, align + tabular-nums shortcut. Sıralanabilir/sayfalı tablolar bunu wrap eder, replace etmez.

MüşteriSiparişToplam
Ayşe Yılmaz121.250,00 TL
Mehmet Can5485,50 TL
Zeynep Demir3312,00 TL

PageHeader

Sayfa-üstü başlık bandı: title + subtitle + actions + (children: tabs/filters). Inline `<header className="border-b border-gray-200 bg-white px-6 py-4">` yazma — bu primitive'i kullan. max-w-[960px] panel canon'u default.

Raporlar

İşletme analitikleri ve içgörüler

EmptyState

"Henüz veri yok" placeholder. Liste boş olduğunda kullan. Shorthand `<EmptyState>Veri yok</EmptyState>` veya icon+title+description+action zenginleştirilmiş.

Veri yüklenemedi
Henüz müşteri yok
İlk müşteri WhatsApp'tan sipariş verdiğinde burada görünecek.

Spinner

Yükleniyor göstergesi. 5 boyut (xs/sm/md/lg/xl), 3 ton (primary/neutral/white). Inline `<div animate-spin rounded-full border-2 border-gray-300 border-t-primary>` yazma — bu primitive'i kullan.

boyutlar
Yükleniyor
Yükleniyor
Yükleniyor
Yükleniyor
Yükleniyor
tonlar
Yükleniyor
Yükleniyor
Yükleniyor

Skeleton

Yükleniyor placeholder'ı (animate-pulse). Boyutu className ile ver. Kısa yollar: Skeleton.Text, Skeleton.Card, Skeleton.Circle.

text
text 3 lines
card
circle
custom

Field

Form alan wrapper'ı: label + control + helper/error. Input/Select/Textarea'nın kendi label prop'u zaten var; bunu özel kontroller (RadioGroup, multi-input row) veya horizontal hizalama için kullan. Required asterisk + a11y aria-describedby otomatik.

Uluslararası formatla gir (ülke kodu dahil).

Bölge seçimi zorunlu.

Etkin müşteri yalnız bu yetkiye sahip kullanıcılarla paylaşılır.

FormSection

Çok-bölümlü formlar için (Bilgiler / İçerik / Hedef Kitle ...) — başlık + opsiyonel subtitle + opsiyonel step badge. Children space-y-4 ile dikey istiflenir, step varsa pl-10 indent.

1

Kampanya Bilgileri

Adı, başlangıç tarihi, kategori.

Step'siz başlık örneği

Step verilmediğinde indent'siz, badge'siz.

DateRangeFilter

Tarih aralığı filtre widget'ı. Collapsed: pill (Bugün / 19 Nis → 21 Nis) + Aralık seç butonu. Expanded: 2 date input + Uygula + Bugüne dön. Sipariş listeleri, raporlar, kampanyalar gibi tarih-scope'lu ekranlarda kullan.

Bugün (1 May)

Tooltip

Hover/focus ile çıkan kısa açıklama. Native `title=""` browser'ın yavaş, stilsiz tooltip'ini gösterir; bu primitive DS'ye uyumlu, hızlı, klavye-erişilebilir. Yeni kod için zorunlu, mevcut native title'lar gradual migrate olur.

Popover

Trigger'ın yanında çıkan kart — emoji picker, değişken seçici, hızlı yanıt vb. Inline `useRef + useEffect mousedown` yazma; bu primitive ESC + outside click + animation hepsini yapar.

Toast

Sayfa-üstü transient bildirim. ToastProvider layout'ta mount edilmiş; her sayfa useToast() hook'uyla success/error/warning/info yayınlar. Inline `fixed bottom-6 right-6` toast yazma — bu primitive'i kullan.

Drawer

Sağdan / soldan kayan slide-over. Müşteri detay, lead detay vb. uzun içerik için Modal yerine Drawer kullan. ESC + backdrop click + scroll-lock + animation primitive seviyesinde.

Modal

Tüm modal'lar DS Modal primitive'ini kullanır. 4 boyut (sm/md/lg/xl), Header/Body/Footer compound. ESC + backdrop click + scroll-lock ücretsiz gelir. Inline modal yazma — bu örnekleri kopyala.

Shadow

sm
md
lg