-
Notifications
You must be signed in to change notification settings - Fork 51
Page Composition Recipes
snoo edited this page Apr 7, 2026
·
1 revision
Every StyleSeed page follows the same skeleton. What changes is the arrangement of the 4 section types inside it. This page provides ready-to-use recipes for common app domains.
<PageShell maxWidth="430px"> <TopBar logo={<Logo />} subtitle="March 30, 2026" actions={...} /> <PageContent> {/* pb-24 space-y-6 */} {/* Sections go here */} </PageContent> <BottomNav items={[...]} activeIndex={0} /> </PageShell>
Every recipe below drops sections into <PageContent>.
Use case: Admin panel, analytics overview, project management.
Section order:
1. Hero (Type D) -- Total MRR or key metric
2. KPI Grid (Type B) -- Active users, churn rate, ARPU, NPS
3. Area Chart (Type A) -- Revenue trend (7d / 30d / 90d)
4. Ranked List (Type A) -- Top customers or top features
5. Alert Carousel (Type C) -- System alerts, expiring trials
<PageContent> {/* 1. Hero: Total MRR */} <div className="mx-6 mt-1"> <HeroCard icon={DollarSign} label="Monthly Recurring Revenue" value="284" unit="K" trend={{ value: "+14.2%", direction: "up", label: "vs last month" }} watermarkIcon={DollarSign} /> </div> {/* 2. KPI Grid */} <div className="grid grid-cols-2 gap-4 px-6"> <StatCard icon={Users} label="Active Users" value="12,847" trend={{ value: "+5.1%", direction: "up" }} /> <StatCard icon={UserMinus} label="Churn Rate" value="2.3" unit="%" trend={{ value: "-0.4%", direction: "down" }} /> <StatCard icon={Receipt} label="ARPU" value="22ドル" trend={{ value: "+1.8%", direction: "up" }} /> <StatCard icon={Star} label="NPS Score" value="72" trend={{ value: "+3", direction: "up" }} /> </div> {/* 3. Revenue Chart */} <div className="mx-6"> <ChartCard title="Revenue Trend" periods={["7D", "30D", "90D"]} activePeriod="30D"> {/* Area chart component */} </ChartCard> </div> {/* 4. Top Customers */} <div className="mx-6"> <RankedList title="Top Customers" items={[ { rank: 1, name: "Acme Corp", value: "4,200ドル/mo" }, { rank: 2, name: "Globex Inc", value: "3,800ドル/mo" }, { rank: 3, name: "Initech", value: "2,900ドル/mo" }, ]} /> </div> {/* 5. Alerts */} <BriefingCarousel title="Alerts" items={alertItems} /> <div className="h-8" /> </PageContent>
Use case: Shopify-style seller dashboard, order management.
Section order:
1. Hero (Type D) -- Today's revenue
2. KPI Grid (Type B) -- Orders, returns, visitors, conversion
3. Bar Chart (Type A) -- Daily sales (7 days)
4. Recent Orders (Type A) -- Last 3-4 orders with status
5. Donut Chart (Type A) -- Sales by category
<PageContent> {/* 1. Hero: Today's Revenue */} <div className="mx-6 mt-1"> <HeroCard icon={Wallet} label="Today's Revenue" value="8,420" unit="USD" trend={{ value: "+22.1%", direction: "up", label: "vs yesterday" }} /> </div> {/* 2. KPI Grid */} <div className="grid grid-cols-2 gap-4 px-6"> <StatCard icon={Package} label="Orders" value="147" trend={{ value: "+12%", direction: "up" }} /> <StatCard icon={RotateCcw} label="Returns" value="3" trend={{ value: "-2", direction: "down" }} /> <StatCard icon={Eye} label="Visitors" value="4,280" trend={{ value: "+8.5%", direction: "up" }} /> <StatCard icon={Target} label="Conversion" value="3.4" unit="%" trend={{ value: "+0.3%", direction: "up" }} /> </div> {/* 3. Daily Sales Chart */} <div className="mx-6"> <ChartCard title="Daily Sales" periods={["7D", "30D"]} activePeriod="7D" stats={[ { label: "Average", value: "7,100", unit: "USD" }, { label: "Peak", value: "12,300", unit: "USD" }, ]}> {/* Bar chart */} </ChartCard> </div> {/* 4. Recent Orders */} <div className="mx-6"> <SectionCard title="Recent Orders"> <div className="space-y-3"> <ListItem title="Order #1847" status={{ label: "Shipped", color: "#22C55E" }} trailing={<span className="font-bold">284ドル</span>} /> <ListItem title="Order #1846" status={{ label: "Processing", color: "#3B82F6" }} trailing={<span className="font-bold">52ドル</span>} /> <ListItem title="Order #1845" status={{ label: "Delivered", color: "#22C55E" }} trailing={<span className="font-bold">128ドル</span>} /> </div> </SectionCard> </div> {/* 5. Sales by Category */} <div className="mx-6"> <DonutChartCard title="Sales by Category" centerValue={100} centerUnit="%" items={categories} chartElement={/* PieChart */} /> </div> <div className="h-8" /> </PageContent>
Use case: Google Analytics-style overview, content performance.
Section order:
1. Hero (Type D) -- Total pageviews or sessions
2. KPI Grid (Type B) -- Sessions, bounce rate, avg duration, pages/session
3. Area Chart (Type A) -- Traffic trend with period toggle
4. Donut Chart (Type A) -- Traffic sources breakdown
5. Ranked List (Type A) -- Top pages by views
Key difference from SaaS: heavier on charts, lighter on lists. The area chart is the centerpiece.
{/* The pattern is identical -- only data and icons change */} <HeroCard icon={BarChart3} label="Total Pageviews" value="1.2" unit="M" trend={{ value: "+18.7%", direction: "up", label: "vs last period" }} />
Use case: Personal finance, investment portfolio, banking app.
Section order:
1. Hero (Type D) -- Total assets or balance
2. KPI Grid (Type B) -- Income, expenses, savings, investments
3. Donut Chart (Type A) -- Asset allocation
4. Area Chart (Type A) -- Portfolio performance
5. Recent Transactions (Type A) -- Last 3-4 transactions with +/- amounts
- Negative amounts use
text-destructivewith-prefix (not parentheses) - Down trends use TrendingDown icon +
-prefix - Amounts always have
whitespace-nowrap - Use
eok(100M) andjo(1T) units for Korean won
Section order:
1. Hero (Type D) -- Steps today or primary health metric
2. KPI Grid (Type B) -- Heart rate, blood pressure, sleep, calories
3. Area Chart (Type A) -- Weight trend or activity over time
4. Donut Chart (Type A) -- Nutrient breakdown
5. Alert Carousel (Type C) -- Health reminders, medication alerts
| Data Type | Recommended Section | Example |
|---|---|---|
| 1 key metric (biggest number) | Type D Hero Card | Total revenue, total steps |
| 2-4 key metrics | Type B Grid (grid-cols-2) | KPIs, vital signs |
| Time series / trend | Type A Full Card + Chart | Revenue chart, weight chart |
| List of items with status | Type A Full Card + ListItem | Orders, transactions |
| Part-of-whole breakdown | Type A Full Card + Donut | Categories, allocation |
| Ranked comparison | Type A Full Card + RankedList | Top products, competitors |
| Multiple alerts/notifications | Type C Carousel | Briefings, reminders |
| Mistake | Fix |
|---|---|
| Putting a chart and a list in the same card | Split into two Type A sections |
| Using Type D hero for 2+ metrics | Hero is for exactly 1 metric; use Type B grid for multiple |
| Placing content outside of cards | Wrap everything in bg-card rounded-2xl shadow-card
|
| Adding dividers between sections | Remove them; space-y-6 + card backgrounds handle separation |
| More than 4 items in a KPI grid | Keep to 4; move extras to a separate section |