Skip to main content
vibld

Template

Signpost

The home screen of a collaborative presentation workspace shown to a brand-new member, with a one-step coach mark that points at the help launcher. It teaches one thing (where to get help) without blocking the rest of the tour or the starter documents behind it.

Workspace home with dimmed-overlay onboarding tip card · App screen: product tour · Small tools and apps · full-stack app (auth + DB)

A mock-up of the screen, drawn from its layout, palette and typefaces. A build follows the full prompt below.

Start from this screenRead the build prompt

Typefaces

The catalog's own faces. A screen composed into a template is drawn in that template's typefaces.

  • InterHeadings: Inter 700, 26px page heading, -0.015em
  • InterBody: Inter 400/500 16px body; 14px nav and tile titles (500); 13px meta

Patterns

  • full-page dim scrim with spotlighted anchor
  • dark illustrated tip card anchored to help button
  • single "Got it" primary dismiss
  • persistent left sidebar with collapsible folder groups
  • quick-start action tiles row
  • By me / By everyone segmented tabs
  • thumbnail card grid of recent documents
  • sidebar promo card with Set up CTA
  • bottom-right help launcher

States it is designed for

  • First-visit with tip visible
  • Tip dismissed (never re-shown unless reset in settings)
  • Empty recents with starter templates suggestion
  • Thumbnail loading shimmer and failed-thumbnail fallback
  • Locked (read-only) document badge
  • Offline banner; quick-start tiles disabled
  • Long document titles truncated with tooltip

Who it is for

  • New members joining a team workspace
  • Designers and marketers building decks
  • Workspace admins setting up shared libraries

Layout

  1. Left sidebar (~240px): account switcher + bell, upgrade link, search-and-commands field, Recents / Library / Links nav, Team and Private folder groups, promo card, invite/trash/install links at bottom
  2. Main: "Recents" H1, three quick-start tiles (new, start with AI, import), segmented tabs, 3-up grid of document thumbnails with title and meta
  3. Scrim over whole viewport except the help launcher bottom-right
  4. Dark tip card (~280px) above the launcher: illustration, one paragraph, "Got it" button, close x
  5. Tablet: sidebar collapses to icons; grid 2-up. Mobile: sidebar in drawer; tip becomes a bottom sheet

Palette

friendly, polished, creative, guided. A tidy studio where a single helpful note appears exactly where you need it.

  • main canvas#ffffff
  • sidebar background#f6f6f8
  • primary text#1c1c24
  • meta text, descriptions#686874
  • links, upgrade, primary button#5b3fd6
  • coach-mark card background#2a2c3a
  • text on coach-mark#f4f4f8
  • overlay (rgba 0,0,0,.5) (decorative)#7f7f7f
  • tile outlines (decorative)#e4e4ea
  • search field outline#8a8a96

Every checked pair, measured again

SampleWhereRatioNeeds
Aabody text16.92:14.5:1
Aamuted meta text5.50:14.5:1
Aanav text on sidebar15.68:14.5:1
Aaaccent link on sidebar6.22:14.5:1
Aabutton label on accent6.72:14.5:1
Aatip text on dark card12.60:14.5:1
search input border3.16:13:1
focus ring on dark card12.60:13:1

As vibld’s tokens

The palette on the fifteen colour tokens vibld styles a project with, each text colour on the fill it is read on. Marked tokens are solved from the palette, because no swatch held that role at 4.5:1.

  • background
  • card
  • muted
  • primary
  • secondary
  • accent
  • destructive *

Type scale

Display
Inter 700, 26px page heading, -0.015em
Body
Inter 400/500 16px body; 14px nav and tile titles (500); 13px meta

Similar to the observed geometric-humanist sans. Tip copy 15px/1.55 on dark for easy reading; button labels 14px 600.

Spacing and imagery

Comfortable: 8px base, 24px main gutter, 20px card gap; 8px radius on tiles and buttons, 12px on tip card and thumbnails; tip card shadow 0 12px 32px rgba(0,0,0,.35).

Colourful 3D-style illustration in the tip card (generic person juggling charts); thumbnails are bold gradient slide covers with large type; outline icons in nav.

Components

  • Account switcher with avatar
  • Search-and-commands field with shortcut hint
  • Collapsible folder groups with "Create folder"
  • Quick-start tile (icon, title, subtitle)
  • Segmented tabs
  • Document card (thumbnail, lock badge, title, location link, updated time)
  • Sidebar promo card
  • Scrim + spotlight cut-out
  • Coach-mark card with arrow, illustration, body, primary and close
  • Help launcher button

Interactions

  • Scrim fades in 200ms after first load; spotlight ring pulses once around the launcher
  • Got it / close / Esc dismiss and persist dismissal per user
  • Clicking the scrim does nothing (prevents accidental dismissal) but focus stays trapped in the card
  • Card hover lifts thumbnail 2px
  • Search field opens a command palette on click or Cmd/Ctrl+K

