Skip to main content
vibld

Template

Nessary

In a personal task-management app, settings open as a large floating card. Deleting the account requires ticking 'Yes, I want to delete my account' before the red button activates, and the copy mentions that any paid subscription is cancelled.

Delete-account dialog with acknowledgement checkbox in a task app · App screen: delete account · 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.

  • Plus Jakarta SansHeadings: Plus Jakarta Sans 700 36px Settings title, 20px dialog title
  • Plus Jakarta SansBody: Plus Jakarta Sans 400 16px / 1.5

Patterns

  • acknowledgement checkbox gates destructive button
  • settings as a floating card over the app
  • pill tabs (profile, features, subscriptions, integrations)
  • decorative 3D art panel
  • task-list sidebar with emoji list icons

States it is designed for

  • checkbox unticked (button disabled)
  • ticked
  • deleting
  • error
  • paid subscription active (copy mentions cancellation and last billing date)
  • offline (button disabled with note)

Who it is for

  • individual productivity users
  • people with paid personal plans

Layout

  1. App sidebar: inbox, today, tasks, messages, recent, lists (with nested groups and emoji icons), avatar bottom
  2. Settings card (left ~50%): sign-out pill top-right, large 'Settings' title, pill tabs, Personal info card (avatar, first name, email), Account deletion card with soft red button
  3. Right ~40%: full-height rounded panel with a decorative 3D render
  4. Dialog (~300px) over light scrim: title, explanation, checkbox row, Cancel pill + Delete account pill (disabled pale until checked)
  5. Mobile: art panel hidden; settings full screen; dialog 90vw

Palette

Soft, personal and polished; the art panel adds calm, the dialog stays small.

  • app surface#f4f3f6
  • card#ffffff
  • dialog#f7f6fa
  • text#1d1b22
  • muted text#67646f
  • danger#d92d4a
  • on danger#ffffff
  • danger disabled#f6c1c8
  • checkbox border#8a8792
  • tab active bg#e9e7ee
  • focus ring#2563eb

Every checked pair, measured again

SampleWhereRatioNeeds
Aabody text on dialog15.84:14.5:1
Aamuted text on dialog5.38:14.5:1
AaDelete label on red (enabled)4.75:14.5:1
Aasoft red link text on card4.75:14.5:1
checkbox border on dialog3.27:13:1
Aaactive tab text13.90:14.5:1
focus ring on dialog4.80: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.

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

Type scale

Display
Plus Jakarta Sans 700 36px Settings title, 20px dialog title
Body
Plus Jakarta Sans 400 16px / 1.5

Similar to the observed geometric sans.

Spacing and imagery

Relaxed; 32px card padding, 16px between cards; radius 20px settings card and art panel, 14px dialog, 999px pills; card shadow 0 20px 60px rgba(29,27,34,.12).

One abstract 3D render (arches, sphere, water) in the side panel; emoji icons for lists.

Components

  • TaskSidebar with ListTree
  • SettingsCard with PillTabs
  • PersonalInfoCard
  • AccountDeletionCard
  • DeleteAccountDialog
  • AcknowledgeCheckbox
  • ArtPanel

Interactions

  • Delete button disabled until the checkbox is ticked; ticking animates it to solid red (150ms)
  • Cancel closes and unticks
  • Delete shows spinner, then signs out to a farewell screen
  • Sign out pill works independently
  • Tabs switch settings panes without closing the card

Data

  • User{id, first_name, email, avatar_url}
  • List{id, user_id, name, emoji, parent_id?}
  • Task{id, list_id, title, due?, done}
  • Subscription{user_id, plan (free|pro), renews_at}

Guardrails

Experience

  • Gate destruction with an explicit acknowledgement, not typing
  • Mention paid plan consequences
  • Keep Cancel always enabled
  • Confirm on a separate farewell screen

Accessibility

  • Checkbox has a visible label and the button's disabled state is explained
  • Dialog is alertdialog, focus starts on the checkbox
  • Art panel is aria-hidden
  • Pill tabs are a tablist
  • Red is never the only indicator; button text says Delete account

Security

  • Re-authenticate before deletion
  • Cancel subscriptions server-side before deleting data
  • Cascade-delete personal data and purge file uploads
  • Audit and email a confirmation to the address on file

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 **Nessary**, the settings card of a personal task app with a checkbox-gated delete-account dialog. Include the task sidebar with fictional lists and a decorative art panel.

### Stack
Use React 18, TypeScript, Vite, Tailwind CSS, shadcn/ui, Radix, lucide-react, TanStack Query, react-hook-form, zod, Supabase.  Use Supabase for Auth, Postgres (row-level security on every table) and Storage where noted; keep only the anon key in the browser and run privileged work in Edge Functions.

### Pages & layout
1. **/settings/profile** with dialog.
2. **/farewell** after deletion.
3. Lists and tasks views as stubs for the sidebar.

