Skip to main content
vibld

Template

Elio Park

A warm-ivory portfolio for a solo digital designer, built around fixed four-corner navigation and a rotating circular badge. A centered welcome line leads into huge viewport-scaled project names, then About and Contact sections. Case study pages carry impact metrics and sequential navigation.

Corner-nav product designer 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

Proza Libre is a plain but witty humanist sans with a real italic for asides, and its bold caps hold up when pushed to gallery-wall scale.

  • Proza LibreHeadings: viewport-scaled uppercase project names, bold, 0.05em
  • Proza LibreBody: body 16-20px, inline bold keywords, italic asides

Who it is for

  • Solo product and brand designers
  • Creative consultants presenting case studies
  • Designers who also show personal explorations
  • Freelancers who want an editorial, gallery-like site

Layout

  1. Four-corner fixed navigation: monogram top-left (green), Work top-right, About bottom-left, Contact bottom-right
  2. Rotating circular text badge centered at top
  3. Hero: centered one-to-three-line welcome statement in the middle of the viewport
  4. Project index: enormous uppercase project names spanning the width (e.g. an invented one-word product name), one per screen band, plus an Explorations entry
  5. About: bold-keyword paragraph and italic sign-off
  6. Contact: label, email and social links left; location and live local time right
  7. Footer rule with credit and 'made in' line
  8. Case study page layout with impact metrics grid and next/prev project

Palette

Calm, warm, editorial, spacious, witty. It feels like a gallery wall with small captions in the corners.

  • background (ivory)#f3f1ed
  • text#141414
  • accent (green)#1d731d
  • secondary surface#e5e2dc
  • muted text#656565
  • border#141414

Every checked pair, measured again

SampleWhereRatioNeeds
Aabody text on ivory16.33:14.5:1
Aabody text on secondary surface14.25:14.5:1
Aagreen monogram and active nav on ivory5.29:14.5:1
Aagreen accent on secondary surface4.61:14.5:1
Aamuted text and italic sign-off on ivory5.17:14.5:1
Aamuted text on secondary surface4.51:14.5:1
focus outline on ivory16.33:13: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
Proza Libre bold, viewport-scaled (roughly 12-20vw) uppercase project names (one or two words each) with 0.05em tracking
Body
Proza Libre 16-20px, bold used inline for keywords, italic for asides

A single neutral sans is pushed to extremes of scale; the gap between tiny corner labels and giant titles creates the drama.

Spacing and imagery

Large empty areas; content column ~600px centered; corner nav inset 32px; hairline footer rule; square corners.

Very little photography on the index; project imagery is saved for case studies. A rotating text badge and emoji add a personal touch.

Components

  • Four-corner fixed nav
  • Rotating circular text badge
  • Centered welcome statement
  • Viewport-scaled project title list
  • Explorations gallery
  • About paragraph with bold keywords
  • Contact block with live local time
  • Case study hero
  • Impact metrics grid
  • Sequential next/prev project nav
  • Footer credit line

Interactions

  • Circular badge rotates continuously (pauses on reduced-motion)
  • Scroll-triggered reveal of project titles
  • Hovering a project title shows a preview image or shifts color
  • Live clock updates the local time each minute
  • Case study metrics count up when in view
  • Next/prev project navigation at the end of case studies

Data

  • Project{slug, title, client, year, role, cover, metrics: {label, value}[], sections[]}
  • Exploration{title, media, date}
  • Profile{name, location, timezone, email, socials[]}

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
Create an ivory-toned, editorial portfolio for a fictional independent designer, "Elio Park". The audience is product teams and brand leads looking at case studies. The site should feel like a gallery. Navigation sits in the four corners, a small rotating badge acts as a signature, and each project name is set so large it fills the screen. Case studies prove impact with metrics.

### Stack
React 18 + TypeScript + Vite, Tailwind CSS, shadcn/ui (Radix) and lucide-react. Use Framer Motion for reveals, the rotating badge and count-up metrics, React Router for `/`, `/work/:slug` and `/explorations`, date-fns-tz for the local-time readout, and Embla Carousel for exploration galleries. Static only.