Data

  • User{id, name, avatar_url, tour_state jsonb}
  • Workspace{id, name, plan (free|pro)}
  • Folder{id, workspace_id, name, scope (team|private)}
  • Document{id, folder_id, title, thumbnail_url, locked bool, owner_id, updated_at}
  • TourStep{id, key, anchor_selector, order}

Guardrails

Experience

  • Show one coach mark at a time and never on top of a modal
  • Anchor the card to a real, visible control; reposition on resize
  • Keep the tip under 40 words with a single action
  • Persist dismissal server-side so it does not return on another device
  • Offer "Restart tips" in help settings

Accessibility

  • Coach mark is role="dialog" with aria-labelledby, focus moves to "Got it" and returns to the launcher on close
  • Esc closes the tip
  • Illustration has empty alt (decorative)
  • Scrim uses aria-hidden on background content while the tip is open
  • Segmented tabs use Radix Tabs with arrow-key navigation
  • Updated times use <time> with full date in title

Security

  • RLS on documents and folders by workspace membership; private folders owner-only
  • Tour state writes limited to the current user row
  • Signed, expiring URLs for thumbnails
  • Validate folder names (length, no control characters)

Build prompt

The baseline every prompt in the catalog assumes, then this design’s own ten sections, from goal to guardrails.

The baseline
### How to use these prompts
Paste an entry's build prompt into your coding agent as the first message. Each prompt names its own stack, tokens and acceptance criteria; the rules below apply to all of them and can be prepended once per project.

### Engineering baseline
- TypeScript strict mode, no `any`, small typed components, feature folders, and one source of truth for design tokens (CSS variables consumed by Tailwind).
- Validate every input with a shared zod schema on the client and again on the server or edge function. Never trust client-side checks alone.
- Show loading, empty and error states for every async view. Surface errors in plain language with a retry, and log details to the console in development only.
- Keep secrets out of the bundle. Only publishable keys (for example a Supabase anon key) belong in client code; service-role keys, API keys and webhooks live in server or edge-function environment variables.

### Data and auth baseline (full-stack entries)
- Enable Row Level Security on every table before inserting data. Default-deny, then add owner-scoped policies (`auth.uid() = user_id`) and explicit role checks for admin views.
- Store roles in a separate table checked by a security-definer function, never in a user-editable profile field.
- Upload files to private storage buckets with size and MIME limits, and serve them through signed URLs.
- Rate-limit public endpoints (forms, auth, AI calls) and add a honeypot field or captcha to anonymous forms.
- Take payments through a hosted checkout and verify webhooks by signature. Never handle raw card data.

### Accessibility and UX baseline
- Target WCAG 2.2 AA: 4.5:1 contrast for normal text and 3:1 for large text, input borders, focus rings and meaningful icons or chart lines. Every palette in this catalog lists its verified pairs; re-check with a contrast tool after any colour change.
- Keep body text at 16px or larger with 1.5 line height, nothing below 12px, no light weights under 24px, and uppercase only for short labels.
- Give every interactive element a visible focus ring, full keyboard support, semantic landmarks, labelled form fields, and alt text on meaningful images.
- Respect `prefers-reduced-motion` for every animation. Give drag-and-drop and carousels keyboard and button alternatives.
- Build mobile-first and test at 375px, 768px and 1280px.

### Content guardrails
- Use original copy, fictional sample data and placeholder or licensed imagery. Do not reuse another product's name, logo, screenshots or marketing text.
- Label demo testimonials and metrics as samples. Collect the minimum personal data the feature needs.

### SaaS screen baseline
- Design every screen for its full set of states: first-run empty, loading skeleton, partial data, error with retry, permission-denied, and success feedback. Each entry lists the states its screen needs.
- Keep destructive actions (delete, revoke, downgrade, remove member) behind a confirmation that names the object, and prefer undo over a second dialog where the action is reversible.
- Enforce authorisation on the server for every action a screen exposes. Hiding a button is not access control; check the role again in the API or RLS policy.
- Never show secrets (API keys, tokens) in full after creation. Show them once, then mask them, and offer rotate and revoke.
- Keep the app shell (navigation, workspace switcher, account menu) consistent across screens, and preserve filters, sort and scroll position when the user navigates back.
### Goal
Build **Signpost**, the first-visit home screen of a presentation workspace with a single onboarding coach mark. The page shows recent documents and quick-start actions behind a dim scrim; a dark tip card points at the help launcher in the bottom-right corner and says where to find help. One click dismisses it for good.

### Stack
React + TypeScript + Vite, Tailwind CSS, shadcn/ui on Radix (Popover, Tabs, Dialog primitives), lucide-react icons, Motion for the scrim and card entrance, TanStack Query, date-fns for relative times. Supabase for auth, documents and per-user tour state.

