Skip to main content
vibld

Template

Kasimir Lund

A visual-first portfolio for a graphic designer or illustrator presented as a masonry grid of rounded image cards with titles and hashtag-style tags. Category pills filter the work, a floating bottom pill nav switches between Work, About and Contact, and a dark-mode toggle flips the monochrome UI.

Masonry illustrator portfolio · Website · Portfolio · static site

A mock-up of the homepage, drawn from this design’s layout, palette and typefaces. A build follows the full prompt below.

Add app screens

Pick up to 6 screens, such as a dashboard, settings or an empty state. Each is built in this design’s own palette and typefaces, with its states and guardrails.

Account setup
Add edit
Analytics
Appearance
Calendar
Chat
Checklist
Checkout
Confirmation
Dashboard
Delete account
Details
Discovery questions
Empty state
Flowchart
Import export
Inbox
Integrations
Invite team
Loading
Login
Onboarding
Plans
Playground
Product tour
Referral
Search
Settings
Share
Sign up
Success
Table
Team members
Text editor
Upgrade
Usage
Verification
Welcome

Start from this templateRead the build prompt

Typefaces

Hind is a plain, quiet sans that keeps the UI small and neutral so the artwork dominates, and Crimson Pro is a sturdy book serif for the storytelling pages.

  • HindHeadings: studio name 18-20px medium
  • HindBody: body 16px, tags 14px
  • Crimson ProAccent: editorial headings on about and project pages

vibld has built this product: see its example, generated from one sentence. An illustrator's portfolio with a gallery and a short bio.

Who it is for

  • Designers and illustrators
  • Digital artists
  • Creative studios presenting client work
  • Freelancers building a personal brand

Layout

  1. Top bar: studio name left, centered category pills (everything active in black, illustration, digital art, abstract, editorial), moon icon theme toggle right
  2. Masonry grid (3 columns desktop, 2 on mobile) of large rounded image cards with title and #tags under each
  3. Floating translucent bottom-center pill nav: Work (active white pill), About, Contact
  4. Project detail pages with multi-image layouts
  5. About page
  6. Contact page

Palette

Clean, colorful, contemporary, gallery-like, calm. A neutral frame for vivid work.

  • background#ffffff
  • text#0d0d0d
  • active pill#0d0d0d
  • secondary#f5f5f5
  • muted#f0f0f0
  • decorative border#e6e6e6
  • input border (light)#8f8f8f
  • tag gray#6b6b6b
  • dark background#0d0d0d
  • dark secondary#1f1f1f
  • dark tag gray#a6a6a6
  • dark input border#737373

Every checked pair, measured again

SampleWhereRatioNeeds
Aalight: body text19.44:14.5:1
Aalight: text on secondary17.83:14.5:1
Aalight: tags on white5.33:14.5:1
Aalight: tags on secondary4.89:14.5:1
Aalight: white on active black pill19.44:14.5:1
light: input border3.23:13:1
Aalight: nav labels on 85% white pill over black-worst-case artwork13.77:14.5:1
Aadark: body text17.83:14.5:1
Aadark: tags on secondary6.77:14.5:1
dark: input border4.10:13:1
Aadark: nav labels on 85% pill over white-worst-case artwork9.36:14.5:1
focus ring on white19.44:13:1
Aalight: text on muted surface17.05:14.5:1

As vibld’s tokens

The palette on the 15+ color tokens vibld styles a project with, each text color on the fill it is read on. Marked tokens are solved from the palette, because no swatch held that role at 4.5:1.

  • background
  • card
  • muted
  • primary *
  • secondary
  • accent
  • destructive *

Type scale

Display
Hind medium 18-20px for studio name; Crimson Pro available for editorial headings on inner pages
Body
Hind 16px (14px for tags), line-height 1.6; tags in #6b6b6b

UI stays quiet and small so the artwork dominates; serif reserved for about/project storytelling

Spacing and imagery

24px gutters, 16px column gaps, ~24px card radius, pill buttons, titles 16px below images

Vivid 3D renders, illustrations, collage, typography posters, product and stationery mockups in varied aspect ratios

