2 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].
# Pixelshell — Retro Desktop OS Portfolio Template with Draggable Windows and Start Menu 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/pixelshell 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.
Join Pro early access →DESIGN.md
The design system on its own — colors, type, spacing and motion. Apply this look to a project you already have.
---
name: "Pixelshell"
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."
---
# Pixelshell — 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/pixelshell · CC BY 4.0 · Request removal: https://vibefather.ai/takedown