Each prompt should be **customized to the specific project** — mentioning the project's actual purpose, relevant visual elements (chatbot, dashboard, scanner, builder, etc.), and choosing appropriate neon color combinations.
Resources
8Install
npx skillscat add amirbiron/portfolio Install via the SkillsCat registry.
Skill: Terminal Aesthetic Portfolio Builder
Build a complete developer portfolio with a 1980s retro-futuristic terminal aesthetic — dark background, matrix green, neon glow, scanlines, CRT effects. React + TypeScript + Tailwind CSS + Vite.
Overview
This skill generates a full-featured developer portfolio site with:
- Terminal-styled UI with scanlines and CRT glow effects
- Responsive sections: Hero, About, Projects, Testimonials, Skills, Blog, Contact, Footer
- Individual project detail pages with screenshot gallery, features/challenges, and Mermaid architecture diagrams
- Testimonial detail pages with full-size screenshot in lightbox
- Blog pages with markdown rendering
- Scroll-triggered animations (Framer Motion)
- Contact form (user connects their own backend service)
- All content is placeholder — the user fills in their own details
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | React 19, TypeScript |
| Styling | Tailwind CSS 4, JetBrains Mono font |
| UI Components | shadcn/ui (Button, Card, Input, Textarea) + Radix UI |
| Routing | wouter |
| Animations | Framer Motion |
| Icons | Lucide React |
| Diagrams | Mermaid |
| Markdown | Streamdown |
| Toasts | Sonner |
| Build | Vite |
| Server | Express (static file serving) |
Package Setup
pnpm create vite my-portfolio --template react-ts
cd my-portfolio
pnpm add react react-dom wouter framer-motion lucide-react sonner mermaid streamdown express
pnpm add tailwind-merge clsx class-variance-authority
pnpm add -D tailwindcss @tailwindcss/vite @tailwindcss/typography tw-animate-cssInstall shadcn/ui components:
# Button, Card, Input, Textarea — the core components used
npx shadcn@latest init
npx shadcn@latest add button card input textareaDesign System
Color Palette
The entire design is built on a dark terminal aesthetic with these key colors:
| Role | Color | CSS Variable | Usage |
|---|---|---|---|
| Primary | Matrix Green #00ff41 |
--primary: oklch(0.85 0.25 145) |
Headings, links, primary buttons, progress bars |
| Accent | Cyan Glow #00f5ff |
--accent: oklch(0.75 0.25 195) |
Secondary headings, labels, accent elements |
| Destructive | Neon Pink #ff006e |
--destructive: oklch(0.65 0.25 350) |
Blog section, warnings, third color accent |
| Background | Deep Black #0d0208 |
--background: oklch(0.08 0.01 330) |
Page background |
| Card | Dark Gray | --card: oklch(0.12 0.01 330) |
Card/terminal window backgrounds |
| Foreground | Light Gray | --foreground: oklch(0.95 0.05 145) |
Body text |
| Border | Green 20% | --border: oklch(0.85 0.25 145 / 20%) |
All borders |
Typography
- Font:
JetBrains Mono(monospace only — no sans-serif anywhere) - Border radius:
0everywhere (sharp corners, no rounding)
Key CSS Effects
/* Scanlines overlay on body::before */
body::before {
content: '';
position: fixed;
top: 0; left: 0;
width: 100%; height: 100%;
background: repeating-linear-gradient(
0deg,
rgba(0, 0, 0, 0.15),
rgba(0, 0, 0, 0.15) 1px,
transparent 1px,
transparent 2px
);
pointer-events: none;
z-index: 9999;
opacity: 0.05;
animation: scanlines 8s linear infinite;
}
/* Neon glow text effect */
.neon-glow {
text-shadow: 0 0 10px currentColor, 0 0 20px currentColor, 0 0 30px currentColor;
}
/* Neon border box-shadow */
.neon-border {
box-shadow: 0 0 10px currentColor, 0 0 20px currentColor, inset 0 0 10px currentColor;
}
/* Cursor blink animation on headings */
.cursor-blink::after {
content: '▋';
animation: blink 1s infinite;
margin-left: 2px;
}Terminal Window Component
Every section uses a .terminal-window wrapper:
┌─ terminal-header ──────────────────────────┐
│ [●] [●] [●] ~/file-name.ext │
├────────────────────────────────────────────┤
│ │
│ Content goes here │
│ │
└────────────────────────────────────────────┘.terminal-window {
background: var(--card);
border: 2px solid var(--border);
}
.terminal-header {
background: rgba(0, 255, 65, 0.1);
border-bottom: 1px solid var(--border);
padding: 0.5rem 1rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.terminal-dot {
width: 12px;
height: 12px;
border-radius: 0; /* square, not round — matches terminal aesthetic */
border: 1px solid currentColor;
}Terminal header always has 3 dots:
<div className="terminal-header">
<div className="terminal-dot border-[#00ff41]" /> {/* green */}
<div className="terminal-dot border-[#00f5ff]" /> {/* cyan */}
<div className="terminal-dot border-[#ff006e]" /> {/* pink */}
<span className="text-sm text-muted-foreground ml-2">~/filename</span>
</div>Page Structure & Sections
Routing
// App.tsx — wouter router
<Router>
<Route path="/" component={Home} />
<Route path="/project/:slug" component={ProjectPage} />
<Route path="/testimonial/:slug" component={TestimonialPage} />
<Route path="/blog/:slug" component={BlogPost} />
<Route component={NotFound} />
</Router>FadeInSection Helper
All sections use this scroll-triggered animation wrapper:
function FadeInSection({ children, className = "", delay = 0 }) {
return (
<motion.div
initial={{ opacity: 0, y: 40 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: "-80px" }}
transition={{ duration: 0.6, delay, ease: "easeOut" }}
className={className}
>
{children}
</motion.div>
);
}1. Hero Section
Full-screen terminal window with background image, overlay, animated entrance.
Structure:
- Background image with
backgroundSize: cover+ dark overlay (bg-background/80) - Terminal window centered (
max-w-4xl mx-auto) - Command prompt:
$ whoami - Main title with
neon-glow+cursor-blinkclasses - Tagline / subtitle text
- Tech badges (colored border + background at 20% opacity)
- CTA buttons (GitHub, Social, Contact)
Key patterns:
- Hero entrance:
motion.divwithinitial={{ opacity: 0, scale: 0.95 }}→animate={{ opacity: 1, scale: 1 }} - Tech badges use alternating colors:
primary,accent,destructive - CTA buttons: primary uses
neon-border, others usevariant="outline"with colored borders
Placeholder content:
Title: "YOUR TITLE HERE"
Subtitle: "Brief description of what you do"
Tech badges: ["Skill 1", "Skill 2", "Skill 3", "Skill 4"]
Buttons: [GitHub, Social Link, Contact Me]2. About Section
Terminal window with profile image and bio paragraphs.
Structure:
- Section heading: icon +
$ whoami --verbose(accent colored, neon-glow) - Terminal window with
~/about.mdheader - Profile image with green border + glow effect
- Terminal-style caption:
[System]: Rendering image... Success. - 3 bio paragraphs, each starting with
>in different colors (primary → accent → destructive)
Placeholder content:
Image: placeholder profile image
Paragraph 1 (green >): Career start and experience
Paragraph 2 (cyan >): What drives/motivates you
Paragraph 3 (pink >): Current specialization3. Projects Section
3-column grid of project cards in terminal style.
Structure:
- Section heading:
Code2icon +$ ls -la ./projects(primary colored) - Grid:
grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 - Each card is a
terminal-windowwith staggered fade-in (delay={idx * 0.1})
Project Card Structure:
┌─ Terminal Header (3 dots) ─────────────────┐
│ ┌─ Aspect 16:9 Image ───────────────────┐ │
│ │ (hover: scale-110 transition) │ │
│ └────────────────────────────────────────┘ │
│ Title (xl, bold, primary) │
│ Description (sm, foreground/80) │
│ [tech] [tags] [in] [muted] [style] │
│ [Details Button] [Demo Button] │
└────────────────────────────────────────────┘- Card hover:
hover:scale-105 transition-all duration-300 - Image hover:
group-hover:scale-110 transition-transform duration-500 - Details button: navigates to
/project/:slug - Demo button: opens external link
Project Data Model:
interface ProjectData {
slug: string;
title: string;
description: string; // short, for card
subtitle: string; // for detail page
fullDescription: string; // for detail page
tech: string[];
image: string; // card image URL or placeholder
screenshots: string[]; // for detail page gallery
mermaidDiagram: string; // Mermaid diagram syntax
demo: string; // demo URL
demoLabel?: string; // custom label (default: "Demo")
repo: string; // repo URL
repoLabel?: string; // custom label (default: "Code")
challenges: string[]; // technical challenges
features: string[]; // key features
}Placeholder: Generate 3-5 sample projects with placeholder data.
4. Testimonials Section
Client testimonials displayed as terminal-styled cards with links to full-page screenshot views.
Structure:
- Section heading:
MessageSquareQuoteicon +$ cat testimonials.log(primary colored, neon-glow) - Subtitle: "מה הלקוחות אומרים"
- Background:
bg-card/50 - Grid: responsive card layout
- Each card is a
terminal-windowwith staggered fade-in
Testimonial Card Structure:
┌─ Terminal Header (3 dots + fileName) ─────┐
│ dir="rtl" │
│ "Short quote text here" │
│ (accent-colored quotation marks) │
│ │
│ > [Client Type] | Project Name │
│ │
│ [Open_Attachment.exe] │
└────────────────────────────────────────────┘- Quote text uses inline
<p>wrapped in accent-colored quotation mark<span>s - Client info line starts with
>(terminal style), rendered intext-primary font-mono rolefield is conditionally rendered (hidden if empty string)- Button navigates to
/testimonial/:slug
Testimonial Data Model:
interface TestimonialData {
slug: string;
clientName: string; // e.g. "[לקוח עסקי] | מערכת ניהול משלוחים"
role: string; // empty string = hidden
shortQuote: string; // short quote for card display
screenshot: string; // path to screenshot image
fileName: string; // displayed in terminal header
}Important — RTL text:
- Use Unicode ellipsis
…(U+2026) instead of...in Hebrew text to avoid RTL rendering bugs where dots shift into adjacent characters.
Placeholder: Generate 2-3 sample testimonial entries with placeholder data.
5. Skills Matrix Section
2-column grid of skill categories with progress bars, over a background image.
Structure:
- Background image with
bg-background/90overlay - Section heading:
Cpuicon +$ cat skills.json(accent colored) - Grid:
grid-cols-1 md:grid-cols-2 gap-6 max-w-5xl mx-auto - Each skill is a
terminal-windowwith header showingcategory.skill
Skill Card Internals:
Category Name (primary) ................ 95% (accent, monospace)
[████████████████████████████░░] <- progress bar with neon-border
[Tag 1] [Tag 2] [Tag 3] [Tag 4] <- primary/10 bg, primary borderPlaceholder skills:
const skills = [
{ category: "Languages", items: ["Language 1", "Language 2", "Language 3"], level: 95 },
{ category: "Backend", items: ["Framework 1", "DB 1", "DB 2"], level: 90 },
{ category: "APIs & Integrations", items: ["API 1", "API 2"], level: 85 },
{ category: "Frontend", items: ["Tool 1", "Tool 2"], level: 80 },
{ category: "DevOps", items: ["Tool 1", "Tool 2", "Tool 3"], level: 85 },
];6. Blog Section
3-column grid of blog post cards.
Structure:
- Section heading:
GitBranchicon +$ git log --blog(destructive colored, neon-glow) - Grid:
grid-cols-1 md:grid-cols-3 gap-6 - Each card is a
terminal-windowthat navigates to/blog/:slugon click
Blog Card:
┌─ Terminal Header (3 dots) ─────────┐
│ Date (xs, accent, monospace) │
│ Title (lg, bold, primary) │
│ Excerpt (sm, foreground/80) │
└────────────────────────────────────┘Placeholder: Generate 3 sample blog post stubs.
7. Contact Section
Terminal-styled contact form.
Structure:
- Section heading:
Mailicon +$ ./contact.sh(primary colored) - Terminal window with
contact_form.tsxheader - Form fields with terminal-style labels:
- Email:
$ echo "your_email"→ Input field - Message:
$ cat message.txt→ Textarea (6 rows)
- Email:
- Submit button with
neon-border,Sendicon - Status messages in terminal style:
- Success:
[System]: Transmission complete. Message delivered to secure channel. - Error:
[System]: Transmission failed. Try again or contact directly.
- Success:
Important — Contact Form Backend:
The contact form UI is generated with placeholder submission logic. The user must connect it to their own backend service. Options include:
- EmailJS — client-side email sending (no backend needed)
- Formspree — form endpoint service
- Telegram Bot API — send to Telegram chat via server endpoint
- Custom API — any POST endpoint the user builds
The generated code includes a
handleContactSubmitfunction withfetch("/api/contact", ...)that the user should replace with their chosen service.
8. Footer
Simple footer with copyright and social links.
$ echo "© 2026 Your Name. Built with React + Tailwind"
[GitHub] [Social] [Email]Project Detail Page (/project/:slug)
Each project gets a detailed page with these sections:
- Header — "Back to Portfolio" button (in English) + Demo/Code buttons
- Hero — Title (neon-glow), subtitle, full description, tech tags
- Screenshots —
$ ls ./screenshotsheading, grid gallery (2/3/4 columns responsive), lightbox with keyboard navigation (Escape, Arrow keys) - Features & Challenges — 2-column grid of terminal windows:
- Left:
features.md— bulleted list with▸markers (primary color) - Right:
challenges.md— bulleted list with▸markers (accent color)
- Left:
- Architecture Diagram —
$ cat architecture.mmdheading, Mermaid diagram in terminal window with dark theme config:const mermaidConfig = { theme: "dark", themeVariables: { primaryColor: "#00ff41", primaryTextColor: "#e0e0e0", primaryBorderColor: "#00ff41", lineColor: "#00f5ff", secondaryColor: "#1a1a2e", background: "#0d0d1a", mainBkg: "#1a1a2e", nodeBorder: "#00ff41", clusterBkg: "#1a1a2e", clusterBorder: "#00f5ff", titleColor: "#00ff41", }, }; - Footer CTA — "Back to Portfolio" button (English) + Demo/Code buttons + "Next Project" suggestion card (cycles through projects list)
Testimonial Detail Page (/testimonial/:slug)
Each testimonial gets a full-page view showing the original recommendation screenshot.
Structure:
- Header — "Back to Portfolio" button
- Terminal window with
~/testimonials/{fileName}header - System messages:
[System]: Fetching {fileName}... Success.[System]: Rendering attachment... Done.
- Screenshot — Full-width image, clickable to open lightbox
- Caption —
[Source]: {clientName}(with— {role}appended if role is non-empty) - Footer — "Back to Portfolio" button
Lightbox:
- AnimatePresence with scale + fade animation
- Click outside image to close
- Escape key closes the lightbox (keydown listener, same pattern as ProjectPage)
- Image uses
max-h-[90vh] max-w-[90vw] object-contain
Scroll behavior: useEffect with window.scrollTo(0, 0) on slug change.
Lazy loaded via React.lazy + Suspense in App.tsx.
Important: Upload testimonial screenshots to public/testimonials/ (e.g., feedback-routine-app.png, feedback-delivery-system.png).
Blog Post Page (/blog/:slug)
- Terminal-styled article container
- Header with "Back to Portfolio" button and date/title
- Markdown content rendered via Streamdown (note: do NOT duplicate the title as
# Titlein the markdown content — the title is already rendered in the h1 tag) - Custom prose styling for dark theme (code blocks, blockquotes, links, tables with RTL alignment)
- Streamdown code blocks use
div[data-code-block-container](notpre) — setdirection: ltron the container to fix RTL layout. Language badge capitalized viatext-transform: capitalizeon[data-code-block-header] span - Important — Markdown rendering fixes: The component applies two regex replacements before passing content to Streamdown:
content.replace(/`\n(?!\n)/g, '`\n\n')— adds blank line after code block closingscontent.replace(/([^\n])\n---/g, '$1\n\n---')— adds blank line before---separators to prevent setext-style h2 headings (text +---without blank line = h2 in Markdown)
- Do NOT use untagged code blocks for ASCII art diagrams — they render with nearly invisible text on the dark theme
- Footer with:
- Suggestions to read other blog posts (grid of terminal-styled cards)
- "Back to Portfolio" button
Responsive Design
| Breakpoint | Layout |
|---|---|
Mobile (<768px) |
Single column, full-width cards |
Tablet (md:) |
2-column projects, 2-column skills, 3-column blog |
Desktop (lg:) |
3-column projects, 2-column skills, 3-column blog |
Container: max-width: 1280px on lg:, with padding px-4 sm:px-6 lg:px-8.
Animation Summary
| Element | Animation | Trigger |
|---|---|---|
| Hero terminal | Scale 0.95→1 + fade | Page load |
| All sections | Fade-in + slide up (y: 40→0) | Scroll into view (once) |
| Grid items | Staggered delay (idx × 0.1s) | Scroll into view (once) |
| Project cards | Scale 1→1.05 | Hover |
| Card images | Scale 1→1.1 | Hover (group) |
| Lightbox | Scale 0.9→1 + fade | Open/close |
| Scanlines | TranslateY 0→10px | Continuous (8s loop) |
Instructions for the User
Step 1: Generate the Portfolio
When using this skill, Claude will generate the full portfolio codebase with placeholder content. All text content should be replaced with the user's real information:
- Name, title, tagline
- About bio paragraphs
- Project details (title, description, tech stack, features, challenges, Mermaid diagrams)
- Blog posts
- Skill categories and items
- Social links (GitHub, Telegram/Twitter/LinkedIn, email)
- Contact form backend integration
Step 2: Generate Images with Nano Banana
After the portfolio code is generated, Claude must output the following image generation prompts for the user to run in Nano Banana (or any AI image generator).
The user should save each generated image and replace the corresponding placeholder in the codebase.
Image Prompt Template
All prompts follow this consistent style pattern:
- Style: "Terminal aesthetic cyberpunk style" / "Cyberpunk retro-futuristic"
- Background: Always dark
- Colors: Neon green (#00ff41), neon pink (#ff006e), cyan (#00f5ff), magenta, purple
- Effects: "Scanlines effect", "glow effects", "glowing elements", "digital artifacts"
- Mood: "80s cyberpunk aesthetic", "retro-futuristic"
- Quality: "Professional but artistic" / "Professional tech visualization style"
Required Images
1. Hero Background Image
- File:
public/hero-bg.png - Used in: Hero section
backgroundImage - Prompt:
Cyberpunk retro-futuristic terminal background with matrix-style green code rain, neon pink and cyan circuit board patterns, dark atmospheric tech aesthetic. Include glowing scanlines effect, digital artifacts, and abstract geometric shapes. 80s hacker aesthetic with neon glow. High contrast dark background with bright neon accents. Professional tech visualization style.2. Profile Image
- File:
public/profile.png - Used in: About section
- Note: This should be a real photo or a stylized avatar. If using AI generation:
Professional developer portrait sketch, blue pen style illustration on white background, head and shoulders, friendly expression. Clean minimalist style.3. Skills Section Background
- File:
public/skills-bg.png - Used in: Skills Matrix section
backgroundImage - Prompt:
Abstract cyberpunk data visualization for developer skills. Dark background with flowing neon lines (green, pink, cyan, purple) representing different skill categories. Show interconnected nodes, skill level indicators, technical symbols. Include matrix-style code elements, glowing particles, circuit patterns. 80s cyberpunk aesthetic with retro-futuristic feel. Professional abstract tech art style.4-N. Project Card Images (one per project)
- File:
public/projects/project-name.png - Used in: Project cards on home page
- Prompt template:
Terminal aesthetic cyberpunk style image for '[PROJECT NAME]' project. Dark background with neon [CHOOSE: green/blue/pink/cyan/magenta] colors. Show [DESCRIBE RELEVANT VISUAL ELEMENTS: e.g., chatbot interface, data visualization, code editor, API connections, dashboard panels]. Include [RELEVANT UI ELEMENTS: e.g., conversation bubbles, charts, terminal windows, data flow arrows]. Retro-futuristic terminal interface with glowing borders. 80s cyberpunk aesthetic with digital artifacts and neon glow effects. Professional tech visualization style.Examples of project image prompts:
For a chatbot project:
Terminal aesthetic cyberpunk style image for 'AI Chatbot' project. Dark background with neon green matrix-style code and glowing elements. Show a stylized chatbot interface with conversation bubbles, calendar/booking system elements, and a sleek admin dashboard in the background. Neon pink and cyan accents. Retro-futuristic 80s cyberpunk aesthetic with scanlines effect. Professional but artistic.For a data/scraping project:
Terminal aesthetic cyberpunk style image for 'Data Scanner' project. Dark background with neon blue and magenta colors. Show social media posts flowing through a digital scanner/filter system with data analysis visualization. Include dashboard panels with charts and metrics. Retro-futuristic terminal interface with glowing borders. 80s cyberpunk aesthetic with digital artifacts and neon glow effects. Professional tech visualization style.For a code/developer tools project:
Cyberpunk terminal aesthetic image showing code repository concept. Dark background with neon green code snippets, glowing terminal windows, GitHub-style interface elements. Include database symbols, cloud storage icons, neon pink and cyan accents. Show interconnected nodes representing data flow. 80s cyberpunk retro-futuristic style with scanlines and glow effects. Professional tech visualization.For a learning/educational project:
Cyberpunk terminal aesthetic image for interactive learning platform. Dark background with neon blue and magenta colors. Show educational content elements floating/glowing, interactive lesson interface, progress indicators. Include stylized interface, learning visualization, neon-bordered panels. 80s retro-futuristic cyberpunk style with scanlines. Professional tech visualization with artistic flair.For a modular/builder tool:
Cyberpunk retro-futuristic image for modular builder concept. Dark background with neon colors (green, pink, cyan, purple). Show interconnected modular blocks/components assembling together, creation workflow visualization. Include building blocks, neon borders and glowing elements. 80s cyberpunk aesthetic with digital artifacts. Professional but artistic tech visualization style.Prompt Generation Rules for Claude
When generating the portfolio, Claude should:
- Ask the user for their projects, skills, and bio — or use provided info
- Generate the full codebase with placeholder images (use
/placeholder-hero.png,/placeholder-skills.png,/placeholder-project-N.png) - At the end of output, display a clearly formatted "Step 2: Image Generation" card:
═══════════════════════════════════════════════════════
📸 STEP 2: GENERATE YOUR IMAGES (Nano Banana)
═══════════════════════════════════════════════════════
Generate these images and save them to the listed paths:
1. HERO BACKGROUND → public/hero-bg.png
Prompt: "Cyberpunk retro-futuristic terminal background with..."
2. SKILLS BACKGROUND → public/skills-bg.png
Prompt: "Abstract cyberpunk data visualization for..."
3. PROJECT: [Name] → public/projects/project-slug.png
Prompt: "Terminal aesthetic cyberpunk style image for '[Name]'..."
4. PROJECT: [Name] → public/projects/project-slug.png
Prompt: "Terminal aesthetic cyberpunk style image for '[Name]'..."
[... one entry per project ...]
N. PROFILE IMAGE → public/profile.png
Prompt: "Professional developer portrait sketch..." (or use your own photo)
═══════════════════════════════════════════════════════
After generating, replace each placeholder path in the code.
Search for "placeholder-" in the codebase to find all spots.
═══════════════════════════════════════════════════════Each prompt should be customized to the specific project — mentioning the project's actual purpose, relevant visual elements (chatbot, dashboard, scanner, builder, etc.), and choosing appropriate neon color combinations.