Regions, in order:
- App sidebar: inbox, today, tasks, messages, recent, lists (with nested groups and emoji icons), avatar bottom
- Settings card (left ~50%): sign-out pill top-right, large 'Settings' title, pill tabs, Personal info card (avatar, first name, email), Account deletion card with soft red button
- Right ~40%: full-height rounded panel with a decorative 3D render
- Dialog (~300px) over light scrim: title, explanation, checkbox row, Cancel pill + Delete account pill (disabled pale until checked)
- Mobile: art panel hidden; settings full screen; dialog 90vw

### Design system
- Colors: `--app-surface: #f4f3f6` (app surface), `--card: #ffffff` (card), `--dialog: #f7f6fa` (dialog), `--text: #1d1b22` (text), `--muted-text: #67646f` (muted text), `--danger: #d92d4a` (danger), `--on-danger: #ffffff` (on danger), `--danger-disabled: #f6c1c8` (danger disabled), `--checkbox-border: #8a8792` (checkbox border), `--tab-active-bg: #e9e7ee` (tab active bg), `--focus-ring: #2563eb` (focus ring).
- Fonts: Plus Jakarta Sans 700 36px Settings title, 20px dialog title for headings; Plus Jakarta Sans 400 16px / 1.5 for body. Similar to the observed geometric sans.
- Spacing, radius and shadows: Relaxed; 32px card padding, 16px between cards; radius 20px settings card and art panel, 14px dialog, 999px pills; card shadow 0 20px 60px rgba(29,27,34,.12).
- Motion: 150-200 ms ease-out for hover, focus and overlay transitions; overlays fade and scale from 98% to 100%; everything collapses to an instant change under prefers-reduced-motion.
- Mood: Soft, personal and polished; the art panel adds calm, the dialog stays small. Imagery: One abstract 3D render (arches, sphere, water) in the side panel; emoji icons for lists.

### Components & interactions
Build these components: TaskSidebar with ListTree; SettingsCard with PillTabs; PersonalInfoCard; AccountDeletionCard; DeleteAccountDialog; AcknowledgeCheckbox; ArtPanel.

- Delete button disabled until the checkbox is ticked; ticking animates it to solid red (150ms)
- Cancel closes and unticks
- Delete shows spinner, then signs out to a farewell screen
- Sign out pill works independently
- Tabs switch settings panes without closing the card

### Data & state
Model: `User{id, first_name, email, avatar_url}`; `List{id, user_id, name, emoji, parent_id?}`; `Task{id, list_id, title, due?, done}`; `Subscription{user_id, plan (free|pro), renews_at}`.

Deletion cascades lists and tasks via foreign keys and cancels the subscription via the hosted checkout provider in an Edge Function.

States to implement and demo:
- checkbox unticked (button disabled)
- ticked
- deleting
- error
- paid subscription active (copy mentions cancellation and last billing date)
- offline (button disabled with note)

### Accessibility
- Checkbox has a visible label and the button's disabled state is explained
- Dialog is alertdialog, focus starts on the checkbox
- Art panel is aria-hidden
- Pill tabs are a tablist
- Red is never the only indicator; button text says Delete account
- Body text is 16px with line-height 1.5 (15px only inside dense tables), nothing renders below 12px, weights of 300 or lighter appear only at 24px and above, and uppercase is limited to short labels with at least 0.05em tracking.
Verified contrast: body text on dialog: #1d1b22 on #f7f6fa = 15.84:1; muted text on dialog: #67646f on #f7f6fa = 5.38:1; Delete label on red (enabled): #ffffff on #d92d4a = 4.75:1; soft red link text on card: #d92d4a on #ffffff = 4.75:1; checkbox border on dialog: #8a8792 on #f7f6fa = 3.27:1; active tab text: #1d1b22 on #e9e7ee = 13.90:1; focus ring on dialog: #2563eb on #f7f6fa = 4.80:1.

### Security
- Re-authenticate before deletion
- Cancel subscriptions server-side before deleting data
- Cascade-delete personal data and purge file uploads
- Audit and email a confirmation to the address on file

RLS: `lists`, `tasks` - owner-only (`user_id = auth.uid()` via list); `subscriptions` - select own, writes via service role.

### Performance & SEO
Serve the art as a compressed AVIF and skip it on small screens. Noindex.

### Guardrails
- Gate destruction with an explicit acknowledgement, not typing
- Mention paid plan consequences
- Keep Cancel always enabled
- Confirm on a separate farewell screen
- Use the product name Nessary and fresh, generic copy throughout; all people, companies, amounts and IDs are invented, and no third-party brand, logo or wordmark appears.
- Keep components small and typed (no `any`), and surface every failure visibly instead of swallowing it.

Acceptance criteria:
- [ ] Button only enables after acknowledgement
- [ ] Deletion cascades and signs out
- [ ] Art hidden at 390px
- [ ] Keyboard works
- [ ] Contrast pairs pass

Open the builderAll templatesThis palette on its own