### Pages & layout
1. Fixed corner nav, 32px from each edge: monogram top-left in the accent color, Work top-right, About bottom-left, Contact bottom-right. Put a circular "crafted by" text badge at top center.
2. Hero: a single centered statement (name, role, region) in the vertical middle of the viewport.
3. Work index: each project name is an uppercase link sized with clamp(64px, 16vw, 260px) and stacked with generous space. End with an "Explorations" link.
4. About: a 600px column. Bold the discipline keywords and close with a gray italic sign-off.
5. Contact: an eyebrow, then two columns. The left has email and external links with ↗; the right has the city and a live local time.
6. Footer: a hairline rule, © name and a credit line.
7. Case study: hero image, meta row, a 3-4 cell metrics grid, narrative sections and next/previous project.

### Design system
- `--background: #f3f1ed`, `--foreground: #141414`, `--accent: #1d731d`, `--secondary: #e5e2dc`, `--muted-foreground: #656565`.
- Font: Proza Libre (Google Fonts) 400/600/800. Scale: 14 / 16 / 20 / 32 / 64px plus fluid display. Display tracking is -0.04em for sentence-case text; uppercase project names use 0.05em. Body 16-20px at 1.6 line-height in a ~65ch column; the rotating badge text is at least 12px.
- Spacing: 8px base; 160-240px between index items. Radius 0 and no shadows.
- Motion: badge at 20s linear infinite rotation; reveals at 600ms cubic-bezier(0.16,1,0.3,1); count-up over 1.2s. Light theme.

### Components & interactions
- CornerNav: fixed links with a hover underline and an active state in the accent. It must not cover content on mobile, so at small widths collapse the bottom corners into the footer.
- RotatingBadge: SVG `textPath`, decorative. Pause it under reduced motion.
- ProjectTitle: fades in on scroll. On hover or focus the color shifts and a floating preview image appears; the floating image is optional on touch.
- LocalTime: updates each minute and shows a fallback if the timezone is invalid.
- MetricCard: animates from 0 once, and screen readers get the final value immediately.

### Data & state
Typed data: `Project{slug, title, client, year, role, cover, metrics[], sections[]}`, `Exploration{title, media, date}` and `Profile{name, city, timezone, email, socials}`. Seed four fictional projects with invented client names and plausible metrics marked as sample.

### Accessibility
- The green accent is deepened to #1d731d (5.29:1 on ivory, 4.61:1 on the secondary surface), so the monogram and active nav state are legible; links keep #141414 with an underline. Muted text is #656565.
- Corner nav sits inside a `<nav>` landmark in logical DOM order. Mark the badge `aria-hidden`.
- Giant titles are real text links with visible focus outlines.
- Local time uses a `<time>` element.
- Verified contrast: body #141414 on #f3f1ed = 16.33:1; accent #1d731d on #f3f1ed = 5.29:1; muted #656565 on #f3f1ed = 5.17:1.

### Security
- No forms by default, just `mailto:` and external links with `rel="noopener noreferrer"`.
- If you add a form, validate with zod on client and server and add a honeypot.
- No secrets in client-side code.

### Performance & SEO
Keep the index text-only for a fast LCP. Lazy-load case study images with dimensions. Use per-project meta, OG images and one H1 per page.

### Guardrails
- Do write all copy yourself and use placeholder imagery (Unsplash-style stock or generated); no trademarked names, client logos or real people.
- Don't present invented testimonials or awards as real; label sample content as sample.
- Keep components small and fully typed; no `any`. Surface errors visibly instead of failing silently.
- Don't collect or store more personal data than the contact form needs.
- Done when:
  - [ ] Corner nav stays usable and non-overlapping from 360px to 1920px
  - [ ] Project titles scale fluidly without horizontal overflow
  - [ ] Badge and count-up respect reduced-motion
  - [ ] Local time renders and updates
  - [ ] Case study shows metrics grid and next/prev links

Open the builderAll templatesThis palette on its own