Color Palette
{{ group.label }}
Typography
Plus Jakarta Sans 500–700 · Red Hat Text 400–700
Database & Reviews
Trending Models
Profile Details
Shadows & Elevation
Border Radius
Spacing Scale
Dividers — All Variants
Standard — 1px in border-gray (#E0E0E0)
Subtle — 1px in primary-wash (#EDE6FA) · for use within cards
Card content above divider
Card content between subtle dividers
Card content below labeled subtle divider
Comparison: Standard vs. Subtle in context
Standard Divider
Stronger visual separation for layout-level breaks, between sections.
Labeled variant with centered text.
Subtle Divider
Whisper-light rule for card-internal grouping that doesn't compete.
Labeled subtle for form field separators.
Buttons
Tabs
Underline (primary)
Underline (accent, with icons)
Pill
Pill (with icons & counts)
Filter (compact, no container)
Breadcrumbs
Standard
Truncated (maxVisible=4)
With home icon (forum style)
Pagination
Full pagination with counter
Compact variant
Sticky Nav Bar
(Rendered inline — in production this would be sticky at the top of the page)
Dropdown Menu
Full menu — sections, icons, selected state, destructive action
User Menu Dropdown
Trigger: avatar + name + chevron. Header: avatar 48px + name + role. Divider before Sign Out.
Accordion / Collapsible
Single-open (default)
Multi-open
Form Controls
Searchable Select
Date Picker
Single date
With disabled dates
Range variant — click start, then end
Disabled state
Search Autocomplete
With model + forum results (type to search)
Click the field to see recent searches. Type anything for live results. Keyboard ↑↓ to highlight, Enter to select.
No-results state (type something obscure)
Tag Input
With suggestions autocomplete
With max tag limit
Error state — empty tags
Free-form — no suggestions
Rich Text Editor
Default state — collapsed toolbar
Expanded toolbar (Row 2 open) with pre-filled content
Image Upload with Crop
Upload zone — empty state
Upload zone — optional field
Click "Add photo" → select any image file → interact with the crop modal: drag the circle overlay to reposition, scroll to resize, preview updates in real-time.
File Upload Zone
Photo upload — with progress simulation
Video upload — optional, single file
Generic file upload — any type
Repeating Field Group
Default — name + category + status + type fields, labels on first row only
Fresh — single empty row, ready for input
Word Count Tier Indicator
Live demo — drag slider
Restricted — 18 words
Basic tier — 72 words
Standard tier — 145 words
Expert tier — 420 words
Profile Selector
With sub-dropdown populated per selection
Without sub-dropdown — simple selector
Badges & Status
Unified hybrid style: slightly rounded corners, subtle gloss, tonal palette. Status badges use a pulsing dot — never combined with icons. Add filled for gradient emphasis (premium, LIVE).
Standard
Category Pills
Status Indicators (pulsing dot, no icons)
Thread Status (with icons)
Filled (gradient — for emphasis moments, ~3/page max)
Rank
Avatars
Chips
Default
Accent Variant
Tag Variant (bordered, with optional emoji)
Category Pills & Rank Badges
Category Pills — 8 variants · 10px / 600 / uppercase / 3px 8px / 2px radius
Pills in context — discussion list item headers
Rank Badges — Top 100 (gold) · Top 1000 (purple)
Spec tokens
Camsite Icons
Duotone hexagons with rounded corners. Subtle gradient from brand color to 18% darkened bottom. Each icon uses the platform's actual brand colors.
All Icons — 48px
Legacy-Name Aliases
Former site names still surfaced in content resolve to the parent brand's colors with their own glyph. Lookups are case- and spacing-insensitive ("chat 49", "Chat49", "Chat 49").
Multiple Platforms — 32px
Inline Badge Usage
Color Reference
| Abbr | Name | Background | Text |
|---|---|---|---|
|
|
{{ icon.name }} |
{{ icon.c1 }}
→
{{ icon.c2 }}
|
{{ icon.c3 }} |
Sizes — 16 / 24 / 32 / 48 / 64px
Data Table
Default with selection & sorting
Compact with zebra striping
selected: {{ tableSelected().size }}
Stats Summary Row
Stats Summary Bar
Stat Cell
Quick Stats Row
Details Grid
Heart Rating
Step Indicator
Horizontal on desktop, vertical on mobile. Three states: completed (accent + checkmark), active (primary fill), upcoming (border only).
Activity Timeline
Full variant — profile activity feed
Compact variant — sidebar panel
Recent Activity
Highcharts Theme — Chart Palette & Sample Charts
Cards
Default
Subtle border, no shadow. Clean baseline for content areas.
Elevated
Purple-tinted shadow for focused content.
Featured
Deep purple shadow — hero cards and modals only.
Dashed
Dashed border for info/FAQ blocks.
Section Header
Account Card (Nickname-First)
Bio Card
Review Card
Horizontal variant — listing page layout
Vertical variant — grid layout
User-Generated Review Card
Full variant — with title, excerpt, subject, platform badge
Image-led variant — for /user-reviews feed grids (hero image up top, author demoted to attribution footer)
Compact variant — single row, no excerpt (for activity feeds or sidebars)
Review Callouts
Across the last twelve months I've tested three others who pull the same trick — most recently KattyNilson, whose marketing is almost identical but whose private chat is noticeably shorter and more defensive. The distinction comes down to pacing.
Blog Post Card
Featured Card (Promoted Content)
Discover / Related Card
Directory Card
The generic DirectoryCard is not ported (unused by Angular pages); McgCamsiteDirectoryCard + BrowseRow below are the directory family the camsite index uses.
Story Cards
Stories Strip
9:14 preview cards with a top image zone and a bottom meta footer (model name + platform).
Optional LIVE badge top-left, story-count pill top-right, centered lock icon when isLocked
is true. Cards share the container width evenly — no horizontal scroll.
Angular-only extra (not in the React showcase): click a card (or a button below) to open the full-screen mcg-story-viewer — Esc / ← → / backdrop close.
Discussion List Item
Social Link Row
Info Block (Dashed)
Code Block
Monospace block for code snippets. Use
Inline (in prose)
Install the package with
Plain block
With language pill
Full header — filename, language, copy button
Long line — scrolls horizontally
Rules Cards
Numbered rules in 2-column grid with accent badge.
FAQ Card Grid
Standalone FAQ cards with truncated answers and expand toggle. Different from accordion.
Alerts
Standard
Dismissible with action link
Compact (inline validation)
Modal Dialogs
Four modal variants: confirmation (480px), content (640px), full-width (800px), and destructive.
Your review will be visible to all users and submitted to the editorial queue for featuring consideration.
Welcome to our community. Please read and understand the following guidelines before participating in discussions, reviews, and ratings.
1. Respectful Communication
Treat all community members and performers with respect. Harassment, hate speech, and personal attacks will result in immediate account suspension.
2. Honest Reviews
Reviews should reflect genuine experiences. Do not post fake reviews, paid promotions disguised as organic reviews, or reviews for performers you haven't interacted with.
3. Privacy
Never share performers' personal information, real names, or identifying details without their explicit consent. Respect boundaries at all times.
4. Content Standards
All user-generated content must comply with applicable laws. Do not post or link to pirated content, unauthorized recordings, or any content involving minors.
5. Account Responsibility
You are responsible for all activity on your account. Do not share login credentials or create multiple accounts to circumvent bans or manipulate ratings.
Rating
This action cannot be undone. All your reviews, ratings, and profile data will be permanently removed.
Toast Notifications
Click a button to spawn a live toast. Each variant uses semantic colors with auto-dismiss progress bar.
Rich Tooltips
AmberRose_Live
Online now on Chaturbate. 4.8 avg rating across 247 reviews.
Keyboard Shortcut
Ctrl+K to open search
Dark Variant (icon hints)
Light Variant (rich content)
Notification Badge
Dot-only variant (accent & urgent)
Numbered pill (1–99+)
On nav items
Loading Spinners
Sizes
Button loading state
Shimmer Skeleton Loaders
Animated skeleton loaders with shimmer sweep (#E4DEF1 → #F9F6FF) for content placeholders.
Model Card Skeleton
Account Card Skeleton
List Item Skeleton
Table Row Skeleton
Empty States
(An mcg-schema Organization JSON-LD block is mounted on this page — inspect
<script type="application/ld+json"> in devtools.)
Progress Bars
Profile completion
Upload progress (accent)
Verification (success)
Small variant
Indeterminate (loading)
Hero Image Banner
With title, subtitle, and tag pills
Image only — no overlay text
Flush edge (radius 0) — as it would appear at the top of a page
CTA Hero Section
Sticky Table of Contents
Article Body Prose
All block types rendered: H2, H3, paragraph, bold, italic, inline link, blockquote, bullet list, numbered list, pull quote, horizontal rule, and image with caption.
Tracking a performer across platforms starts with one question: what is each number actually counting?
Understanding Platform Metrics: A Complete Guide
Tracking a performer's engagement across multiple platforms requires a clear understanding of what each metric actually measures. Average viewer count and concurrent peak sessions are often conflated — yet they tell very different stories. For a deeper breakdown, see our Platform Analytics Handbook.
"The difference between a performer with 500 average viewers and one with 500 peak viewers can be the difference between a stable career and a viral moment that fades within a week."
What Counts as an Engaged Viewer?
Platforms define engagement differently. Chaturbate counts any browser session lasting over 10 seconds, while StripChat requires at least one interactive event — a tip, a message, or a token spend — before logging a viewer as active. This means raw viewer counts between platforms are not directly comparable.
- Chaturbate: session-based, passive viewers counted
- StripChat: interaction-weighted engagement model
- LiveJasmin: credit-spend triggers active status
- Cam4: hybrid model, resets every 5 minutes
Reading the Trend Lines
A single snapshot of viewer count means very little without historical context. Our database tracks rolling 30-day averages alongside session peaks, giving a more reliable signal for community members evaluating a performer's trajectory. When a profile shows a rising trend over three consecutive months, that is a strong indicator of genuine audience growth — not an algorithm spike.
- Open the performer's profile and navigate to the Analytics tab
- Select Last 90 days from the date range picker
- Compare Average and Peak trend lines side by side
- Cross-reference with our Community Rating score
"Consistent engagement, even at modest scale, is more valuable than a single viral session that burns out its audience in a weekend."
Interpreting Seasonal Patterns
Traffic across all major platforms follows predictable seasonal patterns. Q4 (October–December) consistently shows 18–24% higher average viewer counts compared to Q2 lows. Performers who maintain their streaming schedule through the summer — even at reduced hours — tend to recover their peak numbers faster in the autumn ramp-up.
Video Player Embed
Site Footer
Sidebar Filter Panel
Collapsible filter groups with active state highlighting. 240px fixed width for sidebar use.
Legal Agreement Block
agreed: {{ legalAgreed() }}
Thread List
Thread list with unread/read/pinned/locked states, prefix tags, reply counts, and last reply info.
Category / Node List
Forum category tree with groups, subcategories, thread/post counts, and last post info.
Quote Block
Quote with attribution. Supports nesting up to 2 levels.
Yes, they raised it last month. Some adjusted their rates but most kept the old structure.
Post Action Bar
Reply, Quote, Like (with count and reaction picker on hover), Bookmark, Report.
Default
Liked + Bookmarked
Reaction Picker
Hover popover for the Like button. Scale-up on hover.
Forum Post (Full Layout)
Two-column: user sidebar (desktop) + post content. Header, body, quote, and action bar.
User Info Card
Card variant (hover popover) and inline variant (member list row).
Inline variant (member list)
Post Editor Toolbar
Two-row toolbar: standard formatting + forum extras (quote, spoiler, code, media, poll, mention). Preview toggle, attachment upload, submit buttons.
View Toggle
Filter Toggle
Sort Indicator
Account List Header + Rows
Account Grouped List
Login Form
Standalone card
Modal wrapper — click button to open
Register Form
Standalone card — with live password strength meter
Modal wrapper — click button to open
Contact Form
Name + email side by side, subject dropdown, message textarea. Includes success state.
Page Previews
Full standalone pages that compose multiple components together. Each opens in its own tab.
Muted cards exist only in the React DS export — not composed as Angular routes yet.
{{ group.title }}
Angular appendix — page composites
Inline demos for components that, in the React DS, only appear inside full page previews (their pages aren't composed as Angular routes yet). Not part of the React docs page structure.
Static-page layouts (full routes)
ReviewHero
VerdictCard · ReviewVerdictBand
ProsConsList
ModelLink (inline) · ScreenshotPlaceholder
Her style drew obvious comparisons to Angel and Luna, but the consistency was entirely her own.
ReviewFAQ
PlatformNicknameList · TrustFramework
UserProfileHero
UserStatsStrip
ForumCrossLinkStrip
UserProfileReviewCard
MembershipReadout
SecurityRow · SaveBar
AvatarUploader
ChangePasswordModal
Atoms — AuthSiteLogo · GoogleAuthButton · DsDivider · AuthStatBar
AuthField · AuthPwField · PasswordStrengthMeter
AuthFeaturedPanel
Full-page routes — LoginPage · RegisterPage · ForgotPasswordPage · ForgotPasswordSuccess
The four auth pages are full-viewport (100dvh) split layouts, so they render as real routes
— like the React DS's standalone login.html / register.html pages:
SiteNav — logged-in variant (inline, non-sticky)
Hover Reviews / Camsites for the fly-outs. Mail/Bell counts + UserMenu in the auth slot.
SiteLayout — full page shell · composed page demo
ModelGridCard (1:1 index grid)
TopModelGrid (camsite detail)
BlogIndexHeader · CategoryFilterRow
StatGrid · BlogIndexSeoFooter
CamsiteVerdictBadge
CamsiteHero (full /camsite/[slug] hero)
DirectoryIndexHeader (camsite directory masthead)
EditorialCrossLinkCard
ContactMethodGrid (slot)
HelperCamsiteList (slot)
PlatformLinkGrid (slot)
DmcaForm (slot)
WizardRail
Angular appendix — ui/ shadcn primitives
The 39 ui/ primitives ported from the React ui/ layer (Radix/shadcn equivalents rebuilt on Angular CDK). The React docs app doesn't document this layer — kept here because the ds/ components compose them.
Button — ui/ shadcn primitive ([mcgButton], intentionally different)
Badge
Input & Textarea
Checkbox & Switch
Avatar, Progress, Skeleton
Alert
Tooltip · Dialog · Popover (CDK overlays)
Dropdown menu & Select
Tabs · Accordion · Radio group
Breadcrumb
Toggle · Toggle group · Collapsible · Sheet
Filters
Refine the model list.
Pagination
Slider · Aspect ratio · Scroll area
Chaturbate
LiveJasmin
StripChat
MyFreeCams
BongaCams
Flirt4Free
Alert dialog · Hover card · Context menu
Delete this model?
This cannot be undone.
Retired Ukrainian camgirl, active 2009–2011.
Table · Form field · Input OTP
| Model | Cam site | Reviews |
|---|---|---|
| Posh | LiveJasmin | 42 |
| Angel | Chaturbate | 17 |