Cannabivo.com

Developer Reference

FrankenUI Design System

Server-rendered UI primitives — every component, every variant, every state.

13 Sections50+ Components32 Theme CombosPHP 8.5 SSR
0

Checkout Components

New components for e-commerce: stepper, quantity input, segment control, payment cards, price display, summary lines, promo input, result heroes.

Card Elevated/Glass variant

Elevated Card

Glass-morphism card variant with frosted glass background and deeper shadows for dark mode.

Quantity Stepper

Input Large + Button Large

Segment Control (pill toggle)

Stepper / Numbered Steps

1Shipping
2Payment
3Confirmation

Summary Lines (label-value pairs)

Subtotal€109.97
ShippingFree
Discount−€10.00

Total€99.97

Promo Input (input + button group)

Payment Card (radio card)

Price Display

29.99
€49.99
29.99

Badge Status variants

PaidPendingFailedRefundedDraftSmallMediumLarge

Result Hero (success / error)

Payment Successful

Your order #12345 has been confirmed. You will receive a confirmation email shortly.

View Order

Payment Failed

Your payment could not be processed. Please try again or use a different payment method.

Try Again
1

Typography

Type scale, headings (h1–h6), body text, lead, muted, code, blockquote, and all typographic utility classes.

Headings h1 – h6

Heading Level 1

Heading Level 2

Heading Level 3

Heading Level 4

Heading Level 5
Heading Level 6

Display font — uk-heading-small / medium / large

Display Small

Display Medium

Display Large

Body paragraph

The quick brown fox jumps over the lazy dog. This is a standard body paragraph demonstrating the default font size, line-height, and colour. Readable at every viewport.

Lead text (uk-text-lead)

A lead paragraph stands out from regular body copy and introduces a section.

Muted text (uk-text-muted)

Secondary information rendered in a muted colour to reduce visual noise.

Meta text (uk-text-meta)

Published 12 March 2026 · 4 min read · Typography

Inline elements

Bold (strong)Italic (em)Small textHighlighted (mark)inline code()Deleted textInserted text

Code block (pre + code)

#[Route(path: 'POST /api/user/create')]
#[RateLimit(limit: 20, window: 60)]
final class CreateUserHandler extends AbstractHandler
{
    public function handle(Request \$request): ResponseInterface
    {
        \$handler = new UserHandler(
            repository: \$this->userRepo,
            validator:  new RequestValidator(),
        );

        \$response = \$handler->handle(\$request);

        Logger::channel('api')->info('User created', [
            'uuid' => \$response->uuid,
        ]);

        return \$response;
    }
}

Blockquote

The details are not the details. They make the design.

Charles Eames
2

Buttons

Primary, secondary, danger, ghost, and link variants. Size modifiers, icon buttons, loading states with spinner/checkmark/cross.

Variants — medium size

Variants — small size

Variants — large size

Disabled states

Buttons with icons

buttonWithStates — loading/success/error state support

These buttons contain hidden spinner/checkmark/cross icons. JavaScript transitions between states on user interaction.

Button groups

Connected buttons with shared border-radius. Split button with dropdown menu.

3

Form Inputs

Text, email, password, number, textarea inputs. Floating labels, validation states, disabled state, form layout helpers.

Bare inputs — type variants

formField() — label + input + optional help text

Must be 3–20 characters.

Minimum 8 characters.

Editing disabled.

Validation states — danger (error) and success

Please enter a valid email address.

Username is available!

Focus ring uses brand color.

Bare textarea() variants

textareaField() — label + textarea + optional help text

Max 500 characters.

select() — native select element

filterSelect() — TomSelect SSR (no selection, pre-selected, disabled)

formSelect() — TomSelect SSR with form label

selectNew() — Customizable Select (base-select)

formSelectNew() — Customizable Select with form label

filterSelectNew() — Customizable Select inline filter

checkbox() — unchecked, checked, disabled

toggleSwitch() — off, on, disabled

radio() — group with unselected, selected, disabled

4

Cards

Default card, hover card, elevated card, media card. Card body, title, badge, footer combinations.

New Premium Variants

Claim Your Club

Take control of your listing and unlock all features.

What You Get

Full profile editing, analytics dashboard, member management, and priority support.

CLUB

Green Valley CSC

Claim ownership and manage your club profile.

Premium Access

Full club management

Unlock analytics, member management, and priority support. Built for serious operators.

Club Settings

Configuration

Manage your club's profile, opening hours, membership rules, and verification documents.

Recent Activity

Last 24 hours

3 new membership requests · 2 document uploads · 1 profile update

Media Card

Image + content layout

The media area sits above the header. Pass any HTML as the media param — image, video poster, or a CSS gradient placeholder.
5

Badges & Pills

Status badges (success, warning, danger, info, neutral). Size variants, dot indicator, removable pill chips.

All badge variants

DefaultSuccessWarningDangerInfoNeutralBrandAccentMutedOutline

Size variants

SuccessSuccessSuccess

With icons

LivePausedErrorNoticeFeature

Dot indicator

OnlineAwayOfflineUnknown

Pills

CannabisIndicaSativaCBDOrganic

Pill variants

DefaultBrandSuccessWarningDangerInfoNeutralOutline

Pill sizes

TagTagTag
6

Alerts

Informational, success, warning, and danger alert banners. With and without icons, dismissible variant.

7

Navigation

Tabs (horizontal/vertical, uk-tab activation), breadcrumb trail, and numbered pagination controls.