### Pages & layout
1. **Sidebar** (240px, light grey): account switcher with bell; accent "Upgrade workspace" link; search-and-commands field; Recents, Library, Links nav; Team and Private groups with "Create folder"; promo card ("Build a shared library" with Set up button); Invite, Trash, Install app at the bottom.
2. **Main**: H1 "Recents"; a row of three quick-start tiles; By me / By everyone tabs; a 3-column grid of document cards with thumbnail, optional lock badge, title and "In Private · Updated 2 minutes ago".
3. **Overlay**: a 50% black scrim over the whole page with a circular cut-out around the help launcher; the dark tip card sits above it with a small arrow, illustration, one sentence and a "Got it" button, plus a close icon.
4. Tablet: icon-only sidebar and a 2-column grid. Mobile: drawer sidebar, single column, tip rendered as a bottom sheet.

### Design system
- Colors: `--bg: #ffffff` (main canvas), `--sidebar: #f6f6f8` (sidebar background), `--fg: #1c1c24` (primary text), `--muted: #686874` (meta text, descriptions), `--accent: #5b3fd6` (links, upgrade, primary button), `--tip-bg: #2a2c3a` (coach-mark card background), `--tip-fg: #f4f4f8` (text on coach-mark), `--scrim: #7f7f7f` (overlay (rgba 0,0,0,.5) (decorative)), `--border: #e4e4ea` (tile outlines (decorative)), `--input-border: #8a8a96` (search field outline).
- Fonts: Inter 400/500/700 (similar to the observed sans). H1 26px/700; body 16px/1.5; nav 14px/500; meta 13px; tip text 15px/1.55.
- Spacing: 8px scale; 24px page gutter; 20px grid gap; 16px sidebar padding.
- Radius: 8px tiles and buttons; 12px thumbnails and tip card.
- Shadows: tiles none (border only); tip card `0 12px 32px rgba(0,0,0,.35)`.
- Motion: scrim 200ms fade; card 250ms rise from 8px; one pulse on the spotlight ring; none under reduced motion.

### Components & interactions
Sidebar, AccountSwitcher, CommandSearch (opens palette with Cmd/Ctrl+K), FolderGroup (collapsible), QuickStartTile, SegmentedTabs, DocumentCard (hover lift, lock badge, fallback thumbnail), PromoCard, HelpLauncher, CoachMark (anchored popover that re-measures on resize and scroll, arrow follows the anchor), Scrim with SVG mask cut-out. Got it, close and Esc all dismiss and write `tour_state.help_tip = 'dismissed'`. Clicking the scrim does not dismiss.

### Data & state
Tables: `workspaces`, `folders(id, workspace_id, name, scope)`, `documents(id, folder_id, title, thumbnail_path, locked, owner_id, updated_at)`, `profiles(id, name, avatar_url, tour_state jsonb)`. Mock three starter documents with invented titles ("Hello and welcome", "Set up your space", "Five quick tips"). Handle states: tip visible, dismissed, empty recents, thumbnail loading/failed, locked document, offline (tiles disabled with a banner), long titles.

### Accessibility
The coach mark is a non-modal-looking but focus-trapped `role="dialog"` labelled by its text; focus lands on "Got it" and returns to the launcher afterwards. Background content is aria-hidden while it is open. The illustration is decorative. Tabs support arrow keys. All times are `<time>` elements. Focus rings: 2px accent on light surfaces, 2px near-white on the dark card.
Verified contrast: body text: #1c1c24 on #ffffff = 16.92:1; muted meta text: #686874 on #ffffff = 5.50:1; nav text on sidebar: #1c1c24 on #f6f6f8 = 15.68:1; accent link on sidebar: #5b3fd6 on #f6f6f8 = 6.22:1; button label on accent: #ffffff on #5b3fd6 = 6.72:1; tip text on dark card: #f4f4f8 on #2a2c3a = 12.60:1; search input border: #8a8a96 on #f6f6f8 = 3.16:1; focus ring on dark card: #f4f4f8 on #2a2c3a = 12.60:1.

### Security
RLS: members of a workspace can select its team folders and documents; private folders and their documents are owner-only. Users may update only their own `tour_state`. Serve thumbnails through signed URLs from a private bucket. Validate folder names with zod.

### Performance & SEO
Lazy-load the illustration and the command palette. Use responsive thumbnail sizes with `loading="lazy"`. Prefetch the first document on hover. App routes are noindex.

### Guardrails
- Invented names, titles and illustration; no real brand marks.
- Never chain more than one coach mark on this screen.
- Keep the tip readable at 320px as a bottom sheet.
- Acceptance criteria: (1) the tip shows once for a new user; (2) Got it, close and Esc dismiss and persist it; (3) the spotlight tracks the launcher on resize; (4) all states render with mock data; (5) keyboard and screen-reader flow works end to end.

Open the builderAll templatesThis palette on its own