Skip to main content
vibld

Template

Rakemoor

While a news-events search job runs, the user sees which step it is on, and the configuration used (mode, validators, sources) locked in a side panel. A floating quick-start checklist rewards finishing the first search.

Search-run progress screen with locked configuration panel · App screen: loading · 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 500, 18px query title; 20px panel headings
  • InterBody: Inter 400, 16px, line-height 1.5

Patterns

  • query as page title
  • step counter progress message
  • faded skeleton rows behind status
  • locked right configuration panel
  • segmented control (disabled)
  • validator list with snake_case keys
  • collapsible panel sections
  • floating quick-start checklist with reward
  • grouped left sidebar with project picker

States it is designed for

  • queued (Step 1)
  • running steps 2-4 with messages
  • completed with results
  • failed with reason and 'Run again'
  • no results: empty state suggesting broader validators
  • cancelled by user
  • credits exhausted before run

Who it is for

  • analysts and developers using a news data API
  • risk and research teams monitoring events

Layout

  1. left sidebar: logo, grouped nav (Events: project picker, New search, Past searches, Monitoring, Watchlist; News: Overview, Playground; Manage: Keys, Usage, Billing), quick-start trigger at bottom
  2. header: the natural-language query as title
  3. main results pane: faded skeleton rows with centred 'Step 4 of 4: Finishing…' and a sub-message
  4. right panel (~290px): Configuration with lock icon, Search mode segmented control, Validators section, Sources section, Additional settings
  5. quick-start popover anchored bottom-left over main
  6. below 1100px the configuration panel becomes a toggleable drawer; below 768px sidebar collapses to a menu button

Palette

Focused and transparent: the tool shows exactly what it's doing and with which rules.

  • bg#ffffff
  • canvas#f6f7fb
  • text#171a24
  • muted#5b6173
  • accent#4b57d6
  • segment#eef0f4
  • warn#b7791f
  • border#8a90a2
  • skeleton#eceef3

Every checked pair, measured again

SampleWhereRatioNeeds
Aabody text17.36:14.5:1
Aamuted text6.17:14.5:1
Aavalidator description5.78:14.5:1
Aasegment label5.41:14.5:1
mode icon3.19:13:1
input border3.19:13:1
focus ring5.78: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 500, 18px query title; 20px panel headings
Body
Inter 400, 16px, line-height 1.5

Section labels 12px uppercase 600 with 0.06em tracking; validator keys in JetBrains Mono 14px 500.

Spacing and imagery

Density: Medium-dense data tool. Grid: 4px base; panel padding 16px; section gaps 16px. Container: fluid; right panel fixed 300px. Radius: 10px panels, 6px segmented control, 12px popover. Shadows: Popover 0 12px 32px rgba(15,20,40,0.16); panels flat.

Small line icons; no images. Skeleton rows hint at the shape of results.

Components

  • AppSidebar with ProjectPicker
  • QueryTitle
  • RunProgress (step n of m, message)
  • SkeletonResults
  • ConfigPanel (locked)
  • SegmentedControl
  • ValidatorList
  • SourcesSection
  • QuickStartPopover (0/2, reward, steps with View)

Interactions

  • Progress polls the run; when done, skeleton swaps to the results table
  • Lock icon tooltip explains config is frozen during a run
  • Sections collapse with chevrons
  • Quick-start 'View' jumps to the running search; dismiss X hides the popover
  • Esc closes the popover

Data

  • Search{id, project_id, query, mode (lite|base), status (queued|running|done|failed|cancelled), step, step_total, created_at}
  • Validator{id, search_id, key, description}
  • SourceList{id, name, kind (all|curated)}
  • OnboardingTask{user_id, key, done_at}

Guardrails

Experience

  • Always show which step is running and what it does
  • Freeze and visibly lock configuration during a run
  • Show cost per run next to the mode
  • Let the user leave the page; the run continues and appears in Past searches
  • Keep the quick-start popover dismissible and never modal

Accessibility

  • Step message in an aria-live=polite region
  • Segmented control disabled state conveyed with aria-disabled and the lock tooltip
  • Skeleton region has aria-busy=true
  • Validator keys readable (monospace but not tiny)
  • Popover is a non-modal dialog with a labelled close button

Security

  • RLS: searches readable only by project members
  • Validate validator definitions server-side (length, allowed fields)
  • Charge credits server-side only
  • Rate-limit concurrent runs per project

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 **Rakemoor**, the in-progress view of an events search in a news data product. The query is the title, the main pane shows step progress over faint result skeletons, and a locked panel on the right shows mode, validators and sources. Build the sidebar shell, this view and the quick-start popover, using a mock run that advances through four steps.