Components

  • Top bar with category pills
  • Theme toggle
  • Masonry grid
  • Rounded image card with title and tags
  • Floating bottom pill nav
  • Project detail page
  • Image carousel
  • About section
  • Contact form
  • Toasts
  • Mobile drawer

Interactions

  • Category pill filters grid with fade
  • Staggered fade-in as cards enter viewport
  • Dark mode toggle
  • Card hover lifts/zooms image
  • Floating nav active pill slides
  • Lazy image loading
  • Toast on form submit

Data

  • Project{slug, title, tags[], categories[], cover, images[], description, client?, year}
  • Category{slug, label}
  • ContactMessage{name, email, message}

Build prompt

The baseline every prompt in the catalog assumes, then this design’s own ten sections, from goal to guardrails.

The baseline
### How to use these prompts
Paste a template's build prompt into your coding agent as the first message. Each prompt names its own stack, tokens and acceptance criteria; the rules below apply to all of them and can be prepended once per project.

### Engineering baseline
- TypeScript strict mode, no `any`, small typed components, feature folders, and one source of truth for design tokens (CSS variables consumed by Tailwind).
- Validate every input with a shared zod schema on the client and again on the server or edge function. Never trust client-side checks alone.
- Show loading, empty and error states for every async view. Surface errors in plain language with a retry, and log details to the console in development only.
- Keep secrets out of the bundle. Only publishable keys (for example a Supabase anon key) belong in client code; service-role keys, API keys and webhooks live in server or edge-function environment variables.

### Data and auth baseline (full-stack templates)
- Enable Row Level Security on every table before inserting data. Default-deny, then add owner-scoped policies (`auth.uid() = user_id`) and explicit role checks for admin views.
- Store roles in a separate table checked by a security-definer function, never in a user-editable profile field.
- Upload files to private storage buckets with size and MIME limits, and serve them through signed URLs.
- Rate-limit public endpoints (forms, auth, AI calls) and add a honeypot field or captcha to anonymous forms.
- Take payments through a hosted checkout and verify webhooks by signature. Never handle raw card data.

### Accessibility and UX baseline
- Target WCAG 2.2 AA: 4.5:1 contrast for normal text and 3:1 for large text, input borders, focus rings and meaningful icons or chart lines. Every palette in this catalog lists its verified pairs; re-check with a contrast tool after any color change.
- Keep body text at 16px or larger with 1.5 line height, nothing below 12px, no light weights under 24px, and uppercase only for short labels.
- Give every interactive element a visible focus ring, full keyboard support, semantic landmarks, labeled form fields, and alt text on meaningful images.
- Respect `prefers-reduced-motion` for every animation. Give drag-and-drop and carousels keyboard and button alternatives.
- Build mobile-first and test at 375px, 768px and 1280px.

### Content guardrails
- Use original copy, fictional sample data and placeholder or licensed imagery. Do not reuse another product's name, logo, screenshots or marketing text.
- Label demo testimonials and metrics as samples. Collect the minimum personal data the feature needs.
### Goal
Build an image-first portfolio for a fictional independent illustrator and designer called **Kasimir Lund**. The audience is art directors and brands scanning for a visual match. The home page is a masonry wall of rounded project cards that can be filtered by category; a floating pill nav handles Work, About and Contact, and the whole UI can switch to dark mode.

### Stack
React 18 + TypeScript + Vite, Tailwind CSS with HSL CSS variables, shadcn/ui (Radix Toggle Group, Dialog, Form), lucide-react, React Router, Framer Motion for filter transitions and nav pill `layoutId`, Embla for project galleries, Sonner for toasts, Vaul for mobile sheets, and react-hook-form + zod. The contact form posts to one serverless function (a Supabase edge function or similar).

