UI primitives
Every component in src/components/ui/. Each must satisfy T2 (used by ≥2 sections) per design.md.
LinkArrow
Text-only directional link with an arrow icon. Hover translates 1px right. Used for tertiary actions, secondary CTAs in dense areas (FAQ, demo, case studies).
8+ instances across ArchitectureSection, FAQItem, PricingSection, CaseCard, DemoSection (T2 met).
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| href | string | — | Required link target. |
| icon | string | undefined | Optional material symbol name placed before the slot. |
| trailingIcon | string | 'arrow_forward' | Material symbol name placed after the slot. Set explicitly to 'trending_flat' on case study links. |
| external | boolean | false | Adds target="_blank" + rel="noopener noreferrer". |
| class | string | — | Append wrapper classes. |
ChecklistItem
Bulleted item with an accent circle + check mark, a title, and a slotted body. Used in HeroSection (6 instances on the home page) and anywhere a "feature with description" pattern appears.
13 instances site-wide. Reused across multiple sections (T2 met).
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| title | string | — | Bold title rendered above the slot content. |
| class | string | — | Append wrapper classes. |
| ...rest | HTMLAttributes<'div'> | — | Spread to root div (id, data-*, aria-*). |
Live preview
Profesjonalny proces UX
Bez tygodni i tysięcy złotych wydanych na agencje.
Realny copy
Koniec z lorem ipsum. Wireframe od razu z realnym copy.
Kontekst żyje w plikach
Kontynuuj tam, gdzie skończyłeś. Decyzje żyją w plikach.
SectionWithIcon
Layout primitive that renders an icon + a header slot + body slot. Two layouts: stacked (icon + header on top, body below indented) and side-by-side (icon + header on the left column, body on the right). The workhorse of every section on the site.
51 instances site-wide. Used in nearly every section.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| icon | ImageMetadata | undefined | Imported asset for the icon. Hidden below lg breakpoint. |
| layout | 'stacked' | 'side-by-side' | 'stacked' | Layout flow. |
| class | string | — | Append wrapper classes. |
| ...rest | HTMLAttributes<'div'> | — | Spread to root div. |
Slots
| Name | Purpose |
|---|---|
| header | Section badge, h2 heading, optional intro paragraph. |
| (default) | Section body content — grids, cards, anything. |
Live preview
layout="stacked" (default)
Heading goes here.
Body content sits below the header, indented in line with the icon's right edge on lg+. On smaller screens the icon hides and the body is full-width.
layout="side-by-side"
Heading on the left,
body on the right.
Body sits in a separate column on lg+. Useful when the body is dense (a grid of cards, a wide table) and you want the heading to stay visible while scrolling within the section.
Colocated subcomponents
Each section under src/components/sections/<name>/ ships with its own item subcomponents (CaseCard, PricingTier, FAQItem, etc.). They stay colocated until used by ≥2 sections (T2). To preview them, see the Sections page.