UI Element Library

110 elements across 11 categories. Jump to: nav · hero · about · experience · education · skills · projects · contact · footer · effect · gallery

hero10

Bold Headline Hero

hero-bold-headline

Oversized display typography with a confident single decorative accent

Show prompt
Output the hero content only — the template provides the section wrapper with height and bottom-anchored layout. Container: max-w-4xl w-full. The name renders at text-6xl md:text-8xl lg:text-9xl font-heading font-bold tracking-tighter leading-[0.9] with class gradient-text-animated. Below the name (mt-6): headline at text-xl md:text-2xl text-text-muted font-body leading-relaxed max-w-xl. Below that (mt-8): the CTA as inline-flex link — font-mono text-sm uppercase tracking-[0.15em] text-accent hover:opacity-80 transition-opacity duration-200. DECORATIVE ANCHOR (mandatory): above the name (mb-6), add a horizontal accent rule — a <div class="w-12 h-[2px] bg-accent"></div> — and a small mono eyebrow label above the rule like font-mono text-[11px] uppercase tracking-[0.2em] text-text-muted (render the user's role or a short descriptor). Everything left-aligned. The rule + eyebrow together prevent the name from floating in empty space.

Split Layout Hero

hero-split-intro

Two-column layout with text on left and decorative typographic anchor on right

Show prompt
Two-column grid: grid grid-cols-[2fr_1fr] md:grid-cols-[3fr_2fr] gap-6 md:gap-10 items-end. Do NOT add min-h-screen, max-width, mx-auto, or padding — the template provides these. Left column: name using class="gradient-text-animated" at the system typography scale, then headline at text-lg md:text-xl text-text-muted mt-6 leading-relaxed font-body, then CTA as inline-block: font-mono text-sm text-accent mt-8 uppercase tracking-[0.15em] border border-accent/30 rounded-full px-6 py-2.5 hover:bg-accent/10 transition-all duration-300. Right column (ALWAYS visible, not hidden on mobile): an oversized initial (first letter of the user's name) at text-[8rem] md:text-[18rem] lg:text-[22rem] font-heading font-bold leading-none tracking-tighter text-accent/10 select-none flex items-end justify-center. This decorative letter always fills the right column; if a WebGL shader is active, reduce its opacity to text-accent/5 so it doesn't compete with the shader. Never leave the right column empty.

Terminal / Code Hero

hero-terminal-style

Monospace terminal-styled hero with typing animation, developer aesthetic

Show prompt
Build the hero as a full-viewport section: min-h-screen flex flex-col justify-center px-6 md:px-12. Content container: max-w-3xl mx-auto. Create a terminal window: bg-bg-alt rounded-lg border border-border overflow-hidden. Terminal title bar: h-10 bg-bg-alt border-b border-border flex items-center px-4 gap-2. Add three dots: three <span> elements each w-3 h-3 rounded-full — first bg-red-400/60, second bg-yellow-400/60, third bg-green-400/60 (exceptions to the no-raw-color rule — these are standard terminal dots). Center text "portfolio.sh" in font-mono text-xs text-text-muted. Terminal body: p-6 md:p-8 font-mono. Render the name as: <span class="text-text-muted">$ whoami</span> on one line, then the name on the next line in text-2xl md:text-4xl font-bold text-text. Then a blank line, then <span class="text-text-muted">$ cat about.txt</span>, then the headline in text-text-muted text-sm md:text-base leading-relaxed. Then a blank line, then <span class="text-text-muted">$ contact --open</span>, then the CTA text in text-accent. Add a blinking cursor after the last line: an inline-block w-2 h-5 bg-accent/80 with @keyframes blink { 0%,50% { opacity: 1; } 51%,100% { opacity: 0; } } animation duration 1s infinite. No scroll indicator needed — the terminal is the visual anchor.

Centered Card Hero

hero-card-centered

A floating card centered on the viewport with all intro content inside

Show prompt
Build the hero as a full-viewport centered layout: min-h-screen flex items-center justify-center px-6 md:px-12. Create a centered card: max-w-lg w-full bg-bg-alt rounded-2xl border border-border p-8 md:p-12 relative. Add a subtle glow: box-shadow using the accent color at 8% opacity, like 0 0 60px -12px rgba(accent, 0.08). Inside the card: the name centered at text-3xl md:text-5xl font-heading font-bold tracking-tight text-text text-center. Below (mt-3): a short role/title line in text-sm font-mono text-accent uppercase tracking-[0.15em] text-center. Below (mt-6): the headline in text-base text-text-muted text-center leading-relaxed. Below (mt-8): the CTA as a block link — text-center font-mono text-sm text-accent border border-accent/30 rounded-full px-6 py-2.5 hover:bg-accent/10 transition-all duration-300. Below the CTA (mt-6): a row of social-style links centered, flex justify-center gap-4 font-mono text-xs text-text-muted. Background behind the card: add a single radial gradient pseudo-element centered, using accent at 5% opacity, 400px radius, to create a soft glow behind the card.

Stacked Minimal Hero

hero-stacked-minimal

Restrained typographic hero — large name, small supporting type, one quiet accent line

Show prompt
Output the hero content only — the template provides the section wrapper and bottom-anchored vertical alignment. Container: max-w-2xl w-full. MANDATORY eyebrow (mb-5): a two-part line — a small <span class="font-mono text-[11px] uppercase tracking-[0.2em] text-accent">01 ·</span> followed by <span class="font-mono text-[11px] uppercase tracking-[0.2em] text-text-muted">the user's role/title</span> — this single mono line gives the page a numbered-section feel and anchors the empty area above the name. Name: text-5xl md:text-7xl lg:text-8xl font-heading font-bold tracking-tighter text-text leading-[0.9] (use gradient-text-animated class on the name). Below (mt-5): a single-sentence bio/headline in text-base md:text-lg text-text-muted font-body max-w-xl. Below (mt-8): the CTA as plain text — font-mono text-sm text-accent hover:opacity-70 transition-opacity duration-200 with a small arrow "→" after it. Keep the design quiet — no cards or blobs. But never empty: the eyebrow line is mandatory so the top of the content block always has visual weight.

Full Bleed Gradient Hero

hero-full-bleed-gradient

Entire viewport filled with an animated gradient background, centered text

Show prompt
Build the hero as a full-bleed gradient section: min-h-screen flex items-center justify-center px-6 md:px-12 relative overflow-hidden. Add an animated gradient background using a ::before pseudo-element: position absolute inset-0, background: linear-gradient(135deg, the accent color at 15% opacity, bg color, accent at 10% opacity, bg-alt color). Set background-size: 400% 400%. Animate with @keyframes gradientShift { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } duration 15s ease infinite. Content centered: text-center relative z-10. Name: text-5xl md:text-7xl lg:text-8xl font-heading font-bold tracking-tighter text-text. Headline below (mt-4): text-lg md:text-xl text-text-muted/80 max-w-xl mx-auto. CTA below (mt-8): font-mono text-sm text-accent uppercase tracking-[0.15em] hover:opacity-80 transition-opacity. Scroll indicator at bottom center.

Asymmetric Overlap Hero

hero-asymmetric-overlap

Off-center text with overlapping geometric accent blocks for visual tension

Show prompt
Build the hero with deliberate asymmetry: min-h-screen relative flex items-center px-6 md:px-12 overflow-hidden. Content: max-w-5xl mx-auto relative z-10 md:pl-12. Name: text-5xl md:text-7xl lg:text-8xl font-heading font-bold tracking-tighter text-text leading-[0.9]. Headline below (mt-4): text-lg text-text-muted max-w-md. CTA below (mt-8): font-mono text-sm text-accent uppercase tracking-[0.15em]. Behind the text, add overlapping geometric shapes using absolutely positioned divs: (1) a large rectangle w-72 h-96 bg-accent/5 rounded-2xl absolute -right-20 top-1/4 -rotate-6, (2) a smaller square w-48 h-48 border border-accent/20 rounded-xl absolute right-20 top-10 rotate-12, (3) a circle w-32 h-32 bg-accent/8 rounded-full absolute -right-10 bottom-1/4. These shapes overlap each other and partially overlap the text area on desktop, creating visual tension. On mobile, scale the shapes down and reposition so they don't interfere with readability. Scroll indicator at bottom center.

Scroll Reveal Hero

hero-scroll-reveal

Hero elements animate in one by one with staggered entrance animations

Show prompt
Build the hero as a full-viewport section: min-h-screen flex flex-col justify-center px-6 md:px-12. Content: max-w-3xl. Each element has a staggered entrance animation on page load (not scroll — these fire immediately with increasing delays). Name: text-5xl md:text-7xl lg:text-8xl font-heading font-bold tracking-tighter text-text, opacity-0 animate with delay 0.2s. Headline: text-lg text-text-muted mt-4, delay 0.5s. CTA: font-mono text-sm text-accent mt-8, delay 0.8s. Scroll indicator: delay 1.2s. The animation for each: @keyframes heroReveal { 0% { opacity: 0; transform: translateY(30px); filter: blur(6px); } 100% { opacity: 1; transform: translateY(0); filter: blur(0); } } duration 0.8s ease-out forwards. Apply animation-fill-mode: forwards so elements stay visible. Also add a horizontal accent line (w-12 h-[2px] bg-accent) that animates in between the name and headline with its own delay of 0.35s, using a scaleX(0) → scaleX(1) animation with transform-origin left.

Bento Grid Hero

hero-bento-intro

Hero as a bento grid — name, role, social links, and location in separate cards

Show prompt
Build the hero as a bento grid layout: min-h-screen flex items-center px-6 md:px-12. Content: max-w-4xl mx-auto w-full. Create a CSS grid: grid grid-cols-2 md:grid-cols-4 gap-3 auto-rows-auto. Cell 1 (name cell): col-span-2 md:col-span-3 row-span-2 bg-bg-alt rounded-2xl border border-border p-6 md:p-10 flex flex-col justify-end. Name: text-4xl md:text-6xl font-heading font-bold tracking-tighter text-text. Headline below: text-sm md:text-base text-text-muted mt-2. Cell 2 (CTA cell): col-span-1 bg-accent/10 rounded-2xl border border-accent/20 p-5 flex items-center justify-center. CTA text: font-mono text-sm text-accent text-center. Cell 3 (role/title cell): col-span-1 bg-bg-alt rounded-2xl border border-border p-5. Small label "ROLE" in font-mono text-[10px] uppercase tracking-widest text-text-muted mb-2, then the title in text-sm font-semibold text-text. Cell 4 (location cell): col-span-1 bg-bg-alt rounded-2xl border border-border p-5. Small label "BASED IN" same style, then location in text-sm text-text. Cell 5 (social cell): col-span-1 bg-bg-alt rounded-2xl border border-border p-5. Small label "CONNECT" same style, then links in text-sm text-accent. Each cell has hover:border-accent/30 transition-colors duration-300. On mobile, all cells become col-span-2 and stack vertically.

Spotlight Name Hero

hero-spotlight-name

Dark background with a radial spotlight glow effect behind the name

Show prompt
Build the hero with a dramatic spotlight effect: min-h-screen flex flex-col justify-center items-center text-center px-6 md:px-12 relative overflow-hidden. Background: bg-bg. Create a spotlight using a ::before pseudo-element: position absolute, width 600px, height 600px, top 50%, left 50%, transform translate(-50%, -50%), background: radial-gradient(circle, accent color at 8% opacity at center, transparent at 70%). Add a subtle pulse: @keyframes spotlightPulse { 0%,100% { opacity: 0.6; transform: translate(-50%, -50%) scale(1); } 50% { opacity: 1; transform: translate(-50%, -50%) scale(1.1); } } duration 4s ease-in-out infinite. Content relative z-10: name text-5xl md:text-7xl lg:text-9xl font-heading font-bold tracking-tighter text-text. Headline below (mt-4): text-lg text-text-muted/70 max-w-lg mx-auto. CTA below (mt-8): font-mono text-sm text-accent. Add a very subtle CSS grain texture overlay on the entire hero section using a ::after pseudo-element with a noise SVG filter at very low opacity (0.03). Scroll indicator at bottom center.

about8

Two Column Prose

about-two-column-prose

Section heading on the left, bio prose on the right in two columns

Show prompt
Build the about section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Inner container: max-w-4xl mx-auto grid grid-cols-1 md:grid-cols-[200px_1fr] gap-8 md:gap-16. Left column: the section label "ABOUT" in text-xs font-mono uppercase tracking-[0.15em] text-text-muted, positioned sticky at top-32 on desktop so it stays visible while the right column scrolls. Optionally add a short tagline below the label in text-sm text-text-muted/60 mt-2. Right column: the bio text. First sentence gets text-lg md:text-xl font-medium text-text leading-relaxed — this is the hook. Remaining sentences in text-base text-text-muted leading-relaxed mt-4 as a separate paragraph. Add a thin accent line (w-8 h-[1.5px] bg-accent) above the first sentence as a visual marker. The whole right column has the .reveal animation class.

Card With Stats

about-card-with-stats

Bio inside a bordered card, with a row of key stats below

Show prompt
Section label via class="section-label". Then a card: use class="glass-card" with p-8 md:p-10 and class="accent-line". Inside: bio text with first sentence as text-lg font-medium text-text, rest as text-base text-text-muted leading-relaxed mt-3. Below the bio (mt-6), add border-t border-border pt-6. Stats row: grid grid-cols-2 md:grid-cols-4 gap-4 text-center. Each stat: number in text-2xl font-heading font-bold text-accent, label below in text-[10px] font-mono uppercase tracking-[0.2em] text-text-muted mt-1. Derive stats from the user's data (years experience, projects, technologies, roles). If insufficient data, show 2-3 stats. Card uses class="hover-glow".

Timeline Narrative

about-timeline-narrative

Bio told as a mini-timeline of 3-5 career/life milestones

Show prompt
Build the about section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "ABOUT" as standard. Content: max-w-2xl mx-auto. Instead of a paragraph, tell the bio as a vertical timeline of 3-5 milestones extracted from the user's background. Structure: a relative container with a vertical line on the left — a div absolute left-[7px] top-0 bottom-0 w-[1px] bg-border. Each milestone: flex gap-6 mb-8 relative. On the left: a small circle w-[15px] h-[15px] rounded-full border-2 border-accent bg-bg flex-shrink-0 mt-1 relative z-10. On the right: the year in text-xs font-mono text-accent uppercase tracking-wide, then the milestone title in text-base font-semibold text-text mt-1, then a one-sentence description in text-sm text-text-muted mt-1 leading-relaxed. The first milestone should be the most recent/current. Each milestone has a staggered .reveal animation. The last milestone's circle can be filled (bg-accent) to indicate "current."

Quote Highlight

about-quote-highlight

Opens with a large pull-quote, followed by a shorter bio paragraph

Show prompt
Build the about section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "ABOUT" as standard. Content: max-w-3xl mx-auto. First element: a large pull-quote extracted from the bio or created as the user's personal motto/philosophy. Style: text-2xl md:text-3xl font-heading font-medium text-text leading-snug tracking-tight. Add a large quotation mark before it using a ::before pseudo-element with content '"' in text-6xl text-accent/30 font-heading absolute -top-4 -left-4 (position the quote block as relative). Below the quote (mt-8): a horizontal line w-12 h-[1px] bg-accent/40. Below that (mt-8): the bio paragraph in text-base text-text-muted leading-relaxed. The quote captures attention, the paragraph fills in details. Both have .reveal animation.

Grid of Facts

about-grid-facts

Bio presented as a grid of labeled personal/professional facts

Show prompt
Build the about section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "ABOUT" as standard. Content: max-w-3xl mx-auto. Instead of a paragraph, present the person through a grid of 6-8 fact cards: grid grid-cols-2 md:grid-cols-3 gap-3. Each fact card: bg-bg rounded-xl border border-border p-4 hover:border-accent/20 transition-colors duration-300. Inside each card: a label in text-[10px] font-mono uppercase tracking-widest text-text-muted mb-2 (e.g., "LOCATION", "FOCUS", "CURRENTLY", "LEARNING", "FUN FACT", "TOOLS", "EDUCATION", "GOAL"). Then the value in text-sm font-body text-text. Derive facts from the bio/spec data — location, field of study, current project, favorite tools, etc. One card can span col-span-2 if it has longer content (like a personal mission statement). The grid creates a scannable, personality-forward presentation instead of paragraph form.

Minimal Paragraph

about-minimal-paragraph

Just a beautifully typeset single paragraph — no cards or decorations

Show prompt
Build the about section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "ABOUT" as standard. Content: max-w-xl mx-auto. The bio text as a single block: first sentence in text-lg md:text-xl font-medium text-text leading-relaxed. Remaining text continues naturally in the same paragraph element but transitions to text-text-muted color after the first sentence (wrap the first sentence in a <span> with text-text class, rest of paragraph inherits text-text-muted). Line-height: leading-[1.8] for maximum readability. No cards, no borders, no backgrounds, no stats — the typography and whitespace are the design. The max-w-xl creates a comfortable line length for reading. Apply the .reveal animation to the paragraph. That's it. The restraint IS the design.

Split Placeholder + Text

about-split-image-text

Two-column layout with a decorative placeholder on one side and bio on the other

Show prompt
Build the about section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Inner container: max-w-4xl mx-auto grid grid-cols-1 md:grid-cols-2 gap-10 md:gap-16 items-center. Left column: a decorative placeholder square — w-full aspect-square max-w-xs mx-auto rounded-2xl bg-bg border border-border relative overflow-hidden. Inside, create a decorative CSS pattern: use a gradient from accent at 5% to bg, plus a centered monogram (the user's initials) in text-5xl font-heading font-bold text-accent/10. Add a subtle border-2 border-accent/10 inset effect. Right column: section label "ABOUT" as text-xs font-mono uppercase tracking-[0.15em] text-text-muted mb-6. Bio text: first sentence in text-lg font-medium text-text, rest in text-base text-text-muted leading-relaxed mt-3. On mobile, stack with the text first and the decorative element below. Both columns have .reveal animation.

Accordion Expand

about-accordion-expand

Short intro visible by default, expandable sections for more depth

Show prompt
Build the about section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "ABOUT" as standard. Content: max-w-2xl mx-auto. First: a visible intro paragraph — the first 2 sentences of the bio in text-lg font-medium text-text leading-relaxed. Below (mt-8): 2-3 expandable accordion items. Each item: a button w-full flex items-center justify-between py-4 border-b border-border. Left side: the category label in text-sm font-semibold text-text (e.g., "My Background", "What I Do", "What Drives Me"). Right side: a plus/minus toggle — a <span> with text-text-muted that shows "+" when collapsed and changes to a "−" when expanded. When clicked (JavaScript toggle), a content div below the button expands from max-h-0 overflow-hidden to max-h-96 with transition: max-height 0.4s ease-out. Inside: text-sm text-text-muted leading-relaxed py-3. Split the bio content across these sections logically. Only one accordion open at a time.

experience11

Vertical Timeline

exp-vertical-timeline

Classic vertical timeline with a connecting line and dot markers

Show prompt
Build the experience section with bg-bg py-24 md:py-32 px-6 md:px-12. Section label "EXPERIENCE" as standard. Content: max-w-3xl mx-auto. Create a vertical timeline: a relative container with a continuous vertical line — div absolute left-0 md:left-[7px] top-0 bottom-0 w-[1px] bg-border. Each experience item: relative pl-8 md:pl-12 pb-12 last:pb-0. Timeline dot: absolute left-[-4px] md:left-[3.5px] top-1 w-[9px] h-[9px] rounded-full border-2 border-accent bg-bg z-10. Inside each item: date range in text-xs font-mono text-accent uppercase tracking-wide mb-1. Company name in text-lg font-semibold text-text tracking-tight. Role title in text-sm text-text-muted mt-0.5. Description in text-sm text-text-muted leading-relaxed mt-3. Location in text-xs font-mono text-text-muted/60 mt-2. The first (most recent) item's dot should be filled: bg-accent. Each item has .reveal animation with staggered delays (0.1s increments). Separator lines between items are implicit via the timeline structure — no border-b needed.

Stacked Cards

exp-stacked-cards

Each role is a full-width card stacked vertically with hover effects

Show prompt
Section label via class="section-label". Content: flex flex-col gap-3. The FIRST card MUST be wrapped in class="gradient-border" p-[1px] rounded-xl, with inner div bg-bg-alt rounded-xl p-6 md:p-8. Add class="accent-glow" to it. Remaining cards: bg-bg-alt rounded-xl border border-border p-5 md:p-6 class="hover-glow". Inside each card: the headline (impact statement) as text-lg font-heading font-semibold text-text tracking-tight. Second row: flex items-baseline gap-3 — role title in text-sm text-accent, company in text-sm text-text-muted. Date in text-xs font-mono text-text-muted. Description in text-sm text-text-muted leading-relaxed mt-3. Location in text-[10px] font-mono uppercase tracking-[0.15em] text-text-muted/60 mt-2. Each card has data-reveal-child.

Minimal List

exp-minimal-list

Simple list with each role on a line, separated by thin horizontal rules

Show prompt
Build the experience section with bg-bg py-24 md:py-32 px-6 md:px-12. Section label "EXPERIENCE" as standard. Content: max-w-2xl mx-auto. Each experience item: py-6 border-b border-border last:border-b-0. Top line: flex flex-wrap items-baseline gap-x-4 gap-y-1. Company name: text-base font-semibold text-text. A small separator dot: text-text-muted/40 hidden md:inline. Role title: text-sm text-text-muted. Date range pushed to the right: ml-auto text-xs font-mono text-text-muted. Below (mt-2): description in text-sm text-text-muted/80 leading-relaxed. No cards, no backgrounds, no borders on individual items except the horizontal rule. The simplicity lets the content speak. Each item has .reveal animation.

Accordion Detail

exp-accordion-detail

Collapsed role summaries that expand to show full details on click

Show prompt
Build the experience section with bg-bg py-24 md:py-32 px-6 md:px-12. Section label "EXPERIENCE" as standard. Content: max-w-3xl mx-auto. Each experience item is an accordion. Collapsed state: a button w-full flex items-center justify-between py-5 border-b border-border text-left. Left content: flex flex-col. Company name in text-base font-semibold text-text. Role + date in text-xs text-text-muted mt-0.5. Right: a chevron arrow made with CSS borders (a small ">" shape) that rotates 90deg when expanded, transition-transform duration-300 text-text-muted. Expanded state: below the button, a div with max-h-0 overflow-hidden transition-[max-height] duration-400 ease-out that expands to max-h-[500px]. Inside: pt-4 pb-6 pl-4 border-l-2 border-accent/20 ml-1. Description in text-sm text-text-muted leading-relaxed. Location in text-xs font-mono text-text-muted/60 mt-3. JavaScript: clicking toggles a data attribute or class, only one accordion open at a time. The first item should be expanded by default.

Two Column Grid

exp-two-column-grid

Roles displayed in a 2-column grid of cards, good for many positions

Show prompt
Build the experience section with bg-bg py-24 md:py-32 px-6 md:px-12. Section label "EXPERIENCE" as standard. Content: max-w-4xl mx-auto. Display roles in a grid: grid grid-cols-1 md:grid-cols-2 gap-4. Each role is a card: bg-bg-alt rounded-xl border border-border p-6 hover:border-accent/20 transition-colors duration-300. Inside each card: date range in text-[10px] font-mono text-accent uppercase tracking-widest mb-3. Company name in text-base font-semibold text-text. Role title in text-sm text-text-muted mt-1. Description in text-sm text-text-muted/80 leading-relaxed mt-3. If there's an odd number of roles, the last card can either stay alone (asymmetry is fine) or span full width via CSS :last-child:nth-child(odd) { grid-column: 1 / -1; }. Each card has .reveal with staggered delays.

Sidebar Dates

exp-sidebar-dates

Date range pinned on the left, role details on the right in a clean grid

Show prompt
Build the experience section with bg-bg py-24 md:py-32 px-6 md:px-12. Section label "EXPERIENCE" as standard. Content: max-w-3xl mx-auto. Each experience item: grid grid-cols-1 md:grid-cols-[140px_1fr] gap-x-8 gap-y-1 py-8 border-b border-border last:border-b-0. Left column (dates): text-xs font-mono text-text-muted uppercase tracking-wide pt-1. On desktop, this column acts as a stable sidebar — the dates stay neatly aligned on the left creating a clean scannable column. Right column: company name in text-lg font-semibold text-text tracking-tight. Role title in text-sm text-accent mt-0.5. Description in text-sm text-text-muted leading-relaxed mt-3. Location in text-xs font-mono text-text-muted/60 mt-2. On mobile, dates appear above the company name (stacked). This is the most resume-like and professional layout. Each item has .reveal animation.

Highlight Latest

exp-highlight-latest

Most recent role featured prominently, older roles in a compact list below

Show prompt
Build the experience section with bg-bg py-24 md:py-32 px-6 md:px-12. Section label "EXPERIENCE" as standard. Content: max-w-3xl mx-auto. The FIRST (most recent) role gets a featured card: bg-bg-alt rounded-2xl border border-accent/20 p-8 md:p-10 relative. Add a small "CURRENT" badge: absolute top-4 right-4 text-[9px] font-mono uppercase tracking-widest text-accent bg-accent/10 px-2 py-1 rounded-full. Inside: company name text-xl font-heading font-bold text-text, role text-sm text-accent mt-1, description text-base text-text-muted leading-relaxed mt-4, location text-xs font-mono text-text-muted/60 mt-3. Below the featured card (mt-8): a label "PREVIOUS" in text-xs font-mono uppercase tracking-[0.15em] text-text-muted mb-4. Then remaining roles in a compact list: each role is py-4 border-b border-border last:border-b-0, with company + role on one line (text-sm font-semibold text-text and text-sm text-text-muted), date on the right (text-xs font-mono text-text-muted), and a one-line description below (text-sm text-text-muted/70 mt-1). The contrast between the large featured card and compact list creates clear hierarchy.

No Image Experience Cards

exp-card-no-image

Text-only experience cards (used when the section has no attached images)

Show prompt
Section label "EXPERIENCE" via class="section-label". Content max-w-3xl mx-auto flex flex-col gap-3. Each experience item: bg-bg-alt rounded-xl border border-border p-5 md:p-6 class="hover-glow" data-reveal-child. Headline text-base md:text-lg font-heading font-semibold text-text. Role/company row mt-1: role text-sm text-accent · company text-sm text-text-muted · date text-xs font-mono text-text-muted/80. Description text-sm text-text-muted leading-relaxed mt-3. Location text-[10px] font-mono uppercase tracking-[0.15em] text-text-muted/60 mt-2. FIRST card uses class="gradient-border" p-[1px] rounded-xl wrapper with class="accent-glow".

Image Side Experience Cards

exp-card-image-side

Experience cards with image on one side, role details on the other

Show prompt
Section label "EXPERIENCE" via class="section-label". Content max-w-4xl mx-auto flex flex-col gap-4. Each experience item: bg-bg-alt rounded-xl border border-border overflow-hidden grid grid-cols-1 md:grid-cols-[4fr_8fr] class="hover-glow" data-reveal-child. ALTERNATE image side per row (odd: image left; even: image right). Image side: if item.images present, render each as <figure data-image-ref="ASSET_ID" class="m-0 h-full"><img data-image-ref="ASSET_ID" src="" alt="" loading="lazy" decoding="async" class="block w-full h-full max-h-[240px] object-cover"></figure>. Stack vertically with gap-2 if multiple. If no image, render a labeled placeholder: div bg-bg flex items-center justify-center, with the role's company initials in font-heading text-3xl font-bold text-text-muted/40. Copy side: p-6 flex flex-col justify-center. Headline (impact statement) text-base md:text-lg font-heading font-semibold text-text. Row mt-1: role title text-sm text-accent · company text-sm text-text-muted · date text-xs font-mono text-text-muted (separated by · dots). Description text-sm text-text-muted leading-relaxed mt-3. Location text-[10px] font-mono uppercase tracking-[0.15em] text-text-muted/60 mt-2. The FIRST card must use class="gradient-border" p-[1px] rounded-xl with class="accent-glow".

Image Top Experience Cards

exp-card-image-top

Experience cards with image on top, role details below — editorial feel

Show prompt
Section label "EXPERIENCE" via class="section-label". Content max-w-4xl mx-auto grid grid-cols-1 md:grid-cols-2 gap-5. Each experience item: bg-bg-alt rounded-xl border border-border overflow-hidden flex flex-col class="hover-glow" data-reveal-child. Image on top: if item.images present, render each as <figure data-image-ref="ASSET_ID" class="m-0"><img data-image-ref="ASSET_ID" src="" alt="" loading="lazy" decoding="async" class="block w-full max-h-[240px] object-cover"></figure>. Stack with no gap if multiple. If no image, replace with div h-[6px] bg-accent. Copy area: p-6. Headline text-lg font-heading font-semibold text-text. Role/company row mt-1 (same pattern as image-side variant). Description text-sm text-text-muted leading-relaxed mt-3. Location text-[10px] font-mono uppercase tracking-[0.15em] text-text-muted/60 mt-2. FIRST card uses class="gradient-border" + class="accent-glow".

Thumbnail Experience Cards

exp-card-thumb

Compact cards with a small thumbnail (logo/icon) next to the role

Show prompt
Section label "EXPERIENCE" via class="section-label". Content max-w-3xl mx-auto flex flex-col gap-3. Each experience item: bg-bg-alt rounded-xl border border-border p-5 flex items-start gap-5 class="hover-glow" data-reveal-child. Left: thumbnail container w-20 h-20 md:w-24 md:h-24 rounded-lg overflow-hidden bg-bg flex-shrink-0 border border-border. If item.images present, render the FIRST image as <figure data-image-ref="ASSET_ID" class="m-0 w-full h-full"><img data-image-ref="ASSET_ID" src="" alt="" loading="lazy" decoding="async" class="block w-full h-full object-cover"></figure>. If no image, render a div w-full h-full flex items-center justify-center with the company initials in font-heading text-2xl font-bold text-text-muted/50. Right (flex-1): headline text-base md:text-lg font-heading font-semibold text-text. Role/company row mt-1 in text-sm: role text-accent · company text-text-muted · date text-xs font-mono text-text-muted/80. Description text-sm text-text-muted leading-relaxed mt-2. Location text-[10px] font-mono uppercase tracking-[0.15em] text-text-muted/60 mt-2. FIRST card uses class="gradient-border" p-[1px] rounded-xl with the inner card bg-bg-alt rounded-xl p-5 + class="accent-glow".

education10

Simple Cards

edu-simple-cards

Each degree displayed in a clean bordered card

Show prompt
Section label via class="section-label". Cards in flex flex-col gap-3. Each card: use class="glass-card" with p-6 md:p-8 class="hover-glow". Inside: school name in text-lg font-semibold text-text tracking-tight. Degree in text-sm text-text-muted mt-1. Row with graduation date and GPA: flex gap-4 mt-3, each in text-xs font-mono text-text-muted. Highlights as text-sm text-text-muted/80 leading-relaxed mt-3. Coursework as inline tags: span text-xs font-mono border border-border rounded-full px-3 py-1 text-text-muted in flex flex-wrap gap-2 mt-3. Each card has data-reveal-child.

Inline Compact

edu-inline-compact

Education as a compact text block — minimal space usage

Show prompt
Build the education section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "EDUCATION" as standard. Content: max-w-2xl mx-auto. Each degree entry is just 2-3 lines with py-4 border-b border-border last:border-b-0. Line 1: school name in text-base font-semibold text-text, followed by a bullet separator in text-text-muted/40, then graduation date or "Expected [date]" in text-sm font-mono text-text-muted. Line 2: degree name in text-sm text-text-muted. Line 3 (optional): GPA and/or key highlights in text-xs font-mono text-text-muted/60 mt-1. No cards, no backgrounds — this section should take up minimal vertical space, appropriate when education is not the main focus. The compactness contrasts with larger sections above and below. Apply .reveal animation to the container.

Featured Institution

edu-featured-institution

Large school name with degree details and coursework tags below

Show prompt
Build the education section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "EDUCATION" as standard. Content: max-w-3xl mx-auto. Feature the institution prominently: school name in text-2xl md:text-3xl font-heading font-bold text-text tracking-tight. Below (mt-2): degree in text-base text-text-muted. Below (mt-1): a flex row with graduation date and GPA in text-xs font-mono text-text-muted, separated by a small dot. Below (mt-6): if there are highlights or coursework, display them as a grid of tags: flex flex-wrap gap-2. Each tag: text-xs font-mono bg-bg border border-border rounded-full px-3 py-1.5 text-text-muted hover:border-accent/20 hover:text-accent transition-colors duration-200. If there are activities, list them below (mt-4) in text-sm text-text-muted. This layout is ideal for students or people with one primary institution. Apply .reveal animation.

Timeline Entry

edu-timeline-entry

Education displayed in a timeline format matching the experience timeline

Show prompt
Build the education section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "EDUCATION" as standard. Content: max-w-3xl mx-auto. Use the same visual language as a timeline: a relative container with a vertical line div absolute left-[7px] top-0 bottom-0 w-[1px] bg-border. Each education entry: relative pl-10 pb-8 last:pb-0. Dot: absolute left-[3.5px] top-1.5 w-[9px] h-[9px] rounded-full border-2 border-accent bg-bg z-10. Inside: graduation date (or "Expected") in text-xs font-mono text-accent uppercase tracking-wide mb-1. School name in text-lg font-semibold text-text tracking-tight. Degree in text-sm text-text-muted mt-0.5. GPA in text-xs font-mono text-text-muted mt-1. Highlights/coursework in text-sm text-text-muted/80 leading-relaxed mt-3. This style creates visual continuity if paired with the vertical timeline experience section. Apply .reveal with staggered delays.

Split Detail

edu-split-detail

Two-column layout — institution on left, details on right

Show prompt
Build the education section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "EDUCATION" as standard. Content: max-w-3xl mx-auto. Each education entry: grid grid-cols-1 md:grid-cols-[1fr_1.5fr] gap-6 md:gap-12 py-6 border-b border-border last:border-b-0. Left column: school name in text-lg font-semibold text-text tracking-tight. Graduation date in text-xs font-mono text-text-muted mt-1. GPA in text-xs font-mono text-accent mt-1 (highlight with accent to draw the eye). Right column: degree name in text-base text-text mb-3. Relevant coursework as a flex flex-wrap gap-2 list of tags: text-xs font-mono bg-bg border border-border rounded-full px-3 py-1 text-text-muted. Activities and honors in text-sm text-text-muted/80 mt-3 leading-relaxed. On mobile, stacks into a single column. Apply .reveal animation.

Transcript Card

edu-transcript-card

Each degree rendered as an official-looking transcript with labeled monospace rows

Show prompt
Start with <p class="section-label">EDUCATION</p>. Content max-w-3xl. Render each education item as a transcript-style card: <div class="border border-border rounded-lg p-6 md:p-7 bg-bg-alt/40 hover-glow mb-4 last:mb-0" data-reveal-child>. Header: school name in font-heading text-lg font-bold text-text, then a full-width divider (border-b border-border my-3). Below, a stack of label/value rows — each row is a grid grid-cols-[110px_1fr] gap-4 py-1.5 items-baseline. Left cell: font-mono text-[10px] uppercase tracking-[0.18em] text-text-muted (labels: DEGREE, GRADUATION, GPA, FOCUS). Right cell: font-mono text-sm text-text. For GPA, use text-accent instead of text-text so it stands out. Final row: use the highlight text with label "COURSEWORK" (or "HONORS") — right cell wraps naturally, font-mono text-sm text-text-muted leading-relaxed. Official-academic-document aesthetic, clean, data-dense, readable.

Credential Badges

edu-credential-badges

Horizontal rows where the degree abbreviation sits in a bordered square badge on the left

Show prompt
Start with <p class="section-label">EDUCATION</p>. Content max-w-3xl. Each item is a flex items-center gap-6 md:gap-8 py-6 border-b border-border last:border-b-0, data-reveal-child. Left: a 70px x 70px (md: 84px x 84px) square with border-2 border-accent rounded-xl flex items-center justify-center shrink-0. Inside the square: a 2- or 3-letter abbreviation derived from the degree (e.g., "BS", "IB", "MS", "PhD") in font-heading text-2xl md:text-3xl font-bold text-accent. Right side: flex-1 min-w-0. Top line: flex items-baseline justify-between — school name in font-heading text-base md:text-lg font-semibold text-text on the left, graduation year on the right in font-mono text-xs text-text-muted. Degree line: font-mono text-xs text-accent uppercase tracking-[0.12em] mt-1. GPA line if present: font-mono text-[11px] text-accent-light mt-0.5. Highlights: text-sm text-text-muted mt-2 leading-relaxed line-clamp-2. Feels like a credential registry — clean, authoritative.

Coursework Chips

edu-coursework-chips

Education cards with coursework rendered as a rich wrap of monospace pill-chips

Show prompt
Start with <p class="section-label">EDUCATION</p>. Content max-w-3xl. Each item is a gradient-border wrapper — <div class="gradient-border"><div class="bg-bg-alt rounded-xl p-6 md:p-7 hover-glow" data-reveal-child>. Inside: school name font-heading text-lg font-bold text-text, then a second line flex gap-4 flex-wrap items-baseline mt-1: degree in font-mono text-xs text-accent uppercase tracking-[0.12em], "·" separator in text-text-muted, graduation in font-mono text-xs text-text-muted, "·" separator, GPA in font-mono text-xs text-accent-light. Below (mt-5), a chip heading: <p class="font-mono text-[10px] uppercase tracking-[0.18em] text-accent-light mb-2">COURSEWORK</p>. Parse the highlights field: split on comma or period to extract coursework phrases and render each as an inline chip — <span class="inline-block font-mono text-[11px] px-2.5 py-1 rounded-full border border-border bg-bg/60 text-text-muted mr-1.5 mt-1.5 hover:text-accent hover:border-accent/40 transition-colors">Data Structures</span>. If honors/activities exist beyond courses, render them as a separate section below the chips with its own label "HONORS". Feels rich, scannable, educational.

Honors Emphasis

edu-honors-emphasis

Stats-forward — school as hero, with big numeric callouts for GPA, graduation, major

Show prompt
Start with <p class="section-label">EDUCATION</p>. Content max-w-3xl. Render the FIRST education item (most recent) as a featured block: gradient-border wrapper, inner div bg-bg-alt rounded-xl p-7 md:p-9 hover-glow. Inside: school name font-heading text-xl md:text-2xl font-bold text-text. Degree line directly below in font-mono text-xs text-accent uppercase tracking-[0.15em]. Below (mt-5), a row of stat callouts: flex flex-wrap gap-6 md:gap-10 pt-5 border-t border-border. Each stat: small block with the big number on top in font-heading text-2xl md:text-3xl font-bold text-accent (e.g. "3.8/4.0", "May 2029", "CS + Econ"), and a font-mono text-[10px] uppercase tracking-[0.18em] text-text-muted label below (e.g. "GPA", "GRADUATION", "FOCUS"). 3 to 4 stats based on available data. Below the stats (mt-4), a compact paragraph of highlights in text-sm text-text-muted leading-relaxed. Additional education items below the featured one render as compact rows: border border-border rounded-lg p-4 mt-3 flex items-baseline justify-between — school + degree + year, no stats.

Parchment Frame

edu-parchment-frame

Double-border ceremonial framed card — diploma-like, quiet, centered

Show prompt
Start with <p class="section-label">EDUCATION</p>. Content max-w-3xl. Each education item is framed like a diploma: outer div with border-[3px] border-accent/30 rounded-lg p-1 (the p-1 creates the double-border gap). Inner div: border border-accent/20 rounded-md p-7 md:p-10 bg-bg text-center hover-glow, data-reveal-child. Top decorative element: <div class="w-10 h-[2px] bg-accent mx-auto mb-5"></div>. School name: font-heading text-xl md:text-2xl font-bold text-text tracking-tight. Degree below: font-mono text-xs uppercase tracking-[0.22em] text-accent mt-2. A mid-card divider line: <div class="w-16 h-[1px] bg-border mx-auto my-4"></div>. Graduation + GPA line: font-mono text-sm text-text-muted (e.g., "May 2029 · GPA 3.8/4.0"). If highlights exist: a short italic serif-feel sentence in font-body italic text-sm text-text-muted/80 max-w-md mx-auto leading-relaxed mt-3. Bottom decorative element: <div class="w-10 h-[2px] bg-accent-light mx-auto mt-5"></div>. Between multiple items: gap-6. Quiet, ceremonial, documented.

skills8

Tag Cloud

skills-tag-cloud

Skills as a flowing collection of pill-shaped tags

Show prompt
Build the skills section with bg-bg py-24 md:py-32 px-6 md:px-12 (or bg-bg-alt if it follows a bg-bg section — alternate backgrounds). Section label "SKILLS" as standard. Content: max-w-3xl mx-auto. Display all skills as a single flex flex-wrap gap-2 md:gap-3 collection of tags. Each tag: text-xs md:text-sm font-mono bg-bg-alt border border-border rounded-full px-4 py-2 text-text-muted hover:border-accent/30 hover:text-accent transition-colors duration-200 cursor-default. Key/primary skills can be differentiated: use bg-accent/10 border-accent/20 text-accent for 3-5 top skills, regular styling for the rest. This creates a natural visual hierarchy without progress bars or ratings. Tags wrap naturally so the layout changes with every user — someone with 5 skills gets a clean row, someone with 20 gets a dense cloud. Apply .reveal animation to the container.

Grouped Columns

skills-grouped-columns

Skills organized into named groups displayed in 2-3 columns

Show prompt
Build the skills section with bg-bg py-24 md:py-32 px-6 md:px-12. Section label "SKILLS" as standard. Content: max-w-3xl mx-auto. Organize skills into 2-4 groups by category (e.g., "Languages", "Frameworks", "Tools", "Design"). Display groups in a grid: grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 md:gap-10. Each group: a heading in text-xs font-mono uppercase tracking-[0.15em] text-accent mb-4. Below: a list of skills, each as text-sm text-text-muted py-1.5 border-b border-border/50 last:border-b-0. On hover, each skill row shifts text-text-muted to text-text transition-colors duration-200. The grouped structure shows organization and depth. If skills data doesn't have explicit categories, intelligently group them (programming languages, frameworks/libraries, tools/platforms, soft skills/design). Each group has .reveal animation with staggered delays per group.

Progress Bars

skills-progress-bars

Horizontal bars showing relative skill proficiency levels

Show prompt
Build the skills section with bg-bg py-24 md:py-32 px-6 md:px-12. Section label "SKILLS" as standard. Content: max-w-2xl mx-auto. Each skill: flex flex-col gap-1.5 mb-5 last:mb-0. Label row: flex justify-between items-center. Skill name in text-sm font-body text-text. Proficiency label on the right in text-xs font-mono text-text-muted (use descriptive words like "Advanced", "Intermediate", "Familiar" — NOT percentages). Bar: w-full h-[3px] bg-border rounded-full overflow-hidden. Inner bar: h-full bg-accent rounded-full with a width representing proficiency (advanced=90%, intermediate=65%, familiar=40%). Animate the bar width from 0 to its target on scroll using CSS: set initial width to 0, then when .reveal.visible is applied, transition width over 1s ease-out with a stagger delay. The bars should feel subtle — 3px height keeps them elegant. Max 8-10 skills to avoid overwhelming. Apply .reveal to the container.

Icon Grid

skills-icon-grid

Skills as a grid of icon-like cells with monogram letters and labels

Show prompt
Build the skills section with bg-bg py-24 md:py-32 px-6 md:px-12. Section label "SKILLS" as standard. Content: max-w-3xl mx-auto. Display skills in a grid: grid grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4 md:gap-6. Each skill cell: flex flex-col items-center justify-center p-4 rounded-xl bg-bg-alt border border-border hover:border-accent/20 transition-all duration-300 group. Icon area: w-10 h-10 flex items-center justify-center mb-2. Use the first 1-2 letters of the skill name as a monogram: text-lg font-mono font-bold text-text-muted group-hover:text-accent transition-colors duration-300. Label below: text-[11px] font-mono text-text-muted text-center group-hover:text-text transition-colors. The monogram approach (e.g., "Py" for Python, "JS" for JavaScript) is clean and always works without external icons. Apply .reveal to the grid with staggered delays per cell.

Bento Skill Cards

skills-bento-cards

Skills in a bento grid with larger cards for primary skill categories

Show prompt
Build the skills section with bg-bg py-24 md:py-32 px-6 md:px-12. Section label "SKILLS" as standard. Content: max-w-4xl mx-auto. Create a bento grid: grid grid-cols-2 md:grid-cols-4 gap-3. Primary skill categories get larger cells (col-span-2 or row-span-2), secondary get single cells. Each cell: bg-bg-alt rounded-xl border border-border p-5 hover:border-accent/20 transition-colors duration-300. Inside large cells: category name in text-xs font-mono uppercase tracking-widest text-accent mb-3. Skills listed as text-sm text-text-muted leading-loose — each skill on its own line. Inside small cells: category name same style, skills as a more compact list text-xs text-text-muted. Suggested layout: first group col-span-2 row-span-2 (primary languages/frameworks), second group col-span-2 (tools), remaining groups col-span-1 each. On mobile, all cells become col-span-2 (full width). Apply .reveal with staggered delays per cell.

Minimal List

skills-minimal-list

Just a comma-separated inline list — minimal space, maximum efficiency

Show prompt
Build the skills section with bg-bg py-24 md:py-32 px-6 md:px-12. Section label "SKILLS" as standard. Content: max-w-2xl mx-auto. Display all skills as a single flowing paragraph of inline text. Wrap everything in a <p> tag with text-sm md:text-base text-text-muted leading-loose. Each skill is plain text separated by a styled separator: use " · " (middle dot with spaces) in text-text-muted/40 between each skill. Primary skills (first 3-5) can be in text-text font-medium to differentiate them from the rest which stay text-text-muted. No tags, no cards, no grids — it reads like a natural sentence of capabilities. This takes up minimal vertical space and works when skills are not the main selling point. The whole paragraph has .reveal animation.

Marquee Scroll

skills-marquee-scroll

Skills scrolling horizontally in an infinite marquee animation

Show prompt
Build the skills section with bg-bg py-24 md:py-32 px-6 md:px-12 overflow-hidden. Section label "SKILLS" as standard (keep within max-w-3xl mx-auto). The marquee rows are full-width (no max-width constraint). Create two rows of horizontally scrolling skill tags moving in opposite directions. Each row: flex gap-4 whitespace-nowrap. Duplicate the skills list twice within each row so it loops seamlessly. Animation: @keyframes marqueeLeft { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); } } and @keyframes marqueeRight { 0% { transform: translateX(-50%); } 100% { transform: translateX(0); } }. Row 1: animation marqueeLeft 25s linear infinite. Row 2: animation marqueeRight 30s linear infinite (slightly different speed). Each skill tag: text-sm font-mono bg-bg-alt border border-border rounded-full px-5 py-2 text-text-muted flex-shrink-0. Add gradient edge fades: ::before and ::after pseudo-elements on the row wrapper, absolute, w-24 h-full, background gradient from bg to transparent, z-10. The second row has mt-3. Pause animation on hover via CSS: .marquee-row:hover { animation-play-state: paused; }.

Radar / Chart Visual

skills-radar-visual

Skills presented as an SVG radar/spider chart visualization

Show prompt
Build the skills section with bg-bg py-24 md:py-32 px-6 md:px-12. Section label "SKILLS" as standard. Content: max-w-3xl mx-auto grid grid-cols-1 md:grid-cols-[1fr_1fr] gap-10 items-center. Left side: a pure SVG radar chart. Create an inline <svg> with viewBox="0 0 200 200" class="w-full max-w-[280px] mx-auto". Draw 3 concentric regular polygons (pentagons or hexagons depending on skill count, max 6 skills) using <polygon> with stroke set to the border color and fill="none". Plot skill proficiency as points on the outer polygon and connect them with a <polygon> filled with the accent color at 15% opacity and stroked with accent color. Each vertex gets a <text> label positioned just outside the shape: font-size 9px, fill with the text-muted color, font-family mono. Right side: a legend list of the same skills: each as flex items-center gap-3 py-2. A small circle w-2 h-2 rounded-full bg-accent, then skill name text-sm text-text, then proficiency text-xs font-mono text-text-muted. The visual chart adds uniqueness while the legend ensures readability. Apply .reveal to the whole section.

projects12

Card Grid

proj-card-grid

Projects in a responsive grid of cards with tech stack tags

Show prompt
Build the projects section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "PROJECTS" as standard. Content: max-w-4xl mx-auto. Grid: grid grid-cols-1 md:grid-cols-2 gap-4. Each project card: bg-bg rounded-xl border border-border p-6 hover:border-accent/20 transition-all duration-300 hover:-translate-y-0.5 group. Inside: project name in text-lg font-semibold text-text tracking-tight group-hover:text-accent transition-colors duration-200. Description in text-sm text-text-muted leading-relaxed mt-2. Tech stack as flex flex-wrap gap-2 mt-4: each tech as text-[11px] font-mono bg-bg-alt border border-border rounded-full px-2.5 py-1 text-text-muted. Links row at bottom mt-4: flex gap-4. Each link (GitHub, Live Demo, etc.) as text-xs font-mono text-accent hover:opacity-70 transition-opacity with a small arrow after it. Each card has .reveal with staggered delays.

Featured Showcase

proj-featured-showcase

One project highlighted large at top, remaining in smaller cards below

Show prompt
Build the projects section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "PROJECTS" as standard. Content: max-w-4xl mx-auto. FIRST project gets a featured card: bg-bg rounded-2xl border border-accent/20 p-8 md:p-10 relative. A label "FEATURED" as absolute top-4 right-4 text-[9px] font-mono uppercase tracking-widest text-accent bg-accent/10 px-2 py-1 rounded-full. Project name: text-xl md:text-2xl font-heading font-bold text-text. Description: text-base text-text-muted leading-relaxed mt-3. Tech stack: flex flex-wrap gap-2 mt-4, tags in text-xs font-mono bg-bg-alt border border-border rounded-full px-3 py-1 text-text-muted. Links: mt-4 flex gap-4 text-sm font-mono text-accent. Below the featured card (mt-6): remaining projects in a grid grid-cols-1 md:grid-cols-2 gap-4. Each smaller card: bg-bg rounded-xl border border-border p-5 hover:border-accent/20 transition-colors. Inside: name text-base font-semibold text-text, description text-sm text-text-muted mt-1, tech tags text-[10px] mt-3, links text-xs text-accent mt-3. The size contrast creates clear hierarchy. Apply .reveal to all.

Minimal List

proj-list-minimal

Projects as a clean list — name, description, and tech on each row

Show prompt
Build the projects section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "PROJECTS" as standard. Content: max-w-2xl mx-auto. Each project: py-6 border-b border-border last:border-b-0 group. Top row: flex items-baseline justify-between gap-4. Project name as a link: text-base font-semibold text-text group-hover:text-accent transition-colors duration-200. Links on the right: text-xs font-mono text-text-muted hover:text-accent. Below (mt-1.5): description in text-sm text-text-muted leading-relaxed. Below (mt-3): tech stack as inline text — text-xs font-mono text-text-muted/60, each tech separated by " · ". No cards, no borders around individual projects. Dense, professional, and content-forward. Each item has .reveal with stagger.

Bento Layout

proj-bento-layout

Projects in a bento grid with varying card sizes based on importance

Show prompt
Build the projects section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "PROJECTS" as standard. Content: max-w-4xl mx-auto. Create a bento grid: grid grid-cols-2 md:grid-cols-4 gap-3 auto-rows-auto. The FIRST project gets col-span-2 row-span-2: a large card bg-bg rounded-2xl border border-border p-6 md:p-8 hover:border-accent/20 transition-colors flex flex-col justify-end. Name text-xl font-heading font-bold text-text, description text-sm text-text-muted mt-2, tech tags mt-3, links mt-3. Second and third projects: each col-span-1 md:col-span-2, medium cards bg-bg rounded-xl border border-border p-5. Remaining projects: col-span-1 each, compact cards bg-bg rounded-xl border border-border p-4. In compact cards: name text-sm font-semibold text-text, tech as text-[10px] font-mono text-text-muted mt-2. On mobile, all cells become col-span-2 and stack. Each cell has .reveal with staggered delays.

Accordion Expand

proj-accordion-expand

Project names as a compact list that expand to reveal full details

Show prompt
Build the projects section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "PROJECTS" as standard. Content: max-w-3xl mx-auto. Each project is an accordion item. Collapsed: a button w-full flex items-center justify-between py-5 border-b border-border text-left group. Left: project name in text-base font-semibold text-text group-hover:text-accent transition-colors. Also show tech stack inline on desktop: text-xs font-mono text-text-muted ml-3 hidden md:inline. Right: a "+" icon in text-text-muted text-lg that changes to "−" when expanded. Expanded content: div with max-h-0 overflow-hidden transition-[max-height] duration-400 ease-out that expands to max-h-[400px]. Inside: pt-3 pb-6. Description in text-sm text-text-muted leading-relaxed. Tech stack visible on all screens: flex flex-wrap gap-2 mt-4, tags in text-[11px] font-mono bg-bg border border-border rounded-full px-3 py-1 text-text-muted. Links: mt-4 text-xs font-mono text-accent. JavaScript: toggle class on click, only one expanded at a time. First item expanded by default.

Timeline Build

proj-timeline-build

Projects ordered chronologically showing build progression

Show prompt
Build the projects section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "PROJECTS" as standard. Content: max-w-3xl mx-auto. Display projects as a vertical build timeline: relative container with a vertical line absolute left-[7px] top-0 bottom-0 w-[1px] bg-border. Each project: relative pl-10 pb-10 last:pb-0. Dot: absolute left-[3.5px] top-1.5 w-[9px] h-[9px] rounded-full border-2 border-accent bg-bg z-10. The most recent project's dot is filled bg-accent. Inside: date/timeframe in text-xs font-mono text-accent uppercase tracking-wide mb-1. Project name in text-lg font-semibold text-text tracking-tight. Description in text-sm text-text-muted leading-relaxed mt-2. Tech stack: flex flex-wrap gap-2 mt-3, tags in text-[11px] font-mono bg-bg border border-border rounded-full px-2.5 py-1 text-text-muted. Links: mt-3 text-xs font-mono text-accent. This format emphasizes growth and learning over time. Each entry has .reveal with staggered delays.

Hover Reveal Cards

proj-hover-reveal

Minimal cards that expand details on hover with smooth transitions

Show prompt
Build the projects section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "PROJECTS" as standard. Content: max-w-4xl mx-auto grid grid-cols-1 md:grid-cols-2 gap-4. Each project card: bg-bg rounded-xl border border-border p-6 relative overflow-hidden group min-h-[140px] transition-all duration-500. Default state: only project name visible — text-lg font-semibold text-text, and a one-line description text-sm text-text-muted mt-1. A small arrow "→" in the bottom-right: absolute bottom-4 right-4 text-accent text-sm opacity-50 group-hover:opacity-100 transition-opacity. Hover state: border transitions to border-accent/20. A detail overlay slides up from the bottom: absolute bottom-0 left-0 right-0 bg-gradient-to-t from-bg via-bg to-transparent p-6 pt-12 transform translate-y-full group-hover:translate-y-0 transition-transform duration-500 ease-out. Inside overlay: full description text-sm text-text-muted, tech tags text-[11px] mt-3, links text-xs text-accent mt-3. On mobile/touch, make all details always visible (no hover required). Apply .reveal with stagger.

Case Study Blocks

proj-case-study-blocks

Full-width narrative blocks with problem/approach/result structure

Show prompt
Build the projects section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "PROJECTS" as standard. Content: max-w-3xl mx-auto flex flex-col gap-12. Each project is a full-width block. Project name: text-xl md:text-2xl font-heading font-bold text-text. Tech stack below (mt-2): flex flex-wrap gap-2, tags text-[11px] font-mono text-text-muted border border-border rounded-full px-2.5 py-1. Then a structured narrative (mt-6). If the project description is long enough, split into labeled parts: "CONTEXT" / "APPROACH" / "OUTCOME" each with text-[10px] font-mono uppercase tracking-widest text-accent mb-2 as a label, and text-sm text-text-muted leading-relaxed as content. If description is short, use a single "DETAILS" label. Links at bottom: mt-4 text-xs font-mono text-accent. Separate projects with a centered divider: w-8 h-[1px] bg-border mx-auto between blocks. Each block has .reveal animation.

Masonry Grid

proj-masonry-grid

Pinterest-style masonry layout with varying card heights

Show prompt
Build the projects section with bg-bg-alt py-24 md:py-32 px-6 md:px-12. Section label "PROJECTS" as standard. Content: max-w-4xl mx-auto. Use CSS columns for a masonry effect: columns-1 md:columns-2 gap-4 [column-fill:_balance]. Each project card: break-inside-avoid mb-4 bg-bg rounded-xl border border-border p-6 hover:border-accent/20 transition-colors duration-300. Inside: project name text-base font-semibold text-text hover:text-accent transition-colors. Description text-sm text-text-muted leading-relaxed mt-2. Cards naturally vary in height based on description length, creating the staggered masonry look. Tech stack: flex flex-wrap gap-2 mt-3, tags text-[11px] font-mono bg-bg-alt border border-border rounded-full px-2.5 py-1 text-text-muted. Links: mt-3 text-xs font-mono text-accent. On mobile, single column so it becomes stacked cards. Apply .reveal to each card with stagger.

No Image Cards

proj-card-no-image

Text-only project cards (used when the section has no attached images)

Show prompt
Section label "PROJECTS" via class="section-label". Content max-w-4xl mx-auto grid grid-cols-1 md:grid-cols-2 gap-4. Each project card: bg-bg-alt rounded-xl border border-border p-6 class="hover-glow" data-reveal-child. Title text-lg font-heading font-semibold text-text. Tech tags mt-2: flex flex-wrap gap-2 — text-[11px] font-mono bg-bg border border-border rounded-full px-2.5 py-1 text-text-muted. Description text-sm text-text-muted leading-relaxed mt-3. Links mt-4 text-xs font-mono text-accent. FIRST card uses class="gradient-border" p-[1px] rounded-xl wrapper with class="accent-glow".

Image Side Cards

proj-card-image-side

Project cards with the image on one side, copy on the other (alternating per row)

Show prompt
Section label "PROJECTS" via class="section-label". Content max-w-4xl mx-auto, flex flex-col gap-6. Each project card: bg-bg-alt rounded-xl border border-border overflow-hidden grid grid-cols-1 md:grid-cols-[5fr_7fr] gap-0 class="hover-glow" data-reveal-child. ALTERNATE the image side per row using nth-child(even) { direction: rtl; } and resetting children to direction: ltr — odd rows have image on left, even rows have image on right. Image side: if the item has props.images render EACH image as <figure data-image-ref="ASSET_ID" class="m-0 h-full"><img data-image-ref="ASSET_ID" src="" alt="" loading="lazy" decoding="async" class="block w-full h-full max-h-[280px] object-cover"></figure>. If multiple images, stack them vertically with gap-3 inside the figure container. If the item has no images, render a placeholder div bg-bg with class accent-line that reads the project name in font-mono text-xs uppercase tracking-widest text-text-muted/60 centered. Copy side: p-6 md:p-8 flex flex-col justify-center. Title in text-lg font-heading font-semibold text-text. Tech tags row mt-2: flex flex-wrap gap-2 — text-[11px] font-mono bg-bg border border-border rounded-full px-2.5 py-1 text-text-muted. Description text-sm text-text-muted leading-relaxed mt-3. Links row mt-4: text-xs font-mono text-accent. The first card MUST be wrapped class="gradient-border" p-[1px] rounded-xl with the inner card bg-bg-alt rounded-xl. Use class="accent-glow" on the first card.

Image Top Cards

proj-card-image-top

Project cards with a full-width image on top and copy below

Show prompt
Section label "PROJECTS" via class="section-label". Content max-w-4xl mx-auto, grid grid-cols-1 md:grid-cols-2 gap-5. Each project card: bg-bg-alt rounded-xl border border-border overflow-hidden flex flex-col class="hover-glow" data-reveal-child. Image area on top: if the item has props.images render EACH image as <figure data-image-ref="ASSET_ID" class="m-0"><img data-image-ref="ASSET_ID" src="" alt="" loading="lazy" decoding="async" class="block w-full max-h-[260px] object-cover"></figure>. Stack multiple images vertically with no gap. If no images, replace the image area with a slim accent strip: div h-[6px] bg-accent. Copy area: p-6. Title text-lg font-heading font-semibold text-text. Tech tags mt-2 (same pattern as image-side). Description text-sm text-text-muted leading-relaxed mt-3. Links text-xs font-mono text-accent mt-4. The FIRST card must use class="gradient-border" p-[1px] rounded-xl wrapper with class="accent-glow".

contact6

Centered CTA

contact-centered-cta

Large centered heading with email and social links below

Show prompt
Build the contact section with bg-bg py-24 md:py-32 px-6 md:px-12 text-center. Content: max-w-2xl mx-auto. Section label "CONTACT" as standard, centered. Large heading: text-3xl md:text-5xl font-heading font-bold text-text tracking-tight. Subtext below (mt-4): text-base text-text-muted. Email link below (mt-8): text-lg md:text-xl text-accent font-mono hover:opacity-70 transition-opacity duration-200 as an <a href="mailto:...">. Below (mt-6): a flex justify-center gap-6 row of secondary links (LinkedIn, GitHub, etc.) in text-sm font-mono text-text-muted hover:text-accent transition-colors duration-200. Apply .reveal animation to the whole block.

Split Info

contact-split-info

Two-column layout — message on left, contact details stacked on right

Show prompt
Build the contact section with bg-bg py-24 md:py-32 px-6 md:px-12. Content: max-w-4xl mx-auto grid grid-cols-1 md:grid-cols-2 gap-12 md:gap-16. Left column: section label "CONTACT" as standard. Heading: text-2xl md:text-3xl font-heading font-bold text-text tracking-tight. Short message below (mt-4): text-base text-text-muted leading-relaxed. Right column: a list of contact methods stacked vertically with gap-6. Each method: a label in text-xs font-mono uppercase tracking-[0.15em] text-text-muted mb-1 (e.g., "EMAIL", "LINKEDIN", "GITHUB"). The actual link below: text-base text-text hover:text-accent transition-colors duration-200. Email as <a href="mailto:...">, LinkedIn and GitHub as <a href="..." target="_blank" rel="noopener">. Clean and scannable. Apply .reveal to both columns.

Floating Card

contact-card-floating

Contact info in a centered floating card with subtle glow

Show prompt
Section label via class="section-label" text-center. Center the content with text-center. Card: use class="glass-card accent-glow" with p-8 md:p-10 text-center mx-auto max-w-md. Inside: heading text-xl md:text-2xl font-heading font-bold text-text. Subtext mt-3 text-sm text-text-muted. Email link mt-6: inline-block text-accent font-mono text-sm border border-accent/30 rounded-full px-6 py-2.5 hover:bg-accent/10 transition-all duration-300 as a mailto link. LinkedIn/social links mt-4: flex justify-center gap-4, each text-xs font-mono text-text-muted hover:text-accent transition-colors. Phone if present. The card feels like a business card. data-reveal-child on the card.

Inline Links

contact-inline-links

Ultra-compact contact — just a single line of links

Show prompt
Build the contact section as ultra-compact: bg-bg py-16 md:py-20 px-6 md:px-12 text-center. Content: max-w-xl mx-auto. No large heading. Just a single line: "Get in touch" or the contact heading from spec in text-sm text-text-muted. Below (mt-4): a flex flex-wrap justify-center gap-x-6 gap-y-2 row of links. Each link: text-sm font-mono text-accent hover:opacity-70 transition-opacity duration-200. Email as mailto, others as external links. This section is 3-4 lines at most — a bridge to the footer, not a standalone section. Apply .reveal animation.

Simple Form

contact-form-simple

Clean contact form with name, email, and message fields

Show prompt
Build the contact section with bg-bg py-24 md:py-32 px-6 md:px-12. Section label "CONTACT" as standard. Content: max-w-lg mx-auto. Heading: text-2xl font-heading font-bold text-text text-center. Subtext mt-2: text-sm text-text-muted text-center. Form below mt-8: flex flex-col gap-4. Each field: a <label> in text-xs font-mono uppercase tracking-[0.15em] text-text-muted mb-1, and an <input> or <textarea>. Input styling: w-full bg-bg-alt border border-border rounded-lg px-4 py-3 text-sm text-text font-body placeholder:text-text-muted/40 focus:outline-none focus:border-accent/50 transition-colors duration-200. Fields: Name (input type="text"), Email (input type="email"), Message (textarea rows="4" with resize-none). Submit button: mt-2 w-full bg-accent/10 border border-accent/30 text-accent font-mono text-sm uppercase tracking-widest py-3 rounded-lg hover:bg-accent/20 transition-colors duration-200 cursor-pointer. Note: form is presentational only — no backend. Below form mt-4: text-xs text-text-muted text-center with "Or email directly at" plus a mailto link in text-accent. Apply .reveal.

Social Grid

contact-social-grid

Grid of social/contact cards with platform names and links

Show prompt
Build the contact section with bg-bg py-24 md:py-32 px-6 md:px-12. Section label "CONTACT" as standard, centered. Content: max-w-3xl mx-auto. Heading: text-2xl md:text-3xl font-heading font-bold text-text text-center. Subtext mt-3: text-sm text-text-muted text-center. Grid below mt-10: grid grid-cols-2 md:grid-cols-3 gap-3. Each platform card: a <a> tag wrapping bg-bg-alt rounded-xl border border-border p-5 hover:border-accent/20 transition-all duration-300 hover:-translate-y-0.5 group block. Inside: platform name in text-sm font-semibold text-text group-hover:text-accent transition-colors. Handle/URL below in text-xs font-mono text-text-muted mt-1 truncate. A small arrow "→" in text-accent opacity-0 group-hover:opacity-100 transition-opacity mt-2 text-xs. Include cards for: Email (mailto:), LinkedIn, GitHub, and any other platforms from the spec. If fewer than 3, use 2-column grid. Apply .reveal with staggered delays.

effect25

Gradient Mesh Background

effect-gradient-mesh

Soft animated gradient blobs that slowly drift across the page

Show prompt
Add animated gradient mesh blobs to the page background. Create 2-3 absolutely positioned divs inside a fixed wrapper: position fixed, inset 0, pointer-events none, z-index -1. Each blob: position absolute, border-radius 50%, filter blur(80px). Blob 1: w-[500px] h-[500px] bg-accent at 8% opacity, top-0 right-0. Blob 2: w-[400px] h-[400px] bg-accent at 5% opacity, bottom-1/4 left-0. Blob 3: w-[300px] h-[300px] bg-accent at 6% opacity, top-1/2 right-1/4. Animate with @keyframes meshFloat { 0%,100% { transform: translate(0, 0) scale(1); } 33% { transform: translate(30px, -30px) scale(1.05); } 66% { transform: translate(-20px, 20px) scale(0.95); } } with different durations (20s, 25s, 30s), ease-in-out, infinite. Add will-change: transform for performance. The blobs adapt to whatever accent color the Architect picks.

Dot Grid Pattern

effect-dot-grid

Subtle repeating dot grid pattern on the page background

Show prompt
Add a subtle dot grid to the page background. On the <body>, set background-image: radial-gradient(circle, the border color at 10% opacity 1px, transparent 1px); background-size: 24px 24px. This creates barely visible dots across the page. To add depth, layer a ::before pseudo-element on body: position fixed, inset 0, pointer-events none, z-index 0, background: linear-gradient(to bottom, bg at 0%, transparent at 30%, transparent at 70%, bg at 100%). This fades the dots at the top and bottom edges. Ensure all page content has position relative z-index 1 or higher. The dots add a technical, precise texture without distracting from content. Works on both light and dark themes.

Film Grain Texture

effect-grain-texture

Subtle CSS noise overlay for analog warmth and depth

Show prompt
Add a subtle film grain overlay to the page. Create a ::after pseudo-element on <body>: position fixed, inset 0, z-index 9999, pointer-events none, opacity 0.03 (barely perceptible). Use an SVG noise filter as background: background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='1'/%3E%3C/svg%3E"); background-repeat: repeat; background-size: 128px 128px. The grain should be barely visible — it adds analog warmth to flat digital designs. If someone notices it consciously, it's too strong. Works especially well on dark themes.

Aurora Glow

effect-aurora-glow

Slow-moving aurora borealis color bands behind the hero

Show prompt
Add an aurora effect behind the hero section. On the hero container, add a ::before pseudo-element: position absolute, inset 0, z-index 0, overflow hidden. Background: linear-gradient(135deg, transparent 20%, accent at 5% opacity 30%, transparent 40%, accent at 8% opacity 55%, transparent 70%, accent at 3% opacity 85%, transparent). Background-size: 200% 200%. Animate: @keyframes aurora { 0% { background-position: 0% 50%; opacity: 0.5; } 25% { background-position: 50% 0%; opacity: 0.7; } 50% { background-position: 100% 50%; opacity: 0.5; } 75% { background-position: 50% 100%; opacity: 0.8; } 100% { background-position: 0% 50%; opacity: 0.5; } } duration 12s ease-in-out infinite. Add filter: blur(40px) to soften bands. Ensure hero content has position relative z-10. The aurora should be dreamy and atmospheric, not an in-your-face gradient.

Floating Geometric Shapes

effect-geometric-shapes

Abstract shapes floating in the background with slow animation

Show prompt
Add decorative floating geometric shapes. Create a fixed wrapper: position fixed, inset 0, z-index -1, pointer-events none, overflow hidden. Place 4-5 shapes: (1) circle w-20 h-20 rounded-full border border-accent/10 at top-[15%] right-[10%]. (2) square w-16 h-16 border border-accent/8 rotate-45 at top-[40%] left-[5%]. (3) larger circle w-32 h-32 rounded-full bg-accent/3 at bottom-[20%] right-[15%]. (4) small dot w-3 h-3 rounded-full bg-accent/20 at top-[60%] left-[20%]. (5) rectangle w-24 h-12 border border-accent/6 rotate-12 at bottom-[40%] left-[60%]. Each animates with @keyframes shapeFloat { 0%,100% { transform: translateY(0) rotate(var(--r)); } 50% { transform: translateY(-20px) rotate(calc(var(--r) + 5deg)); } } at different durations (15s-30s). Set custom --r rotation per shape via inline style. On mobile, show only 2-3 shapes. Shapes are barely visible — depth and interest without distraction.

Spotlight Follow

effect-spotlight-follow

A soft radial gradient that follows the mouse cursor

Show prompt
Add a cursor-following spotlight. Create a div: position fixed, inset 0, z-index -1, pointer-events none. Inside, a spotlight element: position absolute, w-[600px] h-[600px], background: radial-gradient(circle, accent at 6% opacity at center, transparent at 70%), border-radius 50%, transform translate(-50%, -50%), transition: left 0.3s ease-out, top 0.3s ease-out (slight lag for smooth trailing). JavaScript: document.addEventListener('mousemove', (e) => { spotlight.style.left = e.clientX + 'px'; spotlight.style.top = e.clientY + 'px'; }). On mobile/touch, position spotlight statically at center of hero section or at 50% 30% of viewport. Add will-change: left, top for performance. The effect should feel like ambient light following attention — subtle and elegant.

Scroll Progress Bar

effect-scroll-progress

A thin progress bar at the top showing scroll position

Show prompt
Add a scroll progress indicator. Create a div: position fixed, top 0, left 0, h-[2px] bg-accent z-[9999], width 0%, will-change width. No transition on width — it should update instantly for responsive feel. JavaScript: window.addEventListener('scroll', () => { const scrolled = window.scrollY; const total = document.documentElement.scrollHeight - window.innerHeight; const pct = (scrolled / total) * 100; progressBar.style.width = pct + '%'; }, { passive: true }). This replaces or layers on top of the static 3px accent bar. If the design has an accent bar, make the progress bar 2px and sit directly on top (same position, higher z-index). Gives users a sense of position on the page — especially useful for long portfolios.

Decorative Section Dividers

effect-section-dividers

Stylish visual dividers between each major section

Show prompt
Add decorative dividers between each major section. Insert a visual divider element between section tags (as a sibling, not inside sections). Choose ONE style and apply consistently: OPTION A — centered accent line: div w-12 h-[1.5px] bg-accent/30 mx-auto. OPTION B — triple dots: div flex justify-center gap-2, three spans each w-1.5 h-1.5 rounded-full bg-accent/30. OPTION C — fade gradient: div h-px w-full max-w-xs mx-auto, background linear-gradient(90deg, transparent, accent at 20% opacity, transparent). Place dividers in the padding gap between sections. These small details elevate the design from clean to polished. Apply the same divider between every section pair for consistency.

Gradient Text Highlights

effect-text-gradient

Gradient color applied to key headings throughout the site

Show prompt
Apply gradient text to key headings. For the hero name (primary): background: linear-gradient(135deg, text color, accent color) or use spec's text_gradient. Apply: -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text. For the contact section heading: use the same gradient to create bookend symmetry with the hero. Do NOT apply gradient text to body copy, labels, navigation, or any small text — reserve for 2-3 key moments only. If the accent is warm (gold, coral), the gradient feels luxurious. If cool (sage, lavender), it feels ethereal. The effect adapts to whatever palette the Architect chose. Add a fallback: for browsers that don't support background-clip text, ensure the heading still displays in the text color.

Hover Glow Effects

effect-hover-glow

Cards and interactive elements glow with accent color on hover

Show prompt
Add hover glow to all interactive card elements. Create a CSS utility: .hover-glow { transition: box-shadow 0.4s ease-out, border-color 0.3s ease-out, transform 0.3s ease-out; } .hover-glow:hover { box-shadow: 0 0 30px -8px rgba(accent, 0.12); border-color: rgba(accent, 0.25); transform: translateY(-1px); }. Apply this class to all cards across experience, projects, skills, education, and contact sections. For CTA buttons/links in hero and contact, use a stronger glow on hover: box-shadow 0 0 40px -8px rgba(accent, 0.2). The glow should feel like elements are slightly luminous — not neon or harsh. The translateY(-1px) creates a subtle "lifting toward light" effect that pairs well with the glow.

Gradient Mesh Shader

shader-gradient-mesh

Animated WebGL gradient mesh with organic flowing blobs behind the hero

Show prompt
A real WebGL shader renders an animated gradient mesh background behind the hero. Organic color blobs slowly morph and drift using simplex noise, colored with the accent palette at low opacity. The effect is subtle and atmospheric — it adds depth without competing with the text.

Aurora Shader

shader-aurora

Animated WebGL aurora borealis color bands behind the hero

Show prompt
A real WebGL shader renders flowing aurora borealis bands behind the hero. Horizontal color waves drift slowly using sine functions, with the accent color at low opacity. The effect is dreamy and atmospheric, concentrated in the middle of the viewport.

Noise Waves Shader

shader-noise-waves

Animated WebGL layered noise waves behind the hero

Show prompt
A real WebGL shader renders layered noise waves. Multiple octaves of value noise create a gentle undulating field, with accent colors at low opacity.

Plasma Shader

shader-plasma

Classic animated plasma interference patterns

Show prompt
A real WebGL shader renders classic plasma interference patterns. Overlapping sine waves create organic, shifting color fields using the accent palette.

Fluid Distortion Shader

shader-fluid

Organic flowing fluid-like radial motion

Show prompt
A real WebGL shader renders organic fluid-like distortion. Radial and angular sine functions create flowing, liquid motion with accent colors.

Ripple Shader

shader-ripple

Concentric ripples emanating from center

Show prompt
A real WebGL shader renders concentric ripples from the center of the viewport. Layered sine waves with distance-based fade create a calm water-drop effect using accent colors.

Iridescent Oil Shader

shader-iridescent-oil

Oil-on-water rainbow film shimmer with thin-film interference

Show prompt
A real WebGL shader renders an oil-on-water iridescent film. Use thin-film interference math (angle + thickness noise) to produce shifting rainbow bands — pinks, teals, violets — that drift slowly. Blend the accent palette over the iridescence so it stays on-brand rather than a pure rainbow. Low-opacity, high polish.

Liquid Chrome Shader

shader-liquid-chrome

Flowing metallic reflection with soft specular highlights

Show prompt
A real WebGL shader renders liquid-chrome metal flow. Use domain-warped noise to generate slow flowing peaks, then map to a 1D grayscale gradient with bright specular bands to fake polished metal reflections. Tint with the accent color at low opacity. Reads as futuristic and expensive.

Vaporwave Grid Shader

shader-vaporwave-grid

Synthwave perspective grid receding to a horizon sun

Show prompt
A real WebGL shader renders a vaporwave synthwave scene. Bottom half: perspective grid receding to a horizon line, grid lines in accent color with slight glow. Top half: large gradient sun (accent → accent-light) with horizontal scan-line bands cutting through it. Subtle scroll of the grid toward the viewer. Use sparingly — it's a strong aesthetic statement.

Cosmic Dust Shader

shader-cosmic-dust

Drifting nebula particles with parallax starfield

Show prompt
A real WebGL shader renders cosmic nebula dust. Layered fbm noise creates soft cloud shapes tinted with the accent palette at low opacity. Add a secondary pass of tiny bright pixels (stars) drifting at a different rate for parallax. The overall feel is weightless and deep-space atmospheric.

Caustics Shader

shader-caustics

Underwater light caustics rippling across the surface

Show prompt
A real WebGL shader renders underwater caustic light patterns — the bright mesh-like ripples you see at the bottom of a pool. Use Voronoi or warped noise with sharp highlights, slow drift. Tint the bright lines with accent color, keep the dark areas transparent. Calm, organic, premium.

Holographic Foil Shader

shader-holographic-foil

Iridescent foil shimmer that shifts with scroll or mouse position

Show prompt
A real WebGL shader renders a holographic foil effect. Diagonal iridescent bands (pink, cyan, gold) shift based on mouse position or scroll progress, simulating how real foil catches light at different angles. Blend with accent palette. Add subtle noise for a tactile paper-stock texture. Luxurious and playful.

Molten Flow Shader

shader-molten-flow

Slow lava-like flowing heat with glowing cracks

Show prompt
A real WebGL shader renders slow molten flow. Domain-warped noise generates viscous-looking surface motion, with bright thin cracks (using high-threshold noise) glowing in the accent color over a darker base. Evokes forging, heat, and energy without being literal fire. Works best with warm palettes.

Godrays Shader

shader-godrays

Volumetric light beams angling across the viewport

Show prompt
A real WebGL shader renders volumetric godrays — diagonal light beams spreading from an off-screen source in the upper corner. Use radial noise + angle masking for soft beams, additive blending, accent-light color tint. Slow subtle drift. Evokes cathedral light or morning sun through fog. Cinematic.

Silk Waves Shader

shader-silk-waves

Flowing silk-like fabric ribbons with soft shading

Show prompt
A real WebGL shader renders silk fabric waves. Multiple overlapping sine + noise bands create flowing ribbon shapes with soft highlights and shadows (fake fabric shading). Tint with the accent gradient. The motion is slow, elegant, fashion-editorial. Feels tactile and luxurious.