### Stack
React 18 + TypeScript + Vite, Tailwind CSS, shadcn/ui on Radix primitives and lucide-react icons. TanStack Query for server state, react-hook-form + zod for every form, date-fns for relative times. Supabase for Auth, Postgres with row-level security and Edge Functions for anything that needs a secret. Run searches in a background job; the client polls status or subscribes to a realtime channel.

### Pages & layout
1. **Sidebar** with three groups and a project picker; quick-start trigger showing 0/2 at the bottom.
2. **Run view**: query title; main pane with skeleton rows and a centred 'Step 4 of 4: Finishing…' plus sub-message.
3. **Configuration panel**: lock icon; Search mode segmented (fast vs thorough) with a cost line; Validators (key + one-line rule); Sources ('all sources' note); Additional settings disclosure.
4. **Quick-start popover**: title, counter, reward line, two steps (current one highlighted with spinner and a View button).

### Design system
- Colors: `--bg: #ffffff` (panels), `--canvas: #f6f7fb` (page), `--text: #171a24` (primary text), `--muted: #5b6173` (descriptions), `--accent: #4b57d6` (validator descriptions and links), `--segment: #eef0f4` (segmented control track), `--warn: #b7791f` (mode icon), `--border: #8a90a2` (inputs and dividers that matter), `--skeleton: #eceef3` (skeleton bars).
- Fonts: Inter 500, 18px query title; 20px panel headings for headings; Inter 400, 16px, line-height 1.5 for body. Section labels 12px uppercase 600 with 0.06em tracking; validator keys in JetBrains Mono 14px 500.
- Spacing: Medium-dense data tool. 4px base; panel padding 16px; section gaps 16px. Container: fluid; right panel fixed 300px.
- Radius: 10px panels, 6px segmented control, 12px popover.
- Shadows: Popover 0 12px 32px rgba(15,20,40,0.16); panels flat.
- Motion: Step text crossfades between steps; skeleton shimmer 1.2s (off with reduced motion); quick-start checklist item ticks with a 150ms check draw.

### Components & interactions
ConfigPanel reuses the same fields as the new-search form but renders them read-only with a lock. ValidatorList shows monospace keys with a one-line plain-English rule in accent colour.

- Progress polls the run; when done, skeleton swaps to the results table
- Lock icon tooltip explains config is frozen during a run
- Sections collapse with chevrons
- Quick-start 'View' jumps to the running search; dismiss X hides the popover
- Esc closes the popover

### Data & state
Mock a run moving through steps every 3 seconds, then show 12 invented result rows. Validators are invented (e.g. trade-policy topic, date window). TanStack Query polls every 2s while running.

Entities: `Search{id, project_id, query, mode (lite|base), status (queued|running|done|failed|cancelled), step, step_total, created_at}`; `Validator{id, search_id, key, description}`; `SourceList{id, name, kind (all|curated)}`; `OnboardingTask{user_id, key, done_at}`.

States to build and show in a dev-only state switcher:
- queued (Step 1)
- running steps 2-4 with messages
- completed with results
- failed with reason and 'Run again'
- no results: empty state suggesting broader validators
- cancelled by user
- credits exhausted before run

### Accessibility
- Step message in an aria-live=polite region
- Segmented control disabled state conveyed with aria-disabled and the lock tooltip
- Skeleton region has aria-busy=true
- Validator keys readable (monospace but not tiny)
- Popover is a non-modal dialog with a labelled close button
Verified contrast: body text: #171a24 on #ffffff = 17.36:1; muted text: #5b6173 on #ffffff = 6.17:1; validator description: #4b57d6 on #ffffff = 5.78:1; segment label: #5b6173 on #eef0f4 = 5.41:1; mode icon: #b7791f on #eef0f4 = 3.19:1; input border: #8a90a2 on #ffffff = 3.19:1; focus ring: #4b57d6 on #ffffff = 5.78:1.

### Security
- RLS: searches readable only by project members
- Validate validator definitions server-side (length, allowed fields)
- Charge credits server-side only
- Rate-limit concurrent runs per project
RLS detail: `searches` and `validators` select/insert for project members, update only by the service role (status/step); `onboarding_tasks` owner-only.

### Performance & SEO
Stop polling on completion; virtualise results beyond 100 rows. Private route: noindex.

### Guardrails
- Always show which step is running and what it does
- Freeze and visibly lock configuration during a run
- Show cost per run next to the mode
- Let the user leave the page; the run continues and appears in Past searches
- Keep the quick-start popover dismissible and never modal
- Write fresh, generic copy and invented sample data; no real brands, logos, product names or people.
- Keep components small and typed (no `any`); surface every error visibly with a way to recover.

Acceptance criteria:
- Step text advances and is announced
- Config is locked during run and editable on 'Run again'
- Completion swaps skeleton for results
- Failures show a reason and retry
- Quick-start ticks the first task when the run completes

Open the builderAll templatesThis palette on its own