3 cases built from this template
Same prompt, different [VARIABLES]. Click one to preview it above.About this template
Pixelshell is a portfolio template built as a fictional desktop operating system from the late nineties. It is made for motion designers who want visitors to play with the site before they read it. A short typed boot log gives way to a teal-gray desktop with a column of pixel icons, a taskbar with a live clock, and cream windows with chunky warm-gray bevels. You drag windows by their title bars. Clicking a window brings it to the front and dims the others. Windows minimize to the taskbar and maximize on a double-click. The start menu has About, Work, Showreel, Contact, a wallpaper switcher and a shut-down item that ends on a goodbye screen.
The Work window is a file browser with six projects. Each one opens in its own window with a looping preview drawn in CSS, SVG or canvas: sine-wave title cards, orbiting shapes, bouncing type, easing curves side by side, a rotating grid and equalizer bars. None of them is a video file, so the build stays small and you can restyle every loop in code. A showreel window plays all six in turn, and you can empty the Scraps bin after a small confirmation dialog.
The template suits motion designers, animators, illustrators and creative developers who want a personal site people remember that still reads quickly. The palette is muted teal and cream with one tangerine accent. Titles use Pixelify Sans, tiny labels use Silkscreen and body text uses IBM Plex Mono. It uses no real operating system's logos, palettes or icons.
To adapt it, change the brand, name, discipline, city and email, then rewrite the project list in the single content file. To swap a preview, replace one small component. On phones the desktop turns into a stacked list of accordion windows above a fixed taskbar. Visitors who prefer reduced motion skip the boot and see still frames.
The template prompt
The live demo was built from exactly this text — nothing added. The other cases only change the values of the [VARIABLES].
# Retro Desktop OS Portfolio Build this website exactly as described below. Replace the [VARIABLES] with your own values; keep everything else. ## Brief A single-page portfolio for [OWNER_NAME], a [DISCIPLINE] based in [CITY], presented as a fictional late-90s desktop operating system called "[BRAND] Shell". A short typed boot log leads into a teal-gray desktop with pixel icons, a bottom taskbar with a live clock and a start menu. Content lives in beveled windows (About, Work, Showreel, Contact, Scraps). You can drag, focus, minimize, maximize and close them. Each project in the Work file browser opens its own window with a looping preview drawn in CSS, SVG or canvas. On mobile the desktop becomes a stacked list of accordion windows above a fixed taskbar. The look is original: warm bevels, cream window bodies, muted teal-gray wallpaper and one tangerine accent. It uses no real OS branding, palette, icons or copy. - Audience: Studios, agencies and art directors hiring a freelance [DISCIPLINE]. They have a minute to spare and like to explore a site before they read it. - Goal: Make the visitor open at least one project window and see a loop play, then make it easy to reach [CONTACT_EMAIL] from the Contact window or the start menu. - Tone: Playful, nerdy and warm. Short lines with a deadpan humor about frames, curves and render times. The copy never imitates real operating system messages. ## Stack - Framework: Vite 5 + React 18 + TypeScript - Styling: Tailwind CSS 3.4 - Libraries: react (MIT), react-dom (MIT), motion (MIT), @fontsource/pixelify-sans (OFL-1.1), @fontsource/ibm-plex-mono (OFL-1.1), @fontsource/silkscreen (OFL-1.1), tailwindcss (MIT), postcss (MIT), autoprefixer (MIT), vite (MIT), @vitejs/plugin-react (MIT), typescript (Apache-2.0) - Build: `npm run build` → static files in `dist/`. No backend, no server code, no external APIs. - Setup: - Scaffold with npm create vite@latest (template react-ts), then install motion, the three @fontsource packages, and [email protected] postcss autoprefixer as dev dependencies; run npx tailwindcss init -p. - vite.config.ts: base './', build.outDir 'dist', build.sourcemap false. The defaults minify the build and keep src/ out of dist/. - main.tsx imports @fontsource/pixelify-sans/400.css, 500.css and 700.css, @fontsource/ibm-plex-mono/400.css, 500.css and 600.css, and @fontsource/silkscreen/400.css. - tailwind.config.js theme.extend.colors: desk #4F7E7A, deskDot #46716D, chrome #CBC5B7, hi #FFFCF3, lo #6E695F, edge #24211C, cream #F3ECDD, creamDim #E4DBC8, ink #1F1D1A, slate #24323A, stage #1A2228, idle #8F8A80, accent #FF6A2B, accentDeep #C94A16, plum #6E5F78, olive #6F7656. - tailwind.config.js theme.extend.fontFamily: display ['Pixelify Sans', 'monospace'], pixel ['Silkscreen', 'monospace'], mono ['IBM Plex Mono', 'monospace']. - In src/index.css @layer components, define .bevel-out (box-shadow: inset 1px 1px 0 #FFFCF3, inset -1px -1px 0 #24211C, inset 2px 2px 0 #E9E2D2, inset -2px -2px 0 #6E695F), .bevel-in (the same four shadows with light and dark swapped) and .win-shadow (box-shadow 4px 4px 0 rgba(20,24,22,.35)). - Put every keyframe (blink, caret, preview loops, scraps-out) in src/index.css. Respect @media (prefers-reduced-motion: reduce) by setting animation: none on all of them. - Keep all copy, the six projects, the boot log lines, the scraps and the dialog text in src/content.ts. If the variable values differ from the defaults, rewrite all of that copy for the new person and discipline, keeping the same lengths and structure. - Put the window manager in src/os/useWindowManager.ts: useReducer holding a map of windows {id, kind, open, minimized, maximized, x, y, w, h, z, prevRect} plus a zCounter. Actions are OPEN, CLOSE, FOCUS, MINIMIZE, TOGGLE_MAX, MOVE. FOCUS sets z = ++zCounter, and the focused window is the open, non-minimized one with the highest z. - Implement drag yourself in src/os/Window.tsx with pointer events on the title bar: pointerdown calls setPointerCapture and stores the offset, pointermove dispatches MOVE inside requestAnimationFrame, and pointerup releases. Clamp so at least 80px of the title bar stays inside the desktop and the title bar never goes above y=0. Disable drag while maximized and below 768px. - Each project preview is its own component in src/previews/ with props {playing: boolean}. Canvas previews use requestAnimationFrame, scale for devicePixelRatio, and cancel the frame loop when playing is false or the component unmounts. - Draw the pixel icons in src/os/icons.tsx as 16x16 string grids (one char per pixel mapped to a palette) rendered as SVG <rect>s with shape-rendering='crispEdges', displayed at 48x48. - public/favicon.svg is a 16x16 pixel loop mark: a tangerine ring with a cream play triangle. The document <title> is '[BRAND] Shell — [OWNER_NAME], [DISCIPLINE]'. - Write ASSETS.md at the project root. It states that all icons, previews and wallpaper are code-drawn and lists the three Fontsource fonts with OFL-1.1. ## Variables - [BRAND] — Studio / OS name (default: "Loopwork"). Shown as '[BRAND] Shell' in boot log, start menu banner and desktop watermark - [OWNER_NAME] — Your name (default: "Juno Halvorsen") - [DISCIPLINE] — Discipline (default: "Motion designer"). Drives About copy and project types - [CITY] — City (default: "Rotterdam") - [CONTACT_EMAIL] — Contact email (default: "[email protected]") - [CREDIT] — keep a small "Template by VibeFather" link to https://vibefather.ai/t/retro-desktop-os-portfolio in the footer (default: yes; delete this line to remove it) The copy under Pages & Sections is written for the default values. If your values differ, rewrite every headline, paragraph, label and image for them — same length, tone and structure. Layout, colors, type and motion stay as described. Keep all copy, image paths and links in one content file (for example `src/content.ts`), keyed by section, so the content can be swapped later without touching components.
Pro template. The design, sections, motion and assets parts of this prompt are for Pro members. The live demo and DESIGN.md stay free.
DESIGN.md
The design system on its own — colors, type, spacing and motion. Apply this look to a project you already have.
---
name: "Retro Desktop OS Portfolio"
colors:
desktop: "#4F7E7A"
desktop_dot: "#46716D"
chrome: "#CBC5B7"
highlight: "#FFFCF3"
shade: "#6E695F"
edge: "#24211C"
cream: "#F3ECDD"
cream_dim: "#E4DBC8"
ink: "#1F1D1A"
slate: "#24323A"
stage: "#1A2228"
idle: "#8F8A80"
tangerine: "#FF6A2B"
tangerine_deep: "#C94A16"
plum_tint: "#6E5F78"
olive_tint: "#6F7656"
typography:
display_window_titles_about_headline_goodbye_screen_start_menu_banner: { family: "Pixelify Sans", weights: [400, 500, 700] }
tiny_ui_labels_icon_labels_clock_tray_boot_progress_caption: { family: "Silkscreen", weights: [400] }
body_text_tables_fields_boot_log_buttons: { family: "IBM Plex Mono", weights: [400, 500, 600] }
spacing: "4px base grid. Window body padding is 16px, title bar height 26px, taskbar height 40px on desktop and 52px on mobile, icon cells 96x88px. Body text is 14px with line-height 1.55. Table rows are 28px. Buttons are 28px tall with 12px horizontal padding."
radius: "0px everywhere. Every edge is square. Depth comes only from the 2px bevels and the hard 4px offset window shadow, never from blur or rounded corners."
---
# Retro Desktop OS Portfolio — Design System
Apply this design system to an existing project. It describes the look and feel only; for the full site, use prompt.md.
## Colors
- **Desktop** `#4F7E7A` — Wallpaper base (default tint)
- **Desktop dot** `#46716D` — 2px pixel dots of the wallpaper pattern
- **Chrome** `#CBC5B7` — Window frames, taskbar, buttons, start menu (warm gray)
- **Highlight** `#FFFCF3` — Top/left bevel light edge
- **Shade** `#6E695F` — Inner bevel shadow
- **Edge** `#24211C` — Outer bevel dark edge, pixel icon outlines
- **Cream** `#F3ECDD` — Window bodies, text fields
- **Cream dim** `#E4DBC8` — Row hover, table header, status bars
- **Ink** `#1F1D1A` — Body text
- **Slate** `#24323A` — Active title bar, start menu banner, boot and goodbye backgrounds (with #141816)
- **Stage** `#1A2228` — Background of every looping preview
- **Idle** `#8F8A80` — Inactive title bars
- **Tangerine** `#FF6A2B` — The single hot accent: selection, primary buttons, close-hover, REC dot, progress blocks, preview highlights
- **Tangerine deep** `#C94A16` — Pressed state of accent buttons
- **Plum tint** `#6E5F78` — Alternate wallpaper tint 2
- **Olive tint** `#6F7656` — Alternate wallpaper tint 3
## Typography
- **Display: window titles, About headline, goodbye screen, start menu banner** — Pixelify Sans (OFL), weights 400/500/700. Self-host the font files.
- **Tiny UI labels: icon labels, clock, tray, boot progress caption** — Silkscreen (OFL), weights 400. Self-host the font files.
- **Body text, tables, fields, boot log, buttons** — IBM Plex Mono (OFL), weights 400/500/600. Self-host the font files.
## Spacing & shape
- Spacing: 4px base grid. Window body padding is 16px, title bar height 26px, taskbar height 40px on desktop and 52px on mobile, icon cells 96x88px. Body text is 14px with line-height 1.55. Table rows are 28px. Buttons are 28px tall with 12px horizontal padding.
- Radius: 0px everywhere. Every edge is square. Depth comes only from the 2px bevels and the hard 4px offset window shadow, never from blur or rounded corners.
## Motion
- Boot: log lines type in at 10ms per character with an 80ms pause between lines (about 2s total). Then a 24-block tangerine progress bar fills one block every 20ms, and the boot screen fades out over 250ms. A click or any key skips straight to the desktop. The boot plays once per session (sessionStorage key 'shell-booted') and never under reduced motion.
- Window open: Motion animates from opacity 0, scale 0.92 to opacity 1, scale 1 over 180ms with ease [0.2,0.8,0.2,1]. Close: to opacity 0, scale 0.96 over 120ms, using AnimatePresence. Minimize: to opacity 0, scale 0.6, y +60 over 160ms. Restore reverses it.
- Start menu: opens from the taskbar with opacity 0→1 and y 8→0 over 140ms using CSS steps(4) for a stepped, retro feel. Close is instant.
- Clock colon blinks with steps(1) once per second. The tray REC dot pulses between opacity 1 and 0.25 every 1.2s.
- Icon select: the label background turns tangerine instantly, with no easing. Button press switches .bevel-out to .bevel-in and shifts the label 1px right and 1px down.
- Scraps empty: rows collapse one after another, 40ms apart (height to 0, x +24px, opacity 0, 200ms each), then the empty state fades in.
- Project previews loop forever at 60fps while their window is open, not minimized and the tab is visible. They pause otherwise.
- prefers-reduced-motion: skip the boot, open and close windows instantly, show each preview as a static frame (t = 1.2s) with a Play button the visitor can press to opt in, and stop the clock blink and REC pulse.
## Imagery
No bitmaps. Everything is code-drawn: the wallpaper is a CSS background of 2px #46716D dots on an 8px grid over the desktop tint, the desktop icons are 16x16 pixel-art SVGs at 3x, the About portrait is a 12x12 pixel monogram tile generated from OWNER_NAME's initials (slate, cream and tangerine squares, no face), and all six project previews are animated SVG, CSS or canvas compositions on the #1A2228 stage. Icons use a limited palette of edge #24211C, cream #F3ECDD, chrome #CBC5B7, slate #24323A and tangerine #FF6A2B.
## Tone
Playful, nerdy and warm. Short lines with a deadpan humor about frames, curves and render times. The copy never imitates real operating system messages.
---
— Prompt by VibeFather · https://vibefather.ai/t/retro-desktop-os-portfolio · CC BY-NC 4.0 (non-commercial; commercial use needs a VibeFather Pro license) · Request removal: https://vibefather.ai/takedown
Make it yours
- A freelance animator: set BRAND to your studio name, DISCIPLINE to animator, and replace the six Work projects with your reel pieces so each opens its own looping preview window.
- A creative developer: keep the desktop metaphor, point CONTACT_EMAIL at your inbox, and rewrite the About window to describe the tools and effects you build with.
- An illustrator: swap the motion loops for drawn previews, set CITY and OWNER_NAME, and reword the start menu labels to match a sketchbook-style body of work.
- A small design studio: set BRAND to the studio, list team work in the Work browser, and use the Showreel window to play the whole portfolio in sequence.
Retro Desktop OS Portfolio: questions and answers
What can visitors actually do on the Retro Desktop OS Portfolio?
Visitors watch a short typed boot log, then land on a teal-gray desktop with pixel icons and a taskbar clock. They can drag windows by their title bars, click to bring one to the front, minimize windows to the taskbar, double-click to maximize, and open a start menu with About, Work, Showreel, Contact, a wallpaper switcher and a shut-down item that ends on a goodbye screen.
How do the project previews work if they aren't videos?
The Retro Desktop OS Portfolio draws all six project previews as loops in CSS, SVG or canvas: sine-wave title cards, orbiting shapes, bouncing type, easing curves side by side, a rotating grid and equalizer bars. No video files ship with the build, so the page stays light, and you can restyle any loop by editing the small component that draws it.
How do I change the name, role, city and email in the Retro Desktop OS Portfolio?
Set the five variables in the Retro Desktop OS Portfolio: BRAND becomes your studio or shell name, OWNER_NAME your name, DISCIPLINE your role, CITY your city and CONTACT_EMAIL your address. Then rewrite the copy in the single content file so the About text, project list, boot log lines and dialog text match the new person and discipline, keeping the same lengths and structure.
Can I use the Retro Desktop OS Portfolio for a client project?
The Retro Desktop OS Portfolio is a Pro template, so commercial and client use is covered by Pro membership. Pro shows the brief, stack and variables publicly and unlocks the full prompt plus the demo source code. The free prompts and every DESIGN.md on VibeFather are licensed for personal, non-commercial use only.
What should I change first after adding the Retro Desktop OS Portfolio?
Start with the five variables, then rewrite the content file: the six projects in the Work file browser, the boot log lines, the Scraps bin notes and the confirmation dialog text. After that, swap any preview loop you want to replace and adjust the palette in the Tailwind theme if the muted teal, cream and tangerine accent don't suit your work.
How do I build a retro desktop OS portfolio with AI?
Copy the full prompt (Pro) from this page or run npx vibefather add retro-desktop-os-portfolio, replace [CITY], [BRAND], [DISCIPLINE] and [OWNER_NAME] with your own content, and paste it into Claude Code, Codex, Cursor or another AI coding agent. The live demos were built from exactly that text.
Which AI model built the Retro Desktop OS Portfolio demo?
The Motion designer portfolio case was built by Claude Opus 5.5 in Cursor; the Illustrator portfolio case was built by Claude Opus 5.5 in Cursor; the Motion designer portfolio case was built by Gemini 4 Carbon in Cursor. Each build used the published prompt with nothing added, so you can compare the models side by side.
What tech stack and pages does the Retro Desktop OS Portfolio template use?
Retro Desktop OS Portfolio is a single-page site built with Tailwind CSS, Motion and React, with drag & physics, text animation and micro-interactions. The prompt fixes the stack so every AI tool builds the same kind of project, and the result runs as a static site you can host anywhere.
Is the Retro Desktop OS Portfolio template free to use?
Retro Desktop OS Portfolio is a Pro template: the brief, stack and variables are public, and the full prompt, the source code of the live demo and a commercial license come with VibeFather Pro. Its DESIGN.md is free for personal projects.
Does the Retro Desktop OS Portfolio template work on mobile?
Yes. Every Retro Desktop OS Portfolio build was tested on a phone-sized screen as well as desktop before it went live, checking layout, text size and touch targets. Open the live demo on your phone, or switch the preview on this page to mobile view, to check it yourself.