Select fonts, create type pairings, and choose icon libraries for web apps. Provides a decision workflow for typography choices based on app type, brand tone, and technical constraints. Covers free fonts (Google Fonts, Fontshare), type scales, font loading, and icon library selection. Use when starting a new webapp, choosing fonts, picking a typeface, creating font pairings, setting up a type scale, selecting an icon library, or when the user asks about typography, fonts, icons for a web project. Triggers include 'choose fonts', 'font pairing', 'typography for', 'pick a typeface', 'type scale', 'icon library', 'which icons', 'which font', 'tipografia', 'fontes para'.
Select fonts, type pairings, and icon libraries for web apps through a structured decision workflow.
Ask or infer from context:
| App Type | Typography Priority | |---|---| | SaaS / Dashboard | Data density, numeric clarity, readability at small sizes | | Marketing / Landing | Visual impact, personality, clear heading/body hierarchy | | Documentation | Long-form readability, code block integration | | E-commerce | Scannability, trust, premium feel for campaigns | | Portfolio / Creative | Personality, visual distinction, memorable type | | Corporate / Enterprise | Professionalism, trust, accessibility |
| App Type | Heading | Body | Icons | When to use | |---|---|---|---|---| | SaaS (safe default) | Inter 600 | Inter 400 | Lucide | Proven, neutral, works everywhere | | SaaS (modern) | Geist 600 | Geist 400 | Lucide | Next.js ecosystem, web-native feel | | SaaS (friendly) | Plus Jakarta Sans | DM Sans | Phosphor | Startup, product-led growth | | Marketing | Playfair Display | Inter | Lucide | Premium, authoritative | | Marketing (bold) | Bebas Neue | Open Sans | Remix | High-impact hero sections | | Docs | Inter 600 | Inter 400 + Fira Code | Lucide | Industry standard (Tailwind, Vercel) | | E-commerce | Playfair Display | Montserrat | Phosphor | Luxury/fashion/lifestyle | | Portfolio | Syne | Satoshi | Phosphor | Tech-creative studios | | Corporate | Source Sans 3 | Source Sans 3 | Lucide | Mature, trustworthy, wide language support |
For deeper exploration of all available fonts and pairings, read references/font-catalog.md.
| Need | Library | Why | |---|---|---| | General purpose (default) | Lucide (1,600+ icons) | Best balance: count, consistency, tree-shaking, community | | Weight variation / design system | Phosphor (1,500+ base, 6 weights) | Map icon weight to typography weight systematically | | Maximum coverage | Tabler (6,000+ icons) | Largest free MIT set, good for complex admin UIs | | Tailwind ecosystem | Heroicons (292 icons, 4 styles) | Small but impeccable, by Tailwind Labs |
Match icon stroke to font weight: Regular (400) text pairs with 1.5-2px stroke icons (Lucide default, Phosphor Regular). Bold (600-700) text pairs with filled/solid icons.
For full comparison of all libraries, read references/icon-catalog.md.
Use Major Third (1.250) as default ratio. Adjust for app type:
| Ratio | Name | Best for | |---|---|---| | 1.125 | Major Second | Dense dashboards, admin panels | | 1.200 | Minor Third | Compact apps, data-rich interfaces | | 1.250 | Major Third | Most web apps (recommended default) | | 1.333 | Perfect Fourth | Marketing sites, editorial |
:root {
--fs-xs: clamp(0.64rem, 0.6rem + 0.15vw, 0.7rem);
--fs-sm: clamp(0.8rem, 0.77rem + 0.15vw, 0.875rem);
--fs-base: clamp(1rem, 0.95rem + 0.25vw, 1.125rem);
--fs-lg: clamp(1.125rem, 1rem + 0.5vw, 1.25rem);
--fs-xl: clamp(1.35rem, 1.15rem + 0.85vw, 1.563rem);
--fs-2xl: clamp(1.6rem, 1.3rem + 1.2vw, 1.953rem);
--fs-3xl: clamp(1.95rem, 1.5rem + 1.75vw, 2.441rem);
--fs-4xl: clamp(2.4rem, 1.75rem + 2.5vw, 3.052rem);
--lh-tight: 1.1; /* h1, h2 */
--lh-snug: 1.25; /* h3, h4 */
--lh-normal: 1.5; /* body */
--lh-relaxed: 1.65; /* small text, captions */
--ls-tight: -0.025em; /* headings */
--ls-wide: 0.025em; /* all-caps, small labels */
}
npm install @fontsource-variable/interfont-display: swap for body, optional for display headings<link rel="preload" href="/fonts/inter-variable.woff2" as="font" type="font/woff2" crossorigin>@font-face {
font-family: 'Inter';
src: url('/fonts/inter-variable.woff2') format('woff2');
font-weight: 100 900;
font-display: swap;
}
Fallback stack: 'Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
Default pattern — npm with tree-shaking:
// npm install lucide-react
import { Home, Settings, User } from 'lucide-react';
<Home size={20} strokeWidth={1.5} />
For prototypes/landing pages, CDN is fine:
<script src="https://unpkg.com/lucide@latest"></script>
<script>lucide.createIcons();</script>
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer