public/.
Using icons
w-4 h-4 (small inline), w-5 h-5 (medium UI), w-6 h-6 (large).
Picking the right icon
Browse lucide.dev for a visual catalog. Search by concept (“settings”, “user”, “trash”) and copy the name. In prompts, mention the icon name directly: “Use theTrash2 icon next to the delete button.”
Adding alternative icon libraries
If Lucide doesn’t have what you need:- Heroicons
- Phosphor
- Tabler
- Custom SVG
Static images
Place images inpublic/:
/logo.svg, /hero-bg.png, etc.
For optimized loading, use the framework’s <Image> component (lazy loading, responsive sizes, format conversion).
User-uploaded images
For files users upload (avatars, attachments), use Convex file storage — uploads go directly from the browser to Convex, you store the storage ID, and serve via Convex’s CDN.SVGs as components
For SVGs you want to style with CSS / Tailwind:components/icons/Logo.tsx
<Logo className="w-8 h-8 text-primary" />. The icon picks up the current color via currentColor.
Optimization tips
Related
Convex file storage
User uploads.
Themes
Color tokens icons inherit.
Cloudinary integration
For advanced image transformations.