### Pages & layout
1. Top bar: studio name left; centered category pills (Everything, Illustration, Digital art, Abstract, Editorial) with the active one filled black; a moon/sun icon toggle right.
2. Masonry grid: 3 columns on desktop, 2 on tablet and mobile, 16px gaps; each card is a rounded image with its natural aspect ratio, then a title and gray hashtag tags.
3. Floating bottom nav: a translucent blurred pill (background at 85% opacity so labels stay above 4.5:1 over any artwork) centered at the bottom with Work, About and Contact; the active item is a white inner pill that slides.
4. Project page: title in an elegant serif, client, year, tags, intro, then a sequence of full-width and paired images, plus a carousel for process shots; previous and next project links.
5. About: portrait, serif pull quote, bio, services, tools.
6. Contact: short form and email.

### Design system
Light: `--background: 0 0% 100%; --foreground: 0 0% 5%; --secondary: 0 0% 96%; --muted: 0 0% 94%; --border: 0 0% 90% (decorative); --input-border: 0 0% 56% (#8f8f8f); --muted-foreground: 0 0% 42% (#6b6b6b)`. Dark: `--background: 0 0% 5%; --foreground: 0 0% 96%; --secondary: 0 0% 12%; --border: 0 0% 18% (decorative); --input-border: 0 0% 45% (#737373); --muted-foreground: 0 0% 65% (#a6a6a6)`. Fonts: Hind 400/500 for UI and Crimson Pro 500 for editorial headings. Scale: clamp(32px, 5vw, 56px) serif titles; 18 / 16 / 14 / 13px (16px body at line-height 1.6, max 70ch; 13–14px only for tags and meta at weight 400+). Radius: 24px cards, 9999px pills. Shadow only on the floating nav: `0 8px 30px rgb(0 0 0 / .12)`. Motion: 400ms staggered fade-up (60ms step); 250ms filter crossfade; spring for the nav pill.

### Components & interactions
- Filter pills: toggle group with `aria-pressed`; updates the URL (`?c=illustration`); an empty state with a reset button.
- Card: hover scales the image to 1.03 inside a clipped frame; focus ring; skeleton with a fixed aspect ratio; broken-image fallback.
- Theme toggle: respects the system theme first; persists; avoids a flash by setting the class in `index.html`.
- Floating nav: stays above the grid, adapts to theme, and keeps a safe-area inset on iOS.
- Contact form: validation, loading, success and error toasts.

### Data & state
`Project{slug,title,tags[],categories[],cover{src,w,h},images[],description,client?,year}`, `Category{slug,label}`. Static typed data; the filter lives in the URL. Seed 16 projects with invented titles and clients.

### Accessibility
Tag gray is #6b6b6b (light) and #a6a6a6 (dark); inputs use #8f8f8f and #737373 borders; the floating nav is 85% opaque in both themes. The floating nav must not cover focused elements; add bottom padding equal to its height. Masonry order in the DOM should follow visual reading order (use column-major or a JS masonry that preserves order). Alt text for every artwork. Reduced motion removes staggered reveals and zooms. Verified contrast: light: tags on white: #6b6b6b on #ffffff = 5.33:1; light: nav labels on 85% white pill over black-worst-case artwork: #0d0d0d on #d9d9d9 = 13.77:1; dark: nav labels on 85% pill over white-worst-case artwork: #f5f5f5 on #414141 = 9.36:1.

### Security
Validate the contact form with zod on the client and in the edge function, add a honeypot and rate limit, and keep keys server-side. If project descriptions are Markdown, sanitize them with DOMPurify. External links use `rel="noopener noreferrer"`.

### Performance & SEO
With 30+ images, serve responsive AVIF/WebP with width descriptors, lazy-load everything below the first row, and reserve aspect ratios to prevent layout shift. Code-split project pages. Per-project meta and OG images; CreativeWork JSON-LD. Target CLS under 0.05.

### Guardrails
- Use placeholder or generated artwork and invented client names; don't imply work for real publications.
- No fabricated testimonials.
- Store only contact form fields.
- Keep components small and typed, never use `any`, and surface load errors visibly.
- Done when: filters deep-link and animate; both themes pass AA for text; the floating nav never hides focused content; project pages resolve by slug; the grid has no layout shift while images load.

Open the builderAll templatesThis palette on its own