Horizontal tabs (uk-tab JS activation)

  • This is the Overview tab content. uk-tab activates UIkit JS tab switching.

  • Details tab content — hidden until user clicks this tab.

  • Settings tab content. Third tab, rendered in DOM but hidden on load.

  • History tab content. Fourth tab, all SSR — JS only handles the switching.

Breadcrumb trail

Pagination (page 3 of 10)

8

Overlays

Dropdown menus, tooltip (hover/click), offcanvas side panel. All activated via FrankenUI JS directives.

Dropdown menu (click trigger)

Tooltip (hover trigger)

Hover me (top)Hover me (bottom)Hover me (right)

Offcanvas side panel (button trigger)

9

Layout

Grid system (2, 3, 4-column), responsive container sizes, section padding variants, dividers.

2-column grid (uk-child-width-1-2)

Column 1 of 2
Column 2 of 2

3-column grid (uk-child-width-1-3)

Column 1 of 3
Column 2 of 3
Column 3 of 3

4-column grid (uk-child-width-1-4)

Col 1
Col 2
Col 3
Col 4

Container size variants

uk-container-small — narrow max-width for reading-friendly layouts.
uk-container-large — wider container for dashboards and data-heavy pages.

Section element with title + padding

Default Section

uk-section-default — uses the page background (surface1).

Muted Section

uk-section-muted — subtle surface2 background for visual separation.

Secondary Section

uk-section-secondary — deeper surface3 background for stronger contrast.

Primary Section

uk-section-primary — brand-colored background with white text.

10

Data Display

Stat cards with icon + value + delta, progress bars, empty states with CTA, description lists (key-value pairs).

statCard() — icon + value + label + delta

1,234Total Users+8.2% this month
$56KRevenue-3.1% vs last month
+12%Growth Ratevs previous quarter

progress() — value/max, variant colors

Default — 25%

Success — 60%

Danger — 90%

emptyState() — icon + title + description + CTA

No results found

Try adjusting your filters or search terms to find what you are looking for.

descriptionList() — horizontal layout (key-value pairs)

Full name
Jane Doe
Email
jane@example.com
Role
Administrator
Member since
March 2024
Status
Active

skeleton() — block, text, circle, card variants

block

text (3 lines)

circle

card

11

Complex

Accordion (single/multi-open), hero + pageHero, feature grid, pricing toggle, skeleton loading screens.

accordion() + accordionItem() — native details/summary

What is FrankenUI?
FrankenUI is a UIkit-based component system used in this application. It provides consistent, accessible UI primitives rendered server-side in PHP.
How does SSR work here?SSR
All content is rendered in PHP before the page is sent to the browser. TypeScript handles only user-initiated interactions — no page-load fetching.
Which PHP version is required?PHP 8.5
PHP 8.5 is required. The codebase uses property hooks, the pipe operator, clone-with, and other bleeding-edge features.

pageHero() — eyebrow + split title + subtitle + stats

Developer Preview

Component Library

A curated set of accessible, server-rendered UI primitives for PHP 8.5 applications.

2,128 clubs5 countries4.8 avg rating

pricingToggle() — monthly/yearly radio pill toggle

12

Forum

Category row (icon, name, description, post count), thread row (avatar, title, meta, reply count, vote score).

forumCategoryRow() — icon, title, description, post count

Growing TechniquesSoil, hydroponics, lighting, nutrients and all cultivation topics.
1847posts
Concentrates & ExtractsBHO, rosin, live resin, tinctures, and extraction methods.
932posts
Laws & RegulationsLegal updates, compliance, club regulations across countries.
514posts

forumThreadRow() — avatar, title, author, date, reply count, vote score

Best LED lights for a 4x4 tent under €300?Pinned
GreenThumb422 hours ago
38 91
Low-pressure sodium vs CMH — which runs cooler?
LightChaserYesterday
12 24
[LOCKED] Old nutrient schedule thread — see pinned post for updateLocked
ModTeam3 days ago
74 5
First rosin press results — 18% yield on 90µ bags
RosinRookie5 days ago
6 41
13

User

Avatar component: null/empty/non-numeric image falls back to FA icon placeholder. Size variants via class modifier.

userAvatar() — no image → FontAwesome fa-user placeholder

small
medium
large

userAvatar() — empty string → same FA icon fallback

skeleton() — block, text, circle, card variants

block
text (3 lines)
circle
card
14

Reviews

Main review with star rating, criteria breakdown, sub-reviews, and owner responses.

Community RatingBased on 128 verified reviews
4.6
(128 reviews)
Atmosphere
4.8
Service
4.2
Value
4.5
Max M.2 days ago

Absolutely fantastic atmosphere. The staff was incredibly welcoming and the quality exceeded all expectations. Will definitely be coming back — highly recommended to anyone looking for a premium experience.

Club Owner

Thank you so much for your kind words, Max! We work hard to create a welcoming environment and it means the world to hear this. We look forward to seeing you again soon!

Sarah K.1 week ago

Great experience overall. Very clean and professional. One small suggestion: a bit more variety in the offerings would push this to a perfect five stars.

Install · one tap

Cannabivo.com
Clubs, coffeeshops & news — on your home screen.
Instant load
Saved offline
News alerts
Adds to your home screen — no store needed
Tap Share, then Add to Home Screen to install Cannabivo.
or get the native app
Google PlayApp StoreSoon